diff options
Diffstat (limited to 'src')
51 files changed, 12180 insertions, 13869 deletions
diff --git a/src/lib/libssl/src/apps/app_rand.c b/src/lib/libssl/src/apps/app_rand.c index 0dbec7d595..0d5b77e1bd 100644 --- a/src/lib/libssl/src/apps/app_rand.c +++ b/src/lib/libssl/src/apps/app_rand.c | |||
| @@ -120,7 +120,7 @@ static int seeded = 0; | |||
| 120 | static int egdsocket = 0; | 120 | static int egdsocket = 0; |
| 121 | 121 | ||
| 122 | int | 122 | int |
| 123 | app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn) | 123 | app_RAND_load_file(const char *file, BIO * bio_e, int dont_warn) |
| 124 | { | 124 | { |
| 125 | int consider_randfile = (file == NULL); | 125 | int consider_randfile = (file == NULL); |
| 126 | char buffer[200]; | 126 | char buffer[200]; |
| @@ -129,8 +129,10 @@ app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn) | |||
| 129 | if (file == NULL) | 129 | if (file == NULL) |
| 130 | file = RAND_file_name(buffer, sizeof buffer); | 130 | file = RAND_file_name(buffer, sizeof buffer); |
| 131 | else if (RAND_egd(file) > 0) { | 131 | else if (RAND_egd(file) > 0) { |
| 132 | /* we try if the given filename is an EGD socket. | 132 | /* |
| 133 | if it is, we don't write anything back to the file. */ | 133 | * we try if the given filename is an EGD socket. if it is, |
| 134 | * we don't write anything back to the file. | ||
| 135 | */ | ||
| 134 | egdsocket = 1; | 136 | egdsocket = 1; |
| 135 | return 1; | 137 | return 1; |
| 136 | } | 138 | } |
| @@ -140,8 +142,9 @@ app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn) | |||
| 140 | BIO_printf(bio_e, "unable to load 'random state'\n"); | 142 | BIO_printf(bio_e, "unable to load 'random state'\n"); |
| 141 | BIO_printf(bio_e, "This means that the random number generator has not been seeded\n"); | 143 | BIO_printf(bio_e, "This means that the random number generator has not been seeded\n"); |
| 142 | BIO_printf(bio_e, "with much random data.\n"); | 144 | BIO_printf(bio_e, "with much random data.\n"); |
| 143 | if (consider_randfile) /* explanation does not apply when a file is explicitly named */ | 145 | if (consider_randfile) { /* explanation does not |
| 144 | { | 146 | * apply when a file is |
| 147 | * explicitly named */ | ||
| 145 | BIO_printf(bio_e, "Consider setting the RANDFILE environment variable to point at a file that\n"); | 148 | BIO_printf(bio_e, "Consider setting the RANDFILE environment variable to point at a file that\n"); |
| 146 | BIO_printf(bio_e, "'random' data can be kept in (the file will be overwritten).\n"); | 149 | BIO_printf(bio_e, "'random' data can be kept in (the file will be overwritten).\n"); |
| 147 | } | 150 | } |
| @@ -165,8 +168,8 @@ app_RAND_load_files(char *name) | |||
| 165 | last = 0; | 168 | last = 0; |
| 166 | for (p = name; | 169 | for (p = name; |
| 167 | ((*p != '\0') && (*p != ':')); p++); | 170 | ((*p != '\0') && (*p != ':')); p++); |
| 168 | if (*p == '\0') | 171 | if (*p == '\0') |
| 169 | last = 1; | 172 | last = 1; |
| 170 | *p = '\0'; | 173 | *p = '\0'; |
| 171 | n = name; | 174 | n = name; |
| 172 | name = p + 1; | 175 | name = p + 1; |
| @@ -187,15 +190,16 @@ app_RAND_load_files(char *name) | |||
| 187 | } | 190 | } |
| 188 | 191 | ||
| 189 | int | 192 | int |
| 190 | app_RAND_write_file(const char *file, BIO *bio_e) | 193 | app_RAND_write_file(const char *file, BIO * bio_e) |
| 191 | { | 194 | { |
| 192 | char buffer[200]; | 195 | char buffer[200]; |
| 193 | 196 | ||
| 194 | if (egdsocket || !seeded) | 197 | if (egdsocket || !seeded) |
| 195 | /* If we did not manage to read the seed file, | 198 | /* |
| 196 | * we should not write a low-entropy seed file back -- | 199 | * If we did not manage to read the seed file, we should not |
| 197 | * it would suppress a crucial warning the next time | 200 | * write a low-entropy seed file back -- it would suppress a |
| 198 | * we want to use it. */ | 201 | * crucial warning the next time we want to use it. |
| 202 | */ | ||
| 199 | return 0; | 203 | return 0; |
| 200 | 204 | ||
| 201 | if (file == NULL) | 205 | if (file == NULL) |
diff --git a/src/lib/libssl/src/apps/apps.c b/src/lib/libssl/src/apps/apps.c index 7a8618f9bf..c0130d4cbc 100644 --- a/src/lib/libssl/src/apps/apps.c +++ b/src/lib/libssl/src/apps/apps.c | |||
| @@ -146,12 +146,13 @@ typedef struct { | |||
| 146 | 146 | ||
| 147 | static UI_METHOD *ui_method = NULL; | 147 | static UI_METHOD *ui_method = NULL; |
| 148 | 148 | ||
| 149 | static int set_table_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL *in_tbl); | 149 | static int set_table_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL * in_tbl); |
| 150 | static int set_multi_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL *in_tbl); | 150 | static int set_multi_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL * in_tbl); |
| 151 | 151 | ||
| 152 | #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA) | 152 | #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA) |
| 153 | /* Looks like this stuff is worth moving into separate function */ | 153 | /* Looks like this stuff is worth moving into separate function */ |
| 154 | static EVP_PKEY *load_netscape_key(BIO *err, BIO *key, const char *file, | 154 | static EVP_PKEY * |
| 155 | load_netscape_key(BIO * err, BIO * key, const char *file, | ||
| 155 | const char *key_descrip, int format); | 156 | const char *key_descrip, int format); |
| 156 | #endif | 157 | #endif |
| 157 | 158 | ||
| @@ -173,7 +174,7 @@ str2fmt(char *s) | |||
| 173 | else if ((*s == 'M') || (*s == 'm')) | 174 | else if ((*s == 'M') || (*s == 'm')) |
| 174 | return (FORMAT_MSBLOB); | 175 | return (FORMAT_MSBLOB); |
| 175 | else if ((*s == '1') || | 176 | else if ((*s == '1') || |
| 176 | (strcmp(s, "PKCS12") == 0) || (strcmp(s, "pkcs12") == 0) || | 177 | (strcmp(s, "PKCS12") == 0) || (strcmp(s, "pkcs12") == 0) || |
| 177 | (strcmp(s, "P12") == 0) || (strcmp(s, "p12") == 0)) | 178 | (strcmp(s, "P12") == 0) || (strcmp(s, "p12") == 0)) |
| 178 | return (FORMAT_PKCS12); | 179 | return (FORMAT_PKCS12); |
| 179 | else if ((*s == 'E') || (*s == 'e')) | 180 | else if ((*s == 'E') || (*s == 'e')) |
| @@ -201,7 +202,7 @@ program_name(char *in, char *out, int size) | |||
| 201 | } | 202 | } |
| 202 | 203 | ||
| 203 | int | 204 | int |
| 204 | chopup_args(ARGS *arg, char *buf, int *argc, char **argv[]) | 205 | chopup_args(ARGS * arg, char *buf, int *argc, char **argv[]) |
| 205 | { | 206 | { |
| 206 | int num, i; | 207 | int num, i; |
| 207 | char *p; | 208 | char *p; |
| @@ -212,7 +213,7 @@ chopup_args(ARGS *arg, char *buf, int *argc, char **argv[]) | |||
| 212 | i = 0; | 213 | i = 0; |
| 213 | if (arg->count == 0) { | 214 | if (arg->count == 0) { |
| 214 | arg->count = 20; | 215 | arg->count = 20; |
| 215 | arg->data = (char **)malloc(sizeof(char *)*arg->count); | 216 | arg->data = (char **) malloc(sizeof(char *) * arg->count); |
| 216 | } | 217 | } |
| 217 | for (i = 0; i < arg->count; i++) | 218 | for (i = 0; i < arg->count; i++) |
| 218 | arg->data[i] = NULL; | 219 | arg->data[i] = NULL; |
| @@ -232,8 +233,8 @@ chopup_args(ARGS *arg, char *buf, int *argc, char **argv[]) | |||
| 232 | if (num >= arg->count) { | 233 | if (num >= arg->count) { |
| 233 | char **tmp_p; | 234 | char **tmp_p; |
| 234 | int tlen = arg->count + 20; | 235 | int tlen = arg->count + 20; |
| 235 | tmp_p = (char **)realloc(arg->data, | 236 | tmp_p = (char **) realloc(arg->data, |
| 236 | sizeof(char *)*tlen); | 237 | sizeof(char *) * tlen); |
| 237 | if (tmp_p == NULL) | 238 | if (tmp_p == NULL) |
| 238 | return 0; | 239 | return 0; |
| 239 | arg->data = tmp_p; | 240 | arg->data = tmp_p; |
| @@ -245,16 +246,16 @@ chopup_args(ARGS *arg, char *buf, int *argc, char **argv[]) | |||
| 245 | arg->data[num++] = p; | 246 | arg->data[num++] = p; |
| 246 | 247 | ||
| 247 | /* now look for the end of this */ | 248 | /* now look for the end of this */ |
| 248 | if ((*p == '\'') || (*p == '\"')) /* scan for closing quote */ | 249 | if ((*p == '\'') || (*p == '\"')) { /* scan for closing |
| 249 | { | 250 | * quote */ |
| 250 | i= *(p++); | 251 | i = *(p++); |
| 251 | arg->data[num - 1]++; /* jump over quote */ | 252 | arg->data[num - 1]++; /* jump over quote */ |
| 252 | while (*p && (*p != i)) | 253 | while (*p && (*p != i)) |
| 253 | p++; | 254 | p++; |
| 254 | *p = '\0'; | 255 | *p = '\0'; |
| 255 | } else { | 256 | } else { |
| 256 | while (*p && ((*p != ' ') && | 257 | while (*p && ((*p != ' ') && |
| 257 | (*p != '\t') && (*p != '\n'))) | 258 | (*p != '\t') && (*p != '\n'))) |
| 258 | p++; | 259 | p++; |
| 259 | 260 | ||
| 260 | if (*p == '\0') | 261 | if (*p == '\0') |
| @@ -278,7 +279,8 @@ app_init(long mesgwin) | |||
| 278 | #endif | 279 | #endif |
| 279 | 280 | ||
| 280 | 281 | ||
| 281 | int dump_cert_text (BIO *out, X509 *x) | 282 | int |
| 283 | dump_cert_text(BIO * out, X509 * x) | ||
| 282 | { | 284 | { |
| 283 | char *p; | 285 | char *p; |
| 284 | 286 | ||
| @@ -297,22 +299,22 @@ int dump_cert_text (BIO *out, X509 *x) | |||
| 297 | } | 299 | } |
| 298 | 300 | ||
| 299 | static int | 301 | static int |
| 300 | ui_open(UI *ui) | 302 | ui_open(UI * ui) |
| 301 | { | 303 | { |
| 302 | return UI_method_get_opener(UI_OpenSSL())(ui); | 304 | return UI_method_get_opener(UI_OpenSSL()) (ui); |
| 303 | } | 305 | } |
| 304 | 306 | ||
| 305 | static int | 307 | static int |
| 306 | ui_read(UI *ui, UI_STRING *uis) | 308 | ui_read(UI * ui, UI_STRING * uis) |
| 307 | { | 309 | { |
| 308 | if (UI_get_input_flags(uis) & UI_INPUT_FLAG_DEFAULT_PWD && | 310 | if (UI_get_input_flags(uis) & UI_INPUT_FLAG_DEFAULT_PWD && |
| 309 | UI_get0_user_data(ui)) { | 311 | UI_get0_user_data(ui)) { |
| 310 | switch (UI_get_string_type(uis)) { | 312 | switch (UI_get_string_type(uis)) { |
| 311 | case UIT_PROMPT: | 313 | case UIT_PROMPT: |
| 312 | case UIT_VERIFY: | 314 | case UIT_VERIFY: |
| 313 | { | 315 | { |
| 314 | const char *password = | 316 | const char *password = |
| 315 | ((PW_CB_DATA *)UI_get0_user_data(ui))->password; | 317 | ((PW_CB_DATA *) UI_get0_user_data(ui))->password; |
| 316 | if (password && password[0] != '\0') { | 318 | if (password && password[0] != '\0') { |
| 317 | UI_set_result(ui, uis, password); | 319 | UI_set_result(ui, uis, password); |
| 318 | return 1; | 320 | return 1; |
| @@ -322,20 +324,20 @@ ui_read(UI *ui, UI_STRING *uis) | |||
| 322 | break; | 324 | break; |
| 323 | } | 325 | } |
| 324 | } | 326 | } |
| 325 | return UI_method_get_reader(UI_OpenSSL())(ui, uis); | 327 | return UI_method_get_reader(UI_OpenSSL()) (ui, uis); |
| 326 | } | 328 | } |
| 327 | 329 | ||
| 328 | static int | 330 | static int |
| 329 | ui_write(UI *ui, UI_STRING *uis) | 331 | ui_write(UI * ui, UI_STRING * uis) |
| 330 | { | 332 | { |
| 331 | if (UI_get_input_flags(uis) & UI_INPUT_FLAG_DEFAULT_PWD && | 333 | if (UI_get_input_flags(uis) & UI_INPUT_FLAG_DEFAULT_PWD && |
| 332 | UI_get0_user_data(ui)) { | 334 | UI_get0_user_data(ui)) { |
| 333 | switch (UI_get_string_type(uis)) { | 335 | switch (UI_get_string_type(uis)) { |
| 334 | case UIT_PROMPT: | 336 | case UIT_PROMPT: |
| 335 | case UIT_VERIFY: | 337 | case UIT_VERIFY: |
| 336 | { | 338 | { |
| 337 | const char *password = | 339 | const char *password = |
| 338 | ((PW_CB_DATA *)UI_get0_user_data(ui))->password; | 340 | ((PW_CB_DATA *) UI_get0_user_data(ui))->password; |
| 339 | if (password && password[0] != '\0') | 341 | if (password && password[0] != '\0') |
| 340 | return 1; | 342 | return 1; |
| 341 | } | 343 | } |
| @@ -343,13 +345,13 @@ ui_write(UI *ui, UI_STRING *uis) | |||
| 343 | break; | 345 | break; |
| 344 | } | 346 | } |
| 345 | } | 347 | } |
| 346 | return UI_method_get_writer(UI_OpenSSL())(ui, uis); | 348 | return UI_method_get_writer(UI_OpenSSL()) (ui, uis); |
| 347 | } | 349 | } |
| 348 | 350 | ||
| 349 | static int | 351 | static int |
| 350 | ui_close(UI *ui) | 352 | ui_close(UI * ui) |
| 351 | { | 353 | { |
| 352 | return UI_method_get_closer(UI_OpenSSL())(ui); | 354 | return UI_method_get_closer(UI_OpenSSL()) (ui); |
| 353 | } | 355 | } |
| 354 | 356 | ||
| 355 | int | 357 | int |
| @@ -374,13 +376,13 @@ destroy_ui_method(void) | |||
| 374 | 376 | ||
| 375 | int | 377 | int |
| 376 | password_callback(char *buf, int bufsiz, int verify, | 378 | password_callback(char *buf, int bufsiz, int verify, |
| 377 | PW_CB_DATA *cb_tmp) | 379 | PW_CB_DATA * cb_tmp) |
| 378 | { | 380 | { |
| 379 | UI *ui = NULL; | 381 | UI *ui = NULL; |
| 380 | int res = 0; | 382 | int res = 0; |
| 381 | const char *prompt_info = NULL; | 383 | const char *prompt_info = NULL; |
| 382 | const char *password = NULL; | 384 | const char *password = NULL; |
| 383 | PW_CB_DATA *cb_data = (PW_CB_DATA *)cb_tmp; | 385 | PW_CB_DATA *cb_data = (PW_CB_DATA *) cb_tmp; |
| 384 | 386 | ||
| 385 | if (cb_data) { | 387 | if (cb_data) { |
| 386 | if (cb_data->password) | 388 | if (cb_data->password) |
| @@ -388,7 +390,6 @@ password_callback(char *buf, int bufsiz, int verify, | |||
| 388 | if (cb_data->prompt_info) | 390 | if (cb_data->prompt_info) |
| 389 | prompt_info = cb_data->prompt_info; | 391 | prompt_info = cb_data->prompt_info; |
| 390 | } | 392 | } |
| 391 | |||
| 392 | if (password) { | 393 | if (password) { |
| 393 | res = strlen(password); | 394 | res = strlen(password); |
| 394 | if (res > bufsiz) | 395 | if (res > bufsiz) |
| @@ -396,7 +397,6 @@ password_callback(char *buf, int bufsiz, int verify, | |||
| 396 | memcpy(buf, password, res); | 397 | memcpy(buf, password, res); |
| 397 | return res; | 398 | return res; |
| 398 | } | 399 | } |
| 399 | |||
| 400 | ui = UI_new_method(ui_method); | 400 | ui = UI_new_method(ui_method); |
| 401 | if (ui) { | 401 | if (ui) { |
| 402 | int ok = 0; | 402 | int ok = 0; |
| @@ -414,7 +414,7 @@ password_callback(char *buf, int bufsiz, int verify, | |||
| 414 | ok = UI_add_input_string(ui, prompt, ui_flags, buf, | 414 | ok = UI_add_input_string(ui, prompt, ui_flags, buf, |
| 415 | PW_MIN_LENGTH, bufsiz - 1); | 415 | PW_MIN_LENGTH, bufsiz - 1); |
| 416 | if (ok >= 0 && verify) { | 416 | if (ok >= 0 && verify) { |
| 417 | buff = (char *)malloc(bufsiz); | 417 | buff = (char *) malloc(bufsiz); |
| 418 | ok = UI_add_verify_string(ui, prompt, ui_flags, buff, | 418 | ok = UI_add_verify_string(ui, prompt, ui_flags, buff, |
| 419 | PW_MIN_LENGTH, bufsiz - 1, buf); | 419 | PW_MIN_LENGTH, bufsiz - 1, buf); |
| 420 | } | 420 | } |
| @@ -425,21 +425,20 @@ password_callback(char *buf, int bufsiz, int verify, | |||
| 425 | UI_ctrl(ui, UI_CTRL_IS_REDOABLE, 0, 0, 0)); | 425 | UI_ctrl(ui, UI_CTRL_IS_REDOABLE, 0, 0, 0)); |
| 426 | 426 | ||
| 427 | if (buff) { | 427 | if (buff) { |
| 428 | OPENSSL_cleanse(buff, (unsigned int)bufsiz); | 428 | OPENSSL_cleanse(buff, (unsigned int) bufsiz); |
| 429 | free(buff); | 429 | free(buff); |
| 430 | } | 430 | } |
| 431 | |||
| 432 | if (ok >= 0) | 431 | if (ok >= 0) |
| 433 | res = strlen(buf); | 432 | res = strlen(buf); |
| 434 | if (ok == -1) { | 433 | if (ok == -1) { |
| 435 | BIO_printf(bio_err, "User interface error\n"); | 434 | BIO_printf(bio_err, "User interface error\n"); |
| 436 | ERR_print_errors(bio_err); | 435 | ERR_print_errors(bio_err); |
| 437 | OPENSSL_cleanse(buf, (unsigned int)bufsiz); | 436 | OPENSSL_cleanse(buf, (unsigned int) bufsiz); |
| 438 | res = 0; | 437 | res = 0; |
| 439 | } | 438 | } |
| 440 | if (ok == -2) { | 439 | if (ok == -2) { |
| 441 | BIO_printf(bio_err, "aborted!\n"); | 440 | BIO_printf(bio_err, "aborted!\n"); |
| 442 | OPENSSL_cleanse(buf, (unsigned int)bufsiz); | 441 | OPENSSL_cleanse(buf, (unsigned int) bufsiz); |
| 443 | res = 0; | 442 | res = 0; |
| 444 | } | 443 | } |
| 445 | UI_free(ui); | 444 | UI_free(ui); |
| @@ -448,10 +447,10 @@ password_callback(char *buf, int bufsiz, int verify, | |||
| 448 | return res; | 447 | return res; |
| 449 | } | 448 | } |
| 450 | 449 | ||
| 451 | static char *app_get_pass(BIO *err, char *arg, int keepbio); | 450 | static char *app_get_pass(BIO * err, char *arg, int keepbio); |
| 452 | 451 | ||
| 453 | int | 452 | int |
| 454 | app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2) | 453 | app_passwd(BIO * err, char *arg1, char *arg2, char **pass1, char **pass2) |
| 455 | { | 454 | { |
| 456 | int same; | 455 | int same; |
| 457 | if (!arg2 || !arg1 || strcmp(arg1, arg2)) | 456 | if (!arg2 || !arg1 || strcmp(arg1, arg2)) |
| @@ -474,7 +473,7 @@ app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2) | |||
| 474 | } | 473 | } |
| 475 | 474 | ||
| 476 | static char * | 475 | static char * |
| 477 | app_get_pass(BIO *err, char *arg, int keepbio) | 476 | app_get_pass(BIO * err, char *arg, int keepbio) |
| 478 | { | 477 | { |
| 479 | char *tmp, tpass[APP_PASS_LEN]; | 478 | char *tmp, tpass[APP_PASS_LEN]; |
| 480 | static BIO *pwdbio = NULL; | 479 | static BIO *pwdbio = NULL; |
| @@ -496,14 +495,14 @@ app_get_pass(BIO *err, char *arg, int keepbio) | |||
| 496 | BIO_printf(err, "Can't open file %s\n", arg + 5); | 495 | BIO_printf(err, "Can't open file %s\n", arg + 5); |
| 497 | return NULL; | 496 | return NULL; |
| 498 | } | 497 | } |
| 499 | /* | 498 | /* |
| 500 | * Under _WIN32, which covers even Win64 and CE, file | 499 | * Under _WIN32, which covers even Win64 and CE, file |
| 501 | * descriptors referenced by BIO_s_fd are not inherited | 500 | * descriptors referenced by BIO_s_fd are not inherited |
| 502 | * by child process and therefore below is not an option. | 501 | * by child process and therefore below is not an option. |
| 503 | * It could have been an option if bss_fd.c was operating | 502 | * It could have been an option if bss_fd.c was operating |
| 504 | * on real Windows descriptors, such as those obtained | 503 | * on real Windows descriptors, such as those obtained |
| 505 | * with CreateFile. | 504 | * with CreateFile. |
| 506 | */ | 505 | */ |
| 507 | } else if (!strncmp(arg, "fd:", 3)) { | 506 | } else if (!strncmp(arg, "fd:", 3)) { |
| 508 | BIO *btmp; | 507 | BIO *btmp; |
| 509 | i = atoi(arg + 3); | 508 | i = atoi(arg + 3); |
| @@ -513,7 +512,10 @@ app_get_pass(BIO *err, char *arg, int keepbio) | |||
| 513 | BIO_printf(err, "Can't access file descriptor %s\n", arg + 3); | 512 | BIO_printf(err, "Can't access file descriptor %s\n", arg + 3); |
| 514 | return NULL; | 513 | return NULL; |
| 515 | } | 514 | } |
| 516 | /* Can't do BIO_gets on an fd BIO so add a buffering BIO */ | 515 | /* |
| 516 | * Can't do BIO_gets on an fd BIO so add a buffering | ||
| 517 | * BIO | ||
| 518 | */ | ||
| 517 | btmp = BIO_new(BIO_f_buffer()); | 519 | btmp = BIO_new(BIO_f_buffer()); |
| 518 | pwdbio = BIO_push(btmp, pwdbio); | 520 | pwdbio = BIO_push(btmp, pwdbio); |
| 519 | } else if (!strcmp(arg, "stdin")) { | 521 | } else if (!strcmp(arg, "stdin")) { |
| @@ -543,10 +545,10 @@ app_get_pass(BIO *err, char *arg, int keepbio) | |||
| 543 | } | 545 | } |
| 544 | 546 | ||
| 545 | int | 547 | int |
| 546 | add_oid_section(BIO *err, CONF *conf) | 548 | add_oid_section(BIO * err, CONF * conf) |
| 547 | { | 549 | { |
| 548 | char *p; | 550 | char *p; |
| 549 | STACK_OF(CONF_VALUE) *sktmp; | 551 | STACK_OF(CONF_VALUE) * sktmp; |
| 550 | CONF_VALUE *cnf; | 552 | CONF_VALUE *cnf; |
| 551 | int i; | 553 | int i; |
| 552 | if (!(p = NCONF_get_string(conf, NULL, "oid_section"))) { | 554 | if (!(p = NCONF_get_string(conf, NULL, "oid_section"))) { |
| @@ -569,8 +571,8 @@ add_oid_section(BIO *err, CONF *conf) | |||
| 569 | } | 571 | } |
| 570 | 572 | ||
| 571 | static int | 573 | static int |
| 572 | load_pkcs12(BIO *err, BIO *in, const char *desc, pem_password_cb *pem_cb, | 574 | load_pkcs12(BIO * err, BIO * in, const char *desc, pem_password_cb * pem_cb, |
| 573 | void *cb_data, EVP_PKEY **pkey, X509 **cert, STACK_OF(X509) **ca) | 575 | void *cb_data, EVP_PKEY ** pkey, X509 ** cert, STACK_OF(X509) ** ca) |
| 574 | { | 576 | { |
| 575 | const char *pass; | 577 | const char *pass; |
| 576 | char tpass[PEM_BUFSIZE]; | 578 | char tpass[PEM_BUFSIZE]; |
| @@ -586,7 +588,7 @@ load_pkcs12(BIO *err, BIO *in, const char *desc, pem_password_cb *pem_cb, | |||
| 586 | pass = ""; | 588 | pass = ""; |
| 587 | else { | 589 | else { |
| 588 | if (!pem_cb) | 590 | if (!pem_cb) |
| 589 | pem_cb = (pem_password_cb *)password_callback; | 591 | pem_cb = (pem_password_cb *) password_callback; |
| 590 | len = pem_cb(tpass, PEM_BUFSIZE, 0, cb_data); | 592 | len = pem_cb(tpass, PEM_BUFSIZE, 0, cb_data); |
| 591 | if (len < 0) { | 593 | if (len < 0) { |
| 592 | BIO_printf(err, "Passpharse callback error for %s\n", | 594 | BIO_printf(err, "Passpharse callback error for %s\n", |
| @@ -610,7 +612,7 @@ die: | |||
| 610 | } | 612 | } |
| 611 | 613 | ||
| 612 | X509 * | 614 | X509 * |
| 613 | load_cert(BIO *err, const char *file, int format, const char *pass, ENGINE *e, | 615 | load_cert(BIO * err, const char *file, int format, const char *pass, ENGINE * e, |
| 614 | const char *cert_descrip) | 616 | const char *cert_descrip) |
| 615 | { | 617 | { |
| 616 | X509 *x = NULL; | 618 | X509 *x = NULL; |
| @@ -620,12 +622,11 @@ load_cert(BIO *err, const char *file, int format, const char *pass, ENGINE *e, | |||
| 620 | ERR_print_errors(err); | 622 | ERR_print_errors(err); |
| 621 | goto end; | 623 | goto end; |
| 622 | } | 624 | } |
| 623 | |||
| 624 | if (file == NULL) { | 625 | if (file == NULL) { |
| 625 | #ifdef _IONBF | 626 | #ifdef _IONBF |
| 626 | # ifndef OPENSSL_NO_SETVBUF_IONBF | 627 | #ifndef OPENSSL_NO_SETVBUF_IONBF |
| 627 | setvbuf(stdin, NULL, _IONBF, 0); | 628 | setvbuf(stdin, NULL, _IONBF, 0); |
| 628 | # endif /* ndef OPENSSL_NO_SETVBUF_IONBF */ | 629 | #endif /* ndef OPENSSL_NO_SETVBUF_IONBF */ |
| 629 | #endif | 630 | #endif |
| 630 | BIO_set_fp(cert, stdin, BIO_NOCLOSE); | 631 | BIO_set_fp(cert, stdin, BIO_NOCLOSE); |
| 631 | } else { | 632 | } else { |
| @@ -645,8 +646,8 @@ load_cert(BIO *err, const char *file, int format, const char *pass, ENGINE *e, | |||
| 645 | if (nx == NULL) | 646 | if (nx == NULL) |
| 646 | goto end; | 647 | goto end; |
| 647 | 648 | ||
| 648 | if ((strncmp(NETSCAPE_CERT_HDR, (char *)nx->header->data, | 649 | if ((strncmp(NETSCAPE_CERT_HDR, (char *) nx->header->data, |
| 649 | nx->header->length) != 0)) { | 650 | nx->header->length) != 0)) { |
| 650 | NETSCAPE_X509_free(nx); | 651 | NETSCAPE_X509_free(nx); |
| 651 | BIO_printf(err, "Error reading header on certificate\n"); | 652 | BIO_printf(err, "Error reading header on certificate\n"); |
| 652 | goto end; | 653 | goto end; |
| @@ -656,10 +657,10 @@ load_cert(BIO *err, const char *file, int format, const char *pass, ENGINE *e, | |||
| 656 | NETSCAPE_X509_free(nx); | 657 | NETSCAPE_X509_free(nx); |
| 657 | } else if (format == FORMAT_PEM) | 658 | } else if (format == FORMAT_PEM) |
| 658 | x = PEM_read_bio_X509_AUX(cert, NULL, | 659 | x = PEM_read_bio_X509_AUX(cert, NULL, |
| 659 | (pem_password_cb *)password_callback, NULL); | 660 | (pem_password_cb *) password_callback, NULL); |
| 660 | else if (format == FORMAT_PKCS12) { | 661 | else if (format == FORMAT_PKCS12) { |
| 661 | if (!load_pkcs12(err, cert, cert_descrip, NULL, NULL, | 662 | if (!load_pkcs12(err, cert, cert_descrip, NULL, NULL, |
| 662 | NULL, &x, NULL)) | 663 | NULL, &x, NULL)) |
| 663 | goto end; | 664 | goto end; |
| 664 | } else { | 665 | } else { |
| 665 | BIO_printf(err, "bad input format specified for %s\n", | 666 | BIO_printf(err, "bad input format specified for %s\n", |
| @@ -677,8 +678,8 @@ end: | |||
| 677 | } | 678 | } |
| 678 | 679 | ||
| 679 | EVP_PKEY * | 680 | EVP_PKEY * |
| 680 | load_key(BIO *err, const char *file, int format, int maybe_stdin, | 681 | load_key(BIO * err, const char *file, int format, int maybe_stdin, |
| 681 | const char *pass, ENGINE *e, const char *key_descrip) | 682 | const char *pass, ENGINE * e, const char *key_descrip) |
| 682 | { | 683 | { |
| 683 | BIO *key = NULL; | 684 | BIO *key = NULL; |
| 684 | EVP_PKEY *pkey = NULL; | 685 | EVP_PKEY *pkey = NULL; |
| @@ -713,9 +714,9 @@ load_key(BIO *err, const char *file, int format, int maybe_stdin, | |||
| 713 | } | 714 | } |
| 714 | if (file == NULL && maybe_stdin) { | 715 | if (file == NULL && maybe_stdin) { |
| 715 | #ifdef _IONBF | 716 | #ifdef _IONBF |
| 716 | # ifndef OPENSSL_NO_SETVBUF_IONBF | 717 | #ifndef OPENSSL_NO_SETVBUF_IONBF |
| 717 | setvbuf(stdin, NULL, _IONBF, 0); | 718 | setvbuf(stdin, NULL, _IONBF, 0); |
| 718 | # endif /* ndef OPENSSL_NO_SETVBUF_IONBF */ | 719 | #endif /* ndef OPENSSL_NO_SETVBUF_IONBF */ |
| 719 | #endif | 720 | #endif |
| 720 | BIO_set_fp(key, stdin, BIO_NOCLOSE); | 721 | BIO_set_fp(key, stdin, BIO_NOCLOSE); |
| 721 | } else if (BIO_read_filename(key, file) <= 0) { | 722 | } else if (BIO_read_filename(key, file) <= 0) { |
| @@ -728,7 +729,7 @@ load_key(BIO *err, const char *file, int format, int maybe_stdin, | |||
| 728 | pkey = d2i_PrivateKey_bio(key, NULL); | 729 | pkey = d2i_PrivateKey_bio(key, NULL); |
| 729 | } else if (format == FORMAT_PEM) { | 730 | } else if (format == FORMAT_PEM) { |
| 730 | pkey = PEM_read_bio_PrivateKey(key, NULL, | 731 | pkey = PEM_read_bio_PrivateKey(key, NULL, |
| 731 | (pem_password_cb *)password_callback, &cb_data); | 732 | (pem_password_cb *) password_callback, &cb_data); |
| 732 | } | 733 | } |
| 733 | #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA) | 734 | #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA) |
| 734 | else if (format == FORMAT_NETSCAPE || format == FORMAT_IISSGC) | 735 | else if (format == FORMAT_NETSCAPE || format == FORMAT_IISSGC) |
| @@ -736,15 +737,15 @@ load_key(BIO *err, const char *file, int format, int maybe_stdin, | |||
| 736 | #endif | 737 | #endif |
| 737 | else if (format == FORMAT_PKCS12) { | 738 | else if (format == FORMAT_PKCS12) { |
| 738 | if (!load_pkcs12(err, key, key_descrip, | 739 | if (!load_pkcs12(err, key, key_descrip, |
| 739 | (pem_password_cb *)password_callback, &cb_data, | 740 | (pem_password_cb *) password_callback, &cb_data, |
| 740 | &pkey, NULL, NULL)) | 741 | &pkey, NULL, NULL)) |
| 741 | goto end; | 742 | goto end; |
| 742 | } | 743 | } |
| 743 | #if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DSA) && !defined (OPENSSL_NO_RC4) | 744 | #if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DSA) && !defined (OPENSSL_NO_RC4) |
| 744 | else if (format == FORMAT_MSBLOB) | 745 | else if (format == FORMAT_MSBLOB) |
| 745 | pkey = b2i_PrivateKey_bio(key); | 746 | pkey = b2i_PrivateKey_bio(key); |
| 746 | else if (format == FORMAT_PVK) | 747 | else if (format == FORMAT_PVK) |
| 747 | pkey = b2i_PVK_bio(key, (pem_password_cb *)password_callback, | 748 | pkey = b2i_PVK_bio(key, (pem_password_cb *) password_callback, |
| 748 | &cb_data); | 749 | &cb_data); |
| 749 | #endif | 750 | #endif |
| 750 | else { | 751 | else { |
| @@ -762,8 +763,8 @@ end: | |||
| 762 | } | 763 | } |
| 763 | 764 | ||
| 764 | EVP_PKEY * | 765 | EVP_PKEY * |
| 765 | load_pubkey(BIO *err, const char *file, int format, int maybe_stdin, | 766 | load_pubkey(BIO * err, const char *file, int format, int maybe_stdin, |
| 766 | const char *pass, ENGINE *e, const char *key_descrip) | 767 | const char *pass, ENGINE * e, const char *key_descrip) |
| 767 | { | 768 | { |
| 768 | BIO *key = NULL; | 769 | BIO *key = NULL; |
| 769 | EVP_PKEY *pkey = NULL; | 770 | EVP_PKEY *pkey = NULL; |
| @@ -793,9 +794,9 @@ load_pubkey(BIO *err, const char *file, int format, int maybe_stdin, | |||
| 793 | } | 794 | } |
| 794 | if (file == NULL && maybe_stdin) { | 795 | if (file == NULL && maybe_stdin) { |
| 795 | #ifdef _IONBF | 796 | #ifdef _IONBF |
| 796 | # ifndef OPENSSL_NO_SETVBUF_IONBF | 797 | #ifndef OPENSSL_NO_SETVBUF_IONBF |
| 797 | setvbuf(stdin, NULL, _IONBF, 0); | 798 | setvbuf(stdin, NULL, _IONBF, 0); |
| 798 | # endif /* ndef OPENSSL_NO_SETVBUF_IONBF */ | 799 | #endif /* ndef OPENSSL_NO_SETVBUF_IONBF */ |
| 799 | #endif | 800 | #endif |
| 800 | BIO_set_fp(key, stdin, BIO_NOCLOSE); | 801 | BIO_set_fp(key, stdin, BIO_NOCLOSE); |
| 801 | } else if (BIO_read_filename(key, file) <= 0) { | 802 | } else if (BIO_read_filename(key, file) <= 0) { |
| @@ -821,7 +822,7 @@ load_pubkey(BIO *err, const char *file, int format, int maybe_stdin, | |||
| 821 | } else if (format == FORMAT_PEMRSA) { | 822 | } else if (format == FORMAT_PEMRSA) { |
| 822 | RSA *rsa; | 823 | RSA *rsa; |
| 823 | rsa = PEM_read_bio_RSAPublicKey(key, NULL, | 824 | rsa = PEM_read_bio_RSAPublicKey(key, NULL, |
| 824 | (pem_password_cb *)password_callback, &cb_data); | 825 | (pem_password_cb *) password_callback, &cb_data); |
| 825 | if (rsa) { | 826 | if (rsa) { |
| 826 | pkey = EVP_PKEY_new(); | 827 | pkey = EVP_PKEY_new(); |
| 827 | if (pkey) | 828 | if (pkey) |
| @@ -833,7 +834,7 @@ load_pubkey(BIO *err, const char *file, int format, int maybe_stdin, | |||
| 833 | #endif | 834 | #endif |
| 834 | else if (format == FORMAT_PEM) { | 835 | else if (format == FORMAT_PEM) { |
| 835 | pkey = PEM_read_bio_PUBKEY(key, NULL, | 836 | pkey = PEM_read_bio_PUBKEY(key, NULL, |
| 836 | (pem_password_cb *)password_callback, &cb_data); | 837 | (pem_password_cb *) password_callback, &cb_data); |
| 837 | } | 838 | } |
| 838 | #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA) | 839 | #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA) |
| 839 | else if (format == FORMAT_NETSCAPE || format == FORMAT_IISSGC) | 840 | else if (format == FORMAT_NETSCAPE || format == FORMAT_IISSGC) |
| @@ -857,12 +858,12 @@ end: | |||
| 857 | 858 | ||
| 858 | #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA) | 859 | #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA) |
| 859 | static EVP_PKEY * | 860 | static EVP_PKEY * |
| 860 | load_netscape_key(BIO *err, BIO *key, const char *file, | 861 | load_netscape_key(BIO * err, BIO * key, const char *file, |
| 861 | const char *key_descrip, int format) | 862 | const char *key_descrip, int format) |
| 862 | { | 863 | { |
| 863 | EVP_PKEY *pkey; | 864 | EVP_PKEY *pkey; |
| 864 | BUF_MEM *buf; | 865 | BUF_MEM *buf; |
| 865 | RSA *rsa; | 866 | RSA *rsa; |
| 866 | const unsigned char *p; | 867 | const unsigned char *p; |
| 867 | int size, i; | 868 | int size, i; |
| 868 | 869 | ||
| @@ -872,9 +873,9 @@ load_netscape_key(BIO *err, BIO *key, const char *file, | |||
| 872 | if (buf == NULL || pkey == NULL) | 873 | if (buf == NULL || pkey == NULL) |
| 873 | goto error; | 874 | goto error; |
| 874 | for (;;) { | 875 | for (;;) { |
| 875 | if (!BUF_MEM_grow_clean(buf, size + 1024*10)) | 876 | if (!BUF_MEM_grow_clean(buf, size + 1024 * 10)) |
| 876 | goto error; | 877 | goto error; |
| 877 | i = BIO_read(key, &(buf->data[size]), 1024*10); | 878 | i = BIO_read(key, &(buf->data[size]), 1024 * 10); |
| 878 | size += i; | 879 | size += i; |
| 879 | if (i == 0) | 880 | if (i == 0) |
| 880 | break; | 881 | break; |
| @@ -884,8 +885,8 @@ load_netscape_key(BIO *err, BIO *key, const char *file, | |||
| 884 | goto error; | 885 | goto error; |
| 885 | } | 886 | } |
| 886 | } | 887 | } |
| 887 | p = (unsigned char *)buf->data; | 888 | p = (unsigned char *) buf->data; |
| 888 | rsa = d2i_RSA_NET(NULL, &p, (long)size, NULL, | 889 | rsa = d2i_RSA_NET(NULL, &p, (long) size, NULL, |
| 889 | (format == FORMAT_IISSGC ? 1 : 0)); | 890 | (format == FORMAT_IISSGC ? 1 : 0)); |
| 890 | if (rsa == NULL) | 891 | if (rsa == NULL) |
| 891 | goto error; | 892 | goto error; |
| @@ -897,16 +898,16 @@ error: | |||
| 897 | EVP_PKEY_free(pkey); | 898 | EVP_PKEY_free(pkey); |
| 898 | return NULL; | 899 | return NULL; |
| 899 | } | 900 | } |
| 900 | #endif /* ndef OPENSSL_NO_RC4 */ | 901 | #endif /* ndef OPENSSL_NO_RC4 */ |
| 901 | 902 | ||
| 902 | static int | 903 | static int |
| 903 | load_certs_crls(BIO *err, const char *file, int format, const char *pass, | 904 | load_certs_crls(BIO * err, const char *file, int format, const char *pass, |
| 904 | ENGINE *e, const char *desc, STACK_OF(X509) **pcerts, | 905 | ENGINE * e, const char *desc, STACK_OF(X509) ** pcerts, |
| 905 | STACK_OF(X509_CRL) **pcrls) | 906 | STACK_OF(X509_CRL) ** pcrls) |
| 906 | { | 907 | { |
| 907 | int i; | 908 | int i; |
| 908 | BIO *bio; | 909 | BIO *bio; |
| 909 | STACK_OF(X509_INFO) *xis = NULL; | 910 | STACK_OF(X509_INFO) * xis = NULL; |
| 910 | X509_INFO *xi; | 911 | X509_INFO *xi; |
| 911 | PW_CB_DATA cb_data; | 912 | PW_CB_DATA cb_data; |
| 912 | int rv = 0; | 913 | int rv = 0; |
| @@ -918,7 +919,6 @@ load_certs_crls(BIO *err, const char *file, int format, const char *pass, | |||
| 918 | BIO_printf(err, "bad input format specified for %s\n", desc); | 919 | BIO_printf(err, "bad input format specified for %s\n", desc); |
| 919 | return 0; | 920 | return 0; |
| 920 | } | 921 | } |
| 921 | |||
| 922 | if (file == NULL) | 922 | if (file == NULL) |
| 923 | bio = BIO_new_fp(stdin, BIO_NOCLOSE); | 923 | bio = BIO_new_fp(stdin, BIO_NOCLOSE); |
| 924 | else | 924 | else |
| @@ -930,9 +930,8 @@ load_certs_crls(BIO *err, const char *file, int format, const char *pass, | |||
| 930 | ERR_print_errors(err); | 930 | ERR_print_errors(err); |
| 931 | return 0; | 931 | return 0; |
| 932 | } | 932 | } |
| 933 | |||
| 934 | xis = PEM_X509_INFO_read_bio(bio, NULL, | 933 | xis = PEM_X509_INFO_read_bio(bio, NULL, |
| 935 | (pem_password_cb *)password_callback, &cb_data); | 934 | (pem_password_cb *) password_callback, &cb_data); |
| 936 | 935 | ||
| 937 | BIO_free(bio); | 936 | BIO_free(bio); |
| 938 | 937 | ||
| @@ -941,15 +940,13 @@ load_certs_crls(BIO *err, const char *file, int format, const char *pass, | |||
| 941 | if (!*pcerts) | 940 | if (!*pcerts) |
| 942 | goto end; | 941 | goto end; |
| 943 | } | 942 | } |
| 944 | |||
| 945 | if (pcrls) { | 943 | if (pcrls) { |
| 946 | *pcrls = sk_X509_CRL_new_null(); | 944 | *pcrls = sk_X509_CRL_new_null(); |
| 947 | if (!*pcrls) | 945 | if (!*pcrls) |
| 948 | goto end; | 946 | goto end; |
| 949 | } | 947 | } |
| 950 | |||
| 951 | for (i = 0; i < sk_X509_INFO_num(xis); i++) { | 948 | for (i = 0; i < sk_X509_INFO_num(xis); i++) { |
| 952 | xi = sk_X509_INFO_value (xis, i); | 949 | xi = sk_X509_INFO_value(xis, i); |
| 953 | if (xi->x509 && pcerts) { | 950 | if (xi->x509 && pcerts) { |
| 954 | if (!sk_X509_push(*pcerts, xi->x509)) | 951 | if (!sk_X509_push(*pcerts, xi->x509)) |
| 955 | goto end; | 952 | goto end; |
| @@ -989,20 +986,20 @@ end: | |||
| 989 | } | 986 | } |
| 990 | 987 | ||
| 991 | STACK_OF(X509) * | 988 | STACK_OF(X509) * |
| 992 | load_certs(BIO *err, const char *file, int format, const char *pass, ENGINE *e, | 989 | load_certs(BIO * err, const char *file, int format, const char *pass, ENGINE * e, |
| 993 | const char *desc) | 990 | const char *desc) |
| 994 | { | 991 | { |
| 995 | STACK_OF(X509) *certs; | 992 | STACK_OF(X509) * certs; |
| 996 | if (!load_certs_crls(err, file, format, pass, e, desc, &certs, NULL)) | 993 | if (!load_certs_crls(err, file, format, pass, e, desc, &certs, NULL)) |
| 997 | return NULL; | 994 | return NULL; |
| 998 | return certs; | 995 | return certs; |
| 999 | } | 996 | } |
| 1000 | 997 | ||
| 1001 | STACK_OF(X509_CRL) * | 998 | STACK_OF(X509_CRL) * |
| 1002 | load_crls(BIO *err, const char *file, int format, const char *pass, ENGINE *e, | 999 | load_crls(BIO * err, const char *file, int format, const char *pass, ENGINE * e, |
| 1003 | const char *desc) | 1000 | const char *desc) |
| 1004 | { | 1001 | { |
| 1005 | STACK_OF(X509_CRL) *crls; | 1002 | STACK_OF(X509_CRL) * crls; |
| 1006 | if (!load_certs_crls(err, file, format, pass, e, desc, NULL, &crls)) | 1003 | if (!load_certs_crls(err, file, format, pass, e, desc, NULL, &crls)) |
| 1007 | return NULL; | 1004 | return NULL; |
| 1008 | return crls; | 1005 | return crls; |
| @@ -1025,25 +1022,25 @@ int | |||
| 1025 | set_cert_ex(unsigned long *flags, const char *arg) | 1022 | set_cert_ex(unsigned long *flags, const char *arg) |
| 1026 | { | 1023 | { |
| 1027 | static const NAME_EX_TBL cert_tbl[] = { | 1024 | static const NAME_EX_TBL cert_tbl[] = { |
| 1028 | { "compatible", X509_FLAG_COMPAT, 0xffffffffl}, | 1025 | {"compatible", X509_FLAG_COMPAT, 0xffffffffl}, |
| 1029 | { "ca_default", X509_FLAG_CA, 0xffffffffl}, | 1026 | {"ca_default", X509_FLAG_CA, 0xffffffffl}, |
| 1030 | { "no_header", X509_FLAG_NO_HEADER, 0}, | 1027 | {"no_header", X509_FLAG_NO_HEADER, 0}, |
| 1031 | { "no_version", X509_FLAG_NO_VERSION, 0}, | 1028 | {"no_version", X509_FLAG_NO_VERSION, 0}, |
| 1032 | { "no_serial", X509_FLAG_NO_SERIAL, 0}, | 1029 | {"no_serial", X509_FLAG_NO_SERIAL, 0}, |
| 1033 | { "no_signame", X509_FLAG_NO_SIGNAME, 0}, | 1030 | {"no_signame", X509_FLAG_NO_SIGNAME, 0}, |
| 1034 | { "no_validity", X509_FLAG_NO_VALIDITY, 0}, | 1031 | {"no_validity", X509_FLAG_NO_VALIDITY, 0}, |
| 1035 | { "no_subject", X509_FLAG_NO_SUBJECT, 0}, | 1032 | {"no_subject", X509_FLAG_NO_SUBJECT, 0}, |
| 1036 | { "no_issuer", X509_FLAG_NO_ISSUER, 0}, | 1033 | {"no_issuer", X509_FLAG_NO_ISSUER, 0}, |
| 1037 | { "no_pubkey", X509_FLAG_NO_PUBKEY, 0}, | 1034 | {"no_pubkey", X509_FLAG_NO_PUBKEY, 0}, |
| 1038 | { "no_extensions", X509_FLAG_NO_EXTENSIONS, 0}, | 1035 | {"no_extensions", X509_FLAG_NO_EXTENSIONS, 0}, |
| 1039 | { "no_sigdump", X509_FLAG_NO_SIGDUMP, 0}, | 1036 | {"no_sigdump", X509_FLAG_NO_SIGDUMP, 0}, |
| 1040 | { "no_aux", X509_FLAG_NO_AUX, 0}, | 1037 | {"no_aux", X509_FLAG_NO_AUX, 0}, |
| 1041 | { "no_attributes", X509_FLAG_NO_ATTRIBUTES, 0}, | 1038 | {"no_attributes", X509_FLAG_NO_ATTRIBUTES, 0}, |
| 1042 | { "ext_default", X509V3_EXT_DEFAULT, X509V3_EXT_UNKNOWN_MASK}, | 1039 | {"ext_default", X509V3_EXT_DEFAULT, X509V3_EXT_UNKNOWN_MASK}, |
| 1043 | { "ext_error", X509V3_EXT_ERROR_UNKNOWN, X509V3_EXT_UNKNOWN_MASK}, | 1040 | {"ext_error", X509V3_EXT_ERROR_UNKNOWN, X509V3_EXT_UNKNOWN_MASK}, |
| 1044 | { "ext_parse", X509V3_EXT_PARSE_UNKNOWN, X509V3_EXT_UNKNOWN_MASK}, | 1041 | {"ext_parse", X509V3_EXT_PARSE_UNKNOWN, X509V3_EXT_UNKNOWN_MASK}, |
| 1045 | { "ext_dump", X509V3_EXT_DUMP_UNKNOWN, X509V3_EXT_UNKNOWN_MASK}, | 1042 | {"ext_dump", X509V3_EXT_DUMP_UNKNOWN, X509V3_EXT_UNKNOWN_MASK}, |
| 1046 | { NULL, 0, 0} | 1043 | {NULL, 0, 0} |
| 1047 | }; | 1044 | }; |
| 1048 | return set_multi_opts(flags, arg, cert_tbl); | 1045 | return set_multi_opts(flags, arg, cert_tbl); |
| 1049 | } | 1046 | } |
| @@ -1052,34 +1049,34 @@ int | |||
| 1052 | set_name_ex(unsigned long *flags, const char *arg) | 1049 | set_name_ex(unsigned long *flags, const char *arg) |
| 1053 | { | 1050 | { |
| 1054 | static const NAME_EX_TBL ex_tbl[] = { | 1051 | static const NAME_EX_TBL ex_tbl[] = { |
| 1055 | { "esc_2253", ASN1_STRFLGS_ESC_2253, 0}, | 1052 | {"esc_2253", ASN1_STRFLGS_ESC_2253, 0}, |
| 1056 | { "esc_ctrl", ASN1_STRFLGS_ESC_CTRL, 0}, | 1053 | {"esc_ctrl", ASN1_STRFLGS_ESC_CTRL, 0}, |
| 1057 | { "esc_msb", ASN1_STRFLGS_ESC_MSB, 0}, | 1054 | {"esc_msb", ASN1_STRFLGS_ESC_MSB, 0}, |
| 1058 | { "use_quote", ASN1_STRFLGS_ESC_QUOTE, 0}, | 1055 | {"use_quote", ASN1_STRFLGS_ESC_QUOTE, 0}, |
| 1059 | { "utf8", ASN1_STRFLGS_UTF8_CONVERT, 0}, | 1056 | {"utf8", ASN1_STRFLGS_UTF8_CONVERT, 0}, |
| 1060 | { "ignore_type", ASN1_STRFLGS_IGNORE_TYPE, 0}, | 1057 | {"ignore_type", ASN1_STRFLGS_IGNORE_TYPE, 0}, |
| 1061 | { "show_type", ASN1_STRFLGS_SHOW_TYPE, 0}, | 1058 | {"show_type", ASN1_STRFLGS_SHOW_TYPE, 0}, |
| 1062 | { "dump_all", ASN1_STRFLGS_DUMP_ALL, 0}, | 1059 | {"dump_all", ASN1_STRFLGS_DUMP_ALL, 0}, |
| 1063 | { "dump_nostr", ASN1_STRFLGS_DUMP_UNKNOWN, 0}, | 1060 | {"dump_nostr", ASN1_STRFLGS_DUMP_UNKNOWN, 0}, |
| 1064 | { "dump_der", ASN1_STRFLGS_DUMP_DER, 0}, | 1061 | {"dump_der", ASN1_STRFLGS_DUMP_DER, 0}, |
| 1065 | { "compat", XN_FLAG_COMPAT, 0xffffffffL}, | 1062 | {"compat", XN_FLAG_COMPAT, 0xffffffffL}, |
| 1066 | { "sep_comma_plus", XN_FLAG_SEP_COMMA_PLUS, XN_FLAG_SEP_MASK}, | 1063 | {"sep_comma_plus", XN_FLAG_SEP_COMMA_PLUS, XN_FLAG_SEP_MASK}, |
| 1067 | { "sep_comma_plus_space", XN_FLAG_SEP_CPLUS_SPC, XN_FLAG_SEP_MASK}, | 1064 | {"sep_comma_plus_space", XN_FLAG_SEP_CPLUS_SPC, XN_FLAG_SEP_MASK}, |
| 1068 | { "sep_semi_plus_space", XN_FLAG_SEP_SPLUS_SPC, XN_FLAG_SEP_MASK}, | 1065 | {"sep_semi_plus_space", XN_FLAG_SEP_SPLUS_SPC, XN_FLAG_SEP_MASK}, |
| 1069 | { "sep_multiline", XN_FLAG_SEP_MULTILINE, XN_FLAG_SEP_MASK}, | 1066 | {"sep_multiline", XN_FLAG_SEP_MULTILINE, XN_FLAG_SEP_MASK}, |
| 1070 | { "dn_rev", XN_FLAG_DN_REV, 0}, | 1067 | {"dn_rev", XN_FLAG_DN_REV, 0}, |
| 1071 | { "nofname", XN_FLAG_FN_NONE, XN_FLAG_FN_MASK}, | 1068 | {"nofname", XN_FLAG_FN_NONE, XN_FLAG_FN_MASK}, |
| 1072 | { "sname", XN_FLAG_FN_SN, XN_FLAG_FN_MASK}, | 1069 | {"sname", XN_FLAG_FN_SN, XN_FLAG_FN_MASK}, |
| 1073 | { "lname", XN_FLAG_FN_LN, XN_FLAG_FN_MASK}, | 1070 | {"lname", XN_FLAG_FN_LN, XN_FLAG_FN_MASK}, |
| 1074 | { "align", XN_FLAG_FN_ALIGN, 0}, | 1071 | {"align", XN_FLAG_FN_ALIGN, 0}, |
| 1075 | { "oid", XN_FLAG_FN_OID, XN_FLAG_FN_MASK}, | 1072 | {"oid", XN_FLAG_FN_OID, XN_FLAG_FN_MASK}, |
| 1076 | { "space_eq", XN_FLAG_SPC_EQ, 0}, | 1073 | {"space_eq", XN_FLAG_SPC_EQ, 0}, |
| 1077 | { "dump_unknown", XN_FLAG_DUMP_UNKNOWN_FIELDS, 0}, | 1074 | {"dump_unknown", XN_FLAG_DUMP_UNKNOWN_FIELDS, 0}, |
| 1078 | { "RFC2253", XN_FLAG_RFC2253, 0xffffffffL}, | 1075 | {"RFC2253", XN_FLAG_RFC2253, 0xffffffffL}, |
| 1079 | { "oneline", XN_FLAG_ONELINE, 0xffffffffL}, | 1076 | {"oneline", XN_FLAG_ONELINE, 0xffffffffL}, |
| 1080 | { "multiline", XN_FLAG_MULTILINE, 0xffffffffL}, | 1077 | {"multiline", XN_FLAG_MULTILINE, 0xffffffffL}, |
| 1081 | { "ca_default", XN_FLAG_MULTILINE, 0xffffffffL}, | 1078 | {"ca_default", XN_FLAG_MULTILINE, 0xffffffffL}, |
| 1082 | { NULL, 0, 0} | 1079 | {NULL, 0, 0} |
| 1083 | }; | 1080 | }; |
| 1084 | return set_multi_opts(flags, arg, ex_tbl); | 1081 | return set_multi_opts(flags, arg, ex_tbl); |
| 1085 | } | 1082 | } |
| @@ -1099,9 +1096,9 @@ set_ext_copy(int *copy_type, const char *arg) | |||
| 1099 | } | 1096 | } |
| 1100 | 1097 | ||
| 1101 | int | 1098 | int |
| 1102 | copy_extensions(X509 *x, X509_REQ *req, int copy_type) | 1099 | copy_extensions(X509 * x, X509_REQ * req, int copy_type) |
| 1103 | { | 1100 | { |
| 1104 | STACK_OF(X509_EXTENSION) *exts = NULL; | 1101 | STACK_OF(X509_EXTENSION) * exts = NULL; |
| 1105 | X509_EXTENSION *ext, *tmpext; | 1102 | X509_EXTENSION *ext, *tmpext; |
| 1106 | ASN1_OBJECT *obj; | 1103 | ASN1_OBJECT *obj; |
| 1107 | int i, idx, ret = 0; | 1104 | int i, idx, ret = 0; |
| @@ -1139,9 +1136,9 @@ end: | |||
| 1139 | } | 1136 | } |
| 1140 | 1137 | ||
| 1141 | static int | 1138 | static int |
| 1142 | set_multi_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL *in_tbl) | 1139 | set_multi_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL * in_tbl) |
| 1143 | { | 1140 | { |
| 1144 | STACK_OF(CONF_VALUE) *vals; | 1141 | STACK_OF(CONF_VALUE) * vals; |
| 1145 | CONF_VALUE *val; | 1142 | CONF_VALUE *val; |
| 1146 | int i, ret = 1; | 1143 | int i, ret = 1; |
| 1147 | if (!arg) | 1144 | if (!arg) |
| @@ -1157,7 +1154,7 @@ set_multi_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL *in_tbl) | |||
| 1157 | } | 1154 | } |
| 1158 | 1155 | ||
| 1159 | static int | 1156 | static int |
| 1160 | set_table_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL *in_tbl) | 1157 | set_table_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL * in_tbl) |
| 1161 | { | 1158 | { |
| 1162 | char c; | 1159 | char c; |
| 1163 | const NAME_EX_TBL *ptbl; | 1160 | const NAME_EX_TBL *ptbl; |
| @@ -1169,7 +1166,8 @@ set_table_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL *in_tbl) | |||
| 1169 | } else if (c == '+') { | 1166 | } else if (c == '+') { |
| 1170 | c = 1; | 1167 | c = 1; |
| 1171 | arg++; | 1168 | arg++; |
| 1172 | } else c = 1; | 1169 | } else |
| 1170 | c = 1; | ||
| 1173 | 1171 | ||
| 1174 | for (ptbl = in_tbl; ptbl->name; ptbl++) { | 1172 | for (ptbl = in_tbl; ptbl->name; ptbl++) { |
| 1175 | if (!strcasecmp(arg, ptbl->name)) { | 1173 | if (!strcasecmp(arg, ptbl->name)) { |
| @@ -1185,7 +1183,7 @@ set_table_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL *in_tbl) | |||
| 1185 | } | 1183 | } |
| 1186 | 1184 | ||
| 1187 | void | 1185 | void |
| 1188 | print_name(BIO *out, const char *title, X509_NAME *nm, unsigned long lflags) | 1186 | print_name(BIO * out, const char *title, X509_NAME * nm, unsigned long lflags) |
| 1189 | { | 1187 | { |
| 1190 | char *buf; | 1188 | char *buf; |
| 1191 | char mline = 0; | 1189 | char mline = 0; |
| @@ -1211,7 +1209,7 @@ print_name(BIO *out, const char *title, X509_NAME *nm, unsigned long lflags) | |||
| 1211 | } | 1209 | } |
| 1212 | 1210 | ||
| 1213 | X509_STORE * | 1211 | X509_STORE * |
| 1214 | setup_verify(BIO *bp, char *CAfile, char *CApath) | 1212 | setup_verify(BIO * bp, char *CAfile, char *CApath) |
| 1215 | { | 1213 | { |
| 1216 | X509_STORE *store; | 1214 | X509_STORE *store; |
| 1217 | X509_LOOKUP *lookup; | 1215 | X509_LOOKUP *lookup; |
| @@ -1250,7 +1248,7 @@ end: | |||
| 1250 | #ifndef OPENSSL_NO_ENGINE | 1248 | #ifndef OPENSSL_NO_ENGINE |
| 1251 | /* Try to load an engine in a shareable library */ | 1249 | /* Try to load an engine in a shareable library */ |
| 1252 | static ENGINE * | 1250 | static ENGINE * |
| 1253 | try_load_engine(BIO *err, const char *engine, int debug) | 1251 | try_load_engine(BIO * err, const char *engine, int debug) |
| 1254 | { | 1252 | { |
| 1255 | ENGINE *e = ENGINE_by_id("dynamic"); | 1253 | ENGINE *e = ENGINE_by_id("dynamic"); |
| 1256 | if (e) { | 1254 | if (e) { |
| @@ -1264,7 +1262,7 @@ try_load_engine(BIO *err, const char *engine, int debug) | |||
| 1264 | } | 1262 | } |
| 1265 | 1263 | ||
| 1266 | ENGINE * | 1264 | ENGINE * |
| 1267 | setup_engine(BIO *err, const char *engine, int debug) | 1265 | setup_engine(BIO * err, const char *engine, int debug) |
| 1268 | { | 1266 | { |
| 1269 | ENGINE *e = NULL; | 1267 | ENGINE *e = NULL; |
| 1270 | 1268 | ||
| @@ -1291,7 +1289,6 @@ setup_engine(BIO *err, const char *engine, int debug) | |||
| 1291 | ENGINE_free(e); | 1289 | ENGINE_free(e); |
| 1292 | return NULL; | 1290 | return NULL; |
| 1293 | } | 1291 | } |
| 1294 | |||
| 1295 | BIO_printf(err, "engine \"%s\" set.\n", ENGINE_get_id(e)); | 1292 | BIO_printf(err, "engine \"%s\" set.\n", ENGINE_get_id(e)); |
| 1296 | 1293 | ||
| 1297 | /* Free our "structural" reference. */ | 1294 | /* Free our "structural" reference. */ |
| @@ -1302,7 +1299,7 @@ setup_engine(BIO *err, const char *engine, int debug) | |||
| 1302 | #endif | 1299 | #endif |
| 1303 | 1300 | ||
| 1304 | int | 1301 | int |
| 1305 | load_config(BIO *err, CONF *cnf) | 1302 | load_config(BIO * err, CONF * cnf) |
| 1306 | { | 1303 | { |
| 1307 | static int load_config_called = 0; | 1304 | static int load_config_called = 0; |
| 1308 | if (load_config_called) | 1305 | if (load_config_called) |
| @@ -1340,7 +1337,7 @@ make_config_name() | |||
| 1340 | } | 1337 | } |
| 1341 | 1338 | ||
| 1342 | static unsigned long | 1339 | static unsigned long |
| 1343 | index_serial_hash(const OPENSSL_CSTRING *a) | 1340 | index_serial_hash(const OPENSSL_CSTRING * a) |
| 1344 | { | 1341 | { |
| 1345 | const char *n; | 1342 | const char *n; |
| 1346 | 1343 | ||
| @@ -1351,14 +1348,12 @@ index_serial_hash(const OPENSSL_CSTRING *a) | |||
| 1351 | } | 1348 | } |
| 1352 | 1349 | ||
| 1353 | static int | 1350 | static int |
| 1354 | index_serial_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b) | 1351 | index_serial_cmp(const OPENSSL_CSTRING * a, const OPENSSL_CSTRING * b) |
| 1355 | { | 1352 | { |
| 1356 | const char *aa, *bb; | 1353 | const char *aa, *bb; |
| 1357 | 1354 | ||
| 1358 | for (aa = a[DB_serial]; *aa == '0'; aa++) | 1355 | for (aa = a[DB_serial]; *aa == '0'; aa++); |
| 1359 | ; | 1356 | for (bb = b[DB_serial]; *bb == '0'; bb++); |
| 1360 | for (bb = b[DB_serial]; *bb == '0'; bb++) | ||
| 1361 | ; | ||
| 1362 | return (strcmp(aa, bb)); | 1357 | return (strcmp(aa, bb)); |
| 1363 | } | 1358 | } |
| 1364 | 1359 | ||
| @@ -1369,27 +1364,27 @@ index_name_qual(char **a) | |||
| 1369 | } | 1364 | } |
| 1370 | 1365 | ||
| 1371 | static unsigned long | 1366 | static unsigned long |
| 1372 | index_name_hash(const OPENSSL_CSTRING *a) | 1367 | index_name_hash(const OPENSSL_CSTRING * a) |
| 1373 | { | 1368 | { |
| 1374 | return (lh_strhash(a[DB_name])); | 1369 | return (lh_strhash(a[DB_name])); |
| 1375 | } | 1370 | } |
| 1376 | 1371 | ||
| 1377 | int | 1372 | int |
| 1378 | index_name_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b) | 1373 | index_name_cmp(const OPENSSL_CSTRING * a, const OPENSSL_CSTRING * b) |
| 1379 | { | 1374 | { |
| 1380 | return (strcmp(a[DB_name], b[DB_name])); | 1375 | return (strcmp(a[DB_name], b[DB_name])); |
| 1381 | } | 1376 | } |
| 1382 | 1377 | ||
| 1383 | static IMPLEMENT_LHASH_HASH_FN(index_serial, OPENSSL_CSTRING) | 1378 | static |
| 1384 | static IMPLEMENT_LHASH_COMP_FN(index_serial, OPENSSL_CSTRING) | 1379 | IMPLEMENT_LHASH_HASH_FN(index_serial, OPENSSL_CSTRING) |
| 1385 | static IMPLEMENT_LHASH_HASH_FN(index_name, OPENSSL_CSTRING) | 1380 | static IMPLEMENT_LHASH_COMP_FN(index_serial, OPENSSL_CSTRING) |
| 1386 | static IMPLEMENT_LHASH_COMP_FN(index_name, OPENSSL_CSTRING) | 1381 | static IMPLEMENT_LHASH_HASH_FN(index_name, OPENSSL_CSTRING) |
| 1387 | 1382 | static IMPLEMENT_LHASH_COMP_FN(index_name, OPENSSL_CSTRING) | |
| 1388 | #undef BSIZE | 1383 | #undef BSIZE |
| 1389 | #define BSIZE 256 | 1384 | #define BSIZE 256 |
| 1390 | 1385 | ||
| 1391 | BIGNUM * | 1386 | BIGNUM * |
| 1392 | load_serial(char *serialfile, int create, ASN1_INTEGER **retai) | 1387 | load_serial(char *serialfile, int create, ASN1_INTEGER ** retai) |
| 1393 | { | 1388 | { |
| 1394 | BIO *in = NULL; | 1389 | BIO *in = NULL; |
| 1395 | BIGNUM *ret = NULL; | 1390 | BIGNUM *ret = NULL; |
| @@ -1404,7 +1399,6 @@ load_serial(char *serialfile, int create, ASN1_INTEGER **retai) | |||
| 1404 | ERR_print_errors(bio_err); | 1399 | ERR_print_errors(bio_err); |
| 1405 | goto err; | 1400 | goto err; |
| 1406 | } | 1401 | } |
| 1407 | |||
| 1408 | if (BIO_read_filename(in, serialfile) <= 0) { | 1402 | if (BIO_read_filename(in, serialfile) <= 0) { |
| 1409 | if (!create) { | 1403 | if (!create) { |
| 1410 | perror(serialfile); | 1404 | perror(serialfile); |
| @@ -1440,8 +1434,8 @@ err: | |||
| 1440 | } | 1434 | } |
| 1441 | 1435 | ||
| 1442 | int | 1436 | int |
| 1443 | save_serial(char *serialfile, char *suffix, BIGNUM *serial, | 1437 | save_serial(char *serialfile, char *suffix, BIGNUM * serial, |
| 1444 | ASN1_INTEGER **retai) | 1438 | ASN1_INTEGER ** retai) |
| 1445 | { | 1439 | { |
| 1446 | char buf[1][BSIZE]; | 1440 | char buf[1][BSIZE]; |
| 1447 | BIO *out = NULL; | 1441 | BIO *out = NULL; |
| @@ -1457,7 +1451,6 @@ save_serial(char *serialfile, char *suffix, BIGNUM *serial, | |||
| 1457 | BIO_printf(bio_err, "file name too long\n"); | 1451 | BIO_printf(bio_err, "file name too long\n"); |
| 1458 | goto err; | 1452 | goto err; |
| 1459 | } | 1453 | } |
| 1460 | |||
| 1461 | if (suffix == NULL) | 1454 | if (suffix == NULL) |
| 1462 | BUF_strlcpy(buf[0], serialfile, BSIZE); | 1455 | BUF_strlcpy(buf[0], serialfile, BSIZE); |
| 1463 | else | 1456 | else |
| @@ -1474,7 +1467,6 @@ save_serial(char *serialfile, char *suffix, BIGNUM *serial, | |||
| 1474 | perror(serialfile); | 1467 | perror(serialfile); |
| 1475 | goto err; | 1468 | goto err; |
| 1476 | } | 1469 | } |
| 1477 | |||
| 1478 | if ((ai = BN_to_ASN1_INTEGER(serial, NULL)) == NULL) { | 1470 | if ((ai = BN_to_ASN1_INTEGER(serial, NULL)) == NULL) { |
| 1479 | BIO_printf(bio_err, "error converting serial to ASN.1 format\n"); | 1471 | BIO_printf(bio_err, "error converting serial to ASN.1 format\n"); |
| 1480 | goto err; | 1472 | goto err; |
| @@ -1508,7 +1500,6 @@ rotate_serial(char *serialfile, char *new_suffix, char *old_suffix) | |||
| 1508 | BIO_printf(bio_err, "file name too long\n"); | 1500 | BIO_printf(bio_err, "file name too long\n"); |
| 1509 | goto err; | 1501 | goto err; |
| 1510 | } | 1502 | } |
| 1511 | |||
| 1512 | (void) snprintf(buf[0], sizeof buf[0], "%s.%s", | 1503 | (void) snprintf(buf[0], sizeof buf[0], "%s.%s", |
| 1513 | serialfile, new_suffix); | 1504 | serialfile, new_suffix); |
| 1514 | (void) snprintf(buf[1], sizeof buf[1], "%s.%s", | 1505 | (void) snprintf(buf[1], sizeof buf[1], "%s.%s", |
| @@ -1521,7 +1512,7 @@ rotate_serial(char *serialfile, char *new_suffix, char *old_suffix) | |||
| 1521 | #ifdef ENOTDIR | 1512 | #ifdef ENOTDIR |
| 1522 | && errno != ENOTDIR | 1513 | && errno != ENOTDIR |
| 1523 | #endif | 1514 | #endif |
| 1524 | ) { | 1515 | ) { |
| 1525 | BIO_printf(bio_err, | 1516 | BIO_printf(bio_err, |
| 1526 | "unable to rename %s to %s\n", | 1517 | "unable to rename %s to %s\n", |
| 1527 | serialfile, buf[1]); | 1518 | serialfile, buf[1]); |
| @@ -1546,7 +1537,7 @@ err: | |||
| 1546 | } | 1537 | } |
| 1547 | 1538 | ||
| 1548 | int | 1539 | int |
| 1549 | rand_serial(BIGNUM *b, ASN1_INTEGER *ai) | 1540 | rand_serial(BIGNUM * b, ASN1_INTEGER * ai) |
| 1550 | { | 1541 | { |
| 1551 | BIGNUM *btmp; | 1542 | BIGNUM *btmp; |
| 1552 | int ret = 0; | 1543 | int ret = 0; |
| @@ -1573,7 +1564,7 @@ error: | |||
| 1573 | } | 1564 | } |
| 1574 | 1565 | ||
| 1575 | CA_DB * | 1566 | CA_DB * |
| 1576 | load_index(char *dbfile, DB_ATTR *db_attr) | 1567 | load_index(char *dbfile, DB_ATTR * db_attr) |
| 1577 | { | 1568 | { |
| 1578 | CA_DB *retdb = NULL; | 1569 | CA_DB *retdb = NULL; |
| 1579 | TXT_DB *tmpdb = NULL; | 1570 | TXT_DB *tmpdb = NULL; |
| @@ -1599,20 +1590,18 @@ load_index(char *dbfile, DB_ATTR *db_attr) | |||
| 1599 | if (NCONF_load(dbattr_conf, buf[0], &errorline) <= 0) { | 1590 | if (NCONF_load(dbattr_conf, buf[0], &errorline) <= 0) { |
| 1600 | if (errorline > 0) { | 1591 | if (errorline > 0) { |
| 1601 | BIO_printf(bio_err, | 1592 | BIO_printf(bio_err, |
| 1602 | "error on line %ld of db attribute file '%s'\n" | 1593 | "error on line %ld of db attribute file '%s'\n" |
| 1603 | , errorline, buf[0]); | 1594 | ,errorline, buf[0]); |
| 1604 | goto err; | 1595 | goto err; |
| 1605 | } else { | 1596 | } else { |
| 1606 | NCONF_free(dbattr_conf); | 1597 | NCONF_free(dbattr_conf); |
| 1607 | dbattr_conf = NULL; | 1598 | dbattr_conf = NULL; |
| 1608 | } | 1599 | } |
| 1609 | } | 1600 | } |
| 1610 | |||
| 1611 | if ((retdb = malloc(sizeof(CA_DB))) == NULL) { | 1601 | if ((retdb = malloc(sizeof(CA_DB))) == NULL) { |
| 1612 | fprintf(stderr, "Out of memory\n"); | 1602 | fprintf(stderr, "Out of memory\n"); |
| 1613 | goto err; | 1603 | goto err; |
| 1614 | } | 1604 | } |
| 1615 | |||
| 1616 | retdb->db = tmpdb; | 1605 | retdb->db = tmpdb; |
| 1617 | tmpdb = NULL; | 1606 | tmpdb = NULL; |
| 1618 | if (db_attr) | 1607 | if (db_attr) |
| @@ -1630,7 +1619,6 @@ load_index(char *dbfile, DB_ATTR *db_attr) | |||
| 1630 | retdb->attributes.unique_subject = parse_yesno(p, 1); | 1619 | retdb->attributes.unique_subject = parse_yesno(p, 1); |
| 1631 | } | 1620 | } |
| 1632 | } | 1621 | } |
| 1633 | |||
| 1634 | err: | 1622 | err: |
| 1635 | if (dbattr_conf) | 1623 | if (dbattr_conf) |
| 1636 | NCONF_free(dbattr_conf); | 1624 | NCONF_free(dbattr_conf); |
| @@ -1642,20 +1630,19 @@ err: | |||
| 1642 | } | 1630 | } |
| 1643 | 1631 | ||
| 1644 | int | 1632 | int |
| 1645 | index_index(CA_DB *db) | 1633 | index_index(CA_DB * db) |
| 1646 | { | 1634 | { |
| 1647 | if (!TXT_DB_create_index(db->db, DB_serial, NULL, | 1635 | if (!TXT_DB_create_index(db->db, DB_serial, NULL, |
| 1648 | LHASH_HASH_FN(index_serial), | 1636 | LHASH_HASH_FN(index_serial), |
| 1649 | LHASH_COMP_FN(index_serial))) { | 1637 | LHASH_COMP_FN(index_serial))) { |
| 1650 | BIO_printf(bio_err, | 1638 | BIO_printf(bio_err, |
| 1651 | "error creating serial number index:(%ld,%ld,%ld)\n", | 1639 | "error creating serial number index:(%ld,%ld,%ld)\n", |
| 1652 | db->db->error, db->db->arg1, db->db->arg2); | 1640 | db->db->error, db->db->arg1, db->db->arg2); |
| 1653 | return 0; | 1641 | return 0; |
| 1654 | } | 1642 | } |
| 1655 | |||
| 1656 | if (db->attributes.unique_subject && | 1643 | if (db->attributes.unique_subject && |
| 1657 | !TXT_DB_create_index(db->db, DB_name, index_name_qual, | 1644 | !TXT_DB_create_index(db->db, DB_name, index_name_qual, |
| 1658 | LHASH_HASH_FN(index_name), LHASH_COMP_FN(index_name))) { | 1645 | LHASH_HASH_FN(index_name), LHASH_COMP_FN(index_name))) { |
| 1659 | BIO_printf(bio_err, "error creating name index:(%ld,%ld,%ld)\n", | 1646 | BIO_printf(bio_err, "error creating name index:(%ld,%ld,%ld)\n", |
| 1660 | db->db->error, db->db->arg1, db->db->arg2); | 1647 | db->db->error, db->db->arg1, db->db->arg2); |
| 1661 | return 0; | 1648 | return 0; |
| @@ -1664,7 +1651,7 @@ index_index(CA_DB *db) | |||
| 1664 | } | 1651 | } |
| 1665 | 1652 | ||
| 1666 | int | 1653 | int |
| 1667 | save_index(const char *dbfile, const char *suffix, CA_DB *db) | 1654 | save_index(const char *dbfile, const char *suffix, CA_DB * db) |
| 1668 | { | 1655 | { |
| 1669 | char buf[3][BSIZE]; | 1656 | char buf[3][BSIZE]; |
| 1670 | BIO *out = BIO_new(BIO_s_file()); | 1657 | BIO *out = BIO_new(BIO_s_file()); |
| @@ -1674,13 +1661,11 @@ save_index(const char *dbfile, const char *suffix, CA_DB *db) | |||
| 1674 | ERR_print_errors(bio_err); | 1661 | ERR_print_errors(bio_err); |
| 1675 | goto err; | 1662 | goto err; |
| 1676 | } | 1663 | } |
| 1677 | |||
| 1678 | j = strlen(dbfile) + strlen(suffix); | 1664 | j = strlen(dbfile) + strlen(suffix); |
| 1679 | if (j + 6 >= BSIZE) { | 1665 | if (j + 6 >= BSIZE) { |
| 1680 | BIO_printf(bio_err, "file name too long\n"); | 1666 | BIO_printf(bio_err, "file name too long\n"); |
| 1681 | goto err; | 1667 | goto err; |
| 1682 | } | 1668 | } |
| 1683 | |||
| 1684 | (void) snprintf(buf[2], sizeof buf[2], "%s.attr", dbfile); | 1669 | (void) snprintf(buf[2], sizeof buf[2], "%s.attr", dbfile); |
| 1685 | (void) snprintf(buf[1], sizeof buf[1], "%s.attr.%s", dbfile, suffix); | 1670 | (void) snprintf(buf[1], sizeof buf[1], "%s.attr.%s", dbfile, suffix); |
| 1686 | (void) snprintf(buf[0], sizeof buf[0], "%s.%s", dbfile, suffix); | 1671 | (void) snprintf(buf[0], sizeof buf[0], "%s.%s", dbfile, suffix); |
| @@ -1730,7 +1715,6 @@ rotate_index(const char *dbfile, const char *new_suffix, const char *old_suffix) | |||
| 1730 | BIO_printf(bio_err, "file name too long\n"); | 1715 | BIO_printf(bio_err, "file name too long\n"); |
| 1731 | goto err; | 1716 | goto err; |
| 1732 | } | 1717 | } |
| 1733 | |||
| 1734 | (void) snprintf(buf[4], sizeof buf[4], "%s.attr", dbfile); | 1718 | (void) snprintf(buf[4], sizeof buf[4], "%s.attr", dbfile); |
| 1735 | (void) snprintf(buf[2], sizeof buf[2], "%s.attr.%s", | 1719 | (void) snprintf(buf[2], sizeof buf[2], "%s.attr.%s", |
| 1736 | dbfile, new_suffix); | 1720 | dbfile, new_suffix); |
| @@ -1748,7 +1732,7 @@ rotate_index(const char *dbfile, const char *new_suffix, const char *old_suffix) | |||
| 1748 | #ifdef ENOTDIR | 1732 | #ifdef ENOTDIR |
| 1749 | && errno != ENOTDIR | 1733 | && errno != ENOTDIR |
| 1750 | #endif | 1734 | #endif |
| 1751 | ) { | 1735 | ) { |
| 1752 | BIO_printf(bio_err, | 1736 | BIO_printf(bio_err, |
| 1753 | "unable to rename %s to %s\n", | 1737 | "unable to rename %s to %s\n", |
| 1754 | dbfile, buf[1]); | 1738 | dbfile, buf[1]); |
| @@ -1775,7 +1759,7 @@ rotate_index(const char *dbfile, const char *new_suffix, const char *old_suffix) | |||
| 1775 | #ifdef ENOTDIR | 1759 | #ifdef ENOTDIR |
| 1776 | && errno != ENOTDIR | 1760 | && errno != ENOTDIR |
| 1777 | #endif | 1761 | #endif |
| 1778 | ) { | 1762 | ) { |
| 1779 | BIO_printf(bio_err, | 1763 | BIO_printf(bio_err, |
| 1780 | "unable to rename %s to %s\n", | 1764 | "unable to rename %s to %s\n", |
| 1781 | buf[4], buf[3]); | 1765 | buf[4], buf[3]); |
| @@ -1805,7 +1789,7 @@ err: | |||
| 1805 | } | 1789 | } |
| 1806 | 1790 | ||
| 1807 | void | 1791 | void |
| 1808 | free_index(CA_DB *db) | 1792 | free_index(CA_DB * db) |
| 1809 | { | 1793 | { |
| 1810 | if (db) { | 1794 | if (db) { |
| 1811 | if (db->db) | 1795 | if (db->db) |
| @@ -1820,18 +1804,18 @@ parse_yesno(const char *str, int def) | |||
| 1820 | int ret = def; | 1804 | int ret = def; |
| 1821 | if (str) { | 1805 | if (str) { |
| 1822 | switch (*str) { | 1806 | switch (*str) { |
| 1823 | case 'f': /* false */ | 1807 | case 'f': /* false */ |
| 1824 | case 'F': /* FALSE */ | 1808 | case 'F': /* FALSE */ |
| 1825 | case 'n': /* no */ | 1809 | case 'n': /* no */ |
| 1826 | case 'N': /* NO */ | 1810 | case 'N': /* NO */ |
| 1827 | case '0': /* 0 */ | 1811 | case '0': /* 0 */ |
| 1828 | ret = 0; | 1812 | ret = 0; |
| 1829 | break; | 1813 | break; |
| 1830 | case 't': /* true */ | 1814 | case 't': /* true */ |
| 1831 | case 'T': /* TRUE */ | 1815 | case 'T': /* TRUE */ |
| 1832 | case 'y': /* yes */ | 1816 | case 'y': /* yes */ |
| 1833 | case 'Y': /* YES */ | 1817 | case 'Y': /* YES */ |
| 1834 | case '1': /* 1 */ | 1818 | case '1': /* 1 */ |
| 1835 | ret = 1; | 1819 | ret = 1; |
| 1836 | break; | 1820 | break; |
| 1837 | default: | 1821 | default: |
| @@ -1849,12 +1833,15 @@ parse_yesno(const char *str, int def) | |||
| 1849 | X509_NAME * | 1833 | X509_NAME * |
| 1850 | parse_name(char *subject, long chtype, int multirdn) | 1834 | parse_name(char *subject, long chtype, int multirdn) |
| 1851 | { | 1835 | { |
| 1852 | size_t buflen = strlen(subject)+1; /* to copy the types and values into. due to escaping, the copy can only become shorter */ | 1836 | size_t buflen = strlen(subject) + 1; /* to copy the types and |
| 1837 | * values into. due to | ||
| 1838 | * escaping, the copy can | ||
| 1839 | * only become shorter */ | ||
| 1853 | char *buf = malloc(buflen); | 1840 | char *buf = malloc(buflen); |
| 1854 | size_t max_ne = buflen / 2 + 1; /* maximum number of name elements */ | 1841 | size_t max_ne = buflen / 2 + 1; /* maximum number of name elements */ |
| 1855 | char **ne_types = malloc(max_ne * sizeof (char *)); | 1842 | char **ne_types = malloc(max_ne * sizeof(char *)); |
| 1856 | char **ne_values = malloc(max_ne * sizeof (char *)); | 1843 | char **ne_values = malloc(max_ne * sizeof(char *)); |
| 1857 | int *mval = malloc (max_ne * sizeof (int)); | 1844 | int *mval = malloc(max_ne * sizeof(int)); |
| 1858 | 1845 | ||
| 1859 | char *sp = subject, *bp = buf; | 1846 | char *sp = subject, *bp = buf; |
| 1860 | int i, ne_num = 0; | 1847 | int i, ne_num = 0; |
| @@ -1866,12 +1853,11 @@ parse_name(char *subject, long chtype, int multirdn) | |||
| 1866 | BIO_printf(bio_err, "malloc error\n"); | 1853 | BIO_printf(bio_err, "malloc error\n"); |
| 1867 | goto error; | 1854 | goto error; |
| 1868 | } | 1855 | } |
| 1869 | |||
| 1870 | if (*subject != '/') { | 1856 | if (*subject != '/') { |
| 1871 | BIO_printf(bio_err, "Subject does not start with '/'.\n"); | 1857 | BIO_printf(bio_err, "Subject does not start with '/'.\n"); |
| 1872 | goto error; | 1858 | goto error; |
| 1873 | } | 1859 | } |
| 1874 | sp++; /* skip leading / */ | 1860 | sp++; /* skip leading / */ |
| 1875 | 1861 | ||
| 1876 | /* no multivalued RDN by default */ | 1862 | /* no multivalued RDN by default */ |
| 1877 | mval[ne_num] = 0; | 1863 | mval[ne_num] = 0; |
| @@ -1880,8 +1866,8 @@ parse_name(char *subject, long chtype, int multirdn) | |||
| 1880 | /* collect type */ | 1866 | /* collect type */ |
| 1881 | ne_types[ne_num] = bp; | 1867 | ne_types[ne_num] = bp; |
| 1882 | while (*sp) { | 1868 | while (*sp) { |
| 1883 | if (*sp == '\\') /* is there anything to escape in the type...? */ | 1869 | if (*sp == '\\') { /* is there anything to |
| 1884 | { | 1870 | * escape in the type...? */ |
| 1885 | if (*++sp) | 1871 | if (*++sp) |
| 1886 | *bp++ = *sp++; | 1872 | *bp++ = *sp++; |
| 1887 | else { | 1873 | else { |
| @@ -1933,13 +1919,11 @@ parse_name(char *subject, long chtype, int multirdn) | |||
| 1933 | BIO_printf(bio_err, "Subject Attribute %s has no known NID, skipped\n", ne_types[i]); | 1919 | BIO_printf(bio_err, "Subject Attribute %s has no known NID, skipped\n", ne_types[i]); |
| 1934 | continue; | 1920 | continue; |
| 1935 | } | 1921 | } |
| 1936 | |||
| 1937 | if (!*ne_values[i]) { | 1922 | if (!*ne_values[i]) { |
| 1938 | BIO_printf(bio_err, "No value provided for Subject Attribute %s, skipped\n", ne_types[i]); | 1923 | BIO_printf(bio_err, "No value provided for Subject Attribute %s, skipped\n", ne_types[i]); |
| 1939 | continue; | 1924 | continue; |
| 1940 | } | 1925 | } |
| 1941 | 1926 | if (!X509_NAME_add_entry_by_NID(n, nid, chtype, (unsigned char *) ne_values[i], -1, -1, mval[i])) | |
| 1942 | if (!X509_NAME_add_entry_by_NID(n, nid, chtype, (unsigned char*)ne_values[i], -1, -1, mval[i])) | ||
| 1943 | goto error; | 1927 | goto error; |
| 1944 | } | 1928 | } |
| 1945 | 1929 | ||
| @@ -1964,7 +1948,7 @@ error: | |||
| 1964 | 1948 | ||
| 1965 | int | 1949 | int |
| 1966 | args_verify(char ***pargs, int *pargc, | 1950 | args_verify(char ***pargs, int *pargc, |
| 1967 | int *badarg, BIO *err, X509_VERIFY_PARAM **pm) | 1951 | int *badarg, BIO * err, X509_VERIFY_PARAM ** pm) |
| 1968 | { | 1952 | { |
| 1969 | ASN1_OBJECT *otmp = NULL; | 1953 | ASN1_OBJECT *otmp = NULL; |
| 1970 | unsigned long flags = 0; | 1954 | unsigned long flags = 0; |
| @@ -2016,8 +2000,10 @@ args_verify(char ***pargs, int *pargc, | |||
| 2016 | *badarg = 1; | 2000 | *badarg = 1; |
| 2017 | else { | 2001 | else { |
| 2018 | long timestamp; | 2002 | long timestamp; |
| 2019 | /* interpret the -attime argument as seconds since | 2003 | /* |
| 2020 | * Epoch */ | 2004 | * interpret the -attime argument as seconds since |
| 2005 | * Epoch | ||
| 2006 | */ | ||
| 2021 | if (sscanf(argn, "%li", ×tamp) != 1) { | 2007 | if (sscanf(argn, "%li", ×tamp) != 1) { |
| 2022 | BIO_printf(bio_err, | 2008 | BIO_printf(bio_err, |
| 2023 | "Error parsing timestamp %s\n", | 2009 | "Error parsing timestamp %s\n", |
| @@ -2033,9 +2019,9 @@ args_verify(char ***pargs, int *pargc, | |||
| 2033 | else if (!strcmp(arg, "-issuer_checks")) | 2019 | else if (!strcmp(arg, "-issuer_checks")) |
| 2034 | flags |= X509_V_FLAG_CB_ISSUER_CHECK; | 2020 | flags |= X509_V_FLAG_CB_ISSUER_CHECK; |
| 2035 | else if (!strcmp(arg, "-crl_check")) | 2021 | else if (!strcmp(arg, "-crl_check")) |
| 2036 | flags |= X509_V_FLAG_CRL_CHECK; | 2022 | flags |= X509_V_FLAG_CRL_CHECK; |
| 2037 | else if (!strcmp(arg, "-crl_check_all")) | 2023 | else if (!strcmp(arg, "-crl_check_all")) |
| 2038 | flags |= X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL; | 2024 | flags |= X509_V_FLAG_CRL_CHECK | X509_V_FLAG_CRL_CHECK_ALL; |
| 2039 | else if (!strcmp(arg, "-policy_check")) | 2025 | else if (!strcmp(arg, "-policy_check")) |
| 2040 | flags |= X509_V_FLAG_POLICY_CHECK; | 2026 | flags |= X509_V_FLAG_POLICY_CHECK; |
| 2041 | else if (!strcmp(arg, "-explicit_policy")) | 2027 | else if (!strcmp(arg, "-explicit_policy")) |
| @@ -2063,12 +2049,10 @@ args_verify(char ***pargs, int *pargc, | |||
| 2063 | *pm = NULL; | 2049 | *pm = NULL; |
| 2064 | goto end; | 2050 | goto end; |
| 2065 | } | 2051 | } |
| 2066 | |||
| 2067 | if (!*pm && !(*pm = X509_VERIFY_PARAM_new())) { | 2052 | if (!*pm && !(*pm = X509_VERIFY_PARAM_new())) { |
| 2068 | *badarg = 1; | 2053 | *badarg = 1; |
| 2069 | goto end; | 2054 | goto end; |
| 2070 | } | 2055 | } |
| 2071 | |||
| 2072 | if (otmp) | 2056 | if (otmp) |
| 2073 | X509_VERIFY_PARAM_add0_policy(*pm, otmp); | 2057 | X509_VERIFY_PARAM_add0_policy(*pm, otmp); |
| 2074 | if (flags) | 2058 | if (flags) |
| @@ -2097,7 +2081,7 @@ end: | |||
| 2097 | */ | 2081 | */ |
| 2098 | 2082 | ||
| 2099 | int | 2083 | int |
| 2100 | bio_to_mem(unsigned char **out, int maxlen, BIO *in) | 2084 | bio_to_mem(unsigned char **out, int maxlen, BIO * in) |
| 2101 | { | 2085 | { |
| 2102 | BIO *mem; | 2086 | BIO *mem; |
| 2103 | int len, ret; | 2087 | int len, ret; |
| @@ -2122,14 +2106,14 @@ bio_to_mem(unsigned char **out, int maxlen, BIO *in) | |||
| 2122 | if (maxlen == 0) | 2106 | if (maxlen == 0) |
| 2123 | break; | 2107 | break; |
| 2124 | } | 2108 | } |
| 2125 | ret = BIO_get_mem_data(mem, (char **)out); | 2109 | ret = BIO_get_mem_data(mem, (char **) out); |
| 2126 | BIO_set_flags(mem, BIO_FLAGS_MEM_RDONLY); | 2110 | BIO_set_flags(mem, BIO_FLAGS_MEM_RDONLY); |
| 2127 | BIO_free(mem); | 2111 | BIO_free(mem); |
| 2128 | return ret; | 2112 | return ret; |
| 2129 | } | 2113 | } |
| 2130 | 2114 | ||
| 2131 | int | 2115 | int |
| 2132 | pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value) | 2116 | pkey_ctrl_string(EVP_PKEY_CTX * ctx, char *value) |
| 2133 | { | 2117 | { |
| 2134 | int rv; | 2118 | int rv; |
| 2135 | char *stmp, *vtmp = NULL; | 2119 | char *stmp, *vtmp = NULL; |
| @@ -2147,7 +2131,7 @@ pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value) | |||
| 2147 | } | 2131 | } |
| 2148 | 2132 | ||
| 2149 | static void | 2133 | static void |
| 2150 | nodes_print(BIO *out, const char *name, STACK_OF(X509_POLICY_NODE) *nodes) | 2134 | nodes_print(BIO * out, const char *name, STACK_OF(X509_POLICY_NODE) * nodes) |
| 2151 | { | 2135 | { |
| 2152 | X509_POLICY_NODE *node; | 2136 | X509_POLICY_NODE *node; |
| 2153 | int i; | 2137 | int i; |
| @@ -2163,7 +2147,7 @@ nodes_print(BIO *out, const char *name, STACK_OF(X509_POLICY_NODE) *nodes) | |||
| 2163 | } | 2147 | } |
| 2164 | 2148 | ||
| 2165 | void | 2149 | void |
| 2166 | policies_print(BIO *out, X509_STORE_CTX *ctx) | 2150 | policies_print(BIO * out, X509_STORE_CTX * ctx) |
| 2167 | { | 2151 | { |
| 2168 | X509_POLICY_TREE *tree; | 2152 | X509_POLICY_TREE *tree; |
| 2169 | int explicit_policy; | 2153 | int explicit_policy; |
| @@ -2203,7 +2187,7 @@ jpake_init(const char *us, const char *them, | |||
| 2203 | q = BN_new(); | 2187 | q = BN_new(); |
| 2204 | BN_rshift1(q, p); | 2188 | BN_rshift1(q, p); |
| 2205 | 2189 | ||
| 2206 | BN_bin2bn((const unsigned char *)secret, strlen(secret), bnsecret); | 2190 | BN_bin2bn((const unsigned char *) secret, strlen(secret), bnsecret); |
| 2207 | 2191 | ||
| 2208 | ctx = JPAKE_CTX_new(us, them, p, g, q, bnsecret); | 2192 | ctx = JPAKE_CTX_new(us, them, p, g, q, bnsecret); |
| 2209 | BN_free(bnsecret); | 2193 | BN_free(bnsecret); |
| @@ -2215,7 +2199,7 @@ jpake_init(const char *us, const char *them, | |||
| 2215 | } | 2199 | } |
| 2216 | 2200 | ||
| 2217 | static void | 2201 | static void |
| 2218 | jpake_send_part(BIO *conn, const JPAKE_STEP_PART *p) | 2202 | jpake_send_part(BIO * conn, const JPAKE_STEP_PART * p) |
| 2219 | { | 2203 | { |
| 2220 | BN_print(conn, p->gx); | 2204 | BN_print(conn, p->gx); |
| 2221 | BIO_puts(conn, "\n"); | 2205 | BIO_puts(conn, "\n"); |
| @@ -2226,7 +2210,7 @@ jpake_send_part(BIO *conn, const JPAKE_STEP_PART *p) | |||
| 2226 | } | 2210 | } |
| 2227 | 2211 | ||
| 2228 | static void | 2212 | static void |
| 2229 | jpake_send_step1(BIO *bconn, JPAKE_CTX *ctx) | 2213 | jpake_send_step1(BIO * bconn, JPAKE_CTX * ctx) |
| 2230 | { | 2214 | { |
| 2231 | JPAKE_STEP1 s1; | 2215 | JPAKE_STEP1 s1; |
| 2232 | 2216 | ||
| @@ -2234,48 +2218,48 @@ jpake_send_step1(BIO *bconn, JPAKE_CTX *ctx) | |||
| 2234 | JPAKE_STEP1_generate(&s1, ctx); | 2218 | JPAKE_STEP1_generate(&s1, ctx); |
| 2235 | jpake_send_part(bconn, &s1.p1); | 2219 | jpake_send_part(bconn, &s1.p1); |
| 2236 | jpake_send_part(bconn, &s1.p2); | 2220 | jpake_send_part(bconn, &s1.p2); |
| 2237 | (void)BIO_flush(bconn); | 2221 | (void) BIO_flush(bconn); |
| 2238 | JPAKE_STEP1_release(&s1); | 2222 | JPAKE_STEP1_release(&s1); |
| 2239 | } | 2223 | } |
| 2240 | 2224 | ||
| 2241 | static void | 2225 | static void |
| 2242 | jpake_send_step2(BIO *bconn, JPAKE_CTX *ctx) | 2226 | jpake_send_step2(BIO * bconn, JPAKE_CTX * ctx) |
| 2243 | { | 2227 | { |
| 2244 | JPAKE_STEP2 s2; | 2228 | JPAKE_STEP2 s2; |
| 2245 | 2229 | ||
| 2246 | JPAKE_STEP2_init(&s2); | 2230 | JPAKE_STEP2_init(&s2); |
| 2247 | JPAKE_STEP2_generate(&s2, ctx); | 2231 | JPAKE_STEP2_generate(&s2, ctx); |
| 2248 | jpake_send_part(bconn, &s2); | 2232 | jpake_send_part(bconn, &s2); |
| 2249 | (void)BIO_flush(bconn); | 2233 | (void) BIO_flush(bconn); |
| 2250 | JPAKE_STEP2_release(&s2); | 2234 | JPAKE_STEP2_release(&s2); |
| 2251 | } | 2235 | } |
| 2252 | 2236 | ||
| 2253 | static void | 2237 | static void |
| 2254 | jpake_send_step3a(BIO *bconn, JPAKE_CTX *ctx) | 2238 | jpake_send_step3a(BIO * bconn, JPAKE_CTX * ctx) |
| 2255 | { | 2239 | { |
| 2256 | JPAKE_STEP3A s3a; | 2240 | JPAKE_STEP3A s3a; |
| 2257 | 2241 | ||
| 2258 | JPAKE_STEP3A_init(&s3a); | 2242 | JPAKE_STEP3A_init(&s3a); |
| 2259 | JPAKE_STEP3A_generate(&s3a, ctx); | 2243 | JPAKE_STEP3A_generate(&s3a, ctx); |
| 2260 | BIO_write(bconn, s3a.hhk, sizeof s3a.hhk); | 2244 | BIO_write(bconn, s3a.hhk, sizeof s3a.hhk); |
| 2261 | (void)BIO_flush(bconn); | 2245 | (void) BIO_flush(bconn); |
| 2262 | JPAKE_STEP3A_release(&s3a); | 2246 | JPAKE_STEP3A_release(&s3a); |
| 2263 | } | 2247 | } |
| 2264 | 2248 | ||
| 2265 | static void | 2249 | static void |
| 2266 | jpake_send_step3b(BIO *bconn, JPAKE_CTX *ctx) | 2250 | jpake_send_step3b(BIO * bconn, JPAKE_CTX * ctx) |
| 2267 | { | 2251 | { |
| 2268 | JPAKE_STEP3B s3b; | 2252 | JPAKE_STEP3B s3b; |
| 2269 | 2253 | ||
| 2270 | JPAKE_STEP3B_init(&s3b); | 2254 | JPAKE_STEP3B_init(&s3b); |
| 2271 | JPAKE_STEP3B_generate(&s3b, ctx); | 2255 | JPAKE_STEP3B_generate(&s3b, ctx); |
| 2272 | BIO_write(bconn, s3b.hk, sizeof s3b.hk); | 2256 | BIO_write(bconn, s3b.hk, sizeof s3b.hk); |
| 2273 | (void)BIO_flush(bconn); | 2257 | (void) BIO_flush(bconn); |
| 2274 | JPAKE_STEP3B_release(&s3b); | 2258 | JPAKE_STEP3B_release(&s3b); |
| 2275 | } | 2259 | } |
| 2276 | 2260 | ||
| 2277 | static void | 2261 | static void |
| 2278 | readbn(BIGNUM **bn, BIO *bconn) | 2262 | readbn(BIGNUM ** bn, BIO * bconn) |
| 2279 | { | 2263 | { |
| 2280 | char buf[10240]; | 2264 | char buf[10240]; |
| 2281 | int l; | 2265 | int l; |
| @@ -2288,7 +2272,7 @@ readbn(BIGNUM **bn, BIO *bconn) | |||
| 2288 | } | 2272 | } |
| 2289 | 2273 | ||
| 2290 | static void | 2274 | static void |
| 2291 | jpake_receive_part(JPAKE_STEP_PART *p, BIO *bconn) | 2275 | jpake_receive_part(JPAKE_STEP_PART * p, BIO * bconn) |
| 2292 | { | 2276 | { |
| 2293 | readbn(&p->gx, bconn); | 2277 | readbn(&p->gx, bconn); |
| 2294 | readbn(&p->zkpx.gr, bconn); | 2278 | readbn(&p->zkpx.gr, bconn); |
| @@ -2296,7 +2280,7 @@ jpake_receive_part(JPAKE_STEP_PART *p, BIO *bconn) | |||
| 2296 | } | 2280 | } |
| 2297 | 2281 | ||
| 2298 | static void | 2282 | static void |
| 2299 | jpake_receive_step1(JPAKE_CTX *ctx, BIO *bconn) | 2283 | jpake_receive_step1(JPAKE_CTX * ctx, BIO * bconn) |
| 2300 | { | 2284 | { |
| 2301 | JPAKE_STEP1 s1; | 2285 | JPAKE_STEP1 s1; |
| 2302 | 2286 | ||
| @@ -2311,7 +2295,7 @@ jpake_receive_step1(JPAKE_CTX *ctx, BIO *bconn) | |||
| 2311 | } | 2295 | } |
| 2312 | 2296 | ||
| 2313 | static void | 2297 | static void |
| 2314 | jpake_receive_step2(JPAKE_CTX *ctx, BIO *bconn) | 2298 | jpake_receive_step2(JPAKE_CTX * ctx, BIO * bconn) |
| 2315 | { | 2299 | { |
| 2316 | JPAKE_STEP2 s2; | 2300 | JPAKE_STEP2 s2; |
| 2317 | 2301 | ||
| @@ -2325,7 +2309,7 @@ jpake_receive_step2(JPAKE_CTX *ctx, BIO *bconn) | |||
| 2325 | } | 2309 | } |
| 2326 | 2310 | ||
| 2327 | static void | 2311 | static void |
| 2328 | jpake_receive_step3a(JPAKE_CTX *ctx, BIO *bconn) | 2312 | jpake_receive_step3a(JPAKE_CTX * ctx, BIO * bconn) |
| 2329 | { | 2313 | { |
| 2330 | JPAKE_STEP3A s3a; | 2314 | JPAKE_STEP3A s3a; |
| 2331 | int l; | 2315 | int l; |
| @@ -2341,7 +2325,7 @@ jpake_receive_step3a(JPAKE_CTX *ctx, BIO *bconn) | |||
| 2341 | } | 2325 | } |
| 2342 | 2326 | ||
| 2343 | static void | 2327 | static void |
| 2344 | jpake_receive_step3b(JPAKE_CTX *ctx, BIO *bconn) | 2328 | jpake_receive_step3b(JPAKE_CTX * ctx, BIO * bconn) |
| 2345 | { | 2329 | { |
| 2346 | JPAKE_STEP3B s3b; | 2330 | JPAKE_STEP3B s3b; |
| 2347 | int l; | 2331 | int l; |
| @@ -2357,7 +2341,7 @@ jpake_receive_step3b(JPAKE_CTX *ctx, BIO *bconn) | |||
| 2357 | } | 2341 | } |
| 2358 | 2342 | ||
| 2359 | void | 2343 | void |
| 2360 | jpake_client_auth(BIO *out, BIO *conn, const char *secret) | 2344 | jpake_client_auth(BIO * out, BIO * conn, const char *secret) |
| 2361 | { | 2345 | { |
| 2362 | JPAKE_CTX *ctx; | 2346 | JPAKE_CTX *ctx; |
| 2363 | BIO *bconn; | 2347 | BIO *bconn; |
| @@ -2387,7 +2371,7 @@ jpake_client_auth(BIO *out, BIO *conn, const char *secret) | |||
| 2387 | } | 2371 | } |
| 2388 | 2372 | ||
| 2389 | void | 2373 | void |
| 2390 | jpake_server_auth(BIO *out, BIO *conn, const char *secret) | 2374 | jpake_server_auth(BIO * out, BIO * conn, const char *secret) |
| 2391 | { | 2375 | { |
| 2392 | JPAKE_CTX *ctx; | 2376 | JPAKE_CTX *ctx; |
| 2393 | BIO *bconn; | 2377 | BIO *bconn; |
| @@ -2457,7 +2441,8 @@ next_protos_parse(unsigned short *outlen, const char *in) | |||
| 2457 | *outlen = len + 1; | 2441 | *outlen = len + 1; |
| 2458 | return out; | 2442 | return out; |
| 2459 | } | 2443 | } |
| 2460 | #endif /* !OPENSSL_NO_TLSEXT && !OPENSSL_NO_NEXTPROTONEG */ | 2444 | #endif /* !OPENSSL_NO_TLSEXT && |
| 2445 | * !OPENSSL_NO_NEXTPROTONEG */ | ||
| 2461 | 2446 | ||
| 2462 | /* | 2447 | /* |
| 2463 | * Platform-specific sections | 2448 | * Platform-specific sections |
| @@ -2470,10 +2455,10 @@ next_protos_parse(unsigned short *outlen, const char *in) | |||
| 2470 | double | 2455 | double |
| 2471 | app_tminterval(int stop, int usertime) | 2456 | app_tminterval(int stop, int usertime) |
| 2472 | { | 2457 | { |
| 2473 | double ret = 0; | 2458 | double ret = 0; |
| 2474 | struct tms rus; | 2459 | struct tms rus; |
| 2475 | clock_t now = times(&rus); | 2460 | clock_t now = times(&rus); |
| 2476 | static clock_t tmstart; | 2461 | static clock_t tmstart; |
| 2477 | 2462 | ||
| 2478 | if (usertime) | 2463 | if (usertime) |
| 2479 | now = rus.tms_utime; | 2464 | now = rus.tms_utime; |
| @@ -2482,7 +2467,7 @@ app_tminterval(int stop, int usertime) | |||
| 2482 | tmstart = now; | 2467 | tmstart = now; |
| 2483 | else { | 2468 | else { |
| 2484 | long int tck = sysconf(_SC_CLK_TCK); | 2469 | long int tck = sysconf(_SC_CLK_TCK); |
| 2485 | ret = (now - tmstart)/(double)tck; | 2470 | ret = (now - tmstart) / (double) tck; |
| 2486 | } | 2471 | } |
| 2487 | 2472 | ||
| 2488 | return (ret); | 2473 | return (ret); |
| @@ -2495,9 +2480,9 @@ app_tminterval(int stop, int usertime) | |||
| 2495 | double | 2480 | double |
| 2496 | app_tminterval(int stop, int usertime) | 2481 | app_tminterval(int stop, int usertime) |
| 2497 | { | 2482 | { |
| 2498 | double ret = 0; | 2483 | double ret = 0; |
| 2499 | struct rusage rus; | 2484 | struct rusage rus; |
| 2500 | struct timeval now; | 2485 | struct timeval now; |
| 2501 | static struct timeval tmstart; | 2486 | static struct timeval tmstart; |
| 2502 | 2487 | ||
| 2503 | if (usertime) | 2488 | if (usertime) |
| @@ -2518,11 +2503,11 @@ app_tminterval(int stop, int usertime) | |||
| 2518 | /* app_isdir section */ | 2503 | /* app_isdir section */ |
| 2519 | #include <sys/stat.h> | 2504 | #include <sys/stat.h> |
| 2520 | #ifndef S_ISDIR | 2505 | #ifndef S_ISDIR |
| 2521 | # if defined(_S_IFMT) && defined(_S_IFDIR) | 2506 | #if defined(_S_IFMT) && defined(_S_IFDIR) |
| 2522 | # define S_ISDIR(a) (((a) & _S_IFMT) == _S_IFDIR) | 2507 | #define S_ISDIR(a) (((a) & _S_IFMT) == _S_IFDIR) |
| 2523 | # else | 2508 | #else |
| 2524 | # define S_ISDIR(a) (((a) & S_IFMT) == S_IFDIR) | 2509 | #define S_ISDIR(a) (((a) & S_IFMT) == S_IFDIR) |
| 2525 | # endif | 2510 | #endif |
| 2526 | #endif | 2511 | #endif |
| 2527 | 2512 | ||
| 2528 | int | 2513 | int |
| @@ -2536,7 +2521,7 @@ app_isdir(const char *name) | |||
| 2536 | else | 2521 | else |
| 2537 | return -1; | 2522 | return -1; |
| 2538 | #else | 2523 | #else |
| 2539 | return -1; | 2524 | return -1; |
| 2540 | #endif | 2525 | #endif |
| 2541 | } | 2526 | } |
| 2542 | 2527 | ||
diff --git a/src/lib/libssl/src/apps/asn1pars.c b/src/lib/libssl/src/apps/asn1pars.c index 95fc88d644..f11f1676f0 100644 --- a/src/lib/libssl/src/apps/asn1pars.c +++ b/src/lib/libssl/src/apps/asn1pars.c | |||
| @@ -82,7 +82,7 @@ | |||
| 82 | 82 | ||
| 83 | int MAIN(int, char **); | 83 | int MAIN(int, char **); |
| 84 | 84 | ||
| 85 | static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf); | 85 | static int do_generate(BIO * bio, char *genstr, char *genconf, BUF_MEM * buf); |
| 86 | 86 | ||
| 87 | int | 87 | int |
| 88 | MAIN(int argc, char **argv) | 88 | MAIN(int argc, char **argv) |
| @@ -97,7 +97,7 @@ MAIN(int argc, char **argv) | |||
| 97 | unsigned char *tmpbuf; | 97 | unsigned char *tmpbuf; |
| 98 | const unsigned char *ctmpbuf; | 98 | const unsigned char *ctmpbuf; |
| 99 | BUF_MEM *buf = NULL; | 99 | BUF_MEM *buf = NULL; |
| 100 | STACK_OF(OPENSSL_STRING) *osk = NULL; | 100 | STACK_OF(OPENSSL_STRING) * osk = NULL; |
| 101 | ASN1_TYPE *at = NULL; | 101 | ASN1_TYPE *at = NULL; |
| 102 | 102 | ||
| 103 | informat = FORMAT_PEM; | 103 | informat = FORMAT_PEM; |
| @@ -106,7 +106,7 @@ MAIN(int argc, char **argv) | |||
| 106 | 106 | ||
| 107 | if (bio_err == NULL) | 107 | if (bio_err == NULL) |
| 108 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 108 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 109 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 109 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 110 | 110 | ||
| 111 | if (!load_config(bio_err, NULL)) | 111 | if (!load_config(bio_err, NULL)) |
| 112 | goto end; | 112 | goto end; |
| @@ -126,19 +126,19 @@ MAIN(int argc, char **argv) | |||
| 126 | } else if (strcmp(*argv, "-in") == 0) { | 126 | } else if (strcmp(*argv, "-in") == 0) { |
| 127 | if (--argc < 1) | 127 | if (--argc < 1) |
| 128 | goto bad; | 128 | goto bad; |
| 129 | infile= *(++argv); | 129 | infile = *(++argv); |
| 130 | } else if (strcmp(*argv, "-out") == 0) { | 130 | } else if (strcmp(*argv, "-out") == 0) { |
| 131 | if (--argc < 1) | 131 | if (--argc < 1) |
| 132 | goto bad; | 132 | goto bad; |
| 133 | derfile= *(++argv); | 133 | derfile = *(++argv); |
| 134 | } else if (strcmp(*argv, "-i") == 0) { | 134 | } else if (strcmp(*argv, "-i") == 0) { |
| 135 | indent = 1; | 135 | indent = 1; |
| 136 | } else | 136 | } else if (strcmp(*argv, "-noout") == 0) |
| 137 | if (strcmp(*argv, "-noout") == 0) noout = 1; | 137 | noout = 1; |
| 138 | else if (strcmp(*argv, "-oid") == 0) { | 138 | else if (strcmp(*argv, "-oid") == 0) { |
| 139 | if (--argc < 1) | 139 | if (--argc < 1) |
| 140 | goto bad; | 140 | goto bad; |
| 141 | oidfile= *(++argv); | 141 | oidfile = *(++argv); |
| 142 | } else if (strcmp(*argv, "-offset") == 0) { | 142 | } else if (strcmp(*argv, "-offset") == 0) { |
| 143 | if (--argc < 1) | 143 | if (--argc < 1) |
| 144 | goto bad; | 144 | goto bad; |
| @@ -164,11 +164,11 @@ MAIN(int argc, char **argv) | |||
| 164 | } else if (strcmp(*argv, "-genstr") == 0) { | 164 | } else if (strcmp(*argv, "-genstr") == 0) { |
| 165 | if (--argc < 1) | 165 | if (--argc < 1) |
| 166 | goto bad; | 166 | goto bad; |
| 167 | genstr= *(++argv); | 167 | genstr = *(++argv); |
| 168 | } else if (strcmp(*argv, "-genconf") == 0) { | 168 | } else if (strcmp(*argv, "-genconf") == 0) { |
| 169 | if (--argc < 1) | 169 | if (--argc < 1) |
| 170 | goto bad; | 170 | goto bad; |
| 171 | genconf= *(++argv); | 171 | genconf = *(++argv); |
| 172 | } else { | 172 | } else { |
| 173 | BIO_printf(bio_err, "unknown option %s\n", *argv); | 173 | BIO_printf(bio_err, "unknown option %s\n", *argv); |
| 174 | badops = 1; | 174 | badops = 1; |
| @@ -199,7 +199,6 @@ bad: | |||
| 199 | BIO_printf(bio_err, " -genconf file file to generate ASN1 structure from\n"); | 199 | BIO_printf(bio_err, " -genconf file file to generate ASN1 structure from\n"); |
| 200 | goto end; | 200 | goto end; |
| 201 | } | 201 | } |
| 202 | |||
| 203 | ERR_load_crypto_strings(); | 202 | ERR_load_crypto_strings(); |
| 204 | 203 | ||
| 205 | in = BIO_new(BIO_s_file()); | 204 | in = BIO_new(BIO_s_file()); |
| @@ -208,7 +207,7 @@ bad: | |||
| 208 | ERR_print_errors(bio_err); | 207 | ERR_print_errors(bio_err); |
| 209 | goto end; | 208 | goto end; |
| 210 | } | 209 | } |
| 211 | BIO_set_fp(out, stdout, BIO_NOCLOSE|BIO_FP_TEXT); | 210 | BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); |
| 212 | 211 | ||
| 213 | if (oidfile != NULL) { | 212 | if (oidfile != NULL) { |
| 214 | if (BIO_read_filename(in, oidfile) <= 0) { | 213 | if (BIO_read_filename(in, oidfile) <= 0) { |
| @@ -218,7 +217,6 @@ bad: | |||
| 218 | } | 217 | } |
| 219 | OBJ_create_objects(in); | 218 | OBJ_create_objects(in); |
| 220 | } | 219 | } |
| 221 | |||
| 222 | if (infile == NULL) | 220 | if (infile == NULL) |
| 223 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 221 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 224 | else { | 222 | else { |
| @@ -235,11 +233,10 @@ bad: | |||
| 235 | goto end; | 233 | goto end; |
| 236 | } | 234 | } |
| 237 | } | 235 | } |
| 238 | |||
| 239 | if ((buf = BUF_MEM_new()) == NULL) | 236 | if ((buf = BUF_MEM_new()) == NULL) |
| 240 | goto end; | 237 | goto end; |
| 241 | if (!BUF_MEM_grow(buf, BUFSIZ * 8)) | 238 | if (!BUF_MEM_grow(buf, BUFSIZ * 8)) |
| 242 | goto end; /* Pre-allocate :-) */ | 239 | goto end; /* Pre-allocate :-) */ |
| 243 | 240 | ||
| 244 | if (genstr || genconf) { | 241 | if (genstr || genconf) { |
| 245 | num = do_generate(bio_err, genstr, genconf, buf); | 242 | num = do_generate(bio_err, genstr, genconf, buf); |
| @@ -259,10 +256,9 @@ bad: | |||
| 259 | in = b64; | 256 | in = b64; |
| 260 | b64 = tmp; | 257 | b64 = tmp; |
| 261 | } | 258 | } |
| 262 | |||
| 263 | num = 0; | 259 | num = 0; |
| 264 | for (;;) { | 260 | for (;;) { |
| 265 | if (!BUF_MEM_grow(buf, (int)num + BUFSIZ)) | 261 | if (!BUF_MEM_grow(buf, (int) num + BUFSIZ)) |
| 266 | goto end; | 262 | goto end; |
| 267 | i = BIO_read(in, &(buf->data[num]), BUFSIZ); | 263 | i = BIO_read(in, &(buf->data[num]), BUFSIZ); |
| 268 | if (i <= 0) | 264 | if (i <= 0) |
| @@ -275,7 +271,7 @@ bad: | |||
| 275 | /* If any structs to parse go through in sequence */ | 271 | /* If any structs to parse go through in sequence */ |
| 276 | 272 | ||
| 277 | if (sk_OPENSSL_STRING_num(osk)) { | 273 | if (sk_OPENSSL_STRING_num(osk)) { |
| 278 | tmpbuf = (unsigned char *)str; | 274 | tmpbuf = (unsigned char *) str; |
| 279 | tmplen = num; | 275 | tmplen = num; |
| 280 | for (i = 0; i < sk_OPENSSL_STRING_num(osk); i++) { | 276 | for (i = 0; i < sk_OPENSSL_STRING_num(osk); i++) { |
| 281 | ASN1_TYPE *atmp; | 277 | ASN1_TYPE *atmp; |
| @@ -310,28 +306,26 @@ bad: | |||
| 310 | tmpbuf = at->value.asn1_string->data; | 306 | tmpbuf = at->value.asn1_string->data; |
| 311 | tmplen = at->value.asn1_string->length; | 307 | tmplen = at->value.asn1_string->length; |
| 312 | } | 308 | } |
| 313 | str = (char *)tmpbuf; | 309 | str = (char *) tmpbuf; |
| 314 | num = tmplen; | 310 | num = tmplen; |
| 315 | } | 311 | } |
| 316 | |||
| 317 | if (offset >= num) { | 312 | if (offset >= num) { |
| 318 | BIO_printf(bio_err, "Error: offset too large\n"); | 313 | BIO_printf(bio_err, "Error: offset too large\n"); |
| 319 | goto end; | 314 | goto end; |
| 320 | } | 315 | } |
| 321 | |||
| 322 | num -= offset; | 316 | num -= offset; |
| 323 | 317 | ||
| 324 | if ((length == 0) || ((long)length > num)) | 318 | if ((length == 0) || ((long) length > num)) |
| 325 | length = (unsigned int)num; | 319 | length = (unsigned int) num; |
| 326 | if (derout) { | 320 | if (derout) { |
| 327 | if (BIO_write(derout, str + offset, length) != (int)length) { | 321 | if (BIO_write(derout, str + offset, length) != (int) length) { |
| 328 | BIO_printf(bio_err, "Error writing output\n"); | 322 | BIO_printf(bio_err, "Error writing output\n"); |
| 329 | ERR_print_errors(bio_err); | 323 | ERR_print_errors(bio_err); |
| 330 | goto end; | 324 | goto end; |
| 331 | } | 325 | } |
| 332 | } | 326 | } |
| 333 | if (!noout && | 327 | if (!noout && |
| 334 | !ASN1_parse_dump(out, (unsigned char *)&(str[offset]), length, | 328 | !ASN1_parse_dump(out, (unsigned char *) &(str[offset]), length, |
| 335 | indent, dump)) { | 329 | indent, dump)) { |
| 336 | ERR_print_errors(bio_err); | 330 | ERR_print_errors(bio_err); |
| 337 | goto end; | 331 | goto end; |
| @@ -355,11 +349,11 @@ end: | |||
| 355 | sk_OPENSSL_STRING_free(osk); | 349 | sk_OPENSSL_STRING_free(osk); |
| 356 | OBJ_cleanup(); | 350 | OBJ_cleanup(); |
| 357 | apps_shutdown(); | 351 | apps_shutdown(); |
| 358 | return(ret); | 352 | return (ret); |
| 359 | } | 353 | } |
| 360 | 354 | ||
| 361 | static int | 355 | static int |
| 362 | do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf) | 356 | do_generate(BIO * bio, char *genstr, char *genconf, BUF_MEM * buf) |
| 363 | { | 357 | { |
| 364 | CONF *cnf = NULL; | 358 | CONF *cnf = NULL; |
| 365 | int len; | 359 | int len; |
| @@ -378,7 +372,6 @@ do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf) | |||
| 378 | goto err; | 372 | goto err; |
| 379 | } | 373 | } |
| 380 | } | 374 | } |
| 381 | |||
| 382 | atyp = ASN1_generate_nconf(genstr, cnf); | 375 | atyp = ASN1_generate_nconf(genstr, cnf); |
| 383 | NCONF_free(cnf); | 376 | NCONF_free(cnf); |
| 384 | cnf = NULL; | 377 | cnf = NULL; |
| @@ -394,14 +387,14 @@ do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf) | |||
| 394 | if (!BUF_MEM_grow(buf, len)) | 387 | if (!BUF_MEM_grow(buf, len)) |
| 395 | goto err; | 388 | goto err; |
| 396 | 389 | ||
| 397 | p = (unsigned char *)buf->data; | 390 | p = (unsigned char *) buf->data; |
| 398 | 391 | ||
| 399 | i2d_ASN1_TYPE(atyp, &p); | 392 | i2d_ASN1_TYPE(atyp, &p); |
| 400 | 393 | ||
| 401 | ASN1_TYPE_free(atyp); | 394 | ASN1_TYPE_free(atyp); |
| 402 | return len; | 395 | return len; |
| 403 | 396 | ||
| 404 | conferr: | 397 | conferr: |
| 405 | 398 | ||
| 406 | if (errline > 0) | 399 | if (errline > 0) |
| 407 | BIO_printf(bio, "Error on line %ld of config file '%s'\n", | 400 | BIO_printf(bio, "Error on line %ld of config file '%s'\n", |
| @@ -409,7 +402,7 @@ do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf) | |||
| 409 | else | 402 | else |
| 410 | BIO_printf(bio, "Error loading config file '%s'\n", genconf); | 403 | BIO_printf(bio, "Error loading config file '%s'\n", genconf); |
| 411 | 404 | ||
| 412 | err: | 405 | err: |
| 413 | NCONF_free(cnf); | 406 | NCONF_free(cnf); |
| 414 | ASN1_TYPE_free(atyp); | 407 | ASN1_TYPE_free(atyp); |
| 415 | 408 | ||
diff --git a/src/lib/libssl/src/apps/ca.c b/src/lib/libssl/src/apps/ca.c index 0bef50be76..6396249673 100644 --- a/src/lib/libssl/src/apps/ca.c +++ b/src/lib/libssl/src/apps/ca.c | |||
| @@ -77,16 +77,16 @@ | |||
| 77 | #include <openssl/pem.h> | 77 | #include <openssl/pem.h> |
| 78 | 78 | ||
| 79 | #ifndef W_OK | 79 | #ifndef W_OK |
| 80 | # include <sys/file.h> | 80 | #include <sys/file.h> |
| 81 | #endif | 81 | #endif |
| 82 | 82 | ||
| 83 | #include "apps.h" | 83 | #include "apps.h" |
| 84 | 84 | ||
| 85 | #ifndef W_OK | 85 | #ifndef W_OK |
| 86 | # define F_OK 0 | 86 | #define F_OK 0 |
| 87 | # define X_OK 1 | 87 | #define X_OK 1 |
| 88 | # define W_OK 2 | 88 | #define W_OK 2 |
| 89 | # define R_OK 4 | 89 | #define R_OK 4 |
| 90 | #endif | 90 | #endif |
| 91 | 91 | ||
| 92 | #undef PROG | 92 | #undef PROG |
| @@ -189,53 +189,56 @@ extern int EF_ALIGNMENT; | |||
| 189 | #endif | 189 | #endif |
| 190 | 190 | ||
| 191 | static void lookup_fail(const char *name, const char *tag); | 191 | static void lookup_fail(const char *name, const char *tag); |
| 192 | static int certify(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509, | 192 | static int |
| 193 | const EVP_MD *dgst, STACK_OF(OPENSSL_STRING) *sigopts, | 193 | certify(X509 ** xret, char *infile, EVP_PKEY * pkey, X509 * x509, |
| 194 | STACK_OF(CONF_VALUE) *policy, CA_DB *db, BIGNUM *serial, char *subj, | 194 | const EVP_MD * dgst, STACK_OF(OPENSSL_STRING) * sigopts, |
| 195 | STACK_OF(CONF_VALUE) * policy, CA_DB * db, BIGNUM * serial, char *subj, | ||
| 195 | unsigned long chtype, int multirdn, int email_dn, char *startdate, | 196 | unsigned long chtype, int multirdn, int email_dn, char *startdate, |
| 196 | char *enddate, long days, int batch, char *ext_sect, CONF *conf, | 197 | char *enddate, long days, int batch, char *ext_sect, CONF * conf, |
| 197 | int verbose, unsigned long certopt, unsigned long nameopt, | 198 | int verbose, unsigned long certopt, unsigned long nameopt, |
| 198 | int default_op, int ext_copy, int selfsign); | 199 | int default_op, int ext_copy, int selfsign); |
| 199 | static int certify_cert(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509, | 200 | static int certify_cert(X509 ** xret, char *infile, EVP_PKEY * pkey, X509 * x509, |
| 200 | const EVP_MD *dgst, STACK_OF(OPENSSL_STRING) *sigopts, | 201 | const EVP_MD * dgst, |
| 201 | STACK_OF(CONF_VALUE) *policy, CA_DB *db, BIGNUM *serial, char *subj, | 202 | STACK_OF(OPENSSL_STRING) * sigopts, |
| 203 | STACK_OF(CONF_VALUE) * policy, CA_DB * db, BIGNUM * serial, char *subj, | ||
| 202 | unsigned long chtype, int multirdn, int email_dn, char *startdate, | 204 | unsigned long chtype, int multirdn, int email_dn, char *startdate, |
| 203 | char *enddate, long days, int batch, char *ext_sect, CONF *conf, | 205 | char *enddate, long days, int batch, char *ext_sect, CONF * conf, |
| 204 | int verbose, unsigned long certopt, unsigned long nameopt, int default_op, | 206 | int verbose, unsigned long certopt, unsigned long nameopt, int default_op, |
| 205 | int ext_copy, ENGINE *e); | 207 | int ext_copy, ENGINE * e); |
| 206 | static int certify_spkac(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509, | 208 | static int certify_spkac(X509 ** xret, char *infile, EVP_PKEY * pkey, X509 * x509, |
| 207 | const EVP_MD *dgst, STACK_OF(OPENSSL_STRING) *sigopts, | 209 | const EVP_MD * dgst, |
| 208 | STACK_OF(CONF_VALUE) *policy, CA_DB *db, BIGNUM *serial, char *subj, | 210 | STACK_OF(OPENSSL_STRING) * sigopts, |
| 211 | STACK_OF(CONF_VALUE) * policy, CA_DB * db, BIGNUM * serial, char *subj, | ||
| 209 | unsigned long chtype, int multirdn, int email_dn, char *startdate, | 212 | unsigned long chtype, int multirdn, int email_dn, char *startdate, |
| 210 | char *enddate, long days, char *ext_sect, CONF *conf, int verbose, | 213 | char *enddate, long days, char *ext_sect, CONF * conf, int verbose, |
| 211 | unsigned long certopt, unsigned long nameopt, int default_op, int ext_copy); | 214 | unsigned long certopt, unsigned long nameopt, int default_op, int ext_copy); |
| 212 | static void write_new_certificate(BIO *bp, X509 *x, int output_der, int notext); | 215 | static void write_new_certificate(BIO * bp, X509 * x, int output_der, int notext); |
| 213 | static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst, | 216 | static int do_body(X509 ** xret, EVP_PKEY * pkey, X509 * x509, const EVP_MD * dgst, |
| 214 | STACK_OF(OPENSSL_STRING) *sigopts, STACK_OF(CONF_VALUE) *policy, CA_DB *db, | 217 | STACK_OF(OPENSSL_STRING) * sigopts, STACK_OF(CONF_VALUE) * policy, CA_DB * db, |
| 215 | BIGNUM *serial, char *subj, unsigned long chtype, int multirdn, | 218 | BIGNUM * serial, char *subj, unsigned long chtype, int multirdn, |
| 216 | int email_dn, char *startdate, char *enddate, long days, int batch, | 219 | int email_dn, char *startdate, char *enddate, long days, int batch, |
| 217 | int verbose, X509_REQ *req, char *ext_sect, CONF *conf, | 220 | int verbose, X509_REQ * req, char *ext_sect, CONF * conf, |
| 218 | unsigned long certopt, unsigned long nameopt, int default_op, | 221 | unsigned long certopt, unsigned long nameopt, int default_op, |
| 219 | int ext_copy, int selfsign); | 222 | int ext_copy, int selfsign); |
| 220 | static int do_revoke(X509 *x509, CA_DB *db, int ext, char *extval); | 223 | static int do_revoke(X509 * x509, CA_DB * db, int ext, char *extval); |
| 221 | static int get_certificate_status(const char *ser_status, CA_DB *db); | 224 | static int get_certificate_status(const char *ser_status, CA_DB * db); |
| 222 | static int do_updatedb(CA_DB *db); | 225 | static int do_updatedb(CA_DB * db); |
| 223 | static int check_time_format(const char *str); | 226 | static int check_time_format(const char *str); |
| 224 | char *make_revocation_str(int rev_type, char *rev_arg); | 227 | char *make_revocation_str(int rev_type, char *rev_arg); |
| 225 | int make_revoked(X509_REVOKED *rev, const char *str); | 228 | int make_revoked(X509_REVOKED * rev, const char *str); |
| 226 | int old_entry_print(BIO *bp, ASN1_OBJECT *obj, ASN1_STRING *str); | 229 | int old_entry_print(BIO * bp, ASN1_OBJECT * obj, ASN1_STRING * str); |
| 227 | static CONF *conf = NULL; | 230 | static CONF *conf = NULL; |
| 228 | static CONF *extconf = NULL; | 231 | static CONF *extconf = NULL; |
| 229 | static char *section = NULL; | 232 | static char *section = NULL; |
| 230 | 233 | ||
| 231 | static int preserve = 0; | 234 | static int preserve = 0; |
| 232 | static int msie_hack = 0; | 235 | static int msie_hack = 0; |
| 233 | 236 | ||
| 234 | 237 | ||
| 235 | int MAIN(int, char **); | 238 | int MAIN(int, char **); |
| 236 | 239 | ||
| 237 | int | 240 | int |
| 238 | MAIN(int argc, char **argv) | 241 | MAIN(int argc, char **argv) |
| 239 | { | 242 | { |
| 240 | ENGINE *e = NULL; | 243 | ENGINE *e = NULL; |
| 241 | char *key = NULL, *passargin = NULL; | 244 | char *key = NULL, *passargin = NULL; |
| @@ -302,12 +305,12 @@ MAIN(int argc, char **argv) | |||
| 302 | ASN1_INTEGER *tmpser; | 305 | ASN1_INTEGER *tmpser; |
| 303 | char *f; | 306 | char *f; |
| 304 | const char *p; | 307 | const char *p; |
| 305 | char * const *pp; | 308 | char *const * pp; |
| 306 | int i, j; | 309 | int i, j; |
| 307 | const EVP_MD *dgst = NULL; | 310 | const EVP_MD *dgst = NULL; |
| 308 | STACK_OF(CONF_VALUE) *attribs = NULL; | 311 | STACK_OF(CONF_VALUE) * attribs = NULL; |
| 309 | STACK_OF(X509) *cert_sk = NULL; | 312 | STACK_OF(X509) * cert_sk = NULL; |
| 310 | STACK_OF(OPENSSL_STRING) *sigopts = NULL; | 313 | STACK_OF(OPENSSL_STRING) * sigopts = NULL; |
| 311 | #undef BSIZE | 314 | #undef BSIZE |
| 312 | #define BSIZE 256 | 315 | #define BSIZE 256 |
| 313 | char buf[3][BSIZE]; | 316 | char buf[3][BSIZE]; |
| @@ -334,7 +337,7 @@ MAIN(int argc, char **argv) | |||
| 334 | msie_hack = 0; | 337 | msie_hack = 0; |
| 335 | if (bio_err == NULL) | 338 | if (bio_err == NULL) |
| 336 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 339 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 337 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 340 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 338 | 341 | ||
| 339 | argc--; | 342 | argc--; |
| 340 | argv++; | 343 | argv++; |
| @@ -344,15 +347,15 @@ MAIN(int argc, char **argv) | |||
| 344 | else if (strcmp(*argv, "-config") == 0) { | 347 | else if (strcmp(*argv, "-config") == 0) { |
| 345 | if (--argc < 1) | 348 | if (--argc < 1) |
| 346 | goto bad; | 349 | goto bad; |
| 347 | configfile= *(++argv); | 350 | configfile = *(++argv); |
| 348 | } else if (strcmp(*argv, "-name") == 0) { | 351 | } else if (strcmp(*argv, "-name") == 0) { |
| 349 | if (--argc < 1) | 352 | if (--argc < 1) |
| 350 | goto bad; | 353 | goto bad; |
| 351 | section= *(++argv); | 354 | section = *(++argv); |
| 352 | } else if (strcmp(*argv, "-subj") == 0) { | 355 | } else if (strcmp(*argv, "-subj") == 0) { |
| 353 | if (--argc < 1) | 356 | if (--argc < 1) |
| 354 | goto bad; | 357 | goto bad; |
| 355 | subj= *(++argv); | 358 | subj = *(++argv); |
| 356 | /* preserve=1; */ | 359 | /* preserve=1; */ |
| 357 | } else if (strcmp(*argv, "-utf8") == 0) | 360 | } else if (strcmp(*argv, "-utf8") == 0) |
| 358 | chtype = MBSTRING_UTF8; | 361 | chtype = MBSTRING_UTF8; |
| @@ -363,11 +366,11 @@ MAIN(int argc, char **argv) | |||
| 363 | else if (strcmp(*argv, "-startdate") == 0) { | 366 | else if (strcmp(*argv, "-startdate") == 0) { |
| 364 | if (--argc < 1) | 367 | if (--argc < 1) |
| 365 | goto bad; | 368 | goto bad; |
| 366 | startdate= *(++argv); | 369 | startdate = *(++argv); |
| 367 | } else if (strcmp(*argv, "-enddate") == 0) { | 370 | } else if (strcmp(*argv, "-enddate") == 0) { |
| 368 | if (--argc < 1) | 371 | if (--argc < 1) |
| 369 | goto bad; | 372 | goto bad; |
| 370 | enddate= *(++argv); | 373 | enddate = *(++argv); |
| 371 | } else if (strcmp(*argv, "-days") == 0) { | 374 | } else if (strcmp(*argv, "-days") == 0) { |
| 372 | if (--argc < 1) | 375 | if (--argc < 1) |
| 373 | goto bad; | 376 | goto bad; |
| @@ -375,47 +378,46 @@ MAIN(int argc, char **argv) | |||
| 375 | } else if (strcmp(*argv, "-md") == 0) { | 378 | } else if (strcmp(*argv, "-md") == 0) { |
| 376 | if (--argc < 1) | 379 | if (--argc < 1) |
| 377 | goto bad; | 380 | goto bad; |
| 378 | md= *(++argv); | 381 | md = *(++argv); |
| 379 | } else if (strcmp(*argv, "-policy") == 0) { | 382 | } else if (strcmp(*argv, "-policy") == 0) { |
| 380 | if (--argc < 1) | 383 | if (--argc < 1) |
| 381 | goto bad; | 384 | goto bad; |
| 382 | policy= *(++argv); | 385 | policy = *(++argv); |
| 383 | } else if (strcmp(*argv, "-keyfile") == 0) { | 386 | } else if (strcmp(*argv, "-keyfile") == 0) { |
| 384 | if (--argc < 1) | 387 | if (--argc < 1) |
| 385 | goto bad; | 388 | goto bad; |
| 386 | keyfile= *(++argv); | 389 | keyfile = *(++argv); |
| 387 | } | 390 | } else if (strcmp(*argv, "-keyform") == 0) { |
| 388 | else if (strcmp(*argv, "-keyform") == 0) { | ||
| 389 | if (--argc < 1) | 391 | if (--argc < 1) |
| 390 | goto bad; | 392 | goto bad; |
| 391 | keyform = str2fmt(*(++argv)); | 393 | keyform = str2fmt(*(++argv)); |
| 392 | } else if (strcmp(*argv, "-passin") == 0) { | 394 | } else if (strcmp(*argv, "-passin") == 0) { |
| 393 | if (--argc < 1) | 395 | if (--argc < 1) |
| 394 | goto bad; | 396 | goto bad; |
| 395 | passargin= *(++argv); | 397 | passargin = *(++argv); |
| 396 | } else if (strcmp(*argv, "-key") == 0) { | 398 | } else if (strcmp(*argv, "-key") == 0) { |
| 397 | if (--argc < 1) | 399 | if (--argc < 1) |
| 398 | goto bad; | 400 | goto bad; |
| 399 | key= *(++argv); | 401 | key = *(++argv); |
| 400 | } else if (strcmp(*argv, "-cert") == 0) { | 402 | } else if (strcmp(*argv, "-cert") == 0) { |
| 401 | if (--argc < 1) | 403 | if (--argc < 1) |
| 402 | goto bad; | 404 | goto bad; |
| 403 | certfile= *(++argv); | 405 | certfile = *(++argv); |
| 404 | } else if (strcmp(*argv, "-selfsign") == 0) | 406 | } else if (strcmp(*argv, "-selfsign") == 0) |
| 405 | selfsign = 1; | 407 | selfsign = 1; |
| 406 | else if (strcmp(*argv, "-in") == 0) { | 408 | else if (strcmp(*argv, "-in") == 0) { |
| 407 | if (--argc < 1) | 409 | if (--argc < 1) |
| 408 | goto bad; | 410 | goto bad; |
| 409 | infile= *(++argv); | 411 | infile = *(++argv); |
| 410 | req = 1; | 412 | req = 1; |
| 411 | } else if (strcmp(*argv, "-out") == 0) { | 413 | } else if (strcmp(*argv, "-out") == 0) { |
| 412 | if (--argc < 1) | 414 | if (--argc < 1) |
| 413 | goto bad; | 415 | goto bad; |
| 414 | outfile= *(++argv); | 416 | outfile = *(++argv); |
| 415 | } else if (strcmp(*argv, "-outdir") == 0) { | 417 | } else if (strcmp(*argv, "-outdir") == 0) { |
| 416 | if (--argc < 1) | 418 | if (--argc < 1) |
| 417 | goto bad; | 419 | goto bad; |
| 418 | outdir= *(++argv); | 420 | outdir = *(++argv); |
| 419 | } else if (strcmp(*argv, "-sigopt") == 0) { | 421 | } else if (strcmp(*argv, "-sigopt") == 0) { |
| 420 | if (--argc < 1) | 422 | if (--argc < 1) |
| 421 | goto bad; | 423 | goto bad; |
| @@ -465,26 +467,26 @@ MAIN(int argc, char **argv) | |||
| 465 | } else if (strcmp(*argv, "-revoke") == 0) { | 467 | } else if (strcmp(*argv, "-revoke") == 0) { |
| 466 | if (--argc < 1) | 468 | if (--argc < 1) |
| 467 | goto bad; | 469 | goto bad; |
| 468 | infile= *(++argv); | 470 | infile = *(++argv); |
| 469 | dorevoke = 1; | 471 | dorevoke = 1; |
| 470 | } else if (strcmp(*argv, "-extensions") == 0) { | 472 | } else if (strcmp(*argv, "-extensions") == 0) { |
| 471 | if (--argc < 1) | 473 | if (--argc < 1) |
| 472 | goto bad; | 474 | goto bad; |
| 473 | extensions= *(++argv); | 475 | extensions = *(++argv); |
| 474 | } else if (strcmp(*argv, "-extfile") == 0) { | 476 | } else if (strcmp(*argv, "-extfile") == 0) { |
| 475 | if (--argc < 1) | 477 | if (--argc < 1) |
| 476 | goto bad; | 478 | goto bad; |
| 477 | extfile= *(++argv); | 479 | extfile = *(++argv); |
| 478 | } else if (strcmp(*argv, "-status") == 0) { | 480 | } else if (strcmp(*argv, "-status") == 0) { |
| 479 | if (--argc < 1) | 481 | if (--argc < 1) |
| 480 | goto bad; | 482 | goto bad; |
| 481 | ser_status= *(++argv); | 483 | ser_status = *(++argv); |
| 482 | } else if (strcmp(*argv, "-updatedb") == 0) { | 484 | } else if (strcmp(*argv, "-updatedb") == 0) { |
| 483 | doupdatedb = 1; | 485 | doupdatedb = 1; |
| 484 | } else if (strcmp(*argv, "-crlexts") == 0) { | 486 | } else if (strcmp(*argv, "-crlexts") == 0) { |
| 485 | if (--argc < 1) | 487 | if (--argc < 1) |
| 486 | goto bad; | 488 | goto bad; |
| 487 | crl_ext= *(++argv); | 489 | crl_ext = *(++argv); |
| 488 | } else if (strcmp(*argv, "-crl_reason") == 0) { | 490 | } else if (strcmp(*argv, "-crl_reason") == 0) { |
| 489 | if (--argc < 1) | 491 | if (--argc < 1) |
| 490 | goto bad; | 492 | goto bad; |
| @@ -510,11 +512,11 @@ MAIN(int argc, char **argv) | |||
| 510 | else if (strcmp(*argv, "-engine") == 0) { | 512 | else if (strcmp(*argv, "-engine") == 0) { |
| 511 | if (--argc < 1) | 513 | if (--argc < 1) |
| 512 | goto bad; | 514 | goto bad; |
| 513 | engine= *(++argv); | 515 | engine = *(++argv); |
| 514 | } | 516 | } |
| 515 | #endif | 517 | #endif |
| 516 | else { | 518 | else { |
| 517 | bad: | 519 | bad: |
| 518 | BIO_printf(bio_err, "unknown option %s\n", *argv); | 520 | BIO_printf(bio_err, "unknown option %s\n", *argv); |
| 519 | badops = 1; | 521 | badops = 1; |
| 520 | break; | 522 | break; |
| @@ -530,7 +532,6 @@ bad: | |||
| 530 | BIO_printf(bio_err, "%s", *pp2); | 532 | BIO_printf(bio_err, "%s", *pp2); |
| 531 | goto err; | 533 | goto err; |
| 532 | } | 534 | } |
| 533 | |||
| 534 | ERR_load_crypto_strings(); | 535 | ERR_load_crypto_strings(); |
| 535 | 536 | ||
| 536 | /*****************************************************************/ | 537 | /*****************************************************************/ |
| @@ -550,7 +551,6 @@ bad: | |||
| 550 | BUF_strlcat(tofree, CONFIG_FILE, len); | 551 | BUF_strlcat(tofree, CONFIG_FILE, len); |
| 551 | configfile = tofree; | 552 | configfile = tofree; |
| 552 | } | 553 | } |
| 553 | |||
| 554 | BIO_printf(bio_err, "Using configuration from %s\n", configfile); | 554 | BIO_printf(bio_err, "Using configuration from %s\n", configfile); |
| 555 | conf = NCONF_new(NULL); | 555 | conf = NCONF_new(NULL); |
| 556 | if (NCONF_load(conf, configfile, &errorline) <= 0) { | 556 | if (NCONF_load(conf, configfile, &errorline) <= 0) { |
| @@ -559,14 +559,13 @@ bad: | |||
| 559 | configfile); | 559 | configfile); |
| 560 | else | 560 | else |
| 561 | BIO_printf(bio_err, "error on line %ld of config file '%s'\n" | 561 | BIO_printf(bio_err, "error on line %ld of config file '%s'\n" |
| 562 | , errorline, configfile); | 562 | ,errorline, configfile); |
| 563 | goto err; | 563 | goto err; |
| 564 | } | 564 | } |
| 565 | if (tofree) { | 565 | if (tofree) { |
| 566 | free(tofree); | 566 | free(tofree); |
| 567 | tofree = NULL; | 567 | tofree = NULL; |
| 568 | } | 568 | } |
| 569 | |||
| 570 | if (!load_config(bio_err, conf)) | 569 | if (!load_config(bio_err, conf)) |
| 571 | goto err; | 570 | goto err; |
| 572 | 571 | ||
| @@ -582,7 +581,6 @@ bad: | |||
| 582 | goto err; | 581 | goto err; |
| 583 | } | 582 | } |
| 584 | } | 583 | } |
| 585 | |||
| 586 | if (conf != NULL) { | 584 | if (conf != NULL) { |
| 587 | p = NCONF_get_string(conf, NULL, "oid_file"); | 585 | p = NCONF_get_string(conf, NULL, "oid_file"); |
| 588 | if (p == NULL) | 586 | if (p == NULL) |
| @@ -607,7 +605,6 @@ bad: | |||
| 607 | goto err; | 605 | goto err; |
| 608 | } | 606 | } |
| 609 | } | 607 | } |
| 610 | |||
| 611 | randfile = NCONF_get_string(conf, BASE_SECTION, "RANDFILE"); | 608 | randfile = NCONF_get_string(conf, BASE_SECTION, "RANDFILE"); |
| 612 | if (randfile == NULL) | 609 | if (randfile == NULL) |
| 613 | ERR_clear_error(); | 610 | ERR_clear_error(); |
| @@ -621,15 +618,13 @@ bad: | |||
| 621 | BIO_printf(bio_err, "Invalid global string mask setting %s\n", f); | 618 | BIO_printf(bio_err, "Invalid global string mask setting %s\n", f); |
| 622 | goto err; | 619 | goto err; |
| 623 | } | 620 | } |
| 624 | 621 | if (chtype != MBSTRING_UTF8) { | |
| 625 | if (chtype != MBSTRING_UTF8){ | ||
| 626 | f = NCONF_get_string(conf, section, UTF8_IN); | 622 | f = NCONF_get_string(conf, section, UTF8_IN); |
| 627 | if (!f) | 623 | if (!f) |
| 628 | ERR_clear_error(); | 624 | ERR_clear_error(); |
| 629 | else if (!strcmp(f, "yes")) | 625 | else if (!strcmp(f, "yes")) |
| 630 | chtype = MBSTRING_UTF8; | 626 | chtype = MBSTRING_UTF8; |
| 631 | } | 627 | } |
| 632 | |||
| 633 | db_attr.unique_subject = 1; | 628 | db_attr.unique_subject = 1; |
| 634 | p = NCONF_get_string(conf, section, ENV_UNIQUE_SUBJECT); | 629 | p = NCONF_get_string(conf, section, ENV_UNIQUE_SUBJECT); |
| 635 | if (p) { | 630 | if (p) { |
| @@ -656,7 +651,6 @@ bad: | |||
| 656 | ERR_print_errors(bio_err); | 651 | ERR_print_errors(bio_err); |
| 657 | goto err; | 652 | goto err; |
| 658 | } | 653 | } |
| 659 | |||
| 660 | /*****************************************************************/ | 654 | /*****************************************************************/ |
| 661 | /* report status of cert with serial number given on command line */ | 655 | /* report status of cert with serial number given on command line */ |
| 662 | if (ser_status) { | 656 | if (ser_status) { |
| @@ -676,12 +670,11 @@ bad: | |||
| 676 | ser_status); | 670 | ser_status); |
| 677 | goto err; | 671 | goto err; |
| 678 | } | 672 | } |
| 679 | |||
| 680 | /*****************************************************************/ | 673 | /*****************************************************************/ |
| 681 | /* we definitely need a private key, so let's get it */ | 674 | /* we definitely need a private key, so let's get it */ |
| 682 | 675 | ||
| 683 | if ((keyfile == NULL) && ((keyfile = NCONF_get_string(conf, | 676 | if ((keyfile == NULL) && ((keyfile = NCONF_get_string(conf, |
| 684 | section, ENV_PRIVATE_KEY)) == NULL)) { | 677 | section, ENV_PRIVATE_KEY)) == NULL)) { |
| 685 | lookup_fail(section, ENV_PRIVATE_KEY); | 678 | lookup_fail(section, ENV_PRIVATE_KEY); |
| 686 | goto err; | 679 | goto err; |
| 687 | } | 680 | } |
| @@ -699,13 +692,12 @@ bad: | |||
| 699 | /* load_key() has already printed an appropriate message */ | 692 | /* load_key() has already printed an appropriate message */ |
| 700 | goto err; | 693 | goto err; |
| 701 | } | 694 | } |
| 702 | |||
| 703 | /*****************************************************************/ | 695 | /*****************************************************************/ |
| 704 | /* we need a certificate */ | 696 | /* we need a certificate */ |
| 705 | if (!selfsign || spkac_file || ss_cert_file || gencrl) { | 697 | if (!selfsign || spkac_file || ss_cert_file || gencrl) { |
| 706 | if ((certfile == NULL) && | 698 | if ((certfile == NULL) && |
| 707 | ((certfile = NCONF_get_string(conf, | 699 | ((certfile = NCONF_get_string(conf, |
| 708 | section, ENV_CERTIFICATE)) == NULL)) { | 700 | section, ENV_CERTIFICATE)) == NULL)) { |
| 709 | lookup_fail(section, ENV_CERTIFICATE); | 701 | lookup_fail(section, ENV_CERTIFICATE); |
| 710 | goto err; | 702 | goto err; |
| 711 | } | 703 | } |
| @@ -770,34 +762,32 @@ bad: | |||
| 770 | if ((outdir == NULL) && (req)) { | 762 | if ((outdir == NULL) && (req)) { |
| 771 | 763 | ||
| 772 | if ((outdir = NCONF_get_string(conf, section, | 764 | if ((outdir = NCONF_get_string(conf, section, |
| 773 | ENV_NEW_CERTS_DIR)) == NULL) { | 765 | ENV_NEW_CERTS_DIR)) == NULL) { |
| 774 | BIO_printf(bio_err, "there needs to be defined a directory for new certificate to be placed in\n"); | 766 | BIO_printf(bio_err, "there needs to be defined a directory for new certificate to be placed in\n"); |
| 775 | goto err; | 767 | goto err; |
| 776 | } | 768 | } |
| 777 | /* outdir is a directory spec, but access() for VMS demands a | 769 | /* |
| 778 | filename. In any case, stat(), below, will catch the problem | 770 | * outdir is a directory spec, but access() for VMS demands a |
| 779 | if outdir is not a directory spec, and the fopen() or open() | 771 | * filename. In any case, stat(), below, will catch the |
| 780 | will catch an error if there is no write access. | 772 | * problem if outdir is not a directory spec, and the fopen() |
| 781 | 773 | * or open() will catch an error if there is no write access. | |
| 782 | Presumably, this problem could also be solved by using the DEC | 774 | * |
| 783 | C routines to convert the directory syntax to Unixly, and give | 775 | * Presumably, this problem could also be solved by using the |
| 784 | that to access(). However, time's too short to do that just | 776 | * DEC C routines to convert the directory syntax to Unixly, |
| 785 | now. | 777 | * and give that to access(). However, time's too short to |
| 786 | */ | 778 | * do that just now. |
| 787 | if (access(outdir, R_OK|W_OK|X_OK) != 0) | 779 | */ |
| 788 | { | 780 | if (access(outdir, R_OK | W_OK | X_OK) != 0) { |
| 789 | BIO_printf(bio_err, "I am unable to access the %s directory\n", outdir); | 781 | BIO_printf(bio_err, "I am unable to access the %s directory\n", outdir); |
| 790 | perror(outdir); | 782 | perror(outdir); |
| 791 | goto err; | 783 | goto err; |
| 792 | } | 784 | } |
| 793 | |||
| 794 | if (app_isdir(outdir) <= 0) { | 785 | if (app_isdir(outdir) <= 0) { |
| 795 | BIO_printf(bio_err, "%s need to be a directory\n", outdir); | 786 | BIO_printf(bio_err, "%s need to be a directory\n", outdir); |
| 796 | perror(outdir); | 787 | perror(outdir); |
| 797 | goto err; | 788 | goto err; |
| 798 | } | 789 | } |
| 799 | } | 790 | } |
| 800 | |||
| 801 | /*****************************************************************/ | 791 | /*****************************************************************/ |
| 802 | /* we need to load the database file */ | 792 | /* we need to load the database file */ |
| 803 | if ((dbfile = NCONF_get_string(conf, section, ENV_DATABASE)) == NULL) { | 793 | if ((dbfile = NCONF_get_string(conf, section, ENV_DATABASE)) == NULL) { |
| @@ -813,16 +803,16 @@ bad: | |||
| 813 | pp = sk_OPENSSL_PSTRING_value(db->db->data, i); | 803 | pp = sk_OPENSSL_PSTRING_value(db->db->data, i); |
| 814 | if ((pp[DB_type][0] != DB_TYPE_REV) && | 804 | if ((pp[DB_type][0] != DB_TYPE_REV) && |
| 815 | (pp[DB_rev_date][0] != '\0')) { | 805 | (pp[DB_rev_date][0] != '\0')) { |
| 816 | BIO_printf(bio_err, "entry %d: not revoked yet, but has a revocation date\n", i+1); | 806 | BIO_printf(bio_err, "entry %d: not revoked yet, but has a revocation date\n", i + 1); |
| 817 | goto err; | 807 | goto err; |
| 818 | } | 808 | } |
| 819 | if ((pp[DB_type][0] == DB_TYPE_REV) && | 809 | if ((pp[DB_type][0] == DB_TYPE_REV) && |
| 820 | !make_revoked(NULL, pp[DB_rev_date])) { | 810 | !make_revoked(NULL, pp[DB_rev_date])) { |
| 821 | BIO_printf(bio_err, " in entry %d\n", i+1); | 811 | BIO_printf(bio_err, " in entry %d\n", i + 1); |
| 822 | goto err; | 812 | goto err; |
| 823 | } | 813 | } |
| 824 | if (!check_time_format((char *)pp[DB_exp_date])) { | 814 | if (!check_time_format((char *) pp[DB_exp_date])) { |
| 825 | BIO_printf(bio_err, "entry %d: invalid expiry date\n", i+1); | 815 | BIO_printf(bio_err, "entry %d: invalid expiry date\n", i + 1); |
| 826 | goto err; | 816 | goto err; |
| 827 | } | 817 | } |
| 828 | p = pp[DB_serial]; | 818 | p = pp[DB_serial]; |
| @@ -831,28 +821,27 @@ bad: | |||
| 831 | p++; | 821 | p++; |
| 832 | j--; | 822 | j--; |
| 833 | } | 823 | } |
| 834 | if ((j&1) || (j < 2)) { | 824 | if ((j & 1) || (j < 2)) { |
| 835 | BIO_printf(bio_err, "entry %d: bad serial number length (%d)\n", i+1, j); | 825 | BIO_printf(bio_err, "entry %d: bad serial number length (%d)\n", i + 1, j); |
| 836 | goto err; | 826 | goto err; |
| 837 | } | 827 | } |
| 838 | while (*p) { | 828 | while (*p) { |
| 839 | if (!( ((*p >= '0') && (*p <= '9')) || | 829 | if (!(((*p >= '0') && (*p <= '9')) || |
| 840 | ((*p >= 'A') && (*p <= 'F')) || | 830 | ((*p >= 'A') && (*p <= 'F')) || |
| 841 | ((*p >= 'a') && (*p <= 'f'))) ) { | 831 | ((*p >= 'a') && (*p <= 'f')))) { |
| 842 | BIO_printf(bio_err, "entry %d: bad serial number characters, char pos %ld, char is '%c'\n", i+1, (long)(p-pp[DB_serial]), *p); | 832 | BIO_printf(bio_err, "entry %d: bad serial number characters, char pos %ld, char is '%c'\n", i + 1, (long) (p - pp[DB_serial]), *p); |
| 843 | goto err; | 833 | goto err; |
| 844 | } | 834 | } |
| 845 | p++; | 835 | p++; |
| 846 | } | 836 | } |
| 847 | } | 837 | } |
| 848 | if (verbose) { | 838 | if (verbose) { |
| 849 | BIO_set_fp(out,stdout,BIO_NOCLOSE|BIO_FP_TEXT); /* cannot fail */ | 839 | BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); /* cannot fail */ |
| 850 | TXT_DB_write(out, db->db); | 840 | TXT_DB_write(out, db->db); |
| 851 | BIO_printf(bio_err, "%d entries loaded from the database\n", | 841 | BIO_printf(bio_err, "%d entries loaded from the database\n", |
| 852 | sk_OPENSSL_PSTRING_num(db->db->data)); | 842 | sk_OPENSSL_PSTRING_num(db->db->data)); |
| 853 | BIO_printf(bio_err, "generating index\n"); | 843 | BIO_printf(bio_err, "generating index\n"); |
| 854 | } | 844 | } |
| 855 | |||
| 856 | if (!index_index(db)) | 845 | if (!index_index(db)) |
| 857 | goto err; | 846 | goto err; |
| 858 | 847 | ||
| @@ -868,7 +857,8 @@ bad: | |||
| 868 | BIO_printf(bio_err, "Malloc failure\n"); | 857 | BIO_printf(bio_err, "Malloc failure\n"); |
| 869 | goto err; | 858 | goto err; |
| 870 | } else if (i == 0) { | 859 | } else if (i == 0) { |
| 871 | if (verbose) BIO_printf(bio_err, | 860 | if (verbose) |
| 861 | BIO_printf(bio_err, | ||
| 872 | "No entries found to mark expired\n"); | 862 | "No entries found to mark expired\n"); |
| 873 | } else { | 863 | } else { |
| 874 | if (!save_index(dbfile, "new", db)) | 864 | if (!save_index(dbfile, "new", db)) |
| @@ -877,11 +867,11 @@ bad: | |||
| 877 | if (!rotate_index(dbfile, "new", "old")) | 867 | if (!rotate_index(dbfile, "new", "old")) |
| 878 | goto err; | 868 | goto err; |
| 879 | 869 | ||
| 880 | if (verbose) BIO_printf(bio_err, | 870 | if (verbose) |
| 871 | BIO_printf(bio_err, | ||
| 881 | "Done. %d entries marked as expired\n", i); | 872 | "Done. %d entries marked as expired\n", i); |
| 882 | } | 873 | } |
| 883 | } | 874 | } |
| 884 | |||
| 885 | /*****************************************************************/ | 875 | /*****************************************************************/ |
| 886 | /* Read extentions config file */ | 876 | /* Read extentions config file */ |
| 887 | if (extfile) { | 877 | if (extfile) { |
| @@ -892,11 +882,10 @@ bad: | |||
| 892 | extfile); | 882 | extfile); |
| 893 | else | 883 | else |
| 894 | BIO_printf(bio_err, "ERROR: on line %ld of config file '%s'\n", | 884 | BIO_printf(bio_err, "ERROR: on line %ld of config file '%s'\n", |
| 895 | errorline, extfile); | 885 | errorline, extfile); |
| 896 | ret = 1; | 886 | ret = 1; |
| 897 | goto err; | 887 | goto err; |
| 898 | } | 888 | } |
| 899 | |||
| 900 | if (verbose) | 889 | if (verbose) |
| 901 | BIO_printf(bio_err, "Successfully loaded extensions file %s\n", extfile); | 890 | BIO_printf(bio_err, "Successfully loaded extensions file %s\n", extfile); |
| 902 | 891 | ||
| @@ -904,7 +893,6 @@ bad: | |||
| 904 | if (!extensions && !(extensions = NCONF_get_string(extconf, "default", "extensions"))) | 893 | if (!extensions && !(extensions = NCONF_get_string(extconf, "default", "extensions"))) |
| 905 | extensions = "default"; | 894 | extensions = "default"; |
| 906 | } | 895 | } |
| 907 | |||
| 908 | /*****************************************************************/ | 896 | /*****************************************************************/ |
| 909 | if (req || gencrl) { | 897 | if (req || gencrl) { |
| 910 | if (outfile != NULL) { | 898 | if (outfile != NULL) { |
| @@ -913,33 +901,29 @@ bad: | |||
| 913 | goto err; | 901 | goto err; |
| 914 | } | 902 | } |
| 915 | } else { | 903 | } else { |
| 916 | BIO_set_fp(Sout, stdout, BIO_NOCLOSE|BIO_FP_TEXT); | 904 | BIO_set_fp(Sout, stdout, BIO_NOCLOSE | BIO_FP_TEXT); |
| 917 | } | 905 | } |
| 918 | } | 906 | } |
| 919 | |||
| 920 | if ((md == NULL) && ((md = NCONF_get_string(conf, | 907 | if ((md == NULL) && ((md = NCONF_get_string(conf, |
| 921 | section, ENV_DEFAULT_MD)) == NULL)) { | 908 | section, ENV_DEFAULT_MD)) == NULL)) { |
| 922 | lookup_fail(section, ENV_DEFAULT_MD); | 909 | lookup_fail(section, ENV_DEFAULT_MD); |
| 923 | goto err; | 910 | goto err; |
| 924 | } | 911 | } |
| 925 | |||
| 926 | if (!strcmp(md, "default")) { | 912 | if (!strcmp(md, "default")) { |
| 927 | int def_nid; | 913 | int def_nid; |
| 928 | if (EVP_PKEY_get_default_digest_nid(pkey, &def_nid) <= 0) { | 914 | if (EVP_PKEY_get_default_digest_nid(pkey, &def_nid) <= 0) { |
| 929 | BIO_puts(bio_err, "no default digest\n"); | 915 | BIO_puts(bio_err, "no default digest\n"); |
| 930 | goto err; | 916 | goto err; |
| 931 | } | 917 | } |
| 932 | md = (char *)OBJ_nid2sn(def_nid); | 918 | md = (char *) OBJ_nid2sn(def_nid); |
| 933 | } | 919 | } |
| 934 | |||
| 935 | if ((dgst = EVP_get_digestbyname(md)) == NULL) { | 920 | if ((dgst = EVP_get_digestbyname(md)) == NULL) { |
| 936 | BIO_printf(bio_err, "%s is an unsupported message digest type\n", md); | 921 | BIO_printf(bio_err, "%s is an unsupported message digest type\n", md); |
| 937 | goto err; | 922 | goto err; |
| 938 | } | 923 | } |
| 939 | |||
| 940 | if (req) { | 924 | if (req) { |
| 941 | if ((email_dn == 1) && ((tmp_email_dn = NCONF_get_string(conf, | 925 | if ((email_dn == 1) && ((tmp_email_dn = NCONF_get_string(conf, |
| 942 | section, ENV_DEFAULT_EMAIL_DN)) != NULL )) { | 926 | section, ENV_DEFAULT_EMAIL_DN)) != NULL)) { |
| 943 | if (strcmp(tmp_email_dn, "no") == 0) | 927 | if (strcmp(tmp_email_dn, "no") == 0) |
| 944 | email_dn = 0; | 928 | email_dn = 0; |
| 945 | } | 929 | } |
| @@ -947,7 +931,7 @@ bad: | |||
| 947 | BIO_printf(bio_err, "message digest is %s\n", | 931 | BIO_printf(bio_err, "message digest is %s\n", |
| 948 | OBJ_nid2ln(dgst->type)); | 932 | OBJ_nid2ln(dgst->type)); |
| 949 | if ((policy == NULL) && ((policy = NCONF_get_string(conf, | 933 | if ((policy == NULL) && ((policy = NCONF_get_string(conf, |
| 950 | section, ENV_POLICY)) == NULL)) { | 934 | section, ENV_POLICY)) == NULL)) { |
| 951 | lookup_fail(section, ENV_POLICY); | 935 | lookup_fail(section, ENV_POLICY); |
| 952 | goto err; | 936 | goto err; |
| 953 | } | 937 | } |
| @@ -955,14 +939,15 @@ bad: | |||
| 955 | BIO_printf(bio_err, "policy is %s\n", policy); | 939 | BIO_printf(bio_err, "policy is %s\n", policy); |
| 956 | 940 | ||
| 957 | if ((serialfile = NCONF_get_string(conf, section, ENV_SERIAL)) | 941 | if ((serialfile = NCONF_get_string(conf, section, ENV_SERIAL)) |
| 958 | == NULL) { | 942 | == NULL) { |
| 959 | lookup_fail(section, ENV_SERIAL); | 943 | lookup_fail(section, ENV_SERIAL); |
| 960 | goto err; | 944 | goto err; |
| 961 | } | 945 | } |
| 962 | |||
| 963 | if (!extconf) { | 946 | if (!extconf) { |
| 964 | /* no '-extfile' option, so we look for extensions | 947 | /* |
| 965 | * in the main configuration file */ | 948 | * no '-extfile' option, so we look for extensions in |
| 949 | * the main configuration file | ||
| 950 | */ | ||
| 966 | if (!extensions) { | 951 | if (!extensions) { |
| 967 | extensions = NCONF_get_string(conf, section, | 952 | extensions = NCONF_get_string(conf, section, |
| 968 | ENV_EXTENSIONS); | 953 | ENV_EXTENSIONS); |
| @@ -975,7 +960,7 @@ bad: | |||
| 975 | X509V3_set_ctx_test(&ctx); | 960 | X509V3_set_ctx_test(&ctx); |
| 976 | X509V3_set_nconf(&ctx, conf); | 961 | X509V3_set_nconf(&ctx, conf); |
| 977 | if (!X509V3_EXT_add_nconf(conf, &ctx, extensions, | 962 | if (!X509V3_EXT_add_nconf(conf, &ctx, extensions, |
| 978 | NULL)) { | 963 | NULL)) { |
| 979 | BIO_printf(bio_err, | 964 | BIO_printf(bio_err, |
| 980 | "Error Loading extension section %s\n", | 965 | "Error Loading extension section %s\n", |
| 981 | extensions); | 966 | extensions); |
| @@ -984,7 +969,6 @@ bad: | |||
| 984 | } | 969 | } |
| 985 | } | 970 | } |
| 986 | } | 971 | } |
| 987 | |||
| 988 | if (startdate == NULL) { | 972 | if (startdate == NULL) { |
| 989 | startdate = NCONF_get_string(conf, section, | 973 | startdate = NCONF_get_string(conf, section, |
| 990 | ENV_DEFAULT_STARTDATE); | 974 | ENV_DEFAULT_STARTDATE); |
| @@ -996,7 +980,7 @@ bad: | |||
| 996 | goto err; | 980 | goto err; |
| 997 | } | 981 | } |
| 998 | if (startdate == NULL) | 982 | if (startdate == NULL) |
| 999 | startdate="today"; | 983 | startdate = "today"; |
| 1000 | 984 | ||
| 1001 | if (enddate == NULL) { | 985 | if (enddate == NULL) { |
| 1002 | enddate = NCONF_get_string(conf, section, | 986 | enddate = NCONF_get_string(conf, section, |
| @@ -1008,7 +992,6 @@ bad: | |||
| 1008 | BIO_printf(bio_err, "end date is invalid, it should be YYMMDDHHMMSSZ or YYYYMMDDHHMMSSZ\n"); | 992 | BIO_printf(bio_err, "end date is invalid, it should be YYMMDDHHMMSSZ or YYYYMMDDHHMMSSZ\n"); |
| 1009 | goto err; | 993 | goto err; |
| 1010 | } | 994 | } |
| 1011 | |||
| 1012 | if (days == 0) { | 995 | if (days == 0) { |
| 1013 | if (!NCONF_get_number(conf, section, ENV_DEFAULT_DAYS, &days)) | 996 | if (!NCONF_get_number(conf, section, ENV_DEFAULT_DAYS, &days)) |
| 1014 | days = 0; | 997 | days = 0; |
| @@ -1017,7 +1000,6 @@ bad: | |||
| 1017 | BIO_printf(bio_err, "cannot lookup how many days to certify for\n"); | 1000 | BIO_printf(bio_err, "cannot lookup how many days to certify for\n"); |
| 1018 | goto err; | 1001 | goto err; |
| 1019 | } | 1002 | } |
| 1020 | |||
| 1021 | if ((serial = load_serial(serialfile, create_ser, NULL)) == NULL) { | 1003 | if ((serial = load_serial(serialfile, create_ser, NULL)) == NULL) { |
| 1022 | BIO_printf(bio_err, "error while loading serial number\n"); | 1004 | BIO_printf(bio_err, "error while loading serial number\n"); |
| 1023 | goto err; | 1005 | goto err; |
| @@ -1032,12 +1014,10 @@ bad: | |||
| 1032 | free(f); | 1014 | free(f); |
| 1033 | } | 1015 | } |
| 1034 | } | 1016 | } |
| 1035 | |||
| 1036 | if ((attribs = NCONF_get_section(conf, policy)) == NULL) { | 1017 | if ((attribs = NCONF_get_section(conf, policy)) == NULL) { |
| 1037 | BIO_printf(bio_err, "unable to find 'section' for %s\n", policy); | 1018 | BIO_printf(bio_err, "unable to find 'section' for %s\n", policy); |
| 1038 | goto err; | 1019 | goto err; |
| 1039 | } | 1020 | } |
| 1040 | |||
| 1041 | if ((cert_sk = sk_X509_new_null()) == NULL) { | 1021 | if ((cert_sk = sk_X509_new_null()) == NULL) { |
| 1042 | BIO_printf(bio_err, "Memory allocation failure\n"); | 1022 | BIO_printf(bio_err, "Memory allocation failure\n"); |
| 1043 | goto err; | 1023 | goto err; |
| @@ -1123,14 +1103,15 @@ bad: | |||
| 1123 | } | 1103 | } |
| 1124 | } | 1104 | } |
| 1125 | } | 1105 | } |
| 1126 | /* we have a stack of newly certified certificates | 1106 | /* |
| 1127 | * and a data base and serial number that need | 1107 | * we have a stack of newly certified certificates and a data |
| 1128 | * updating */ | 1108 | * base and serial number that need updating |
| 1109 | */ | ||
| 1129 | 1110 | ||
| 1130 | if (sk_X509_num(cert_sk) > 0) { | 1111 | if (sk_X509_num(cert_sk) > 0) { |
| 1131 | if (!batch) { | 1112 | if (!batch) { |
| 1132 | BIO_printf(bio_err, "\n%d out of %d certificate requests certified, commit? [y/n]", total_done, total); | 1113 | BIO_printf(bio_err, "\n%d out of %d certificate requests certified, commit? [y/n]", total_done, total); |
| 1133 | (void)BIO_flush(bio_err); | 1114 | (void) BIO_flush(bio_err); |
| 1134 | buf[0][0] = '\0'; | 1115 | buf[0][0] = '\0'; |
| 1135 | if (!fgets(buf[0], 10, stdin)) { | 1116 | if (!fgets(buf[0], 10, stdin)) { |
| 1136 | BIO_printf(bio_err, "CERTIFICATION CANCELED: I/O error\n"); | 1117 | BIO_printf(bio_err, "CERTIFICATION CANCELED: I/O error\n"); |
| @@ -1143,7 +1124,6 @@ bad: | |||
| 1143 | goto err; | 1124 | goto err; |
| 1144 | } | 1125 | } |
| 1145 | } | 1126 | } |
| 1146 | |||
| 1147 | BIO_printf(bio_err, "Write out database with %d new entries\n", sk_X509_num(cert_sk)); | 1127 | BIO_printf(bio_err, "Write out database with %d new entries\n", sk_X509_num(cert_sk)); |
| 1148 | 1128 | ||
| 1149 | if (!save_serial(serialfile, "new", serial, NULL)) | 1129 | if (!save_serial(serialfile, "new", serial, NULL)) |
| @@ -1152,7 +1132,6 @@ bad: | |||
| 1152 | if (!save_index(dbfile, "new", db)) | 1132 | if (!save_index(dbfile, "new", db)) |
| 1153 | goto err; | 1133 | goto err; |
| 1154 | } | 1134 | } |
| 1155 | |||
| 1156 | if (verbose) | 1135 | if (verbose) |
| 1157 | BIO_printf(bio_err, "writing new certificates\n"); | 1136 | BIO_printf(bio_err, "writing new certificates\n"); |
| 1158 | for (i = 0; i < sk_X509_num(cert_sk); i++) { | 1137 | for (i = 0; i < sk_X509_num(cert_sk); i++) { |
| @@ -1162,25 +1141,24 @@ bad: | |||
| 1162 | x = sk_X509_value(cert_sk, i); | 1141 | x = sk_X509_value(cert_sk, i); |
| 1163 | 1142 | ||
| 1164 | j = x->cert_info->serialNumber->length; | 1143 | j = x->cert_info->serialNumber->length; |
| 1165 | p = (const char *)x->cert_info->serialNumber->data; | 1144 | p = (const char *) x->cert_info->serialNumber->data; |
| 1166 | 1145 | ||
| 1167 | if (strlen(outdir) >= (size_t)(j ? BSIZE - j*2 - 6 : BSIZE - 8)) { | 1146 | if (strlen(outdir) >= (size_t) (j ? BSIZE - j * 2 - 6 : BSIZE - 8)) { |
| 1168 | BIO_printf(bio_err, "certificate file name too long\n"); | 1147 | BIO_printf(bio_err, "certificate file name too long\n"); |
| 1169 | goto err; | 1148 | goto err; |
| 1170 | } | 1149 | } |
| 1171 | |||
| 1172 | strlcpy(buf[2], outdir, sizeof(buf[2])); | 1150 | strlcpy(buf[2], outdir, sizeof(buf[2])); |
| 1173 | 1151 | ||
| 1174 | BUF_strlcat(buf[2], "/", sizeof(buf[2])); | 1152 | BUF_strlcat(buf[2], "/", sizeof(buf[2])); |
| 1175 | 1153 | ||
| 1176 | n = (char *)&(buf[2][strlen(buf[2])]); | 1154 | n = (char *) &(buf[2][strlen(buf[2])]); |
| 1177 | if (j > 0) { | 1155 | if (j > 0) { |
| 1178 | for (k = 0; k < j; k++) { | 1156 | for (k = 0; k < j; k++) { |
| 1179 | if (n >= &(buf[2][sizeof(buf[2])])) | 1157 | if (n >= &(buf[2][sizeof(buf[2])])) |
| 1180 | break; | 1158 | break; |
| 1181 | (void) snprintf(n, | 1159 | (void) snprintf(n, |
| 1182 | &buf[2][0] + sizeof(buf[2]) - n, | 1160 | &buf[2][0] + sizeof(buf[2]) - n, |
| 1183 | "%02X", (unsigned char)*(p++)); | 1161 | "%02X", (unsigned char) *(p++)); |
| 1184 | n += 2; | 1162 | n += 2; |
| 1185 | } | 1163 | } |
| 1186 | } else { | 1164 | } else { |
| @@ -1214,7 +1192,6 @@ bad: | |||
| 1214 | BIO_printf(bio_err, "Data Base Updated\n"); | 1192 | BIO_printf(bio_err, "Data Base Updated\n"); |
| 1215 | } | 1193 | } |
| 1216 | } | 1194 | } |
| 1217 | |||
| 1218 | /*****************************************************************/ | 1195 | /*****************************************************************/ |
| 1219 | if (gencrl) { | 1196 | if (gencrl) { |
| 1220 | int crl_v2 = 0; | 1197 | int crl_v2 = 0; |
| @@ -1236,20 +1213,18 @@ bad: | |||
| 1236 | goto err; | 1213 | goto err; |
| 1237 | } | 1214 | } |
| 1238 | } | 1215 | } |
| 1239 | |||
| 1240 | if ((crlnumberfile = NCONF_get_string(conf, section, ENV_CRLNUMBER)) | 1216 | if ((crlnumberfile = NCONF_get_string(conf, section, ENV_CRLNUMBER)) |
| 1241 | != NULL) | 1217 | != NULL) |
| 1242 | if ((crlnumber = load_serial(crlnumberfile, 0, NULL)) == NULL) { | 1218 | if ((crlnumber = load_serial(crlnumberfile, 0, NULL)) == NULL) { |
| 1243 | BIO_printf(bio_err, "error while loading CRL number\n"); | 1219 | BIO_printf(bio_err, "error while loading CRL number\n"); |
| 1244 | goto err; | 1220 | goto err; |
| 1245 | } | 1221 | } |
| 1246 | |||
| 1247 | if (!crldays && !crlhours && !crlsec) { | 1222 | if (!crldays && !crlhours && !crlsec) { |
| 1248 | if (!NCONF_get_number(conf, section, | 1223 | if (!NCONF_get_number(conf, section, |
| 1249 | ENV_DEFAULT_CRL_DAYS, &crldays)) | 1224 | ENV_DEFAULT_CRL_DAYS, &crldays)) |
| 1250 | crldays = 0; | 1225 | crldays = 0; |
| 1251 | if (!NCONF_get_number(conf, section, | 1226 | if (!NCONF_get_number(conf, section, |
| 1252 | ENV_DEFAULT_CRL_HOURS, &crlhours)) | 1227 | ENV_DEFAULT_CRL_HOURS, &crlhours)) |
| 1253 | crlhours = 0; | 1228 | crlhours = 0; |
| 1254 | ERR_clear_error(); | 1229 | ERR_clear_error(); |
| 1255 | } | 1230 | } |
| @@ -1257,7 +1232,6 @@ bad: | |||
| 1257 | BIO_printf(bio_err, "cannot lookup how long until the next CRL is issued\n"); | 1232 | BIO_printf(bio_err, "cannot lookup how long until the next CRL is issued\n"); |
| 1258 | goto err; | 1233 | goto err; |
| 1259 | } | 1234 | } |
| 1260 | |||
| 1261 | if (verbose) | 1235 | if (verbose) |
| 1262 | BIO_printf(bio_err, "making CRL\n"); | 1236 | BIO_printf(bio_err, "making CRL\n"); |
| 1263 | if ((crl = X509_CRL_new()) == NULL) | 1237 | if ((crl = X509_CRL_new()) == NULL) |
| @@ -1270,8 +1244,8 @@ bad: | |||
| 1270 | goto err; | 1244 | goto err; |
| 1271 | X509_gmtime_adj(tmptm, 0); | 1245 | X509_gmtime_adj(tmptm, 0); |
| 1272 | X509_CRL_set_lastUpdate(crl, tmptm); | 1246 | X509_CRL_set_lastUpdate(crl, tmptm); |
| 1273 | if (!X509_time_adj_ex(tmptm, crldays, crlhours*60*60 + crlsec, | 1247 | if (!X509_time_adj_ex(tmptm, crldays, crlhours * 60 * 60 + crlsec, |
| 1274 | NULL)) { | 1248 | NULL)) { |
| 1275 | BIO_puts(bio_err, "error setting CRL nextUpdate\n"); | 1249 | BIO_puts(bio_err, "error setting CRL nextUpdate\n"); |
| 1276 | goto err; | 1250 | goto err; |
| 1277 | } | 1251 | } |
| @@ -1302,8 +1276,9 @@ bad: | |||
| 1302 | } | 1276 | } |
| 1303 | } | 1277 | } |
| 1304 | 1278 | ||
| 1305 | /* sort the data so it will be written in serial | 1279 | /* |
| 1306 | * number order */ | 1280 | * sort the data so it will be written in serial number order |
| 1281 | */ | ||
| 1307 | X509_CRL_sort(crl); | 1282 | X509_CRL_sort(crl); |
| 1308 | 1283 | ||
| 1309 | /* we now have a CRL */ | 1284 | /* we now have a CRL */ |
| @@ -1319,7 +1294,8 @@ bad: | |||
| 1319 | 1294 | ||
| 1320 | if (crl_ext) | 1295 | if (crl_ext) |
| 1321 | if (!X509V3_EXT_CRL_add_nconf(conf, &crlctx, | 1296 | if (!X509V3_EXT_CRL_add_nconf(conf, &crlctx, |
| 1322 | crl_ext, crl)) goto err; | 1297 | crl_ext, crl)) |
| 1298 | goto err; | ||
| 1323 | if (crlnumberfile != NULL) { | 1299 | if (crlnumberfile != NULL) { |
| 1324 | tmpser = BN_to_ASN1_INTEGER(crlnumber, NULL); | 1300 | tmpser = BN_to_ASN1_INTEGER(crlnumber, NULL); |
| 1325 | if (!tmpser) | 1301 | if (!tmpser) |
| @@ -1333,11 +1309,10 @@ bad: | |||
| 1333 | } | 1309 | } |
| 1334 | if (crl_ext || crl_v2) { | 1310 | if (crl_ext || crl_v2) { |
| 1335 | if (!X509_CRL_set_version(crl, 1)) | 1311 | if (!X509_CRL_set_version(crl, 1)) |
| 1336 | goto err; /* version 2 CRL */ | 1312 | goto err; /* version 2 CRL */ |
| 1337 | } | 1313 | } |
| 1338 | 1314 | if (crlnumberfile != NULL) /* we have a CRL number that | |
| 1339 | 1315 | * need updating */ | |
| 1340 | if (crlnumberfile != NULL) /* we have a CRL number that need updating */ | ||
| 1341 | if (!save_serial(crlnumberfile, "new", crlnumber, NULL)) | 1316 | if (!save_serial(crlnumberfile, "new", crlnumber, NULL)) |
| 1342 | goto err; | 1317 | goto err; |
| 1343 | 1318 | ||
| @@ -1345,7 +1320,6 @@ bad: | |||
| 1345 | BN_free(crlnumber); | 1320 | BN_free(crlnumber); |
| 1346 | crlnumber = NULL; | 1321 | crlnumber = NULL; |
| 1347 | } | 1322 | } |
| 1348 | |||
| 1349 | if (!do_X509_CRL_sign(bio_err, crl, pkey, dgst, sigopts)) | 1323 | if (!do_X509_CRL_sign(bio_err, crl, pkey, dgst, sigopts)) |
| 1350 | goto err; | 1324 | goto err; |
| 1351 | 1325 | ||
| @@ -1412,7 +1386,7 @@ err: | |||
| 1412 | NCONF_free(extconf); | 1386 | NCONF_free(extconf); |
| 1413 | OBJ_cleanup(); | 1387 | OBJ_cleanup(); |
| 1414 | apps_shutdown(); | 1388 | apps_shutdown(); |
| 1415 | return(ret); | 1389 | return (ret); |
| 1416 | } | 1390 | } |
| 1417 | 1391 | ||
| 1418 | static void | 1392 | static void |
| @@ -1422,11 +1396,11 @@ lookup_fail(const char *name, const char *tag) | |||
| 1422 | } | 1396 | } |
| 1423 | 1397 | ||
| 1424 | static int | 1398 | static int |
| 1425 | certify(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509, | 1399 | certify(X509 ** xret, char *infile, EVP_PKEY * pkey, X509 * x509, |
| 1426 | const EVP_MD *dgst, STACK_OF(OPENSSL_STRING) *sigopts, | 1400 | const EVP_MD * dgst, STACK_OF(OPENSSL_STRING) * sigopts, |
| 1427 | STACK_OF(CONF_VALUE) *policy, CA_DB *db, BIGNUM *serial, char *subj, | 1401 | STACK_OF(CONF_VALUE) * policy, CA_DB * db, BIGNUM * serial, char *subj, |
| 1428 | unsigned long chtype, int multirdn, int email_dn, char *startdate, | 1402 | unsigned long chtype, int multirdn, int email_dn, char *startdate, |
| 1429 | char *enddate, long days, int batch, char *ext_sect, CONF *lconf, | 1403 | char *enddate, long days, int batch, char *ext_sect, CONF * lconf, |
| 1430 | int verbose, unsigned long certopt, unsigned long nameopt, int default_op, | 1404 | int verbose, unsigned long certopt, unsigned long nameopt, int default_op, |
| 1431 | int ext_copy, int selfsign) | 1405 | int ext_copy, int selfsign) |
| 1432 | { | 1406 | { |
| @@ -1488,13 +1462,13 @@ err: | |||
| 1488 | } | 1462 | } |
| 1489 | 1463 | ||
| 1490 | static int | 1464 | static int |
| 1491 | certify_cert(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509, | 1465 | certify_cert(X509 ** xret, char *infile, EVP_PKEY * pkey, X509 * x509, |
| 1492 | const EVP_MD *dgst, STACK_OF(OPENSSL_STRING) *sigopts, | 1466 | const EVP_MD * dgst, STACK_OF(OPENSSL_STRING) * sigopts, |
| 1493 | STACK_OF(CONF_VALUE) *policy, CA_DB *db, BIGNUM *serial, char *subj, | 1467 | STACK_OF(CONF_VALUE) * policy, CA_DB * db, BIGNUM * serial, char *subj, |
| 1494 | unsigned long chtype, int multirdn, int email_dn, char *startdate, | 1468 | unsigned long chtype, int multirdn, int email_dn, char *startdate, |
| 1495 | char *enddate, long days, int batch, char *ext_sect, CONF *lconf, | 1469 | char *enddate, long days, int batch, char *ext_sect, CONF * lconf, |
| 1496 | int verbose, unsigned long certopt, unsigned long nameopt, int default_op, | 1470 | int verbose, unsigned long certopt, unsigned long nameopt, int default_op, |
| 1497 | int ext_copy, ENGINE *e) | 1471 | int ext_copy, ENGINE * e) |
| 1498 | { | 1472 | { |
| 1499 | X509 *req = NULL; | 1473 | X509 *req = NULL; |
| 1500 | X509_REQ *rreq = NULL; | 1474 | X509_REQ *rreq = NULL; |
| @@ -1542,11 +1516,11 @@ err: | |||
| 1542 | } | 1516 | } |
| 1543 | 1517 | ||
| 1544 | static int | 1518 | static int |
| 1545 | do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst, | 1519 | do_body(X509 ** xret, EVP_PKEY * pkey, X509 * x509, const EVP_MD * dgst, |
| 1546 | STACK_OF(OPENSSL_STRING) *sigopts, STACK_OF(CONF_VALUE) *policy, | 1520 | STACK_OF(OPENSSL_STRING) * sigopts, STACK_OF(CONF_VALUE) * policy, |
| 1547 | CA_DB *db, BIGNUM *serial, char *subj, unsigned long chtype, int multirdn, | 1521 | CA_DB * db, BIGNUM * serial, char *subj, unsigned long chtype, int multirdn, |
| 1548 | int email_dn, char *startdate, char *enddate, long days, int batch, | 1522 | int email_dn, char *startdate, char *enddate, long days, int batch, |
| 1549 | int verbose, X509_REQ *req, char *ext_sect, CONF *lconf, | 1523 | int verbose, X509_REQ * req, char *ext_sect, CONF * lconf, |
| 1550 | unsigned long certopt, unsigned long nameopt, int default_op, | 1524 | unsigned long certopt, unsigned long nameopt, int default_op, |
| 1551 | int ext_copy, int selfsign) | 1525 | int ext_copy, int selfsign) |
| 1552 | { | 1526 | { |
| @@ -1572,7 +1546,6 @@ do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst, | |||
| 1572 | BIO_printf(bio_err, "malloc error\n"); | 1546 | BIO_printf(bio_err, "malloc error\n"); |
| 1573 | return (0); | 1547 | return (0); |
| 1574 | } | 1548 | } |
| 1575 | |||
| 1576 | for (i = 0; i < DB_NUMBER; i++) | 1549 | for (i = 0; i < DB_NUMBER; i++) |
| 1577 | row[i] = NULL; | 1550 | row[i] = NULL; |
| 1578 | 1551 | ||
| @@ -1587,7 +1560,6 @@ do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst, | |||
| 1587 | req->req_info->enc.modified = 1; | 1560 | req->req_info->enc.modified = 1; |
| 1588 | X509_NAME_free(n); | 1561 | X509_NAME_free(n); |
| 1589 | } | 1562 | } |
| 1590 | |||
| 1591 | if (default_op) | 1563 | if (default_op) |
| 1592 | BIO_printf(bio_err, "The Subject's Distinguished Name is as follows\n"); | 1564 | BIO_printf(bio_err, "The Subject's Distinguished Name is as follows\n"); |
| 1593 | 1565 | ||
| @@ -1612,7 +1584,6 @@ do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst, | |||
| 1612 | (str->type == V_ASN1_PRINTABLESTRING)) | 1584 | (str->type == V_ASN1_PRINTABLESTRING)) |
| 1613 | str->type = V_ASN1_IA5STRING; | 1585 | str->type = V_ASN1_IA5STRING; |
| 1614 | } | 1586 | } |
| 1615 | |||
| 1616 | /* If no EMAIL is wanted in the subject */ | 1587 | /* If no EMAIL is wanted in the subject */ |
| 1617 | if ((OBJ_obj2nid(obj) == NID_pkcs9_emailAddress) && (!email_dn)) | 1588 | if ((OBJ_obj2nid(obj) == NID_pkcs9_emailAddress) && (!email_dn)) |
| 1618 | continue; | 1589 | continue; |
| @@ -1626,14 +1597,13 @@ do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst, | |||
| 1626 | if ((str->type != V_ASN1_BMPSTRING) && (str->type != V_ASN1_UTF8STRING)) { | 1597 | if ((str->type != V_ASN1_BMPSTRING) && (str->type != V_ASN1_UTF8STRING)) { |
| 1627 | j = ASN1_PRINTABLE_type(str->data, str->length); | 1598 | j = ASN1_PRINTABLE_type(str->data, str->length); |
| 1628 | if (((j == V_ASN1_T61STRING) && | 1599 | if (((j == V_ASN1_T61STRING) && |
| 1629 | (str->type != V_ASN1_T61STRING)) || | 1600 | (str->type != V_ASN1_T61STRING)) || |
| 1630 | ((j == V_ASN1_IA5STRING) && | 1601 | ((j == V_ASN1_IA5STRING) && |
| 1631 | (str->type == V_ASN1_PRINTABLESTRING))) { | 1602 | (str->type == V_ASN1_PRINTABLESTRING))) { |
| 1632 | BIO_printf(bio_err, "\nThe string contains characters that are illegal for the ASN.1 type\n"); | 1603 | BIO_printf(bio_err, "\nThe string contains characters that are illegal for the ASN.1 type\n"); |
| 1633 | goto err; | 1604 | goto err; |
| 1634 | } | 1605 | } |
| 1635 | } | 1606 | } |
| 1636 | |||
| 1637 | if (default_op) | 1607 | if (default_op) |
| 1638 | old_entry_print(bio_err, obj, str); | 1608 | old_entry_print(bio_err, obj, str); |
| 1639 | } | 1609 | } |
| @@ -1643,7 +1613,6 @@ do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst, | |||
| 1643 | BIO_printf(bio_err, "Memory allocation failure\n"); | 1613 | BIO_printf(bio_err, "Memory allocation failure\n"); |
| 1644 | goto err; | 1614 | goto err; |
| 1645 | } | 1615 | } |
| 1646 | |||
| 1647 | /* take a copy of the issuer name before we mess with it. */ | 1616 | /* take a copy of the issuer name before we mess with it. */ |
| 1648 | if (selfsign) | 1617 | if (selfsign) |
| 1649 | CAname = X509_NAME_dup(name); | 1618 | CAname = X509_NAME_dup(name); |
| @@ -1654,7 +1623,7 @@ do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst, | |||
| 1654 | str = str2 = NULL; | 1623 | str = str2 = NULL; |
| 1655 | 1624 | ||
| 1656 | for (i = 0; i < sk_CONF_VALUE_num(policy); i++) { | 1625 | for (i = 0; i < sk_CONF_VALUE_num(policy); i++) { |
| 1657 | cv=sk_CONF_VALUE_value(policy,i); /* get the object id */ | 1626 | cv = sk_CONF_VALUE_value(policy, i); /* get the object id */ |
| 1658 | if ((j = OBJ_txt2nid(cv->name)) == NID_undef) { | 1627 | if ((j = OBJ_txt2nid(cv->name)) == NID_undef) { |
| 1659 | BIO_printf(bio_err, "%s:unknown object type in 'policy' configuration\n", cv->name); | 1628 | BIO_printf(bio_err, "%s:unknown object type in 'policy' configuration\n", cv->name); |
| 1660 | goto err; | 1629 | goto err; |
| @@ -1692,10 +1661,9 @@ do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst, | |||
| 1692 | BIO_printf(bio_err, "The mandatory %s field was missing\n", cv->name); | 1661 | BIO_printf(bio_err, "The mandatory %s field was missing\n", cv->name); |
| 1693 | goto err; | 1662 | goto err; |
| 1694 | } | 1663 | } |
| 1695 | |||
| 1696 | last2 = -1; | 1664 | last2 = -1; |
| 1697 | 1665 | ||
| 1698 | again2: | 1666 | again2: |
| 1699 | j = X509_NAME_get_index_by_OBJ(CAname, obj, last2); | 1667 | j = X509_NAME_get_index_by_OBJ(CAname, obj, last2); |
| 1700 | if ((j < 0) && (last2 == -1)) { | 1668 | if ((j < 0) && (last2 == -1)) { |
| 1701 | BIO_printf(bio_err, "The %s field does not exist in the CA certificate,\nthe 'policy' is misconfigured\n", cv->name); | 1669 | BIO_printf(bio_err, "The %s field does not exist in the CA certificate,\nthe 'policy' is misconfigured\n", cv->name); |
| @@ -1710,7 +1678,7 @@ again2: | |||
| 1710 | goto again2; | 1678 | goto again2; |
| 1711 | } | 1679 | } |
| 1712 | if (j < 0) { | 1680 | if (j < 0) { |
| 1713 | BIO_printf(bio_err, "The %s field needed to be the same in the\nCA certificate (%s) and the request (%s)\n", cv->name, ((str2 == NULL)?"NULL":(char *)str2->data), ((str == NULL)?"NULL":(char *)str->data)); | 1681 | BIO_printf(bio_err, "The %s field needed to be the same in the\nCA certificate (%s) and the request (%s)\n", cv->name, ((str2 == NULL) ? "NULL" : (char *) str2->data), ((str == NULL) ? "NULL" : (char *) str->data)); |
| 1714 | goto err; | 1682 | goto err; |
| 1715 | } | 1683 | } |
| 1716 | } else { | 1684 | } else { |
| @@ -1738,18 +1706,21 @@ again2: | |||
| 1738 | if (subject == NULL) | 1706 | if (subject == NULL) |
| 1739 | goto err; | 1707 | goto err; |
| 1740 | } | 1708 | } |
| 1741 | |||
| 1742 | if (verbose) | 1709 | if (verbose) |
| 1743 | BIO_printf(bio_err, "The subject name appears to be ok, checking data base for clashes\n"); | 1710 | BIO_printf(bio_err, "The subject name appears to be ok, checking data base for clashes\n"); |
| 1744 | 1711 | ||
| 1745 | /* Build the correct Subject if no e-mail is wanted in the subject */ | 1712 | /* Build the correct Subject if no e-mail is wanted in the subject */ |
| 1746 | /* and add it later on because of the method extensions are added (altName) */ | 1713 | /* |
| 1714 | * and add it later on because of the method extensions are added | ||
| 1715 | * (altName) | ||
| 1716 | */ | ||
| 1747 | 1717 | ||
| 1748 | if (email_dn) | 1718 | if (email_dn) |
| 1749 | dn_subject = subject; | 1719 | dn_subject = subject; |
| 1750 | else { | 1720 | else { |
| 1751 | X509_NAME_ENTRY *tmpne; | 1721 | X509_NAME_ENTRY *tmpne; |
| 1752 | /* Its best to dup the subject DN and then delete any email | 1722 | /* |
| 1723 | * Its best to dup the subject DN and then delete any email | ||
| 1753 | * addresses because this retains its structure. | 1724 | * addresses because this retains its structure. |
| 1754 | */ | 1725 | */ |
| 1755 | if (!(dn_subject = X509_NAME_dup(subject))) { | 1726 | if (!(dn_subject = X509_NAME_dup(subject))) { |
| @@ -1772,7 +1743,6 @@ again2: | |||
| 1772 | BIO_printf(bio_err, "Memory allocation failure\n"); | 1743 | BIO_printf(bio_err, "Memory allocation failure\n"); |
| 1773 | goto err; | 1744 | goto err; |
| 1774 | } | 1745 | } |
| 1775 | |||
| 1776 | if (db->attributes.unique_subject) { | 1746 | if (db->attributes.unique_subject) { |
| 1777 | OPENSSL_STRING *crow = row; | 1747 | OPENSSL_STRING *crow = row; |
| 1778 | 1748 | ||
| @@ -1791,35 +1761,43 @@ again2: | |||
| 1791 | BIO_printf(bio_err, " check the database/serial_file for corruption\n"); | 1761 | BIO_printf(bio_err, " check the database/serial_file for corruption\n"); |
| 1792 | } | 1762 | } |
| 1793 | } | 1763 | } |
| 1794 | |||
| 1795 | if (rrow != NULL) { | 1764 | if (rrow != NULL) { |
| 1796 | BIO_printf(bio_err, | 1765 | BIO_printf(bio_err, |
| 1797 | "The matching entry has the following details\n"); | 1766 | "The matching entry has the following details\n"); |
| 1798 | if (rrow[DB_type][0] == 'E') | 1767 | if (rrow[DB_type][0] == 'E') |
| 1799 | p="Expired"; | 1768 | p = "Expired"; |
| 1800 | else if (rrow[DB_type][0] == 'R') | 1769 | else if (rrow[DB_type][0] == 'R') |
| 1801 | p="Revoked"; | 1770 | p = "Revoked"; |
| 1802 | else if (rrow[DB_type][0] == 'V') | 1771 | else if (rrow[DB_type][0] == 'V') |
| 1803 | p="Valid"; | 1772 | p = "Valid"; |
| 1804 | else | 1773 | else |
| 1805 | p="\ninvalid type, Data base error\n"; | 1774 | p = "\ninvalid type, Data base error\n"; |
| 1806 | BIO_printf(bio_err, "Type :%s\n", p); | 1775 | BIO_printf(bio_err, "Type :%s\n", p); |
| 1807 | if (rrow[DB_type][0] == 'R') { | 1776 | if (rrow[DB_type][0] == 'R') { |
| 1808 | p = rrow[DB_exp_date]; if (p == NULL) p="undef"; | 1777 | p = rrow[DB_exp_date]; |
| 1778 | if (p == NULL) | ||
| 1779 | p = "undef"; | ||
| 1809 | BIO_printf(bio_err, "Was revoked on:%s\n", p); | 1780 | BIO_printf(bio_err, "Was revoked on:%s\n", p); |
| 1810 | } | 1781 | } |
| 1811 | p = rrow[DB_exp_date]; if (p == NULL) p="undef"; | 1782 | p = rrow[DB_exp_date]; |
| 1783 | if (p == NULL) | ||
| 1784 | p = "undef"; | ||
| 1812 | BIO_printf(bio_err, "Expires on :%s\n", p); | 1785 | BIO_printf(bio_err, "Expires on :%s\n", p); |
| 1813 | p = rrow[DB_serial]; if (p == NULL) p="undef"; | 1786 | p = rrow[DB_serial]; |
| 1787 | if (p == NULL) | ||
| 1788 | p = "undef"; | ||
| 1814 | BIO_printf(bio_err, "Serial Number :%s\n", p); | 1789 | BIO_printf(bio_err, "Serial Number :%s\n", p); |
| 1815 | p = rrow[DB_file]; if (p == NULL) p="undef"; | 1790 | p = rrow[DB_file]; |
| 1791 | if (p == NULL) | ||
| 1792 | p = "undef"; | ||
| 1816 | BIO_printf(bio_err, "File name :%s\n", p); | 1793 | BIO_printf(bio_err, "File name :%s\n", p); |
| 1817 | p = rrow[DB_name]; if (p == NULL) p="undef"; | 1794 | p = rrow[DB_name]; |
| 1795 | if (p == NULL) | ||
| 1796 | p = "undef"; | ||
| 1818 | BIO_printf(bio_err, "Subject Name :%s\n", p); | 1797 | BIO_printf(bio_err, "Subject Name :%s\n", p); |
| 1819 | ok= -1; /* This is now a 'bad' error. */ | 1798 | ok = -1; /* This is now a 'bad' error. */ |
| 1820 | goto err; | 1799 | goto err; |
| 1821 | } | 1800 | } |
| 1822 | |||
| 1823 | /* We are now totally happy, lets make and sign the certificate */ | 1801 | /* We are now totally happy, lets make and sign the certificate */ |
| 1824 | if (verbose) | 1802 | if (verbose) |
| 1825 | BIO_printf(bio_err, "Everything appears to be ok, creating and signing the certificate\n"); | 1803 | BIO_printf(bio_err, "Everything appears to be ok, creating and signing the certificate\n"); |
| @@ -1869,10 +1847,12 @@ again2: | |||
| 1869 | if (ci->version == NULL) | 1847 | if (ci->version == NULL) |
| 1870 | if ((ci->version = ASN1_INTEGER_new()) == NULL) | 1848 | if ((ci->version = ASN1_INTEGER_new()) == NULL) |
| 1871 | goto err; | 1849 | goto err; |
| 1872 | ASN1_INTEGER_set(ci->version,2); /* version 3 certificate */ | 1850 | ASN1_INTEGER_set(ci->version, 2); /* version 3 certificate */ |
| 1873 | 1851 | ||
| 1874 | /* Free the current entries if any, there should not | 1852 | /* |
| 1875 | * be any I believe */ | 1853 | * Free the current entries if any, there should not be any I |
| 1854 | * believe | ||
| 1855 | */ | ||
| 1876 | if (ci->extensions != NULL) | 1856 | if (ci->extensions != NULL) |
| 1877 | sk_X509_EXTENSION_pop_free(ci->extensions, | 1857 | sk_X509_EXTENSION_pop_free(ci->extensions, |
| 1878 | X509_EXTENSION_free); | 1858 | X509_EXTENSION_free); |
| @@ -1914,12 +1894,10 @@ again2: | |||
| 1914 | ERR_print_errors(bio_err); | 1894 | ERR_print_errors(bio_err); |
| 1915 | goto err; | 1895 | goto err; |
| 1916 | } | 1896 | } |
| 1917 | |||
| 1918 | if (verbose) | 1897 | if (verbose) |
| 1919 | BIO_printf(bio_err, "Successfully added extensions from config\n"); | 1898 | BIO_printf(bio_err, "Successfully added extensions from config\n"); |
| 1920 | } | 1899 | } |
| 1921 | } | 1900 | } |
| 1922 | |||
| 1923 | /* Copy extensions from request (if any) */ | 1901 | /* Copy extensions from request (if any) */ |
| 1924 | 1902 | ||
| 1925 | if (!copy_extensions(ret, req, ext_copy)) { | 1903 | if (!copy_extensions(ret, req, ext_copy)) { |
| @@ -1927,20 +1905,20 @@ again2: | |||
| 1927 | ERR_print_errors(bio_err); | 1905 | ERR_print_errors(bio_err); |
| 1928 | goto err; | 1906 | goto err; |
| 1929 | } | 1907 | } |
| 1930 | |||
| 1931 | /* Set the right value for the noemailDN option */ | 1908 | /* Set the right value for the noemailDN option */ |
| 1932 | if (email_dn == 0 ) { | 1909 | if (email_dn == 0) { |
| 1933 | if (!X509_set_subject_name(ret, dn_subject)) | 1910 | if (!X509_set_subject_name(ret, dn_subject)) |
| 1934 | goto err; | 1911 | goto err; |
| 1935 | } | 1912 | } |
| 1936 | |||
| 1937 | if (!default_op) { | 1913 | if (!default_op) { |
| 1938 | BIO_printf(bio_err, "Certificate Details:\n"); | 1914 | BIO_printf(bio_err, "Certificate Details:\n"); |
| 1939 | /* Never print signature details because signature not present */ | 1915 | /* |
| 1916 | * Never print signature details because signature not | ||
| 1917 | * present | ||
| 1918 | */ | ||
| 1940 | certopt |= X509_FLAG_NO_SIGDUMP | X509_FLAG_NO_SIGNAME; | 1919 | certopt |= X509_FLAG_NO_SIGDUMP | X509_FLAG_NO_SIGNAME; |
| 1941 | X509_print_ex(bio_err, ret, nameopt, certopt); | 1920 | X509_print_ex(bio_err, ret, nameopt, certopt); |
| 1942 | } | 1921 | } |
| 1943 | |||
| 1944 | BIO_printf(bio_err, "Certificate is to be certified until "); | 1922 | BIO_printf(bio_err, "Certificate is to be certified until "); |
| 1945 | ASN1_TIME_print(bio_err, X509_get_notAfter(ret)); | 1923 | ASN1_TIME_print(bio_err, X509_get_notAfter(ret)); |
| 1946 | if (days) | 1924 | if (days) |
| @@ -1950,7 +1928,7 @@ again2: | |||
| 1950 | if (!batch) { | 1928 | if (!batch) { |
| 1951 | 1929 | ||
| 1952 | BIO_printf(bio_err, "Sign the certificate? [y/n]:"); | 1930 | BIO_printf(bio_err, "Sign the certificate? [y/n]:"); |
| 1953 | (void)BIO_flush(bio_err); | 1931 | (void) BIO_flush(bio_err); |
| 1954 | buf[0] = '\0'; | 1932 | buf[0] = '\0'; |
| 1955 | if (!fgets(buf, sizeof(buf) - 1, stdin)) { | 1933 | if (!fgets(buf, sizeof(buf) - 1, stdin)) { |
| 1956 | BIO_printf(bio_err, "CERTIFICATE WILL NOT BE CERTIFIED: I/O error\n"); | 1934 | BIO_printf(bio_err, "CERTIFICATE WILL NOT BE CERTIFIED: I/O error\n"); |
| @@ -1963,7 +1941,6 @@ again2: | |||
| 1963 | goto err; | 1941 | goto err; |
| 1964 | } | 1942 | } |
| 1965 | } | 1943 | } |
| 1966 | |||
| 1967 | pktmp = X509_get_pubkey(ret); | 1944 | pktmp = X509_get_pubkey(ret); |
| 1968 | if (EVP_PKEY_missing_parameters(pktmp) && | 1945 | if (EVP_PKEY_missing_parameters(pktmp) && |
| 1969 | !EVP_PKEY_missing_parameters(pkey)) | 1946 | !EVP_PKEY_missing_parameters(pkey)) |
| @@ -1974,17 +1951,17 @@ again2: | |||
| 1974 | goto err; | 1951 | goto err; |
| 1975 | 1952 | ||
| 1976 | /* We now just add it to the database */ | 1953 | /* We now just add it to the database */ |
| 1977 | row[DB_type] = (char *)malloc(2); | 1954 | row[DB_type] = (char *) malloc(2); |
| 1978 | 1955 | ||
| 1979 | tm = X509_get_notAfter(ret); | 1956 | tm = X509_get_notAfter(ret); |
| 1980 | row[DB_exp_date] = (char *)malloc(tm->length + 1); | 1957 | row[DB_exp_date] = (char *) malloc(tm->length + 1); |
| 1981 | memcpy(row[DB_exp_date], tm->data, tm->length); | 1958 | memcpy(row[DB_exp_date], tm->data, tm->length); |
| 1982 | row[DB_exp_date][tm->length] = '\0'; | 1959 | row[DB_exp_date][tm->length] = '\0'; |
| 1983 | 1960 | ||
| 1984 | row[DB_rev_date] = NULL; | 1961 | row[DB_rev_date] = NULL; |
| 1985 | 1962 | ||
| 1986 | /* row[DB_serial] done already */ | 1963 | /* row[DB_serial] done already */ |
| 1987 | row[DB_file] = (char *)malloc(8); | 1964 | row[DB_file] = (char *) malloc(8); |
| 1988 | row[DB_name] = X509_NAME_oneline(X509_get_subject_name(ret), NULL, 0); | 1965 | row[DB_name] = X509_NAME_oneline(X509_get_subject_name(ret), NULL, 0); |
| 1989 | 1966 | ||
| 1990 | if ((row[DB_type] == NULL) || (row[DB_exp_date] == NULL) || | 1967 | if ((row[DB_type] == NULL) || (row[DB_exp_date] == NULL) || |
| @@ -1996,11 +1973,10 @@ again2: | |||
| 1996 | row[DB_type][0] = 'V'; | 1973 | row[DB_type][0] = 'V'; |
| 1997 | row[DB_type][1] = '\0'; | 1974 | row[DB_type][1] = '\0'; |
| 1998 | 1975 | ||
| 1999 | if ((irow = (char **)malloc(sizeof(char *)*(DB_NUMBER + 1))) == NULL) { | 1976 | if ((irow = (char **) malloc(sizeof(char *) * (DB_NUMBER + 1))) == NULL) { |
| 2000 | BIO_printf(bio_err, "Memory allocation failure\n"); | 1977 | BIO_printf(bio_err, "Memory allocation failure\n"); |
| 2001 | goto err; | 1978 | goto err; |
| 2002 | } | 1979 | } |
| 2003 | |||
| 2004 | for (i = 0; i < DB_NUMBER; i++) { | 1980 | for (i = 0; i < DB_NUMBER; i++) { |
| 2005 | irow[i] = row[i]; | 1981 | irow[i] = row[i]; |
| 2006 | row[i] = NULL; | 1982 | row[i] = NULL; |
| @@ -2036,10 +2012,10 @@ err: | |||
| 2036 | } | 2012 | } |
| 2037 | 2013 | ||
| 2038 | static void | 2014 | static void |
| 2039 | write_new_certificate(BIO *bp, X509 *x, int output_der, int notext) | 2015 | write_new_certificate(BIO * bp, X509 * x, int output_der, int notext) |
| 2040 | { | 2016 | { |
| 2041 | if (output_der) { | 2017 | if (output_der) { |
| 2042 | (void)i2d_X509_bio(bp, x); | 2018 | (void) i2d_X509_bio(bp, x); |
| 2043 | return; | 2019 | return; |
| 2044 | } | 2020 | } |
| 2045 | #if 0 | 2021 | #if 0 |
| @@ -2060,15 +2036,15 @@ write_new_certificate(BIO *bp, X509 *x, int output_der, int notext) | |||
| 2060 | } | 2036 | } |
| 2061 | 2037 | ||
| 2062 | static int | 2038 | static int |
| 2063 | certify_spkac(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509, | 2039 | certify_spkac(X509 ** xret, char *infile, EVP_PKEY * pkey, X509 * x509, |
| 2064 | const EVP_MD *dgst, STACK_OF(OPENSSL_STRING) *sigopts, | 2040 | const EVP_MD * dgst, STACK_OF(OPENSSL_STRING) * sigopts, |
| 2065 | STACK_OF(CONF_VALUE) *policy, CA_DB *db, BIGNUM *serial, char *subj, | 2041 | STACK_OF(CONF_VALUE) * policy, CA_DB * db, BIGNUM * serial, char *subj, |
| 2066 | unsigned long chtype, int multirdn, int email_dn, char *startdate, | 2042 | unsigned long chtype, int multirdn, int email_dn, char *startdate, |
| 2067 | char *enddate, long days, char *ext_sect, CONF *lconf, int verbose, | 2043 | char *enddate, long days, char *ext_sect, CONF * lconf, int verbose, |
| 2068 | unsigned long certopt, unsigned long nameopt, int default_op, int ext_copy) | 2044 | unsigned long certopt, unsigned long nameopt, int default_op, int ext_copy) |
| 2069 | { | 2045 | { |
| 2070 | STACK_OF(CONF_VALUE) *sk = NULL; | 2046 | STACK_OF(CONF_VALUE) * sk = NULL; |
| 2071 | LHASH_OF(CONF_VALUE) *parms = NULL; | 2047 | LHASH_OF(CONF_VALUE) * parms = NULL; |
| 2072 | X509_REQ *req = NULL; | 2048 | X509_REQ *req = NULL; |
| 2073 | CONF_VALUE *cv = NULL; | 2049 | CONF_VALUE *cv = NULL; |
| 2074 | NETSCAPE_SPKI *spki = NULL; | 2050 | NETSCAPE_SPKI *spki = NULL; |
| @@ -2092,14 +2068,12 @@ certify_spkac(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509, | |||
| 2092 | ERR_print_errors(bio_err); | 2068 | ERR_print_errors(bio_err); |
| 2093 | goto err; | 2069 | goto err; |
| 2094 | } | 2070 | } |
| 2095 | |||
| 2096 | sk = CONF_get_section(parms, "default"); | 2071 | sk = CONF_get_section(parms, "default"); |
| 2097 | if (sk_CONF_VALUE_num(sk) == 0) { | 2072 | if (sk_CONF_VALUE_num(sk) == 0) { |
| 2098 | BIO_printf(bio_err, "no name/value pairs found in %s\n", infile); | 2073 | BIO_printf(bio_err, "no name/value pairs found in %s\n", infile); |
| 2099 | CONF_free(parms); | 2074 | CONF_free(parms); |
| 2100 | goto err; | 2075 | goto err; |
| 2101 | } | 2076 | } |
| 2102 | |||
| 2103 | /* | 2077 | /* |
| 2104 | * Now create a dummy X509 request structure. We don't actually | 2078 | * Now create a dummy X509 request structure. We don't actually |
| 2105 | * have an X509 request, but we have many of the components | 2079 | * have an X509 request, but we have many of the components |
| @@ -2112,21 +2086,21 @@ certify_spkac(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509, | |||
| 2112 | ERR_print_errors(bio_err); | 2086 | ERR_print_errors(bio_err); |
| 2113 | goto err; | 2087 | goto err; |
| 2114 | } | 2088 | } |
| 2115 | |||
| 2116 | /* | 2089 | /* |
| 2117 | * Build up the subject name set. | 2090 | * Build up the subject name set. |
| 2118 | */ | 2091 | */ |
| 2119 | ri = req->req_info; | 2092 | ri = req->req_info; |
| 2120 | n = ri->subject; | 2093 | n = ri->subject; |
| 2121 | 2094 | ||
| 2122 | for (i = 0; ; i++) { | 2095 | for (i = 0;; i++) { |
| 2123 | if (sk_CONF_VALUE_num(sk) <= i) | 2096 | if (sk_CONF_VALUE_num(sk) <= i) |
| 2124 | break; | 2097 | break; |
| 2125 | 2098 | ||
| 2126 | cv = sk_CONF_VALUE_value(sk, i); | 2099 | cv = sk_CONF_VALUE_value(sk, i); |
| 2127 | type = cv->name; | 2100 | type = cv->name; |
| 2128 | /* Skip past any leading X. X: X, etc to allow for | 2101 | /* |
| 2129 | * multiple instances | 2102 | * Skip past any leading X. X: X, etc to allow for multiple |
| 2103 | * instances | ||
| 2130 | */ | 2104 | */ |
| 2131 | for (buf = cv->name; *buf; buf++) { | 2105 | for (buf = cv->name; *buf; buf++) { |
| 2132 | if ((*buf == ':') || (*buf == ',') || (*buf == '.')) { | 2106 | if ((*buf == ':') || (*buf == ',') || (*buf == '.')) { |
| @@ -2149,9 +2123,8 @@ certify_spkac(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509, | |||
| 2149 | } | 2123 | } |
| 2150 | continue; | 2124 | continue; |
| 2151 | } | 2125 | } |
| 2152 | |||
| 2153 | if (!X509_NAME_add_entry_by_NID(n, nid, chtype, | 2126 | if (!X509_NAME_add_entry_by_NID(n, nid, chtype, |
| 2154 | (unsigned char *)buf, -1, -1, 0)) | 2127 | (unsigned char *) buf, -1, -1, 0)) |
| 2155 | goto err; | 2128 | goto err; |
| 2156 | } | 2129 | } |
| 2157 | if (spki == NULL) { | 2130 | if (spki == NULL) { |
| @@ -2159,7 +2132,6 @@ certify_spkac(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509, | |||
| 2159 | infile); | 2132 | infile); |
| 2160 | goto err; | 2133 | goto err; |
| 2161 | } | 2134 | } |
| 2162 | |||
| 2163 | /* | 2135 | /* |
| 2164 | * Now extract the key from the SPKI structure. | 2136 | * Now extract the key from the SPKI structure. |
| 2165 | */ | 2137 | */ |
| @@ -2170,7 +2142,6 @@ certify_spkac(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509, | |||
| 2170 | BIO_printf(bio_err, "error unpacking SPKAC public key\n"); | 2142 | BIO_printf(bio_err, "error unpacking SPKAC public key\n"); |
| 2171 | goto err; | 2143 | goto err; |
| 2172 | } | 2144 | } |
| 2173 | |||
| 2174 | j = NETSCAPE_SPKI_verify(spki, pktmp); | 2145 | j = NETSCAPE_SPKI_verify(spki, pktmp); |
| 2175 | if (j <= 0) { | 2146 | if (j <= 0) { |
| 2176 | BIO_printf(bio_err, "signature verification failed on SPKAC public key\n"); | 2147 | BIO_printf(bio_err, "signature verification failed on SPKAC public key\n"); |
| @@ -2203,7 +2174,7 @@ check_time_format(const char *str) | |||
| 2203 | } | 2174 | } |
| 2204 | 2175 | ||
| 2205 | static int | 2176 | static int |
| 2206 | do_revoke(X509 *x509, CA_DB *db, int type, char *value) | 2177 | do_revoke(X509 * x509, CA_DB * db, int type, char *value) |
| 2207 | { | 2178 | { |
| 2208 | ASN1_UTCTIME *tm = NULL; | 2179 | ASN1_UTCTIME *tm = NULL; |
| 2209 | char *row[DB_NUMBER], **rrow, **irow; | 2180 | char *row[DB_NUMBER], **rrow, **irow; |
| @@ -2226,25 +2197,26 @@ do_revoke(X509 *x509, CA_DB *db, int type, char *value) | |||
| 2226 | BIO_printf(bio_err, "Memory allocation failure\n"); | 2197 | BIO_printf(bio_err, "Memory allocation failure\n"); |
| 2227 | goto err; | 2198 | goto err; |
| 2228 | } | 2199 | } |
| 2229 | /* We have to lookup by serial number because name lookup | 2200 | /* |
| 2230 | * skips revoked certs | 2201 | * We have to lookup by serial number because name lookup skips |
| 2231 | */ | 2202 | * revoked certs |
| 2203 | */ | ||
| 2232 | rrow = TXT_DB_get_by_index(db->db, DB_serial, row); | 2204 | rrow = TXT_DB_get_by_index(db->db, DB_serial, row); |
| 2233 | if (rrow == NULL) { | 2205 | if (rrow == NULL) { |
| 2234 | BIO_printf(bio_err, "Adding Entry with serial number %s to DB for %s\n", row[DB_serial], row[DB_name]); | 2206 | BIO_printf(bio_err, "Adding Entry with serial number %s to DB for %s\n", row[DB_serial], row[DB_name]); |
| 2235 | 2207 | ||
| 2236 | /* We now just add it to the database */ | 2208 | /* We now just add it to the database */ |
| 2237 | row[DB_type] = (char *)malloc(2); | 2209 | row[DB_type] = (char *) malloc(2); |
| 2238 | 2210 | ||
| 2239 | tm = X509_get_notAfter(x509); | 2211 | tm = X509_get_notAfter(x509); |
| 2240 | row[DB_exp_date] = (char *)malloc(tm->length + 1); | 2212 | row[DB_exp_date] = (char *) malloc(tm->length + 1); |
| 2241 | memcpy(row[DB_exp_date], tm->data, tm->length); | 2213 | memcpy(row[DB_exp_date], tm->data, tm->length); |
| 2242 | row[DB_exp_date][tm->length] = '\0'; | 2214 | row[DB_exp_date][tm->length] = '\0'; |
| 2243 | 2215 | ||
| 2244 | row[DB_rev_date] = NULL; | 2216 | row[DB_rev_date] = NULL; |
| 2245 | 2217 | ||
| 2246 | /* row[DB_serial] done already */ | 2218 | /* row[DB_serial] done already */ |
| 2247 | row[DB_file] = (char *)malloc(8); | 2219 | row[DB_file] = (char *) malloc(8); |
| 2248 | 2220 | ||
| 2249 | /* row[DB_name] done already */ | 2221 | /* row[DB_name] done already */ |
| 2250 | 2222 | ||
| @@ -2257,11 +2229,10 @@ do_revoke(X509 *x509, CA_DB *db, int type, char *value) | |||
| 2257 | row[DB_type][0] = 'V'; | 2229 | row[DB_type][0] = 'V'; |
| 2258 | row[DB_type][1] = '\0'; | 2230 | row[DB_type][1] = '\0'; |
| 2259 | 2231 | ||
| 2260 | if ((irow = (char **)malloc(sizeof(char *)*(DB_NUMBER + 1))) == NULL) { | 2232 | if ((irow = (char **) malloc(sizeof(char *) * (DB_NUMBER + 1))) == NULL) { |
| 2261 | BIO_printf(bio_err, "Memory allocation failure\n"); | 2233 | BIO_printf(bio_err, "Memory allocation failure\n"); |
| 2262 | goto err; | 2234 | goto err; |
| 2263 | } | 2235 | } |
| 2264 | |||
| 2265 | for (i = 0; i < DB_NUMBER; i++) { | 2236 | for (i = 0; i < DB_NUMBER; i++) { |
| 2266 | irow[i] = row[i]; | 2237 | irow[i] = row[i]; |
| 2267 | row[i] = NULL; | 2238 | row[i] = NULL; |
| @@ -2273,7 +2244,6 @@ do_revoke(X509 *x509, CA_DB *db, int type, char *value) | |||
| 2273 | BIO_printf(bio_err, "TXT_DB error number %ld\n", db->db->error); | 2244 | BIO_printf(bio_err, "TXT_DB error number %ld\n", db->db->error); |
| 2274 | goto err; | 2245 | goto err; |
| 2275 | } | 2246 | } |
| 2276 | |||
| 2277 | /* Revoke Certificate */ | 2247 | /* Revoke Certificate */ |
| 2278 | ok = do_revoke(x509, db, type, value); | 2248 | ok = do_revoke(x509, db, type, value); |
| 2279 | 2249 | ||
| @@ -2283,7 +2253,7 @@ do_revoke(X509 *x509, CA_DB *db, int type, char *value) | |||
| 2283 | BIO_printf(bio_err, "ERROR:name does not match %s\n", | 2253 | BIO_printf(bio_err, "ERROR:name does not match %s\n", |
| 2284 | row[DB_name]); | 2254 | row[DB_name]); |
| 2285 | goto err; | 2255 | goto err; |
| 2286 | } else if (rrow[DB_type][0]=='R') { | 2256 | } else if (rrow[DB_type][0] == 'R') { |
| 2287 | BIO_printf(bio_err, "ERROR:Already revoked, serial number %s\n", | 2257 | BIO_printf(bio_err, "ERROR:Already revoked, serial number %s\n", |
| 2288 | row[DB_serial]); | 2258 | row[DB_serial]); |
| 2289 | goto err; | 2259 | goto err; |
| @@ -2308,7 +2278,7 @@ err: | |||
| 2308 | } | 2278 | } |
| 2309 | 2279 | ||
| 2310 | static int | 2280 | static int |
| 2311 | get_certificate_status(const char *serial, CA_DB *db) | 2281 | get_certificate_status(const char *serial, CA_DB * db) |
| 2312 | { | 2282 | { |
| 2313 | char *row[DB_NUMBER], **rrow; | 2283 | char *row[DB_NUMBER], **rrow; |
| 2314 | int ok = -1, i; | 2284 | int ok = -1, i; |
| @@ -2323,13 +2293,12 @@ get_certificate_status(const char *serial, CA_DB *db) | |||
| 2323 | BIO_printf(bio_err, "Malloc failure\n"); | 2293 | BIO_printf(bio_err, "Malloc failure\n"); |
| 2324 | goto err; | 2294 | goto err; |
| 2325 | } | 2295 | } |
| 2326 | |||
| 2327 | if (strlen(serial) % 2) { | 2296 | if (strlen(serial) % 2) { |
| 2328 | /* Set the first char to 0 */; | 2297 | /* Set the first char to 0 */ ; |
| 2329 | row[DB_serial][0]='0'; | 2298 | row[DB_serial][0] = '0'; |
| 2330 | 2299 | ||
| 2331 | /* Copy String from serial to row[DB_serial] */ | 2300 | /* Copy String from serial to row[DB_serial] */ |
| 2332 | memcpy(row[DB_serial]+1, serial, strlen(serial)); | 2301 | memcpy(row[DB_serial] + 1, serial, strlen(serial)); |
| 2333 | row[DB_serial][strlen(serial) + 1] = '\0'; | 2302 | row[DB_serial][strlen(serial) + 1] = '\0'; |
| 2334 | } else { | 2303 | } else { |
| 2335 | /* Copy String from serial to row[DB_serial] */ | 2304 | /* Copy String from serial to row[DB_serial] */ |
| @@ -2339,7 +2308,7 @@ get_certificate_status(const char *serial, CA_DB *db) | |||
| 2339 | 2308 | ||
| 2340 | /* Make it Upper Case */ | 2309 | /* Make it Upper Case */ |
| 2341 | for (i = 0; row[DB_serial][i] != '\0'; i++) | 2310 | for (i = 0; row[DB_serial][i] != '\0'; i++) |
| 2342 | row[DB_serial][i] = toupper((unsigned char)row[DB_serial][i]); | 2311 | row[DB_serial][i] = toupper((unsigned char) row[DB_serial][i]); |
| 2343 | 2312 | ||
| 2344 | 2313 | ||
| 2345 | ok = 1; | 2314 | ok = 1; |
| @@ -2351,19 +2320,19 @@ get_certificate_status(const char *serial, CA_DB *db) | |||
| 2351 | row[DB_serial]); | 2320 | row[DB_serial]); |
| 2352 | ok = -1; | 2321 | ok = -1; |
| 2353 | goto err; | 2322 | goto err; |
| 2354 | } else if (rrow[DB_type][0]=='V') { | 2323 | } else if (rrow[DB_type][0] == 'V') { |
| 2355 | BIO_printf(bio_err, "%s=Valid (%c)\n", | 2324 | BIO_printf(bio_err, "%s=Valid (%c)\n", |
| 2356 | row[DB_serial], rrow[DB_type][0]); | 2325 | row[DB_serial], rrow[DB_type][0]); |
| 2357 | goto err; | 2326 | goto err; |
| 2358 | } else if (rrow[DB_type][0]=='R') { | 2327 | } else if (rrow[DB_type][0] == 'R') { |
| 2359 | BIO_printf(bio_err, "%s=Revoked (%c)\n", | 2328 | BIO_printf(bio_err, "%s=Revoked (%c)\n", |
| 2360 | row[DB_serial], rrow[DB_type][0]); | 2329 | row[DB_serial], rrow[DB_type][0]); |
| 2361 | goto err; | 2330 | goto err; |
| 2362 | } else if (rrow[DB_type][0]=='E') { | 2331 | } else if (rrow[DB_type][0] == 'E') { |
| 2363 | BIO_printf(bio_err, "%s=Expired (%c)\n", | 2332 | BIO_printf(bio_err, "%s=Expired (%c)\n", |
| 2364 | row[DB_serial], rrow[DB_type][0]); | 2333 | row[DB_serial], rrow[DB_type][0]); |
| 2365 | goto err; | 2334 | goto err; |
| 2366 | } else if (rrow[DB_type][0]=='S') { | 2335 | } else if (rrow[DB_type][0] == 'S') { |
| 2367 | BIO_printf(bio_err, "%s=Suspended (%c)\n", | 2336 | BIO_printf(bio_err, "%s=Suspended (%c)\n", |
| 2368 | row[DB_serial], rrow[DB_type][0]); | 2337 | row[DB_serial], rrow[DB_type][0]); |
| 2369 | goto err; | 2338 | goto err; |
| @@ -2380,11 +2349,12 @@ err: | |||
| 2380 | return (ok); | 2349 | return (ok); |
| 2381 | } | 2350 | } |
| 2382 | 2351 | ||
| 2383 | static int do_updatedb (CA_DB *db) | 2352 | static int |
| 2353 | do_updatedb(CA_DB * db) | ||
| 2384 | { | 2354 | { |
| 2385 | ASN1_UTCTIME *a_tm = NULL; | 2355 | ASN1_UTCTIME *a_tm = NULL; |
| 2386 | int i, cnt = 0; | 2356 | int i, cnt = 0; |
| 2387 | int db_y2k, a_y2k; /* flags = 1 if y >= 2000 */ | 2357 | int db_y2k, a_y2k; /* flags = 1 if y >= 2000 */ |
| 2388 | char **rrow, *a_tm_s; | 2358 | char **rrow, *a_tm_s; |
| 2389 | 2359 | ||
| 2390 | a_tm = ASN1_UTCTIME_new(); | 2360 | a_tm = ASN1_UTCTIME_new(); |
| @@ -2396,7 +2366,6 @@ static int do_updatedb (CA_DB *db) | |||
| 2396 | cnt = -1; | 2366 | cnt = -1; |
| 2397 | goto err; | 2367 | goto err; |
| 2398 | } | 2368 | } |
| 2399 | |||
| 2400 | memcpy(a_tm_s, a_tm->data, a_tm->length); | 2369 | memcpy(a_tm_s, a_tm->data, a_tm->length); |
| 2401 | a_tm_s[a_tm->length] = '\0'; | 2370 | a_tm_s[a_tm->length] = '\0'; |
| 2402 | 2371 | ||
| @@ -2433,7 +2402,6 @@ static int do_updatedb (CA_DB *db) | |||
| 2433 | BIO_printf(bio_err, "%s=Expired\n", | 2402 | BIO_printf(bio_err, "%s=Expired\n", |
| 2434 | rrow[DB_serial]); | 2403 | rrow[DB_serial]); |
| 2435 | } | 2404 | } |
| 2436 | |||
| 2437 | } | 2405 | } |
| 2438 | } | 2406 | } |
| 2439 | 2407 | ||
| @@ -2505,7 +2473,6 @@ make_revocation_str(int rev_type, char *rev_arg) | |||
| 2505 | BIO_printf(bio_err, "Invalid object identifier %s\n", rev_arg); | 2473 | BIO_printf(bio_err, "Invalid object identifier %s\n", rev_arg); |
| 2506 | return NULL; | 2474 | return NULL; |
| 2507 | } | 2475 | } |
| 2508 | |||
| 2509 | reason = "holdInstruction"; | 2476 | reason = "holdInstruction"; |
| 2510 | other = rev_arg; | 2477 | other = rev_arg; |
| 2511 | break; | 2478 | break; |
| @@ -2532,17 +2499,19 @@ make_revocation_str(int rev_type, char *rev_arg) | |||
| 2532 | 2499 | ||
| 2533 | i = revtm->length + 1; | 2500 | i = revtm->length + 1; |
| 2534 | 2501 | ||
| 2535 | if (reason) i += strlen(reason) | 2502 | if (reason) |
| 2536 | + 1; | 2503 | i += strlen(reason) |
| 2537 | if (other) i += strlen(other) | 2504 | + 1; |
| 2538 | + 1; | 2505 | if (other) |
| 2506 | i += strlen(other) | ||
| 2507 | + 1; | ||
| 2539 | 2508 | ||
| 2540 | str = malloc(i); | 2509 | str = malloc(i); |
| 2541 | 2510 | ||
| 2542 | if (!str) | 2511 | if (!str) |
| 2543 | return NULL; | 2512 | return NULL; |
| 2544 | 2513 | ||
| 2545 | BUF_strlcpy(str, (char *)revtm->data, i); | 2514 | BUF_strlcpy(str, (char *) revtm->data, i); |
| 2546 | if (reason) { | 2515 | if (reason) { |
| 2547 | BUF_strlcat(str, ",", i); | 2516 | BUF_strlcat(str, ",", i); |
| 2548 | BUF_strlcat(str, reason, i); | 2517 | BUF_strlcat(str, reason, i); |
| @@ -2563,7 +2532,7 @@ make_revocation_str(int rev_type, char *rev_arg) | |||
| 2563 | */ | 2532 | */ |
| 2564 | 2533 | ||
| 2565 | int | 2534 | int |
| 2566 | make_revoked(X509_REVOKED *rev, const char *str) | 2535 | make_revoked(X509_REVOKED * rev, const char *str) |
| 2567 | { | 2536 | { |
| 2568 | char *tmp = NULL; | 2537 | char *tmp = NULL; |
| 2569 | int reason_code = -1; | 2538 | int reason_code = -1; |
| @@ -2589,7 +2558,6 @@ make_revoked(X509_REVOKED *rev, const char *str) | |||
| 2589 | if (!X509_REVOKED_add1_ext_i2d(rev, NID_crl_reason, rtmp, 0, 0)) | 2558 | if (!X509_REVOKED_add1_ext_i2d(rev, NID_crl_reason, rtmp, 0, 0)) |
| 2590 | goto err; | 2559 | goto err; |
| 2591 | } | 2560 | } |
| 2592 | |||
| 2593 | if (rev && comp_time) { | 2561 | if (rev && comp_time) { |
| 2594 | if (!X509_REVOKED_add1_ext_i2d(rev, NID_invalidity_date, comp_time, 0, 0)) | 2562 | if (!X509_REVOKED_add1_ext_i2d(rev, NID_invalidity_date, comp_time, 0, 0)) |
| 2595 | goto err; | 2563 | goto err; |
| @@ -2598,7 +2566,6 @@ make_revoked(X509_REVOKED *rev, const char *str) | |||
| 2598 | if (!X509_REVOKED_add1_ext_i2d(rev, NID_hold_instruction_code, hold, 0, 0)) | 2566 | if (!X509_REVOKED_add1_ext_i2d(rev, NID_hold_instruction_code, hold, 0, 0)) |
| 2599 | goto err; | 2567 | goto err; |
| 2600 | } | 2568 | } |
| 2601 | |||
| 2602 | if (reason_code != OCSP_REVOKED_STATUS_NOSTATUS) | 2569 | if (reason_code != OCSP_REVOKED_STATUS_NOSTATUS) |
| 2603 | ret = 2; | 2570 | ret = 2; |
| 2604 | else | 2571 | else |
| @@ -2617,7 +2584,7 @@ err: | |||
| 2617 | } | 2584 | } |
| 2618 | 2585 | ||
| 2619 | int | 2586 | int |
| 2620 | old_entry_print(BIO *bp, ASN1_OBJECT *obj, ASN1_STRING *str) | 2587 | old_entry_print(BIO * bp, ASN1_OBJECT * obj, ASN1_STRING * str) |
| 2621 | { | 2588 | { |
| 2622 | char buf[25], *pbuf, *p; | 2589 | char buf[25], *pbuf, *p; |
| 2623 | int j; | 2590 | int j; |
| @@ -2640,16 +2607,16 @@ old_entry_print(BIO *bp, ASN1_OBJECT *obj, ASN1_STRING *str) | |||
| 2640 | else | 2607 | else |
| 2641 | BIO_printf(bp, "ASN.1 %2d:'", str->type); | 2608 | BIO_printf(bp, "ASN.1 %2d:'", str->type); |
| 2642 | 2609 | ||
| 2643 | p = (char *)str->data; | 2610 | p = (char *) str->data; |
| 2644 | for (j = str->length; j > 0; j--) { | 2611 | for (j = str->length; j > 0; j--) { |
| 2645 | if ((*p >= ' ') && (*p <= '~')) | 2612 | if ((*p >= ' ') && (*p <= '~')) |
| 2646 | BIO_printf(bp, "%c", *p); | 2613 | BIO_printf(bp, "%c", *p); |
| 2647 | else if (*p & 0x80) | 2614 | else if (*p & 0x80) |
| 2648 | BIO_printf(bp, "\\0x%02X", *p); | 2615 | BIO_printf(bp, "\\0x%02X", *p); |
| 2649 | else if ((unsigned char)*p == 0xf7) | 2616 | else if ((unsigned char) *p == 0xf7) |
| 2650 | BIO_printf(bp, "^?"); | 2617 | BIO_printf(bp, "^?"); |
| 2651 | else | 2618 | else |
| 2652 | BIO_printf(bp, "^%c", *p+'@'); | 2619 | BIO_printf(bp, "^%c", *p + '@'); |
| 2653 | p++; | 2620 | p++; |
| 2654 | } | 2621 | } |
| 2655 | BIO_printf(bp, "'\n"); | 2622 | BIO_printf(bp, "'\n"); |
| @@ -2657,8 +2624,8 @@ old_entry_print(BIO *bp, ASN1_OBJECT *obj, ASN1_STRING *str) | |||
| 2657 | } | 2624 | } |
| 2658 | 2625 | ||
| 2659 | int | 2626 | int |
| 2660 | unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold, | 2627 | unpack_revinfo(ASN1_TIME ** prevtm, int *preason, ASN1_OBJECT ** phold, |
| 2661 | ASN1_GENERALIZEDTIME **pinvtm, const char *str) | 2628 | ASN1_GENERALIZEDTIME ** pinvtm, const char *str) |
| 2662 | { | 2629 | { |
| 2663 | char *tmp = NULL; | 2630 | char *tmp = NULL; |
| 2664 | char *rtime_str, *reason_str = NULL, *arg_str = NULL, *p; | 2631 | char *rtime_str, *reason_str = NULL, *arg_str = NULL, *p; |
| @@ -2683,7 +2650,6 @@ unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold, | |||
| 2683 | arg_str = p + 1; | 2650 | arg_str = p + 1; |
| 2684 | } | 2651 | } |
| 2685 | } | 2652 | } |
| 2686 | |||
| 2687 | if (prevtm) { | 2653 | if (prevtm) { |
| 2688 | *prevtm = ASN1_UTCTIME_new(); | 2654 | *prevtm = ASN1_UTCTIME_new(); |
| 2689 | if (!ASN1_UTCTIME_set_string(*prevtm, rtime_str)) { | 2655 | if (!ASN1_UTCTIME_set_string(*prevtm, rtime_str)) { |
| @@ -2702,11 +2668,9 @@ unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold, | |||
| 2702 | BIO_printf(bio_err, "invalid reason code %s\n", reason_str); | 2668 | BIO_printf(bio_err, "invalid reason code %s\n", reason_str); |
| 2703 | goto err; | 2669 | goto err; |
| 2704 | } | 2670 | } |
| 2705 | |||
| 2706 | if (reason_code == 7) | 2671 | if (reason_code == 7) |
| 2707 | reason_code = OCSP_REVOKED_STATUS_REMOVEFROMCRL; | 2672 | reason_code = OCSP_REVOKED_STATUS_REMOVEFROMCRL; |
| 2708 | else if (reason_code == 8) /* Hold instruction */ | 2673 | else if (reason_code == 8) { /* Hold instruction */ |
| 2709 | { | ||
| 2710 | if (!arg_str) { | 2674 | if (!arg_str) { |
| 2711 | BIO_printf(bio_err, "missing hold instruction\n"); | 2675 | BIO_printf(bio_err, "missing hold instruction\n"); |
| 2712 | goto err; | 2676 | goto err; |
| @@ -2736,7 +2700,6 @@ unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold, | |||
| 2736 | reason_code = OCSP_REVOKED_STATUS_CACOMPROMISE; | 2700 | reason_code = OCSP_REVOKED_STATUS_CACOMPROMISE; |
| 2737 | } | 2701 | } |
| 2738 | } | 2702 | } |
| 2739 | |||
| 2740 | if (preason) | 2703 | if (preason) |
| 2741 | *preason = reason_code; | 2704 | *preason = reason_code; |
| 2742 | if (pinvtm) | 2705 | if (pinvtm) |
diff --git a/src/lib/libssl/src/apps/ciphers.c b/src/lib/libssl/src/apps/ciphers.c index 1586dc5383..8e6427582c 100644 --- a/src/lib/libssl/src/apps/ciphers.c +++ b/src/lib/libssl/src/apps/ciphers.c | |||
| @@ -93,7 +93,7 @@ MAIN(int argc, char **argv) | |||
| 93 | SSL *ssl = NULL; | 93 | SSL *ssl = NULL; |
| 94 | char *ciphers = NULL; | 94 | char *ciphers = NULL; |
| 95 | const SSL_METHOD *meth = NULL; | 95 | const SSL_METHOD *meth = NULL; |
| 96 | STACK_OF(SSL_CIPHER) *sk; | 96 | STACK_OF(SSL_CIPHER) * sk; |
| 97 | char buf[512]; | 97 | char buf[512]; |
| 98 | BIO *STDout = NULL; | 98 | BIO *STDout = NULL; |
| 99 | 99 | ||
| @@ -123,7 +123,7 @@ MAIN(int argc, char **argv) | |||
| 123 | badops = 1; | 123 | badops = 1; |
| 124 | break; | 124 | break; |
| 125 | } else { | 125 | } else { |
| 126 | ciphers= *argv; | 126 | ciphers = *argv; |
| 127 | } | 127 | } |
| 128 | argc--; | 128 | argc--; |
| 129 | argv++; | 129 | argv++; |
| @@ -134,7 +134,6 @@ MAIN(int argc, char **argv) | |||
| 134 | BIO_printf(bio_err, "%s", *pp); | 134 | BIO_printf(bio_err, "%s", *pp); |
| 135 | goto end; | 135 | goto end; |
| 136 | } | 136 | } |
| 137 | |||
| 138 | OpenSSL_add_ssl_algorithms(); | 137 | OpenSSL_add_ssl_algorithms(); |
| 139 | 138 | ||
| 140 | ctx = SSL_CTX_new(meth); | 139 | ctx = SSL_CTX_new(meth); |
| @@ -152,7 +151,7 @@ MAIN(int argc, char **argv) | |||
| 152 | 151 | ||
| 153 | 152 | ||
| 154 | if (!verbose) { | 153 | if (!verbose) { |
| 155 | for (i = 0; ; i++) { | 154 | for (i = 0;; i++) { |
| 156 | p = SSL_get_cipher_list(ssl, i); | 155 | p = SSL_get_cipher_list(ssl, i); |
| 157 | if (p == NULL) | 156 | if (p == NULL) |
| 158 | break; | 157 | break; |
| @@ -161,9 +160,7 @@ MAIN(int argc, char **argv) | |||
| 161 | BIO_printf(STDout, "%s", p); | 160 | BIO_printf(STDout, "%s", p); |
| 162 | } | 161 | } |
| 163 | BIO_printf(STDout, "\n"); | 162 | BIO_printf(STDout, "\n"); |
| 164 | } | 163 | } else { /* verbose */ |
| 165 | else /* verbose */ | ||
| 166 | { | ||
| 167 | sk = SSL_get_ciphers(ssl); | 164 | sk = SSL_get_ciphers(ssl); |
| 168 | 165 | ||
| 169 | for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) { | 166 | for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) { |
| @@ -173,19 +170,18 @@ MAIN(int argc, char **argv) | |||
| 173 | 170 | ||
| 174 | if (Verbose) { | 171 | if (Verbose) { |
| 175 | unsigned long id = SSL_CIPHER_get_id(c); | 172 | unsigned long id = SSL_CIPHER_get_id(c); |
| 176 | int id0 = (int)(id >> 24); | 173 | int id0 = (int) (id >> 24); |
| 177 | int id1 = (int)((id >> 16) & 0xffL); | 174 | int id1 = (int) ((id >> 16) & 0xffL); |
| 178 | int id2 = (int)((id >> 8) & 0xffL); | 175 | int id2 = (int) ((id >> 8) & 0xffL); |
| 179 | int id3 = (int)(id & 0xffL); | 176 | int id3 = (int) (id & 0xffL); |
| 180 | 177 | ||
| 181 | if ((id & 0xff000000L) == 0x02000000L) | 178 | if ((id & 0xff000000L) == 0x02000000L) |
| 182 | BIO_printf(STDout, " 0x%02X,0x%02X,0x%02X - ", id1, id2, id3); /* SSL2 cipher */ | 179 | BIO_printf(STDout, " 0x%02X,0x%02X,0x%02X - ", id1, id2, id3); /* SSL2 cipher */ |
| 183 | else if ((id & 0xff000000L) == 0x03000000L) | 180 | else if ((id & 0xff000000L) == 0x03000000L) |
| 184 | BIO_printf(STDout, " 0x%02X,0x%02X - ", id2, id3); /* SSL3 cipher */ | 181 | BIO_printf(STDout, " 0x%02X,0x%02X - ", id2, id3); /* SSL3 cipher */ |
| 185 | else | 182 | else |
| 186 | BIO_printf(STDout, "0x%02X,0x%02X,0x%02X,0x%02X - ", id0, id1, id2, id3); /* whatever */ | 183 | BIO_printf(STDout, "0x%02X,0x%02X,0x%02X,0x%02X - ", id0, id1, id2, id3); /* whatever */ |
| 187 | } | 184 | } |
| 188 | |||
| 189 | BIO_puts(STDout, SSL_CIPHER_description(c, buf, sizeof buf)); | 185 | BIO_puts(STDout, SSL_CIPHER_description(c, buf, sizeof buf)); |
| 190 | } | 186 | } |
| 191 | } | 187 | } |
| @@ -204,5 +200,5 @@ end: | |||
| 204 | if (STDout != NULL) | 200 | if (STDout != NULL) |
| 205 | BIO_free_all(STDout); | 201 | BIO_free_all(STDout); |
| 206 | apps_shutdown(); | 202 | apps_shutdown(); |
| 207 | return(ret); | 203 | return (ret); |
| 208 | } | 204 | } |
diff --git a/src/lib/libssl/src/apps/cms.c b/src/lib/libssl/src/apps/cms.c index eda3ccbdf0..7948e4c09f 100644 --- a/src/lib/libssl/src/apps/cms.c +++ b/src/lib/libssl/src/apps/cms.c | |||
| @@ -68,13 +68,13 @@ | |||
| 68 | 68 | ||
| 69 | #undef PROG | 69 | #undef PROG |
| 70 | #define PROG cms_main | 70 | #define PROG cms_main |
| 71 | static int save_certs(char *signerfile, STACK_OF(X509) *signers); | 71 | static int save_certs(char *signerfile, STACK_OF(X509) * signers); |
| 72 | static int cms_cb(int ok, X509_STORE_CTX *ctx); | 72 | static int cms_cb(int ok, X509_STORE_CTX * ctx); |
| 73 | static void receipt_request_print(BIO *out, CMS_ContentInfo *cms); | 73 | static void receipt_request_print(BIO * out, CMS_ContentInfo * cms); |
| 74 | static CMS_ReceiptRequest * | 74 | static CMS_ReceiptRequest * |
| 75 | make_receipt_request(STACK_OF(OPENSSL_STRING) *rr_to, | 75 | make_receipt_request(STACK_OF(OPENSSL_STRING) * rr_to, |
| 76 | int rr_allorfirst, | 76 | int rr_allorfirst, |
| 77 | STACK_OF(OPENSSL_STRING) *rr_from); | 77 | STACK_OF(OPENSSL_STRING) * rr_from); |
| 78 | 78 | ||
| 79 | #define SMIME_OP 0x10 | 79 | #define SMIME_OP 0x10 |
| 80 | #define SMIME_IP 0x20 | 80 | #define SMIME_IP 0x20 |
| @@ -96,12 +96,12 @@ make_receipt_request(STACK_OF(OPENSSL_STRING) *rr_to, | |||
| 96 | #define SMIME_SIGN_RECEIPT (15 | SMIME_IP | SMIME_OP) | 96 | #define SMIME_SIGN_RECEIPT (15 | SMIME_IP | SMIME_OP) |
| 97 | #define SMIME_VERIFY_RECEIPT (16 | SMIME_IP) | 97 | #define SMIME_VERIFY_RECEIPT (16 | SMIME_IP) |
| 98 | 98 | ||
| 99 | int verify_err = 0; | 99 | int verify_err = 0; |
| 100 | 100 | ||
| 101 | int MAIN(int, char **); | 101 | int MAIN(int, char **); |
| 102 | 102 | ||
| 103 | int | 103 | int |
| 104 | MAIN(int argc, char **argv) | 104 | MAIN(int argc, char **argv) |
| 105 | { | 105 | { |
| 106 | ENGINE *e = NULL; | 106 | ENGINE *e = NULL; |
| 107 | int operation = 0; | 107 | int operation = 0; |
| @@ -110,7 +110,7 @@ MAIN(int argc, char **argv) | |||
| 110 | const char *inmode = "r", *outmode = "w"; | 110 | const char *inmode = "r", *outmode = "w"; |
| 111 | char *infile = NULL, *outfile = NULL, *rctfile = NULL; | 111 | char *infile = NULL, *outfile = NULL, *rctfile = NULL; |
| 112 | char *signerfile = NULL, *recipfile = NULL; | 112 | char *signerfile = NULL, *recipfile = NULL; |
| 113 | STACK_OF(OPENSSL_STRING) *sksigners = NULL, *skkeys = NULL; | 113 | STACK_OF(OPENSSL_STRING) * sksigners = NULL, *skkeys = NULL; |
| 114 | char *certfile = NULL, *keyfile = NULL, *contfile = NULL; | 114 | char *certfile = NULL, *keyfile = NULL, *contfile = NULL; |
| 115 | char *certsoutfile = NULL; | 115 | char *certsoutfile = NULL; |
| 116 | const EVP_CIPHER *cipher = NULL; | 116 | const EVP_CIPHER *cipher = NULL; |
| @@ -118,13 +118,13 @@ MAIN(int argc, char **argv) | |||
| 118 | X509_STORE *store = NULL; | 118 | X509_STORE *store = NULL; |
| 119 | X509 *cert = NULL, *recip = NULL, *signer = NULL; | 119 | X509 *cert = NULL, *recip = NULL, *signer = NULL; |
| 120 | EVP_PKEY *key = NULL; | 120 | EVP_PKEY *key = NULL; |
| 121 | STACK_OF(X509) *encerts = NULL, *other = NULL; | 121 | STACK_OF(X509) * encerts = NULL, *other = NULL; |
| 122 | BIO *in = NULL, *out = NULL, *indata = NULL, *rctin = NULL; | 122 | BIO *in = NULL, *out = NULL, *indata = NULL, *rctin = NULL; |
| 123 | int badarg = 0; | 123 | int badarg = 0; |
| 124 | int flags = CMS_DETACHED, noout = 0, print = 0; | 124 | int flags = CMS_DETACHED, noout = 0, print = 0; |
| 125 | int verify_retcode = 0; | 125 | int verify_retcode = 0; |
| 126 | int rr_print = 0, rr_allorfirst = -1; | 126 | int rr_print = 0, rr_allorfirst = -1; |
| 127 | STACK_OF(OPENSSL_STRING) *rr_to = NULL, *rr_from = NULL; | 127 | STACK_OF(OPENSSL_STRING) * rr_to = NULL, *rr_from = NULL; |
| 128 | CMS_ReceiptRequest *rr = NULL; | 128 | CMS_ReceiptRequest *rr = NULL; |
| 129 | char *to = NULL, *from = NULL, *subject = NULL; | 129 | char *to = NULL, *from = NULL, *subject = NULL; |
| 130 | char *CAfile = NULL, *CApath = NULL; | 130 | char *CAfile = NULL, *CApath = NULL; |
| @@ -152,26 +152,25 @@ MAIN(int argc, char **argv) | |||
| 152 | 152 | ||
| 153 | if (bio_err == NULL) { | 153 | if (bio_err == NULL) { |
| 154 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 154 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 155 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 155 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 156 | } | 156 | } |
| 157 | |||
| 158 | if (!load_config(bio_err, NULL)) | 157 | if (!load_config(bio_err, NULL)) |
| 159 | goto end; | 158 | goto end; |
| 160 | 159 | ||
| 161 | while (!badarg && *args && *args[0] == '-') { | 160 | while (!badarg && *args && *args[0] == '-') { |
| 162 | if (!strcmp (*args, "-encrypt")) | 161 | if (!strcmp(*args, "-encrypt")) |
| 163 | operation = SMIME_ENCRYPT; | 162 | operation = SMIME_ENCRYPT; |
| 164 | else if (!strcmp (*args, "-decrypt")) | 163 | else if (!strcmp(*args, "-decrypt")) |
| 165 | operation = SMIME_DECRYPT; | 164 | operation = SMIME_DECRYPT; |
| 166 | else if (!strcmp (*args, "-sign")) | 165 | else if (!strcmp(*args, "-sign")) |
| 167 | operation = SMIME_SIGN; | 166 | operation = SMIME_SIGN; |
| 168 | else if (!strcmp (*args, "-sign_receipt")) | 167 | else if (!strcmp(*args, "-sign_receipt")) |
| 169 | operation = SMIME_SIGN_RECEIPT; | 168 | operation = SMIME_SIGN_RECEIPT; |
| 170 | else if (!strcmp (*args, "-resign")) | 169 | else if (!strcmp(*args, "-resign")) |
| 171 | operation = SMIME_RESIGN; | 170 | operation = SMIME_RESIGN; |
| 172 | else if (!strcmp (*args, "-verify")) | 171 | else if (!strcmp(*args, "-verify")) |
| 173 | operation = SMIME_VERIFY; | 172 | operation = SMIME_VERIFY; |
| 174 | else if (!strcmp (*args, "-verify_retcode")) | 173 | else if (!strcmp(*args, "-verify_retcode")) |
| 175 | verify_retcode = 1; | 174 | verify_retcode = 1; |
| 176 | else if (!strcmp(*args, "-verify_receipt")) { | 175 | else if (!strcmp(*args, "-verify_receipt")) { |
| 177 | operation = SMIME_VERIFY_RECEIPT; | 176 | operation = SMIME_VERIFY_RECEIPT; |
| @@ -179,40 +178,40 @@ MAIN(int argc, char **argv) | |||
| 179 | goto argerr; | 178 | goto argerr; |
| 180 | args++; | 179 | args++; |
| 181 | rctfile = *args; | 180 | rctfile = *args; |
| 182 | } else if (!strcmp (*args, "-cmsout")) | 181 | } else if (!strcmp(*args, "-cmsout")) |
| 183 | operation = SMIME_CMSOUT; | 182 | operation = SMIME_CMSOUT; |
| 184 | else if (!strcmp (*args, "-data_out")) | 183 | else if (!strcmp(*args, "-data_out")) |
| 185 | operation = SMIME_DATAOUT; | 184 | operation = SMIME_DATAOUT; |
| 186 | else if (!strcmp (*args, "-data_create")) | 185 | else if (!strcmp(*args, "-data_create")) |
| 187 | operation = SMIME_DATA_CREATE; | 186 | operation = SMIME_DATA_CREATE; |
| 188 | else if (!strcmp (*args, "-digest_verify")) | 187 | else if (!strcmp(*args, "-digest_verify")) |
| 189 | operation = SMIME_DIGEST_VERIFY; | 188 | operation = SMIME_DIGEST_VERIFY; |
| 190 | else if (!strcmp (*args, "-digest_create")) | 189 | else if (!strcmp(*args, "-digest_create")) |
| 191 | operation = SMIME_DIGEST_CREATE; | 190 | operation = SMIME_DIGEST_CREATE; |
| 192 | else if (!strcmp (*args, "-compress")) | 191 | else if (!strcmp(*args, "-compress")) |
| 193 | operation = SMIME_COMPRESS; | 192 | operation = SMIME_COMPRESS; |
| 194 | else if (!strcmp (*args, "-uncompress")) | 193 | else if (!strcmp(*args, "-uncompress")) |
| 195 | operation = SMIME_UNCOMPRESS; | 194 | operation = SMIME_UNCOMPRESS; |
| 196 | else if (!strcmp (*args, "-EncryptedData_decrypt")) | 195 | else if (!strcmp(*args, "-EncryptedData_decrypt")) |
| 197 | operation = SMIME_ENCRYPTED_DECRYPT; | 196 | operation = SMIME_ENCRYPTED_DECRYPT; |
| 198 | else if (!strcmp (*args, "-EncryptedData_encrypt")) | 197 | else if (!strcmp(*args, "-EncryptedData_encrypt")) |
| 199 | operation = SMIME_ENCRYPTED_ENCRYPT; | 198 | operation = SMIME_ENCRYPTED_ENCRYPT; |
| 200 | #ifndef OPENSSL_NO_DES | 199 | #ifndef OPENSSL_NO_DES |
| 201 | else if (!strcmp (*args, "-des3")) | 200 | else if (!strcmp(*args, "-des3")) |
| 202 | cipher = EVP_des_ede3_cbc(); | 201 | cipher = EVP_des_ede3_cbc(); |
| 203 | else if (!strcmp (*args, "-des")) | 202 | else if (!strcmp(*args, "-des")) |
| 204 | cipher = EVP_des_cbc(); | 203 | cipher = EVP_des_cbc(); |
| 205 | #endif | 204 | #endif |
| 206 | #ifndef OPENSSL_NO_SEED | 205 | #ifndef OPENSSL_NO_SEED |
| 207 | else if (!strcmp (*args, "-seed")) | 206 | else if (!strcmp(*args, "-seed")) |
| 208 | cipher = EVP_seed_cbc(); | 207 | cipher = EVP_seed_cbc(); |
| 209 | #endif | 208 | #endif |
| 210 | #ifndef OPENSSL_NO_RC2 | 209 | #ifndef OPENSSL_NO_RC2 |
| 211 | else if (!strcmp (*args, "-rc2-40")) | 210 | else if (!strcmp(*args, "-rc2-40")) |
| 212 | cipher = EVP_rc2_40_cbc(); | 211 | cipher = EVP_rc2_40_cbc(); |
| 213 | else if (!strcmp (*args, "-rc2-128")) | 212 | else if (!strcmp(*args, "-rc2-128")) |
| 214 | cipher = EVP_rc2_cbc(); | 213 | cipher = EVP_rc2_cbc(); |
| 215 | else if (!strcmp (*args, "-rc2-64")) | 214 | else if (!strcmp(*args, "-rc2-64")) |
| 216 | cipher = EVP_rc2_64_cbc(); | 215 | cipher = EVP_rc2_64_cbc(); |
| 217 | #endif | 216 | #endif |
| 218 | #ifndef OPENSSL_NO_AES | 217 | #ifndef OPENSSL_NO_AES |
| @@ -231,50 +230,50 @@ MAIN(int argc, char **argv) | |||
| 231 | else if (!strcmp(*args, "-camellia256")) | 230 | else if (!strcmp(*args, "-camellia256")) |
| 232 | cipher = EVP_camellia_256_cbc(); | 231 | cipher = EVP_camellia_256_cbc(); |
| 233 | #endif | 232 | #endif |
| 234 | else if (!strcmp (*args, "-debug_decrypt")) | 233 | else if (!strcmp(*args, "-debug_decrypt")) |
| 235 | flags |= CMS_DEBUG_DECRYPT; | 234 | flags |= CMS_DEBUG_DECRYPT; |
| 236 | else if (!strcmp (*args, "-text")) | 235 | else if (!strcmp(*args, "-text")) |
| 237 | flags |= CMS_TEXT; | 236 | flags |= CMS_TEXT; |
| 238 | else if (!strcmp (*args, "-nointern")) | 237 | else if (!strcmp(*args, "-nointern")) |
| 239 | flags |= CMS_NOINTERN; | 238 | flags |= CMS_NOINTERN; |
| 240 | else if (!strcmp (*args, "-noverify") || | 239 | else if (!strcmp(*args, "-noverify") || |
| 241 | !strcmp (*args, "-no_signer_cert_verify")) | 240 | !strcmp(*args, "-no_signer_cert_verify")) |
| 242 | flags |= CMS_NO_SIGNER_CERT_VERIFY; | 241 | flags |= CMS_NO_SIGNER_CERT_VERIFY; |
| 243 | else if (!strcmp (*args, "-nocerts")) | 242 | else if (!strcmp(*args, "-nocerts")) |
| 244 | flags |= CMS_NOCERTS; | 243 | flags |= CMS_NOCERTS; |
| 245 | else if (!strcmp (*args, "-noattr")) | 244 | else if (!strcmp(*args, "-noattr")) |
| 246 | flags |= CMS_NOATTR; | 245 | flags |= CMS_NOATTR; |
| 247 | else if (!strcmp (*args, "-nodetach")) | 246 | else if (!strcmp(*args, "-nodetach")) |
| 248 | flags &= ~CMS_DETACHED; | 247 | flags &= ~CMS_DETACHED; |
| 249 | else if (!strcmp (*args, "-nosmimecap")) | 248 | else if (!strcmp(*args, "-nosmimecap")) |
| 250 | flags |= CMS_NOSMIMECAP; | 249 | flags |= CMS_NOSMIMECAP; |
| 251 | else if (!strcmp (*args, "-binary")) | 250 | else if (!strcmp(*args, "-binary")) |
| 252 | flags |= CMS_BINARY; | 251 | flags |= CMS_BINARY; |
| 253 | else if (!strcmp (*args, "-keyid")) | 252 | else if (!strcmp(*args, "-keyid")) |
| 254 | flags |= CMS_USE_KEYID; | 253 | flags |= CMS_USE_KEYID; |
| 255 | else if (!strcmp (*args, "-nosigs")) | 254 | else if (!strcmp(*args, "-nosigs")) |
| 256 | flags |= CMS_NOSIGS; | 255 | flags |= CMS_NOSIGS; |
| 257 | else if (!strcmp (*args, "-no_content_verify")) | 256 | else if (!strcmp(*args, "-no_content_verify")) |
| 258 | flags |= CMS_NO_CONTENT_VERIFY; | 257 | flags |= CMS_NO_CONTENT_VERIFY; |
| 259 | else if (!strcmp (*args, "-no_attr_verify")) | 258 | else if (!strcmp(*args, "-no_attr_verify")) |
| 260 | flags |= CMS_NO_ATTR_VERIFY; | 259 | flags |= CMS_NO_ATTR_VERIFY; |
| 261 | else if (!strcmp (*args, "-stream")) | 260 | else if (!strcmp(*args, "-stream")) |
| 262 | flags |= CMS_STREAM; | 261 | flags |= CMS_STREAM; |
| 263 | else if (!strcmp (*args, "-indef")) | 262 | else if (!strcmp(*args, "-indef")) |
| 264 | flags |= CMS_STREAM; | 263 | flags |= CMS_STREAM; |
| 265 | else if (!strcmp (*args, "-noindef")) | 264 | else if (!strcmp(*args, "-noindef")) |
| 266 | flags &= ~CMS_STREAM; | 265 | flags &= ~CMS_STREAM; |
| 267 | else if (!strcmp (*args, "-nooldmime")) | 266 | else if (!strcmp(*args, "-nooldmime")) |
| 268 | flags |= CMS_NOOLDMIMETYPE; | 267 | flags |= CMS_NOOLDMIMETYPE; |
| 269 | else if (!strcmp (*args, "-crlfeol")) | 268 | else if (!strcmp(*args, "-crlfeol")) |
| 270 | flags |= CMS_CRLFEOL; | 269 | flags |= CMS_CRLFEOL; |
| 271 | else if (!strcmp (*args, "-noout")) | 270 | else if (!strcmp(*args, "-noout")) |
| 272 | noout = 1; | 271 | noout = 1; |
| 273 | else if (!strcmp (*args, "-receipt_request_print")) | 272 | else if (!strcmp(*args, "-receipt_request_print")) |
| 274 | rr_print = 1; | 273 | rr_print = 1; |
| 275 | else if (!strcmp (*args, "-receipt_request_all")) | 274 | else if (!strcmp(*args, "-receipt_request_all")) |
| 276 | rr_allorfirst = 0; | 275 | rr_allorfirst = 0; |
| 277 | else if (!strcmp (*args, "-receipt_request_first")) | 276 | else if (!strcmp(*args, "-receipt_request_first")) |
| 278 | rr_allorfirst = 1; | 277 | rr_allorfirst = 1; |
| 279 | else if (!strcmp(*args, "-receipt_request_from")) { | 278 | else if (!strcmp(*args, "-receipt_request_from")) { |
| 280 | if (!args[1]) | 279 | if (!args[1]) |
| @@ -283,20 +282,17 @@ MAIN(int argc, char **argv) | |||
| 283 | if (!rr_from) | 282 | if (!rr_from) |
| 284 | rr_from = sk_OPENSSL_STRING_new_null(); | 283 | rr_from = sk_OPENSSL_STRING_new_null(); |
| 285 | sk_OPENSSL_STRING_push(rr_from, *args); | 284 | sk_OPENSSL_STRING_push(rr_from, *args); |
| 286 | } | 285 | } else if (!strcmp(*args, "-receipt_request_to")) { |
| 287 | else if (!strcmp(*args, "-receipt_request_to")) { | ||
| 288 | if (!args[1]) | 286 | if (!args[1]) |
| 289 | goto argerr; | 287 | goto argerr; |
| 290 | args++; | 288 | args++; |
| 291 | if (!rr_to) | 289 | if (!rr_to) |
| 292 | rr_to = sk_OPENSSL_STRING_new_null(); | 290 | rr_to = sk_OPENSSL_STRING_new_null(); |
| 293 | sk_OPENSSL_STRING_push(rr_to, *args); | 291 | sk_OPENSSL_STRING_push(rr_to, *args); |
| 294 | } | 292 | } else if (!strcmp(*args, "-print")) { |
| 295 | else if (!strcmp (*args, "-print")) { | ||
| 296 | noout = 1; | 293 | noout = 1; |
| 297 | print = 1; | 294 | print = 1; |
| 298 | } | 295 | } else if (!strcmp(*args, "-secretkey")) { |
| 299 | else if (!strcmp(*args, "-secretkey")) { | ||
| 300 | long ltmp; | 296 | long ltmp; |
| 301 | if (!args[1]) | 297 | if (!args[1]) |
| 302 | goto argerr; | 298 | goto argerr; |
| @@ -306,9 +302,8 @@ MAIN(int argc, char **argv) | |||
| 306 | BIO_printf(bio_err, "Invalid key %s\n", *args); | 302 | BIO_printf(bio_err, "Invalid key %s\n", *args); |
| 307 | goto argerr; | 303 | goto argerr; |
| 308 | } | 304 | } |
| 309 | secret_keylen = (size_t)ltmp; | 305 | secret_keylen = (size_t) ltmp; |
| 310 | } | 306 | } else if (!strcmp(*args, "-secretkeyid")) { |
| 311 | else if (!strcmp(*args, "-secretkeyid")) { | ||
| 312 | long ltmp; | 307 | long ltmp; |
| 313 | if (!args[1]) | 308 | if (!args[1]) |
| 314 | goto argerr; | 309 | goto argerr; |
| @@ -318,13 +313,12 @@ MAIN(int argc, char **argv) | |||
| 318 | BIO_printf(bio_err, "Invalid id %s\n", *args); | 313 | BIO_printf(bio_err, "Invalid id %s\n", *args); |
| 319 | goto argerr; | 314 | goto argerr; |
| 320 | } | 315 | } |
| 321 | secret_keyidlen = (size_t)ltmp; | 316 | secret_keyidlen = (size_t) ltmp; |
| 322 | } | 317 | } else if (!strcmp(*args, "-pwri_password")) { |
| 323 | else if (!strcmp(*args, "-pwri_password")) { | ||
| 324 | if (!args[1]) | 318 | if (!args[1]) |
| 325 | goto argerr; | 319 | goto argerr; |
| 326 | args++; | 320 | args++; |
| 327 | pwri_pass = (unsigned char *)*args; | 321 | pwri_pass = (unsigned char *) *args; |
| 328 | } else if (!strcmp(*args, "-econtent_type")) { | 322 | } else if (!strcmp(*args, "-econtent_type")) { |
| 329 | if (!args[1]) | 323 | if (!args[1]) |
| 330 | goto argerr; | 324 | goto argerr; |
| @@ -352,23 +346,19 @@ MAIN(int argc, char **argv) | |||
| 352 | if (!args[1]) | 346 | if (!args[1]) |
| 353 | goto argerr; | 347 | goto argerr; |
| 354 | passargin = *++args; | 348 | passargin = *++args; |
| 355 | } | 349 | } else if (!strcmp(*args, "-to")) { |
| 356 | else if (!strcmp (*args, "-to")) { | ||
| 357 | if (!args[1]) | 350 | if (!args[1]) |
| 358 | goto argerr; | 351 | goto argerr; |
| 359 | to = *++args; | 352 | to = *++args; |
| 360 | } | 353 | } else if (!strcmp(*args, "-from")) { |
| 361 | else if (!strcmp (*args, "-from")) { | ||
| 362 | if (!args[1]) | 354 | if (!args[1]) |
| 363 | goto argerr; | 355 | goto argerr; |
| 364 | from = *++args; | 356 | from = *++args; |
| 365 | } | 357 | } else if (!strcmp(*args, "-subject")) { |
| 366 | else if (!strcmp (*args, "-subject")) { | ||
| 367 | if (!args[1]) | 358 | if (!args[1]) |
| 368 | goto argerr; | 359 | goto argerr; |
| 369 | subject = *++args; | 360 | subject = *++args; |
| 370 | } | 361 | } else if (!strcmp(*args, "-signer")) { |
| 371 | else if (!strcmp (*args, "-signer")) { | ||
| 372 | if (!args[1]) | 362 | if (!args[1]) |
| 373 | goto argerr; | 363 | goto argerr; |
| 374 | /* If previous -signer argument add signer to list */ | 364 | /* If previous -signer argument add signer to list */ |
| @@ -385,15 +375,15 @@ MAIN(int argc, char **argv) | |||
| 385 | keyfile = NULL; | 375 | keyfile = NULL; |
| 386 | } | 376 | } |
| 387 | signerfile = *++args; | 377 | signerfile = *++args; |
| 388 | } else if (!strcmp (*args, "-recip")) { | 378 | } else if (!strcmp(*args, "-recip")) { |
| 389 | if (!args[1]) | 379 | if (!args[1]) |
| 390 | goto argerr; | 380 | goto argerr; |
| 391 | recipfile = *++args; | 381 | recipfile = *++args; |
| 392 | } else if (!strcmp (*args, "-certsout")) { | 382 | } else if (!strcmp(*args, "-certsout")) { |
| 393 | if (!args[1]) | 383 | if (!args[1]) |
| 394 | goto argerr; | 384 | goto argerr; |
| 395 | certsoutfile = *++args; | 385 | certsoutfile = *++args; |
| 396 | } else if (!strcmp (*args, "-md")) { | 386 | } else if (!strcmp(*args, "-md")) { |
| 397 | if (!args[1]) | 387 | if (!args[1]) |
| 398 | goto argerr; | 388 | goto argerr; |
| 399 | sign_md = EVP_get_digestbyname(*++args); | 389 | sign_md = EVP_get_digestbyname(*++args); |
| @@ -402,7 +392,7 @@ MAIN(int argc, char **argv) | |||
| 402 | *args); | 392 | *args); |
| 403 | goto argerr; | 393 | goto argerr; |
| 404 | } | 394 | } |
| 405 | } else if (!strcmp (*args, "-inkey")) { | 395 | } else if (!strcmp(*args, "-inkey")) { |
| 406 | if (!args[1]) | 396 | if (!args[1]) |
| 407 | goto argerr; | 397 | goto argerr; |
| 408 | /* If previous -inkey arument add signer to list */ | 398 | /* If previous -inkey arument add signer to list */ |
| @@ -420,43 +410,43 @@ MAIN(int argc, char **argv) | |||
| 420 | sk_OPENSSL_STRING_push(skkeys, keyfile); | 410 | sk_OPENSSL_STRING_push(skkeys, keyfile); |
| 421 | } | 411 | } |
| 422 | keyfile = *++args; | 412 | keyfile = *++args; |
| 423 | } else if (!strcmp (*args, "-keyform")) { | 413 | } else if (!strcmp(*args, "-keyform")) { |
| 424 | if (!args[1]) | 414 | if (!args[1]) |
| 425 | goto argerr; | 415 | goto argerr; |
| 426 | keyform = str2fmt(*++args); | 416 | keyform = str2fmt(*++args); |
| 427 | } else if (!strcmp (*args, "-rctform")) { | 417 | } else if (!strcmp(*args, "-rctform")) { |
| 428 | if (!args[1]) | 418 | if (!args[1]) |
| 429 | goto argerr; | 419 | goto argerr; |
| 430 | rctformat = str2fmt(*++args); | 420 | rctformat = str2fmt(*++args); |
| 431 | } else if (!strcmp (*args, "-certfile")) { | 421 | } else if (!strcmp(*args, "-certfile")) { |
| 432 | if (!args[1]) | 422 | if (!args[1]) |
| 433 | goto argerr; | 423 | goto argerr; |
| 434 | certfile = *++args; | 424 | certfile = *++args; |
| 435 | } else if (!strcmp (*args, "-CAfile")) { | 425 | } else if (!strcmp(*args, "-CAfile")) { |
| 436 | if (!args[1]) | 426 | if (!args[1]) |
| 437 | goto argerr; | 427 | goto argerr; |
| 438 | CAfile = *++args; | 428 | CAfile = *++args; |
| 439 | } else if (!strcmp (*args, "-CApath")) { | 429 | } else if (!strcmp(*args, "-CApath")) { |
| 440 | if (!args[1]) | 430 | if (!args[1]) |
| 441 | goto argerr; | 431 | goto argerr; |
| 442 | CApath = *++args; | 432 | CApath = *++args; |
| 443 | } else if (!strcmp (*args, "-in")) { | 433 | } else if (!strcmp(*args, "-in")) { |
| 444 | if (!args[1]) | 434 | if (!args[1]) |
| 445 | goto argerr; | 435 | goto argerr; |
| 446 | infile = *++args; | 436 | infile = *++args; |
| 447 | } else if (!strcmp (*args, "-inform")) { | 437 | } else if (!strcmp(*args, "-inform")) { |
| 448 | if (!args[1]) | 438 | if (!args[1]) |
| 449 | goto argerr; | 439 | goto argerr; |
| 450 | informat = str2fmt(*++args); | 440 | informat = str2fmt(*++args); |
| 451 | } else if (!strcmp (*args, "-outform")) { | 441 | } else if (!strcmp(*args, "-outform")) { |
| 452 | if (!args[1]) | 442 | if (!args[1]) |
| 453 | goto argerr; | 443 | goto argerr; |
| 454 | outformat = str2fmt(*++args); | 444 | outformat = str2fmt(*++args); |
| 455 | } else if (!strcmp (*args, "-out")) { | 445 | } else if (!strcmp(*args, "-out")) { |
| 456 | if (!args[1]) | 446 | if (!args[1]) |
| 457 | goto argerr; | 447 | goto argerr; |
| 458 | outfile = *++args; | 448 | outfile = *++args; |
| 459 | } else if (!strcmp (*args, "-content")) { | 449 | } else if (!strcmp(*args, "-content")) { |
| 460 | if (!args[1]) | 450 | if (!args[1]) |
| 461 | goto argerr; | 451 | goto argerr; |
| 462 | contfile = *++args; | 452 | contfile = *++args; |
| @@ -471,8 +461,7 @@ MAIN(int argc, char **argv) | |||
| 471 | BIO_puts(bio_err, "No Signed Receipts Recipients\n"); | 461 | BIO_puts(bio_err, "No Signed Receipts Recipients\n"); |
| 472 | goto argerr; | 462 | goto argerr; |
| 473 | } | 463 | } |
| 474 | 464 | if (!(operation & SMIME_SIGNERS) && (rr_to || rr_from)) { | |
| 475 | if (!(operation & SMIME_SIGNERS) && (rr_to || rr_from)) { | ||
| 476 | BIO_puts(bio_err, "Signed receipts only allowed with -sign\n"); | 465 | BIO_puts(bio_err, "Signed receipts only allowed with -sign\n"); |
| 477 | goto argerr; | 466 | goto argerr; |
| 478 | } | 467 | } |
| @@ -480,7 +469,6 @@ MAIN(int argc, char **argv) | |||
| 480 | BIO_puts(bio_err, "Multiple signers or keys not allowed\n"); | 469 | BIO_puts(bio_err, "Multiple signers or keys not allowed\n"); |
| 481 | goto argerr; | 470 | goto argerr; |
| 482 | } | 471 | } |
| 483 | |||
| 484 | if (operation & SMIME_SIGNERS) { | 472 | if (operation & SMIME_SIGNERS) { |
| 485 | if (keyfile && !signerfile) { | 473 | if (keyfile && !signerfile) { |
| 486 | BIO_puts(bio_err, "Illegal -inkey without -signer\n"); | 474 | BIO_puts(bio_err, "Illegal -inkey without -signer\n"); |
| @@ -519,72 +507,71 @@ MAIN(int argc, char **argv) | |||
| 519 | badarg = 1; | 507 | badarg = 1; |
| 520 | 508 | ||
| 521 | if (badarg) { | 509 | if (badarg) { |
| 522 | argerr: | 510 | argerr: |
| 523 | BIO_printf (bio_err, "Usage cms [options] cert.pem ...\n"); | 511 | BIO_printf(bio_err, "Usage cms [options] cert.pem ...\n"); |
| 524 | BIO_printf (bio_err, "where options are\n"); | 512 | BIO_printf(bio_err, "where options are\n"); |
| 525 | BIO_printf (bio_err, "-encrypt encrypt message\n"); | 513 | BIO_printf(bio_err, "-encrypt encrypt message\n"); |
| 526 | BIO_printf (bio_err, "-decrypt decrypt encrypted message\n"); | 514 | BIO_printf(bio_err, "-decrypt decrypt encrypted message\n"); |
| 527 | BIO_printf (bio_err, "-sign sign message\n"); | 515 | BIO_printf(bio_err, "-sign sign message\n"); |
| 528 | BIO_printf (bio_err, "-verify verify signed message\n"); | 516 | BIO_printf(bio_err, "-verify verify signed message\n"); |
| 529 | BIO_printf (bio_err, "-cmsout output CMS structure\n"); | 517 | BIO_printf(bio_err, "-cmsout output CMS structure\n"); |
| 530 | #ifndef OPENSSL_NO_DES | 518 | #ifndef OPENSSL_NO_DES |
| 531 | BIO_printf (bio_err, "-des3 encrypt with triple DES\n"); | 519 | BIO_printf(bio_err, "-des3 encrypt with triple DES\n"); |
| 532 | BIO_printf (bio_err, "-des encrypt with DES\n"); | 520 | BIO_printf(bio_err, "-des encrypt with DES\n"); |
| 533 | #endif | 521 | #endif |
| 534 | #ifndef OPENSSL_NO_SEED | 522 | #ifndef OPENSSL_NO_SEED |
| 535 | BIO_printf (bio_err, "-seed encrypt with SEED\n"); | 523 | BIO_printf(bio_err, "-seed encrypt with SEED\n"); |
| 536 | #endif | 524 | #endif |
| 537 | #ifndef OPENSSL_NO_RC2 | 525 | #ifndef OPENSSL_NO_RC2 |
| 538 | BIO_printf (bio_err, "-rc2-40 encrypt with RC2-40 (default)\n"); | 526 | BIO_printf(bio_err, "-rc2-40 encrypt with RC2-40 (default)\n"); |
| 539 | BIO_printf (bio_err, "-rc2-64 encrypt with RC2-64\n"); | 527 | BIO_printf(bio_err, "-rc2-64 encrypt with RC2-64\n"); |
| 540 | BIO_printf (bio_err, "-rc2-128 encrypt with RC2-128\n"); | 528 | BIO_printf(bio_err, "-rc2-128 encrypt with RC2-128\n"); |
| 541 | #endif | 529 | #endif |
| 542 | #ifndef OPENSSL_NO_AES | 530 | #ifndef OPENSSL_NO_AES |
| 543 | BIO_printf (bio_err, "-aes128, -aes192, -aes256\n"); | 531 | BIO_printf(bio_err, "-aes128, -aes192, -aes256\n"); |
| 544 | BIO_printf (bio_err, " encrypt PEM output with cbc aes\n"); | 532 | BIO_printf(bio_err, " encrypt PEM output with cbc aes\n"); |
| 545 | #endif | 533 | #endif |
| 546 | #ifndef OPENSSL_NO_CAMELLIA | 534 | #ifndef OPENSSL_NO_CAMELLIA |
| 547 | BIO_printf (bio_err, "-camellia128, -camellia192, -camellia256\n"); | 535 | BIO_printf(bio_err, "-camellia128, -camellia192, -camellia256\n"); |
| 548 | BIO_printf (bio_err, " encrypt PEM output with cbc camellia\n"); | 536 | BIO_printf(bio_err, " encrypt PEM output with cbc camellia\n"); |
| 549 | #endif | 537 | #endif |
| 550 | BIO_printf (bio_err, "-nointern don't search certificates in message for signer\n"); | 538 | BIO_printf(bio_err, "-nointern don't search certificates in message for signer\n"); |
| 551 | BIO_printf (bio_err, "-nosigs don't verify message signature\n"); | 539 | BIO_printf(bio_err, "-nosigs don't verify message signature\n"); |
| 552 | BIO_printf (bio_err, "-noverify don't verify signers certificate\n"); | 540 | BIO_printf(bio_err, "-noverify don't verify signers certificate\n"); |
| 553 | BIO_printf (bio_err, "-nocerts don't include signers certificate when signing\n"); | 541 | BIO_printf(bio_err, "-nocerts don't include signers certificate when signing\n"); |
| 554 | BIO_printf (bio_err, "-nodetach use opaque signing\n"); | 542 | BIO_printf(bio_err, "-nodetach use opaque signing\n"); |
| 555 | BIO_printf (bio_err, "-noattr don't include any signed attributes\n"); | 543 | BIO_printf(bio_err, "-noattr don't include any signed attributes\n"); |
| 556 | BIO_printf (bio_err, "-binary don't translate message to text\n"); | 544 | BIO_printf(bio_err, "-binary don't translate message to text\n"); |
| 557 | BIO_printf (bio_err, "-certfile file other certificates file\n"); | 545 | BIO_printf(bio_err, "-certfile file other certificates file\n"); |
| 558 | BIO_printf (bio_err, "-certsout file certificate output file\n"); | 546 | BIO_printf(bio_err, "-certsout file certificate output file\n"); |
| 559 | BIO_printf (bio_err, "-signer file signer certificate file\n"); | 547 | BIO_printf(bio_err, "-signer file signer certificate file\n"); |
| 560 | BIO_printf (bio_err, "-recip file recipient certificate file for decryption\n"); | 548 | BIO_printf(bio_err, "-recip file recipient certificate file for decryption\n"); |
| 561 | BIO_printf (bio_err, "-keyid use subject key identifier\n"); | 549 | BIO_printf(bio_err, "-keyid use subject key identifier\n"); |
| 562 | BIO_printf (bio_err, "-in file input file\n"); | 550 | BIO_printf(bio_err, "-in file input file\n"); |
| 563 | BIO_printf (bio_err, "-inform arg input format SMIME (default), PEM or DER\n"); | 551 | BIO_printf(bio_err, "-inform arg input format SMIME (default), PEM or DER\n"); |
| 564 | BIO_printf (bio_err, "-inkey file input private key (if not signer or recipient)\n"); | 552 | BIO_printf(bio_err, "-inkey file input private key (if not signer or recipient)\n"); |
| 565 | BIO_printf (bio_err, "-keyform arg input private key format (PEM or ENGINE)\n"); | 553 | BIO_printf(bio_err, "-keyform arg input private key format (PEM or ENGINE)\n"); |
| 566 | BIO_printf (bio_err, "-out file output file\n"); | 554 | BIO_printf(bio_err, "-out file output file\n"); |
| 567 | BIO_printf (bio_err, "-outform arg output format SMIME (default), PEM or DER\n"); | 555 | BIO_printf(bio_err, "-outform arg output format SMIME (default), PEM or DER\n"); |
| 568 | BIO_printf (bio_err, "-content file supply or override content for detached signature\n"); | 556 | BIO_printf(bio_err, "-content file supply or override content for detached signature\n"); |
| 569 | BIO_printf (bio_err, "-to addr to address\n"); | 557 | BIO_printf(bio_err, "-to addr to address\n"); |
| 570 | BIO_printf (bio_err, "-from ad from address\n"); | 558 | BIO_printf(bio_err, "-from ad from address\n"); |
| 571 | BIO_printf (bio_err, "-subject s subject\n"); | 559 | BIO_printf(bio_err, "-subject s subject\n"); |
| 572 | BIO_printf (bio_err, "-text include or delete text MIME headers\n"); | 560 | BIO_printf(bio_err, "-text include or delete text MIME headers\n"); |
| 573 | BIO_printf (bio_err, "-CApath dir trusted certificates directory\n"); | 561 | BIO_printf(bio_err, "-CApath dir trusted certificates directory\n"); |
| 574 | BIO_printf (bio_err, "-CAfile file trusted certificates file\n"); | 562 | BIO_printf(bio_err, "-CAfile file trusted certificates file\n"); |
| 575 | BIO_printf (bio_err, "-crl_check check revocation status of signer's certificate using CRLs\n"); | 563 | BIO_printf(bio_err, "-crl_check check revocation status of signer's certificate using CRLs\n"); |
| 576 | BIO_printf (bio_err, "-crl_check_all check revocation status of signer's certificate chain using CRLs\n"); | 564 | BIO_printf(bio_err, "-crl_check_all check revocation status of signer's certificate chain using CRLs\n"); |
| 577 | #ifndef OPENSSL_NO_ENGINE | 565 | #ifndef OPENSSL_NO_ENGINE |
| 578 | BIO_printf (bio_err, "-engine e use engine e, possibly a hardware device.\n"); | 566 | BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n"); |
| 579 | #endif | 567 | #endif |
| 580 | BIO_printf (bio_err, "-passin arg input file pass phrase source\n"); | 568 | BIO_printf(bio_err, "-passin arg input file pass phrase source\n"); |
| 581 | BIO_printf(bio_err, "-rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); | 569 | BIO_printf(bio_err, "-rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); |
| 582 | BIO_printf(bio_err, " load the file (or the files in the directory) into\n"); | 570 | BIO_printf(bio_err, " load the file (or the files in the directory) into\n"); |
| 583 | BIO_printf(bio_err, " the random number generator\n"); | 571 | BIO_printf(bio_err, " the random number generator\n"); |
| 584 | BIO_printf (bio_err, "cert.pem recipient certificate(s) for encryption\n"); | 572 | BIO_printf(bio_err, "cert.pem recipient certificate(s) for encryption\n"); |
| 585 | goto end; | 573 | goto end; |
| 586 | } | 574 | } |
| 587 | |||
| 588 | #ifndef OPENSSL_NO_ENGINE | 575 | #ifndef OPENSSL_NO_ENGINE |
| 589 | e = setup_engine(bio_err, engine, 0); | 576 | e = setup_engine(bio_err, engine, 0); |
| 590 | #endif | 577 | #endif |
| @@ -593,14 +580,12 @@ MAIN(int argc, char **argv) | |||
| 593 | BIO_printf(bio_err, "Error getting password\n"); | 580 | BIO_printf(bio_err, "Error getting password\n"); |
| 594 | goto end; | 581 | goto end; |
| 595 | } | 582 | } |
| 596 | |||
| 597 | if (need_rand) { | 583 | if (need_rand) { |
| 598 | app_RAND_load_file(NULL, bio_err, (inrand != NULL)); | 584 | app_RAND_load_file(NULL, bio_err, (inrand != NULL)); |
| 599 | if (inrand != NULL) | 585 | if (inrand != NULL) |
| 600 | BIO_printf(bio_err, "%ld semi-random bytes loaded\n", | 586 | BIO_printf(bio_err, "%ld semi-random bytes loaded\n", |
| 601 | app_RAND_load_files(inrand)); | 587 | app_RAND_load_files(inrand)); |
| 602 | } | 588 | } |
| 603 | |||
| 604 | ret = 2; | 589 | ret = 2; |
| 605 | 590 | ||
| 606 | if (!(operation & SMIME_SIGNERS)) | 591 | if (!(operation & SMIME_SIGNERS)) |
| @@ -631,12 +616,10 @@ MAIN(int argc, char **argv) | |||
| 631 | goto end; | 616 | goto end; |
| 632 | #endif | 617 | #endif |
| 633 | } | 618 | } |
| 634 | |||
| 635 | if (secret_key && !secret_keyid) { | 619 | if (secret_key && !secret_keyid) { |
| 636 | BIO_printf(bio_err, "No secret key id\n"); | 620 | BIO_printf(bio_err, "No secret key id\n"); |
| 637 | goto end; | 621 | goto end; |
| 638 | } | 622 | } |
| 639 | |||
| 640 | if (*args) | 623 | if (*args) |
| 641 | encerts = sk_X509_new_null(); | 624 | encerts = sk_X509_new_null(); |
| 642 | while (*args) { | 625 | while (*args) { |
| @@ -648,31 +631,27 @@ MAIN(int argc, char **argv) | |||
| 648 | args++; | 631 | args++; |
| 649 | } | 632 | } |
| 650 | } | 633 | } |
| 651 | |||
| 652 | if (certfile) { | 634 | if (certfile) { |
| 653 | if (!(other = load_certs(bio_err, certfile, FORMAT_PEM, NULL, | 635 | if (!(other = load_certs(bio_err, certfile, FORMAT_PEM, NULL, |
| 654 | e, "certificate file"))) { | 636 | e, "certificate file"))) { |
| 655 | ERR_print_errors(bio_err); | 637 | ERR_print_errors(bio_err); |
| 656 | goto end; | 638 | goto end; |
| 657 | } | 639 | } |
| 658 | } | 640 | } |
| 659 | |||
| 660 | if (recipfile && (operation == SMIME_DECRYPT)) { | 641 | if (recipfile && (operation == SMIME_DECRYPT)) { |
| 661 | if (!(recip = load_cert(bio_err, recipfile, FORMAT_PEM, NULL, | 642 | if (!(recip = load_cert(bio_err, recipfile, FORMAT_PEM, NULL, |
| 662 | e, "recipient certificate file"))) { | 643 | e, "recipient certificate file"))) { |
| 663 | ERR_print_errors(bio_err); | 644 | ERR_print_errors(bio_err); |
| 664 | goto end; | 645 | goto end; |
| 665 | } | 646 | } |
| 666 | } | 647 | } |
| 667 | |||
| 668 | if (operation == SMIME_SIGN_RECEIPT) { | 648 | if (operation == SMIME_SIGN_RECEIPT) { |
| 669 | if (!(signer = load_cert(bio_err, signerfile, FORMAT_PEM, NULL, | 649 | if (!(signer = load_cert(bio_err, signerfile, FORMAT_PEM, NULL, |
| 670 | e, "receipt signer certificate file"))) { | 650 | e, "receipt signer certificate file"))) { |
| 671 | ERR_print_errors(bio_err); | 651 | ERR_print_errors(bio_err); |
| 672 | goto end; | 652 | goto end; |
| 673 | } | 653 | } |
| 674 | } | 654 | } |
| 675 | |||
| 676 | if (operation == SMIME_DECRYPT) { | 655 | if (operation == SMIME_DECRYPT) { |
| 677 | if (!keyfile) | 656 | if (!keyfile) |
| 678 | keyfile = recipfile; | 657 | keyfile = recipfile; |
| @@ -688,10 +667,9 @@ MAIN(int argc, char **argv) | |||
| 688 | if (!key) | 667 | if (!key) |
| 689 | goto end; | 668 | goto end; |
| 690 | } | 669 | } |
| 691 | |||
| 692 | if (infile) { | 670 | if (infile) { |
| 693 | if (!(in = BIO_new_file(infile, inmode))) { | 671 | if (!(in = BIO_new_file(infile, inmode))) { |
| 694 | BIO_printf (bio_err, | 672 | BIO_printf(bio_err, |
| 695 | "Can't open input file %s\n", infile); | 673 | "Can't open input file %s\n", infile); |
| 696 | goto end; | 674 | goto end; |
| 697 | } | 675 | } |
| @@ -722,7 +700,7 @@ MAIN(int argc, char **argv) | |||
| 722 | } | 700 | } |
| 723 | } | 701 | } |
| 724 | if (certsoutfile) { | 702 | if (certsoutfile) { |
| 725 | STACK_OF(X509) *allcerts; | 703 | STACK_OF(X509) * allcerts; |
| 726 | allcerts = CMS_get1_certs(cms); | 704 | allcerts = CMS_get1_certs(cms); |
| 727 | if (!save_certs(certsoutfile, allcerts)) { | 705 | if (!save_certs(certsoutfile, allcerts)) { |
| 728 | BIO_printf(bio_err, | 706 | BIO_printf(bio_err, |
| @@ -734,15 +712,13 @@ MAIN(int argc, char **argv) | |||
| 734 | sk_X509_pop_free(allcerts, X509_free); | 712 | sk_X509_pop_free(allcerts, X509_free); |
| 735 | } | 713 | } |
| 736 | } | 714 | } |
| 737 | |||
| 738 | if (rctfile) { | 715 | if (rctfile) { |
| 739 | char *rctmode = (rctformat == FORMAT_ASN1) ? "rb" : "r"; | 716 | char *rctmode = (rctformat == FORMAT_ASN1) ? "rb" : "r"; |
| 740 | if (!(rctin = BIO_new_file(rctfile, rctmode))) { | 717 | if (!(rctin = BIO_new_file(rctfile, rctmode))) { |
| 741 | BIO_printf (bio_err, | 718 | BIO_printf(bio_err, |
| 742 | "Can't open receipt file %s\n", rctfile); | 719 | "Can't open receipt file %s\n", rctfile); |
| 743 | goto end; | 720 | goto end; |
| 744 | } | 721 | } |
| 745 | |||
| 746 | if (rctformat == FORMAT_SMIME) | 722 | if (rctformat == FORMAT_SMIME) |
| 747 | rcms = SMIME_read_CMS(rctin, NULL); | 723 | rcms = SMIME_read_CMS(rctin, NULL); |
| 748 | else if (rctformat == FORMAT_PEM) | 724 | else if (rctformat == FORMAT_PEM) |
| @@ -759,10 +735,9 @@ MAIN(int argc, char **argv) | |||
| 759 | goto end; | 735 | goto end; |
| 760 | } | 736 | } |
| 761 | } | 737 | } |
| 762 | |||
| 763 | if (outfile) { | 738 | if (outfile) { |
| 764 | if (!(out = BIO_new_file(outfile, outmode))) { | 739 | if (!(out = BIO_new_file(outfile, outmode))) { |
| 765 | BIO_printf (bio_err, | 740 | BIO_printf(bio_err, |
| 766 | "Can't open output file %s\n", outfile); | 741 | "Can't open output file %s\n", outfile); |
| 767 | goto end; | 742 | goto end; |
| 768 | } | 743 | } |
| @@ -777,8 +752,6 @@ MAIN(int argc, char **argv) | |||
| 777 | if (vpm) | 752 | if (vpm) |
| 778 | X509_STORE_set1_param(store, vpm); | 753 | X509_STORE_set1_param(store, vpm); |
| 779 | } | 754 | } |
| 780 | |||
| 781 | |||
| 782 | ret = 3; | 755 | ret = 3; |
| 783 | 756 | ||
| 784 | if (operation == SMIME_DATA_CREATE) { | 757 | if (operation == SMIME_DATA_CREATE) { |
| @@ -794,20 +767,20 @@ MAIN(int argc, char **argv) | |||
| 794 | goto end; | 767 | goto end; |
| 795 | if (secret_key) { | 768 | if (secret_key) { |
| 796 | if (!CMS_add0_recipient_key(cms, NID_undef, | 769 | if (!CMS_add0_recipient_key(cms, NID_undef, |
| 797 | secret_key, secret_keylen, | 770 | secret_key, secret_keylen, |
| 798 | secret_keyid, secret_keyidlen, | 771 | secret_keyid, secret_keyidlen, |
| 799 | NULL, NULL, NULL)) | 772 | NULL, NULL, NULL)) |
| 800 | goto end; | 773 | goto end; |
| 801 | /* NULL these because call absorbs them */ | 774 | /* NULL these because call absorbs them */ |
| 802 | secret_key = NULL; | 775 | secret_key = NULL; |
| 803 | secret_keyid = NULL; | 776 | secret_keyid = NULL; |
| 804 | } | 777 | } |
| 805 | if (pwri_pass) { | 778 | if (pwri_pass) { |
| 806 | pwri_tmp = (unsigned char *)BUF_strdup((char *)pwri_pass); | 779 | pwri_tmp = (unsigned char *) BUF_strdup((char *) pwri_pass); |
| 807 | if (!pwri_tmp) | 780 | if (!pwri_tmp) |
| 808 | goto end; | 781 | goto end; |
| 809 | if (!CMS_add0_recipient_password(cms, | 782 | if (!CMS_add0_recipient_password(cms, |
| 810 | -1, NID_undef, NID_undef, | 783 | -1, NID_undef, NID_undef, |
| 811 | pwri_tmp, -1, NULL)) | 784 | pwri_tmp, -1, NULL)) |
| 812 | goto end; | 785 | goto end; |
| 813 | pwri_tmp = NULL; | 786 | pwri_tmp = NULL; |
| @@ -823,7 +796,7 @@ MAIN(int argc, char **argv) | |||
| 823 | 796 | ||
| 824 | } else if (operation == SMIME_SIGN_RECEIPT) { | 797 | } else if (operation == SMIME_SIGN_RECEIPT) { |
| 825 | CMS_ContentInfo *srcms = NULL; | 798 | CMS_ContentInfo *srcms = NULL; |
| 826 | STACK_OF(CMS_SignerInfo) *sis; | 799 | STACK_OF(CMS_SignerInfo) * sis; |
| 827 | CMS_SignerInfo *si; | 800 | CMS_SignerInfo *si; |
| 828 | sis = CMS_get0_SignerInfos(cms); | 801 | sis = CMS_get0_SignerInfos(cms); |
| 829 | if (!sis) | 802 | if (!sis) |
| @@ -836,8 +809,9 @@ MAIN(int argc, char **argv) | |||
| 836 | cms = srcms; | 809 | cms = srcms; |
| 837 | } else if (operation & SMIME_SIGNERS) { | 810 | } else if (operation & SMIME_SIGNERS) { |
| 838 | int i; | 811 | int i; |
| 839 | /* If detached data content we enable streaming if | 812 | /* |
| 840 | * S/MIME output format. | 813 | * If detached data content we enable streaming if S/MIME |
| 814 | * output format. | ||
| 841 | */ | 815 | */ |
| 842 | if (operation == SMIME_SIGN) { | 816 | if (operation == SMIME_SIGN) { |
| 843 | 817 | ||
| @@ -891,12 +865,10 @@ MAIN(int argc, char **argv) | |||
| 891 | goto end; | 865 | goto end; |
| 892 | } | 866 | } |
| 893 | } | 867 | } |
| 894 | |||
| 895 | if (!cms) { | 868 | if (!cms) { |
| 896 | BIO_printf(bio_err, "Error creating CMS structure\n"); | 869 | BIO_printf(bio_err, "Error creating CMS structure\n"); |
| 897 | goto end; | 870 | goto end; |
| 898 | } | 871 | } |
| 899 | |||
| 900 | ret = 4; | 872 | ret = 4; |
| 901 | if (operation == SMIME_DECRYPT) { | 873 | if (operation == SMIME_DECRYPT) { |
| 902 | if (flags & CMS_DEBUG_DECRYPT) | 874 | if (flags & CMS_DEBUG_DECRYPT) |
| @@ -904,14 +876,13 @@ MAIN(int argc, char **argv) | |||
| 904 | 876 | ||
| 905 | if (secret_key) { | 877 | if (secret_key) { |
| 906 | if (!CMS_decrypt_set1_key(cms, | 878 | if (!CMS_decrypt_set1_key(cms, |
| 907 | secret_key, secret_keylen, | 879 | secret_key, secret_keylen, |
| 908 | secret_keyid, secret_keyidlen)) { | 880 | secret_keyid, secret_keyidlen)) { |
| 909 | BIO_puts(bio_err, | 881 | BIO_puts(bio_err, |
| 910 | "Error decrypting CMS using secret key\n"); | 882 | "Error decrypting CMS using secret key\n"); |
| 911 | goto end; | 883 | goto end; |
| 912 | } | 884 | } |
| 913 | } | 885 | } |
| 914 | |||
| 915 | if (key) { | 886 | if (key) { |
| 916 | if (!CMS_decrypt_set1_pkey(cms, key, recip)) { | 887 | if (!CMS_decrypt_set1_pkey(cms, key, recip)) { |
| 917 | BIO_puts(bio_err, | 888 | BIO_puts(bio_err, |
| @@ -919,7 +890,6 @@ MAIN(int argc, char **argv) | |||
| 919 | goto end; | 890 | goto end; |
| 920 | } | 891 | } |
| 921 | } | 892 | } |
| 922 | |||
| 923 | if (pwri_pass) { | 893 | if (pwri_pass) { |
| 924 | if (!CMS_decrypt_set1_password(cms, pwri_pass, -1)) { | 894 | if (!CMS_decrypt_set1_password(cms, pwri_pass, -1)) { |
| 925 | BIO_puts(bio_err, | 895 | BIO_puts(bio_err, |
| @@ -927,7 +897,6 @@ MAIN(int argc, char **argv) | |||
| 927 | goto end; | 897 | goto end; |
| 928 | } | 898 | } |
| 929 | } | 899 | } |
| 930 | |||
| 931 | if (!CMS_decrypt(cms, NULL, NULL, indata, out, flags)) { | 900 | if (!CMS_decrypt(cms, NULL, NULL, indata, out, flags)) { |
| 932 | BIO_printf(bio_err, "Error decrypting CMS structure\n"); | 901 | BIO_printf(bio_err, "Error decrypting CMS structure\n"); |
| 933 | goto end; | 902 | goto end; |
| @@ -947,7 +916,7 @@ MAIN(int argc, char **argv) | |||
| 947 | } | 916 | } |
| 948 | } else if (operation == SMIME_ENCRYPTED_DECRYPT) { | 917 | } else if (operation == SMIME_ENCRYPTED_DECRYPT) { |
| 949 | if (!CMS_EncryptedData_decrypt(cms, secret_key, secret_keylen, | 918 | if (!CMS_EncryptedData_decrypt(cms, secret_key, secret_keylen, |
| 950 | indata, out, flags)) | 919 | indata, out, flags)) |
| 951 | goto end; | 920 | goto end; |
| 952 | } else if (operation == SMIME_VERIFY) { | 921 | } else if (operation == SMIME_VERIFY) { |
| 953 | if (CMS_verify(cms, other, store, indata, out, flags) > 0) | 922 | if (CMS_verify(cms, other, store, indata, out, flags) > 0) |
| @@ -959,7 +928,7 @@ MAIN(int argc, char **argv) | |||
| 959 | goto end; | 928 | goto end; |
| 960 | } | 929 | } |
| 961 | if (signerfile) { | 930 | if (signerfile) { |
| 962 | STACK_OF(X509) *signers; | 931 | STACK_OF(X509) * signers; |
| 963 | signers = CMS_get0_signers(cms); | 932 | signers = CMS_get0_signers(cms); |
| 964 | if (!save_certs(signerfile, signers)) { | 933 | if (!save_certs(signerfile, signers)) { |
| 965 | BIO_printf(bio_err, | 934 | BIO_printf(bio_err, |
| @@ -1053,7 +1022,7 @@ end: | |||
| 1053 | } | 1022 | } |
| 1054 | 1023 | ||
| 1055 | static int | 1024 | static int |
| 1056 | save_certs(char *signerfile, STACK_OF(X509) *signers) | 1025 | save_certs(char *signerfile, STACK_OF(X509) * signers) |
| 1057 | { | 1026 | { |
| 1058 | int i; | 1027 | int i; |
| 1059 | BIO *tmp; | 1028 | BIO *tmp; |
| @@ -1072,7 +1041,7 @@ save_certs(char *signerfile, STACK_OF(X509) *signers) | |||
| 1072 | /* Minimal callback just to output policy info (if any) */ | 1041 | /* Minimal callback just to output policy info (if any) */ |
| 1073 | 1042 | ||
| 1074 | static int | 1043 | static int |
| 1075 | cms_cb(int ok, X509_STORE_CTX *ctx) | 1044 | cms_cb(int ok, X509_STORE_CTX * ctx) |
| 1076 | { | 1045 | { |
| 1077 | int error; | 1046 | int error; |
| 1078 | 1047 | ||
| @@ -1090,9 +1059,9 @@ cms_cb(int ok, X509_STORE_CTX *ctx) | |||
| 1090 | } | 1059 | } |
| 1091 | 1060 | ||
| 1092 | static void | 1061 | static void |
| 1093 | gnames_stack_print(BIO *out, STACK_OF(GENERAL_NAMES) *gns) | 1062 | gnames_stack_print(BIO * out, STACK_OF(GENERAL_NAMES) * gns) |
| 1094 | { | 1063 | { |
| 1095 | STACK_OF(GENERAL_NAME) *gens; | 1064 | STACK_OF(GENERAL_NAME) * gens; |
| 1096 | GENERAL_NAME *gen; | 1065 | GENERAL_NAME *gen; |
| 1097 | int i, j; | 1066 | int i, j; |
| 1098 | for (i = 0; i < sk_GENERAL_NAMES_num(gns); i++) { | 1067 | for (i = 0; i < sk_GENERAL_NAMES_num(gns); i++) { |
| @@ -1108,13 +1077,13 @@ gnames_stack_print(BIO *out, STACK_OF(GENERAL_NAMES) *gns) | |||
| 1108 | } | 1077 | } |
| 1109 | 1078 | ||
| 1110 | static void | 1079 | static void |
| 1111 | receipt_request_print(BIO *out, CMS_ContentInfo *cms) | 1080 | receipt_request_print(BIO * out, CMS_ContentInfo * cms) |
| 1112 | { | 1081 | { |
| 1113 | STACK_OF(CMS_SignerInfo) *sis; | 1082 | STACK_OF(CMS_SignerInfo) * sis; |
| 1114 | CMS_SignerInfo *si; | 1083 | CMS_SignerInfo *si; |
| 1115 | CMS_ReceiptRequest *rr; | 1084 | CMS_ReceiptRequest *rr; |
| 1116 | int allorfirst; | 1085 | int allorfirst; |
| 1117 | STACK_OF(GENERAL_NAMES) *rto, *rlist; | 1086 | STACK_OF(GENERAL_NAMES) * rto, *rlist; |
| 1118 | ASN1_STRING *scid; | 1087 | ASN1_STRING *scid; |
| 1119 | int i, rv; | 1088 | int i, rv; |
| 1120 | sis = CMS_get0_SignerInfos(cms); | 1089 | sis = CMS_get0_SignerInfos(cms); |
| @@ -1134,7 +1103,7 @@ receipt_request_print(BIO *out, CMS_ContentInfo *cms) | |||
| 1134 | &rlist, &rto); | 1103 | &rlist, &rto); |
| 1135 | BIO_puts(out, " Signed Content ID:\n"); | 1104 | BIO_puts(out, " Signed Content ID:\n"); |
| 1136 | idlen = ASN1_STRING_length(scid); | 1105 | idlen = ASN1_STRING_length(scid); |
| 1137 | id = (char *)ASN1_STRING_data(scid); | 1106 | id = (char *) ASN1_STRING_data(scid); |
| 1138 | BIO_dump_indent(out, id, idlen, 4); | 1107 | BIO_dump_indent(out, id, idlen, 4); |
| 1139 | BIO_puts(out, " Receipts From"); | 1108 | BIO_puts(out, " Receipts From"); |
| 1140 | if (rlist) { | 1109 | if (rlist) { |
| @@ -1155,10 +1124,10 @@ receipt_request_print(BIO *out, CMS_ContentInfo *cms) | |||
| 1155 | } | 1124 | } |
| 1156 | 1125 | ||
| 1157 | static | 1126 | static |
| 1158 | STACK_OF(GENERAL_NAMES) *make_names_stack(STACK_OF(OPENSSL_STRING) *ns) | 1127 | STACK_OF(GENERAL_NAMES) * make_names_stack(STACK_OF(OPENSSL_STRING) * ns) |
| 1159 | { | 1128 | { |
| 1160 | int i; | 1129 | int i; |
| 1161 | STACK_OF(GENERAL_NAMES) *ret; | 1130 | STACK_OF(GENERAL_NAMES) * ret; |
| 1162 | GENERAL_NAMES *gens = NULL; | 1131 | GENERAL_NAMES *gens = NULL; |
| 1163 | GENERAL_NAME *gen = NULL; | 1132 | GENERAL_NAME *gen = NULL; |
| 1164 | ret = sk_GENERAL_NAMES_new_null(); | 1133 | ret = sk_GENERAL_NAMES_new_null(); |
| @@ -1194,10 +1163,10 @@ err: | |||
| 1194 | 1163 | ||
| 1195 | 1164 | ||
| 1196 | static CMS_ReceiptRequest * | 1165 | static CMS_ReceiptRequest * |
| 1197 | make_receipt_request(STACK_OF(OPENSSL_STRING) *rr_to, int rr_allorfirst, | 1166 | make_receipt_request(STACK_OF(OPENSSL_STRING) * rr_to, int rr_allorfirst, |
| 1198 | STACK_OF(OPENSSL_STRING) *rr_from) | 1167 | STACK_OF(OPENSSL_STRING) * rr_from) |
| 1199 | { | 1168 | { |
| 1200 | STACK_OF(GENERAL_NAMES) *rct_to, *rct_from; | 1169 | STACK_OF(GENERAL_NAMES) * rct_to, *rct_from; |
| 1201 | CMS_ReceiptRequest *rr; | 1170 | CMS_ReceiptRequest *rr; |
| 1202 | rct_to = make_names_stack(rr_to); | 1171 | rct_to = make_names_stack(rr_to); |
| 1203 | if (!rct_to) | 1172 | if (!rct_to) |
diff --git a/src/lib/libssl/src/apps/crl.c b/src/lib/libssl/src/apps/crl.c index c89b8818a8..a4a4d7d296 100644 --- a/src/lib/libssl/src/apps/crl.c +++ b/src/lib/libssl/src/apps/crl.c | |||
| @@ -111,7 +111,8 @@ MAIN(int argc, char **argv) | |||
| 111 | BIO *out = NULL; | 111 | BIO *out = NULL; |
| 112 | int informat, outformat; | 112 | int informat, outformat; |
| 113 | char *infile = NULL, *outfile = NULL; | 113 | char *infile = NULL, *outfile = NULL; |
| 114 | int hash = 0, issuer = 0, lastupdate = 0, nextupdate = 0, noout = 0, text = 0; | 114 | int hash = 0, issuer = 0, lastupdate = 0, nextupdate = 0, noout = 0, |
| 115 | text = 0; | ||
| 115 | #ifndef OPENSSL_NO_MD5 | 116 | #ifndef OPENSSL_NO_MD5 |
| 116 | int hash_old = 0; | 117 | int hash_old = 0; |
| 117 | #endif | 118 | #endif |
| @@ -129,16 +130,15 @@ MAIN(int argc, char **argv) | |||
| 129 | 130 | ||
| 130 | if (bio_err == NULL) | 131 | if (bio_err == NULL) |
| 131 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 132 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 132 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 133 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 133 | 134 | ||
| 134 | if (!load_config(bio_err, NULL)) | 135 | if (!load_config(bio_err, NULL)) |
| 135 | goto end; | 136 | goto end; |
| 136 | 137 | ||
| 137 | if (bio_out == NULL) | 138 | if (bio_out == NULL) |
| 138 | if ((bio_out = BIO_new(BIO_s_file())) != NULL) { | 139 | if ((bio_out = BIO_new(BIO_s_file())) != NULL) { |
| 139 | BIO_set_fp(bio_out, stdout, BIO_NOCLOSE); | 140 | BIO_set_fp(bio_out, stdout, BIO_NOCLOSE); |
| 140 | } | 141 | } |
| 141 | |||
| 142 | informat = FORMAT_PEM; | 142 | informat = FORMAT_PEM; |
| 143 | outformat = FORMAT_PEM; | 143 | outformat = FORMAT_PEM; |
| 144 | 144 | ||
| @@ -150,7 +150,9 @@ MAIN(int argc, char **argv) | |||
| 150 | if (strcmp(*argv, "-p") == 0) { | 150 | if (strcmp(*argv, "-p") == 0) { |
| 151 | if (--argc < 1) | 151 | if (--argc < 1) |
| 152 | goto bad; | 152 | goto bad; |
| 153 | if (!args_from_file(++argv,Nargc,Nargv)) { goto end; }*/ | 153 | if (!args_from_file(++argv, Nargc, Nargv)) { |
| 154 | goto end; | ||
| 155 | } */ | ||
| 154 | } | 156 | } |
| 155 | #endif | 157 | #endif |
| 156 | if (strcmp(*argv, "-inform") == 0) { | 158 | if (strcmp(*argv, "-inform") == 0) { |
| @@ -164,11 +166,11 @@ MAIN(int argc, char **argv) | |||
| 164 | } else if (strcmp(*argv, "-in") == 0) { | 166 | } else if (strcmp(*argv, "-in") == 0) { |
| 165 | if (--argc < 1) | 167 | if (--argc < 1) |
| 166 | goto bad; | 168 | goto bad; |
| 167 | infile= *(++argv); | 169 | infile = *(++argv); |
| 168 | } else if (strcmp(*argv, "-out") == 0) { | 170 | } else if (strcmp(*argv, "-out") == 0) { |
| 169 | if (--argc < 1) | 171 | if (--argc < 1) |
| 170 | goto bad; | 172 | goto bad; |
| 171 | outfile= *(++argv); | 173 | outfile = *(++argv); |
| 172 | } else if (strcmp(*argv, "-CApath") == 0) { | 174 | } else if (strcmp(*argv, "-CApath") == 0) { |
| 173 | if (--argc < 1) | 175 | if (--argc < 1) |
| 174 | goto bad; | 176 | goto bad; |
| @@ -184,10 +186,10 @@ MAIN(int argc, char **argv) | |||
| 184 | else if (strcmp(*argv, "-text") == 0) | 186 | else if (strcmp(*argv, "-text") == 0) |
| 185 | text = 1; | 187 | text = 1; |
| 186 | else if (strcmp(*argv, "-hash") == 0) | 188 | else if (strcmp(*argv, "-hash") == 0) |
| 187 | hash= ++num; | 189 | hash = ++num; |
| 188 | #ifndef OPENSSL_NO_MD5 | 190 | #ifndef OPENSSL_NO_MD5 |
| 189 | else if (strcmp(*argv, "-hash_old") == 0) | 191 | else if (strcmp(*argv, "-hash_old") == 0) |
| 190 | hash_old= ++num; | 192 | hash_old = ++num; |
| 191 | #endif | 193 | #endif |
| 192 | else if (strcmp(*argv, "-nameopt") == 0) { | 194 | else if (strcmp(*argv, "-nameopt") == 0) { |
| 193 | if (--argc < 1) | 195 | if (--argc < 1) |
| @@ -195,17 +197,17 @@ MAIN(int argc, char **argv) | |||
| 195 | if (!set_name_ex(&nmflag, *(++argv))) | 197 | if (!set_name_ex(&nmflag, *(++argv))) |
| 196 | goto bad; | 198 | goto bad; |
| 197 | } else if (strcmp(*argv, "-issuer") == 0) | 199 | } else if (strcmp(*argv, "-issuer") == 0) |
| 198 | issuer= ++num; | 200 | issuer = ++num; |
| 199 | else if (strcmp(*argv, "-lastupdate") == 0) | 201 | else if (strcmp(*argv, "-lastupdate") == 0) |
| 200 | lastupdate= ++num; | 202 | lastupdate = ++num; |
| 201 | else if (strcmp(*argv, "-nextupdate") == 0) | 203 | else if (strcmp(*argv, "-nextupdate") == 0) |
| 202 | nextupdate= ++num; | 204 | nextupdate = ++num; |
| 203 | else if (strcmp(*argv, "-noout") == 0) | 205 | else if (strcmp(*argv, "-noout") == 0) |
| 204 | noout= ++num; | 206 | noout = ++num; |
| 205 | else if (strcmp(*argv, "-fingerprint") == 0) | 207 | else if (strcmp(*argv, "-fingerprint") == 0) |
| 206 | fingerprint= ++num; | 208 | fingerprint = ++num; |
| 207 | else if (strcmp(*argv, "-crlnumber") == 0) | 209 | else if (strcmp(*argv, "-crlnumber") == 0) |
| 208 | crlnumber= ++num; | 210 | crlnumber = ++num; |
| 209 | else if ((md_alg = EVP_get_digestbyname(*argv + 1))) { | 211 | else if ((md_alg = EVP_get_digestbyname(*argv + 1))) { |
| 210 | /* ok */ | 212 | /* ok */ |
| 211 | digest = md_alg; | 213 | digest = md_alg; |
| @@ -224,13 +226,11 @@ bad: | |||
| 224 | BIO_printf(bio_err, "%s", *pp); | 226 | BIO_printf(bio_err, "%s", *pp); |
| 225 | goto end; | 227 | goto end; |
| 226 | } | 228 | } |
| 227 | |||
| 228 | ERR_load_crypto_strings(); | 229 | ERR_load_crypto_strings(); |
| 229 | x = load_crl(infile, informat); | 230 | x = load_crl(infile, informat); |
| 230 | if (x == NULL) { | 231 | if (x == NULL) { |
| 231 | goto end; | 232 | goto end; |
| 232 | } | 233 | } |
| 233 | |||
| 234 | if (do_ver) { | 234 | if (do_ver) { |
| 235 | store = X509_STORE_new(); | 235 | store = X509_STORE_new(); |
| 236 | lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file()); | 236 | lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file()); |
| @@ -251,7 +251,6 @@ bad: | |||
| 251 | "Error initialising X509 store\n"); | 251 | "Error initialising X509 store\n"); |
| 252 | goto end; | 252 | goto end; |
| 253 | } | 253 | } |
| 254 | |||
| 255 | i = X509_STORE_get_by_subject(&ctx, X509_LU_X509, | 254 | i = X509_STORE_get_by_subject(&ctx, X509_LU_X509, |
| 256 | X509_CRL_get_issuer(x), &xobj); | 255 | X509_CRL_get_issuer(x), &xobj); |
| 257 | if (i <= 0) { | 256 | if (i <= 0) { |
| @@ -275,7 +274,6 @@ bad: | |||
| 275 | else | 274 | else |
| 276 | BIO_printf(bio_err, "verify OK\n"); | 275 | BIO_printf(bio_err, "verify OK\n"); |
| 277 | } | 276 | } |
| 278 | |||
| 279 | if (num) { | 277 | if (num) { |
| 280 | for (i = 1; i <= num; i++) { | 278 | for (i = 1; i <= num; i++) { |
| 281 | if (issuer == i) { | 279 | if (issuer == i) { |
| @@ -300,8 +298,8 @@ bad: | |||
| 300 | #ifndef OPENSSL_NO_MD5 | 298 | #ifndef OPENSSL_NO_MD5 |
| 301 | if (hash_old == i) { | 299 | if (hash_old == i) { |
| 302 | BIO_printf(bio_out, "%08lx\n", | 300 | BIO_printf(bio_out, "%08lx\n", |
| 303 | X509_NAME_hash_old( | 301 | X509_NAME_hash_old( |
| 304 | X509_CRL_get_issuer(x))); | 302 | X509_CRL_get_issuer(x))); |
| 305 | } | 303 | } |
| 306 | #endif | 304 | #endif |
| 307 | if (lastupdate == i) { | 305 | if (lastupdate == i) { |
| @@ -330,20 +328,18 @@ bad: | |||
| 330 | } | 328 | } |
| 331 | BIO_printf(bio_out, "%s Fingerprint=", | 329 | BIO_printf(bio_out, "%s Fingerprint=", |
| 332 | OBJ_nid2sn(EVP_MD_type(digest))); | 330 | OBJ_nid2sn(EVP_MD_type(digest))); |
| 333 | for (j = 0; j < (int)n; j++) { | 331 | for (j = 0; j < (int) n; j++) { |
| 334 | BIO_printf(bio_out, "%02X%c", md[j], | 332 | BIO_printf(bio_out, "%02X%c", md[j], |
| 335 | (j + 1 == (int)n) ? '\n' : ':'); | 333 | (j + 1 == (int) n) ? '\n' : ':'); |
| 336 | } | 334 | } |
| 337 | } | 335 | } |
| 338 | } | 336 | } |
| 339 | } | 337 | } |
| 340 | |||
| 341 | out = BIO_new(BIO_s_file()); | 338 | out = BIO_new(BIO_s_file()); |
| 342 | if (out == NULL) { | 339 | if (out == NULL) { |
| 343 | ERR_print_errors(bio_err); | 340 | ERR_print_errors(bio_err); |
| 344 | goto end; | 341 | goto end; |
| 345 | } | 342 | } |
| 346 | |||
| 347 | if (outfile == NULL) { | 343 | if (outfile == NULL) { |
| 348 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 344 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 349 | } else { | 345 | } else { |
| @@ -360,9 +356,8 @@ bad: | |||
| 360 | ret = 0; | 356 | ret = 0; |
| 361 | goto end; | 357 | goto end; |
| 362 | } | 358 | } |
| 363 | |||
| 364 | if (outformat == FORMAT_ASN1) | 359 | if (outformat == FORMAT_ASN1) |
| 365 | i = (int)i2d_X509_CRL_bio(out, x); | 360 | i = (int) i2d_X509_CRL_bio(out, x); |
| 366 | else if (outformat == FORMAT_PEM) | 361 | else if (outformat == FORMAT_PEM) |
| 367 | i = PEM_write_bio_X509_CRL(out, x); | 362 | i = PEM_write_bio_X509_CRL(out, x); |
| 368 | else { | 363 | else { |
| @@ -385,7 +380,7 @@ end: | |||
| 385 | X509_STORE_free(store); | 380 | X509_STORE_free(store); |
| 386 | } | 381 | } |
| 387 | apps_shutdown(); | 382 | apps_shutdown(); |
| 388 | return(ret); | 383 | return (ret); |
| 389 | } | 384 | } |
| 390 | 385 | ||
| 391 | static X509_CRL * | 386 | static X509_CRL * |
| @@ -399,7 +394,6 @@ load_crl(char *infile, int format) | |||
| 399 | ERR_print_errors(bio_err); | 394 | ERR_print_errors(bio_err); |
| 400 | goto end; | 395 | goto end; |
| 401 | } | 396 | } |
| 402 | |||
| 403 | if (infile == NULL) | 397 | if (infile == NULL) |
| 404 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 398 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 405 | else { | 399 | else { |
| @@ -421,7 +415,6 @@ load_crl(char *infile, int format) | |||
| 421 | ERR_print_errors(bio_err); | 415 | ERR_print_errors(bio_err); |
| 422 | goto end; | 416 | goto end; |
| 423 | } | 417 | } |
| 424 | |||
| 425 | end: | 418 | end: |
| 426 | BIO_free(in); | 419 | BIO_free(in); |
| 427 | return (x); | 420 | return (x); |
diff --git a/src/lib/libssl/src/apps/crl2p7.c b/src/lib/libssl/src/apps/crl2p7.c index ce782742c4..b98260d172 100644 --- a/src/lib/libssl/src/apps/crl2p7.c +++ b/src/lib/libssl/src/apps/crl2p7.c | |||
| @@ -71,7 +71,7 @@ | |||
| 71 | #include <openssl/pem.h> | 71 | #include <openssl/pem.h> |
| 72 | #include <openssl/objects.h> | 72 | #include <openssl/objects.h> |
| 73 | 73 | ||
| 74 | static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile); | 74 | static int add_certs_from_file(STACK_OF(X509) * stack, char *certfile); |
| 75 | #undef PROG | 75 | #undef PROG |
| 76 | #define PROG crl2pkcs7_main | 76 | #define PROG crl2pkcs7_main |
| 77 | 77 | ||
| @@ -93,16 +93,16 @@ MAIN(int argc, char **argv) | |||
| 93 | PKCS7 *p7 = NULL; | 93 | PKCS7 *p7 = NULL; |
| 94 | PKCS7_SIGNED *p7s = NULL; | 94 | PKCS7_SIGNED *p7s = NULL; |
| 95 | X509_CRL *crl = NULL; | 95 | X509_CRL *crl = NULL; |
| 96 | STACK_OF(OPENSSL_STRING) *certflst = NULL; | 96 | STACK_OF(OPENSSL_STRING) * certflst = NULL; |
| 97 | STACK_OF(X509_CRL) *crl_stack = NULL; | 97 | STACK_OF(X509_CRL) * crl_stack = NULL; |
| 98 | STACK_OF(X509) *cert_stack = NULL; | 98 | STACK_OF(X509) * cert_stack = NULL; |
| 99 | int ret = 1, nocrl = 0; | 99 | int ret = 1, nocrl = 0; |
| 100 | 100 | ||
| 101 | apps_startup(); | 101 | apps_startup(); |
| 102 | 102 | ||
| 103 | if (bio_err == NULL) | 103 | if (bio_err == NULL) |
| 104 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 104 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 105 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 105 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 106 | 106 | ||
| 107 | infile = NULL; | 107 | infile = NULL; |
| 108 | outfile = NULL; | 108 | outfile = NULL; |
| @@ -124,18 +124,19 @@ MAIN(int argc, char **argv) | |||
| 124 | } else if (strcmp(*argv, "-in") == 0) { | 124 | } else if (strcmp(*argv, "-in") == 0) { |
| 125 | if (--argc < 1) | 125 | if (--argc < 1) |
| 126 | goto bad; | 126 | goto bad; |
| 127 | infile= *(++argv); | 127 | infile = *(++argv); |
| 128 | } else if (strcmp(*argv, "-nocrl") == 0) { | 128 | } else if (strcmp(*argv, "-nocrl") == 0) { |
| 129 | nocrl = 1; | 129 | nocrl = 1; |
| 130 | } else if (strcmp(*argv, "-out") == 0) { | 130 | } else if (strcmp(*argv, "-out") == 0) { |
| 131 | if (--argc < 1) | 131 | if (--argc < 1) |
| 132 | goto bad; | 132 | goto bad; |
| 133 | outfile= *(++argv); | 133 | outfile = *(++argv); |
| 134 | } else if (strcmp(*argv, "-certfile") == 0) { | 134 | } else if (strcmp(*argv, "-certfile") == 0) { |
| 135 | if (--argc < 1) | 135 | if (--argc < 1) |
| 136 | goto bad; | 136 | goto bad; |
| 137 | if (!certflst) certflst = sk_OPENSSL_STRING_new_null(); | 137 | if (!certflst) |
| 138 | sk_OPENSSL_STRING_push(certflst, *(++argv)); | 138 | certflst = sk_OPENSSL_STRING_new_null(); |
| 139 | sk_OPENSSL_STRING_push(certflst, *(++argv)); | ||
| 139 | } else { | 140 | } else { |
| 140 | BIO_printf(bio_err, "unknown option %s\n", *argv); | 141 | BIO_printf(bio_err, "unknown option %s\n", *argv); |
| 141 | badops = 1; | 142 | badops = 1; |
| @@ -159,7 +160,6 @@ bad: | |||
| 159 | ret = 1; | 160 | ret = 1; |
| 160 | goto end; | 161 | goto end; |
| 161 | } | 162 | } |
| 162 | |||
| 163 | ERR_load_crypto_strings(); | 163 | ERR_load_crypto_strings(); |
| 164 | 164 | ||
| 165 | in = BIO_new(BIO_s_file()); | 165 | in = BIO_new(BIO_s_file()); |
| @@ -168,7 +168,6 @@ bad: | |||
| 168 | ERR_print_errors(bio_err); | 168 | ERR_print_errors(bio_err); |
| 169 | goto end; | 169 | goto end; |
| 170 | } | 170 | } |
| 171 | |||
| 172 | if (!nocrl) { | 171 | if (!nocrl) { |
| 173 | if (infile == NULL) | 172 | if (infile == NULL) |
| 174 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 173 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| @@ -193,7 +192,6 @@ bad: | |||
| 193 | goto end; | 192 | goto end; |
| 194 | } | 193 | } |
| 195 | } | 194 | } |
| 196 | |||
| 197 | if ((p7 = PKCS7_new()) == NULL) | 195 | if ((p7 = PKCS7_new()) == NULL) |
| 198 | goto end; | 196 | goto end; |
| 199 | if ((p7s = PKCS7_SIGNED_new()) == NULL) | 197 | if ((p7s = PKCS7_SIGNED_new()) == NULL) |
| @@ -209,21 +207,21 @@ bad: | |||
| 209 | p7s->crl = crl_stack; | 207 | p7s->crl = crl_stack; |
| 210 | if (crl != NULL) { | 208 | if (crl != NULL) { |
| 211 | sk_X509_CRL_push(crl_stack, crl); | 209 | sk_X509_CRL_push(crl_stack, crl); |
| 212 | crl=NULL; /* now part of p7 for freeing */ | 210 | crl = NULL; /* now part of p7 for freeing */ |
| 213 | } | 211 | } |
| 214 | |||
| 215 | if ((cert_stack = sk_X509_new_null()) == NULL) | 212 | if ((cert_stack = sk_X509_new_null()) == NULL) |
| 216 | goto end; | 213 | goto end; |
| 217 | p7s->cert = cert_stack; | 214 | p7s->cert = cert_stack; |
| 218 | 215 | ||
| 219 | if (certflst) for (i = 0; i < sk_OPENSSL_STRING_num(certflst); i++) { | 216 | if (certflst) |
| 220 | certfile = sk_OPENSSL_STRING_value(certflst, i); | 217 | for (i = 0; i < sk_OPENSSL_STRING_num(certflst); i++) { |
| 221 | if (add_certs_from_file(cert_stack, certfile) < 0) { | 218 | certfile = sk_OPENSSL_STRING_value(certflst, i); |
| 222 | BIO_printf(bio_err, "error loading certificates\n"); | 219 | if (add_certs_from_file(cert_stack, certfile) < 0) { |
| 223 | ERR_print_errors(bio_err); | 220 | BIO_printf(bio_err, "error loading certificates\n"); |
| 224 | goto end; | 221 | ERR_print_errors(bio_err); |
| 222 | goto end; | ||
| 223 | } | ||
| 225 | } | 224 | } |
| 226 | } | ||
| 227 | 225 | ||
| 228 | sk_OPENSSL_STRING_free(certflst); | 226 | sk_OPENSSL_STRING_free(certflst); |
| 229 | 227 | ||
| @@ -262,7 +260,7 @@ end: | |||
| 262 | X509_CRL_free(crl); | 260 | X509_CRL_free(crl); |
| 263 | 261 | ||
| 264 | apps_shutdown(); | 262 | apps_shutdown(); |
| 265 | return(ret); | 263 | return (ret); |
| 266 | } | 264 | } |
| 267 | 265 | ||
| 268 | /* | 266 | /* |
| @@ -276,12 +274,12 @@ end: | |||
| 276 | *---------------------------------------------------------------------- | 274 | *---------------------------------------------------------------------- |
| 277 | */ | 275 | */ |
| 278 | static int | 276 | static int |
| 279 | add_certs_from_file(STACK_OF(X509) *stack, char *certfile) | 277 | add_certs_from_file(STACK_OF(X509) * stack, char *certfile) |
| 280 | { | 278 | { |
| 281 | BIO *in = NULL; | 279 | BIO *in = NULL; |
| 282 | int count = 0; | 280 | int count = 0; |
| 283 | int ret = -1; | 281 | int ret = -1; |
| 284 | STACK_OF(X509_INFO) *sk = NULL; | 282 | STACK_OF(X509_INFO) * sk = NULL; |
| 285 | X509_INFO *xi; | 283 | X509_INFO *xi; |
| 286 | 284 | ||
| 287 | in = BIO_new(BIO_s_file()); | 285 | in = BIO_new(BIO_s_file()); |
| @@ -289,14 +287,12 @@ add_certs_from_file(STACK_OF(X509) *stack, char *certfile) | |||
| 289 | BIO_printf(bio_err, "error opening the file, %s\n", certfile); | 287 | BIO_printf(bio_err, "error opening the file, %s\n", certfile); |
| 290 | goto end; | 288 | goto end; |
| 291 | } | 289 | } |
| 292 | |||
| 293 | /* This loads from a file, a stack of x509/crl/pkey sets */ | 290 | /* This loads from a file, a stack of x509/crl/pkey sets */ |
| 294 | sk = PEM_X509_INFO_read_bio(in, NULL, NULL, NULL); | 291 | sk = PEM_X509_INFO_read_bio(in, NULL, NULL, NULL); |
| 295 | if (sk == NULL) { | 292 | if (sk == NULL) { |
| 296 | BIO_printf(bio_err, "error reading the file, %s\n", certfile); | 293 | BIO_printf(bio_err, "error reading the file, %s\n", certfile); |
| 297 | goto end; | 294 | goto end; |
| 298 | } | 295 | } |
| 299 | |||
| 300 | /* scan over it and pull out the CRL's */ | 296 | /* scan over it and pull out the CRL's */ |
| 301 | while (sk_X509_INFO_num(sk)) { | 297 | while (sk_X509_INFO_num(sk)) { |
| 302 | xi = sk_X509_INFO_shift(sk); | 298 | xi = sk_X509_INFO_shift(sk); |
diff --git a/src/lib/libssl/src/apps/dgst.c b/src/lib/libssl/src/apps/dgst.c index 08641f1c5c..a68e3ce562 100644 --- a/src/lib/libssl/src/apps/dgst.c +++ b/src/lib/libssl/src/apps/dgst.c | |||
| @@ -75,13 +75,13 @@ | |||
| 75 | #define PROG dgst_main | 75 | #define PROG dgst_main |
| 76 | 76 | ||
| 77 | int | 77 | int |
| 78 | do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, | 78 | do_fp(BIO * out, unsigned char *buf, BIO * bp, int sep, int binout, |
| 79 | EVP_PKEY *key, unsigned char *sigin, int siglen, | 79 | EVP_PKEY * key, unsigned char *sigin, int siglen, |
| 80 | const char *sig_name, const char *md_name, | 80 | const char *sig_name, const char *md_name, |
| 81 | const char *file, BIO *bmd); | 81 | const char *file, BIO * bmd); |
| 82 | 82 | ||
| 83 | static void | 83 | static void |
| 84 | list_md_fn(const EVP_MD *m, const char *from, const char *to, void *arg) | 84 | list_md_fn(const EVP_MD * m, const char *from, const char *to, void *arg) |
| 85 | { | 85 | { |
| 86 | const char *mname; | 86 | const char *mname; |
| 87 | /* Skip aliases */ | 87 | /* Skip aliases */ |
| @@ -130,17 +130,17 @@ MAIN(int argc, char **argv) | |||
| 130 | char *hmac_key = NULL; | 130 | char *hmac_key = NULL; |
| 131 | char *mac_name = NULL; | 131 | char *mac_name = NULL; |
| 132 | int non_fips_allow = 0; | 132 | int non_fips_allow = 0; |
| 133 | STACK_OF(OPENSSL_STRING) *sigopts = NULL, *macopts = NULL; | 133 | STACK_OF(OPENSSL_STRING) * sigopts = NULL, *macopts = NULL; |
| 134 | 134 | ||
| 135 | apps_startup(); | 135 | apps_startup(); |
| 136 | 136 | ||
| 137 | if ((buf = (unsigned char *)malloc(BUFSIZE)) == NULL) { | 137 | if ((buf = (unsigned char *) malloc(BUFSIZE)) == NULL) { |
| 138 | BIO_printf(bio_err, "out of memory\n"); | 138 | BIO_printf(bio_err, "out of memory\n"); |
| 139 | goto end; | 139 | goto end; |
| 140 | } | 140 | } |
| 141 | if (bio_err == NULL) | 141 | if (bio_err == NULL) |
| 142 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 142 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 143 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 143 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 144 | 144 | ||
| 145 | if (!load_config(bio_err, NULL)) | 145 | if (!load_config(bio_err, NULL)) |
| 146 | goto end; | 146 | goto end; |
| @@ -162,34 +162,34 @@ MAIN(int argc, char **argv) | |||
| 162 | else if (strcmp(*argv, "-rand") == 0) { | 162 | else if (strcmp(*argv, "-rand") == 0) { |
| 163 | if (--argc < 1) | 163 | if (--argc < 1) |
| 164 | break; | 164 | break; |
| 165 | randfile=*(++argv); | 165 | randfile = *(++argv); |
| 166 | } else if (strcmp(*argv, "-out") == 0) { | 166 | } else if (strcmp(*argv, "-out") == 0) { |
| 167 | if (--argc < 1) | 167 | if (--argc < 1) |
| 168 | break; | 168 | break; |
| 169 | outfile=*(++argv); | 169 | outfile = *(++argv); |
| 170 | } else if (strcmp(*argv, "-sign") == 0) { | 170 | } else if (strcmp(*argv, "-sign") == 0) { |
| 171 | if (--argc < 1) | 171 | if (--argc < 1) |
| 172 | break; | 172 | break; |
| 173 | keyfile=*(++argv); | 173 | keyfile = *(++argv); |
| 174 | } else if (!strcmp(*argv, "-passin")) { | 174 | } else if (!strcmp(*argv, "-passin")) { |
| 175 | if (--argc < 1) | 175 | if (--argc < 1) |
| 176 | break; | 176 | break; |
| 177 | passargin=*++argv; | 177 | passargin = *++argv; |
| 178 | } else if (strcmp(*argv, "-verify") == 0) { | 178 | } else if (strcmp(*argv, "-verify") == 0) { |
| 179 | if (--argc < 1) | 179 | if (--argc < 1) |
| 180 | break; | 180 | break; |
| 181 | keyfile=*(++argv); | 181 | keyfile = *(++argv); |
| 182 | want_pub = 1; | 182 | want_pub = 1; |
| 183 | do_verify = 1; | 183 | do_verify = 1; |
| 184 | } else if (strcmp(*argv, "-prverify") == 0) { | 184 | } else if (strcmp(*argv, "-prverify") == 0) { |
| 185 | if (--argc < 1) | 185 | if (--argc < 1) |
| 186 | break; | 186 | break; |
| 187 | keyfile=*(++argv); | 187 | keyfile = *(++argv); |
| 188 | do_verify = 1; | 188 | do_verify = 1; |
| 189 | } else if (strcmp(*argv, "-signature") == 0) { | 189 | } else if (strcmp(*argv, "-signature") == 0) { |
| 190 | if (--argc < 1) | 190 | if (--argc < 1) |
| 191 | break; | 191 | break; |
| 192 | sigfile=*(++argv); | 192 | sigfile = *(++argv); |
| 193 | } else if (strcmp(*argv, "-keyform") == 0) { | 193 | } else if (strcmp(*argv, "-keyform") == 0) { |
| 194 | if (--argc < 1) | 194 | if (--argc < 1) |
| 195 | break; | 195 | break; |
| @@ -199,7 +199,7 @@ MAIN(int argc, char **argv) | |||
| 199 | else if (strcmp(*argv, "-engine") == 0) { | 199 | else if (strcmp(*argv, "-engine") == 0) { |
| 200 | if (--argc < 1) | 200 | if (--argc < 1) |
| 201 | break; | 201 | break; |
| 202 | engine= *(++argv); | 202 | engine = *(++argv); |
| 203 | e = setup_engine(bio_err, engine, 0); | 203 | e = setup_engine(bio_err, engine, 0); |
| 204 | } | 204 | } |
| 205 | #endif | 205 | #endif |
| @@ -216,11 +216,11 @@ MAIN(int argc, char **argv) | |||
| 216 | else if (!strcmp(*argv, "-hmac")) { | 216 | else if (!strcmp(*argv, "-hmac")) { |
| 217 | if (--argc < 1) | 217 | if (--argc < 1) |
| 218 | break; | 218 | break; |
| 219 | hmac_key=*++argv; | 219 | hmac_key = *++argv; |
| 220 | } else if (!strcmp(*argv, "-mac")) { | 220 | } else if (!strcmp(*argv, "-mac")) { |
| 221 | if (--argc < 1) | 221 | if (--argc < 1) |
| 222 | break; | 222 | break; |
| 223 | mac_name=*++argv; | 223 | mac_name = *++argv; |
| 224 | } else if (strcmp(*argv, "-sigopt") == 0) { | 224 | } else if (strcmp(*argv, "-sigopt") == 0) { |
| 225 | if (--argc < 1) | 225 | if (--argc < 1) |
| 226 | break; | 226 | break; |
| @@ -248,9 +248,7 @@ MAIN(int argc, char **argv) | |||
| 248 | BIO_printf(bio_err, "No signature to verify: use the -signature option\n"); | 248 | BIO_printf(bio_err, "No signature to verify: use the -signature option\n"); |
| 249 | goto end; | 249 | goto end; |
| 250 | } | 250 | } |
| 251 | 251 | if ((argc > 0) && (argv[0][0] == '-')) { /* bad option */ | |
| 252 | if ((argc > 0) && (argv[0][0] == '-')) /* bad option */ | ||
| 253 | { | ||
| 254 | BIO_printf(bio_err, "unknown option '%s'\n", *argv); | 252 | BIO_printf(bio_err, "unknown option '%s'\n", *argv); |
| 255 | BIO_printf(bio_err, "options are\n"); | 253 | BIO_printf(bio_err, "options are\n"); |
| 256 | BIO_printf(bio_err, "-c to output the digest with separating colons\n"); | 254 | BIO_printf(bio_err, "-c to output the digest with separating colons\n"); |
| @@ -275,32 +273,27 @@ MAIN(int argc, char **argv) | |||
| 275 | EVP_MD_do_all_sorted(list_md_fn, bio_err); | 273 | EVP_MD_do_all_sorted(list_md_fn, bio_err); |
| 276 | goto end; | 274 | goto end; |
| 277 | } | 275 | } |
| 278 | |||
| 279 | in = BIO_new(BIO_s_file()); | 276 | in = BIO_new(BIO_s_file()); |
| 280 | bmd = BIO_new(BIO_f_md()); | 277 | bmd = BIO_new(BIO_f_md()); |
| 281 | if (debug) { | 278 | if (debug) { |
| 282 | BIO_set_callback(in, BIO_debug_callback); | 279 | BIO_set_callback(in, BIO_debug_callback); |
| 283 | /* needed for windows 3.1 */ | 280 | /* needed for windows 3.1 */ |
| 284 | BIO_set_callback_arg(in, (char *)bio_err); | 281 | BIO_set_callback_arg(in, (char *) bio_err); |
| 285 | } | 282 | } |
| 286 | |||
| 287 | if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) { | 283 | if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) { |
| 288 | BIO_printf(bio_err, "Error getting password\n"); | 284 | BIO_printf(bio_err, "Error getting password\n"); |
| 289 | goto end; | 285 | goto end; |
| 290 | } | 286 | } |
| 291 | |||
| 292 | if ((in == NULL) || (bmd == NULL)) { | 287 | if ((in == NULL) || (bmd == NULL)) { |
| 293 | ERR_print_errors(bio_err); | 288 | ERR_print_errors(bio_err); |
| 294 | goto end; | 289 | goto end; |
| 295 | } | 290 | } |
| 296 | |||
| 297 | if (out_bin == -1) { | 291 | if (out_bin == -1) { |
| 298 | if (keyfile) | 292 | if (keyfile) |
| 299 | out_bin = 1; | 293 | out_bin = 1; |
| 300 | else | 294 | else |
| 301 | out_bin = 0; | 295 | out_bin = 0; |
| 302 | } | 296 | } |
| 303 | |||
| 304 | if (randfile) | 297 | if (randfile) |
| 305 | app_RAND_load_file(randfile, bio_err, 0); | 298 | app_RAND_load_file(randfile, bio_err, 0); |
| 306 | 299 | ||
| @@ -323,7 +316,6 @@ MAIN(int argc, char **argv) | |||
| 323 | BIO_printf(bio_err, "MAC and Signing key cannot both be specified\n"); | 316 | BIO_printf(bio_err, "MAC and Signing key cannot both be specified\n"); |
| 324 | goto end; | 317 | goto end; |
| 325 | } | 318 | } |
| 326 | |||
| 327 | if (keyfile) { | 319 | if (keyfile) { |
| 328 | if (want_pub) | 320 | if (want_pub) |
| 329 | sigkey = load_pubkey(bio_err, keyfile, keyform, 0, NULL, | 321 | sigkey = load_pubkey(bio_err, keyfile, keyform, 0, NULL, |
| @@ -332,12 +324,13 @@ MAIN(int argc, char **argv) | |||
| 332 | sigkey = load_key(bio_err, keyfile, keyform, 0, passin, | 324 | sigkey = load_key(bio_err, keyfile, keyform, 0, passin, |
| 333 | e, "key file"); | 325 | e, "key file"); |
| 334 | if (!sigkey) { | 326 | if (!sigkey) { |
| 335 | /* load_[pub]key() has already printed an appropriate | 327 | /* |
| 336 | message */ | 328 | * load_[pub]key() has already printed an appropriate |
| 329 | * message | ||
| 330 | */ | ||
| 337 | goto end; | 331 | goto end; |
| 338 | } | 332 | } |
| 339 | } | 333 | } |
| 340 | |||
| 341 | if (mac_name) { | 334 | if (mac_name) { |
| 342 | EVP_PKEY_CTX *mac_ctx = NULL; | 335 | EVP_PKEY_CTX *mac_ctx = NULL; |
| 343 | int r = 0; | 336 | int r = 0; |
| @@ -368,20 +361,17 @@ mac_end: | |||
| 368 | if (r == 0) | 361 | if (r == 0) |
| 369 | goto end; | 362 | goto end; |
| 370 | } | 363 | } |
| 371 | |||
| 372 | if (non_fips_allow) { | 364 | if (non_fips_allow) { |
| 373 | EVP_MD_CTX *md_ctx; | 365 | EVP_MD_CTX *md_ctx; |
| 374 | BIO_get_md_ctx(bmd, &md_ctx); | 366 | BIO_get_md_ctx(bmd, &md_ctx); |
| 375 | EVP_MD_CTX_set_flags(md_ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); | 367 | EVP_MD_CTX_set_flags(md_ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); |
| 376 | } | 368 | } |
| 377 | |||
| 378 | if (hmac_key) { | 369 | if (hmac_key) { |
| 379 | sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, e, | 370 | sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, e, |
| 380 | (unsigned char *)hmac_key, -1); | 371 | (unsigned char *) hmac_key, -1); |
| 381 | if (!sigkey) | 372 | if (!sigkey) |
| 382 | goto end; | 373 | goto end; |
| 383 | } | 374 | } |
| 384 | |||
| 385 | if (sigkey) { | 375 | if (sigkey) { |
| 386 | EVP_MD_CTX *mctx = NULL; | 376 | EVP_MD_CTX *mctx = NULL; |
| 387 | EVP_PKEY_CTX *pctx = NULL; | 377 | EVP_PKEY_CTX *pctx = NULL; |
| @@ -452,7 +442,6 @@ mac_end: | |||
| 452 | BIO_get_md_ctx(bmd, &tctx); | 442 | BIO_get_md_ctx(bmd, &tctx); |
| 453 | md = EVP_MD_CTX_md(tctx); | 443 | md = EVP_MD_CTX_md(tctx); |
| 454 | } | 444 | } |
| 455 | |||
| 456 | if (argc == 0) { | 445 | if (argc == 0) { |
| 457 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 446 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 458 | err = do_fp(out, buf, inp, separator, out_bin, sigkey, sigbuf, | 447 | err = do_fp(out, buf, inp, separator, out_bin, sigkey, sigbuf, |
| @@ -483,7 +472,7 @@ mac_end: | |||
| 483 | } | 472 | } |
| 484 | if (r) | 473 | if (r) |
| 485 | err = r; | 474 | err = r; |
| 486 | (void)BIO_reset(bmd); | 475 | (void) BIO_reset(bmd); |
| 487 | } | 476 | } |
| 488 | } | 477 | } |
| 489 | 478 | ||
| @@ -507,20 +496,20 @@ end: | |||
| 507 | if (bmd != NULL) | 496 | if (bmd != NULL) |
| 508 | BIO_free(bmd); | 497 | BIO_free(bmd); |
| 509 | apps_shutdown(); | 498 | apps_shutdown(); |
| 510 | return(err); | 499 | return (err); |
| 511 | } | 500 | } |
| 512 | 501 | ||
| 513 | int | 502 | int |
| 514 | do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, | 503 | do_fp(BIO * out, unsigned char *buf, BIO * bp, int sep, int binout, |
| 515 | EVP_PKEY *key, unsigned char *sigin, int siglen, | 504 | EVP_PKEY * key, unsigned char *sigin, int siglen, |
| 516 | const char *sig_name, const char *md_name, | 505 | const char *sig_name, const char *md_name, |
| 517 | const char *file, BIO *bmd) | 506 | const char *file, BIO * bmd) |
| 518 | { | 507 | { |
| 519 | size_t len; | 508 | size_t len; |
| 520 | int i; | 509 | int i; |
| 521 | 510 | ||
| 522 | for (;;) { | 511 | for (;;) { |
| 523 | i = BIO_read(bp, (char *)buf, BUFSIZE); | 512 | i = BIO_read(bp, (char *) buf, BUFSIZE); |
| 524 | if (i < 0) { | 513 | if (i < 0) { |
| 525 | BIO_printf(bio_err, "Read Error in %s\n", file); | 514 | BIO_printf(bio_err, "Read Error in %s\n", file); |
| 526 | ERR_print_errors(bio_err); | 515 | ERR_print_errors(bio_err); |
| @@ -532,7 +521,7 @@ do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, | |||
| 532 | if (sigin) { | 521 | if (sigin) { |
| 533 | EVP_MD_CTX *ctx; | 522 | EVP_MD_CTX *ctx; |
| 534 | BIO_get_md_ctx(bp, &ctx); | 523 | BIO_get_md_ctx(bp, &ctx); |
| 535 | i = EVP_DigestVerifyFinal(ctx, sigin, (unsigned int)siglen); | 524 | i = EVP_DigestVerifyFinal(ctx, sigin, (unsigned int) siglen); |
| 536 | if (i > 0) | 525 | if (i > 0) |
| 537 | BIO_printf(out, "Verified OK\n"); | 526 | BIO_printf(out, "Verified OK\n"); |
| 538 | else if (i == 0) { | 527 | else if (i == 0) { |
| @@ -555,8 +544,8 @@ do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, | |||
| 555 | return 1; | 544 | return 1; |
| 556 | } | 545 | } |
| 557 | } else { | 546 | } else { |
| 558 | len = BIO_gets(bp, (char *)buf, BUFSIZE); | 547 | len = BIO_gets(bp, (char *) buf, BUFSIZE); |
| 559 | if ((int)len < 0) { | 548 | if ((int) len < 0) { |
| 560 | ERR_print_errors(bio_err); | 549 | ERR_print_errors(bio_err); |
| 561 | return 1; | 550 | return 1; |
| 562 | } | 551 | } |
| @@ -565,7 +554,7 @@ do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, | |||
| 565 | if (binout) | 554 | if (binout) |
| 566 | BIO_write(out, buf, len); | 555 | BIO_write(out, buf, len); |
| 567 | else if (sep == 2) { | 556 | else if (sep == 2) { |
| 568 | for (i = 0; i < (int)len; i++) | 557 | for (i = 0; i < (int) len; i++) |
| 569 | BIO_printf(out, "%02x", buf[i]); | 558 | BIO_printf(out, "%02x", buf[i]); |
| 570 | BIO_printf(out, " *%s\n", file); | 559 | BIO_printf(out, " *%s\n", file); |
| 571 | } else { | 560 | } else { |
| @@ -575,7 +564,7 @@ do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, | |||
| 575 | BIO_printf(out, "%s(%s)= ", md_name, file); | 564 | BIO_printf(out, "%s(%s)= ", md_name, file); |
| 576 | else | 565 | else |
| 577 | BIO_printf(out, "(%s)= ", file); | 566 | BIO_printf(out, "(%s)= ", file); |
| 578 | for (i = 0; i < (int)len; i++) { | 567 | for (i = 0; i < (int) len; i++) { |
| 579 | if (sep && (i != 0)) | 568 | if (sep && (i != 0)) |
| 580 | BIO_printf(out, ":"); | 569 | BIO_printf(out, ":"); |
| 581 | BIO_printf(out, "%02x", buf[i]); | 570 | BIO_printf(out, "%02x", buf[i]); |
diff --git a/src/lib/libssl/src/apps/dh.c b/src/lib/libssl/src/apps/dh.c index 109a6c0d40..1fc536d909 100644 --- a/src/lib/libssl/src/apps/dh.c +++ b/src/lib/libssl/src/apps/dh.c | |||
| @@ -57,7 +57,7 @@ | |||
| 57 | * [including the GNU Public Licence.] | 57 | * [including the GNU Public Licence.] |
| 58 | */ | 58 | */ |
| 59 | 59 | ||
| 60 | #include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */ | 60 | #include <openssl/opensslconf.h>/* for OPENSSL_NO_DH */ |
| 61 | #ifndef OPENSSL_NO_DH | 61 | #ifndef OPENSSL_NO_DH |
| 62 | #include <stdio.h> | 62 | #include <stdio.h> |
| 63 | #include <stdlib.h> | 63 | #include <stdlib.h> |
| @@ -102,7 +102,7 @@ MAIN(int argc, char **argv) | |||
| 102 | 102 | ||
| 103 | if (bio_err == NULL) | 103 | if (bio_err == NULL) |
| 104 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 104 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 105 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 105 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 106 | 106 | ||
| 107 | if (!load_config(bio_err, NULL)) | 107 | if (!load_config(bio_err, NULL)) |
| 108 | goto end; | 108 | goto end; |
| @@ -123,27 +123,24 @@ MAIN(int argc, char **argv) | |||
| 123 | if (--argc < 1) | 123 | if (--argc < 1) |
| 124 | goto bad; | 124 | goto bad; |
| 125 | informat = str2fmt(*(++argv)); | 125 | informat = str2fmt(*(++argv)); |
| 126 | } | 126 | } else if (strcmp(*argv, "-outform") == 0) { |
| 127 | else if (strcmp(*argv, "-outform") == 0) { | ||
| 128 | if (--argc < 1) | 127 | if (--argc < 1) |
| 129 | goto bad; | 128 | goto bad; |
| 130 | outformat = str2fmt(*(++argv)); | 129 | outformat = str2fmt(*(++argv)); |
| 131 | } | 130 | } else if (strcmp(*argv, "-in") == 0) { |
| 132 | else if (strcmp(*argv, "-in") == 0) { | ||
| 133 | if (--argc < 1) | 131 | if (--argc < 1) |
| 134 | goto bad; | 132 | goto bad; |
| 135 | infile= *(++argv); | 133 | infile = *(++argv); |
| 136 | } | 134 | } else if (strcmp(*argv, "-out") == 0) { |
| 137 | else if (strcmp(*argv, "-out") == 0) { | ||
| 138 | if (--argc < 1) | 135 | if (--argc < 1) |
| 139 | goto bad; | 136 | goto bad; |
| 140 | outfile= *(++argv); | 137 | outfile = *(++argv); |
| 141 | } | 138 | } |
| 142 | #ifndef OPENSSL_NO_ENGINE | 139 | #ifndef OPENSSL_NO_ENGINE |
| 143 | else if (strcmp(*argv, "-engine") == 0) { | 140 | else if (strcmp(*argv, "-engine") == 0) { |
| 144 | if (--argc < 1) | 141 | if (--argc < 1) |
| 145 | goto bad; | 142 | goto bad; |
| 146 | engine= *(++argv); | 143 | engine = *(++argv); |
| 147 | } | 144 | } |
| 148 | #endif | 145 | #endif |
| 149 | else if (strcmp(*argv, "-check") == 0) | 146 | else if (strcmp(*argv, "-check") == 0) |
| @@ -180,7 +177,6 @@ bad: | |||
| 180 | #endif | 177 | #endif |
| 181 | goto end; | 178 | goto end; |
| 182 | } | 179 | } |
| 183 | |||
| 184 | ERR_load_crypto_strings(); | 180 | ERR_load_crypto_strings(); |
| 185 | 181 | ||
| 186 | #ifndef OPENSSL_NO_ENGINE | 182 | #ifndef OPENSSL_NO_ENGINE |
| @@ -193,7 +189,6 @@ bad: | |||
| 193 | ERR_print_errors(bio_err); | 189 | ERR_print_errors(bio_err); |
| 194 | goto end; | 190 | goto end; |
| 195 | } | 191 | } |
| 196 | |||
| 197 | if (infile == NULL) | 192 | if (infile == NULL) |
| 198 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 193 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 199 | else { | 194 | else { |
| @@ -224,7 +219,6 @@ bad: | |||
| 224 | ERR_print_errors(bio_err); | 219 | ERR_print_errors(bio_err); |
| 225 | goto end; | 220 | goto end; |
| 226 | } | 221 | } |
| 227 | |||
| 228 | if (text) { | 222 | if (text) { |
| 229 | DHparams_print(out, dh); | 223 | DHparams_print(out, dh); |
| 230 | #ifdef undef | 224 | #ifdef undef |
| @@ -237,7 +231,6 @@ bad: | |||
| 237 | printf("recommended private length=%ld\n", dh->length); | 231 | printf("recommended private length=%ld\n", dh->length); |
| 238 | #endif | 232 | #endif |
| 239 | } | 233 | } |
| 240 | |||
| 241 | if (check) { | 234 | if (check) { |
| 242 | if (!DH_check(dh, &i)) { | 235 | if (!DH_check(dh, &i)) { |
| 243 | ERR_print_errors(bio_err); | 236 | ERR_print_errors(bio_err); |
| @@ -254,14 +247,13 @@ bad: | |||
| 254 | if (i == 0) | 247 | if (i == 0) |
| 255 | printf("DH parameters appear to be ok.\n"); | 248 | printf("DH parameters appear to be ok.\n"); |
| 256 | } | 249 | } |
| 257 | |||
| 258 | if (C) { | 250 | if (C) { |
| 259 | unsigned char *data; | 251 | unsigned char *data; |
| 260 | int len, l, bits; | 252 | int len, l, bits; |
| 261 | 253 | ||
| 262 | len = BN_num_bytes(dh->p); | 254 | len = BN_num_bytes(dh->p); |
| 263 | bits = BN_num_bits(dh->p); | 255 | bits = BN_num_bits(dh->p); |
| 264 | data = (unsigned char *)malloc(len); | 256 | data = (unsigned char *) malloc(len); |
| 265 | if (data == NULL) { | 257 | if (data == NULL) { |
| 266 | perror("malloc"); | 258 | perror("malloc"); |
| 267 | goto end; | 259 | goto end; |
| @@ -296,7 +288,6 @@ bad: | |||
| 296 | printf("\treturn(dh);\n\t}\n"); | 288 | printf("\treturn(dh);\n\t}\n"); |
| 297 | free(data); | 289 | free(data); |
| 298 | } | 290 | } |
| 299 | |||
| 300 | if (!noout) { | 291 | if (!noout) { |
| 301 | if (outformat == FORMAT_ASN1) | 292 | if (outformat == FORMAT_ASN1) |
| 302 | i = i2d_DHparams_bio(out, dh); | 293 | i = i2d_DHparams_bio(out, dh); |
| @@ -322,12 +313,12 @@ end: | |||
| 322 | if (dh != NULL) | 313 | if (dh != NULL) |
| 323 | DH_free(dh); | 314 | DH_free(dh); |
| 324 | apps_shutdown(); | 315 | apps_shutdown(); |
| 325 | return(ret); | 316 | return (ret); |
| 326 | } | 317 | } |
| 327 | #else /* !OPENSSL_NO_DH */ | 318 | #else /* !OPENSSL_NO_DH */ |
| 328 | 319 | ||
| 329 | # if PEDANTIC | 320 | #if PEDANTIC |
| 330 | static void *dummy = &dummy; | 321 | static void *dummy = &dummy; |
| 331 | # endif | 322 | #endif |
| 332 | 323 | ||
| 333 | #endif | 324 | #endif |
diff --git a/src/lib/libssl/src/apps/dhparam.c b/src/lib/libssl/src/apps/dhparam.c index c86d5ef040..8585f8f419 100644 --- a/src/lib/libssl/src/apps/dhparam.c +++ b/src/lib/libssl/src/apps/dhparam.c | |||
| @@ -109,7 +109,7 @@ | |||
| 109 | * | 109 | * |
| 110 | */ | 110 | */ |
| 111 | 111 | ||
| 112 | #include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */ | 112 | #include <openssl/opensslconf.h>/* for OPENSSL_NO_DH */ |
| 113 | #ifndef OPENSSL_NO_DH | 113 | #ifndef OPENSSL_NO_DH |
| 114 | #include <stdio.h> | 114 | #include <stdio.h> |
| 115 | #include <stdlib.h> | 115 | #include <stdlib.h> |
| @@ -143,7 +143,7 @@ | |||
| 143 | * -C | 143 | * -C |
| 144 | */ | 144 | */ |
| 145 | 145 | ||
| 146 | static int dh_cb(int p, int n, BN_GENCB *cb); | 146 | static int dh_cb(int p, int n, BN_GENCB * cb); |
| 147 | 147 | ||
| 148 | int MAIN(int, char **); | 148 | int MAIN(int, char **); |
| 149 | 149 | ||
| @@ -168,7 +168,7 @@ MAIN(int argc, char **argv) | |||
| 168 | 168 | ||
| 169 | if (bio_err == NULL) | 169 | if (bio_err == NULL) |
| 170 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 170 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 171 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 171 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 172 | 172 | ||
| 173 | if (!load_config(bio_err, NULL)) | 173 | if (!load_config(bio_err, NULL)) |
| 174 | goto end; | 174 | goto end; |
| @@ -193,17 +193,17 @@ MAIN(int argc, char **argv) | |||
| 193 | } else if (strcmp(*argv, "-in") == 0) { | 193 | } else if (strcmp(*argv, "-in") == 0) { |
| 194 | if (--argc < 1) | 194 | if (--argc < 1) |
| 195 | goto bad; | 195 | goto bad; |
| 196 | infile= *(++argv); | 196 | infile = *(++argv); |
| 197 | } else if (strcmp(*argv, "-out") == 0) { | 197 | } else if (strcmp(*argv, "-out") == 0) { |
| 198 | if (--argc < 1) | 198 | if (--argc < 1) |
| 199 | goto bad; | 199 | goto bad; |
| 200 | outfile= *(++argv); | 200 | outfile = *(++argv); |
| 201 | } | 201 | } |
| 202 | #ifndef OPENSSL_NO_ENGINE | 202 | #ifndef OPENSSL_NO_ENGINE |
| 203 | else if (strcmp(*argv, "-engine") == 0) { | 203 | else if (strcmp(*argv, "-engine") == 0) { |
| 204 | if (--argc < 1) | 204 | if (--argc < 1) |
| 205 | goto bad; | 205 | goto bad; |
| 206 | engine= *(++argv); | 206 | engine = *(++argv); |
| 207 | } | 207 | } |
| 208 | #endif | 208 | #endif |
| 209 | else if (strcmp(*argv, "-check") == 0) | 209 | else if (strcmp(*argv, "-check") == 0) |
| @@ -225,9 +225,8 @@ MAIN(int argc, char **argv) | |||
| 225 | else if (strcmp(*argv, "-rand") == 0) { | 225 | else if (strcmp(*argv, "-rand") == 0) { |
| 226 | if (--argc < 1) | 226 | if (--argc < 1) |
| 227 | goto bad; | 227 | goto bad; |
| 228 | inrand= *(++argv); | 228 | inrand = *(++argv); |
| 229 | } | 229 | } else if (((sscanf(*argv, "%d", &num) == 0) || (num <= 0))) |
| 230 | else if (((sscanf(*argv, "%d", &num) == 0) || (num <= 0))) | ||
| 231 | goto bad; | 230 | goto bad; |
| 232 | argv++; | 231 | argv++; |
| 233 | argc--; | 232 | argc--; |
| @@ -259,7 +258,6 @@ bad: | |||
| 259 | BIO_printf(bio_err, " -noout no output\n"); | 258 | BIO_printf(bio_err, " -noout no output\n"); |
| 260 | goto end; | 259 | goto end; |
| 261 | } | 260 | } |
| 262 | |||
| 263 | ERR_load_crypto_strings(); | 261 | ERR_load_crypto_strings(); |
| 264 | 262 | ||
| 265 | #ifndef OPENSSL_NO_ENGINE | 263 | #ifndef OPENSSL_NO_ENGINE |
| @@ -300,13 +298,12 @@ bad: | |||
| 300 | 298 | ||
| 301 | BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n", num); | 299 | BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n", num); |
| 302 | if (!dsa || !DSA_generate_parameters_ex(dsa, num, | 300 | if (!dsa || !DSA_generate_parameters_ex(dsa, num, |
| 303 | NULL, 0, NULL, NULL, &cb)) { | 301 | NULL, 0, NULL, NULL, &cb)) { |
| 304 | if (dsa) | 302 | if (dsa) |
| 305 | DSA_free(dsa); | 303 | DSA_free(dsa); |
| 306 | ERR_print_errors(bio_err); | 304 | ERR_print_errors(bio_err); |
| 307 | goto end; | 305 | goto end; |
| 308 | } | 306 | } |
| 309 | |||
| 310 | dh = DSA_dup_DH(dsa); | 307 | dh = DSA_dup_DH(dsa); |
| 311 | DSA_free(dsa); | 308 | DSA_free(dsa); |
| 312 | if (dh == NULL) { | 309 | if (dh == NULL) { |
| @@ -346,14 +343,13 @@ bad: | |||
| 346 | BIO_printf(bio_err, "bad input format specified\n"); | 343 | BIO_printf(bio_err, "bad input format specified\n"); |
| 347 | goto end; | 344 | goto end; |
| 348 | } | 345 | } |
| 349 | |||
| 350 | #ifndef OPENSSL_NO_DSA | 346 | #ifndef OPENSSL_NO_DSA |
| 351 | if (dsaparam) { | 347 | if (dsaparam) { |
| 352 | DSA *dsa; | 348 | DSA *dsa; |
| 353 | 349 | ||
| 354 | if (informat == FORMAT_ASN1) | 350 | if (informat == FORMAT_ASN1) |
| 355 | dsa = d2i_DSAparams_bio(in, NULL); | 351 | dsa = d2i_DSAparams_bio(in, NULL); |
| 356 | else /* informat == FORMAT_PEM */ | 352 | else /* informat == FORMAT_PEM */ |
| 357 | dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL); | 353 | dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL); |
| 358 | 354 | ||
| 359 | if (dsa == NULL) { | 355 | if (dsa == NULL) { |
| @@ -361,7 +357,6 @@ bad: | |||
| 361 | ERR_print_errors(bio_err); | 357 | ERR_print_errors(bio_err); |
| 362 | goto end; | 358 | goto end; |
| 363 | } | 359 | } |
| 364 | |||
| 365 | dh = DSA_dup_DH(dsa); | 360 | dh = DSA_dup_DH(dsa); |
| 366 | DSA_free(dsa); | 361 | DSA_free(dsa); |
| 367 | if (dh == NULL) { | 362 | if (dh == NULL) { |
| @@ -373,7 +368,7 @@ bad: | |||
| 373 | { | 368 | { |
| 374 | if (informat == FORMAT_ASN1) | 369 | if (informat == FORMAT_ASN1) |
| 375 | dh = d2i_DHparams_bio(in, NULL); | 370 | dh = d2i_DHparams_bio(in, NULL); |
| 376 | else /* informat == FORMAT_PEM */ | 371 | else /* informat == FORMAT_PEM */ |
| 377 | dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL); | 372 | dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL); |
| 378 | 373 | ||
| 379 | if (dh == NULL) { | 374 | if (dh == NULL) { |
| @@ -404,7 +399,6 @@ bad: | |||
| 404 | if (text) { | 399 | if (text) { |
| 405 | DHparams_print(out, dh); | 400 | DHparams_print(out, dh); |
| 406 | } | 401 | } |
| 407 | |||
| 408 | if (check) { | 402 | if (check) { |
| 409 | if (!DH_check(dh, &i)) { | 403 | if (!DH_check(dh, &i)) { |
| 410 | ERR_print_errors(bio_err); | 404 | ERR_print_errors(bio_err); |
| @@ -427,7 +421,7 @@ bad: | |||
| 427 | 421 | ||
| 428 | len = BN_num_bytes(dh->p); | 422 | len = BN_num_bytes(dh->p); |
| 429 | bits = BN_num_bits(dh->p); | 423 | bits = BN_num_bits(dh->p); |
| 430 | data = (unsigned char *)malloc(len); | 424 | data = (unsigned char *) malloc(len); |
| 431 | if (data == NULL) { | 425 | if (data == NULL) { |
| 432 | perror("malloc"); | 426 | perror("malloc"); |
| 433 | goto end; | 427 | goto end; |
| @@ -468,13 +462,12 @@ bad: | |||
| 468 | printf("\treturn(dh);\n\t}\n"); | 462 | printf("\treturn(dh);\n\t}\n"); |
| 469 | free(data); | 463 | free(data); |
| 470 | } | 464 | } |
| 471 | |||
| 472 | if (!noout) { | 465 | if (!noout) { |
| 473 | if (outformat == FORMAT_ASN1) | 466 | if (outformat == FORMAT_ASN1) |
| 474 | i = i2d_DHparams_bio(out, dh); | 467 | i = i2d_DHparams_bio(out, dh); |
| 475 | else if (outformat == FORMAT_PEM) | 468 | else if (outformat == FORMAT_PEM) |
| 476 | i = PEM_write_bio_DHparams(out, dh); | 469 | i = PEM_write_bio_DHparams(out, dh); |
| 477 | else { | 470 | else { |
| 478 | BIO_printf(bio_err, "bad output format specified for outfile\n"); | 471 | BIO_printf(bio_err, "bad output format specified for outfile\n"); |
| 479 | goto end; | 472 | goto end; |
| 480 | } | 473 | } |
| @@ -494,12 +487,12 @@ end: | |||
| 494 | if (dh != NULL) | 487 | if (dh != NULL) |
| 495 | DH_free(dh); | 488 | DH_free(dh); |
| 496 | apps_shutdown(); | 489 | apps_shutdown(); |
| 497 | return(ret); | 490 | return (ret); |
| 498 | } | 491 | } |
| 499 | 492 | ||
| 500 | /* dh_cb is identical to dsa_cb in apps/dsaparam.c */ | 493 | /* dh_cb is identical to dsa_cb in apps/dsaparam.c */ |
| 501 | static int | 494 | static int |
| 502 | dh_cb(int p, int n, BN_GENCB *cb) | 495 | dh_cb(int p, int n, BN_GENCB * cb) |
| 503 | { | 496 | { |
| 504 | char c = '*'; | 497 | char c = '*'; |
| 505 | 498 | ||
| @@ -512,17 +505,17 @@ dh_cb(int p, int n, BN_GENCB *cb) | |||
| 512 | if (p == 3) | 505 | if (p == 3) |
| 513 | c = '\n'; | 506 | c = '\n'; |
| 514 | BIO_write(cb->arg, &c, 1); | 507 | BIO_write(cb->arg, &c, 1); |
| 515 | (void)BIO_flush(cb->arg); | 508 | (void) BIO_flush(cb->arg); |
| 516 | #ifdef LINT | 509 | #ifdef LINT |
| 517 | p = n; | 510 | p = n; |
| 518 | #endif | 511 | #endif |
| 519 | return 1; | 512 | return 1; |
| 520 | } | 513 | } |
| 521 | 514 | ||
| 522 | #else /* !OPENSSL_NO_DH */ | 515 | #else /* !OPENSSL_NO_DH */ |
| 523 | 516 | ||
| 524 | # if PEDANTIC | 517 | #if PEDANTIC |
| 525 | static void *dummy = &dummy; | 518 | static void *dummy = &dummy; |
| 526 | # endif | 519 | #endif |
| 527 | 520 | ||
| 528 | #endif | 521 | #endif |
diff --git a/src/lib/libssl/src/apps/dsa.c b/src/lib/libssl/src/apps/dsa.c index 37b9a3ffb0..a4132de0ea 100644 --- a/src/lib/libssl/src/apps/dsa.c +++ b/src/lib/libssl/src/apps/dsa.c | |||
| @@ -56,7 +56,7 @@ | |||
| 56 | * [including the GNU Public Licence.] | 56 | * [including the GNU Public Licence.] |
| 57 | */ | 57 | */ |
| 58 | 58 | ||
| 59 | #include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */ | 59 | #include <openssl/opensslconf.h>/* for OPENSSL_NO_DSA */ |
| 60 | #ifndef OPENSSL_NO_DSA | 60 | #ifndef OPENSSL_NO_DSA |
| 61 | #include <stdio.h> | 61 | #include <stdio.h> |
| 62 | #include <stdlib.h> | 62 | #include <stdlib.h> |
| @@ -119,7 +119,7 @@ MAIN(int argc, char **argv) | |||
| 119 | 119 | ||
| 120 | if (bio_err == NULL) | 120 | if (bio_err == NULL) |
| 121 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 121 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 122 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 122 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 123 | 123 | ||
| 124 | if (!load_config(bio_err, NULL)) | 124 | if (!load_config(bio_err, NULL)) |
| 125 | goto end; | 125 | goto end; |
| @@ -147,26 +147,25 @@ MAIN(int argc, char **argv) | |||
| 147 | } else if (strcmp(*argv, "-in") == 0) { | 147 | } else if (strcmp(*argv, "-in") == 0) { |
| 148 | if (--argc < 1) | 148 | if (--argc < 1) |
| 149 | goto bad; | 149 | goto bad; |
| 150 | infile= *(++argv); | 150 | infile = *(++argv); |
| 151 | } | 151 | } else if (strcmp(*argv, "-out") == 0) { |
| 152 | else if (strcmp(*argv, "-out") == 0) { | ||
| 153 | if (--argc < 1) | 152 | if (--argc < 1) |
| 154 | goto bad; | 153 | goto bad; |
| 155 | outfile= *(++argv); | 154 | outfile = *(++argv); |
| 156 | } else if (strcmp(*argv, "-passin") == 0) { | 155 | } else if (strcmp(*argv, "-passin") == 0) { |
| 157 | if (--argc < 1) | 156 | if (--argc < 1) |
| 158 | goto bad; | 157 | goto bad; |
| 159 | passargin= *(++argv); | 158 | passargin = *(++argv); |
| 160 | } else if (strcmp(*argv, "-passout") == 0) { | 159 | } else if (strcmp(*argv, "-passout") == 0) { |
| 161 | if (--argc < 1) | 160 | if (--argc < 1) |
| 162 | goto bad; | 161 | goto bad; |
| 163 | passargout= *(++argv); | 162 | passargout = *(++argv); |
| 164 | } | 163 | } |
| 165 | #ifndef OPENSSL_NO_ENGINE | 164 | #ifndef OPENSSL_NO_ENGINE |
| 166 | else if (strcmp(*argv, "-engine") == 0) { | 165 | else if (strcmp(*argv, "-engine") == 0) { |
| 167 | if (--argc < 1) | 166 | if (--argc < 1) |
| 168 | goto bad; | 167 | goto bad; |
| 169 | engine= *(++argv); | 168 | engine = *(++argv); |
| 170 | } | 169 | } |
| 171 | #endif | 170 | #endif |
| 172 | else if (strcmp(*argv, "-pvk-strong") == 0) | 171 | else if (strcmp(*argv, "-pvk-strong") == 0) |
| @@ -228,7 +227,6 @@ bad: | |||
| 228 | BIO_printf(bio_err, " -modulus print the DSA public value\n"); | 227 | BIO_printf(bio_err, " -modulus print the DSA public value\n"); |
| 229 | goto end; | 228 | goto end; |
| 230 | } | 229 | } |
| 231 | |||
| 232 | ERR_load_crypto_strings(); | 230 | ERR_load_crypto_strings(); |
| 233 | 231 | ||
| 234 | #ifndef OPENSSL_NO_ENGINE | 232 | #ifndef OPENSSL_NO_ENGINE |
| @@ -239,14 +237,12 @@ bad: | |||
| 239 | BIO_printf(bio_err, "Error getting passwords\n"); | 237 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 240 | goto end; | 238 | goto end; |
| 241 | } | 239 | } |
| 242 | |||
| 243 | in = BIO_new(BIO_s_file()); | 240 | in = BIO_new(BIO_s_file()); |
| 244 | out = BIO_new(BIO_s_file()); | 241 | out = BIO_new(BIO_s_file()); |
| 245 | if ((in == NULL) || (out == NULL)) { | 242 | if ((in == NULL) || (out == NULL)) { |
| 246 | ERR_print_errors(bio_err); | 243 | ERR_print_errors(bio_err); |
| 247 | goto end; | 244 | goto end; |
| 248 | } | 245 | } |
| 249 | |||
| 250 | if (infile == NULL) | 246 | if (infile == NULL) |
| 251 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 247 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 252 | else { | 248 | else { |
| @@ -259,7 +255,7 @@ bad: | |||
| 259 | BIO_printf(bio_err, "read DSA key\n"); | 255 | BIO_printf(bio_err, "read DSA key\n"); |
| 260 | 256 | ||
| 261 | { | 257 | { |
| 262 | EVP_PKEY *pkey; | 258 | EVP_PKEY *pkey; |
| 263 | 259 | ||
| 264 | if (pubin) | 260 | if (pubin) |
| 265 | pkey = load_pubkey(bio_err, infile, informat, 1, | 261 | pkey = load_pubkey(bio_err, infile, informat, 1, |
| @@ -278,7 +274,6 @@ bad: | |||
| 278 | ERR_print_errors(bio_err); | 274 | ERR_print_errors(bio_err); |
| 279 | goto end; | 275 | goto end; |
| 280 | } | 276 | } |
| 281 | |||
| 282 | if (outfile == NULL) { | 277 | if (outfile == NULL) { |
| 283 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 278 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 284 | } else { | 279 | } else { |
| @@ -295,13 +290,11 @@ bad: | |||
| 295 | goto end; | 290 | goto end; |
| 296 | } | 291 | } |
| 297 | } | 292 | } |
| 298 | |||
| 299 | if (modulus) { | 293 | if (modulus) { |
| 300 | fprintf(stdout, "Public Key="); | 294 | fprintf(stdout, "Public Key="); |
| 301 | BN_print(out, dsa->pub_key); | 295 | BN_print(out, dsa->pub_key); |
| 302 | fprintf(stdout, "\n"); | 296 | fprintf(stdout, "\n"); |
| 303 | } | 297 | } |
| 304 | |||
| 305 | if (noout) | 298 | if (noout) |
| 306 | goto end; | 299 | goto end; |
| 307 | BIO_printf(bio_err, "writing DSA key\n"); | 300 | BIO_printf(bio_err, "writing DSA key\n"); |
| @@ -350,12 +343,12 @@ end: | |||
| 350 | if (passout) | 343 | if (passout) |
| 351 | free(passout); | 344 | free(passout); |
| 352 | apps_shutdown(); | 345 | apps_shutdown(); |
| 353 | return(ret); | 346 | return (ret); |
| 354 | } | 347 | } |
| 355 | #else /* !OPENSSL_NO_DSA */ | 348 | #else /* !OPENSSL_NO_DSA */ |
| 356 | 349 | ||
| 357 | # if PEDANTIC | 350 | #if PEDANTIC |
| 358 | static void *dummy = &dummy; | 351 | static void *dummy = &dummy; |
| 359 | # endif | 352 | #endif |
| 360 | 353 | ||
| 361 | #endif | 354 | #endif |
diff --git a/src/lib/libssl/src/apps/dsaparam.c b/src/lib/libssl/src/apps/dsaparam.c index 1efa02fbcf..e2ae9bec19 100644 --- a/src/lib/libssl/src/apps/dsaparam.c +++ b/src/lib/libssl/src/apps/dsaparam.c | |||
| @@ -56,7 +56,7 @@ | |||
| 56 | * [including the GNU Public Licence.] | 56 | * [including the GNU Public Licence.] |
| 57 | */ | 57 | */ |
| 58 | 58 | ||
| 59 | #include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */ | 59 | #include <openssl/opensslconf.h>/* for OPENSSL_NO_DSA */ |
| 60 | /* Until the key-gen callbacks are modified to use newer prototypes, we allow | 60 | /* Until the key-gen callbacks are modified to use newer prototypes, we allow |
| 61 | * deprecated functions for openssl-internal code */ | 61 | * deprecated functions for openssl-internal code */ |
| 62 | #ifdef OPENSSL_NO_DEPRECATED | 62 | #ifdef OPENSSL_NO_DEPRECATED |
| @@ -106,7 +106,7 @@ timebomb_sigalarm(int foo) | |||
| 106 | 106 | ||
| 107 | #endif | 107 | #endif |
| 108 | 108 | ||
| 109 | static int dsa_cb(int p, int n, BN_GENCB *cb); | 109 | static int dsa_cb(int p, int n, BN_GENCB * cb); |
| 110 | 110 | ||
| 111 | int MAIN(int, char **); | 111 | int MAIN(int, char **); |
| 112 | 112 | ||
| @@ -131,7 +131,7 @@ MAIN(int argc, char **argv) | |||
| 131 | 131 | ||
| 132 | if (bio_err == NULL) | 132 | if (bio_err == NULL) |
| 133 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 133 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 134 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 134 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 135 | 135 | ||
| 136 | if (!load_config(bio_err, NULL)) | 136 | if (!load_config(bio_err, NULL)) |
| 137 | goto end; | 137 | goto end; |
| @@ -156,11 +156,11 @@ MAIN(int argc, char **argv) | |||
| 156 | } else if (strcmp(*argv, "-in") == 0) { | 156 | } else if (strcmp(*argv, "-in") == 0) { |
| 157 | if (--argc < 1) | 157 | if (--argc < 1) |
| 158 | goto bad; | 158 | goto bad; |
| 159 | infile= *(++argv); | 159 | infile = *(++argv); |
| 160 | } else if (strcmp(*argv, "-out") == 0) { | 160 | } else if (strcmp(*argv, "-out") == 0) { |
| 161 | if (--argc < 1) | 161 | if (--argc < 1) |
| 162 | goto bad; | 162 | goto bad; |
| 163 | outfile= *(++argv); | 163 | outfile = *(++argv); |
| 164 | } | 164 | } |
| 165 | #ifndef OPENSSL_NO_ENGINE | 165 | #ifndef OPENSSL_NO_ENGINE |
| 166 | else if (strcmp(*argv, "-engine") == 0) { | 166 | else if (strcmp(*argv, "-engine") == 0) { |
| @@ -186,7 +186,7 @@ MAIN(int argc, char **argv) | |||
| 186 | } else if (strcmp(*argv, "-rand") == 0) { | 186 | } else if (strcmp(*argv, "-rand") == 0) { |
| 187 | if (--argc < 1) | 187 | if (--argc < 1) |
| 188 | goto bad; | 188 | goto bad; |
| 189 | inrand= *(++argv); | 189 | inrand = *(++argv); |
| 190 | need_rand = 1; | 190 | need_rand = 1; |
| 191 | } else if (strcmp(*argv, "-noout") == 0) | 191 | } else if (strcmp(*argv, "-noout") == 0) |
| 192 | noout = 1; | 192 | noout = 1; |
| @@ -225,7 +225,6 @@ bad: | |||
| 225 | BIO_printf(bio_err, " number number of bits to use for generating private key\n"); | 225 | BIO_printf(bio_err, " number number of bits to use for generating private key\n"); |
| 226 | goto end; | 226 | goto end; |
| 227 | } | 227 | } |
| 228 | |||
| 229 | ERR_load_crypto_strings(); | 228 | ERR_load_crypto_strings(); |
| 230 | 229 | ||
| 231 | in = BIO_new(BIO_s_file()); | 230 | in = BIO_new(BIO_s_file()); |
| @@ -234,7 +233,6 @@ bad: | |||
| 234 | ERR_print_errors(bio_err); | 233 | ERR_print_errors(bio_err); |
| 235 | goto end; | 234 | goto end; |
| 236 | } | 235 | } |
| 237 | |||
| 238 | if (infile == NULL) | 236 | if (infile == NULL) |
| 239 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 237 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 240 | else { | 238 | else { |
| @@ -262,7 +260,6 @@ bad: | |||
| 262 | BIO_printf(bio_err, "%ld semi-random bytes loaded\n", | 260 | BIO_printf(bio_err, "%ld semi-random bytes loaded\n", |
| 263 | app_RAND_load_files(inrand)); | 261 | app_RAND_load_files(inrand)); |
| 264 | } | 262 | } |
| 265 | |||
| 266 | if (numbits > 0) { | 263 | if (numbits > 0) { |
| 267 | BN_GENCB cb; | 264 | BN_GENCB cb; |
| 268 | BN_GENCB_set(&cb, dsa_cb, bio_err); | 265 | BN_GENCB_set(&cb, dsa_cb, bio_err); |
| @@ -314,18 +311,16 @@ bad: | |||
| 314 | ERR_print_errors(bio_err); | 311 | ERR_print_errors(bio_err); |
| 315 | goto end; | 312 | goto end; |
| 316 | } | 313 | } |
| 317 | |||
| 318 | if (text) { | 314 | if (text) { |
| 319 | DSAparams_print(out, dsa); | 315 | DSAparams_print(out, dsa); |
| 320 | } | 316 | } |
| 321 | |||
| 322 | if (C) { | 317 | if (C) { |
| 323 | unsigned char *data; | 318 | unsigned char *data; |
| 324 | int l, len, bits_p; | 319 | int l, len, bits_p; |
| 325 | 320 | ||
| 326 | len = BN_num_bytes(dsa->p); | 321 | len = BN_num_bytes(dsa->p); |
| 327 | bits_p = BN_num_bits(dsa->p); | 322 | bits_p = BN_num_bits(dsa->p); |
| 328 | data = (unsigned char *)malloc(len + 20); | 323 | data = (unsigned char *) malloc(len + 20); |
| 329 | if (data == NULL) { | 324 | if (data == NULL) { |
| 330 | perror("malloc"); | 325 | perror("malloc"); |
| 331 | goto end; | 326 | goto end; |
| @@ -370,7 +365,6 @@ bad: | |||
| 370 | printf("\t\t{ DSA_free(dsa); return(NULL); }\n"); | 365 | printf("\t\t{ DSA_free(dsa); return(NULL); }\n"); |
| 371 | printf("\treturn(dsa);\n\t}\n"); | 366 | printf("\treturn(dsa);\n\t}\n"); |
| 372 | } | 367 | } |
| 373 | |||
| 374 | if (!noout) { | 368 | if (!noout) { |
| 375 | if (outformat == FORMAT_ASN1) | 369 | if (outformat == FORMAT_ASN1) |
| 376 | i = i2d_DSAparams_bio(out, dsa); | 370 | i = i2d_DSAparams_bio(out, dsa); |
| @@ -420,11 +414,11 @@ end: | |||
| 420 | if (dsa != NULL) | 414 | if (dsa != NULL) |
| 421 | DSA_free(dsa); | 415 | DSA_free(dsa); |
| 422 | apps_shutdown(); | 416 | apps_shutdown(); |
| 423 | return(ret); | 417 | return (ret); |
| 424 | } | 418 | } |
| 425 | 419 | ||
| 426 | static int | 420 | static int |
| 427 | dsa_cb(int p, int n, BN_GENCB *cb) | 421 | dsa_cb(int p, int n, BN_GENCB * cb) |
| 428 | { | 422 | { |
| 429 | char c = '*'; | 423 | char c = '*'; |
| 430 | 424 | ||
| @@ -437,7 +431,7 @@ dsa_cb(int p, int n, BN_GENCB *cb) | |||
| 437 | if (p == 3) | 431 | if (p == 3) |
| 438 | c = '\n'; | 432 | c = '\n'; |
| 439 | BIO_write(cb->arg, &c, 1); | 433 | BIO_write(cb->arg, &c, 1); |
| 440 | (void)BIO_flush(cb->arg); | 434 | (void) BIO_flush(cb->arg); |
| 441 | #ifdef LINT | 435 | #ifdef LINT |
| 442 | p = n; | 436 | p = n; |
| 443 | #endif | 437 | #endif |
| @@ -447,10 +441,10 @@ dsa_cb(int p, int n, BN_GENCB *cb) | |||
| 447 | #endif | 441 | #endif |
| 448 | return 1; | 442 | return 1; |
| 449 | } | 443 | } |
| 450 | #else /* !OPENSSL_NO_DSA */ | 444 | #else /* !OPENSSL_NO_DSA */ |
| 451 | 445 | ||
| 452 | # if PEDANTIC | 446 | #if PEDANTIC |
| 453 | static void *dummy = &dummy; | 447 | static void *dummy = &dummy; |
| 454 | # endif | 448 | #endif |
| 455 | 449 | ||
| 456 | #endif | 450 | #endif |
diff --git a/src/lib/libssl/src/apps/ec.c b/src/lib/libssl/src/apps/ec.c index 8575ba9682..2d5525d508 100644 --- a/src/lib/libssl/src/apps/ec.c +++ b/src/lib/libssl/src/apps/ec.c | |||
| @@ -86,27 +86,27 @@ int MAIN(int, char **); | |||
| 86 | int | 86 | int |
| 87 | MAIN(int argc, char **argv) | 87 | MAIN(int argc, char **argv) |
| 88 | { | 88 | { |
| 89 | int ret = 1; | 89 | int ret = 1; |
| 90 | EC_KEY *eckey = NULL; | 90 | EC_KEY *eckey = NULL; |
| 91 | const EC_GROUP *group; | 91 | const EC_GROUP *group; |
| 92 | int i, badops = 0; | 92 | int i, badops = 0; |
| 93 | const EVP_CIPHER *enc = NULL; | 93 | const EVP_CIPHER *enc = NULL; |
| 94 | BIO *in = NULL, *out = NULL; | 94 | BIO *in = NULL, *out = NULL; |
| 95 | int informat, outformat, text = 0, noout = 0; | 95 | int informat, outformat, text = 0, noout = 0; |
| 96 | int pubin = 0, pubout = 0, param_out = 0; | 96 | int pubin = 0, pubout = 0, param_out = 0; |
| 97 | char *infile, *outfile, *prog, *engine; | 97 | char *infile, *outfile, *prog, *engine; |
| 98 | char *passargin = NULL, *passargout = NULL; | 98 | char *passargin = NULL, *passargout = NULL; |
| 99 | char *passin = NULL, *passout = NULL; | 99 | char *passin = NULL, *passout = NULL; |
| 100 | point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED; | 100 | point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED; |
| 101 | int new_form = 0; | 101 | int new_form = 0; |
| 102 | int asn1_flag = OPENSSL_EC_NAMED_CURVE; | 102 | int asn1_flag = OPENSSL_EC_NAMED_CURVE; |
| 103 | int new_asn1_flag = 0; | 103 | int new_asn1_flag = 0; |
| 104 | 104 | ||
| 105 | apps_startup(); | 105 | apps_startup(); |
| 106 | 106 | ||
| 107 | if (bio_err == NULL) | 107 | if (bio_err == NULL) |
| 108 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 108 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 109 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 109 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 110 | 110 | ||
| 111 | if (!load_config(bio_err, NULL)) | 111 | if (!load_config(bio_err, NULL)) |
| 112 | goto end; | 112 | goto end; |
| @@ -132,23 +132,23 @@ MAIN(int argc, char **argv) | |||
| 132 | } else if (strcmp(*argv, "-in") == 0) { | 132 | } else if (strcmp(*argv, "-in") == 0) { |
| 133 | if (--argc < 1) | 133 | if (--argc < 1) |
| 134 | goto bad; | 134 | goto bad; |
| 135 | infile= *(++argv); | 135 | infile = *(++argv); |
| 136 | } else if (strcmp(*argv, "-out") == 0) { | 136 | } else if (strcmp(*argv, "-out") == 0) { |
| 137 | if (--argc < 1) | 137 | if (--argc < 1) |
| 138 | goto bad; | 138 | goto bad; |
| 139 | outfile= *(++argv); | 139 | outfile = *(++argv); |
| 140 | } else if (strcmp(*argv, "-passin") == 0) { | 140 | } else if (strcmp(*argv, "-passin") == 0) { |
| 141 | if (--argc < 1) | 141 | if (--argc < 1) |
| 142 | goto bad; | 142 | goto bad; |
| 143 | passargin= *(++argv); | 143 | passargin = *(++argv); |
| 144 | } else if (strcmp(*argv, "-passout") == 0) { | 144 | } else if (strcmp(*argv, "-passout") == 0) { |
| 145 | if (--argc < 1) | 145 | if (--argc < 1) |
| 146 | goto bad; | 146 | goto bad; |
| 147 | passargout= *(++argv); | 147 | passargout = *(++argv); |
| 148 | } else if (strcmp(*argv, "-engine") == 0) { | 148 | } else if (strcmp(*argv, "-engine") == 0) { |
| 149 | if (--argc < 1) | 149 | if (--argc < 1) |
| 150 | goto bad; | 150 | goto bad; |
| 151 | engine= *(++argv); | 151 | engine = *(++argv); |
| 152 | } else if (strcmp(*argv, "-noout") == 0) | 152 | } else if (strcmp(*argv, "-noout") == 0) |
| 153 | noout = 1; | 153 | noout = 1; |
| 154 | else if (strcmp(*argv, "-text") == 0) | 154 | else if (strcmp(*argv, "-text") == 0) |
| @@ -209,8 +209,8 @@ bad: | |||
| 209 | BIO_printf(bio_err, " -engine e use engine e, " | 209 | BIO_printf(bio_err, " -engine e use engine e, " |
| 210 | "possibly a hardware device.\n"); | 210 | "possibly a hardware device.\n"); |
| 211 | BIO_printf(bio_err, " -des encrypt PEM output, " | 211 | BIO_printf(bio_err, " -des encrypt PEM output, " |
| 212 | "instead of 'des' every other \n" | 212 | "instead of 'des' every other \n" |
| 213 | " cipher " | 213 | " cipher " |
| 214 | "supported by OpenSSL can be used\n"); | 214 | "supported by OpenSSL can be used\n"); |
| 215 | BIO_printf(bio_err, " -text print the key\n"); | 215 | BIO_printf(bio_err, " -text print the key\n"); |
| 216 | BIO_printf(bio_err, " -noout don't print key out\n"); | 216 | BIO_printf(bio_err, " -noout don't print key out\n"); |
| @@ -234,7 +234,6 @@ bad: | |||
| 234 | "explicit\n"); | 234 | "explicit\n"); |
| 235 | goto end; | 235 | goto end; |
| 236 | } | 236 | } |
| 237 | |||
| 238 | ERR_load_crypto_strings(); | 237 | ERR_load_crypto_strings(); |
| 239 | 238 | ||
| 240 | #ifndef OPENSSL_NO_ENGINE | 239 | #ifndef OPENSSL_NO_ENGINE |
| @@ -245,14 +244,12 @@ bad: | |||
| 245 | BIO_printf(bio_err, "Error getting passwords\n"); | 244 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 246 | goto end; | 245 | goto end; |
| 247 | } | 246 | } |
| 248 | |||
| 249 | in = BIO_new(BIO_s_file()); | 247 | in = BIO_new(BIO_s_file()); |
| 250 | out = BIO_new(BIO_s_file()); | 248 | out = BIO_new(BIO_s_file()); |
| 251 | if ((in == NULL) || (out == NULL)) { | 249 | if ((in == NULL) || (out == NULL)) { |
| 252 | ERR_print_errors(bio_err); | 250 | ERR_print_errors(bio_err); |
| 253 | goto end; | 251 | goto end; |
| 254 | } | 252 | } |
| 255 | |||
| 256 | if (infile == NULL) | 253 | if (infile == NULL) |
| 257 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 254 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 258 | else { | 255 | else { |
| @@ -284,7 +281,6 @@ bad: | |||
| 284 | ERR_print_errors(bio_err); | 281 | ERR_print_errors(bio_err); |
| 285 | goto end; | 282 | goto end; |
| 286 | } | 283 | } |
| 287 | |||
| 288 | if (outfile == NULL) { | 284 | if (outfile == NULL) { |
| 289 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 285 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 290 | } else { | 286 | } else { |
| @@ -308,12 +304,10 @@ bad: | |||
| 308 | ERR_print_errors(bio_err); | 304 | ERR_print_errors(bio_err); |
| 309 | goto end; | 305 | goto end; |
| 310 | } | 306 | } |
| 311 | |||
| 312 | if (noout) { | 307 | if (noout) { |
| 313 | ret = 0; | 308 | ret = 0; |
| 314 | goto end; | 309 | goto end; |
| 315 | } | 310 | } |
| 316 | |||
| 317 | BIO_printf(bio_err, "writing EC key\n"); | 311 | BIO_printf(bio_err, "writing EC key\n"); |
| 318 | if (outformat == FORMAT_ASN1) { | 312 | if (outformat == FORMAT_ASN1) { |
| 319 | if (param_out) | 313 | if (param_out) |
| @@ -329,7 +323,7 @@ bad: | |||
| 329 | i = PEM_write_bio_EC_PUBKEY(out, eckey); | 323 | i = PEM_write_bio_EC_PUBKEY(out, eckey); |
| 330 | else | 324 | else |
| 331 | i = PEM_write_bio_ECPrivateKey(out, eckey, enc, | 325 | i = PEM_write_bio_ECPrivateKey(out, eckey, enc, |
| 332 | NULL, 0, NULL, passout); | 326 | NULL, 0, NULL, passout); |
| 333 | } else { | 327 | } else { |
| 334 | BIO_printf(bio_err, "bad output format specified for " | 328 | BIO_printf(bio_err, "bad output format specified for " |
| 335 | "outfile\n"); | 329 | "outfile\n"); |
| @@ -353,12 +347,12 @@ end: | |||
| 353 | if (passout) | 347 | if (passout) |
| 354 | free(passout); | 348 | free(passout); |
| 355 | apps_shutdown(); | 349 | apps_shutdown(); |
| 356 | return(ret); | 350 | return (ret); |
| 357 | } | 351 | } |
| 358 | #else /* !OPENSSL_NO_EC */ | 352 | #else /* !OPENSSL_NO_EC */ |
| 359 | 353 | ||
| 360 | # if PEDANTIC | 354 | #if PEDANTIC |
| 361 | static void *dummy = &dummy; | 355 | static void *dummy = &dummy; |
| 362 | # endif | 356 | #endif |
| 363 | 357 | ||
| 364 | #endif | 358 | #endif |
diff --git a/src/lib/libssl/src/apps/ecparam.c b/src/lib/libssl/src/apps/ecparam.c index 1e7020ca7a..e4b7790f18 100644 --- a/src/lib/libssl/src/apps/ecparam.c +++ b/src/lib/libssl/src/apps/ecparam.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -58,13 +58,13 @@ | |||
| 58 | /* ==================================================================== | 58 | /* ==================================================================== |
| 59 | * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. | 59 | * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. |
| 60 | * | 60 | * |
| 61 | * Portions of the attached software ("Contribution") are developed by | 61 | * Portions of the attached software ("Contribution") are developed by |
| 62 | * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. | 62 | * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. |
| 63 | * | 63 | * |
| 64 | * The Contribution is licensed pursuant to the OpenSSL open source | 64 | * The Contribution is licensed pursuant to the OpenSSL open source |
| 65 | * license provided above. | 65 | * license provided above. |
| 66 | * | 66 | * |
| 67 | * The elliptic curve binary polynomial software is originally written by | 67 | * The elliptic curve binary polynomial software is originally written by |
| 68 | * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. | 68 | * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. |
| 69 | * | 69 | * |
| 70 | */ | 70 | */ |
| @@ -97,7 +97,7 @@ | |||
| 97 | * -C - print a 'C' function creating the parameters | 97 | * -C - print a 'C' function creating the parameters |
| 98 | * -name arg - use the ec parameters with 'short name' name | 98 | * -name arg - use the ec parameters with 'short name' name |
| 99 | * -list_curves - prints a list of all currently available curve 'short names' | 99 | * -list_curves - prints a list of all currently available curve 'short names' |
| 100 | * -conv_form arg - specifies the point conversion form | 100 | * -conv_form arg - specifies the point conversion form |
| 101 | * - possible values: compressed | 101 | * - possible values: compressed |
| 102 | * uncompressed (default) | 102 | * uncompressed (default) |
| 103 | * hybrid | 103 | * hybrid |
| @@ -112,82 +112,75 @@ | |||
| 112 | */ | 112 | */ |
| 113 | 113 | ||
| 114 | 114 | ||
| 115 | static int ecparam_print_var(BIO *,BIGNUM *,const char *,int,unsigned char *); | 115 | static int ecparam_print_var(BIO *, BIGNUM *, const char *, int, unsigned char *); |
| 116 | 116 | ||
| 117 | int MAIN(int, char **); | 117 | int MAIN(int, char **); |
| 118 | 118 | ||
| 119 | int MAIN(int argc, char **argv) | 119 | int |
| 120 | { | 120 | MAIN(int argc, char **argv) |
| 121 | { | ||
| 121 | EC_GROUP *group = NULL; | 122 | EC_GROUP *group = NULL; |
| 122 | point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED; | 123 | point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED; |
| 123 | int new_form = 0; | 124 | int new_form = 0; |
| 124 | int asn1_flag = OPENSSL_EC_NAMED_CURVE; | 125 | int asn1_flag = OPENSSL_EC_NAMED_CURVE; |
| 125 | int new_asn1_flag = 0; | 126 | int new_asn1_flag = 0; |
| 126 | char *curve_name = NULL, *inrand = NULL; | 127 | char *curve_name = NULL, *inrand = NULL; |
| 127 | int list_curves = 0, no_seed = 0, check = 0, | 128 | int list_curves = 0, no_seed = 0, check = 0, badops = 0, text = 0, |
| 128 | badops = 0, text = 0, i, need_rand = 0, genkey = 0; | 129 | i, need_rand = 0, genkey = 0; |
| 129 | char *infile = NULL, *outfile = NULL, *prog; | 130 | char *infile = NULL, *outfile = NULL, *prog; |
| 130 | BIO *in = NULL, *out = NULL; | 131 | BIO *in = NULL, *out = NULL; |
| 131 | int informat, outformat, noout = 0, C = 0, ret = 1; | 132 | int informat, outformat, noout = 0, C = 0, ret = 1; |
| 132 | char *engine = NULL; | 133 | char *engine = NULL; |
| 133 | 134 | ||
| 134 | BIGNUM *ec_p = NULL, *ec_a = NULL, *ec_b = NULL, | 135 | BIGNUM *ec_p = NULL, *ec_a = NULL, *ec_b = NULL, *ec_gen = NULL, |
| 135 | *ec_gen = NULL, *ec_order = NULL, *ec_cofactor = NULL; | 136 | *ec_order = NULL, *ec_cofactor = NULL; |
| 136 | unsigned char *buffer = NULL; | 137 | unsigned char *buffer = NULL; |
| 137 | 138 | ||
| 138 | apps_startup(); | 139 | apps_startup(); |
| 139 | 140 | ||
| 140 | if (bio_err == NULL) | 141 | if (bio_err == NULL) |
| 141 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) | 142 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 142 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); | 143 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 143 | 144 | ||
| 144 | if (!load_config(bio_err, NULL)) | 145 | if (!load_config(bio_err, NULL)) |
| 145 | goto end; | 146 | goto end; |
| 146 | 147 | ||
| 147 | informat=FORMAT_PEM; | 148 | informat = FORMAT_PEM; |
| 148 | outformat=FORMAT_PEM; | 149 | outformat = FORMAT_PEM; |
| 149 | 150 | ||
| 150 | prog=argv[0]; | 151 | prog = argv[0]; |
| 151 | argc--; | 152 | argc--; |
| 152 | argv++; | 153 | argv++; |
| 153 | while (argc >= 1) | 154 | while (argc >= 1) { |
| 154 | { | 155 | if (strcmp(*argv, "-inform") == 0) { |
| 155 | if (strcmp(*argv,"-inform") == 0) | 156 | if (--argc < 1) |
| 156 | { | 157 | goto bad; |
| 157 | if (--argc < 1) goto bad; | 158 | informat = str2fmt(*(++argv)); |
| 158 | informat=str2fmt(*(++argv)); | 159 | } else if (strcmp(*argv, "-outform") == 0) { |
| 159 | } | 160 | if (--argc < 1) |
| 160 | else if (strcmp(*argv,"-outform") == 0) | 161 | goto bad; |
| 161 | { | 162 | outformat = str2fmt(*(++argv)); |
| 162 | if (--argc < 1) goto bad; | 163 | } else if (strcmp(*argv, "-in") == 0) { |
| 163 | outformat=str2fmt(*(++argv)); | 164 | if (--argc < 1) |
| 164 | } | 165 | goto bad; |
| 165 | else if (strcmp(*argv,"-in") == 0) | 166 | infile = *(++argv); |
| 166 | { | 167 | } else if (strcmp(*argv, "-out") == 0) { |
| 167 | if (--argc < 1) goto bad; | 168 | if (--argc < 1) |
| 168 | infile= *(++argv); | 169 | goto bad; |
| 169 | } | 170 | outfile = *(++argv); |
| 170 | else if (strcmp(*argv,"-out") == 0) | 171 | } else if (strcmp(*argv, "-text") == 0) |
| 171 | { | ||
| 172 | if (--argc < 1) goto bad; | ||
| 173 | outfile= *(++argv); | ||
| 174 | } | ||
| 175 | else if (strcmp(*argv,"-text") == 0) | ||
| 176 | text = 1; | 172 | text = 1; |
| 177 | else if (strcmp(*argv,"-C") == 0) | 173 | else if (strcmp(*argv, "-C") == 0) |
| 178 | C = 1; | 174 | C = 1; |
| 179 | else if (strcmp(*argv,"-check") == 0) | 175 | else if (strcmp(*argv, "-check") == 0) |
| 180 | check = 1; | 176 | check = 1; |
| 181 | else if (strcmp (*argv, "-name") == 0) | 177 | else if (strcmp(*argv, "-name") == 0) { |
| 182 | { | ||
| 183 | if (--argc < 1) | 178 | if (--argc < 1) |
| 184 | goto bad; | 179 | goto bad; |
| 185 | curve_name = *(++argv); | 180 | curve_name = *(++argv); |
| 186 | } | 181 | } else if (strcmp(*argv, "-list_curves") == 0) |
| 187 | else if (strcmp(*argv, "-list_curves") == 0) | ||
| 188 | list_curves = 1; | 182 | list_curves = 1; |
| 189 | else if (strcmp(*argv, "-conv_form") == 0) | 183 | else if (strcmp(*argv, "-conv_form") == 0) { |
| 190 | { | ||
| 191 | if (--argc < 1) | 184 | if (--argc < 1) |
| 192 | goto bad; | 185 | goto bad; |
| 193 | ++argv; | 186 | ++argv; |
| @@ -200,9 +193,7 @@ int MAIN(int argc, char **argv) | |||
| 200 | form = POINT_CONVERSION_HYBRID; | 193 | form = POINT_CONVERSION_HYBRID; |
| 201 | else | 194 | else |
| 202 | goto bad; | 195 | goto bad; |
| 203 | } | 196 | } else if (strcmp(*argv, "-param_enc") == 0) { |
| 204 | else if (strcmp(*argv, "-param_enc") == 0) | ||
| 205 | { | ||
| 206 | if (--argc < 1) | 197 | if (--argc < 1) |
| 207 | goto bad; | 198 | goto bad; |
| 208 | ++argv; | 199 | ++argv; |
| @@ -213,153 +204,132 @@ int MAIN(int argc, char **argv) | |||
| 213 | asn1_flag = 0; | 204 | asn1_flag = 0; |
| 214 | else | 205 | else |
| 215 | goto bad; | 206 | goto bad; |
| 216 | } | 207 | } else if (strcmp(*argv, "-no_seed") == 0) |
| 217 | else if (strcmp(*argv, "-no_seed") == 0) | ||
| 218 | no_seed = 1; | 208 | no_seed = 1; |
| 219 | else if (strcmp(*argv, "-noout") == 0) | 209 | else if (strcmp(*argv, "-noout") == 0) |
| 220 | noout=1; | 210 | noout = 1; |
| 221 | else if (strcmp(*argv,"-genkey") == 0) | 211 | else if (strcmp(*argv, "-genkey") == 0) { |
| 222 | { | 212 | genkey = 1; |
| 223 | genkey=1; | 213 | need_rand = 1; |
| 224 | need_rand=1; | 214 | } else if (strcmp(*argv, "-rand") == 0) { |
| 225 | } | 215 | if (--argc < 1) |
| 226 | else if (strcmp(*argv, "-rand") == 0) | 216 | goto bad; |
| 227 | { | 217 | inrand = *(++argv); |
| 228 | if (--argc < 1) goto bad; | 218 | need_rand = 1; |
| 229 | inrand= *(++argv); | 219 | } else if (strcmp(*argv, "-engine") == 0) { |
| 230 | need_rand=1; | 220 | if (--argc < 1) |
| 231 | } | 221 | goto bad; |
| 232 | else if(strcmp(*argv, "-engine") == 0) | ||
| 233 | { | ||
| 234 | if (--argc < 1) goto bad; | ||
| 235 | engine = *(++argv); | 222 | engine = *(++argv); |
| 236 | } | 223 | } else { |
| 237 | else | 224 | BIO_printf(bio_err, "unknown option %s\n", *argv); |
| 238 | { | 225 | badops = 1; |
| 239 | BIO_printf(bio_err,"unknown option %s\n",*argv); | ||
| 240 | badops=1; | ||
| 241 | break; | 226 | break; |
| 242 | } | 227 | } |
| 243 | argc--; | 228 | argc--; |
| 244 | argv++; | 229 | argv++; |
| 245 | } | 230 | } |
| 246 | 231 | ||
| 247 | if (badops) | 232 | if (badops) { |
| 248 | { | ||
| 249 | bad: | 233 | bad: |
| 250 | BIO_printf(bio_err, "%s [options] <infile >outfile\n",prog); | 234 | BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog); |
| 251 | BIO_printf(bio_err, "where options are\n"); | 235 | BIO_printf(bio_err, "where options are\n"); |
| 252 | BIO_printf(bio_err, " -inform arg input format - " | 236 | BIO_printf(bio_err, " -inform arg input format - " |
| 253 | "default PEM (DER or PEM)\n"); | 237 | "default PEM (DER or PEM)\n"); |
| 254 | BIO_printf(bio_err, " -outform arg output format - " | 238 | BIO_printf(bio_err, " -outform arg output format - " |
| 255 | "default PEM\n"); | 239 | "default PEM\n"); |
| 256 | BIO_printf(bio_err, " -in arg input file - " | 240 | BIO_printf(bio_err, " -in arg input file - " |
| 257 | "default stdin\n"); | 241 | "default stdin\n"); |
| 258 | BIO_printf(bio_err, " -out arg output file - " | 242 | BIO_printf(bio_err, " -out arg output file - " |
| 259 | "default stdout\n"); | 243 | "default stdout\n"); |
| 260 | BIO_printf(bio_err, " -noout do not print the " | 244 | BIO_printf(bio_err, " -noout do not print the " |
| 261 | "ec parameter\n"); | 245 | "ec parameter\n"); |
| 262 | BIO_printf(bio_err, " -text print the ec " | 246 | BIO_printf(bio_err, " -text print the ec " |
| 263 | "parameters in text form\n"); | 247 | "parameters in text form\n"); |
| 264 | BIO_printf(bio_err, " -check validate the ec " | 248 | BIO_printf(bio_err, " -check validate the ec " |
| 265 | "parameters\n"); | 249 | "parameters\n"); |
| 266 | BIO_printf(bio_err, " -C print a 'C' " | 250 | BIO_printf(bio_err, " -C print a 'C' " |
| 267 | "function creating the parameters\n"); | 251 | "function creating the parameters\n"); |
| 268 | BIO_printf(bio_err, " -name arg use the " | 252 | BIO_printf(bio_err, " -name arg use the " |
| 269 | "ec parameters with 'short name' name\n"); | 253 | "ec parameters with 'short name' name\n"); |
| 270 | BIO_printf(bio_err, " -list_curves prints a list of " | 254 | BIO_printf(bio_err, " -list_curves prints a list of " |
| 271 | "all currently available curve 'short names'\n"); | 255 | "all currently available curve 'short names'\n"); |
| 272 | BIO_printf(bio_err, " -conv_form arg specifies the " | 256 | BIO_printf(bio_err, " -conv_form arg specifies the " |
| 273 | "point conversion form \n"); | 257 | "point conversion form \n"); |
| 274 | BIO_printf(bio_err, " possible values:" | 258 | BIO_printf(bio_err, " possible values:" |
| 275 | " compressed\n"); | 259 | " compressed\n"); |
| 276 | BIO_printf(bio_err, " " | 260 | BIO_printf(bio_err, " " |
| 277 | " uncompressed (default)\n"); | 261 | " uncompressed (default)\n"); |
| 278 | BIO_printf(bio_err, " " | 262 | BIO_printf(bio_err, " " |
| 279 | " hybrid\n"); | 263 | " hybrid\n"); |
| 280 | BIO_printf(bio_err, " -param_enc arg specifies the way" | 264 | BIO_printf(bio_err, " -param_enc arg specifies the way" |
| 281 | " the ec parameters are encoded\n"); | 265 | " the ec parameters are encoded\n"); |
| 282 | BIO_printf(bio_err, " in the asn1 der " | 266 | BIO_printf(bio_err, " in the asn1 der " |
| 283 | "encoding\n"); | 267 | "encoding\n"); |
| 284 | BIO_printf(bio_err, " possible values:" | 268 | BIO_printf(bio_err, " possible values:" |
| 285 | " named_curve (default)\n"); | 269 | " named_curve (default)\n"); |
| 286 | BIO_printf(bio_err, " " | 270 | BIO_printf(bio_err, " " |
| 287 | " explicit\n"); | 271 | " explicit\n"); |
| 288 | BIO_printf(bio_err, " -no_seed if 'explicit'" | 272 | BIO_printf(bio_err, " -no_seed if 'explicit'" |
| 289 | " parameters are chosen do not" | 273 | " parameters are chosen do not" |
| 290 | " use the seed\n"); | 274 | " use the seed\n"); |
| 291 | BIO_printf(bio_err, " -genkey generate ec" | 275 | BIO_printf(bio_err, " -genkey generate ec" |
| 292 | " key\n"); | 276 | " key\n"); |
| 293 | BIO_printf(bio_err, " -rand file files to use for" | 277 | BIO_printf(bio_err, " -rand file files to use for" |
| 294 | " random number input\n"); | 278 | " random number input\n"); |
| 295 | BIO_printf(bio_err, " -engine e use engine e, " | 279 | BIO_printf(bio_err, " -engine e use engine e, " |
| 296 | "possibly a hardware device\n"); | 280 | "possibly a hardware device\n"); |
| 297 | goto end; | 281 | goto end; |
| 298 | } | 282 | } |
| 299 | |||
| 300 | ERR_load_crypto_strings(); | 283 | ERR_load_crypto_strings(); |
| 301 | 284 | ||
| 302 | in=BIO_new(BIO_s_file()); | 285 | in = BIO_new(BIO_s_file()); |
| 303 | out=BIO_new(BIO_s_file()); | 286 | out = BIO_new(BIO_s_file()); |
| 304 | if ((in == NULL) || (out == NULL)) | 287 | if ((in == NULL) || (out == NULL)) { |
| 305 | { | ||
| 306 | ERR_print_errors(bio_err); | 288 | ERR_print_errors(bio_err); |
| 307 | goto end; | 289 | goto end; |
| 308 | } | 290 | } |
| 309 | |||
| 310 | if (infile == NULL) | 291 | if (infile == NULL) |
| 311 | BIO_set_fp(in,stdin,BIO_NOCLOSE); | 292 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 312 | else | 293 | else { |
| 313 | { | 294 | if (BIO_read_filename(in, infile) <= 0) { |
| 314 | if (BIO_read_filename(in,infile) <= 0) | ||
| 315 | { | ||
| 316 | perror(infile); | 295 | perror(infile); |
| 317 | goto end; | 296 | goto end; |
| 318 | } | ||
| 319 | } | ||
| 320 | if (outfile == NULL) | ||
| 321 | { | ||
| 322 | BIO_set_fp(out,stdout,BIO_NOCLOSE); | ||
| 323 | } | 297 | } |
| 324 | else | 298 | } |
| 325 | { | 299 | if (outfile == NULL) { |
| 326 | if (BIO_write_filename(out,outfile) <= 0) | 300 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 327 | { | 301 | } else { |
| 302 | if (BIO_write_filename(out, outfile) <= 0) { | ||
| 328 | perror(outfile); | 303 | perror(outfile); |
| 329 | goto end; | 304 | goto end; |
| 330 | } | ||
| 331 | } | 305 | } |
| 306 | } | ||
| 332 | 307 | ||
| 333 | #ifndef OPENSSL_NO_ENGINE | 308 | #ifndef OPENSSL_NO_ENGINE |
| 334 | setup_engine(bio_err, engine, 0); | 309 | setup_engine(bio_err, engine, 0); |
| 335 | #endif | 310 | #endif |
| 336 | 311 | ||
| 337 | if (list_curves) | 312 | if (list_curves) { |
| 338 | { | ||
| 339 | EC_builtin_curve *curves = NULL; | 313 | EC_builtin_curve *curves = NULL; |
| 340 | size_t crv_len = 0; | 314 | size_t crv_len = 0; |
| 341 | size_t n = 0; | 315 | size_t n = 0; |
| 342 | 316 | ||
| 343 | crv_len = EC_get_builtin_curves(NULL, 0); | 317 | crv_len = EC_get_builtin_curves(NULL, 0); |
| 344 | 318 | ||
| 345 | curves = malloc((int)(sizeof(EC_builtin_curve) * crv_len)); | 319 | curves = malloc((int) (sizeof(EC_builtin_curve) * crv_len)); |
| 346 | 320 | ||
| 347 | if (curves == NULL) | 321 | if (curves == NULL) |
| 348 | goto end; | 322 | goto end; |
| 349 | 323 | ||
| 350 | if (!EC_get_builtin_curves(curves, crv_len)) | 324 | if (!EC_get_builtin_curves(curves, crv_len)) { |
| 351 | { | ||
| 352 | free(curves); | 325 | free(curves); |
| 353 | goto end; | 326 | goto end; |
| 354 | } | 327 | } |
| 355 | 328 | for (n = 0; n < crv_len; n++) { | |
| 356 | |||
| 357 | for (n = 0; n < crv_len; n++) | ||
| 358 | { | ||
| 359 | const char *comment; | 329 | const char *comment; |
| 360 | const char *sname; | 330 | const char *sname; |
| 361 | comment = curves[n].comment; | 331 | comment = curves[n].comment; |
| 362 | sname = OBJ_nid2sn(curves[n].nid); | 332 | sname = OBJ_nid2sn(curves[n].nid); |
| 363 | if (comment == NULL) | 333 | if (comment == NULL) |
| 364 | comment = "CURVE DESCRIPTION NOT AVAILABLE"; | 334 | comment = "CURVE DESCRIPTION NOT AVAILABLE"; |
| 365 | if (sname == NULL) | 335 | if (sname == NULL) |
| @@ -367,142 +337,112 @@ bad: | |||
| 367 | 337 | ||
| 368 | BIO_printf(out, " %-10s: ", sname); | 338 | BIO_printf(out, " %-10s: ", sname); |
| 369 | BIO_printf(out, "%s\n", comment); | 339 | BIO_printf(out, "%s\n", comment); |
| 370 | } | 340 | } |
| 371 | 341 | ||
| 372 | free(curves); | 342 | free(curves); |
| 373 | ret = 0; | 343 | ret = 0; |
| 374 | goto end; | 344 | goto end; |
| 375 | } | 345 | } |
| 376 | 346 | if (curve_name != NULL) { | |
| 377 | if (curve_name != NULL) | ||
| 378 | { | ||
| 379 | int nid; | 347 | int nid; |
| 380 | 348 | ||
| 381 | /* workaround for the SECG curve names secp192r1 | 349 | /* |
| 382 | * and secp256r1 (which are the same as the curves | 350 | * workaround for the SECG curve names secp192r1 and |
| 383 | * prime192v1 and prime256v1 defined in X9.62) | 351 | * secp256r1 (which are the same as the curves prime192v1 and |
| 352 | * prime256v1 defined in X9.62) | ||
| 384 | */ | 353 | */ |
| 385 | if (!strcmp(curve_name, "secp192r1")) | 354 | if (!strcmp(curve_name, "secp192r1")) { |
| 386 | { | ||
| 387 | BIO_printf(bio_err, "using curve name prime192v1 " | 355 | BIO_printf(bio_err, "using curve name prime192v1 " |
| 388 | "instead of secp192r1\n"); | 356 | "instead of secp192r1\n"); |
| 389 | nid = NID_X9_62_prime192v1; | 357 | nid = NID_X9_62_prime192v1; |
| 390 | } | 358 | } else if (!strcmp(curve_name, "secp256r1")) { |
| 391 | else if (!strcmp(curve_name, "secp256r1")) | ||
| 392 | { | ||
| 393 | BIO_printf(bio_err, "using curve name prime256v1 " | 359 | BIO_printf(bio_err, "using curve name prime256v1 " |
| 394 | "instead of secp256r1\n"); | 360 | "instead of secp256r1\n"); |
| 395 | nid = NID_X9_62_prime256v1; | 361 | nid = NID_X9_62_prime256v1; |
| 396 | } | 362 | } else |
| 397 | else | ||
| 398 | nid = OBJ_sn2nid(curve_name); | 363 | nid = OBJ_sn2nid(curve_name); |
| 399 | |||
| 400 | if (nid == 0) | ||
| 401 | { | ||
| 402 | BIO_printf(bio_err, "unknown curve name (%s)\n", | ||
| 403 | curve_name); | ||
| 404 | goto end; | ||
| 405 | } | ||
| 406 | 364 | ||
| 365 | if (nid == 0) { | ||
| 366 | BIO_printf(bio_err, "unknown curve name (%s)\n", | ||
| 367 | curve_name); | ||
| 368 | goto end; | ||
| 369 | } | ||
| 407 | group = EC_GROUP_new_by_curve_name(nid); | 370 | group = EC_GROUP_new_by_curve_name(nid); |
| 408 | if (group == NULL) | 371 | if (group == NULL) { |
| 409 | { | 372 | BIO_printf(bio_err, "unable to create curve (%s)\n", |
| 410 | BIO_printf(bio_err, "unable to create curve (%s)\n", | 373 | curve_name); |
| 411 | curve_name); | ||
| 412 | goto end; | 374 | goto end; |
| 413 | } | 375 | } |
| 414 | EC_GROUP_set_asn1_flag(group, asn1_flag); | 376 | EC_GROUP_set_asn1_flag(group, asn1_flag); |
| 415 | EC_GROUP_set_point_conversion_form(group, form); | 377 | EC_GROUP_set_point_conversion_form(group, form); |
| 416 | } | 378 | } else if (informat == FORMAT_ASN1) { |
| 417 | else if (informat == FORMAT_ASN1) | ||
| 418 | { | ||
| 419 | group = d2i_ECPKParameters_bio(in, NULL); | 379 | group = d2i_ECPKParameters_bio(in, NULL); |
| 420 | } | 380 | } else if (informat == FORMAT_PEM) { |
| 421 | else if (informat == FORMAT_PEM) | 381 | group = PEM_read_bio_ECPKParameters(in, NULL, NULL, NULL); |
| 422 | { | 382 | } else { |
| 423 | group = PEM_read_bio_ECPKParameters(in,NULL,NULL,NULL); | ||
| 424 | } | ||
| 425 | else | ||
| 426 | { | ||
| 427 | BIO_printf(bio_err, "bad input format specified\n"); | 383 | BIO_printf(bio_err, "bad input format specified\n"); |
| 428 | goto end; | 384 | goto end; |
| 429 | } | 385 | } |
| 430 | 386 | ||
| 431 | if (group == NULL) | 387 | if (group == NULL) { |
| 432 | { | 388 | BIO_printf(bio_err, |
| 433 | BIO_printf(bio_err, | 389 | "unable to load elliptic curve parameters\n"); |
| 434 | "unable to load elliptic curve parameters\n"); | ||
| 435 | ERR_print_errors(bio_err); | 390 | ERR_print_errors(bio_err); |
| 436 | goto end; | 391 | goto end; |
| 437 | } | 392 | } |
| 438 | |||
| 439 | if (new_form) | 393 | if (new_form) |
| 440 | EC_GROUP_set_point_conversion_form(group, form); | 394 | EC_GROUP_set_point_conversion_form(group, form); |
| 441 | 395 | ||
| 442 | if (new_asn1_flag) | 396 | if (new_asn1_flag) |
| 443 | EC_GROUP_set_asn1_flag(group, asn1_flag); | 397 | EC_GROUP_set_asn1_flag(group, asn1_flag); |
| 444 | 398 | ||
| 445 | if (no_seed) | 399 | if (no_seed) { |
| 446 | { | ||
| 447 | EC_GROUP_set_seed(group, NULL, 0); | 400 | EC_GROUP_set_seed(group, NULL, 0); |
| 448 | } | 401 | } |
| 449 | 402 | if (text) { | |
| 450 | if (text) | ||
| 451 | { | ||
| 452 | if (!ECPKParameters_print(out, group, 0)) | 403 | if (!ECPKParameters_print(out, group, 0)) |
| 453 | goto end; | 404 | goto end; |
| 454 | } | 405 | } |
| 455 | 406 | if (check) { | |
| 456 | if (check) | ||
| 457 | { | ||
| 458 | if (group == NULL) | 407 | if (group == NULL) |
| 459 | BIO_printf(bio_err, "no elliptic curve parameters\n"); | 408 | BIO_printf(bio_err, "no elliptic curve parameters\n"); |
| 460 | BIO_printf(bio_err, "checking elliptic curve parameters: "); | 409 | BIO_printf(bio_err, "checking elliptic curve parameters: "); |
| 461 | if (!EC_GROUP_check(group, NULL)) | 410 | if (!EC_GROUP_check(group, NULL)) { |
| 462 | { | ||
| 463 | BIO_printf(bio_err, "failed\n"); | 411 | BIO_printf(bio_err, "failed\n"); |
| 464 | ERR_print_errors(bio_err); | 412 | ERR_print_errors(bio_err); |
| 465 | } | 413 | } else |
| 466 | else | ||
| 467 | BIO_printf(bio_err, "ok\n"); | 414 | BIO_printf(bio_err, "ok\n"); |
| 468 | |||
| 469 | } | ||
| 470 | 415 | ||
| 471 | if (C) | 416 | } |
| 472 | { | 417 | if (C) { |
| 473 | size_t buf_len = 0, tmp_len = 0; | 418 | size_t buf_len = 0, tmp_len = 0; |
| 474 | const EC_POINT *point; | 419 | const EC_POINT *point; |
| 475 | int is_prime, len = 0; | 420 | int is_prime, len = 0; |
| 476 | const EC_METHOD *meth = EC_GROUP_method_of(group); | 421 | const EC_METHOD *meth = EC_GROUP_method_of(group); |
| 477 | 422 | ||
| 478 | if ((ec_p = BN_new()) == NULL || (ec_a = BN_new()) == NULL || | 423 | if ((ec_p = BN_new()) == NULL || (ec_a = BN_new()) == NULL || |
| 479 | (ec_b = BN_new()) == NULL || (ec_gen = BN_new()) == NULL || | 424 | (ec_b = BN_new()) == NULL || (ec_gen = BN_new()) == NULL || |
| 480 | (ec_order = BN_new()) == NULL || | 425 | (ec_order = BN_new()) == NULL || |
| 481 | (ec_cofactor = BN_new()) == NULL ) | 426 | (ec_cofactor = BN_new()) == NULL) { |
| 482 | { | ||
| 483 | perror("malloc"); | 427 | perror("malloc"); |
| 484 | goto end; | 428 | goto end; |
| 485 | } | 429 | } |
| 486 | 430 | is_prime = (EC_METHOD_get_field_type(meth) == | |
| 487 | is_prime = (EC_METHOD_get_field_type(meth) == | 431 | NID_X9_62_prime_field); |
| 488 | NID_X9_62_prime_field); | ||
| 489 | 432 | ||
| 490 | if (is_prime) | 433 | if (is_prime) { |
| 491 | { | ||
| 492 | if (!EC_GROUP_get_curve_GFp(group, ec_p, ec_a, | 434 | if (!EC_GROUP_get_curve_GFp(group, ec_p, ec_a, |
| 493 | ec_b, NULL)) | 435 | ec_b, NULL)) |
| 494 | goto end; | 436 | goto end; |
| 495 | } | 437 | } else { |
| 496 | else | ||
| 497 | { | ||
| 498 | /* TODO */ | 438 | /* TODO */ |
| 499 | goto end; | 439 | goto end; |
| 500 | } | 440 | } |
| 501 | 441 | ||
| 502 | if ((point = EC_GROUP_get0_generator(group)) == NULL) | 442 | if ((point = EC_GROUP_get0_generator(group)) == NULL) |
| 503 | goto end; | 443 | goto end; |
| 504 | if (!EC_POINT_point2bn(group, point, | 444 | if (!EC_POINT_point2bn(group, point, |
| 505 | EC_GROUP_get_point_conversion_form(group), ec_gen, | 445 | EC_GROUP_get_point_conversion_form(group), ec_gen, |
| 506 | NULL)) | 446 | NULL)) |
| 507 | goto end; | 447 | goto end; |
| 508 | if (!EC_GROUP_get_order(group, ec_order, NULL)) | 448 | if (!EC_GROUP_get_order(group, ec_order, NULL)) |
| @@ -510,40 +450,38 @@ bad: | |||
| 510 | if (!EC_GROUP_get_cofactor(group, ec_cofactor, NULL)) | 450 | if (!EC_GROUP_get_cofactor(group, ec_cofactor, NULL)) |
| 511 | goto end; | 451 | goto end; |
| 512 | 452 | ||
| 513 | if (!ec_p || !ec_a || !ec_b || !ec_gen || | 453 | if (!ec_p || !ec_a || !ec_b || !ec_gen || |
| 514 | !ec_order || !ec_cofactor) | 454 | !ec_order || !ec_cofactor) |
| 515 | goto end; | 455 | goto end; |
| 516 | 456 | ||
| 517 | len = BN_num_bits(ec_order); | 457 | len = BN_num_bits(ec_order); |
| 518 | 458 | ||
| 519 | if ((tmp_len = (size_t)BN_num_bytes(ec_p)) > buf_len) | 459 | if ((tmp_len = (size_t) BN_num_bytes(ec_p)) > buf_len) |
| 520 | buf_len = tmp_len; | 460 | buf_len = tmp_len; |
| 521 | if ((tmp_len = (size_t)BN_num_bytes(ec_a)) > buf_len) | 461 | if ((tmp_len = (size_t) BN_num_bytes(ec_a)) > buf_len) |
| 522 | buf_len = tmp_len; | 462 | buf_len = tmp_len; |
| 523 | if ((tmp_len = (size_t)BN_num_bytes(ec_b)) > buf_len) | 463 | if ((tmp_len = (size_t) BN_num_bytes(ec_b)) > buf_len) |
| 524 | buf_len = tmp_len; | 464 | buf_len = tmp_len; |
| 525 | if ((tmp_len = (size_t)BN_num_bytes(ec_gen)) > buf_len) | 465 | if ((tmp_len = (size_t) BN_num_bytes(ec_gen)) > buf_len) |
| 526 | buf_len = tmp_len; | 466 | buf_len = tmp_len; |
| 527 | if ((tmp_len = (size_t)BN_num_bytes(ec_order)) > buf_len) | 467 | if ((tmp_len = (size_t) BN_num_bytes(ec_order)) > buf_len) |
| 528 | buf_len = tmp_len; | 468 | buf_len = tmp_len; |
| 529 | if ((tmp_len = (size_t)BN_num_bytes(ec_cofactor)) > buf_len) | 469 | if ((tmp_len = (size_t) BN_num_bytes(ec_cofactor)) > buf_len) |
| 530 | buf_len = tmp_len; | 470 | buf_len = tmp_len; |
| 531 | 471 | ||
| 532 | buffer = (unsigned char *)malloc(buf_len); | 472 | buffer = (unsigned char *) malloc(buf_len); |
| 533 | 473 | ||
| 534 | if (buffer == NULL) | 474 | if (buffer == NULL) { |
| 535 | { | ||
| 536 | perror("malloc"); | 475 | perror("malloc"); |
| 537 | goto end; | 476 | goto end; |
| 538 | } | 477 | } |
| 539 | |||
| 540 | ecparam_print_var(out, ec_p, "ec_p", len, buffer); | 478 | ecparam_print_var(out, ec_p, "ec_p", len, buffer); |
| 541 | ecparam_print_var(out, ec_a, "ec_a", len, buffer); | 479 | ecparam_print_var(out, ec_a, "ec_a", len, buffer); |
| 542 | ecparam_print_var(out, ec_b, "ec_b", len, buffer); | 480 | ecparam_print_var(out, ec_b, "ec_b", len, buffer); |
| 543 | ecparam_print_var(out, ec_gen, "ec_gen", len, buffer); | 481 | ecparam_print_var(out, ec_gen, "ec_gen", len, buffer); |
| 544 | ecparam_print_var(out, ec_order, "ec_order", len, buffer); | 482 | ecparam_print_var(out, ec_order, "ec_order", len, buffer); |
| 545 | ecparam_print_var(out, ec_cofactor, "ec_cofactor", len, | 483 | ecparam_print_var(out, ec_cofactor, "ec_cofactor", len, |
| 546 | buffer); | 484 | buffer); |
| 547 | 485 | ||
| 548 | BIO_printf(out, "\n\n"); | 486 | BIO_printf(out, "\n\n"); |
| 549 | 487 | ||
| @@ -552,42 +490,39 @@ bad: | |||
| 552 | BIO_printf(out, "\tEC_GROUP *group = NULL;\n"); | 490 | BIO_printf(out, "\tEC_GROUP *group = NULL;\n"); |
| 553 | BIO_printf(out, "\tEC_POINT *point = NULL;\n"); | 491 | BIO_printf(out, "\tEC_POINT *point = NULL;\n"); |
| 554 | BIO_printf(out, "\tBIGNUM *tmp_1 = NULL, *tmp_2 = NULL, " | 492 | BIO_printf(out, "\tBIGNUM *tmp_1 = NULL, *tmp_2 = NULL, " |
| 555 | "*tmp_3 = NULL;\n\n"); | 493 | "*tmp_3 = NULL;\n\n"); |
| 556 | BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_p_%d, " | 494 | BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_p_%d, " |
| 557 | "sizeof(ec_p_%d), NULL)) == NULL)\n\t\t" | 495 | "sizeof(ec_p_%d), NULL)) == NULL)\n\t\t" |
| 558 | "goto err;\n", len, len); | 496 | "goto err;\n", len, len); |
| 559 | BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_a_%d, " | 497 | BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_a_%d, " |
| 560 | "sizeof(ec_a_%d), NULL)) == NULL)\n\t\t" | 498 | "sizeof(ec_a_%d), NULL)) == NULL)\n\t\t" |
| 561 | "goto err;\n", len, len); | 499 | "goto err;\n", len, len); |
| 562 | BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_b_%d, " | 500 | BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_b_%d, " |
| 563 | "sizeof(ec_b_%d), NULL)) == NULL)\n\t\t" | 501 | "sizeof(ec_b_%d), NULL)) == NULL)\n\t\t" |
| 564 | "goto err;\n", len, len); | 502 | "goto err;\n", len, len); |
| 565 | if (is_prime) | 503 | if (is_prime) { |
| 566 | { | ||
| 567 | BIO_printf(out, "\tif ((group = EC_GROUP_new_curve_" | 504 | BIO_printf(out, "\tif ((group = EC_GROUP_new_curve_" |
| 568 | "GFp(tmp_1, tmp_2, tmp_3, NULL)) == NULL)" | 505 | "GFp(tmp_1, tmp_2, tmp_3, NULL)) == NULL)" |
| 569 | "\n\t\tgoto err;\n\n"); | 506 | "\n\t\tgoto err;\n\n"); |
| 570 | } | 507 | } else { |
| 571 | else | ||
| 572 | { | ||
| 573 | /* TODO */ | 508 | /* TODO */ |
| 574 | goto end; | 509 | goto end; |
| 575 | } | 510 | } |
| 576 | BIO_printf(out, "\t/* build generator */\n"); | 511 | BIO_printf(out, "\t/* build generator */\n"); |
| 577 | BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_gen_%d, " | 512 | BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_gen_%d, " |
| 578 | "sizeof(ec_gen_%d), tmp_1)) == NULL)" | 513 | "sizeof(ec_gen_%d), tmp_1)) == NULL)" |
| 579 | "\n\t\tgoto err;\n", len, len); | 514 | "\n\t\tgoto err;\n", len, len); |
| 580 | BIO_printf(out, "\tpoint = EC_POINT_bn2point(group, tmp_1, " | 515 | BIO_printf(out, "\tpoint = EC_POINT_bn2point(group, tmp_1, " |
| 581 | "NULL, NULL);\n"); | 516 | "NULL, NULL);\n"); |
| 582 | BIO_printf(out, "\tif (point == NULL)\n\t\tgoto err;\n"); | 517 | BIO_printf(out, "\tif (point == NULL)\n\t\tgoto err;\n"); |
| 583 | BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_order_%d, " | 518 | BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_order_%d, " |
| 584 | "sizeof(ec_order_%d), tmp_2)) == NULL)" | 519 | "sizeof(ec_order_%d), tmp_2)) == NULL)" |
| 585 | "\n\t\tgoto err;\n", len, len); | 520 | "\n\t\tgoto err;\n", len, len); |
| 586 | BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_cofactor_%d, " | 521 | BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_cofactor_%d, " |
| 587 | "sizeof(ec_cofactor_%d), tmp_3)) == NULL)" | 522 | "sizeof(ec_cofactor_%d), tmp_3)) == NULL)" |
| 588 | "\n\t\tgoto err;\n", len, len); | 523 | "\n\t\tgoto err;\n", len, len); |
| 589 | BIO_printf(out, "\tif (!EC_GROUP_set_generator(group, point," | 524 | BIO_printf(out, "\tif (!EC_GROUP_set_generator(group, point," |
| 590 | " tmp_2, tmp_3))\n\t\tgoto err;\n"); | 525 | " tmp_2, tmp_3))\n\t\tgoto err;\n"); |
| 591 | BIO_printf(out, "\n\tok=1;\n"); | 526 | BIO_printf(out, "\n\tok=1;\n"); |
| 592 | BIO_printf(out, "err:\n"); | 527 | BIO_printf(out, "err:\n"); |
| 593 | BIO_printf(out, "\tif (tmp_1)\n\t\tBN_free(tmp_1);\n"); | 528 | BIO_printf(out, "\tif (tmp_1)\n\t\tBN_free(tmp_1);\n"); |
| @@ -601,38 +536,30 @@ bad: | |||
| 601 | BIO_printf(out, "\t\t}\n"); | 536 | BIO_printf(out, "\t\t}\n"); |
| 602 | BIO_printf(out, "\treturn(group);\n\t}\n"); | 537 | BIO_printf(out, "\treturn(group);\n\t}\n"); |
| 603 | } | 538 | } |
| 604 | 539 | if (!noout) { | |
| 605 | if (!noout) | ||
| 606 | { | ||
| 607 | if (outformat == FORMAT_ASN1) | 540 | if (outformat == FORMAT_ASN1) |
| 608 | i = i2d_ECPKParameters_bio(out, group); | 541 | i = i2d_ECPKParameters_bio(out, group); |
| 609 | else if (outformat == FORMAT_PEM) | 542 | else if (outformat == FORMAT_PEM) |
| 610 | i = PEM_write_bio_ECPKParameters(out, group); | 543 | i = PEM_write_bio_ECPKParameters(out, group); |
| 611 | else | 544 | else { |
| 612 | { | 545 | BIO_printf(bio_err, "bad output format specified for" |
| 613 | BIO_printf(bio_err,"bad output format specified for" | 546 | " outfile\n"); |
| 614 | " outfile\n"); | ||
| 615 | goto end; | 547 | goto end; |
| 616 | } | 548 | } |
| 617 | if (!i) | 549 | if (!i) { |
| 618 | { | ||
| 619 | BIO_printf(bio_err, "unable to write elliptic " | 550 | BIO_printf(bio_err, "unable to write elliptic " |
| 620 | "curve parameters\n"); | 551 | "curve parameters\n"); |
| 621 | ERR_print_errors(bio_err); | 552 | ERR_print_errors(bio_err); |
| 622 | goto end; | 553 | goto end; |
| 623 | } | ||
| 624 | } | 554 | } |
| 625 | 555 | } | |
| 626 | if (need_rand) | 556 | if (need_rand) { |
| 627 | { | ||
| 628 | app_RAND_load_file(NULL, bio_err, (inrand != NULL)); | 557 | app_RAND_load_file(NULL, bio_err, (inrand != NULL)); |
| 629 | if (inrand != NULL) | 558 | if (inrand != NULL) |
| 630 | BIO_printf(bio_err,"%ld semi-random bytes loaded\n", | 559 | BIO_printf(bio_err, "%ld semi-random bytes loaded\n", |
| 631 | app_RAND_load_files(inrand)); | 560 | app_RAND_load_files(inrand)); |
| 632 | } | 561 | } |
| 633 | 562 | if (genkey) { | |
| 634 | if (genkey) | ||
| 635 | { | ||
| 636 | EC_KEY *eckey = EC_KEY_new(); | 563 | EC_KEY *eckey = EC_KEY_new(); |
| 637 | 564 | ||
| 638 | if (eckey == NULL) | 565 | if (eckey == NULL) |
| @@ -642,31 +569,28 @@ bad: | |||
| 642 | 569 | ||
| 643 | if (EC_KEY_set_group(eckey, group) == 0) | 570 | if (EC_KEY_set_group(eckey, group) == 0) |
| 644 | goto end; | 571 | goto end; |
| 645 | 572 | ||
| 646 | if (!EC_KEY_generate_key(eckey)) | 573 | if (!EC_KEY_generate_key(eckey)) { |
| 647 | { | ||
| 648 | EC_KEY_free(eckey); | 574 | EC_KEY_free(eckey); |
| 649 | goto end; | 575 | goto end; |
| 650 | } | 576 | } |
| 651 | if (outformat == FORMAT_ASN1) | 577 | if (outformat == FORMAT_ASN1) |
| 652 | i = i2d_ECPrivateKey_bio(out, eckey); | 578 | i = i2d_ECPrivateKey_bio(out, eckey); |
| 653 | else if (outformat == FORMAT_PEM) | 579 | else if (outformat == FORMAT_PEM) |
| 654 | i = PEM_write_bio_ECPrivateKey(out, eckey, NULL, | 580 | i = PEM_write_bio_ECPrivateKey(out, eckey, NULL, |
| 655 | NULL, 0, NULL, NULL); | 581 | NULL, 0, NULL, NULL); |
| 656 | else | 582 | else { |
| 657 | { | ||
| 658 | BIO_printf(bio_err, "bad output format specified " | 583 | BIO_printf(bio_err, "bad output format specified " |
| 659 | "for outfile\n"); | 584 | "for outfile\n"); |
| 660 | EC_KEY_free(eckey); | 585 | EC_KEY_free(eckey); |
| 661 | goto end; | 586 | goto end; |
| 662 | } | ||
| 663 | EC_KEY_free(eckey); | ||
| 664 | } | 587 | } |
| 665 | 588 | EC_KEY_free(eckey); | |
| 589 | } | ||
| 666 | if (need_rand) | 590 | if (need_rand) |
| 667 | app_RAND_write_file(NULL, bio_err); | 591 | app_RAND_write_file(NULL, bio_err); |
| 668 | 592 | ||
| 669 | ret=0; | 593 | ret = 0; |
| 670 | end: | 594 | end: |
| 671 | if (ec_p) | 595 | if (ec_p) |
| 672 | BN_free(ec_p); | 596 | BN_free(ec_p); |
| @@ -689,37 +613,36 @@ end: | |||
| 689 | if (group != NULL) | 613 | if (group != NULL) |
| 690 | EC_GROUP_free(group); | 614 | EC_GROUP_free(group); |
| 691 | apps_shutdown(); | 615 | apps_shutdown(); |
| 692 | return(ret); | 616 | return (ret); |
| 693 | } | 617 | } |
| 694 | 618 | ||
| 695 | static int ecparam_print_var(BIO *out, BIGNUM *in, const char *var, | 619 | static int |
| 696 | int len, unsigned char *buffer) | 620 | ecparam_print_var(BIO * out, BIGNUM * in, const char *var, |
| 697 | { | 621 | int len, unsigned char *buffer) |
| 622 | { | ||
| 698 | BIO_printf(out, "static unsigned char %s_%d[] = {", var, len); | 623 | BIO_printf(out, "static unsigned char %s_%d[] = {", var, len); |
| 699 | if (BN_is_zero(in)) | 624 | if (BN_is_zero(in)) |
| 700 | BIO_printf(out, "\n\t0x00"); | 625 | BIO_printf(out, "\n\t0x00"); |
| 701 | else | 626 | else { |
| 702 | { | ||
| 703 | int i, l; | 627 | int i, l; |
| 704 | 628 | ||
| 705 | l = BN_bn2bin(in, buffer); | 629 | l = BN_bn2bin(in, buffer); |
| 706 | for (i=0; i<l-1; i++) | 630 | for (i = 0; i < l - 1; i++) { |
| 707 | { | 631 | if ((i % 12) == 0) |
| 708 | if ((i%12) == 0) | ||
| 709 | BIO_printf(out, "\n\t"); | 632 | BIO_printf(out, "\n\t"); |
| 710 | BIO_printf(out, "0x%02X,", buffer[i]); | 633 | BIO_printf(out, "0x%02X,", buffer[i]); |
| 711 | } | 634 | } |
| 712 | if ((i%12) == 0) | 635 | if ((i % 12) == 0) |
| 713 | BIO_printf(out, "\n\t"); | 636 | BIO_printf(out, "\n\t"); |
| 714 | BIO_printf(out, "0x%02X", buffer[i]); | 637 | BIO_printf(out, "0x%02X", buffer[i]); |
| 715 | } | 638 | } |
| 716 | BIO_printf(out, "\n\t};\n\n"); | 639 | BIO_printf(out, "\n\t};\n\n"); |
| 717 | return 1; | 640 | return 1; |
| 718 | } | 641 | } |
| 719 | #else /* !OPENSSL_NO_EC */ | 642 | #else /* !OPENSSL_NO_EC */ |
| 720 | 643 | ||
| 721 | # if PEDANTIC | 644 | #if PEDANTIC |
| 722 | static void *dummy=&dummy; | 645 | static void *dummy = &dummy; |
| 723 | # endif | 646 | #endif |
| 724 | 647 | ||
| 725 | #endif | 648 | #endif |
diff --git a/src/lib/libssl/src/apps/enc.c b/src/lib/libssl/src/apps/enc.c index 11768dbe3a..ce54c39e3f 100644 --- a/src/lib/libssl/src/apps/enc.c +++ b/src/lib/libssl/src/apps/enc.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written |
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). |
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. |
| 8 | * | 8 | * |
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as |
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions |
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, |
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation |
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms |
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). |
| 15 | * | 15 | * |
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in |
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. |
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution |
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. |
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or |
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. |
| 22 | * | 22 | * |
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without |
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions |
| 25 | * are met: | 25 | * are met: |
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" |
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library |
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). |
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from |
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: |
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" |
| 40 | * | 40 | * |
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. |
| 52 | * | 52 | * |
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or |
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be |
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence |
| @@ -70,7 +70,7 @@ | |||
| 70 | #include <openssl/comp.h> | 70 | #include <openssl/comp.h> |
| 71 | #include <ctype.h> | 71 | #include <ctype.h> |
| 72 | 72 | ||
| 73 | int set_hex(char *in,unsigned char *out,int size); | 73 | int set_hex(char *in, unsigned char *out, int size); |
| 74 | #undef SIZE | 74 | #undef SIZE |
| 75 | #undef BSIZE | 75 | #undef BSIZE |
| 76 | #undef PROG | 76 | #undef PROG |
| @@ -79,509 +79,463 @@ int set_hex(char *in,unsigned char *out,int size); | |||
| 79 | #define BSIZE (8*1024) | 79 | #define BSIZE (8*1024) |
| 80 | #define PROG enc_main | 80 | #define PROG enc_main |
| 81 | 81 | ||
| 82 | static void show_ciphers(const OBJ_NAME *name,void *bio_) | 82 | static void |
| 83 | { | 83 | show_ciphers(const OBJ_NAME * name, void *bio_) |
| 84 | BIO *bio=bio_; | 84 | { |
| 85 | BIO *bio = bio_; | ||
| 85 | static int n; | 86 | static int n; |
| 86 | 87 | ||
| 87 | if(!islower((unsigned char)*name->name)) | 88 | if (!islower((unsigned char) *name->name)) |
| 88 | return; | 89 | return; |
| 89 | 90 | ||
| 90 | BIO_printf(bio,"-%-25s",name->name); | 91 | BIO_printf(bio, "-%-25s", name->name); |
| 91 | if(++n == 3) | 92 | if (++n == 3) { |
| 92 | { | 93 | BIO_printf(bio, "\n"); |
| 93 | BIO_printf(bio,"\n"); | 94 | n = 0; |
| 94 | n=0; | 95 | } else |
| 95 | } | 96 | BIO_printf(bio, " "); |
| 96 | else | 97 | } |
| 97 | BIO_printf(bio," "); | ||
| 98 | } | ||
| 99 | 98 | ||
| 100 | int MAIN(int, char **); | 99 | int MAIN(int, char **); |
| 101 | 100 | ||
| 102 | int MAIN(int argc, char **argv) | 101 | int |
| 103 | { | 102 | MAIN(int argc, char **argv) |
| 104 | static const char magic[]="Salted__"; | 103 | { |
| 105 | char mbuf[sizeof magic-1]; | 104 | static const char magic[] = "Salted__"; |
| 106 | char *strbuf=NULL; | 105 | char mbuf[sizeof magic - 1]; |
| 107 | unsigned char *buff=NULL,*bufsize=NULL; | 106 | char *strbuf = NULL; |
| 108 | int bsize=BSIZE,verbose=0; | 107 | unsigned char *buff = NULL, *bufsize = NULL; |
| 109 | int ret=1,inl; | 108 | int bsize = BSIZE, verbose = 0; |
| 109 | int ret = 1, inl; | ||
| 110 | int nopad = 0; | 110 | int nopad = 0; |
| 111 | unsigned char key[EVP_MAX_KEY_LENGTH],iv[EVP_MAX_IV_LENGTH]; | 111 | unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH]; |
| 112 | unsigned char salt[PKCS5_SALT_LEN]; | 112 | unsigned char salt[PKCS5_SALT_LEN]; |
| 113 | char *str=NULL, *passarg = NULL, *pass = NULL; | 113 | char *str = NULL, *passarg = NULL, *pass = NULL; |
| 114 | char *hkey=NULL,*hiv=NULL,*hsalt = NULL; | 114 | char *hkey = NULL, *hiv = NULL, *hsalt = NULL; |
| 115 | char *md=NULL; | 115 | char *md = NULL; |
| 116 | int enc=1,printkey=0,i,base64=0; | 116 | int enc = 1, printkey = 0, i, base64 = 0; |
| 117 | #ifdef ZLIB | 117 | #ifdef ZLIB |
| 118 | int do_zlib=0; | 118 | int do_zlib = 0; |
| 119 | BIO *bzl = NULL; | 119 | BIO *bzl = NULL; |
| 120 | #endif | 120 | #endif |
| 121 | int debug=0,olb64=0,nosalt=0; | 121 | int debug = 0, olb64 = 0, nosalt = 0; |
| 122 | const EVP_CIPHER *cipher=NULL,*c; | 122 | const EVP_CIPHER *cipher = NULL, *c; |
| 123 | EVP_CIPHER_CTX *ctx = NULL; | 123 | EVP_CIPHER_CTX *ctx = NULL; |
| 124 | char *inf=NULL,*outf=NULL; | 124 | char *inf = NULL, *outf = NULL; |
| 125 | BIO *in=NULL,*out=NULL,*b64=NULL,*benc=NULL,*rbio=NULL,*wbio=NULL; | 125 | BIO *in = NULL, *out = NULL, *b64 = NULL, *benc = NULL, *rbio = NULL, |
| 126 | *wbio = NULL; | ||
| 126 | #define PROG_NAME_SIZE 39 | 127 | #define PROG_NAME_SIZE 39 |
| 127 | char pname[PROG_NAME_SIZE+1]; | 128 | char pname[PROG_NAME_SIZE + 1]; |
| 128 | #ifndef OPENSSL_NO_ENGINE | 129 | #ifndef OPENSSL_NO_ENGINE |
| 129 | char *engine = NULL; | 130 | char *engine = NULL; |
| 130 | #endif | 131 | #endif |
| 131 | const EVP_MD *dgst=NULL; | 132 | const EVP_MD *dgst = NULL; |
| 132 | int non_fips_allow = 0; | 133 | int non_fips_allow = 0; |
| 133 | 134 | ||
| 134 | apps_startup(); | 135 | apps_startup(); |
| 135 | 136 | ||
| 136 | if (bio_err == NULL) | 137 | if (bio_err == NULL) |
| 137 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) | 138 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 138 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); | 139 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 139 | 140 | ||
| 140 | if (!load_config(bio_err, NULL)) | 141 | if (!load_config(bio_err, NULL)) |
| 141 | goto end; | 142 | goto end; |
| 142 | 143 | ||
| 143 | /* first check the program name */ | 144 | /* first check the program name */ |
| 144 | program_name(argv[0],pname,sizeof pname); | 145 | program_name(argv[0], pname, sizeof pname); |
| 145 | if (strcmp(pname,"base64") == 0) | 146 | if (strcmp(pname, "base64") == 0) |
| 146 | base64=1; | 147 | base64 = 1; |
| 147 | #ifdef ZLIB | 148 | #ifdef ZLIB |
| 148 | if (strcmp(pname,"zlib") == 0) | 149 | if (strcmp(pname, "zlib") == 0) |
| 149 | do_zlib=1; | 150 | do_zlib = 1; |
| 150 | #endif | 151 | #endif |
| 151 | 152 | ||
| 152 | cipher=EVP_get_cipherbyname(pname); | 153 | cipher = EVP_get_cipherbyname(pname); |
| 153 | #ifdef ZLIB | 154 | #ifdef ZLIB |
| 154 | if (!do_zlib && !base64 && (cipher == NULL) | 155 | if (!do_zlib && !base64 && (cipher == NULL) |
| 155 | && (strcmp(pname,"enc") != 0)) | 156 | && (strcmp(pname, "enc") != 0)) |
| 156 | #else | 157 | #else |
| 157 | if (!base64 && (cipher == NULL) && (strcmp(pname,"enc") != 0)) | 158 | if (!base64 && (cipher == NULL) && (strcmp(pname, "enc") != 0)) |
| 158 | #endif | 159 | #endif |
| 159 | { | 160 | { |
| 160 | BIO_printf(bio_err,"%s is an unknown cipher\n",pname); | 161 | BIO_printf(bio_err, "%s is an unknown cipher\n", pname); |
| 161 | goto bad; | 162 | goto bad; |
| 162 | } | 163 | } |
| 163 | |||
| 164 | argc--; | 164 | argc--; |
| 165 | argv++; | 165 | argv++; |
| 166 | while (argc >= 1) | 166 | while (argc >= 1) { |
| 167 | { | 167 | if (strcmp(*argv, "-e") == 0) |
| 168 | if (strcmp(*argv,"-e") == 0) | 168 | enc = 1; |
| 169 | enc=1; | 169 | else if (strcmp(*argv, "-in") == 0) { |
| 170 | else if (strcmp(*argv,"-in") == 0) | 170 | if (--argc < 1) |
| 171 | { | 171 | goto bad; |
| 172 | if (--argc < 1) goto bad; | 172 | inf = *(++argv); |
| 173 | inf= *(++argv); | 173 | } else if (strcmp(*argv, "-out") == 0) { |
| 174 | } | 174 | if (--argc < 1) |
| 175 | else if (strcmp(*argv,"-out") == 0) | 175 | goto bad; |
| 176 | { | 176 | outf = *(++argv); |
| 177 | if (--argc < 1) goto bad; | 177 | } else if (strcmp(*argv, "-pass") == 0) { |
| 178 | outf= *(++argv); | 178 | if (--argc < 1) |
| 179 | } | 179 | goto bad; |
| 180 | else if (strcmp(*argv,"-pass") == 0) | 180 | passarg = *(++argv); |
| 181 | { | 181 | } |
| 182 | if (--argc < 1) goto bad; | ||
| 183 | passarg= *(++argv); | ||
| 184 | } | ||
| 185 | #ifndef OPENSSL_NO_ENGINE | 182 | #ifndef OPENSSL_NO_ENGINE |
| 186 | else if (strcmp(*argv,"-engine") == 0) | 183 | else if (strcmp(*argv, "-engine") == 0) { |
| 187 | { | 184 | if (--argc < 1) |
| 188 | if (--argc < 1) goto bad; | 185 | goto bad; |
| 189 | engine= *(++argv); | 186 | engine = *(++argv); |
| 190 | } | 187 | } |
| 191 | #endif | 188 | #endif |
| 192 | else if (strcmp(*argv,"-d") == 0) | 189 | else if (strcmp(*argv, "-d") == 0) |
| 193 | enc=0; | 190 | enc = 0; |
| 194 | else if (strcmp(*argv,"-p") == 0) | 191 | else if (strcmp(*argv, "-p") == 0) |
| 195 | printkey=1; | 192 | printkey = 1; |
| 196 | else if (strcmp(*argv,"-v") == 0) | 193 | else if (strcmp(*argv, "-v") == 0) |
| 197 | verbose=1; | 194 | verbose = 1; |
| 198 | else if (strcmp(*argv,"-nopad") == 0) | 195 | else if (strcmp(*argv, "-nopad") == 0) |
| 199 | nopad=1; | 196 | nopad = 1; |
| 200 | else if (strcmp(*argv,"-salt") == 0) | 197 | else if (strcmp(*argv, "-salt") == 0) |
| 201 | nosalt=0; | 198 | nosalt = 0; |
| 202 | else if (strcmp(*argv,"-nosalt") == 0) | 199 | else if (strcmp(*argv, "-nosalt") == 0) |
| 203 | nosalt=1; | 200 | nosalt = 1; |
| 204 | else if (strcmp(*argv,"-debug") == 0) | 201 | else if (strcmp(*argv, "-debug") == 0) |
| 205 | debug=1; | 202 | debug = 1; |
| 206 | else if (strcmp(*argv,"-P") == 0) | 203 | else if (strcmp(*argv, "-P") == 0) |
| 207 | printkey=2; | 204 | printkey = 2; |
| 208 | else if (strcmp(*argv,"-A") == 0) | 205 | else if (strcmp(*argv, "-A") == 0) |
| 209 | olb64=1; | 206 | olb64 = 1; |
| 210 | else if (strcmp(*argv,"-a") == 0) | 207 | else if (strcmp(*argv, "-a") == 0) |
| 211 | base64=1; | 208 | base64 = 1; |
| 212 | else if (strcmp(*argv,"-base64") == 0) | 209 | else if (strcmp(*argv, "-base64") == 0) |
| 213 | base64=1; | 210 | base64 = 1; |
| 214 | #ifdef ZLIB | 211 | #ifdef ZLIB |
| 215 | else if (strcmp(*argv,"-z") == 0) | 212 | else if (strcmp(*argv, "-z") == 0) |
| 216 | do_zlib=1; | 213 | do_zlib = 1; |
| 217 | #endif | 214 | #endif |
| 218 | else if (strcmp(*argv,"-bufsize") == 0) | 215 | else if (strcmp(*argv, "-bufsize") == 0) { |
| 219 | { | 216 | if (--argc < 1) |
| 220 | if (--argc < 1) goto bad; | 217 | goto bad; |
| 221 | bufsize=(unsigned char *)*(++argv); | 218 | bufsize = (unsigned char *) *(++argv); |
| 222 | } | 219 | } else if (strcmp(*argv, "-k") == 0) { |
| 223 | else if (strcmp(*argv,"-k") == 0) | 220 | if (--argc < 1) |
| 224 | { | 221 | goto bad; |
| 225 | if (--argc < 1) goto bad; | 222 | str = *(++argv); |
| 226 | str= *(++argv); | 223 | } else if (strcmp(*argv, "-kfile") == 0) { |
| 227 | } | ||
| 228 | else if (strcmp(*argv,"-kfile") == 0) | ||
| 229 | { | ||
| 230 | static char buf[128]; | 224 | static char buf[128]; |
| 231 | FILE *infile; | 225 | FILE *infile; |
| 232 | char *file; | 226 | char *file; |
| 233 | 227 | ||
| 234 | if (--argc < 1) goto bad; | 228 | if (--argc < 1) |
| 235 | file= *(++argv); | ||
| 236 | infile=fopen(file,"r"); | ||
| 237 | if (infile == NULL) | ||
| 238 | { | ||
| 239 | BIO_printf(bio_err,"unable to read key from '%s'\n", | ||
| 240 | file); | ||
| 241 | goto bad; | 229 | goto bad; |
| 242 | } | 230 | file = *(++argv); |
| 243 | buf[0]='\0'; | 231 | infile = fopen(file, "r"); |
| 244 | if (!fgets(buf,sizeof buf,infile)) | 232 | if (infile == NULL) { |
| 245 | { | 233 | BIO_printf(bio_err, "unable to read key from '%s'\n", |
| 246 | BIO_printf(bio_err,"unable to read key from '%s'\n", | 234 | file); |
| 247 | file); | ||
| 248 | goto bad; | 235 | goto bad; |
| 249 | } | 236 | } |
| 237 | buf[0] = '\0'; | ||
| 238 | if (!fgets(buf, sizeof buf, infile)) { | ||
| 239 | BIO_printf(bio_err, "unable to read key from '%s'\n", | ||
| 240 | file); | ||
| 241 | goto bad; | ||
| 242 | } | ||
| 250 | fclose(infile); | 243 | fclose(infile); |
| 251 | i=strlen(buf); | 244 | i = strlen(buf); |
| 252 | if ((i > 0) && | 245 | if ((i > 0) && |
| 253 | ((buf[i-1] == '\n') || (buf[i-1] == '\r'))) | 246 | ((buf[i - 1] == '\n') || (buf[i - 1] == '\r'))) |
| 254 | buf[--i]='\0'; | 247 | buf[--i] = '\0'; |
| 255 | if ((i > 0) && | 248 | if ((i > 0) && |
| 256 | ((buf[i-1] == '\n') || (buf[i-1] == '\r'))) | 249 | ((buf[i - 1] == '\n') || (buf[i - 1] == '\r'))) |
| 257 | buf[--i]='\0'; | 250 | buf[--i] = '\0'; |
| 258 | if (i < 1) | 251 | if (i < 1) { |
| 259 | { | 252 | BIO_printf(bio_err, "zero length password\n"); |
| 260 | BIO_printf(bio_err,"zero length password\n"); | ||
| 261 | goto bad; | 253 | goto bad; |
| 262 | } | ||
| 263 | str=buf; | ||
| 264 | } | ||
| 265 | else if (strcmp(*argv,"-K") == 0) | ||
| 266 | { | ||
| 267 | if (--argc < 1) goto bad; | ||
| 268 | hkey= *(++argv); | ||
| 269 | } | ||
| 270 | else if (strcmp(*argv,"-S") == 0) | ||
| 271 | { | ||
| 272 | if (--argc < 1) goto bad; | ||
| 273 | hsalt= *(++argv); | ||
| 274 | } | 254 | } |
| 275 | else if (strcmp(*argv,"-iv") == 0) | 255 | str = buf; |
| 276 | { | 256 | } else if (strcmp(*argv, "-K") == 0) { |
| 277 | if (--argc < 1) goto bad; | 257 | if (--argc < 1) |
| 278 | hiv= *(++argv); | 258 | goto bad; |
| 279 | } | 259 | hkey = *(++argv); |
| 280 | else if (strcmp(*argv,"-md") == 0) | 260 | } else if (strcmp(*argv, "-S") == 0) { |
| 281 | { | 261 | if (--argc < 1) |
| 282 | if (--argc < 1) goto bad; | 262 | goto bad; |
| 283 | md= *(++argv); | 263 | hsalt = *(++argv); |
| 284 | } | 264 | } else if (strcmp(*argv, "-iv") == 0) { |
| 285 | else if (strcmp(*argv,"-non-fips-allow") == 0) | 265 | if (--argc < 1) |
| 266 | goto bad; | ||
| 267 | hiv = *(++argv); | ||
| 268 | } else if (strcmp(*argv, "-md") == 0) { | ||
| 269 | if (--argc < 1) | ||
| 270 | goto bad; | ||
| 271 | md = *(++argv); | ||
| 272 | } else if (strcmp(*argv, "-non-fips-allow") == 0) | ||
| 286 | non_fips_allow = 1; | 273 | non_fips_allow = 1; |
| 287 | else if ((argv[0][0] == '-') && | 274 | else if ((argv[0][0] == '-') && |
| 288 | ((c=EVP_get_cipherbyname(&(argv[0][1]))) != NULL)) | 275 | ((c = EVP_get_cipherbyname(&(argv[0][1]))) != NULL)) { |
| 289 | { | 276 | cipher = c; |
| 290 | cipher=c; | 277 | } else if (strcmp(*argv, "-none") == 0) |
| 291 | } | 278 | cipher = NULL; |
| 292 | else if (strcmp(*argv,"-none") == 0) | 279 | else { |
| 293 | cipher=NULL; | 280 | BIO_printf(bio_err, "unknown option '%s'\n", *argv); |
| 294 | else | 281 | bad: |
| 295 | { | 282 | BIO_printf(bio_err, "options are\n"); |
| 296 | BIO_printf(bio_err,"unknown option '%s'\n",*argv); | 283 | BIO_printf(bio_err, "%-14s input file\n", "-in <file>"); |
| 297 | bad: | 284 | BIO_printf(bio_err, "%-14s output file\n", "-out <file>"); |
| 298 | BIO_printf(bio_err,"options are\n"); | 285 | BIO_printf(bio_err, "%-14s pass phrase source\n", "-pass <arg>"); |
| 299 | BIO_printf(bio_err,"%-14s input file\n","-in <file>"); | 286 | BIO_printf(bio_err, "%-14s encrypt\n", "-e"); |
| 300 | BIO_printf(bio_err,"%-14s output file\n","-out <file>"); | 287 | BIO_printf(bio_err, "%-14s decrypt\n", "-d"); |
| 301 | BIO_printf(bio_err,"%-14s pass phrase source\n","-pass <arg>"); | 288 | BIO_printf(bio_err, "%-14s base64 encode/decode, depending on encryption flag\n", "-a/-base64"); |
| 302 | BIO_printf(bio_err,"%-14s encrypt\n","-e"); | 289 | BIO_printf(bio_err, "%-14s passphrase is the next argument\n", "-k"); |
| 303 | BIO_printf(bio_err,"%-14s decrypt\n","-d"); | 290 | BIO_printf(bio_err, "%-14s passphrase is the first line of the file argument\n", "-kfile"); |
| 304 | BIO_printf(bio_err,"%-14s base64 encode/decode, depending on encryption flag\n","-a/-base64"); | 291 | BIO_printf(bio_err, "%-14s the next argument is the md to use to create a key\n", "-md"); |
| 305 | BIO_printf(bio_err,"%-14s passphrase is the next argument\n","-k"); | 292 | BIO_printf(bio_err, "%-14s from a passphrase. One of md2, md5, sha or sha1\n", ""); |
| 306 | BIO_printf(bio_err,"%-14s passphrase is the first line of the file argument\n","-kfile"); | 293 | BIO_printf(bio_err, "%-14s salt in hex is the next argument\n", "-S"); |
| 307 | BIO_printf(bio_err,"%-14s the next argument is the md to use to create a key\n","-md"); | 294 | BIO_printf(bio_err, "%-14s key/iv in hex is the next argument\n", "-K/-iv"); |
| 308 | BIO_printf(bio_err,"%-14s from a passphrase. One of md2, md5, sha or sha1\n",""); | 295 | BIO_printf(bio_err, "%-14s print the iv/key (then exit if -P)\n", "-[pP]"); |
| 309 | BIO_printf(bio_err,"%-14s salt in hex is the next argument\n","-S"); | 296 | BIO_printf(bio_err, "%-14s buffer size\n", "-bufsize <n>"); |
| 310 | BIO_printf(bio_err,"%-14s key/iv in hex is the next argument\n","-K/-iv"); | 297 | BIO_printf(bio_err, "%-14s disable standard block padding\n", "-nopad"); |
| 311 | BIO_printf(bio_err,"%-14s print the iv/key (then exit if -P)\n","-[pP]"); | ||
| 312 | BIO_printf(bio_err,"%-14s buffer size\n","-bufsize <n>"); | ||
| 313 | BIO_printf(bio_err,"%-14s disable standard block padding\n","-nopad"); | ||
| 314 | #ifndef OPENSSL_NO_ENGINE | 298 | #ifndef OPENSSL_NO_ENGINE |
| 315 | BIO_printf(bio_err,"%-14s use engine e, possibly a hardware device.\n","-engine e"); | 299 | BIO_printf(bio_err, "%-14s use engine e, possibly a hardware device.\n", "-engine e"); |
| 316 | #endif | 300 | #endif |
| 317 | 301 | ||
| 318 | BIO_printf(bio_err,"Cipher Types\n"); | 302 | BIO_printf(bio_err, "Cipher Types\n"); |
| 319 | OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, | 303 | OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, |
| 320 | show_ciphers, | 304 | show_ciphers, |
| 321 | bio_err); | 305 | bio_err); |
| 322 | BIO_printf(bio_err,"\n"); | 306 | BIO_printf(bio_err, "\n"); |
| 323 | 307 | ||
| 324 | goto end; | 308 | goto end; |
| 325 | } | 309 | } |
| 326 | argc--; | 310 | argc--; |
| 327 | argv++; | 311 | argv++; |
| 328 | } | 312 | } |
| 329 | 313 | ||
| 330 | #ifndef OPENSSL_NO_ENGINE | 314 | #ifndef OPENSSL_NO_ENGINE |
| 331 | setup_engine(bio_err, engine, 0); | 315 | setup_engine(bio_err, engine, 0); |
| 332 | #endif | 316 | #endif |
| 333 | 317 | ||
| 334 | if (md && (dgst=EVP_get_digestbyname(md)) == NULL) | 318 | if (md && (dgst = EVP_get_digestbyname(md)) == NULL) { |
| 335 | { | 319 | BIO_printf(bio_err, "%s is an unsupported message digest type\n", md); |
| 336 | BIO_printf(bio_err,"%s is an unsupported message digest type\n",md); | ||
| 337 | goto end; | 320 | goto end; |
| 338 | } | 321 | } |
| 339 | 322 | if (dgst == NULL) { | |
| 340 | if (dgst == NULL) | ||
| 341 | { | ||
| 342 | dgst = EVP_md5(); | 323 | dgst = EVP_md5(); |
| 343 | } | 324 | } |
| 344 | 325 | if (bufsize != NULL) { | |
| 345 | if (bufsize != NULL) | ||
| 346 | { | ||
| 347 | unsigned long n; | 326 | unsigned long n; |
| 348 | 327 | ||
| 349 | for (n=0; *bufsize; bufsize++) | 328 | for (n = 0; *bufsize; bufsize++) { |
| 350 | { | 329 | i = *bufsize; |
| 351 | i= *bufsize; | ||
| 352 | if ((i <= '9') && (i >= '0')) | 330 | if ((i <= '9') && (i >= '0')) |
| 353 | n=n*10+i-'0'; | 331 | n = n * 10 + i - '0'; |
| 354 | else if (i == 'k') | 332 | else if (i == 'k') { |
| 355 | { | 333 | n *= 1024; |
| 356 | n*=1024; | ||
| 357 | bufsize++; | 334 | bufsize++; |
| 358 | break; | 335 | break; |
| 359 | } | ||
| 360 | } | 336 | } |
| 361 | if (*bufsize != '\0') | 337 | } |
| 362 | { | 338 | if (*bufsize != '\0') { |
| 363 | BIO_printf(bio_err,"invalid 'bufsize' specified.\n"); | 339 | BIO_printf(bio_err, "invalid 'bufsize' specified.\n"); |
| 364 | goto end; | 340 | goto end; |
| 365 | } | ||
| 366 | |||
| 367 | /* It must be large enough for a base64 encoded line */ | ||
| 368 | if (base64 && n < 80) n=80; | ||
| 369 | |||
| 370 | bsize=(int)n; | ||
| 371 | if (verbose) BIO_printf(bio_err,"bufsize=%d\n",bsize); | ||
| 372 | } | 341 | } |
| 342 | /* It must be large enough for a base64 encoded line */ | ||
| 343 | if (base64 && n < 80) | ||
| 344 | n = 80; | ||
| 373 | 345 | ||
| 374 | strbuf=malloc(SIZE); | 346 | bsize = (int) n; |
| 375 | buff=(unsigned char *)malloc(EVP_ENCODE_LENGTH(bsize)); | 347 | if (verbose) |
| 376 | if ((buff == NULL) || (strbuf == NULL)) | 348 | BIO_printf(bio_err, "bufsize=%d\n", bsize); |
| 377 | { | 349 | } |
| 378 | BIO_printf(bio_err,"malloc failure %ld\n",(long)EVP_ENCODE_LENGTH(bsize)); | 350 | strbuf = malloc(SIZE); |
| 351 | buff = (unsigned char *) malloc(EVP_ENCODE_LENGTH(bsize)); | ||
| 352 | if ((buff == NULL) || (strbuf == NULL)) { | ||
| 353 | BIO_printf(bio_err, "malloc failure %ld\n", (long) EVP_ENCODE_LENGTH(bsize)); | ||
| 379 | goto end; | 354 | goto end; |
| 380 | } | 355 | } |
| 381 | 356 | in = BIO_new(BIO_s_file()); | |
| 382 | in=BIO_new(BIO_s_file()); | 357 | out = BIO_new(BIO_s_file()); |
| 383 | out=BIO_new(BIO_s_file()); | 358 | if ((in == NULL) || (out == NULL)) { |
| 384 | if ((in == NULL) || (out == NULL)) | ||
| 385 | { | ||
| 386 | ERR_print_errors(bio_err); | 359 | ERR_print_errors(bio_err); |
| 387 | goto end; | 360 | goto end; |
| 388 | } | 361 | } |
| 389 | if (debug) | 362 | if (debug) { |
| 390 | { | 363 | BIO_set_callback(in, BIO_debug_callback); |
| 391 | BIO_set_callback(in,BIO_debug_callback); | 364 | BIO_set_callback(out, BIO_debug_callback); |
| 392 | BIO_set_callback(out,BIO_debug_callback); | 365 | BIO_set_callback_arg(in, (char *) bio_err); |
| 393 | BIO_set_callback_arg(in,(char *)bio_err); | 366 | BIO_set_callback_arg(out, (char *) bio_err); |
| 394 | BIO_set_callback_arg(out,(char *)bio_err); | 367 | } |
| 395 | } | 368 | if (inf == NULL) { |
| 396 | |||
| 397 | if (inf == NULL) | ||
| 398 | { | ||
| 399 | #ifndef OPENSSL_NO_SETVBUF_IONBF | 369 | #ifndef OPENSSL_NO_SETVBUF_IONBF |
| 400 | if (bufsize != NULL) | 370 | if (bufsize != NULL) |
| 401 | setvbuf(stdin, (char *)NULL, _IONBF, 0); | 371 | setvbuf(stdin, (char *) NULL, _IONBF, 0); |
| 402 | #endif /* ndef OPENSSL_NO_SETVBUF_IONBF */ | 372 | #endif /* ndef OPENSSL_NO_SETVBUF_IONBF */ |
| 403 | BIO_set_fp(in,stdin,BIO_NOCLOSE); | 373 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 404 | } | 374 | } else { |
| 405 | else | 375 | if (BIO_read_filename(in, inf) <= 0) { |
| 406 | { | ||
| 407 | if (BIO_read_filename(in,inf) <= 0) | ||
| 408 | { | ||
| 409 | perror(inf); | 376 | perror(inf); |
| 410 | goto end; | 377 | goto end; |
| 411 | } | ||
| 412 | } | 378 | } |
| 379 | } | ||
| 413 | 380 | ||
| 414 | if(!str && passarg) { | 381 | if (!str && passarg) { |
| 415 | if(!app_passwd(bio_err, passarg, NULL, &pass, NULL)) { | 382 | if (!app_passwd(bio_err, passarg, NULL, &pass, NULL)) { |
| 416 | BIO_printf(bio_err, "Error getting password\n"); | 383 | BIO_printf(bio_err, "Error getting password\n"); |
| 417 | goto end; | 384 | goto end; |
| 418 | } | 385 | } |
| 419 | str = pass; | 386 | str = pass; |
| 420 | } | 387 | } |
| 421 | 388 | if ((str == NULL) && (cipher != NULL) && (hkey == NULL)) { | |
| 422 | if ((str == NULL) && (cipher != NULL) && (hkey == NULL)) | 389 | for (;;) { |
| 423 | { | ||
| 424 | for (;;) | ||
| 425 | { | ||
| 426 | char buf[200]; | 390 | char buf[200]; |
| 427 | 391 | ||
| 428 | (void) snprintf(buf,sizeof buf,"enter %s %s password:", | 392 | (void) snprintf(buf, sizeof buf, "enter %s %s password:", |
| 429 | OBJ_nid2ln(EVP_CIPHER_nid(cipher)), | 393 | OBJ_nid2ln(EVP_CIPHER_nid(cipher)), |
| 430 | (enc)?"encryption":"decryption"); | 394 | (enc) ? "encryption" : "decryption"); |
| 431 | strbuf[0]='\0'; | 395 | strbuf[0] = '\0'; |
| 432 | i=EVP_read_pw_string((char *)strbuf,SIZE,buf,enc); | 396 | i = EVP_read_pw_string((char *) strbuf, SIZE, buf, enc); |
| 433 | if (i == 0) | 397 | if (i == 0) { |
| 434 | { | 398 | if (strbuf[0] == '\0') { |
| 435 | if (strbuf[0] == '\0') | 399 | ret = 1; |
| 436 | { | ||
| 437 | ret=1; | ||
| 438 | goto end; | 400 | goto end; |
| 439 | } | ||
| 440 | str=strbuf; | ||
| 441 | break; | ||
| 442 | } | 401 | } |
| 443 | if (i < 0) | 402 | str = strbuf; |
| 444 | { | 403 | break; |
| 445 | BIO_printf(bio_err,"bad password read\n"); | 404 | } |
| 405 | if (i < 0) { | ||
| 406 | BIO_printf(bio_err, "bad password read\n"); | ||
| 446 | goto end; | 407 | goto end; |
| 447 | } | ||
| 448 | } | 408 | } |
| 449 | } | 409 | } |
| 450 | 410 | } | |
| 451 | 411 | if (outf == NULL) { | |
| 452 | if (outf == NULL) | 412 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 453 | { | ||
| 454 | BIO_set_fp(out,stdout,BIO_NOCLOSE); | ||
| 455 | #ifndef OPENSSL_NO_SETVBUF_IONBF | 413 | #ifndef OPENSSL_NO_SETVBUF_IONBF |
| 456 | if (bufsize != NULL) | 414 | if (bufsize != NULL) |
| 457 | setvbuf(stdout, (char *)NULL, _IONBF, 0); | 415 | setvbuf(stdout, (char *) NULL, _IONBF, 0); |
| 458 | #endif /* ndef OPENSSL_NO_SETVBUF_IONBF */ | 416 | #endif /* ndef OPENSSL_NO_SETVBUF_IONBF */ |
| 459 | } | 417 | } else { |
| 460 | else | 418 | if (BIO_write_filename(out, outf) <= 0) { |
| 461 | { | ||
| 462 | if (BIO_write_filename(out,outf) <= 0) | ||
| 463 | { | ||
| 464 | perror(outf); | 419 | perror(outf); |
| 465 | goto end; | 420 | goto end; |
| 466 | } | ||
| 467 | } | 421 | } |
| 422 | } | ||
| 468 | 423 | ||
| 469 | rbio=in; | 424 | rbio = in; |
| 470 | wbio=out; | 425 | wbio = out; |
| 471 | 426 | ||
| 472 | #ifdef ZLIB | 427 | #ifdef ZLIB |
| 473 | 428 | ||
| 474 | if (do_zlib) | 429 | if (do_zlib) { |
| 475 | { | 430 | if ((bzl = BIO_new(BIO_f_zlib())) == NULL) |
| 476 | if ((bzl=BIO_new(BIO_f_zlib())) == NULL) | ||
| 477 | goto end; | 431 | goto end; |
| 478 | if (enc) | 432 | if (enc) |
| 479 | wbio=BIO_push(bzl,wbio); | 433 | wbio = BIO_push(bzl, wbio); |
| 480 | else | 434 | else |
| 481 | rbio=BIO_push(bzl,rbio); | 435 | rbio = BIO_push(bzl, rbio); |
| 482 | } | 436 | } |
| 483 | #endif | 437 | #endif |
| 484 | 438 | ||
| 485 | if (base64) | 439 | if (base64) { |
| 486 | { | 440 | if ((b64 = BIO_new(BIO_f_base64())) == NULL) |
| 487 | if ((b64=BIO_new(BIO_f_base64())) == NULL) | ||
| 488 | goto end; | 441 | goto end; |
| 489 | if (debug) | 442 | if (debug) { |
| 490 | { | 443 | BIO_set_callback(b64, BIO_debug_callback); |
| 491 | BIO_set_callback(b64,BIO_debug_callback); | 444 | BIO_set_callback_arg(b64, (char *) bio_err); |
| 492 | BIO_set_callback_arg(b64,(char *)bio_err); | 445 | } |
| 493 | } | ||
| 494 | if (olb64) | 446 | if (olb64) |
| 495 | BIO_set_flags(b64,BIO_FLAGS_BASE64_NO_NL); | 447 | BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); |
| 496 | if (enc) | 448 | if (enc) |
| 497 | wbio=BIO_push(b64,wbio); | 449 | wbio = BIO_push(b64, wbio); |
| 498 | else | 450 | else |
| 499 | rbio=BIO_push(b64,rbio); | 451 | rbio = BIO_push(b64, rbio); |
| 500 | } | 452 | } |
| 501 | 453 | if (cipher != NULL) { | |
| 502 | if (cipher != NULL) | 454 | /* |
| 503 | { | 455 | * Note that str is NULL if a key was passed on the command |
| 504 | /* Note that str is NULL if a key was passed on the command | ||
| 505 | * line, so we get no salt in that case. Is this a bug? | 456 | * line, so we get no salt in that case. Is this a bug? |
| 506 | */ | 457 | */ |
| 507 | if (str != NULL) | 458 | if (str != NULL) { |
| 508 | { | 459 | /* |
| 509 | /* Salt handling: if encrypting generate a salt and | 460 | * Salt handling: if encrypting generate a salt and |
| 510 | * write to output BIO. If decrypting read salt from | 461 | * write to output BIO. If decrypting read salt from |
| 511 | * input BIO. | 462 | * input BIO. |
| 512 | */ | 463 | */ |
| 513 | unsigned char *sptr; | 464 | unsigned char *sptr; |
| 514 | if(nosalt) sptr = NULL; | 465 | if (nosalt) |
| 466 | sptr = NULL; | ||
| 515 | else { | 467 | else { |
| 516 | if(enc) { | 468 | if (enc) { |
| 517 | if(hsalt) { | 469 | if (hsalt) { |
| 518 | if(!set_hex(hsalt,salt,sizeof salt)) { | 470 | if (!set_hex(hsalt, salt, sizeof salt)) { |
| 519 | BIO_printf(bio_err, | 471 | BIO_printf(bio_err, |
| 520 | "invalid hex salt value\n"); | 472 | "invalid hex salt value\n"); |
| 521 | goto end; | 473 | goto end; |
| 522 | } | 474 | } |
| 523 | } else if (RAND_pseudo_bytes(salt, sizeof salt) < 0) | 475 | } else if (RAND_pseudo_bytes(salt, sizeof salt) < 0) |
| 524 | goto end; | 476 | goto end; |
| 525 | /* If -P option then don't bother writing */ | 477 | /* |
| 526 | if((printkey != 2) | 478 | * If -P option then don't bother |
| 527 | && (BIO_write(wbio,magic, | 479 | * writing |
| 528 | sizeof magic-1) != sizeof magic-1 | 480 | */ |
| 529 | || BIO_write(wbio, | 481 | if ((printkey != 2) |
| 530 | (char *)salt, | 482 | && (BIO_write(wbio, magic, |
| 531 | sizeof salt) != sizeof salt)) { | 483 | sizeof magic - 1) != sizeof magic - 1 |
| 532 | BIO_printf(bio_err,"error writing output file\n"); | 484 | || BIO_write(wbio, |
| 485 | (char *) salt, | ||
| 486 | sizeof salt) != sizeof salt)) { | ||
| 487 | BIO_printf(bio_err, "error writing output file\n"); | ||
| 533 | goto end; | 488 | goto end; |
| 534 | } | 489 | } |
| 535 | } else if(BIO_read(rbio,mbuf,sizeof mbuf) != sizeof mbuf | 490 | } else if (BIO_read(rbio, mbuf, sizeof mbuf) != sizeof mbuf |
| 536 | || BIO_read(rbio, | 491 | || BIO_read(rbio, |
| 537 | (unsigned char *)salt, | 492 | (unsigned char *) salt, |
| 538 | sizeof salt) != sizeof salt) { | 493 | sizeof salt) != sizeof salt) { |
| 539 | BIO_printf(bio_err,"error reading input file\n"); | 494 | BIO_printf(bio_err, "error reading input file\n"); |
| 495 | goto end; | ||
| 496 | } else if (memcmp(mbuf, magic, sizeof magic - 1)) { | ||
| 497 | BIO_printf(bio_err, "bad magic number\n"); | ||
| 540 | goto end; | 498 | goto end; |
| 541 | } else if(memcmp(mbuf,magic,sizeof magic-1)) { | ||
| 542 | BIO_printf(bio_err,"bad magic number\n"); | ||
| 543 | goto end; | ||
| 544 | } | 499 | } |
| 545 | |||
| 546 | sptr = salt; | 500 | sptr = salt; |
| 547 | } | 501 | } |
| 548 | 502 | ||
| 549 | EVP_BytesToKey(cipher,dgst,sptr, | 503 | EVP_BytesToKey(cipher, dgst, sptr, |
| 550 | (unsigned char *)str, | 504 | (unsigned char *) str, |
| 551 | strlen(str),1,key,iv); | 505 | strlen(str), 1, key, iv); |
| 552 | /* zero the complete buffer or the string | 506 | /* |
| 553 | * passed from the command line | 507 | * zero the complete buffer or the string passed from |
| 554 | * bug picked up by | 508 | * the command line bug picked up by Larry J. Hughes |
| 555 | * Larry J. Hughes Jr. <hughes@indiana.edu> */ | 509 | * Jr. <hughes@indiana.edu> |
| 510 | */ | ||
| 556 | if (str == strbuf) | 511 | if (str == strbuf) |
| 557 | OPENSSL_cleanse(str,SIZE); | 512 | OPENSSL_cleanse(str, SIZE); |
| 558 | else | 513 | else |
| 559 | OPENSSL_cleanse(str,strlen(str)); | 514 | OPENSSL_cleanse(str, strlen(str)); |
| 560 | } | 515 | } |
| 561 | if ((hiv != NULL) && !set_hex(hiv,iv,sizeof iv)) | 516 | if ((hiv != NULL) && !set_hex(hiv, iv, sizeof iv)) { |
| 562 | { | 517 | BIO_printf(bio_err, "invalid hex iv value\n"); |
| 563 | BIO_printf(bio_err,"invalid hex iv value\n"); | ||
| 564 | goto end; | 518 | goto end; |
| 565 | } | 519 | } |
| 566 | if ((hiv == NULL) && (str == NULL) | 520 | if ((hiv == NULL) && (str == NULL) |
| 567 | && EVP_CIPHER_iv_length(cipher) != 0) | 521 | && EVP_CIPHER_iv_length(cipher) != 0) { |
| 568 | { | 522 | /* |
| 569 | /* No IV was explicitly set and no IV was generated | 523 | * No IV was explicitly set and no IV was generated |
| 570 | * during EVP_BytesToKey. Hence the IV is undefined, | 524 | * during EVP_BytesToKey. Hence the IV is undefined, |
| 571 | * making correct decryption impossible. */ | 525 | * making correct decryption impossible. |
| 526 | */ | ||
| 572 | BIO_printf(bio_err, "iv undefined\n"); | 527 | BIO_printf(bio_err, "iv undefined\n"); |
| 573 | goto end; | 528 | goto end; |
| 574 | } | 529 | } |
| 575 | if ((hkey != NULL) && !set_hex(hkey,key,sizeof key)) | 530 | if ((hkey != NULL) && !set_hex(hkey, key, sizeof key)) { |
| 576 | { | 531 | BIO_printf(bio_err, "invalid hex key value\n"); |
| 577 | BIO_printf(bio_err,"invalid hex key value\n"); | ||
| 578 | goto end; | 532 | goto end; |
| 579 | } | 533 | } |
| 580 | 534 | if ((benc = BIO_new(BIO_f_cipher())) == NULL) | |
| 581 | if ((benc=BIO_new(BIO_f_cipher())) == NULL) | ||
| 582 | goto end; | 535 | goto end; |
| 583 | 536 | ||
| 584 | /* Since we may be changing parameters work on the encryption | 537 | /* |
| 538 | * Since we may be changing parameters work on the encryption | ||
| 585 | * context rather than calling BIO_set_cipher(). | 539 | * context rather than calling BIO_set_cipher(). |
| 586 | */ | 540 | */ |
| 587 | 541 | ||
| @@ -589,138 +543,129 @@ bad: | |||
| 589 | 543 | ||
| 590 | if (non_fips_allow) | 544 | if (non_fips_allow) |
| 591 | EVP_CIPHER_CTX_set_flags(ctx, | 545 | EVP_CIPHER_CTX_set_flags(ctx, |
| 592 | EVP_CIPH_FLAG_NON_FIPS_ALLOW); | 546 | EVP_CIPH_FLAG_NON_FIPS_ALLOW); |
| 593 | 547 | ||
| 594 | if (!EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, enc)) | 548 | if (!EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, enc)) { |
| 595 | { | ||
| 596 | BIO_printf(bio_err, "Error setting cipher %s\n", | 549 | BIO_printf(bio_err, "Error setting cipher %s\n", |
| 597 | EVP_CIPHER_name(cipher)); | 550 | EVP_CIPHER_name(cipher)); |
| 598 | ERR_print_errors(bio_err); | 551 | ERR_print_errors(bio_err); |
| 599 | goto end; | 552 | goto end; |
| 600 | } | 553 | } |
| 601 | |||
| 602 | if (nopad) | 554 | if (nopad) |
| 603 | EVP_CIPHER_CTX_set_padding(ctx, 0); | 555 | EVP_CIPHER_CTX_set_padding(ctx, 0); |
| 604 | 556 | ||
| 605 | if (!EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, enc)) | 557 | if (!EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, enc)) { |
| 606 | { | ||
| 607 | BIO_printf(bio_err, "Error setting cipher %s\n", | 558 | BIO_printf(bio_err, "Error setting cipher %s\n", |
| 608 | EVP_CIPHER_name(cipher)); | 559 | EVP_CIPHER_name(cipher)); |
| 609 | ERR_print_errors(bio_err); | 560 | ERR_print_errors(bio_err); |
| 610 | goto end; | 561 | goto end; |
| 611 | } | 562 | } |
| 612 | 563 | if (debug) { | |
| 613 | if (debug) | 564 | BIO_set_callback(benc, BIO_debug_callback); |
| 614 | { | 565 | BIO_set_callback_arg(benc, (char *) bio_err); |
| 615 | BIO_set_callback(benc,BIO_debug_callback); | 566 | } |
| 616 | BIO_set_callback_arg(benc,(char *)bio_err); | 567 | if (printkey) { |
| 617 | } | 568 | if (!nosalt) { |
| 618 | |||
| 619 | if (printkey) | ||
| 620 | { | ||
| 621 | if (!nosalt) | ||
| 622 | { | ||
| 623 | printf("salt="); | 569 | printf("salt="); |
| 624 | for (i=0; i<(int)sizeof(salt); i++) | 570 | for (i = 0; i < (int) sizeof(salt); i++) |
| 625 | printf("%02X",salt[i]); | 571 | printf("%02X", salt[i]); |
| 626 | printf("\n"); | 572 | printf("\n"); |
| 627 | } | 573 | } |
| 628 | if (cipher->key_len > 0) | 574 | if (cipher->key_len > 0) { |
| 629 | { | ||
| 630 | printf("key="); | 575 | printf("key="); |
| 631 | for (i=0; i<cipher->key_len; i++) | 576 | for (i = 0; i < cipher->key_len; i++) |
| 632 | printf("%02X",key[i]); | 577 | printf("%02X", key[i]); |
| 633 | printf("\n"); | 578 | printf("\n"); |
| 634 | } | 579 | } |
| 635 | if (cipher->iv_len > 0) | 580 | if (cipher->iv_len > 0) { |
| 636 | { | ||
| 637 | printf("iv ="); | 581 | printf("iv ="); |
| 638 | for (i=0; i<cipher->iv_len; i++) | 582 | for (i = 0; i < cipher->iv_len; i++) |
| 639 | printf("%02X",iv[i]); | 583 | printf("%02X", iv[i]); |
| 640 | printf("\n"); | 584 | printf("\n"); |
| 641 | } | 585 | } |
| 642 | if (printkey == 2) | 586 | if (printkey == 2) { |
| 643 | { | 587 | ret = 0; |
| 644 | ret=0; | ||
| 645 | goto end; | 588 | goto end; |
| 646 | } | ||
| 647 | } | 589 | } |
| 648 | } | 590 | } |
| 649 | 591 | } | |
| 650 | /* Only encrypt/decrypt as we write the file */ | 592 | /* Only encrypt/decrypt as we write the file */ |
| 651 | if (benc != NULL) | 593 | if (benc != NULL) |
| 652 | wbio=BIO_push(benc,wbio); | 594 | wbio = BIO_push(benc, wbio); |
| 653 | 595 | ||
| 654 | for (;;) | 596 | for (;;) { |
| 655 | { | 597 | inl = BIO_read(rbio, (char *) buff, bsize); |
| 656 | inl=BIO_read(rbio,(char *)buff,bsize); | 598 | if (inl <= 0) |
| 657 | if (inl <= 0) break; | 599 | break; |
| 658 | if (BIO_write(wbio,(char *)buff,inl) != inl) | 600 | if (BIO_write(wbio, (char *) buff, inl) != inl) { |
| 659 | { | 601 | BIO_printf(bio_err, "error writing output file\n"); |
| 660 | BIO_printf(bio_err,"error writing output file\n"); | ||
| 661 | goto end; | 602 | goto end; |
| 662 | } | ||
| 663 | } | 603 | } |
| 664 | if (!BIO_flush(wbio)) | 604 | } |
| 665 | { | 605 | if (!BIO_flush(wbio)) { |
| 666 | BIO_printf(bio_err,"bad decrypt\n"); | 606 | BIO_printf(bio_err, "bad decrypt\n"); |
| 667 | goto end; | 607 | goto end; |
| 668 | } | 608 | } |
| 669 | 609 | ret = 0; | |
| 670 | ret=0; | 610 | if (verbose) { |
| 671 | if (verbose) | 611 | BIO_printf(bio_err, "bytes read :%8ld\n", BIO_number_read(in)); |
| 672 | { | 612 | BIO_printf(bio_err, "bytes written:%8ld\n", BIO_number_written(out)); |
| 673 | BIO_printf(bio_err,"bytes read :%8ld\n",BIO_number_read(in)); | 613 | } |
| 674 | BIO_printf(bio_err,"bytes written:%8ld\n",BIO_number_written(out)); | ||
| 675 | } | ||
| 676 | end: | 614 | end: |
| 677 | ERR_print_errors(bio_err); | 615 | ERR_print_errors(bio_err); |
| 678 | if (strbuf != NULL) free(strbuf); | 616 | if (strbuf != NULL) |
| 679 | if (buff != NULL) free(buff); | 617 | free(strbuf); |
| 680 | if (in != NULL) BIO_free(in); | 618 | if (buff != NULL) |
| 681 | if (out != NULL) BIO_free_all(out); | 619 | free(buff); |
| 682 | if (benc != NULL) BIO_free(benc); | 620 | if (in != NULL) |
| 683 | if (b64 != NULL) BIO_free(b64); | 621 | BIO_free(in); |
| 622 | if (out != NULL) | ||
| 623 | BIO_free_all(out); | ||
| 624 | if (benc != NULL) | ||
| 625 | BIO_free(benc); | ||
| 626 | if (b64 != NULL) | ||
| 627 | BIO_free(b64); | ||
| 684 | #ifdef ZLIB | 628 | #ifdef ZLIB |
| 685 | if (bzl != NULL) BIO_free(bzl); | 629 | if (bzl != NULL) |
| 630 | BIO_free(bzl); | ||
| 686 | #endif | 631 | #endif |
| 687 | if(pass) free(pass); | 632 | if (pass) |
| 633 | free(pass); | ||
| 688 | apps_shutdown(); | 634 | apps_shutdown(); |
| 689 | return(ret); | 635 | return (ret); |
| 690 | } | 636 | } |
| 691 | 637 | ||
| 692 | int set_hex(char *in, unsigned char *out, int size) | 638 | int |
| 693 | { | 639 | set_hex(char *in, unsigned char *out, int size) |
| 694 | int i,n; | 640 | { |
| 641 | int i, n; | ||
| 695 | unsigned char j; | 642 | unsigned char j; |
| 696 | 643 | ||
| 697 | n=strlen(in); | 644 | n = strlen(in); |
| 698 | if (n > (size*2)) | 645 | if (n > (size * 2)) { |
| 699 | { | 646 | BIO_printf(bio_err, "hex string is too long\n"); |
| 700 | BIO_printf(bio_err,"hex string is too long\n"); | 647 | return (0); |
| 701 | return(0); | 648 | } |
| 702 | } | 649 | memset(out, 0, size); |
| 703 | memset(out,0,size); | 650 | for (i = 0; i < n; i++) { |
| 704 | for (i=0; i<n; i++) | 651 | j = (unsigned char) *in; |
| 705 | { | 652 | *(in++) = '\0'; |
| 706 | j=(unsigned char)*in; | 653 | if (j == 0) |
| 707 | *(in++)='\0'; | 654 | break; |
| 708 | if (j == 0) break; | ||
| 709 | if ((j >= '0') && (j <= '9')) | 655 | if ((j >= '0') && (j <= '9')) |
| 710 | j-='0'; | 656 | j -= '0'; |
| 711 | else if ((j >= 'A') && (j <= 'F')) | 657 | else if ((j >= 'A') && (j <= 'F')) |
| 712 | j=j-'A'+10; | 658 | j = j - 'A' + 10; |
| 713 | else if ((j >= 'a') && (j <= 'f')) | 659 | else if ((j >= 'a') && (j <= 'f')) |
| 714 | j=j-'a'+10; | 660 | j = j - 'a' + 10; |
| 715 | else | 661 | else { |
| 716 | { | 662 | BIO_printf(bio_err, "non-hex digit\n"); |
| 717 | BIO_printf(bio_err,"non-hex digit\n"); | 663 | return (0); |
| 718 | return(0); | ||
| 719 | } | ||
| 720 | if (i&1) | ||
| 721 | out[i/2]|=j; | ||
| 722 | else | ||
| 723 | out[i/2]=(j<<4); | ||
| 724 | } | 664 | } |
| 725 | return(1); | 665 | if (i & 1) |
| 666 | out[i / 2] |= j; | ||
| 667 | else | ||
| 668 | out[i / 2] = (j << 4); | ||
| 726 | } | 669 | } |
| 670 | return (1); | ||
| 671 | } | ||
diff --git a/src/lib/libssl/src/apps/engine.c b/src/lib/libssl/src/apps/engine.c index b9f3121b9f..5cfd3e7677 100644 --- a/src/lib/libssl/src/apps/engine.c +++ b/src/lib/libssl/src/apps/engine.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -72,53 +72,51 @@ | |||
| 72 | #undef PROG | 72 | #undef PROG |
| 73 | #define PROG engine_main | 73 | #define PROG engine_main |
| 74 | 74 | ||
| 75 | static const char *engine_usage[]={ | 75 | static const char *engine_usage[] = { |
| 76 | "usage: engine opts [engine ...]\n", | 76 | "usage: engine opts [engine ...]\n", |
| 77 | " -v[v[v[v]]] - verbose mode, for each engine, list its 'control commands'\n", | 77 | " -v[v[v[v]]] - verbose mode, for each engine, list its 'control commands'\n", |
| 78 | " -vv will additionally display each command's description\n", | 78 | " -vv will additionally display each command's description\n", |
| 79 | " -vvv will also add the input flags for each command\n", | 79 | " -vvv will also add the input flags for each command\n", |
| 80 | " -vvvv will also show internal input flags\n", | 80 | " -vvvv will also show internal input flags\n", |
| 81 | " -c - for each engine, also list the capabilities\n", | 81 | " -c - for each engine, also list the capabilities\n", |
| 82 | " -t[t] - for each engine, check that they are really available\n", | 82 | " -t[t] - for each engine, check that they are really available\n", |
| 83 | " -tt will display error trace for unavailable engines\n", | 83 | " -tt will display error trace for unavailable engines\n", |
| 84 | " -pre <cmd> - runs command 'cmd' against the ENGINE before any attempts\n", | 84 | " -pre <cmd> - runs command 'cmd' against the ENGINE before any attempts\n", |
| 85 | " to load it (if -t is used)\n", | 85 | " to load it (if -t is used)\n", |
| 86 | " -post <cmd> - runs command 'cmd' against the ENGINE after loading it\n", | 86 | " -post <cmd> - runs command 'cmd' against the ENGINE after loading it\n", |
| 87 | " (only used if -t is also provided)\n", | 87 | " (only used if -t is also provided)\n", |
| 88 | " NB: -pre and -post will be applied to all ENGINEs supplied on the command\n", | 88 | " NB: -pre and -post will be applied to all ENGINEs supplied on the command\n", |
| 89 | " line, or all supported ENGINEs if none are specified.\n", | 89 | " line, or all supported ENGINEs if none are specified.\n", |
| 90 | " Eg. '-pre \"SO_PATH:/lib/libdriver.so\"' calls command \"SO_PATH\" with\n", | 90 | " Eg. '-pre \"SO_PATH:/lib/libdriver.so\"' calls command \"SO_PATH\" with\n", |
| 91 | " argument \"/lib/libdriver.so\".\n", | 91 | " argument \"/lib/libdriver.so\".\n", |
| 92 | NULL | 92 | NULL |
| 93 | }; | 93 | }; |
| 94 | 94 | ||
| 95 | static void identity(char *ptr) | 95 | static void |
| 96 | { | 96 | identity(char *ptr) |
| 97 | { | ||
| 97 | return; | 98 | return; |
| 98 | } | 99 | } |
| 99 | 100 | ||
| 100 | static int append_buf(char **buf, const char *s, int *size, int step) | 101 | static int |
| 101 | { | 102 | append_buf(char **buf, const char *s, int *size, int step) |
| 103 | { | ||
| 102 | int l = strlen(s); | 104 | int l = strlen(s); |
| 103 | 105 | ||
| 104 | if (*buf == NULL) | 106 | if (*buf == NULL) { |
| 105 | { | ||
| 106 | *size = step; | 107 | *size = step; |
| 107 | *buf = malloc(*size); | 108 | *buf = malloc(*size); |
| 108 | if (*buf == NULL) | 109 | if (*buf == NULL) |
| 109 | return 0; | 110 | return 0; |
| 110 | **buf = '\0'; | 111 | **buf = '\0'; |
| 111 | } | 112 | } |
| 112 | |||
| 113 | if (**buf != '\0') | 113 | if (**buf != '\0') |
| 114 | l += 2; /* ", " */ | 114 | l += 2; /* ", " */ |
| 115 | 115 | ||
| 116 | if (strlen(*buf) + strlen(s) >= (unsigned int)*size) | 116 | if (strlen(*buf) + strlen(s) >= (unsigned int) *size) { |
| 117 | { | ||
| 118 | *size += step; | 117 | *size += step; |
| 119 | *buf = realloc(*buf, *size); | 118 | *buf = realloc(*buf, *size); |
| 120 | } | 119 | } |
| 121 | |||
| 122 | if (*buf == NULL) | 120 | if (*buf == NULL) |
| 123 | return 0; | 121 | return 0; |
| 124 | 122 | ||
| @@ -127,72 +125,70 @@ static int append_buf(char **buf, const char *s, int *size, int step) | |||
| 127 | BUF_strlcat(*buf, s, *size); | 125 | BUF_strlcat(*buf, s, *size); |
| 128 | 126 | ||
| 129 | return 1; | 127 | return 1; |
| 130 | } | 128 | } |
| 131 | 129 | ||
| 132 | static int util_flags(BIO *bio_out, unsigned int flags, const char *indent) | 130 | static int |
| 133 | { | 131 | util_flags(BIO * bio_out, unsigned int flags, const char *indent) |
| 132 | { | ||
| 134 | int started = 0, err = 0; | 133 | int started = 0, err = 0; |
| 135 | /* Indent before displaying input flags */ | 134 | /* Indent before displaying input flags */ |
| 136 | BIO_printf(bio_out, "%s%s(input flags): ", indent, indent); | 135 | BIO_printf(bio_out, "%s%s(input flags): ", indent, indent); |
| 137 | if(flags == 0) | 136 | if (flags == 0) { |
| 138 | { | ||
| 139 | BIO_printf(bio_out, "<no flags>\n"); | 137 | BIO_printf(bio_out, "<no flags>\n"); |
| 140 | return 1; | 138 | return 1; |
| 141 | } | 139 | } |
| 142 | /* If the object is internal, mark it in a way that shows instead of | 140 | /* |
| 143 | * having it part of all the other flags, even if it really is. */ | 141 | * If the object is internal, mark it in a way that shows instead of |
| 144 | if(flags & ENGINE_CMD_FLAG_INTERNAL) | 142 | * having it part of all the other flags, even if it really is. |
| 145 | { | 143 | */ |
| 144 | if (flags & ENGINE_CMD_FLAG_INTERNAL) { | ||
| 146 | BIO_printf(bio_out, "[Internal] "); | 145 | BIO_printf(bio_out, "[Internal] "); |
| 147 | } | 146 | } |
| 148 | 147 | if (flags & ENGINE_CMD_FLAG_NUMERIC) { | |
| 149 | if(flags & ENGINE_CMD_FLAG_NUMERIC) | ||
| 150 | { | ||
| 151 | BIO_printf(bio_out, "NUMERIC"); | 148 | BIO_printf(bio_out, "NUMERIC"); |
| 152 | started = 1; | 149 | started = 1; |
| 153 | } | 150 | } |
| 154 | /* Now we check that no combinations of the mutually exclusive NUMERIC, | 151 | /* |
| 155 | * STRING, and NO_INPUT flags have been used. Future flags that can be | 152 | * Now we check that no combinations of the mutually exclusive |
| 156 | * OR'd together with these would need to added after these to preserve | 153 | * NUMERIC, STRING, and NO_INPUT flags have been used. Future flags |
| 157 | * the testing logic. */ | 154 | * that can be OR'd together with these would need to added after |
| 158 | if(flags & ENGINE_CMD_FLAG_STRING) | 155 | * these to preserve the testing logic. |
| 159 | { | 156 | */ |
| 160 | if(started) | 157 | if (flags & ENGINE_CMD_FLAG_STRING) { |
| 161 | { | 158 | if (started) { |
| 162 | BIO_printf(bio_out, "|"); | 159 | BIO_printf(bio_out, "|"); |
| 163 | err = 1; | 160 | err = 1; |
| 164 | } | 161 | } |
| 165 | BIO_printf(bio_out, "STRING"); | 162 | BIO_printf(bio_out, "STRING"); |
| 166 | started = 1; | 163 | started = 1; |
| 167 | } | 164 | } |
| 168 | if(flags & ENGINE_CMD_FLAG_NO_INPUT) | 165 | if (flags & ENGINE_CMD_FLAG_NO_INPUT) { |
| 169 | { | 166 | if (started) { |
| 170 | if(started) | ||
| 171 | { | ||
| 172 | BIO_printf(bio_out, "|"); | 167 | BIO_printf(bio_out, "|"); |
| 173 | err = 1; | 168 | err = 1; |
| 174 | } | 169 | } |
| 175 | BIO_printf(bio_out, "NO_INPUT"); | 170 | BIO_printf(bio_out, "NO_INPUT"); |
| 176 | started = 1; | 171 | started = 1; |
| 177 | } | 172 | } |
| 178 | /* Check for unknown flags */ | 173 | /* Check for unknown flags */ |
| 179 | flags = flags & ~ENGINE_CMD_FLAG_NUMERIC & | 174 | flags = flags & ~ENGINE_CMD_FLAG_NUMERIC & |
| 180 | ~ENGINE_CMD_FLAG_STRING & | 175 | ~ENGINE_CMD_FLAG_STRING & |
| 181 | ~ENGINE_CMD_FLAG_NO_INPUT & | 176 | ~ENGINE_CMD_FLAG_NO_INPUT & |
| 182 | ~ENGINE_CMD_FLAG_INTERNAL; | 177 | ~ENGINE_CMD_FLAG_INTERNAL; |
| 183 | if(flags) | 178 | if (flags) { |
| 184 | { | 179 | if (started) |
| 185 | if(started) BIO_printf(bio_out, "|"); | 180 | BIO_printf(bio_out, "|"); |
| 186 | BIO_printf(bio_out, "<0x%04X>", flags); | 181 | BIO_printf(bio_out, "<0x%04X>", flags); |
| 187 | } | 182 | } |
| 188 | if(err) | 183 | if (err) |
| 189 | BIO_printf(bio_out, " <illegal flags!>"); | 184 | BIO_printf(bio_out, " <illegal flags!>"); |
| 190 | BIO_printf(bio_out, "\n"); | 185 | BIO_printf(bio_out, "\n"); |
| 191 | return 1; | 186 | return 1; |
| 192 | } | 187 | } |
| 193 | 188 | ||
| 194 | static int util_verbose(ENGINE *e, int verbose, BIO *bio_out, const char *indent) | 189 | static int |
| 195 | { | 190 | util_verbose(ENGINE * e, int verbose, BIO * bio_out, const char *indent) |
| 191 | { | ||
| 196 | static const int line_wrap = 78; | 192 | static const int line_wrap = 78; |
| 197 | int num; | 193 | int num; |
| 198 | int ret = 0; | 194 | int ret = 0; |
| @@ -200,344 +196,321 @@ static int util_verbose(ENGINE *e, int verbose, BIO *bio_out, const char *indent | |||
| 200 | char *desc = NULL; | 196 | char *desc = NULL; |
| 201 | int flags; | 197 | int flags; |
| 202 | int xpos = 0; | 198 | int xpos = 0; |
| 203 | STACK_OF(OPENSSL_STRING) *cmds = NULL; | 199 | STACK_OF(OPENSSL_STRING) * cmds = NULL; |
| 204 | if(!ENGINE_ctrl(e, ENGINE_CTRL_HAS_CTRL_FUNCTION, 0, NULL, NULL) || | 200 | if (!ENGINE_ctrl(e, ENGINE_CTRL_HAS_CTRL_FUNCTION, 0, NULL, NULL) || |
| 205 | ((num = ENGINE_ctrl(e, ENGINE_CTRL_GET_FIRST_CMD_TYPE, | 201 | ((num = ENGINE_ctrl(e, ENGINE_CTRL_GET_FIRST_CMD_TYPE, |
| 206 | 0, NULL, NULL)) <= 0)) | 202 | 0, NULL, NULL)) <= 0)) { |
| 207 | { | ||
| 208 | #if 0 | 203 | #if 0 |
| 209 | BIO_printf(bio_out, "%s<no control commands>\n", indent); | 204 | BIO_printf(bio_out, "%s<no control commands>\n", indent); |
| 210 | #endif | 205 | #endif |
| 211 | return 1; | 206 | return 1; |
| 212 | } | 207 | } |
| 213 | |||
| 214 | cmds = sk_OPENSSL_STRING_new_null(); | 208 | cmds = sk_OPENSSL_STRING_new_null(); |
| 215 | 209 | ||
| 216 | if(!cmds) | 210 | if (!cmds) |
| 217 | goto err; | 211 | goto err; |
| 218 | do { | 212 | do { |
| 219 | int len; | 213 | int len; |
| 220 | /* Get the command input flags */ | 214 | /* Get the command input flags */ |
| 221 | if((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, num, | 215 | if ((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, num, |
| 222 | NULL, NULL)) < 0) | 216 | NULL, NULL)) < 0) |
| 223 | goto err; | 217 | goto err; |
| 224 | if (!(flags & ENGINE_CMD_FLAG_INTERNAL) || verbose >= 4) | 218 | if (!(flags & ENGINE_CMD_FLAG_INTERNAL) || verbose >= 4) { |
| 225 | { | 219 | /* Get the command name */ |
| 226 | /* Get the command name */ | 220 | if ((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_LEN_FROM_CMD, num, |
| 227 | if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_LEN_FROM_CMD, num, | 221 | NULL, NULL)) <= 0) |
| 228 | NULL, NULL)) <= 0) | 222 | goto err; |
| 229 | goto err; | 223 | if ((name = malloc(len + 1)) == NULL) |
| 230 | if((name = malloc(len + 1)) == NULL) | 224 | goto err; |
| 231 | goto err; | 225 | if (ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_FROM_CMD, num, name, |
| 232 | if(ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_FROM_CMD, num, name, | 226 | NULL) <= 0) |
| 233 | NULL) <= 0) | 227 | goto err; |
| 234 | goto err; | 228 | /* Get the command description */ |
| 235 | /* Get the command description */ | 229 | if ((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_LEN_FROM_CMD, num, |
| 236 | if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_LEN_FROM_CMD, num, | 230 | NULL, NULL)) < 0) |
| 237 | NULL, NULL)) < 0) | 231 | goto err; |
| 238 | goto err; | 232 | if (len > 0) { |
| 239 | if(len > 0) | 233 | if ((desc = malloc(len + 1)) == NULL) |
| 240 | { | 234 | goto err; |
| 241 | if((desc = malloc(len + 1)) == NULL) | 235 | if (ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_FROM_CMD, num, desc, |
| 242 | goto err; | 236 | NULL) <= 0) |
| 243 | if(ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_FROM_CMD, num, desc, | 237 | goto err; |
| 244 | NULL) <= 0) | 238 | } |
| 245 | goto err; | 239 | /* Now decide on the output */ |
| 246 | } | 240 | if (xpos == 0) |
| 247 | /* Now decide on the output */ | 241 | /* Do an indent */ |
| 248 | if(xpos == 0) | 242 | xpos = BIO_puts(bio_out, indent); |
| 249 | /* Do an indent */ | 243 | else |
| 250 | xpos = BIO_puts(bio_out, indent); | 244 | /* Otherwise prepend a ", " */ |
| 251 | else | 245 | xpos += BIO_printf(bio_out, ", "); |
| 252 | /* Otherwise prepend a ", " */ | 246 | if (verbose == 1) { |
| 253 | xpos += BIO_printf(bio_out, ", "); | 247 | /* We're just listing names, comma-delimited */ |
| 254 | if(verbose == 1) | 248 | if ((xpos > (int) strlen(indent)) && |
| 255 | { | 249 | (xpos + (int) strlen(name) > line_wrap)) { |
| 256 | /* We're just listing names, comma-delimited */ | 250 | BIO_printf(bio_out, "\n"); |
| 257 | if((xpos > (int)strlen(indent)) && | 251 | xpos = BIO_puts(bio_out, indent); |
| 258 | (xpos + (int)strlen(name) > line_wrap)) | 252 | } |
| 259 | { | 253 | xpos += BIO_printf(bio_out, "%s", name); |
| 260 | BIO_printf(bio_out, "\n"); | 254 | } else { |
| 261 | xpos = BIO_puts(bio_out, indent); | 255 | /* We're listing names plus descriptions */ |
| 262 | } | 256 | BIO_printf(bio_out, "%s: %s\n", name, |
| 263 | xpos += BIO_printf(bio_out, "%s", name); | 257 | (desc == NULL) ? "<no description>" : desc); |
| 264 | } | 258 | /* ... and sometimes input flags */ |
| 265 | else | 259 | if ((verbose >= 3) && !util_flags(bio_out, flags, |
| 266 | { | 260 | indent)) |
| 267 | /* We're listing names plus descriptions */ | 261 | goto err; |
| 268 | BIO_printf(bio_out, "%s: %s\n", name, | 262 | xpos = 0; |
| 269 | (desc == NULL) ? "<no description>" : desc); | 263 | } |
| 270 | /* ... and sometimes input flags */ | 264 | } |
| 271 | if((verbose >= 3) && !util_flags(bio_out, flags, | 265 | free(name); |
| 272 | indent)) | 266 | name = NULL; |
| 273 | goto err; | 267 | if (desc) { |
| 274 | xpos = 0; | 268 | free(desc); |
| 275 | } | 269 | desc = NULL; |
| 276 | } | 270 | } |
| 277 | free(name); name = NULL; | ||
| 278 | if(desc) { free(desc); desc = NULL; } | ||
| 279 | /* Move to the next command */ | 271 | /* Move to the next command */ |
| 280 | num = ENGINE_ctrl(e, ENGINE_CTRL_GET_NEXT_CMD_TYPE, | 272 | num = ENGINE_ctrl(e, ENGINE_CTRL_GET_NEXT_CMD_TYPE, |
| 281 | num, NULL, NULL); | 273 | num, NULL, NULL); |
| 282 | } while(num > 0); | 274 | } while (num > 0); |
| 283 | if(xpos > 0) | 275 | if (xpos > 0) |
| 284 | BIO_printf(bio_out, "\n"); | 276 | BIO_printf(bio_out, "\n"); |
| 285 | ret = 1; | 277 | ret = 1; |
| 286 | err: | 278 | err: |
| 287 | if(cmds) sk_OPENSSL_STRING_pop_free(cmds, identity); | 279 | if (cmds) |
| 288 | if(name) free(name); | 280 | sk_OPENSSL_STRING_pop_free(cmds, identity); |
| 289 | if(desc) free(desc); | 281 | if (name) |
| 282 | free(name); | ||
| 283 | if (desc) | ||
| 284 | free(desc); | ||
| 290 | return ret; | 285 | return ret; |
| 291 | } | 286 | } |
| 292 | 287 | ||
| 293 | static void util_do_cmds(ENGINE *e, STACK_OF(OPENSSL_STRING) *cmds, | 288 | static void |
| 294 | BIO *bio_out, const char *indent) | 289 | util_do_cmds(ENGINE * e, STACK_OF(OPENSSL_STRING) * cmds, |
| 295 | { | 290 | BIO * bio_out, const char *indent) |
| 291 | { | ||
| 296 | int loop, res, num = sk_OPENSSL_STRING_num(cmds); | 292 | int loop, res, num = sk_OPENSSL_STRING_num(cmds); |
| 297 | 293 | ||
| 298 | if(num < 0) | 294 | if (num < 0) { |
| 299 | { | ||
| 300 | BIO_printf(bio_out, "[Error]: internal stack error\n"); | 295 | BIO_printf(bio_out, "[Error]: internal stack error\n"); |
| 301 | return; | 296 | return; |
| 302 | } | 297 | } |
| 303 | for(loop = 0; loop < num; loop++) | 298 | for (loop = 0; loop < num; loop++) { |
| 304 | { | ||
| 305 | char buf[256]; | 299 | char buf[256]; |
| 306 | const char *cmd, *arg; | 300 | const char *cmd, *arg; |
| 307 | cmd = sk_OPENSSL_STRING_value(cmds, loop); | 301 | cmd = sk_OPENSSL_STRING_value(cmds, loop); |
| 308 | res = 1; /* assume success */ | 302 | res = 1; /* assume success */ |
| 309 | /* Check if this command has no ":arg" */ | 303 | /* Check if this command has no ":arg" */ |
| 310 | if((arg = strstr(cmd, ":")) == NULL) | 304 | if ((arg = strstr(cmd, ":")) == NULL) { |
| 311 | { | 305 | if (!ENGINE_ctrl_cmd_string(e, cmd, NULL, 0)) |
| 312 | if(!ENGINE_ctrl_cmd_string(e, cmd, NULL, 0)) | ||
| 313 | res = 0; | 306 | res = 0; |
| 314 | } | 307 | } else { |
| 315 | else | 308 | if ((int) (arg - cmd) > 254) { |
| 316 | { | 309 | BIO_printf(bio_out, "[Error]: command name too long\n"); |
| 317 | if((int)(arg - cmd) > 254) | ||
| 318 | { | ||
| 319 | BIO_printf(bio_out,"[Error]: command name too long\n"); | ||
| 320 | return; | 310 | return; |
| 321 | } | 311 | } |
| 322 | memcpy(buf, cmd, (int)(arg - cmd)); | 312 | memcpy(buf, cmd, (int) (arg - cmd)); |
| 323 | buf[arg-cmd] = '\0'; | 313 | buf[arg - cmd] = '\0'; |
| 324 | arg++; /* Move past the ":" */ | 314 | arg++; /* Move past the ":" */ |
| 325 | /* Call the command with the argument */ | 315 | /* Call the command with the argument */ |
| 326 | if(!ENGINE_ctrl_cmd_string(e, buf, arg, 0)) | 316 | if (!ENGINE_ctrl_cmd_string(e, buf, arg, 0)) |
| 327 | res = 0; | 317 | res = 0; |
| 328 | } | 318 | } |
| 329 | if(res) | 319 | if (res) |
| 330 | BIO_printf(bio_out, "[Success]: %s\n", cmd); | 320 | BIO_printf(bio_out, "[Success]: %s\n", cmd); |
| 331 | else | 321 | else { |
| 332 | { | ||
| 333 | BIO_printf(bio_out, "[Failure]: %s\n", cmd); | 322 | BIO_printf(bio_out, "[Failure]: %s\n", cmd); |
| 334 | ERR_print_errors(bio_out); | 323 | ERR_print_errors(bio_out); |
| 335 | } | ||
| 336 | } | 324 | } |
| 337 | } | 325 | } |
| 326 | } | ||
| 338 | 327 | ||
| 339 | int MAIN(int, char **); | 328 | int MAIN(int, char **); |
| 340 | 329 | ||
| 341 | int MAIN(int argc, char **argv) | 330 | int |
| 342 | { | 331 | MAIN(int argc, char **argv) |
| 343 | int ret=1,i; | 332 | { |
| 333 | int ret = 1, i; | ||
| 344 | const char **pp; | 334 | const char **pp; |
| 345 | int verbose=0, list_cap=0, test_avail=0, test_avail_noise = 0; | 335 | int verbose = 0, list_cap = 0, test_avail = 0, test_avail_noise = 0; |
| 346 | ENGINE *e; | 336 | ENGINE *e; |
| 347 | STACK_OF(OPENSSL_STRING) *engines = sk_OPENSSL_STRING_new_null(); | 337 | STACK_OF(OPENSSL_STRING) * engines = sk_OPENSSL_STRING_new_null(); |
| 348 | STACK_OF(OPENSSL_STRING) *pre_cmds = sk_OPENSSL_STRING_new_null(); | 338 | STACK_OF(OPENSSL_STRING) * pre_cmds = sk_OPENSSL_STRING_new_null(); |
| 349 | STACK_OF(OPENSSL_STRING) *post_cmds = sk_OPENSSL_STRING_new_null(); | 339 | STACK_OF(OPENSSL_STRING) * post_cmds = sk_OPENSSL_STRING_new_null(); |
| 350 | int badops=1; | 340 | int badops = 1; |
| 351 | BIO *bio_out=NULL; | 341 | BIO *bio_out = NULL; |
| 352 | const char *indent = " "; | 342 | const char *indent = " "; |
| 353 | 343 | ||
| 354 | apps_startup(); | 344 | apps_startup(); |
| 355 | SSL_load_error_strings(); | 345 | SSL_load_error_strings(); |
| 356 | 346 | ||
| 357 | if (bio_err == NULL) | 347 | if (bio_err == NULL) |
| 358 | bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); | 348 | bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); |
| 359 | 349 | ||
| 360 | if (!load_config(bio_err, NULL)) | 350 | if (!load_config(bio_err, NULL)) |
| 361 | goto end; | 351 | goto end; |
| 362 | bio_out=BIO_new_fp(stdout,BIO_NOCLOSE); | 352 | bio_out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 363 | 353 | ||
| 364 | argc--; | 354 | argc--; |
| 365 | argv++; | 355 | argv++; |
| 366 | while (argc >= 1) | 356 | while (argc >= 1) { |
| 367 | { | 357 | if (strncmp(*argv, "-v", 2) == 0) { |
| 368 | if (strncmp(*argv,"-v",2) == 0) | 358 | if (strspn(*argv + 1, "v") < strlen(*argv + 1)) |
| 369 | { | ||
| 370 | if(strspn(*argv + 1, "v") < strlen(*argv + 1)) | ||
| 371 | goto skip_arg_loop; | 359 | goto skip_arg_loop; |
| 372 | if((verbose=strlen(*argv + 1)) > 4) | 360 | if ((verbose = strlen(*argv + 1)) > 4) |
| 373 | goto skip_arg_loop; | 361 | goto skip_arg_loop; |
| 374 | } | 362 | } else if (strcmp(*argv, "-c") == 0) |
| 375 | else if (strcmp(*argv,"-c") == 0) | 363 | list_cap = 1; |
| 376 | list_cap=1; | 364 | else if (strncmp(*argv, "-t", 2) == 0) { |
| 377 | else if (strncmp(*argv,"-t",2) == 0) | 365 | test_avail = 1; |
| 378 | { | 366 | if (strspn(*argv + 1, "t") < strlen(*argv + 1)) |
| 379 | test_avail=1; | ||
| 380 | if(strspn(*argv + 1, "t") < strlen(*argv + 1)) | ||
| 381 | goto skip_arg_loop; | 367 | goto skip_arg_loop; |
| 382 | if((test_avail_noise = strlen(*argv + 1) - 1) > 1) | 368 | if ((test_avail_noise = strlen(*argv + 1) - 1) > 1) |
| 383 | goto skip_arg_loop; | 369 | goto skip_arg_loop; |
| 384 | } | 370 | } else if (strcmp(*argv, "-pre") == 0) { |
| 385 | else if (strcmp(*argv,"-pre") == 0) | 371 | argc--; |
| 386 | { | 372 | argv++; |
| 387 | argc--; argv++; | ||
| 388 | if (argc == 0) | 373 | if (argc == 0) |
| 389 | goto skip_arg_loop; | 374 | goto skip_arg_loop; |
| 390 | sk_OPENSSL_STRING_push(pre_cmds,*argv); | 375 | sk_OPENSSL_STRING_push(pre_cmds, *argv); |
| 391 | } | 376 | } else if (strcmp(*argv, "-post") == 0) { |
| 392 | else if (strcmp(*argv,"-post") == 0) | 377 | argc--; |
| 393 | { | 378 | argv++; |
| 394 | argc--; argv++; | ||
| 395 | if (argc == 0) | 379 | if (argc == 0) |
| 396 | goto skip_arg_loop; | 380 | goto skip_arg_loop; |
| 397 | sk_OPENSSL_STRING_push(post_cmds,*argv); | 381 | sk_OPENSSL_STRING_push(post_cmds, *argv); |
| 398 | } | 382 | } else if ((strncmp(*argv, "-h", 2) == 0) || |
| 399 | else if ((strncmp(*argv,"-h",2) == 0) || | 383 | (strcmp(*argv, "-?") == 0)) |
| 400 | (strcmp(*argv,"-?") == 0)) | ||
| 401 | goto skip_arg_loop; | 384 | goto skip_arg_loop; |
| 402 | else | 385 | else |
| 403 | sk_OPENSSL_STRING_push(engines,*argv); | 386 | sk_OPENSSL_STRING_push(engines, *argv); |
| 404 | argc--; | 387 | argc--; |
| 405 | argv++; | 388 | argv++; |
| 406 | } | 389 | } |
| 407 | /* Looks like everything went OK */ | 390 | /* Looks like everything went OK */ |
| 408 | badops = 0; | 391 | badops = 0; |
| 409 | skip_arg_loop: | 392 | skip_arg_loop: |
| 410 | 393 | ||
| 411 | if (badops) | 394 | if (badops) { |
| 412 | { | 395 | for (pp = engine_usage; (*pp != NULL); pp++) |
| 413 | for (pp=engine_usage; (*pp != NULL); pp++) | 396 | BIO_printf(bio_err, "%s", *pp); |
| 414 | BIO_printf(bio_err,"%s",*pp); | ||
| 415 | goto end; | 397 | goto end; |
| 398 | } | ||
| 399 | if (sk_OPENSSL_STRING_num(engines) == 0) { | ||
| 400 | for (e = ENGINE_get_first(); e != NULL; e = ENGINE_get_next(e)) { | ||
| 401 | sk_OPENSSL_STRING_push(engines, (char *) ENGINE_get_id(e)); | ||
| 416 | } | 402 | } |
| 417 | 403 | } | |
| 418 | if (sk_OPENSSL_STRING_num(engines) == 0) | 404 | for (i = 0; i < sk_OPENSSL_STRING_num(engines); i++) { |
| 419 | { | 405 | const char *id = sk_OPENSSL_STRING_value(engines, i); |
| 420 | for(e = ENGINE_get_first(); e != NULL; e = ENGINE_get_next(e)) | 406 | if ((e = ENGINE_by_id(id)) != NULL) { |
| 421 | { | ||
| 422 | sk_OPENSSL_STRING_push(engines,(char *)ENGINE_get_id(e)); | ||
| 423 | } | ||
| 424 | } | ||
| 425 | |||
| 426 | for (i=0; i<sk_OPENSSL_STRING_num(engines); i++) | ||
| 427 | { | ||
| 428 | const char *id = sk_OPENSSL_STRING_value(engines,i); | ||
| 429 | if ((e = ENGINE_by_id(id)) != NULL) | ||
| 430 | { | ||
| 431 | const char *name = ENGINE_get_name(e); | 407 | const char *name = ENGINE_get_name(e); |
| 432 | /* Do "id" first, then "name". Easier to auto-parse. */ | 408 | /* Do "id" first, then "name". Easier to auto-parse. */ |
| 433 | BIO_printf(bio_out, "(%s) %s\n", id, name); | 409 | BIO_printf(bio_out, "(%s) %s\n", id, name); |
| 434 | util_do_cmds(e, pre_cmds, bio_out, indent); | 410 | util_do_cmds(e, pre_cmds, bio_out, indent); |
| 435 | if (strcmp(ENGINE_get_id(e), id) != 0) | 411 | if (strcmp(ENGINE_get_id(e), id) != 0) { |
| 436 | { | ||
| 437 | BIO_printf(bio_out, "Loaded: (%s) %s\n", | 412 | BIO_printf(bio_out, "Loaded: (%s) %s\n", |
| 438 | ENGINE_get_id(e), ENGINE_get_name(e)); | 413 | ENGINE_get_id(e), ENGINE_get_name(e)); |
| 439 | } | 414 | } |
| 440 | if (list_cap) | 415 | if (list_cap) { |
| 441 | { | ||
| 442 | int cap_size = 256; | 416 | int cap_size = 256; |
| 443 | char *cap_buf = NULL; | 417 | char *cap_buf = NULL; |
| 444 | int k,n; | 418 | int k, n; |
| 445 | const int *nids; | 419 | const int *nids; |
| 446 | ENGINE_CIPHERS_PTR fn_c; | 420 | ENGINE_CIPHERS_PTR fn_c; |
| 447 | ENGINE_DIGESTS_PTR fn_d; | 421 | ENGINE_DIGESTS_PTR fn_d; |
| 448 | ENGINE_PKEY_METHS_PTR fn_pk; | 422 | ENGINE_PKEY_METHS_PTR fn_pk; |
| 449 | 423 | ||
| 450 | if (ENGINE_get_RSA(e) != NULL | 424 | if (ENGINE_get_RSA(e) != NULL |
| 451 | && !append_buf(&cap_buf, "RSA", | 425 | && !append_buf(&cap_buf, "RSA", |
| 452 | &cap_size, 256)) | 426 | &cap_size, 256)) |
| 453 | goto end; | 427 | goto end; |
| 454 | if (ENGINE_get_DSA(e) != NULL | 428 | if (ENGINE_get_DSA(e) != NULL |
| 455 | && !append_buf(&cap_buf, "DSA", | 429 | && !append_buf(&cap_buf, "DSA", |
| 456 | &cap_size, 256)) | 430 | &cap_size, 256)) |
| 457 | goto end; | 431 | goto end; |
| 458 | if (ENGINE_get_DH(e) != NULL | 432 | if (ENGINE_get_DH(e) != NULL |
| 459 | && !append_buf(&cap_buf, "DH", | 433 | && !append_buf(&cap_buf, "DH", |
| 460 | &cap_size, 256)) | 434 | &cap_size, 256)) |
| 461 | goto end; | 435 | goto end; |
| 462 | if (ENGINE_get_RAND(e) != NULL | 436 | if (ENGINE_get_RAND(e) != NULL |
| 463 | && !append_buf(&cap_buf, "RAND", | 437 | && !append_buf(&cap_buf, "RAND", |
| 464 | &cap_size, 256)) | 438 | &cap_size, 256)) |
| 465 | goto end; | 439 | goto end; |
| 466 | 440 | ||
| 467 | fn_c = ENGINE_get_ciphers(e); | 441 | fn_c = ENGINE_get_ciphers(e); |
| 468 | if(!fn_c) goto skip_ciphers; | 442 | if (!fn_c) |
| 443 | goto skip_ciphers; | ||
| 469 | n = fn_c(e, NULL, &nids, 0); | 444 | n = fn_c(e, NULL, &nids, 0); |
| 470 | for(k=0 ; k < n ; ++k) | 445 | for (k = 0; k < n; ++k) |
| 471 | if(!append_buf(&cap_buf, | 446 | if (!append_buf(&cap_buf, |
| 472 | OBJ_nid2sn(nids[k]), | 447 | OBJ_nid2sn(nids[k]), |
| 473 | &cap_size, 256)) | 448 | &cap_size, 256)) |
| 474 | goto end; | 449 | goto end; |
| 475 | 450 | ||
| 476 | skip_ciphers: | 451 | skip_ciphers: |
| 477 | fn_d = ENGINE_get_digests(e); | 452 | fn_d = ENGINE_get_digests(e); |
| 478 | if(!fn_d) goto skip_digests; | 453 | if (!fn_d) |
| 454 | goto skip_digests; | ||
| 479 | n = fn_d(e, NULL, &nids, 0); | 455 | n = fn_d(e, NULL, &nids, 0); |
| 480 | for(k=0 ; k < n ; ++k) | 456 | for (k = 0; k < n; ++k) |
| 481 | if(!append_buf(&cap_buf, | 457 | if (!append_buf(&cap_buf, |
| 482 | OBJ_nid2sn(nids[k]), | 458 | OBJ_nid2sn(nids[k]), |
| 483 | &cap_size, 256)) | 459 | &cap_size, 256)) |
| 484 | goto end; | 460 | goto end; |
| 485 | 461 | ||
| 486 | skip_digests: | 462 | skip_digests: |
| 487 | fn_pk = ENGINE_get_pkey_meths(e); | 463 | fn_pk = ENGINE_get_pkey_meths(e); |
| 488 | if(!fn_pk) goto skip_pmeths; | 464 | if (!fn_pk) |
| 465 | goto skip_pmeths; | ||
| 489 | n = fn_pk(e, NULL, &nids, 0); | 466 | n = fn_pk(e, NULL, &nids, 0); |
| 490 | for(k=0 ; k < n ; ++k) | 467 | for (k = 0; k < n; ++k) |
| 491 | if(!append_buf(&cap_buf, | 468 | if (!append_buf(&cap_buf, |
| 492 | OBJ_nid2sn(nids[k]), | 469 | OBJ_nid2sn(nids[k]), |
| 493 | &cap_size, 256)) | 470 | &cap_size, 256)) |
| 494 | goto end; | 471 | goto end; |
| 495 | skip_pmeths: | 472 | skip_pmeths: |
| 496 | if (cap_buf && (*cap_buf != '\0')) | 473 | if (cap_buf && (*cap_buf != '\0')) |
| 497 | BIO_printf(bio_out, " [%s]\n", cap_buf); | 474 | BIO_printf(bio_out, " [%s]\n", cap_buf); |
| 498 | 475 | ||
| 499 | free(cap_buf); | 476 | free(cap_buf); |
| 500 | } | 477 | } |
| 501 | if(test_avail) | 478 | if (test_avail) { |
| 502 | { | ||
| 503 | BIO_printf(bio_out, "%s", indent); | 479 | BIO_printf(bio_out, "%s", indent); |
| 504 | if (ENGINE_init(e)) | 480 | if (ENGINE_init(e)) { |
| 505 | { | ||
| 506 | BIO_printf(bio_out, "[ available ]\n"); | 481 | BIO_printf(bio_out, "[ available ]\n"); |
| 507 | util_do_cmds(e, post_cmds, bio_out, indent); | 482 | util_do_cmds(e, post_cmds, bio_out, indent); |
| 508 | ENGINE_finish(e); | 483 | ENGINE_finish(e); |
| 509 | } | 484 | } else { |
| 510 | else | ||
| 511 | { | ||
| 512 | BIO_printf(bio_out, "[ unavailable ]\n"); | 485 | BIO_printf(bio_out, "[ unavailable ]\n"); |
| 513 | if(test_avail_noise) | 486 | if (test_avail_noise) |
| 514 | ERR_print_errors_fp(stdout); | 487 | ERR_print_errors_fp(stdout); |
| 515 | ERR_clear_error(); | 488 | ERR_clear_error(); |
| 516 | } | ||
| 517 | } | 489 | } |
| 518 | if((verbose > 0) && !util_verbose(e, verbose, bio_out, indent)) | 490 | } |
| 491 | if ((verbose > 0) && !util_verbose(e, verbose, bio_out, indent)) | ||
| 519 | goto end; | 492 | goto end; |
| 520 | ENGINE_free(e); | 493 | ENGINE_free(e); |
| 521 | } | 494 | } else |
| 522 | else | ||
| 523 | ERR_print_errors(bio_err); | 495 | ERR_print_errors(bio_err); |
| 524 | } | 496 | } |
| 525 | 497 | ||
| 526 | ret=0; | 498 | ret = 0; |
| 527 | end: | 499 | end: |
| 528 | 500 | ||
| 529 | ERR_print_errors(bio_err); | 501 | ERR_print_errors(bio_err); |
| 530 | sk_OPENSSL_STRING_pop_free(engines, identity); | 502 | sk_OPENSSL_STRING_pop_free(engines, identity); |
| 531 | sk_OPENSSL_STRING_pop_free(pre_cmds, identity); | 503 | sk_OPENSSL_STRING_pop_free(pre_cmds, identity); |
| 532 | sk_OPENSSL_STRING_pop_free(post_cmds, identity); | 504 | sk_OPENSSL_STRING_pop_free(post_cmds, identity); |
| 533 | if (bio_out != NULL) BIO_free_all(bio_out); | 505 | if (bio_out != NULL) |
| 506 | BIO_free_all(bio_out); | ||
| 534 | apps_shutdown(); | 507 | apps_shutdown(); |
| 535 | return(ret); | 508 | return (ret); |
| 536 | } | 509 | } |
| 537 | #else | 510 | #else |
| 538 | 511 | ||
| 539 | # if PEDANTIC | 512 | #if PEDANTIC |
| 540 | static void *dummy=&dummy; | 513 | static void *dummy = &dummy; |
| 541 | # endif | 514 | #endif |
| 542 | 515 | ||
| 543 | #endif | 516 | #endif |
diff --git a/src/lib/libssl/src/apps/errstr.c b/src/lib/libssl/src/apps/errstr.c index 2a26c4ed15..77d2ea6a7c 100644 --- a/src/lib/libssl/src/apps/errstr.c +++ b/src/lib/libssl/src/apps/errstr.c | |||
| @@ -81,7 +81,7 @@ MAIN(int argc, char **argv) | |||
| 81 | 81 | ||
| 82 | if (bio_err == NULL) | 82 | if (bio_err == NULL) |
| 83 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 83 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 84 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 84 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 85 | 85 | ||
| 86 | SSL_load_error_strings(); | 86 | SSL_load_error_strings(); |
| 87 | 87 | ||
| @@ -102,9 +102,8 @@ MAIN(int argc, char **argv) | |||
| 102 | argc--; | 102 | argc--; |
| 103 | argv++; | 103 | argv++; |
| 104 | } | 104 | } |
| 105 | |||
| 106 | for (i = 1; i < argc; i++) { | 105 | for (i = 1; i < argc; i++) { |
| 107 | if (sscanf(argv[i], "%lx",&l)) { | 106 | if (sscanf(argv[i], "%lx", &l)) { |
| 108 | ERR_error_string_n(l, buf, sizeof buf); | 107 | ERR_error_string_n(l, buf, sizeof buf); |
| 109 | printf("%s\n", buf); | 108 | printf("%s\n", buf); |
| 110 | } else { | 109 | } else { |
| @@ -114,5 +113,5 @@ MAIN(int argc, char **argv) | |||
| 114 | } | 113 | } |
| 115 | } | 114 | } |
| 116 | apps_shutdown(); | 115 | apps_shutdown(); |
| 117 | return(ret); | 116 | return (ret); |
| 118 | } | 117 | } |
diff --git a/src/lib/libssl/src/apps/gendh.c b/src/lib/libssl/src/apps/gendh.c index 531e37a25b..644ef87bd2 100644 --- a/src/lib/libssl/src/apps/gendh.c +++ b/src/lib/libssl/src/apps/gendh.c | |||
| @@ -82,7 +82,7 @@ | |||
| 82 | #undef PROG | 82 | #undef PROG |
| 83 | #define PROG gendh_main | 83 | #define PROG gendh_main |
| 84 | 84 | ||
| 85 | static int dh_cb(int p, int n, BN_GENCB *cb); | 85 | static int dh_cb(int p, int n, BN_GENCB * cb); |
| 86 | 86 | ||
| 87 | int MAIN(int, char **); | 87 | int MAIN(int, char **); |
| 88 | 88 | ||
| @@ -105,7 +105,7 @@ MAIN(int argc, char **argv) | |||
| 105 | BN_GENCB_set(&cb, dh_cb, bio_err); | 105 | BN_GENCB_set(&cb, dh_cb, bio_err); |
| 106 | if (bio_err == NULL) | 106 | if (bio_err == NULL) |
| 107 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 107 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 108 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 108 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 109 | 109 | ||
| 110 | if (!load_config(bio_err, NULL)) | 110 | if (!load_config(bio_err, NULL)) |
| 111 | goto end; | 111 | goto end; |
| @@ -118,35 +118,39 @@ MAIN(int argc, char **argv) | |||
| 118 | if (strcmp(*argv, "-out") == 0) { | 118 | if (strcmp(*argv, "-out") == 0) { |
| 119 | if (--argc < 1) | 119 | if (--argc < 1) |
| 120 | goto bad; | 120 | goto bad; |
| 121 | outfile= *(++argv); | 121 | outfile = *(++argv); |
| 122 | } else if (strcmp(*argv, "-2") == 0) | 122 | } else if (strcmp(*argv, "-2") == 0) |
| 123 | g = 2; | 123 | g = 2; |
| 124 | /* else if (strcmp(*argv,"-3") == 0) | 124 | /* |
| 125 | g=3; */ | 125 | * else if (strcmp(*argv,"-3") == 0) g=3; |
| 126 | */ | ||
| 126 | else if (strcmp(*argv, "-5") == 0) | 127 | else if (strcmp(*argv, "-5") == 0) |
| 127 | g = 5; | 128 | g = 5; |
| 128 | #ifndef OPENSSL_NO_ENGINE | 129 | #ifndef OPENSSL_NO_ENGINE |
| 129 | else if (strcmp(*argv, "-engine") == 0) { | 130 | else if (strcmp(*argv, "-engine") == 0) { |
| 130 | if (--argc < 1) | 131 | if (--argc < 1) |
| 131 | goto bad; | 132 | goto bad; |
| 132 | engine= *(++argv); | 133 | engine = *(++argv); |
| 133 | } | 134 | } |
| 134 | #endif | 135 | #endif |
| 135 | else if (strcmp(*argv, "-rand") == 0) { | 136 | else if (strcmp(*argv, "-rand") == 0) { |
| 136 | if (--argc < 1) | 137 | if (--argc < 1) |
| 137 | goto bad; | 138 | goto bad; |
| 138 | inrand= *(++argv); | 139 | inrand = *(++argv); |
| 139 | } else | 140 | } else |
| 140 | break; | 141 | break; |
| 141 | argv++; | 142 | argv++; |
| 142 | argc--; | 143 | argc--; |
| 143 | } | 144 | } |
| 144 | if ((argc >= 1) && ((sscanf(*argv, "%d",&num) == 0) || (num < 0))) { | 145 | if ((argc >= 1) && ((sscanf(*argv, "%d", &num) == 0) || (num < 0))) { |
| 145 | bad: | 146 | bad: |
| 146 | BIO_printf(bio_err, "usage: gendh [args] [numbits]\n"); | 147 | BIO_printf(bio_err, "usage: gendh [args] [numbits]\n"); |
| 147 | BIO_printf(bio_err, " -out file - output the key to 'file\n"); | 148 | BIO_printf(bio_err, " -out file - output the key to 'file\n"); |
| 148 | BIO_printf(bio_err, " -2 - use 2 as the generator value\n"); | 149 | BIO_printf(bio_err, " -2 - use 2 as the generator value\n"); |
| 149 | /* BIO_printf(bio_err," -3 - use 3 as the generator value\n"); */ | 150 | /* |
| 151 | * BIO_printf(bio_err," -3 - use 3 as the generator | ||
| 152 | * value\n"); | ||
| 153 | */ | ||
| 150 | BIO_printf(bio_err, " -5 - use 5 as the generator value\n"); | 154 | BIO_printf(bio_err, " -5 - use 5 as the generator value\n"); |
| 151 | #ifndef OPENSSL_NO_ENGINE | 155 | #ifndef OPENSSL_NO_ENGINE |
| 152 | BIO_printf(bio_err, " -engine e - use engine e, possibly a hardware device.\n"); | 156 | BIO_printf(bio_err, " -engine e - use engine e, possibly a hardware device.\n"); |
| @@ -156,7 +160,6 @@ bad: | |||
| 156 | BIO_printf(bio_err, " the random number generator\n"); | 160 | BIO_printf(bio_err, " the random number generator\n"); |
| 157 | goto end; | 161 | goto end; |
| 158 | } | 162 | } |
| 159 | |||
| 160 | #ifndef OPENSSL_NO_ENGINE | 163 | #ifndef OPENSSL_NO_ENGINE |
| 161 | setup_engine(bio_err, engine, 0); | 164 | setup_engine(bio_err, engine, 0); |
| 162 | #endif | 165 | #endif |
| @@ -166,7 +169,6 @@ bad: | |||
| 166 | ERR_print_errors(bio_err); | 169 | ERR_print_errors(bio_err); |
| 167 | goto end; | 170 | goto end; |
| 168 | } | 171 | } |
| 169 | |||
| 170 | if (outfile == NULL) { | 172 | if (outfile == NULL) { |
| 171 | BIO_set_fp(out, stdout, BIO_NOCLOSE); | 173 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 172 | } else { | 174 | } else { |
| @@ -183,7 +185,7 @@ bad: | |||
| 183 | BIO_printf(bio_err, "%ld semi-random bytes loaded\n", | 185 | BIO_printf(bio_err, "%ld semi-random bytes loaded\n", |
| 184 | app_RAND_load_files(inrand)); | 186 | app_RAND_load_files(inrand)); |
| 185 | 187 | ||
| 186 | BIO_printf(bio_err, "Generating DH parameters, %d bit long safe prime, generator %d\n",num,g); | 188 | BIO_printf(bio_err, "Generating DH parameters, %d bit long safe prime, generator %d\n", num, g); |
| 187 | BIO_printf(bio_err, "This is going to take a long time\n"); | 189 | BIO_printf(bio_err, "This is going to take a long time\n"); |
| 188 | 190 | ||
| 189 | if (((dh = DH_new()) == NULL) || !DH_generate_parameters_ex(dh, num, g, &cb)) | 191 | if (((dh = DH_new()) == NULL) || !DH_generate_parameters_ex(dh, num, g, &cb)) |
| @@ -202,11 +204,11 @@ end: | |||
| 202 | if (dh != NULL) | 204 | if (dh != NULL) |
| 203 | DH_free(dh); | 205 | DH_free(dh); |
| 204 | apps_shutdown(); | 206 | apps_shutdown(); |
| 205 | return(ret); | 207 | return (ret); |
| 206 | } | 208 | } |
| 207 | 209 | ||
| 208 | static int | 210 | static int |
| 209 | dh_cb(int p, int n, BN_GENCB *cb) | 211 | dh_cb(int p, int n, BN_GENCB * cb) |
| 210 | { | 212 | { |
| 211 | char c = '*'; | 213 | char c = '*'; |
| 212 | 214 | ||
| @@ -219,16 +221,16 @@ dh_cb(int p, int n, BN_GENCB *cb) | |||
| 219 | if (p == 3) | 221 | if (p == 3) |
| 220 | c = '\n'; | 222 | c = '\n'; |
| 221 | BIO_write(cb->arg, &c, 1); | 223 | BIO_write(cb->arg, &c, 1); |
| 222 | (void)BIO_flush(cb->arg); | 224 | (void) BIO_flush(cb->arg); |
| 223 | #ifdef LINT | 225 | #ifdef LINT |
| 224 | p = n; | 226 | p = n; |
| 225 | #endif | 227 | #endif |
| 226 | return 1; | 228 | return 1; |
| 227 | } | 229 | } |
| 228 | #else /* !OPENSSL_NO_DH */ | 230 | #else /* !OPENSSL_NO_DH */ |
| 229 | 231 | ||
| 230 | # if PEDANTIC | 232 | #if PEDANTIC |
| 231 | static void *dummy = &dummy; | 233 | static void *dummy = &dummy; |
| 232 | # endif | 234 | #endif |
| 233 | 235 | ||
| 234 | #endif | 236 | #endif |
diff --git a/src/lib/libssl/src/apps/gendsa.c b/src/lib/libssl/src/apps/gendsa.c index c4e5415cdc..2042f69f68 100644 --- a/src/lib/libssl/src/apps/gendsa.c +++ b/src/lib/libssl/src/apps/gendsa.c | |||
| @@ -56,7 +56,7 @@ | |||
| 56 | * [including the GNU Public Licence.] | 56 | * [including the GNU Public Licence.] |
| 57 | */ | 57 | */ |
| 58 | 58 | ||
| 59 | #include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */ | 59 | #include <openssl/opensslconf.h>/* for OPENSSL_NO_DSA */ |
| 60 | #ifndef OPENSSL_NO_DSA | 60 | #ifndef OPENSSL_NO_DSA |
| 61 | #include <stdio.h> | 61 | #include <stdio.h> |
| 62 | #include <string.h> | 62 | #include <string.h> |
| @@ -94,7 +94,7 @@ MAIN(int argc, char **argv) | |||
| 94 | 94 | ||
| 95 | if (bio_err == NULL) | 95 | if (bio_err == NULL) |
| 96 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 96 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 97 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 97 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 98 | 98 | ||
| 99 | if (!load_config(bio_err, NULL)) | 99 | if (!load_config(bio_err, NULL)) |
| 100 | goto end; | 100 | goto end; |
| @@ -107,23 +107,23 @@ MAIN(int argc, char **argv) | |||
| 107 | if (strcmp(*argv, "-out") == 0) { | 107 | if (strcmp(*argv, "-out") == 0) { |
| 108 | if (--argc < 1) | 108 | if (--argc < 1) |
| 109 | goto bad; | 109 | goto bad; |
| 110 | outfile= *(++argv); | 110 | outfile = *(++argv); |
| 111 | } else if (strcmp(*argv, "-passout") == 0) { | 111 | } else if (strcmp(*argv, "-passout") == 0) { |
| 112 | if (--argc < 1) | 112 | if (--argc < 1) |
| 113 | goto bad; | 113 | goto bad; |
| 114 | passargout= *(++argv); | 114 | passargout = *(++argv); |
| 115 | } | 115 | } |
| 116 | #ifndef OPENSSL_NO_ENGINE | 116 | #ifndef OPENSSL_NO_ENGINE |
| 117 | else if (strcmp(*argv, "-engine") == 0) { | 117 | else if (strcmp(*argv, "-engine") == 0) { |
| 118 | if (--argc < 1) | 118 | if (--argc < 1) |
| 119 | goto bad; | 119 | goto bad; |
| 120 | engine= *(++argv); | 120 | engine = *(++argv); |
| 121 | } | 121 | } |
| 122 | #endif | 122 | #endif |
| 123 | else if (strcmp(*argv, "-rand") == 0) { | 123 | else if (strcmp(*argv, "-rand") == 0) { |
| 124 | if (--argc < 1) | 124 | if (--argc < 1) |
| 125 | goto bad; | 125 | goto bad; |
| 126 | inrand= *(++argv); | 126 | inrand = *(++argv); |
| 127 | } else if (strcmp(*argv, "-") == 0) | 127 | } else if (strcmp(*argv, "-") == 0) |
| 128 | goto bad; | 128 | goto bad; |
| 129 | #ifndef OPENSSL_NO_DES | 129 | #ifndef OPENSSL_NO_DES |
| @@ -197,7 +197,6 @@ bad: | |||
| 197 | BIO_printf(bio_err, " - a DSA parameter file as generated by the dsaparam command\n"); | 197 | BIO_printf(bio_err, " - a DSA parameter file as generated by the dsaparam command\n"); |
| 198 | goto end; | 198 | goto end; |
| 199 | } | 199 | } |
| 200 | |||
| 201 | #ifndef OPENSSL_NO_ENGINE | 200 | #ifndef OPENSSL_NO_ENGINE |
| 202 | setup_engine(bio_err, engine, 0); | 201 | setup_engine(bio_err, engine, 0); |
| 203 | #endif | 202 | #endif |
| @@ -206,14 +205,11 @@ bad: | |||
| 206 | BIO_printf(bio_err, "Error getting password\n"); | 205 | BIO_printf(bio_err, "Error getting password\n"); |
| 207 | goto end; | 206 | goto end; |
| 208 | } | 207 | } |
| 209 | |||
| 210 | |||
| 211 | in = BIO_new(BIO_s_file()); | 208 | in = BIO_new(BIO_s_file()); |
| 212 | if (!(BIO_read_filename(in, dsaparams))) { | 209 | if (!(BIO_read_filename(in, dsaparams))) { |
| 213 | perror(dsaparams); | 210 | perror(dsaparams); |
| 214 | goto end; | 211 | goto end; |
| 215 | } | 212 | } |
| 216 | |||
| 217 | if ((dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL)) == NULL) { | 213 | if ((dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL)) == NULL) { |
| 218 | BIO_printf(bio_err, "unable to load DSA parameter file\n"); | 214 | BIO_printf(bio_err, "unable to load DSA parameter file\n"); |
| 219 | goto end; | 215 | goto end; |
| @@ -263,12 +259,12 @@ end: | |||
| 263 | if (passout) | 259 | if (passout) |
| 264 | free(passout); | 260 | free(passout); |
| 265 | apps_shutdown(); | 261 | apps_shutdown(); |
| 266 | return(ret); | 262 | return (ret); |
| 267 | } | 263 | } |
| 268 | #else /* !OPENSSL_NO_DSA */ | 264 | #else /* !OPENSSL_NO_DSA */ |
| 269 | 265 | ||
| 270 | # if PEDANTIC | 266 | #if PEDANTIC |
| 271 | static void *dummy = &dummy; | 267 | static void *dummy = &dummy; |
| 272 | # endif | 268 | #endif |
| 273 | 269 | ||
| 274 | #endif | 270 | #endif |
diff --git a/src/lib/libssl/src/apps/genpkey.c b/src/lib/libssl/src/apps/genpkey.c index de375a571b..ec7e5b2f25 100644 --- a/src/lib/libssl/src/apps/genpkey.c +++ b/src/lib/libssl/src/apps/genpkey.c | |||
| @@ -65,9 +65,10 @@ | |||
| 65 | #include <openssl/engine.h> | 65 | #include <openssl/engine.h> |
| 66 | #endif | 66 | #endif |
| 67 | 67 | ||
| 68 | static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx, const char *file, | 68 | static int |
| 69 | ENGINE *e); | 69 | init_keygen_file(BIO * err, EVP_PKEY_CTX ** pctx, const char *file, |
| 70 | static int genpkey_cb(EVP_PKEY_CTX *ctx); | 70 | ENGINE * e); |
| 71 | static int genpkey_cb(EVP_PKEY_CTX * ctx); | ||
| 71 | 72 | ||
| 72 | #define PROG genpkey_main | 73 | #define PROG genpkey_main |
| 73 | 74 | ||
| @@ -112,7 +113,7 @@ MAIN(int argc, char **argv) | |||
| 112 | } else if (!strcmp(*args, "-pass")) { | 113 | } else if (!strcmp(*args, "-pass")) { |
| 113 | if (!args[1]) | 114 | if (!args[1]) |
| 114 | goto bad; | 115 | goto bad; |
| 115 | passarg= *(++args); | 116 | passarg = *(++args); |
| 116 | } | 117 | } |
| 117 | #ifndef OPENSSL_NO_ENGINE | 118 | #ifndef OPENSSL_NO_ENGINE |
| 118 | else if (strcmp(*args, "-engine") == 0) { | 119 | else if (strcmp(*args, "-engine") == 0) { |
| @@ -121,7 +122,7 @@ MAIN(int argc, char **argv) | |||
| 121 | e = setup_engine(bio_err, *(++args), 0); | 122 | e = setup_engine(bio_err, *(++args), 0); |
| 122 | } | 123 | } |
| 123 | #endif | 124 | #endif |
| 124 | else if (!strcmp (*args, "-paramfile")) { | 125 | else if (!strcmp(*args, "-paramfile")) { |
| 125 | if (!args[1]) | 126 | if (!args[1]) |
| 126 | goto bad; | 127 | goto bad; |
| 127 | args++; | 128 | args++; |
| @@ -129,7 +130,7 @@ MAIN(int argc, char **argv) | |||
| 129 | goto bad; | 130 | goto bad; |
| 130 | if (!init_keygen_file(bio_err, &ctx, *args, e)) | 131 | if (!init_keygen_file(bio_err, &ctx, *args, e)) |
| 131 | goto end; | 132 | goto end; |
| 132 | } else if (!strcmp (*args, "-out")) { | 133 | } else if (!strcmp(*args, "-out")) { |
| 133 | if (args[1]) { | 134 | if (args[1]) { |
| 134 | args++; | 135 | args++; |
| 135 | outfile = *args; | 136 | outfile = *args; |
| @@ -193,20 +194,18 @@ bad: | |||
| 193 | BIO_printf(bio_err, "NB: options order may be important! See the manual page.\n"); | 194 | BIO_printf(bio_err, "NB: options order may be important! See the manual page.\n"); |
| 194 | goto end; | 195 | goto end; |
| 195 | } | 196 | } |
| 196 | |||
| 197 | if (!app_passwd(bio_err, passarg, NULL, &pass, NULL)) { | 197 | if (!app_passwd(bio_err, passarg, NULL, &pass, NULL)) { |
| 198 | BIO_puts(bio_err, "Error getting password\n"); | 198 | BIO_puts(bio_err, "Error getting password\n"); |
| 199 | goto end; | 199 | goto end; |
| 200 | } | 200 | } |
| 201 | |||
| 202 | if (outfile) { | 201 | if (outfile) { |
| 203 | if (!(out = BIO_new_file (outfile, "wb"))) { | 202 | if (!(out = BIO_new_file(outfile, "wb"))) { |
| 204 | BIO_printf(bio_err, | 203 | BIO_printf(bio_err, |
| 205 | "Can't open output file %s\n", outfile); | 204 | "Can't open output file %s\n", outfile); |
| 206 | goto end; | 205 | goto end; |
| 207 | } | 206 | } |
| 208 | } else { | 207 | } else { |
| 209 | out = BIO_new_fp (stdout, BIO_NOCLOSE); | 208 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 210 | } | 209 | } |
| 211 | 210 | ||
| 212 | EVP_PKEY_CTX_set_cb(ctx, genpkey_cb); | 211 | EVP_PKEY_CTX_set_cb(ctx, genpkey_cb); |
| @@ -242,7 +241,6 @@ bad: | |||
| 242 | BIO_puts(bio_err, "Error writing key\n"); | 241 | BIO_puts(bio_err, "Error writing key\n"); |
| 243 | ERR_print_errors(bio_err); | 242 | ERR_print_errors(bio_err); |
| 244 | } | 243 | } |
| 245 | |||
| 246 | if (text) { | 244 | if (text) { |
| 247 | if (do_param) | 245 | if (do_param) |
| 248 | rv = EVP_PKEY_print_params(out, pkey, 0, NULL); | 246 | rv = EVP_PKEY_print_params(out, pkey, 0, NULL); |
| @@ -254,7 +252,6 @@ bad: | |||
| 254 | ERR_print_errors(bio_err); | 252 | ERR_print_errors(bio_err); |
| 255 | } | 253 | } |
| 256 | } | 254 | } |
| 257 | |||
| 258 | ret = 0; | 255 | ret = 0; |
| 259 | 256 | ||
| 260 | end: | 257 | end: |
| @@ -272,8 +269,8 @@ end: | |||
| 272 | } | 269 | } |
| 273 | 270 | ||
| 274 | static int | 271 | static int |
| 275 | init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx, | 272 | init_keygen_file(BIO * err, EVP_PKEY_CTX ** pctx, |
| 276 | const char *file, ENGINE *e) | 273 | const char *file, ENGINE * e) |
| 277 | { | 274 | { |
| 278 | BIO *pbio; | 275 | BIO *pbio; |
| 279 | EVP_PKEY *pkey = NULL; | 276 | EVP_PKEY *pkey = NULL; |
| @@ -282,13 +279,11 @@ init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx, | |||
| 282 | BIO_puts(err, "Parameters already set!\n"); | 279 | BIO_puts(err, "Parameters already set!\n"); |
| 283 | return 0; | 280 | return 0; |
| 284 | } | 281 | } |
| 285 | |||
| 286 | pbio = BIO_new_file(file, "r"); | 282 | pbio = BIO_new_file(file, "r"); |
| 287 | if (!pbio) { | 283 | if (!pbio) { |
| 288 | BIO_printf(err, "Can't open parameter file %s\n", file); | 284 | BIO_printf(err, "Can't open parameter file %s\n", file); |
| 289 | return 0; | 285 | return 0; |
| 290 | } | 286 | } |
| 291 | |||
| 292 | pkey = PEM_read_bio_Parameters(pbio, NULL); | 287 | pkey = PEM_read_bio_Parameters(pbio, NULL); |
| 293 | BIO_free(pbio); | 288 | BIO_free(pbio); |
| 294 | 289 | ||
| @@ -296,7 +291,6 @@ init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx, | |||
| 296 | BIO_printf(bio_err, "Error reading parameter file %s\n", file); | 291 | BIO_printf(bio_err, "Error reading parameter file %s\n", file); |
| 297 | return 0; | 292 | return 0; |
| 298 | } | 293 | } |
| 299 | |||
| 300 | ctx = EVP_PKEY_CTX_new(pkey, e); | 294 | ctx = EVP_PKEY_CTX_new(pkey, e); |
| 301 | if (!ctx) | 295 | if (!ctx) |
| 302 | goto err; | 296 | goto err; |
| @@ -318,8 +312,8 @@ err: | |||
| 318 | } | 312 | } |
| 319 | 313 | ||
| 320 | int | 314 | int |
| 321 | init_gen_str(BIO *err, EVP_PKEY_CTX **pctx, | 315 | init_gen_str(BIO * err, EVP_PKEY_CTX ** pctx, |
| 322 | const char *algname, ENGINE *e, int do_param) | 316 | const char *algname, ENGINE * e, int do_param) |
| 323 | { | 317 | { |
| 324 | EVP_PKEY_CTX *ctx = NULL; | 318 | EVP_PKEY_CTX *ctx = NULL; |
| 325 | const EVP_PKEY_ASN1_METHOD *ameth; | 319 | const EVP_PKEY_ASN1_METHOD *ameth; |
| @@ -330,7 +324,6 @@ init_gen_str(BIO *err, EVP_PKEY_CTX **pctx, | |||
| 330 | BIO_puts(err, "Algorithm already set!\n"); | 324 | BIO_puts(err, "Algorithm already set!\n"); |
| 331 | return 0; | 325 | return 0; |
| 332 | } | 326 | } |
| 333 | |||
| 334 | ameth = EVP_PKEY_asn1_find_str(&tmpeng, algname, -1); | 327 | ameth = EVP_PKEY_asn1_find_str(&tmpeng, algname, -1); |
| 335 | 328 | ||
| 336 | #ifndef OPENSSL_NO_ENGINE | 329 | #ifndef OPENSSL_NO_ENGINE |
| @@ -342,7 +335,6 @@ init_gen_str(BIO *err, EVP_PKEY_CTX **pctx, | |||
| 342 | BIO_printf(bio_err, "Algorithm %s not found\n", algname); | 335 | BIO_printf(bio_err, "Algorithm %s not found\n", algname); |
| 343 | return 0; | 336 | return 0; |
| 344 | } | 337 | } |
| 345 | |||
| 346 | ERR_clear_error(); | 338 | ERR_clear_error(); |
| 347 | 339 | ||
| 348 | EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); | 340 | EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); |
| @@ -375,7 +367,7 @@ err: | |||
| 375 | } | 367 | } |
| 376 | 368 | ||
| 377 | static int | 369 | static int |
| 378 | genpkey_cb(EVP_PKEY_CTX *ctx) | 370 | genpkey_cb(EVP_PKEY_CTX * ctx) |
| 379 | { | 371 | { |
| 380 | char c = '*'; | 372 | char c = '*'; |
| 381 | BIO *b = EVP_PKEY_CTX_get_app_data(ctx); | 373 | BIO *b = EVP_PKEY_CTX_get_app_data(ctx); |
| @@ -390,7 +382,7 @@ genpkey_cb(EVP_PKEY_CTX *ctx) | |||
| 390 | if (p == 3) | 382 | if (p == 3) |
| 391 | c = '\n'; | 383 | c = '\n'; |
| 392 | BIO_write(b, &c, 1); | 384 | BIO_write(b, &c, 1); |
| 393 | (void)BIO_flush(b); | 385 | (void) BIO_flush(b); |
| 394 | #ifdef LINT | 386 | #ifdef LINT |
| 395 | p = n; | 387 | p = n; |
| 396 | #endif | 388 | #endif |
diff --git a/src/lib/libssl/src/apps/genrsa.c b/src/lib/libssl/src/apps/genrsa.c index e6e9877cb9..67e68fc20a 100644 --- a/src/lib/libssl/src/apps/genrsa.c +++ b/src/lib/libssl/src/apps/genrsa.c | |||
| @@ -82,7 +82,7 @@ | |||
| 82 | #undef PROG | 82 | #undef PROG |
| 83 | #define PROG genrsa_main | 83 | #define PROG genrsa_main |
| 84 | 84 | ||
| 85 | static int genrsa_cb(int p, int n, BN_GENCB *cb); | 85 | static int genrsa_cb(int p, int n, BN_GENCB * cb); |
| 86 | 86 | ||
| 87 | int MAIN(int, char **); | 87 | int MAIN(int, char **); |
| 88 | 88 | ||
| @@ -108,14 +108,15 @@ MAIN(int argc, char **argv) | |||
| 108 | BIGNUM *bn = BN_new(); | 108 | BIGNUM *bn = BN_new(); |
| 109 | RSA *rsa = NULL; | 109 | RSA *rsa = NULL; |
| 110 | 110 | ||
| 111 | if (!bn) goto err; | 111 | if (!bn) |
| 112 | goto err; | ||
| 112 | 113 | ||
| 113 | apps_startup(); | 114 | apps_startup(); |
| 114 | BN_GENCB_set(&cb, genrsa_cb, bio_err); | 115 | BN_GENCB_set(&cb, genrsa_cb, bio_err); |
| 115 | 116 | ||
| 116 | if (bio_err == NULL) | 117 | if (bio_err == NULL) |
| 117 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 118 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 118 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 119 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 119 | 120 | ||
| 120 | if (!load_config(bio_err, NULL)) | 121 | if (!load_config(bio_err, NULL)) |
| 121 | goto err; | 122 | goto err; |
| @@ -123,7 +124,6 @@ MAIN(int argc, char **argv) | |||
| 123 | BIO_printf(bio_err, "unable to create BIO for output\n"); | 124 | BIO_printf(bio_err, "unable to create BIO for output\n"); |
| 124 | goto err; | 125 | goto err; |
| 125 | } | 126 | } |
| 126 | |||
| 127 | argv++; | 127 | argv++; |
| 128 | argc--; | 128 | argc--; |
| 129 | for (;;) { | 129 | for (;;) { |
| @@ -132,22 +132,22 @@ MAIN(int argc, char **argv) | |||
| 132 | if (strcmp(*argv, "-out") == 0) { | 132 | if (strcmp(*argv, "-out") == 0) { |
| 133 | if (--argc < 1) | 133 | if (--argc < 1) |
| 134 | goto bad; | 134 | goto bad; |
| 135 | outfile= *(++argv); | 135 | outfile = *(++argv); |
| 136 | } else if (strcmp(*argv, "-3") == 0) | 136 | } else if (strcmp(*argv, "-3") == 0) |
| 137 | f4 = 3; | 137 | f4 = 3; |
| 138 | else if (strcmp(*argv, "-F4") == 0 || strcmp(*argv,"-f4") == 0) | 138 | else if (strcmp(*argv, "-F4") == 0 || strcmp(*argv, "-f4") == 0) |
| 139 | f4 = RSA_F4; | 139 | f4 = RSA_F4; |
| 140 | #ifndef OPENSSL_NO_ENGINE | 140 | #ifndef OPENSSL_NO_ENGINE |
| 141 | else if (strcmp(*argv, "-engine") == 0) { | 141 | else if (strcmp(*argv, "-engine") == 0) { |
| 142 | if (--argc < 1) | 142 | if (--argc < 1) |
| 143 | goto bad; | 143 | goto bad; |
| 144 | engine= *(++argv); | 144 | engine = *(++argv); |
| 145 | } | 145 | } |
| 146 | #endif | 146 | #endif |
| 147 | else if (strcmp(*argv, "-rand") == 0) { | 147 | else if (strcmp(*argv, "-rand") == 0) { |
| 148 | if (--argc < 1) | 148 | if (--argc < 1) |
| 149 | goto bad; | 149 | goto bad; |
| 150 | inrand= *(++argv); | 150 | inrand = *(++argv); |
| 151 | } | 151 | } |
| 152 | #ifndef OPENSSL_NO_DES | 152 | #ifndef OPENSSL_NO_DES |
| 153 | else if (strcmp(*argv, "-des") == 0) | 153 | else if (strcmp(*argv, "-des") == 0) |
| @@ -182,13 +182,13 @@ MAIN(int argc, char **argv) | |||
| 182 | else if (strcmp(*argv, "-passout") == 0) { | 182 | else if (strcmp(*argv, "-passout") == 0) { |
| 183 | if (--argc < 1) | 183 | if (--argc < 1) |
| 184 | goto bad; | 184 | goto bad; |
| 185 | passargout= *(++argv); | 185 | passargout = *(++argv); |
| 186 | } else | 186 | } else |
| 187 | break; | 187 | break; |
| 188 | argv++; | 188 | argv++; |
| 189 | argc--; | 189 | argc--; |
| 190 | } | 190 | } |
| 191 | if ((argc >= 1) && ((sscanf(*argv, "%d",&num) == 0) || (num < 0))) { | 191 | if ((argc >= 1) && ((sscanf(*argv, "%d", &num) == 0) || (num < 0))) { |
| 192 | bad: | 192 | bad: |
| 193 | BIO_printf(bio_err, "usage: genrsa [args] [numbits]\n"); | 193 | BIO_printf(bio_err, "usage: genrsa [args] [numbits]\n"); |
| 194 | BIO_printf(bio_err, " -des encrypt the generated key with DES in cbc mode\n"); | 194 | BIO_printf(bio_err, " -des encrypt the generated key with DES in cbc mode\n"); |
| @@ -220,14 +220,12 @@ bad: | |||
| 220 | BIO_printf(bio_err, " the random number generator\n"); | 220 | BIO_printf(bio_err, " the random number generator\n"); |
| 221 | goto err; | 221 | goto err; |
| 222 | } | 222 | } |
| 223 | |||
| 224 | ERR_load_crypto_strings(); | 223 | ERR_load_crypto_strings(); |
| 225 | 224 | ||
| 226 | if (!app_passwd(bio_err, NULL, passargout, NULL, &passout)) { | 225 | if (!app_passwd(bio_err, NULL, passargout, NULL, &passout)) { |
| 227 | BIO_printf(bio_err, "Error getting password\n"); | 226 | BIO_printf(bio_err, "Error getting password\n"); |
| 228 | goto err; | 227 | goto err; |
| 229 | } | 228 | } |
| 230 | |||
| 231 | #ifndef OPENSSL_NO_ENGINE | 229 | #ifndef OPENSSL_NO_ENGINE |
| 232 | e = setup_engine(bio_err, engine, 0); | 230 | e = setup_engine(bio_err, engine, 0); |
| 233 | #endif | 231 | #endif |
| @@ -264,23 +262,25 @@ bad: | |||
| 264 | 262 | ||
| 265 | app_RAND_write_file(NULL, bio_err); | 263 | app_RAND_write_file(NULL, bio_err); |
| 266 | 264 | ||
| 267 | /* We need to do the following for when the base number size is < | 265 | /* |
| 268 | * long, esp windows 3.1 :-(. */ | 266 | * We need to do the following for when the base number size is < |
| 267 | * long, esp windows 3.1 :-(. | ||
| 268 | */ | ||
| 269 | l = 0L; | 269 | l = 0L; |
| 270 | for (i = 0; i < rsa->e->top; i++) { | 270 | for (i = 0; i < rsa->e->top; i++) { |
| 271 | #ifndef SIXTY_FOUR_BIT | 271 | #ifndef SIXTY_FOUR_BIT |
| 272 | l<<=BN_BITS4; | 272 | l <<= BN_BITS4; |
| 273 | l<<=BN_BITS4; | 273 | l <<= BN_BITS4; |
| 274 | #endif | 274 | #endif |
| 275 | l += rsa->e->d[i]; | 275 | l += rsa->e->d[i]; |
| 276 | } | 276 | } |
| 277 | BIO_printf(bio_err, "e is %ld (0x%lX)\n",l,l); | 277 | BIO_printf(bio_err, "e is %ld (0x%lX)\n", l, l); |
| 278 | { | 278 | { |
| 279 | PW_CB_DATA cb_data; | 279 | PW_CB_DATA cb_data; |
| 280 | cb_data.password = passout; | 280 | cb_data.password = passout; |
| 281 | cb_data.prompt_info = outfile; | 281 | cb_data.prompt_info = outfile; |
| 282 | if (!PEM_write_bio_RSAPrivateKey(out, rsa, enc, NULL, 0, | 282 | if (!PEM_write_bio_RSAPrivateKey(out, rsa, enc, NULL, 0, |
| 283 | (pem_password_cb *)password_callback, &cb_data)) | 283 | (pem_password_cb *) password_callback, &cb_data)) |
| 284 | goto err; | 284 | goto err; |
| 285 | } | 285 | } |
| 286 | 286 | ||
| @@ -292,15 +292,16 @@ err: | |||
| 292 | RSA_free(rsa); | 292 | RSA_free(rsa); |
| 293 | if (out) | 293 | if (out) |
| 294 | BIO_free_all(out); | 294 | BIO_free_all(out); |
| 295 | if (passout) free(passout); | 295 | if (passout) |
| 296 | if (ret != 0) | 296 | free(passout); |
| 297 | ERR_print_errors(bio_err); | 297 | if (ret != 0) |
| 298 | ERR_print_errors(bio_err); | ||
| 298 | apps_shutdown(); | 299 | apps_shutdown(); |
| 299 | return(ret); | 300 | return (ret); |
| 300 | } | 301 | } |
| 301 | 302 | ||
| 302 | static int | 303 | static int |
| 303 | genrsa_cb(int p, int n, BN_GENCB *cb) | 304 | genrsa_cb(int p, int n, BN_GENCB * cb) |
| 304 | { | 305 | { |
| 305 | char c = '*'; | 306 | char c = '*'; |
| 306 | 307 | ||
| @@ -313,16 +314,16 @@ genrsa_cb(int p, int n, BN_GENCB *cb) | |||
| 313 | if (p == 3) | 314 | if (p == 3) |
| 314 | c = '\n'; | 315 | c = '\n'; |
| 315 | BIO_write(cb->arg, &c, 1); | 316 | BIO_write(cb->arg, &c, 1); |
| 316 | (void)BIO_flush(cb->arg); | 317 | (void) BIO_flush(cb->arg); |
| 317 | #ifdef LINT | 318 | #ifdef LINT |
| 318 | p = n; | 319 | p = n; |
| 319 | #endif | 320 | #endif |
| 320 | return 1; | 321 | return 1; |
| 321 | } | 322 | } |
| 322 | #else /* !OPENSSL_NO_RSA */ | 323 | #else /* !OPENSSL_NO_RSA */ |
| 323 | 324 | ||
| 324 | # if PEDANTIC | 325 | #if PEDANTIC |
| 325 | static void *dummy = &dummy; | 326 | static void *dummy = &dummy; |
| 326 | # endif | 327 | #endif |
| 327 | 328 | ||
| 328 | #endif | 329 | #endif |
diff --git a/src/lib/libssl/src/apps/nseq.c b/src/lib/libssl/src/apps/nseq.c index cb83570562..43f3073635 100644 --- a/src/lib/libssl/src/apps/nseq.c +++ b/src/lib/libssl/src/apps/nseq.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -67,7 +67,8 @@ | |||
| 67 | 67 | ||
| 68 | int MAIN(int, char **); | 68 | int MAIN(int, char **); |
| 69 | 69 | ||
| 70 | int MAIN(int argc, char **argv) | 70 | int |
| 71 | MAIN(int argc, char **argv) | ||
| 71 | { | 72 | { |
| 72 | char **args, *infile = NULL, *outfile = NULL; | 73 | char **args, *infile = NULL, *outfile = NULL; |
| 73 | BIO *in = NULL, *out = NULL; | 74 | BIO *in = NULL, *out = NULL; |
| @@ -76,47 +77,52 @@ int MAIN(int argc, char **argv) | |||
| 76 | NETSCAPE_CERT_SEQUENCE *seq = NULL; | 77 | NETSCAPE_CERT_SEQUENCE *seq = NULL; |
| 77 | int i, ret = 1; | 78 | int i, ret = 1; |
| 78 | int badarg = 0; | 79 | int badarg = 0; |
| 79 | if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE); | 80 | if (bio_err == NULL) |
| 81 | bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); | ||
| 80 | ERR_load_crypto_strings(); | 82 | ERR_load_crypto_strings(); |
| 81 | args = argv + 1; | 83 | args = argv + 1; |
| 82 | while (!badarg && *args && *args[0] == '-') { | 84 | while (!badarg && *args && *args[0] == '-') { |
| 83 | if (!strcmp (*args, "-toseq")) toseq = 1; | 85 | if (!strcmp(*args, "-toseq")) |
| 84 | else if (!strcmp (*args, "-in")) { | 86 | toseq = 1; |
| 87 | else if (!strcmp(*args, "-in")) { | ||
| 85 | if (args[1]) { | 88 | if (args[1]) { |
| 86 | args++; | 89 | args++; |
| 87 | infile = *args; | 90 | infile = *args; |
| 88 | } else badarg = 1; | 91 | } else |
| 89 | } else if (!strcmp (*args, "-out")) { | 92 | badarg = 1; |
| 93 | } else if (!strcmp(*args, "-out")) { | ||
| 90 | if (args[1]) { | 94 | if (args[1]) { |
| 91 | args++; | 95 | args++; |
| 92 | outfile = *args; | 96 | outfile = *args; |
| 93 | } else badarg = 1; | 97 | } else |
| 94 | } else badarg = 1; | 98 | badarg = 1; |
| 99 | } else | ||
| 100 | badarg = 1; | ||
| 95 | args++; | 101 | args++; |
| 96 | } | 102 | } |
| 97 | 103 | ||
| 98 | if (badarg) { | 104 | if (badarg) { |
| 99 | BIO_printf (bio_err, "Netscape certificate sequence utility\n"); | 105 | BIO_printf(bio_err, "Netscape certificate sequence utility\n"); |
| 100 | BIO_printf (bio_err, "Usage nseq [options]\n"); | 106 | BIO_printf(bio_err, "Usage nseq [options]\n"); |
| 101 | BIO_printf (bio_err, "where options are\n"); | 107 | BIO_printf(bio_err, "where options are\n"); |
| 102 | BIO_printf (bio_err, "-in file input file\n"); | 108 | BIO_printf(bio_err, "-in file input file\n"); |
| 103 | BIO_printf (bio_err, "-out file output file\n"); | 109 | BIO_printf(bio_err, "-out file output file\n"); |
| 104 | BIO_printf (bio_err, "-toseq output NS Sequence file\n"); | 110 | BIO_printf(bio_err, "-toseq output NS Sequence file\n"); |
| 105 | return(1); | 111 | return (1); |
| 106 | } | 112 | } |
| 107 | |||
| 108 | if (infile) { | 113 | if (infile) { |
| 109 | if (!(in = BIO_new_file (infile, "r"))) { | 114 | if (!(in = BIO_new_file(infile, "r"))) { |
| 110 | BIO_printf (bio_err, | 115 | BIO_printf(bio_err, |
| 111 | "Can't open input file %s\n", infile); | 116 | "Can't open input file %s\n", infile); |
| 112 | goto end; | 117 | goto end; |
| 113 | } | 118 | } |
| 114 | } else in = BIO_new_fp(stdin, BIO_NOCLOSE); | 119 | } else |
| 120 | in = BIO_new_fp(stdin, BIO_NOCLOSE); | ||
| 115 | 121 | ||
| 116 | if (outfile) { | 122 | if (outfile) { |
| 117 | if (!(out = BIO_new_file (outfile, "w"))) { | 123 | if (!(out = BIO_new_file(outfile, "w"))) { |
| 118 | BIO_printf (bio_err, | 124 | BIO_printf(bio_err, |
| 119 | "Can't open output file %s\n", outfile); | 125 | "Can't open output file %s\n", outfile); |
| 120 | goto end; | 126 | goto end; |
| 121 | } | 127 | } |
| 122 | } else { | 128 | } else { |
| @@ -125,12 +131,11 @@ int MAIN(int argc, char **argv) | |||
| 125 | if (toseq) { | 131 | if (toseq) { |
| 126 | seq = NETSCAPE_CERT_SEQUENCE_new(); | 132 | seq = NETSCAPE_CERT_SEQUENCE_new(); |
| 127 | seq->certs = sk_X509_new_null(); | 133 | seq->certs = sk_X509_new_null(); |
| 128 | while((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL))) | 134 | while ((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL))) |
| 129 | sk_X509_push(seq->certs,x509); | 135 | sk_X509_push(seq->certs, x509); |
| 130 | 136 | ||
| 131 | if(!sk_X509_num(seq->certs)) | 137 | if (!sk_X509_num(seq->certs)) { |
| 132 | { | 138 | BIO_printf(bio_err, "Error reading certs file %s\n", infile); |
| 133 | BIO_printf (bio_err, "Error reading certs file %s\n", infile); | ||
| 134 | ERR_print_errors(bio_err); | 139 | ERR_print_errors(bio_err); |
| 135 | goto end; | 140 | goto end; |
| 136 | } | 141 | } |
| @@ -138,14 +143,12 @@ int MAIN(int argc, char **argv) | |||
| 138 | ret = 0; | 143 | ret = 0; |
| 139 | goto end; | 144 | goto end; |
| 140 | } | 145 | } |
| 141 | |||
| 142 | if (!(seq = PEM_read_bio_NETSCAPE_CERT_SEQUENCE(in, NULL, NULL, NULL))) { | 146 | if (!(seq = PEM_read_bio_NETSCAPE_CERT_SEQUENCE(in, NULL, NULL, NULL))) { |
| 143 | BIO_printf (bio_err, "Error reading sequence file %s\n", infile); | 147 | BIO_printf(bio_err, "Error reading sequence file %s\n", infile); |
| 144 | ERR_print_errors(bio_err); | 148 | ERR_print_errors(bio_err); |
| 145 | goto end; | 149 | goto end; |
| 146 | } | 150 | } |
| 147 | 151 | for (i = 0; i < sk_X509_num(seq->certs); i++) { | |
| 148 | for(i = 0; i < sk_X509_num(seq->certs); i++) { | ||
| 149 | x509 = sk_X509_value(seq->certs, i); | 152 | x509 = sk_X509_value(seq->certs, i); |
| 150 | dump_cert_text(out, x509); | 153 | dump_cert_text(out, x509); |
| 151 | PEM_write_bio_X509(out, x509); | 154 | PEM_write_bio_X509(out, x509); |
| @@ -156,6 +159,5 @@ end: | |||
| 156 | BIO_free_all(out); | 159 | BIO_free_all(out); |
| 157 | NETSCAPE_CERT_SEQUENCE_free(seq); | 160 | NETSCAPE_CERT_SEQUENCE_free(seq); |
| 158 | 161 | ||
| 159 | return(ret); | 162 | return (ret); |
| 160 | } | 163 | } |
| 161 | |||
diff --git a/src/lib/libssl/src/apps/ocsp.c b/src/lib/libssl/src/apps/ocsp.c index e68589f4a8..330d850890 100644 --- a/src/lib/libssl/src/apps/ocsp.c +++ b/src/lib/libssl/src/apps/ocsp.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -61,7 +61,8 @@ | |||
| 61 | #include <stdlib.h> | 61 | #include <stdlib.h> |
| 62 | #include <string.h> | 62 | #include <string.h> |
| 63 | #include <time.h> | 63 | #include <time.h> |
| 64 | #include "apps.h" /* needs to be included before the openssl headers! */ | 64 | #include "apps.h" /* needs to be included before the openssl |
| 65 | * headers! */ | ||
| 65 | #include <openssl/e_os2.h> | 66 | #include <openssl/e_os2.h> |
| 66 | #include <openssl/crypto.h> | 67 | #include <openssl/crypto.h> |
| 67 | #include <openssl/err.h> | 68 | #include <openssl/err.h> |
| @@ -71,52 +72,53 @@ | |||
| 71 | #include <openssl/x509v3.h> | 72 | #include <openssl/x509v3.h> |
| 72 | 73 | ||
| 73 | #if defined(NETWARE_CLIB) | 74 | #if defined(NETWARE_CLIB) |
| 74 | # ifdef NETWARE_BSDSOCK | 75 | #ifdef NETWARE_BSDSOCK |
| 75 | # include <sys/socket.h> | 76 | #include <sys/socket.h> |
| 76 | # include <sys/bsdskt.h> | 77 | #include <sys/bsdskt.h> |
| 77 | # else | 78 | #else |
| 78 | # include <novsock2.h> | 79 | #include <novsock2.h> |
| 79 | # endif | 80 | #endif |
| 80 | #elif defined(NETWARE_LIBC) | 81 | #elif defined(NETWARE_LIBC) |
| 81 | # ifdef NETWARE_BSDSOCK | 82 | #ifdef NETWARE_BSDSOCK |
| 82 | # include <sys/select.h> | 83 | #include <sys/select.h> |
| 83 | # else | 84 | #else |
| 84 | # include <novsock2.h> | 85 | #include <novsock2.h> |
| 85 | # endif | ||
| 86 | #endif | 86 | #endif |
| 87 | 87 | #endif | |
| 88 | |||
| 88 | /* Maximum leeway in validity period: default 5 minutes */ | 89 | /* Maximum leeway in validity period: default 5 minutes */ |
| 89 | #define MAX_VALIDITY_PERIOD (5 * 60) | 90 | #define MAX_VALIDITY_PERIOD (5 * 60) |
| 90 | 91 | ||
| 91 | static int add_ocsp_cert(OCSP_REQUEST **req, X509 *cert, const EVP_MD *cert_id_md, X509 *issuer, | 92 | static int |
| 92 | STACK_OF(OCSP_CERTID) *ids); | 93 | add_ocsp_cert(OCSP_REQUEST ** req, X509 * cert, const EVP_MD * cert_id_md, X509 * issuer, |
| 93 | static int add_ocsp_serial(OCSP_REQUEST **req, char *serial, const EVP_MD * cert_id_md, X509 *issuer, | 94 | STACK_OF(OCSP_CERTID) * ids); |
| 94 | STACK_OF(OCSP_CERTID) *ids); | 95 | static int add_ocsp_serial(OCSP_REQUEST ** req, char *serial, const EVP_MD * cert_id_md, X509 * issuer, |
| 95 | static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req, | 96 | STACK_OF(OCSP_CERTID) * ids); |
| 96 | STACK_OF(OPENSSL_STRING) *names, | 97 | static int print_ocsp_summary(BIO * out, OCSP_BASICRESP * bs, OCSP_REQUEST * req, |
| 97 | STACK_OF(OCSP_CERTID) *ids, long nsec, | 98 | STACK_OF(OPENSSL_STRING) * names, |
| 98 | long maxage); | 99 | STACK_OF(OCSP_CERTID) * ids, long nsec, |
| 99 | 100 | long maxage); | |
| 100 | static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, CA_DB *db, | 101 | |
| 101 | X509 *ca, X509 *rcert, EVP_PKEY *rkey, | 102 | static int make_ocsp_response(OCSP_RESPONSE ** resp, OCSP_REQUEST * req, CA_DB * db, |
| 102 | STACK_OF(X509) *rother, unsigned long flags, | 103 | X509 * ca, X509 * rcert, EVP_PKEY * rkey, |
| 103 | int nmin, int ndays); | 104 | STACK_OF(X509) * rother, unsigned long flags, |
| 104 | 105 | int nmin, int ndays); | |
| 105 | static char **lookup_serial(CA_DB *db, ASN1_INTEGER *ser); | 106 | |
| 106 | static BIO *init_responder(char *port); | 107 | static char **lookup_serial(CA_DB * db, ASN1_INTEGER * ser); |
| 107 | static int do_responder(OCSP_REQUEST **preq, BIO **pcbio, BIO *acbio, char *port); | 108 | static BIO *init_responder(char *port); |
| 108 | static int send_ocsp_response(BIO *cbio, OCSP_RESPONSE *resp); | 109 | static int do_responder(OCSP_REQUEST ** preq, BIO ** pcbio, BIO * acbio, char *port); |
| 109 | static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path, | 110 | static int send_ocsp_response(BIO * cbio, OCSP_RESPONSE * resp); |
| 110 | STACK_OF(CONF_VALUE) *headers, | 111 | static OCSP_RESPONSE *query_responder(BIO * err, BIO * cbio, char *path, |
| 111 | OCSP_REQUEST *req, int req_timeout); | 112 | STACK_OF(CONF_VALUE) * headers, |
| 113 | OCSP_REQUEST * req, int req_timeout); | ||
| 112 | 114 | ||
| 113 | #undef PROG | 115 | #undef PROG |
| 114 | #define PROG ocsp_main | 116 | #define PROG ocsp_main |
| 115 | 117 | ||
| 116 | int MAIN(int, char **); | 118 | int MAIN(int, char **); |
| 117 | 119 | ||
| 118 | int MAIN(int argc, char **argv) | 120 | int MAIN(int argc, char **argv) |
| 119 | { | 121 | { |
| 120 | ENGINE *e = NULL; | 122 | ENGINE *e = NULL; |
| 121 | char **args; | 123 | char **args; |
| 122 | char *host = NULL, *port = NULL, *path = "/"; | 124 | char *host = NULL, *port = NULL, *path = "/"; |
| @@ -126,7 +128,7 @@ int MAIN(int argc, char **argv) | |||
| 126 | char *rsignfile = NULL, *rkeyfile = NULL; | 128 | char *rsignfile = NULL, *rkeyfile = NULL; |
| 127 | char *outfile = NULL; | 129 | char *outfile = NULL; |
| 128 | int add_nonce = 1, noverify = 0, use_ssl = -1; | 130 | int add_nonce = 1, noverify = 0, use_ssl = -1; |
| 129 | STACK_OF(CONF_VALUE) *headers = NULL; | 131 | STACK_OF(CONF_VALUE) * headers = NULL; |
| 130 | OCSP_REQUEST *req = NULL; | 132 | OCSP_REQUEST *req = NULL; |
| 131 | OCSP_RESPONSE *resp = NULL; | 133 | OCSP_RESPONSE *resp = NULL; |
| 132 | OCSP_BASICRESP *bs = NULL; | 134 | OCSP_BASICRESP *bs = NULL; |
| @@ -141,7 +143,7 @@ int MAIN(int argc, char **argv) | |||
| 141 | long nsec = MAX_VALIDITY_PERIOD, maxage = -1; | 143 | long nsec = MAX_VALIDITY_PERIOD, maxage = -1; |
| 142 | char *CAfile = NULL, *CApath = NULL; | 144 | char *CAfile = NULL, *CApath = NULL; |
| 143 | X509_STORE *store = NULL; | 145 | X509_STORE *store = NULL; |
| 144 | STACK_OF(X509) *sign_other = NULL, *verify_other = NULL, *rother = NULL; | 146 | STACK_OF(X509) * sign_other = NULL, *verify_other = NULL, *rother = NULL; |
| 145 | char *sign_certfile = NULL, *verify_certfile = NULL, *rcertfile = NULL; | 147 | char *sign_certfile = NULL, *verify_certfile = NULL, *rcertfile = NULL; |
| 146 | unsigned long sign_flags = 0, verify_flags = 0, rflags = 0; | 148 | unsigned long sign_flags = 0, verify_flags = 0, rflags = 0; |
| 147 | int ret = 1; | 149 | int ret = 1; |
| @@ -149,8 +151,8 @@ int MAIN(int argc, char **argv) | |||
| 149 | int badarg = 0; | 151 | int badarg = 0; |
| 150 | int i; | 152 | int i; |
| 151 | int ignore_err = 0; | 153 | int ignore_err = 0; |
| 152 | STACK_OF(OPENSSL_STRING) *reqnames = NULL; | 154 | STACK_OF(OPENSSL_STRING) * reqnames = NULL; |
| 153 | STACK_OF(OCSP_CERTID) *ids = NULL; | 155 | STACK_OF(OCSP_CERTID) * ids = NULL; |
| 154 | 156 | ||
| 155 | X509 *rca_cert = NULL; | 157 | X509 *rca_cert = NULL; |
| 156 | char *ridx_filename = NULL; | 158 | char *ridx_filename = NULL; |
| @@ -159,7 +161,8 @@ int MAIN(int argc, char **argv) | |||
| 159 | int nmin = 0, ndays = -1; | 161 | int nmin = 0, ndays = -1; |
| 160 | const EVP_MD *cert_id_md = NULL; | 162 | const EVP_MD *cert_id_md = NULL; |
| 161 | 163 | ||
| 162 | if (bio_err == NULL) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); | 164 | if (bio_err == NULL) |
| 165 | bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); | ||
| 163 | 166 | ||
| 164 | if (!load_config(bio_err, NULL)) | 167 | if (!load_config(bio_err, NULL)) |
| 165 | goto end; | 168 | goto end; |
| @@ -168,75 +171,54 @@ int MAIN(int argc, char **argv) | |||
| 168 | args = argv + 1; | 171 | args = argv + 1; |
| 169 | reqnames = sk_OPENSSL_STRING_new_null(); | 172 | reqnames = sk_OPENSSL_STRING_new_null(); |
| 170 | ids = sk_OCSP_CERTID_new_null(); | 173 | ids = sk_OCSP_CERTID_new_null(); |
| 171 | while (!badarg && *args && *args[0] == '-') | 174 | while (!badarg && *args && *args[0] == '-') { |
| 172 | { | 175 | if (!strcmp(*args, "-out")) { |
| 173 | if (!strcmp(*args, "-out")) | 176 | if (args[1]) { |
| 174 | { | ||
| 175 | if (args[1]) | ||
| 176 | { | ||
| 177 | args++; | 177 | args++; |
| 178 | outfile = *args; | 178 | outfile = *args; |
| 179 | } | 179 | } else |
| 180 | else badarg = 1; | 180 | badarg = 1; |
| 181 | } | 181 | } else if (!strcmp(*args, "-timeout")) { |
| 182 | else if (!strcmp(*args, "-timeout")) | 182 | if (args[1]) { |
| 183 | { | ||
| 184 | if (args[1]) | ||
| 185 | { | ||
| 186 | args++; | 183 | args++; |
| 187 | req_timeout = atol(*args); | 184 | req_timeout = atol(*args); |
| 188 | if (req_timeout < 0) | 185 | if (req_timeout < 0) { |
| 189 | { | ||
| 190 | BIO_printf(bio_err, | 186 | BIO_printf(bio_err, |
| 191 | "Illegal timeout value %s\n", | 187 | "Illegal timeout value %s\n", |
| 192 | *args); | 188 | *args); |
| 193 | badarg = 1; | 189 | badarg = 1; |
| 194 | } | ||
| 195 | } | 190 | } |
| 196 | else badarg = 1; | 191 | } else |
| 197 | } | 192 | badarg = 1; |
| 198 | else if (!strcmp(*args, "-url")) | 193 | } else if (!strcmp(*args, "-url")) { |
| 199 | { | 194 | if (args[1]) { |
| 200 | if (args[1]) | ||
| 201 | { | ||
| 202 | args++; | 195 | args++; |
| 203 | if (!OCSP_parse_url(*args, &host, &port, &path, &use_ssl)) | 196 | if (!OCSP_parse_url(*args, &host, &port, &path, &use_ssl)) { |
| 204 | { | ||
| 205 | BIO_printf(bio_err, "Error parsing URL\n"); | 197 | BIO_printf(bio_err, "Error parsing URL\n"); |
| 206 | badarg = 1; | 198 | badarg = 1; |
| 207 | } | ||
| 208 | } | 199 | } |
| 209 | else badarg = 1; | 200 | } else |
| 210 | } | 201 | badarg = 1; |
| 211 | else if (!strcmp(*args, "-host")) | 202 | } else if (!strcmp(*args, "-host")) { |
| 212 | { | 203 | if (args[1]) { |
| 213 | if (args[1]) | ||
| 214 | { | ||
| 215 | args++; | 204 | args++; |
| 216 | host = *args; | 205 | host = *args; |
| 217 | } | 206 | } else |
| 218 | else badarg = 1; | 207 | badarg = 1; |
| 219 | } | 208 | } else if (!strcmp(*args, "-port")) { |
| 220 | else if (!strcmp(*args, "-port")) | 209 | if (args[1]) { |
| 221 | { | ||
| 222 | if (args[1]) | ||
| 223 | { | ||
| 224 | args++; | 210 | args++; |
| 225 | port = *args; | 211 | port = *args; |
| 226 | } | 212 | } else |
| 227 | else badarg = 1; | 213 | badarg = 1; |
| 228 | } | 214 | } else if (!strcmp(*args, "-header")) { |
| 229 | else if (!strcmp(*args, "-header")) | 215 | if (args[1] && args[2]) { |
| 230 | { | ||
| 231 | if (args[1] && args[2]) | ||
| 232 | { | ||
| 233 | if (!X509V3_add_value(args[1], args[2], &headers)) | 216 | if (!X509V3_add_value(args[1], args[2], &headers)) |
| 234 | goto end; | 217 | goto end; |
| 235 | args += 2; | 218 | args += 2; |
| 236 | } | 219 | } else |
| 237 | else badarg = 1; | 220 | badarg = 1; |
| 238 | } | 221 | } else if (!strcmp(*args, "-ignore_err")) |
| 239 | else if (!strcmp(*args, "-ignore_err")) | ||
| 240 | ignore_err = 1; | 222 | ignore_err = 1; |
| 241 | else if (!strcmp(*args, "-noverify")) | 223 | else if (!strcmp(*args, "-noverify")) |
| 242 | noverify = 1; | 224 | noverify = 1; |
| @@ -264,571 +246,459 @@ int MAIN(int argc, char **argv) | |||
| 264 | verify_flags |= OCSP_TRUSTOTHER; | 246 | verify_flags |= OCSP_TRUSTOTHER; |
| 265 | else if (!strcmp(*args, "-no_intern")) | 247 | else if (!strcmp(*args, "-no_intern")) |
| 266 | verify_flags |= OCSP_NOINTERN; | 248 | verify_flags |= OCSP_NOINTERN; |
| 267 | else if (!strcmp(*args, "-text")) | 249 | else if (!strcmp(*args, "-text")) { |
| 268 | { | ||
| 269 | req_text = 1; | 250 | req_text = 1; |
| 270 | resp_text = 1; | 251 | resp_text = 1; |
| 271 | } | 252 | } else if (!strcmp(*args, "-req_text")) |
| 272 | else if (!strcmp(*args, "-req_text")) | ||
| 273 | req_text = 1; | 253 | req_text = 1; |
| 274 | else if (!strcmp(*args, "-resp_text")) | 254 | else if (!strcmp(*args, "-resp_text")) |
| 275 | resp_text = 1; | 255 | resp_text = 1; |
| 276 | else if (!strcmp(*args, "-reqin")) | 256 | else if (!strcmp(*args, "-reqin")) { |
| 277 | { | 257 | if (args[1]) { |
| 278 | if (args[1]) | ||
| 279 | { | ||
| 280 | args++; | 258 | args++; |
| 281 | reqin = *args; | 259 | reqin = *args; |
| 282 | } | 260 | } else |
| 283 | else badarg = 1; | 261 | badarg = 1; |
| 284 | } | 262 | } else if (!strcmp(*args, "-respin")) { |
| 285 | else if (!strcmp(*args, "-respin")) | 263 | if (args[1]) { |
| 286 | { | ||
| 287 | if (args[1]) | ||
| 288 | { | ||
| 289 | args++; | 264 | args++; |
| 290 | respin = *args; | 265 | respin = *args; |
| 291 | } | 266 | } else |
| 292 | else badarg = 1; | 267 | badarg = 1; |
| 293 | } | 268 | } else if (!strcmp(*args, "-signer")) { |
| 294 | else if (!strcmp(*args, "-signer")) | 269 | if (args[1]) { |
| 295 | { | ||
| 296 | if (args[1]) | ||
| 297 | { | ||
| 298 | args++; | 270 | args++; |
| 299 | signfile = *args; | 271 | signfile = *args; |
| 300 | } | 272 | } else |
| 301 | else badarg = 1; | 273 | badarg = 1; |
| 302 | } | 274 | } else if (!strcmp(*args, "-VAfile")) { |
| 303 | else if (!strcmp (*args, "-VAfile")) | 275 | if (args[1]) { |
| 304 | { | ||
| 305 | if (args[1]) | ||
| 306 | { | ||
| 307 | args++; | 276 | args++; |
| 308 | verify_certfile = *args; | 277 | verify_certfile = *args; |
| 309 | verify_flags |= OCSP_TRUSTOTHER; | 278 | verify_flags |= OCSP_TRUSTOTHER; |
| 310 | } | 279 | } else |
| 311 | else badarg = 1; | 280 | badarg = 1; |
| 312 | } | 281 | } else if (!strcmp(*args, "-sign_other")) { |
| 313 | else if (!strcmp(*args, "-sign_other")) | 282 | if (args[1]) { |
| 314 | { | ||
| 315 | if (args[1]) | ||
| 316 | { | ||
| 317 | args++; | 283 | args++; |
| 318 | sign_certfile = *args; | 284 | sign_certfile = *args; |
| 319 | } | 285 | } else |
| 320 | else badarg = 1; | 286 | badarg = 1; |
| 321 | } | 287 | } else if (!strcmp(*args, "-verify_other")) { |
| 322 | else if (!strcmp(*args, "-verify_other")) | 288 | if (args[1]) { |
| 323 | { | ||
| 324 | if (args[1]) | ||
| 325 | { | ||
| 326 | args++; | 289 | args++; |
| 327 | verify_certfile = *args; | 290 | verify_certfile = *args; |
| 328 | } | 291 | } else |
| 329 | else badarg = 1; | 292 | badarg = 1; |
| 330 | } | 293 | } else if (!strcmp(*args, "-CAfile")) { |
| 331 | else if (!strcmp (*args, "-CAfile")) | 294 | if (args[1]) { |
| 332 | { | ||
| 333 | if (args[1]) | ||
| 334 | { | ||
| 335 | args++; | 295 | args++; |
| 336 | CAfile = *args; | 296 | CAfile = *args; |
| 337 | } | 297 | } else |
| 338 | else badarg = 1; | 298 | badarg = 1; |
| 339 | } | 299 | } else if (!strcmp(*args, "-CApath")) { |
| 340 | else if (!strcmp (*args, "-CApath")) | 300 | if (args[1]) { |
| 341 | { | ||
| 342 | if (args[1]) | ||
| 343 | { | ||
| 344 | args++; | 301 | args++; |
| 345 | CApath = *args; | 302 | CApath = *args; |
| 346 | } | 303 | } else |
| 347 | else badarg = 1; | 304 | badarg = 1; |
| 348 | } | 305 | } else if (!strcmp(*args, "-validity_period")) { |
| 349 | else if (!strcmp (*args, "-validity_period")) | 306 | if (args[1]) { |
| 350 | { | ||
| 351 | if (args[1]) | ||
| 352 | { | ||
| 353 | args++; | 307 | args++; |
| 354 | nsec = atol(*args); | 308 | nsec = atol(*args); |
| 355 | if (nsec < 0) | 309 | if (nsec < 0) { |
| 356 | { | ||
| 357 | BIO_printf(bio_err, | 310 | BIO_printf(bio_err, |
| 358 | "Illegal validity period %s\n", | 311 | "Illegal validity period %s\n", |
| 359 | *args); | 312 | *args); |
| 360 | badarg = 1; | 313 | badarg = 1; |
| 361 | } | ||
| 362 | } | 314 | } |
| 363 | else badarg = 1; | 315 | } else |
| 364 | } | 316 | badarg = 1; |
| 365 | else if (!strcmp (*args, "-status_age")) | 317 | } else if (!strcmp(*args, "-status_age")) { |
| 366 | { | 318 | if (args[1]) { |
| 367 | if (args[1]) | ||
| 368 | { | ||
| 369 | args++; | 319 | args++; |
| 370 | maxage = atol(*args); | 320 | maxage = atol(*args); |
| 371 | if (maxage < 0) | 321 | if (maxage < 0) { |
| 372 | { | ||
| 373 | BIO_printf(bio_err, | 322 | BIO_printf(bio_err, |
| 374 | "Illegal validity age %s\n", | 323 | "Illegal validity age %s\n", |
| 375 | *args); | 324 | *args); |
| 376 | badarg = 1; | 325 | badarg = 1; |
| 377 | } | ||
| 378 | } | 326 | } |
| 379 | else badarg = 1; | 327 | } else |
| 380 | } | 328 | badarg = 1; |
| 381 | else if (!strcmp(*args, "-signkey")) | 329 | } else if (!strcmp(*args, "-signkey")) { |
| 382 | { | 330 | if (args[1]) { |
| 383 | if (args[1]) | ||
| 384 | { | ||
| 385 | args++; | 331 | args++; |
| 386 | keyfile = *args; | 332 | keyfile = *args; |
| 387 | } | 333 | } else |
| 388 | else badarg = 1; | 334 | badarg = 1; |
| 389 | } | 335 | } else if (!strcmp(*args, "-reqout")) { |
| 390 | else if (!strcmp(*args, "-reqout")) | 336 | if (args[1]) { |
| 391 | { | ||
| 392 | if (args[1]) | ||
| 393 | { | ||
| 394 | args++; | 337 | args++; |
| 395 | reqout = *args; | 338 | reqout = *args; |
| 396 | } | 339 | } else |
| 397 | else badarg = 1; | 340 | badarg = 1; |
| 398 | } | 341 | } else if (!strcmp(*args, "-respout")) { |
| 399 | else if (!strcmp(*args, "-respout")) | 342 | if (args[1]) { |
| 400 | { | ||
| 401 | if (args[1]) | ||
| 402 | { | ||
| 403 | args++; | 343 | args++; |
| 404 | respout = *args; | 344 | respout = *args; |
| 405 | } | 345 | } else |
| 406 | else badarg = 1; | 346 | badarg = 1; |
| 407 | } | 347 | } else if (!strcmp(*args, "-path")) { |
| 408 | else if (!strcmp(*args, "-path")) | 348 | if (args[1]) { |
| 409 | { | ||
| 410 | if (args[1]) | ||
| 411 | { | ||
| 412 | args++; | 349 | args++; |
| 413 | path = *args; | 350 | path = *args; |
| 414 | } | 351 | } else |
| 415 | else badarg = 1; | 352 | badarg = 1; |
| 416 | } | 353 | } else if (!strcmp(*args, "-issuer")) { |
| 417 | else if (!strcmp(*args, "-issuer")) | 354 | if (args[1]) { |
| 418 | { | ||
| 419 | if (args[1]) | ||
| 420 | { | ||
| 421 | args++; | 355 | args++; |
| 422 | X509_free(issuer); | 356 | X509_free(issuer); |
| 423 | issuer = load_cert(bio_err, *args, FORMAT_PEM, | 357 | issuer = load_cert(bio_err, *args, FORMAT_PEM, |
| 424 | NULL, e, "issuer certificate"); | 358 | NULL, e, "issuer certificate"); |
| 425 | if(!issuer) goto end; | 359 | if (!issuer) |
| 426 | } | 360 | goto end; |
| 427 | else badarg = 1; | 361 | } else |
| 428 | } | 362 | badarg = 1; |
| 429 | else if (!strcmp (*args, "-cert")) | 363 | } else if (!strcmp(*args, "-cert")) { |
| 430 | { | 364 | if (args[1]) { |
| 431 | if (args[1]) | ||
| 432 | { | ||
| 433 | args++; | 365 | args++; |
| 434 | X509_free(cert); | 366 | X509_free(cert); |
| 435 | cert = load_cert(bio_err, *args, FORMAT_PEM, | 367 | cert = load_cert(bio_err, *args, FORMAT_PEM, |
| 436 | NULL, e, "certificate"); | 368 | NULL, e, "certificate"); |
| 437 | if(!cert) goto end; | 369 | if (!cert) |
| 438 | if (!cert_id_md) cert_id_md = EVP_sha1(); | ||
| 439 | if(!add_ocsp_cert(&req, cert, cert_id_md, issuer, ids)) | ||
| 440 | goto end; | 370 | goto end; |
| 441 | if(!sk_OPENSSL_STRING_push(reqnames, *args)) | 371 | if (!cert_id_md) |
| 372 | cert_id_md = EVP_sha1(); | ||
| 373 | if (!add_ocsp_cert(&req, cert, cert_id_md, issuer, ids)) | ||
| 442 | goto end; | 374 | goto end; |
| 443 | } | 375 | if (!sk_OPENSSL_STRING_push(reqnames, *args)) |
| 444 | else badarg = 1; | 376 | goto end; |
| 445 | } | 377 | } else |
| 446 | else if (!strcmp(*args, "-serial")) | 378 | badarg = 1; |
| 447 | { | 379 | } else if (!strcmp(*args, "-serial")) { |
| 448 | if (args[1]) | 380 | if (args[1]) { |
| 449 | { | ||
| 450 | args++; | 381 | args++; |
| 451 | if (!cert_id_md) cert_id_md = EVP_sha1(); | 382 | if (!cert_id_md) |
| 452 | if(!add_ocsp_serial(&req, *args, cert_id_md, issuer, ids)) | 383 | cert_id_md = EVP_sha1(); |
| 384 | if (!add_ocsp_serial(&req, *args, cert_id_md, issuer, ids)) | ||
| 453 | goto end; | 385 | goto end; |
| 454 | if(!sk_OPENSSL_STRING_push(reqnames, *args)) | 386 | if (!sk_OPENSSL_STRING_push(reqnames, *args)) |
| 455 | goto end; | 387 | goto end; |
| 456 | } | 388 | } else |
| 457 | else badarg = 1; | 389 | badarg = 1; |
| 458 | } | 390 | } else if (!strcmp(*args, "-index")) { |
| 459 | else if (!strcmp(*args, "-index")) | 391 | if (args[1]) { |
| 460 | { | ||
| 461 | if (args[1]) | ||
| 462 | { | ||
| 463 | args++; | 392 | args++; |
| 464 | ridx_filename = *args; | 393 | ridx_filename = *args; |
| 465 | } | 394 | } else |
| 466 | else badarg = 1; | 395 | badarg = 1; |
| 467 | } | 396 | } else if (!strcmp(*args, "-CA")) { |
| 468 | else if (!strcmp(*args, "-CA")) | 397 | if (args[1]) { |
| 469 | { | ||
| 470 | if (args[1]) | ||
| 471 | { | ||
| 472 | args++; | 398 | args++; |
| 473 | rca_filename = *args; | 399 | rca_filename = *args; |
| 474 | } | 400 | } else |
| 475 | else badarg = 1; | 401 | badarg = 1; |
| 476 | } | 402 | } else if (!strcmp(*args, "-nmin")) { |
| 477 | else if (!strcmp (*args, "-nmin")) | 403 | if (args[1]) { |
| 478 | { | ||
| 479 | if (args[1]) | ||
| 480 | { | ||
| 481 | args++; | 404 | args++; |
| 482 | nmin = atol(*args); | 405 | nmin = atol(*args); |
| 483 | if (nmin < 0) | 406 | if (nmin < 0) { |
| 484 | { | ||
| 485 | BIO_printf(bio_err, | 407 | BIO_printf(bio_err, |
| 486 | "Illegal update period %s\n", | 408 | "Illegal update period %s\n", |
| 487 | *args); | 409 | *args); |
| 488 | badarg = 1; | 410 | badarg = 1; |
| 489 | } | ||
| 490 | } | 411 | } |
| 491 | if (ndays == -1) | ||
| 492 | ndays = 0; | ||
| 493 | else badarg = 1; | ||
| 494 | } | 412 | } |
| 495 | else if (!strcmp (*args, "-nrequest")) | 413 | if (ndays == -1) |
| 496 | { | 414 | ndays = 0; |
| 497 | if (args[1]) | 415 | else |
| 498 | { | 416 | badarg = 1; |
| 417 | } else if (!strcmp(*args, "-nrequest")) { | ||
| 418 | if (args[1]) { | ||
| 499 | args++; | 419 | args++; |
| 500 | accept_count = atol(*args); | 420 | accept_count = atol(*args); |
| 501 | if (accept_count < 0) | 421 | if (accept_count < 0) { |
| 502 | { | ||
| 503 | BIO_printf(bio_err, | 422 | BIO_printf(bio_err, |
| 504 | "Illegal accept count %s\n", | 423 | "Illegal accept count %s\n", |
| 505 | *args); | 424 | *args); |
| 506 | badarg = 1; | 425 | badarg = 1; |
| 507 | } | ||
| 508 | } | 426 | } |
| 509 | else badarg = 1; | 427 | } else |
| 510 | } | 428 | badarg = 1; |
| 511 | else if (!strcmp (*args, "-ndays")) | 429 | } else if (!strcmp(*args, "-ndays")) { |
| 512 | { | 430 | if (args[1]) { |
| 513 | if (args[1]) | ||
| 514 | { | ||
| 515 | args++; | 431 | args++; |
| 516 | ndays = atol(*args); | 432 | ndays = atol(*args); |
| 517 | if (ndays < 0) | 433 | if (ndays < 0) { |
| 518 | { | ||
| 519 | BIO_printf(bio_err, | 434 | BIO_printf(bio_err, |
| 520 | "Illegal update period %s\n", | 435 | "Illegal update period %s\n", |
| 521 | *args); | 436 | *args); |
| 522 | badarg = 1; | 437 | badarg = 1; |
| 523 | } | ||
| 524 | } | 438 | } |
| 525 | else badarg = 1; | 439 | } else |
| 526 | } | 440 | badarg = 1; |
| 527 | else if (!strcmp(*args, "-rsigner")) | 441 | } else if (!strcmp(*args, "-rsigner")) { |
| 528 | { | 442 | if (args[1]) { |
| 529 | if (args[1]) | ||
| 530 | { | ||
| 531 | args++; | 443 | args++; |
| 532 | rsignfile = *args; | 444 | rsignfile = *args; |
| 533 | } | 445 | } else |
| 534 | else badarg = 1; | 446 | badarg = 1; |
| 535 | } | 447 | } else if (!strcmp(*args, "-rkey")) { |
| 536 | else if (!strcmp(*args, "-rkey")) | 448 | if (args[1]) { |
| 537 | { | ||
| 538 | if (args[1]) | ||
| 539 | { | ||
| 540 | args++; | 449 | args++; |
| 541 | rkeyfile = *args; | 450 | rkeyfile = *args; |
| 542 | } | 451 | } else |
| 543 | else badarg = 1; | 452 | badarg = 1; |
| 544 | } | 453 | } else if (!strcmp(*args, "-rother")) { |
| 545 | else if (!strcmp(*args, "-rother")) | 454 | if (args[1]) { |
| 546 | { | ||
| 547 | if (args[1]) | ||
| 548 | { | ||
| 549 | args++; | 455 | args++; |
| 550 | rcertfile = *args; | 456 | rcertfile = *args; |
| 551 | } | 457 | } else |
| 552 | else badarg = 1; | 458 | badarg = 1; |
| 553 | } | 459 | } else if ((cert_id_md = EVP_get_digestbyname((*args) + 1)) == NULL) { |
| 554 | else if ((cert_id_md = EVP_get_digestbyname((*args)+1))==NULL) | ||
| 555 | { | ||
| 556 | badarg = 1; | 460 | badarg = 1; |
| 557 | } | ||
| 558 | args++; | ||
| 559 | } | 461 | } |
| 462 | args++; | ||
| 463 | } | ||
| 560 | 464 | ||
| 561 | /* Have we anything to do? */ | 465 | /* Have we anything to do? */ |
| 562 | if (!req && !reqin && !respin && !(port && ridx_filename)) badarg = 1; | 466 | if (!req && !reqin && !respin && !(port && ridx_filename)) |
| 563 | 467 | badarg = 1; | |
| 564 | if (badarg) | 468 | |
| 565 | { | 469 | if (badarg) { |
| 566 | BIO_printf (bio_err, "OCSP utility\n"); | 470 | BIO_printf(bio_err, "OCSP utility\n"); |
| 567 | BIO_printf (bio_err, "Usage ocsp [options]\n"); | 471 | BIO_printf(bio_err, "Usage ocsp [options]\n"); |
| 568 | BIO_printf (bio_err, "where options are\n"); | 472 | BIO_printf(bio_err, "where options are\n"); |
| 569 | BIO_printf (bio_err, "-out file output filename\n"); | 473 | BIO_printf(bio_err, "-out file output filename\n"); |
| 570 | BIO_printf (bio_err, "-issuer file issuer certificate\n"); | 474 | BIO_printf(bio_err, "-issuer file issuer certificate\n"); |
| 571 | BIO_printf (bio_err, "-cert file certificate to check\n"); | 475 | BIO_printf(bio_err, "-cert file certificate to check\n"); |
| 572 | BIO_printf (bio_err, "-serial n serial number to check\n"); | 476 | BIO_printf(bio_err, "-serial n serial number to check\n"); |
| 573 | BIO_printf (bio_err, "-signer file certificate to sign OCSP request with\n"); | 477 | BIO_printf(bio_err, "-signer file certificate to sign OCSP request with\n"); |
| 574 | BIO_printf (bio_err, "-signkey file private key to sign OCSP request with\n"); | 478 | BIO_printf(bio_err, "-signkey file private key to sign OCSP request with\n"); |
| 575 | BIO_printf (bio_err, "-sign_other file additional certificates to include in signed request\n"); | 479 | BIO_printf(bio_err, "-sign_other file additional certificates to include in signed request\n"); |
| 576 | BIO_printf (bio_err, "-no_certs don't include any certificates in signed request\n"); | 480 | BIO_printf(bio_err, "-no_certs don't include any certificates in signed request\n"); |
| 577 | BIO_printf (bio_err, "-req_text print text form of request\n"); | 481 | BIO_printf(bio_err, "-req_text print text form of request\n"); |
| 578 | BIO_printf (bio_err, "-resp_text print text form of response\n"); | 482 | BIO_printf(bio_err, "-resp_text print text form of response\n"); |
| 579 | BIO_printf (bio_err, "-text print text form of request and response\n"); | 483 | BIO_printf(bio_err, "-text print text form of request and response\n"); |
| 580 | BIO_printf (bio_err, "-reqout file write DER encoded OCSP request to \"file\"\n"); | 484 | BIO_printf(bio_err, "-reqout file write DER encoded OCSP request to \"file\"\n"); |
| 581 | BIO_printf (bio_err, "-respout file write DER encoded OCSP reponse to \"file\"\n"); | 485 | BIO_printf(bio_err, "-respout file write DER encoded OCSP reponse to \"file\"\n"); |
| 582 | BIO_printf (bio_err, "-reqin file read DER encoded OCSP request from \"file\"\n"); | 486 | BIO_printf(bio_err, "-reqin file read DER encoded OCSP request from \"file\"\n"); |
| 583 | BIO_printf (bio_err, "-respin file read DER encoded OCSP reponse from \"file\"\n"); | 487 | BIO_printf(bio_err, "-respin file read DER encoded OCSP reponse from \"file\"\n"); |
| 584 | BIO_printf (bio_err, "-nonce add OCSP nonce to request\n"); | 488 | BIO_printf(bio_err, "-nonce add OCSP nonce to request\n"); |
| 585 | BIO_printf (bio_err, "-no_nonce don't add OCSP nonce to request\n"); | 489 | BIO_printf(bio_err, "-no_nonce don't add OCSP nonce to request\n"); |
| 586 | BIO_printf (bio_err, "-url URL OCSP responder URL\n"); | 490 | BIO_printf(bio_err, "-url URL OCSP responder URL\n"); |
| 587 | BIO_printf (bio_err, "-host host:n send OCSP request to host on port n\n"); | 491 | BIO_printf(bio_err, "-host host:n send OCSP request to host on port n\n"); |
| 588 | BIO_printf (bio_err, "-path path to use in OCSP request\n"); | 492 | BIO_printf(bio_err, "-path path to use in OCSP request\n"); |
| 589 | BIO_printf (bio_err, "-CApath dir trusted certificates directory\n"); | 493 | BIO_printf(bio_err, "-CApath dir trusted certificates directory\n"); |
| 590 | BIO_printf (bio_err, "-CAfile file trusted certificates file\n"); | 494 | BIO_printf(bio_err, "-CAfile file trusted certificates file\n"); |
| 591 | BIO_printf (bio_err, "-VAfile file validator certificates file\n"); | 495 | BIO_printf(bio_err, "-VAfile file validator certificates file\n"); |
| 592 | BIO_printf (bio_err, "-validity_period n maximum validity discrepancy in seconds\n"); | 496 | BIO_printf(bio_err, "-validity_period n maximum validity discrepancy in seconds\n"); |
| 593 | BIO_printf (bio_err, "-status_age n maximum status age in seconds\n"); | 497 | BIO_printf(bio_err, "-status_age n maximum status age in seconds\n"); |
| 594 | BIO_printf (bio_err, "-noverify don't verify response at all\n"); | 498 | BIO_printf(bio_err, "-noverify don't verify response at all\n"); |
| 595 | BIO_printf (bio_err, "-verify_other file additional certificates to search for signer\n"); | 499 | BIO_printf(bio_err, "-verify_other file additional certificates to search for signer\n"); |
| 596 | BIO_printf (bio_err, "-trust_other don't verify additional certificates\n"); | 500 | BIO_printf(bio_err, "-trust_other don't verify additional certificates\n"); |
| 597 | BIO_printf (bio_err, "-no_intern don't search certificates contained in response for signer\n"); | 501 | BIO_printf(bio_err, "-no_intern don't search certificates contained in response for signer\n"); |
| 598 | BIO_printf (bio_err, "-no_signature_verify don't check signature on response\n"); | 502 | BIO_printf(bio_err, "-no_signature_verify don't check signature on response\n"); |
| 599 | BIO_printf (bio_err, "-no_cert_verify don't check signing certificate\n"); | 503 | BIO_printf(bio_err, "-no_cert_verify don't check signing certificate\n"); |
| 600 | BIO_printf (bio_err, "-no_chain don't chain verify response\n"); | 504 | BIO_printf(bio_err, "-no_chain don't chain verify response\n"); |
| 601 | BIO_printf (bio_err, "-no_cert_checks don't do additional checks on signing certificate\n"); | 505 | BIO_printf(bio_err, "-no_cert_checks don't do additional checks on signing certificate\n"); |
| 602 | BIO_printf (bio_err, "-port num port to run responder on\n"); | 506 | BIO_printf(bio_err, "-port num port to run responder on\n"); |
| 603 | BIO_printf (bio_err, "-index file certificate status index file\n"); | 507 | BIO_printf(bio_err, "-index file certificate status index file\n"); |
| 604 | BIO_printf (bio_err, "-CA file CA certificate\n"); | 508 | BIO_printf(bio_err, "-CA file CA certificate\n"); |
| 605 | BIO_printf (bio_err, "-rsigner file responder certificate to sign responses with\n"); | 509 | BIO_printf(bio_err, "-rsigner file responder certificate to sign responses with\n"); |
| 606 | BIO_printf (bio_err, "-rkey file responder key to sign responses with\n"); | 510 | BIO_printf(bio_err, "-rkey file responder key to sign responses with\n"); |
| 607 | BIO_printf (bio_err, "-rother file other certificates to include in response\n"); | 511 | BIO_printf(bio_err, "-rother file other certificates to include in response\n"); |
| 608 | BIO_printf (bio_err, "-resp_no_certs don't include any certificates in response\n"); | 512 | BIO_printf(bio_err, "-resp_no_certs don't include any certificates in response\n"); |
| 609 | BIO_printf (bio_err, "-nmin n number of minutes before next update\n"); | 513 | BIO_printf(bio_err, "-nmin n number of minutes before next update\n"); |
| 610 | BIO_printf (bio_err, "-ndays n number of days before next update\n"); | 514 | BIO_printf(bio_err, "-ndays n number of days before next update\n"); |
| 611 | BIO_printf (bio_err, "-resp_key_id identify reponse by signing certificate key ID\n"); | 515 | BIO_printf(bio_err, "-resp_key_id identify reponse by signing certificate key ID\n"); |
| 612 | BIO_printf (bio_err, "-nrequest n number of requests to accept (default unlimited)\n"); | 516 | BIO_printf(bio_err, "-nrequest n number of requests to accept (default unlimited)\n"); |
| 613 | BIO_printf (bio_err, "-<dgst alg> use specified digest in the request\n"); | 517 | BIO_printf(bio_err, "-<dgst alg> use specified digest in the request\n"); |
| 614 | goto end; | 518 | goto end; |
| 615 | } | 519 | } |
| 616 | 520 | if (outfile) | |
| 617 | if(outfile) out = BIO_new_file(outfile, "w"); | 521 | out = BIO_new_file(outfile, "w"); |
| 618 | else out = BIO_new_fp(stdout, BIO_NOCLOSE); | 522 | else |
| 523 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | ||
| 619 | 524 | ||
| 620 | if(!out) | 525 | if (!out) { |
| 621 | { | ||
| 622 | BIO_printf(bio_err, "Error opening output file\n"); | 526 | BIO_printf(bio_err, "Error opening output file\n"); |
| 623 | goto end; | 527 | goto end; |
| 624 | } | 528 | } |
| 625 | 529 | if (!req && (add_nonce != 2)) | |
| 626 | if (!req && (add_nonce != 2)) add_nonce = 0; | 530 | add_nonce = 0; |
| 627 | 531 | ||
| 628 | if (!req && reqin) | 532 | if (!req && reqin) { |
| 629 | { | ||
| 630 | derbio = BIO_new_file(reqin, "rb"); | 533 | derbio = BIO_new_file(reqin, "rb"); |
| 631 | if (!derbio) | 534 | if (!derbio) { |
| 632 | { | ||
| 633 | BIO_printf(bio_err, "Error Opening OCSP request file\n"); | 535 | BIO_printf(bio_err, "Error Opening OCSP request file\n"); |
| 634 | goto end; | 536 | goto end; |
| 635 | } | 537 | } |
| 636 | req = d2i_OCSP_REQUEST_bio(derbio, NULL); | 538 | req = d2i_OCSP_REQUEST_bio(derbio, NULL); |
| 637 | BIO_free(derbio); | 539 | BIO_free(derbio); |
| 638 | if(!req) | 540 | if (!req) { |
| 639 | { | ||
| 640 | BIO_printf(bio_err, "Error reading OCSP request\n"); | 541 | BIO_printf(bio_err, "Error reading OCSP request\n"); |
| 641 | goto end; | 542 | goto end; |
| 642 | } | ||
| 643 | } | 543 | } |
| 644 | 544 | } | |
| 645 | if (!req && port) | 545 | if (!req && port) { |
| 646 | { | ||
| 647 | acbio = init_responder(port); | 546 | acbio = init_responder(port); |
| 648 | if (!acbio) | 547 | if (!acbio) |
| 649 | goto end; | 548 | goto end; |
| 650 | } | 549 | } |
| 651 | 550 | if (rsignfile && !rdb) { | |
| 652 | if (rsignfile && !rdb) | 551 | if (!rkeyfile) |
| 653 | { | 552 | rkeyfile = rsignfile; |
| 654 | if (!rkeyfile) rkeyfile = rsignfile; | ||
| 655 | rsigner = load_cert(bio_err, rsignfile, FORMAT_PEM, | 553 | rsigner = load_cert(bio_err, rsignfile, FORMAT_PEM, |
| 656 | NULL, e, "responder certificate"); | 554 | NULL, e, "responder certificate"); |
| 657 | if (!rsigner) | 555 | if (!rsigner) { |
| 658 | { | ||
| 659 | BIO_printf(bio_err, "Error loading responder certificate\n"); | 556 | BIO_printf(bio_err, "Error loading responder certificate\n"); |
| 660 | goto end; | 557 | goto end; |
| 661 | } | 558 | } |
| 662 | rca_cert = load_cert(bio_err, rca_filename, FORMAT_PEM, | 559 | rca_cert = load_cert(bio_err, rca_filename, FORMAT_PEM, |
| 663 | NULL, e, "CA certificate"); | 560 | NULL, e, "CA certificate"); |
| 664 | if (rcertfile) | 561 | if (rcertfile) { |
| 665 | { | ||
| 666 | rother = load_certs(bio_err, rcertfile, FORMAT_PEM, | 562 | rother = load_certs(bio_err, rcertfile, FORMAT_PEM, |
| 667 | NULL, e, "responder other certificates"); | 563 | NULL, e, "responder other certificates"); |
| 668 | if (!rother) goto end; | 564 | if (!rother) |
| 669 | } | 565 | goto end; |
| 566 | } | ||
| 670 | rkey = load_key(bio_err, rkeyfile, FORMAT_PEM, 0, NULL, NULL, | 567 | rkey = load_key(bio_err, rkeyfile, FORMAT_PEM, 0, NULL, NULL, |
| 671 | "responder private key"); | 568 | "responder private key"); |
| 672 | if (!rkey) | 569 | if (!rkey) |
| 673 | goto end; | 570 | goto end; |
| 674 | } | 571 | } |
| 675 | if(acbio) | 572 | if (acbio) |
| 676 | BIO_printf(bio_err, "Waiting for OCSP client connections...\n"); | 573 | BIO_printf(bio_err, "Waiting for OCSP client connections...\n"); |
| 677 | 574 | ||
| 678 | redo_accept: | 575 | redo_accept: |
| 679 | 576 | ||
| 680 | if (acbio) | 577 | if (acbio) { |
| 681 | { | ||
| 682 | if (!do_responder(&req, &cbio, acbio, port)) | 578 | if (!do_responder(&req, &cbio, acbio, port)) |
| 683 | goto end; | 579 | goto end; |
| 684 | if (!req) | 580 | if (!req) { |
| 685 | { | ||
| 686 | resp = OCSP_response_create(OCSP_RESPONSE_STATUS_MALFORMEDREQUEST, NULL); | 581 | resp = OCSP_response_create(OCSP_RESPONSE_STATUS_MALFORMEDREQUEST, NULL); |
| 687 | send_ocsp_response(cbio, resp); | 582 | send_ocsp_response(cbio, resp); |
| 688 | goto done_resp; | 583 | goto done_resp; |
| 689 | } | ||
| 690 | } | 584 | } |
| 691 | 585 | } | |
| 692 | if (!req && (signfile || reqout || host || add_nonce || ridx_filename)) | 586 | if (!req && (signfile || reqout || host || add_nonce || ridx_filename)) { |
| 693 | { | ||
| 694 | BIO_printf(bio_err, "Need an OCSP request for this operation!\n"); | 587 | BIO_printf(bio_err, "Need an OCSP request for this operation!\n"); |
| 695 | goto end; | 588 | goto end; |
| 696 | } | 589 | } |
| 697 | 590 | if (req && add_nonce) | |
| 698 | if (req && add_nonce) OCSP_request_add1_nonce(req, NULL, -1); | 591 | OCSP_request_add1_nonce(req, NULL, -1); |
| 699 | 592 | ||
| 700 | if (signfile) | 593 | if (signfile) { |
| 701 | { | 594 | if (!keyfile) |
| 702 | if (!keyfile) keyfile = signfile; | 595 | keyfile = signfile; |
| 703 | signer = load_cert(bio_err, signfile, FORMAT_PEM, | 596 | signer = load_cert(bio_err, signfile, FORMAT_PEM, |
| 704 | NULL, e, "signer certificate"); | 597 | NULL, e, "signer certificate"); |
| 705 | if (!signer) | 598 | if (!signer) { |
| 706 | { | ||
| 707 | BIO_printf(bio_err, "Error loading signer certificate\n"); | 599 | BIO_printf(bio_err, "Error loading signer certificate\n"); |
| 708 | goto end; | 600 | goto end; |
| 709 | } | 601 | } |
| 710 | if (sign_certfile) | 602 | if (sign_certfile) { |
| 711 | { | ||
| 712 | sign_other = load_certs(bio_err, sign_certfile, FORMAT_PEM, | 603 | sign_other = load_certs(bio_err, sign_certfile, FORMAT_PEM, |
| 713 | NULL, e, "signer certificates"); | 604 | NULL, e, "signer certificates"); |
| 714 | if (!sign_other) goto end; | 605 | if (!sign_other) |
| 715 | } | 606 | goto end; |
| 607 | } | ||
| 716 | key = load_key(bio_err, keyfile, FORMAT_PEM, 0, NULL, NULL, | 608 | key = load_key(bio_err, keyfile, FORMAT_PEM, 0, NULL, NULL, |
| 717 | "signer private key"); | 609 | "signer private key"); |
| 718 | if (!key) | 610 | if (!key) |
| 719 | goto end; | 611 | goto end; |
| 720 | 612 | ||
| 721 | if (!OCSP_request_sign(req, signer, key, NULL, sign_other, sign_flags)) | 613 | if (!OCSP_request_sign(req, signer, key, NULL, sign_other, sign_flags)) { |
| 722 | { | ||
| 723 | BIO_printf(bio_err, "Error signing OCSP request\n"); | 614 | BIO_printf(bio_err, "Error signing OCSP request\n"); |
| 724 | goto end; | 615 | goto end; |
| 725 | } | ||
| 726 | } | 616 | } |
| 617 | } | ||
| 618 | if (req_text && req) | ||
| 619 | OCSP_REQUEST_print(out, req, 0); | ||
| 727 | 620 | ||
| 728 | if (req_text && req) OCSP_REQUEST_print(out, req, 0); | 621 | if (reqout) { |
| 729 | |||
| 730 | if (reqout) | ||
| 731 | { | ||
| 732 | derbio = BIO_new_file(reqout, "wb"); | 622 | derbio = BIO_new_file(reqout, "wb"); |
| 733 | if(!derbio) | 623 | if (!derbio) { |
| 734 | { | ||
| 735 | BIO_printf(bio_err, "Error opening file %s\n", reqout); | 624 | BIO_printf(bio_err, "Error opening file %s\n", reqout); |
| 736 | goto end; | 625 | goto end; |
| 737 | } | 626 | } |
| 738 | i2d_OCSP_REQUEST_bio(derbio, req); | 627 | i2d_OCSP_REQUEST_bio(derbio, req); |
| 739 | BIO_free(derbio); | 628 | BIO_free(derbio); |
| 740 | } | 629 | } |
| 741 | 630 | if (ridx_filename && (!rkey || !rsigner || !rca_cert)) { | |
| 742 | if (ridx_filename && (!rkey || !rsigner || !rca_cert)) | ||
| 743 | { | ||
| 744 | BIO_printf(bio_err, "Need a responder certificate, key and CA for this operation!\n"); | 631 | BIO_printf(bio_err, "Need a responder certificate, key and CA for this operation!\n"); |
| 745 | goto end; | 632 | goto end; |
| 746 | } | 633 | } |
| 747 | 634 | if (ridx_filename && !rdb) { | |
| 748 | if (ridx_filename && !rdb) | ||
| 749 | { | ||
| 750 | rdb = load_index(ridx_filename, NULL); | 635 | rdb = load_index(ridx_filename, NULL); |
| 751 | if (!rdb) goto end; | 636 | if (!rdb) |
| 752 | if (!index_index(rdb)) goto end; | 637 | goto end; |
| 753 | } | 638 | if (!index_index(rdb)) |
| 754 | 639 | goto end; | |
| 755 | if (rdb) | 640 | } |
| 756 | { | 641 | if (rdb) { |
| 757 | i = make_ocsp_response(&resp, req, rdb, rca_cert, rsigner, rkey, rother, rflags, nmin, ndays); | 642 | i = make_ocsp_response(&resp, req, rdb, rca_cert, rsigner, rkey, rother, rflags, nmin, ndays); |
| 758 | if (cbio) | 643 | if (cbio) |
| 759 | send_ocsp_response(cbio, resp); | 644 | send_ocsp_response(cbio, resp); |
| 760 | } | 645 | } else if (host) { |
| 761 | else if (host) | ||
| 762 | { | ||
| 763 | #ifndef OPENSSL_NO_SOCK | 646 | #ifndef OPENSSL_NO_SOCK |
| 764 | resp = process_responder(bio_err, req, host, path, | 647 | resp = process_responder(bio_err, req, host, path, |
| 765 | port, use_ssl, headers, req_timeout); | 648 | port, use_ssl, headers, req_timeout); |
| 766 | if (!resp) | 649 | if (!resp) |
| 767 | goto end; | 650 | goto end; |
| 768 | #else | 651 | #else |
| 769 | BIO_printf(bio_err, "Error creating connect BIO - sockets not supported.\n"); | 652 | BIO_printf(bio_err, "Error creating connect BIO - sockets not supported.\n"); |
| 770 | goto end; | 653 | goto end; |
| 771 | #endif | 654 | #endif |
| 772 | } | 655 | } else if (respin) { |
| 773 | else if (respin) | ||
| 774 | { | ||
| 775 | derbio = BIO_new_file(respin, "rb"); | 656 | derbio = BIO_new_file(respin, "rb"); |
| 776 | if (!derbio) | 657 | if (!derbio) { |
| 777 | { | ||
| 778 | BIO_printf(bio_err, "Error Opening OCSP response file\n"); | 658 | BIO_printf(bio_err, "Error Opening OCSP response file\n"); |
| 779 | goto end; | 659 | goto end; |
| 780 | } | 660 | } |
| 781 | resp = d2i_OCSP_RESPONSE_bio(derbio, NULL); | 661 | resp = d2i_OCSP_RESPONSE_bio(derbio, NULL); |
| 782 | BIO_free(derbio); | 662 | BIO_free(derbio); |
| 783 | if(!resp) | 663 | if (!resp) { |
| 784 | { | ||
| 785 | BIO_printf(bio_err, "Error reading OCSP response\n"); | 664 | BIO_printf(bio_err, "Error reading OCSP response\n"); |
| 786 | goto end; | 665 | goto end; |
| 787 | } | ||
| 788 | |||
| 789 | } | 666 | } |
| 790 | else | 667 | } else { |
| 791 | { | ||
| 792 | ret = 0; | 668 | ret = 0; |
| 793 | goto end; | 669 | goto end; |
| 794 | } | 670 | } |
| 795 | 671 | ||
| 796 | done_resp: | 672 | done_resp: |
| 797 | 673 | ||
| 798 | if (respout) | 674 | if (respout) { |
| 799 | { | ||
| 800 | derbio = BIO_new_file(respout, "wb"); | 675 | derbio = BIO_new_file(respout, "wb"); |
| 801 | if(!derbio) | 676 | if (!derbio) { |
| 802 | { | ||
| 803 | BIO_printf(bio_err, "Error opening file %s\n", respout); | 677 | BIO_printf(bio_err, "Error opening file %s\n", respout); |
| 804 | goto end; | 678 | goto end; |
| 805 | } | 679 | } |
| 806 | i2d_OCSP_RESPONSE_bio(derbio, resp); | 680 | i2d_OCSP_RESPONSE_bio(derbio, resp); |
| 807 | BIO_free(derbio); | 681 | BIO_free(derbio); |
| 808 | } | 682 | } |
| 809 | |||
| 810 | i = OCSP_response_status(resp); | 683 | i = OCSP_response_status(resp); |
| 811 | 684 | ||
| 812 | if (i != OCSP_RESPONSE_STATUS_SUCCESSFUL) | 685 | if (i != OCSP_RESPONSE_STATUS_SUCCESSFUL) { |
| 813 | { | ||
| 814 | BIO_printf(out, "Responder Error: %s (%d)\n", | 686 | BIO_printf(out, "Responder Error: %s (%d)\n", |
| 815 | OCSP_response_status_str(i), i); | 687 | OCSP_response_status_str(i), i); |
| 816 | if (ignore_err) | 688 | if (ignore_err) |
| 817 | goto redo_accept; | 689 | goto redo_accept; |
| 818 | ret = 0; | 690 | ret = 0; |
| 819 | goto end; | 691 | goto end; |
| 820 | } | 692 | } |
| 821 | 693 | if (resp_text) | |
| 822 | if (resp_text) OCSP_RESPONSE_print(out, resp, 0); | 694 | OCSP_RESPONSE_print(out, resp, 0); |
| 823 | 695 | ||
| 824 | /* If running as responder don't verify our own response */ | 696 | /* If running as responder don't verify our own response */ |
| 825 | if (cbio) | 697 | if (cbio) { |
| 826 | { | ||
| 827 | if (accept_count > 0) | 698 | if (accept_count > 0) |
| 828 | accept_count--; | 699 | accept_count--; |
| 829 | /* Redo if more connections needed */ | 700 | /* Redo if more connections needed */ |
| 830 | if (accept_count) | 701 | if (accept_count) { |
| 831 | { | ||
| 832 | BIO_free_all(cbio); | 702 | BIO_free_all(cbio); |
| 833 | cbio = NULL; | 703 | cbio = NULL; |
| 834 | OCSP_REQUEST_free(req); | 704 | OCSP_REQUEST_free(req); |
| @@ -836,55 +706,45 @@ int MAIN(int argc, char **argv) | |||
| 836 | OCSP_RESPONSE_free(resp); | 706 | OCSP_RESPONSE_free(resp); |
| 837 | resp = NULL; | 707 | resp = NULL; |
| 838 | goto redo_accept; | 708 | goto redo_accept; |
| 839 | } | ||
| 840 | goto end; | ||
| 841 | } | 709 | } |
| 842 | 710 | goto end; | |
| 711 | } | ||
| 843 | if (!store) | 712 | if (!store) |
| 844 | store = setup_verify(bio_err, CAfile, CApath); | 713 | store = setup_verify(bio_err, CAfile, CApath); |
| 845 | if (!store) | 714 | if (!store) |
| 846 | goto end; | 715 | goto end; |
| 847 | if (verify_certfile) | 716 | if (verify_certfile) { |
| 848 | { | ||
| 849 | verify_other = load_certs(bio_err, verify_certfile, FORMAT_PEM, | 717 | verify_other = load_certs(bio_err, verify_certfile, FORMAT_PEM, |
| 850 | NULL, e, "validator certificate"); | 718 | NULL, e, "validator certificate"); |
| 851 | if (!verify_other) goto end; | 719 | if (!verify_other) |
| 852 | } | 720 | goto end; |
| 853 | 721 | } | |
| 854 | bs = OCSP_response_get1_basic(resp); | 722 | bs = OCSP_response_get1_basic(resp); |
| 855 | 723 | ||
| 856 | if (!bs) | 724 | if (!bs) { |
| 857 | { | ||
| 858 | BIO_printf(bio_err, "Error parsing response\n"); | 725 | BIO_printf(bio_err, "Error parsing response\n"); |
| 859 | goto end; | 726 | goto end; |
| 860 | } | 727 | } |
| 861 | 728 | if (!noverify) { | |
| 862 | if (!noverify) | 729 | if (req && ((i = OCSP_check_nonce(req, bs)) <= 0)) { |
| 863 | { | ||
| 864 | if (req && ((i = OCSP_check_nonce(req, bs)) <= 0)) | ||
| 865 | { | ||
| 866 | if (i == -1) | 730 | if (i == -1) |
| 867 | BIO_printf(bio_err, "WARNING: no nonce in response\n"); | 731 | BIO_printf(bio_err, "WARNING: no nonce in response\n"); |
| 868 | else | 732 | else { |
| 869 | { | ||
| 870 | BIO_printf(bio_err, "Nonce Verify error\n"); | 733 | BIO_printf(bio_err, "Nonce Verify error\n"); |
| 871 | goto end; | 734 | goto end; |
| 872 | } | ||
| 873 | } | 735 | } |
| 874 | 736 | } | |
| 875 | i = OCSP_basic_verify(bs, verify_other, store, verify_flags); | 737 | i = OCSP_basic_verify(bs, verify_other, store, verify_flags); |
| 876 | if (i < 0) i = OCSP_basic_verify(bs, NULL, store, 0); | 738 | if (i < 0) |
| 739 | i = OCSP_basic_verify(bs, NULL, store, 0); | ||
| 877 | 740 | ||
| 878 | if(i <= 0) | 741 | if (i <= 0) { |
| 879 | { | ||
| 880 | BIO_printf(bio_err, "Response Verify Failure\n"); | 742 | BIO_printf(bio_err, "Response Verify Failure\n"); |
| 881 | ERR_print_errors(bio_err); | 743 | ERR_print_errors(bio_err); |
| 882 | } | 744 | } else |
| 883 | else | ||
| 884 | BIO_printf(bio_err, "Response verify OK\n"); | 745 | BIO_printf(bio_err, "Response verify OK\n"); |
| 885 | 746 | ||
| 886 | } | 747 | } |
| 887 | |||
| 888 | if (!print_ocsp_summary(out, bs, req, reqnames, ids, nsec, maxage)) | 748 | if (!print_ocsp_summary(out, bs, req, reqnames, ids, nsec, maxage)) |
| 889 | goto end; | 749 | goto end; |
| 890 | 750 | ||
| @@ -913,75 +773,81 @@ end: | |||
| 913 | sk_X509_pop_free(verify_other, X509_free); | 773 | sk_X509_pop_free(verify_other, X509_free); |
| 914 | sk_CONF_VALUE_pop_free(headers, X509V3_conf_free); | 774 | sk_CONF_VALUE_pop_free(headers, X509V3_conf_free); |
| 915 | 775 | ||
| 916 | if (use_ssl != -1) | 776 | if (use_ssl != -1) { |
| 917 | { | ||
| 918 | free(host); | 777 | free(host); |
| 919 | free(port); | 778 | free(port); |
| 920 | free(path); | 779 | free(path); |
| 921 | } | 780 | } |
| 922 | 781 | return (ret); | |
| 923 | return(ret); | ||
| 924 | } | 782 | } |
| 925 | 783 | ||
| 926 | static int add_ocsp_cert(OCSP_REQUEST **req, X509 *cert, const EVP_MD *cert_id_md,X509 *issuer, | 784 | static int |
| 927 | STACK_OF(OCSP_CERTID) *ids) | 785 | add_ocsp_cert(OCSP_REQUEST ** req, X509 * cert, const EVP_MD * cert_id_md, X509 * issuer, |
| 928 | { | 786 | STACK_OF(OCSP_CERTID) * ids) |
| 787 | { | ||
| 929 | OCSP_CERTID *id; | 788 | OCSP_CERTID *id; |
| 930 | if(!issuer) | 789 | if (!issuer) { |
| 931 | { | ||
| 932 | BIO_printf(bio_err, "No issuer certificate specified\n"); | 790 | BIO_printf(bio_err, "No issuer certificate specified\n"); |
| 933 | return 0; | 791 | return 0; |
| 934 | } | 792 | } |
| 935 | if(!*req) *req = OCSP_REQUEST_new(); | 793 | if (!*req) |
| 936 | if(!*req) goto err; | 794 | *req = OCSP_REQUEST_new(); |
| 795 | if (!*req) | ||
| 796 | goto err; | ||
| 937 | id = OCSP_cert_to_id(cert_id_md, cert, issuer); | 797 | id = OCSP_cert_to_id(cert_id_md, cert, issuer); |
| 938 | if(!id || !sk_OCSP_CERTID_push(ids, id)) goto err; | 798 | if (!id || !sk_OCSP_CERTID_push(ids, id)) |
| 939 | if(!OCSP_request_add0_id(*req, id)) goto err; | 799 | goto err; |
| 800 | if (!OCSP_request_add0_id(*req, id)) | ||
| 801 | goto err; | ||
| 940 | return 1; | 802 | return 1; |
| 941 | 803 | ||
| 942 | err: | 804 | err: |
| 943 | BIO_printf(bio_err, "Error Creating OCSP request\n"); | 805 | BIO_printf(bio_err, "Error Creating OCSP request\n"); |
| 944 | return 0; | 806 | return 0; |
| 945 | } | 807 | } |
| 946 | 808 | ||
| 947 | static int add_ocsp_serial(OCSP_REQUEST **req, char *serial,const EVP_MD *cert_id_md, X509 *issuer, | 809 | static int |
| 948 | STACK_OF(OCSP_CERTID) *ids) | 810 | add_ocsp_serial(OCSP_REQUEST ** req, char *serial, const EVP_MD * cert_id_md, X509 * issuer, |
| 949 | { | 811 | STACK_OF(OCSP_CERTID) * ids) |
| 812 | { | ||
| 950 | OCSP_CERTID *id; | 813 | OCSP_CERTID *id; |
| 951 | X509_NAME *iname; | 814 | X509_NAME *iname; |
| 952 | ASN1_BIT_STRING *ikey; | 815 | ASN1_BIT_STRING *ikey; |
| 953 | ASN1_INTEGER *sno; | 816 | ASN1_INTEGER *sno; |
| 954 | if(!issuer) | 817 | if (!issuer) { |
| 955 | { | ||
| 956 | BIO_printf(bio_err, "No issuer certificate specified\n"); | 818 | BIO_printf(bio_err, "No issuer certificate specified\n"); |
| 957 | return 0; | 819 | return 0; |
| 958 | } | 820 | } |
| 959 | if(!*req) *req = OCSP_REQUEST_new(); | 821 | if (!*req) |
| 960 | if(!*req) goto err; | 822 | *req = OCSP_REQUEST_new(); |
| 823 | if (!*req) | ||
| 824 | goto err; | ||
| 961 | iname = X509_get_subject_name(issuer); | 825 | iname = X509_get_subject_name(issuer); |
| 962 | ikey = X509_get0_pubkey_bitstr(issuer); | 826 | ikey = X509_get0_pubkey_bitstr(issuer); |
| 963 | sno = s2i_ASN1_INTEGER(NULL, serial); | 827 | sno = s2i_ASN1_INTEGER(NULL, serial); |
| 964 | if(!sno) | 828 | if (!sno) { |
| 965 | { | ||
| 966 | BIO_printf(bio_err, "Error converting serial number %s\n", serial); | 829 | BIO_printf(bio_err, "Error converting serial number %s\n", serial); |
| 967 | return 0; | 830 | return 0; |
| 968 | } | 831 | } |
| 969 | id = OCSP_cert_id_new(cert_id_md, iname, ikey, sno); | 832 | id = OCSP_cert_id_new(cert_id_md, iname, ikey, sno); |
| 970 | ASN1_INTEGER_free(sno); | 833 | ASN1_INTEGER_free(sno); |
| 971 | if(!id || !sk_OCSP_CERTID_push(ids, id)) goto err; | 834 | if (!id || !sk_OCSP_CERTID_push(ids, id)) |
| 972 | if(!OCSP_request_add0_id(*req, id)) goto err; | 835 | goto err; |
| 836 | if (!OCSP_request_add0_id(*req, id)) | ||
| 837 | goto err; | ||
| 973 | return 1; | 838 | return 1; |
| 974 | 839 | ||
| 975 | err: | 840 | err: |
| 976 | BIO_printf(bio_err, "Error Creating OCSP request\n"); | 841 | BIO_printf(bio_err, "Error Creating OCSP request\n"); |
| 977 | return 0; | 842 | return 0; |
| 978 | } | 843 | } |
| 979 | 844 | ||
| 980 | static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req, | 845 | static int |
| 981 | STACK_OF(OPENSSL_STRING) *names, | 846 | print_ocsp_summary(BIO * out, OCSP_BASICRESP * bs, OCSP_REQUEST * req, |
| 982 | STACK_OF(OCSP_CERTID) *ids, long nsec, | 847 | STACK_OF(OPENSSL_STRING) * names, |
| 983 | long maxage) | 848 | STACK_OF(OCSP_CERTID) * ids, long nsec, |
| 984 | { | 849 | long maxage) |
| 850 | { | ||
| 985 | OCSP_CERTID *id; | 851 | OCSP_CERTID *id; |
| 986 | char *name; | 852 | char *name; |
| 987 | int i; | 853 | int i; |
| @@ -993,61 +859,57 @@ static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req, | |||
| 993 | if (!bs || !req || !sk_OPENSSL_STRING_num(names) || !sk_OCSP_CERTID_num(ids)) | 859 | if (!bs || !req || !sk_OPENSSL_STRING_num(names) || !sk_OCSP_CERTID_num(ids)) |
| 994 | return 1; | 860 | return 1; |
| 995 | 861 | ||
| 996 | for (i = 0; i < sk_OCSP_CERTID_num(ids); i++) | 862 | for (i = 0; i < sk_OCSP_CERTID_num(ids); i++) { |
| 997 | { | ||
| 998 | id = sk_OCSP_CERTID_value(ids, i); | 863 | id = sk_OCSP_CERTID_value(ids, i); |
| 999 | name = sk_OPENSSL_STRING_value(names, i); | 864 | name = sk_OPENSSL_STRING_value(names, i); |
| 1000 | BIO_printf(out, "%s: ", name); | 865 | BIO_printf(out, "%s: ", name); |
| 1001 | 866 | ||
| 1002 | if(!OCSP_resp_find_status(bs, id, &status, &reason, | 867 | if (!OCSP_resp_find_status(bs, id, &status, &reason, |
| 1003 | &rev, &thisupd, &nextupd)) | 868 | &rev, &thisupd, &nextupd)) { |
| 1004 | { | ||
| 1005 | BIO_puts(out, "ERROR: No Status found.\n"); | 869 | BIO_puts(out, "ERROR: No Status found.\n"); |
| 1006 | continue; | 870 | continue; |
| 1007 | } | 871 | } |
| 1008 | 872 | /* | |
| 1009 | /* Check validity: if invalid write to output BIO so we | 873 | * Check validity: if invalid write to output BIO so we know |
| 1010 | * know which response this refers to. | 874 | * which response this refers to. |
| 1011 | */ | 875 | */ |
| 1012 | if (!OCSP_check_validity(thisupd, nextupd, nsec, maxage)) | 876 | if (!OCSP_check_validity(thisupd, nextupd, nsec, maxage)) { |
| 1013 | { | ||
| 1014 | BIO_puts(out, "WARNING: Status times invalid.\n"); | 877 | BIO_puts(out, "WARNING: Status times invalid.\n"); |
| 1015 | ERR_print_errors(out); | 878 | ERR_print_errors(out); |
| 1016 | } | 879 | } |
| 1017 | BIO_printf(out, "%s\n", OCSP_cert_status_str(status)); | 880 | BIO_printf(out, "%s\n", OCSP_cert_status_str(status)); |
| 1018 | 881 | ||
| 1019 | BIO_puts(out, "\tThis Update: "); | 882 | BIO_puts(out, "\tThis Update: "); |
| 1020 | ASN1_GENERALIZEDTIME_print(out, thisupd); | 883 | ASN1_GENERALIZEDTIME_print(out, thisupd); |
| 1021 | BIO_puts(out, "\n"); | 884 | BIO_puts(out, "\n"); |
| 1022 | 885 | ||
| 1023 | if(nextupd) | 886 | if (nextupd) { |
| 1024 | { | ||
| 1025 | BIO_puts(out, "\tNext Update: "); | 887 | BIO_puts(out, "\tNext Update: "); |
| 1026 | ASN1_GENERALIZEDTIME_print(out, nextupd); | 888 | ASN1_GENERALIZEDTIME_print(out, nextupd); |
| 1027 | BIO_puts(out, "\n"); | 889 | BIO_puts(out, "\n"); |
| 1028 | } | 890 | } |
| 1029 | |||
| 1030 | if (status != V_OCSP_CERTSTATUS_REVOKED) | 891 | if (status != V_OCSP_CERTSTATUS_REVOKED) |
| 1031 | continue; | 892 | continue; |
| 1032 | 893 | ||
| 1033 | if (reason != -1) | 894 | if (reason != -1) |
| 1034 | BIO_printf(out, "\tReason: %s\n", | 895 | BIO_printf(out, "\tReason: %s\n", |
| 1035 | OCSP_crl_reason_str(reason)); | 896 | OCSP_crl_reason_str(reason)); |
| 1036 | 897 | ||
| 1037 | BIO_puts(out, "\tRevocation Time: "); | 898 | BIO_puts(out, "\tRevocation Time: "); |
| 1038 | ASN1_GENERALIZEDTIME_print(out, rev); | 899 | ASN1_GENERALIZEDTIME_print(out, rev); |
| 1039 | BIO_puts(out, "\n"); | 900 | BIO_puts(out, "\n"); |
| 1040 | } | 901 | } |
| 1041 | 902 | ||
| 1042 | return 1; | 903 | return 1; |
| 1043 | } | 904 | } |
| 1044 | 905 | ||
| 1045 | 906 | ||
| 1046 | static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, CA_DB *db, | 907 | static int |
| 1047 | X509 *ca, X509 *rcert, EVP_PKEY *rkey, | 908 | make_ocsp_response(OCSP_RESPONSE ** resp, OCSP_REQUEST * req, CA_DB * db, |
| 1048 | STACK_OF(X509) *rother, unsigned long flags, | 909 | X509 * ca, X509 * rcert, EVP_PKEY * rkey, |
| 1049 | int nmin, int ndays) | 910 | STACK_OF(X509) * rother, unsigned long flags, |
| 1050 | { | 911 | int nmin, int ndays) |
| 912 | { | ||
| 1051 | ASN1_TIME *thisupd = NULL, *nextupd = NULL; | 913 | ASN1_TIME *thisupd = NULL, *nextupd = NULL; |
| 1052 | OCSP_CERTID *cid, *ca_id = NULL; | 914 | OCSP_CERTID *cid, *ca_id = NULL; |
| 1053 | OCSP_BASICRESP *bs = NULL; | 915 | OCSP_BASICRESP *bs = NULL; |
| @@ -1055,21 +917,17 @@ static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, CA_DB *db | |||
| 1055 | 917 | ||
| 1056 | id_count = OCSP_request_onereq_count(req); | 918 | id_count = OCSP_request_onereq_count(req); |
| 1057 | 919 | ||
| 1058 | if (id_count <= 0) | 920 | if (id_count <= 0) { |
| 1059 | { | ||
| 1060 | *resp = OCSP_response_create(OCSP_RESPONSE_STATUS_MALFORMEDREQUEST, NULL); | 921 | *resp = OCSP_response_create(OCSP_RESPONSE_STATUS_MALFORMEDREQUEST, NULL); |
| 1061 | goto end; | 922 | goto end; |
| 1062 | } | 923 | } |
| 1063 | |||
| 1064 | |||
| 1065 | bs = OCSP_BASICRESP_new(); | 924 | bs = OCSP_BASICRESP_new(); |
| 1066 | thisupd = X509_gmtime_adj(NULL, 0); | 925 | thisupd = X509_gmtime_adj(NULL, 0); |
| 1067 | if (ndays != -1) | 926 | if (ndays != -1) |
| 1068 | nextupd = X509_gmtime_adj(NULL, nmin * 60 + ndays * 3600 * 24 ); | 927 | nextupd = X509_gmtime_adj(NULL, nmin * 60 + ndays * 3600 * 24); |
| 1069 | 928 | ||
| 1070 | /* Examine each certificate id in the request */ | 929 | /* Examine each certificate id in the request */ |
| 1071 | for (i = 0; i < id_count; i++) | 930 | for (i = 0; i < id_count; i++) { |
| 1072 | { | ||
| 1073 | OCSP_ONEREQ *one; | 931 | OCSP_ONEREQ *one; |
| 1074 | ASN1_INTEGER *serial; | 932 | ASN1_INTEGER *serial; |
| 1075 | char **inf; | 933 | char **inf; |
| @@ -1078,41 +936,39 @@ static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, CA_DB *db | |||
| 1078 | one = OCSP_request_onereq_get0(req, i); | 936 | one = OCSP_request_onereq_get0(req, i); |
| 1079 | cid = OCSP_onereq_get0_id(one); | 937 | cid = OCSP_onereq_get0_id(one); |
| 1080 | 938 | ||
| 1081 | OCSP_id_get0_info(NULL,&cert_id_md_oid, NULL,NULL, cid); | 939 | OCSP_id_get0_info(NULL, &cert_id_md_oid, NULL, NULL, cid); |
| 1082 | 940 | ||
| 1083 | cert_id_md = EVP_get_digestbyobj(cert_id_md_oid); | 941 | cert_id_md = EVP_get_digestbyobj(cert_id_md_oid); |
| 1084 | if (! cert_id_md) | 942 | if (!cert_id_md) { |
| 1085 | { | ||
| 1086 | *resp = OCSP_response_create(OCSP_RESPONSE_STATUS_INTERNALERROR, | 943 | *resp = OCSP_response_create(OCSP_RESPONSE_STATUS_INTERNALERROR, |
| 1087 | NULL); | 944 | NULL); |
| 1088 | goto end; | 945 | goto end; |
| 1089 | } | 946 | } |
| 1090 | if (ca_id) OCSP_CERTID_free(ca_id); | 947 | if (ca_id) |
| 948 | OCSP_CERTID_free(ca_id); | ||
| 1091 | ca_id = OCSP_cert_to_id(cert_id_md, NULL, ca); | 949 | ca_id = OCSP_cert_to_id(cert_id_md, NULL, ca); |
| 1092 | 950 | ||
| 1093 | /* Is this request about our CA? */ | 951 | /* Is this request about our CA? */ |
| 1094 | if (OCSP_id_issuer_cmp(ca_id, cid)) | 952 | if (OCSP_id_issuer_cmp(ca_id, cid)) { |
| 1095 | { | ||
| 1096 | OCSP_basic_add1_status(bs, cid, | 953 | OCSP_basic_add1_status(bs, cid, |
| 1097 | V_OCSP_CERTSTATUS_UNKNOWN, | 954 | V_OCSP_CERTSTATUS_UNKNOWN, |
| 1098 | 0, NULL, | 955 | 0, NULL, |
| 1099 | thisupd, nextupd); | 956 | thisupd, nextupd); |
| 1100 | continue; | 957 | continue; |
| 1101 | } | 958 | } |
| 1102 | OCSP_id_get0_info(NULL, NULL, NULL, &serial, cid); | 959 | OCSP_id_get0_info(NULL, NULL, NULL, &serial, cid); |
| 1103 | inf = lookup_serial(db, serial); | 960 | inf = lookup_serial(db, serial); |
| 1104 | if (!inf) | 961 | if (!inf) |
| 1105 | OCSP_basic_add1_status(bs, cid, | 962 | OCSP_basic_add1_status(bs, cid, |
| 1106 | V_OCSP_CERTSTATUS_UNKNOWN, | 963 | V_OCSP_CERTSTATUS_UNKNOWN, |
| 1107 | 0, NULL, | 964 | 0, NULL, |
| 1108 | thisupd, nextupd); | 965 | thisupd, nextupd); |
| 1109 | else if (inf[DB_type][0] == DB_TYPE_VAL) | 966 | else if (inf[DB_type][0] == DB_TYPE_VAL) |
| 1110 | OCSP_basic_add1_status(bs, cid, | 967 | OCSP_basic_add1_status(bs, cid, |
| 1111 | V_OCSP_CERTSTATUS_GOOD, | 968 | V_OCSP_CERTSTATUS_GOOD, |
| 1112 | 0, NULL, | 969 | 0, NULL, |
| 1113 | thisupd, nextupd); | 970 | thisupd, nextupd); |
| 1114 | else if (inf[DB_type][0] == DB_TYPE_REV) | 971 | else if (inf[DB_type][0] == DB_TYPE_REV) { |
| 1115 | { | ||
| 1116 | ASN1_OBJECT *inst = NULL; | 972 | ASN1_OBJECT *inst = NULL; |
| 1117 | ASN1_TIME *revtm = NULL; | 973 | ASN1_TIME *revtm = NULL; |
| 1118 | ASN1_GENERALIZEDTIME *invtm = NULL; | 974 | ASN1_GENERALIZEDTIME *invtm = NULL; |
| @@ -1120,9 +976,9 @@ static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, CA_DB *db | |||
| 1120 | int reason = -1; | 976 | int reason = -1; |
| 1121 | unpack_revinfo(&revtm, &reason, &inst, &invtm, inf[DB_rev_date]); | 977 | unpack_revinfo(&revtm, &reason, &inst, &invtm, inf[DB_rev_date]); |
| 1122 | single = OCSP_basic_add1_status(bs, cid, | 978 | single = OCSP_basic_add1_status(bs, cid, |
| 1123 | V_OCSP_CERTSTATUS_REVOKED, | 979 | V_OCSP_CERTSTATUS_REVOKED, |
| 1124 | reason, revtm, | 980 | reason, revtm, |
| 1125 | thisupd, nextupd); | 981 | thisupd, nextupd); |
| 1126 | if (invtm) | 982 | if (invtm) |
| 1127 | OCSP_SINGLERESP_add1_ext_i2d(single, NID_invalidity_date, invtm, 0, 0); | 983 | OCSP_SINGLERESP_add1_ext_i2d(single, NID_invalidity_date, invtm, 0, 0); |
| 1128 | else if (inst) | 984 | else if (inst) |
| @@ -1130,50 +986,54 @@ static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, CA_DB *db | |||
| 1130 | ASN1_OBJECT_free(inst); | 986 | ASN1_OBJECT_free(inst); |
| 1131 | ASN1_TIME_free(revtm); | 987 | ASN1_TIME_free(revtm); |
| 1132 | ASN1_GENERALIZEDTIME_free(invtm); | 988 | ASN1_GENERALIZEDTIME_free(invtm); |
| 1133 | } | ||
| 1134 | } | 989 | } |
| 990 | } | ||
| 1135 | 991 | ||
| 1136 | OCSP_copy_nonce(bs, req); | 992 | OCSP_copy_nonce(bs, req); |
| 1137 | 993 | ||
| 1138 | OCSP_basic_sign(bs, rcert, rkey, NULL, rother, flags); | 994 | OCSP_basic_sign(bs, rcert, rkey, NULL, rother, flags); |
| 1139 | 995 | ||
| 1140 | *resp = OCSP_response_create(OCSP_RESPONSE_STATUS_SUCCESSFUL, bs); | 996 | *resp = OCSP_response_create(OCSP_RESPONSE_STATUS_SUCCESSFUL, bs); |
| 1141 | 997 | ||
| 1142 | end: | 998 | end: |
| 1143 | ASN1_TIME_free(thisupd); | 999 | ASN1_TIME_free(thisupd); |
| 1144 | ASN1_TIME_free(nextupd); | 1000 | ASN1_TIME_free(nextupd); |
| 1145 | OCSP_CERTID_free(ca_id); | 1001 | OCSP_CERTID_free(ca_id); |
| 1146 | OCSP_BASICRESP_free(bs); | 1002 | OCSP_BASICRESP_free(bs); |
| 1147 | return ret; | 1003 | return ret; |
| 1148 | 1004 | ||
| 1149 | } | 1005 | } |
| 1150 | 1006 | ||
| 1151 | static char **lookup_serial(CA_DB *db, ASN1_INTEGER *ser) | 1007 | static char ** |
| 1152 | { | 1008 | lookup_serial(CA_DB * db, ASN1_INTEGER * ser) |
| 1009 | { | ||
| 1153 | int i; | 1010 | int i; |
| 1154 | BIGNUM *bn = NULL; | 1011 | BIGNUM *bn = NULL; |
| 1155 | char *itmp, *row[DB_NUMBER],**rrow; | 1012 | char *itmp, *row[DB_NUMBER], **rrow; |
| 1156 | for (i = 0; i < DB_NUMBER; i++) row[i] = NULL; | 1013 | for (i = 0; i < DB_NUMBER; i++) |
| 1157 | bn = ASN1_INTEGER_to_BN(ser,NULL); | 1014 | row[i] = NULL; |
| 1158 | OPENSSL_assert(bn); /* FIXME: should report an error at this point and abort */ | 1015 | bn = ASN1_INTEGER_to_BN(ser, NULL); |
| 1016 | OPENSSL_assert(bn); /* FIXME: should report an error at this | ||
| 1017 | * point and abort */ | ||
| 1159 | if (BN_is_zero(bn)) | 1018 | if (BN_is_zero(bn)) |
| 1160 | itmp = BUF_strdup("00"); | 1019 | itmp = BUF_strdup("00"); |
| 1161 | else | 1020 | else |
| 1162 | itmp = BN_bn2hex(bn); | 1021 | itmp = BN_bn2hex(bn); |
| 1163 | row[DB_serial] = itmp; | 1022 | row[DB_serial] = itmp; |
| 1164 | BN_free(bn); | 1023 | BN_free(bn); |
| 1165 | rrow=TXT_DB_get_by_index(db->db,DB_serial,row); | 1024 | rrow = TXT_DB_get_by_index(db->db, DB_serial, row); |
| 1166 | free(itmp); | 1025 | free(itmp); |
| 1167 | return rrow; | 1026 | return rrow; |
| 1168 | } | 1027 | } |
| 1169 | 1028 | ||
| 1170 | /* Quick and dirty OCSP server: read in and parse input request */ | 1029 | /* Quick and dirty OCSP server: read in and parse input request */ |
| 1171 | 1030 | ||
| 1172 | static BIO *init_responder(char *port) | 1031 | static BIO * |
| 1173 | { | 1032 | init_responder(char *port) |
| 1033 | { | ||
| 1174 | BIO *acbio = NULL, *bufbio = NULL; | 1034 | BIO *acbio = NULL, *bufbio = NULL; |
| 1175 | bufbio = BIO_new(BIO_f_buffer()); | 1035 | bufbio = BIO_new(BIO_f_buffer()); |
| 1176 | if (!bufbio) | 1036 | if (!bufbio) |
| 1177 | goto err; | 1037 | goto err; |
| 1178 | #ifndef OPENSSL_NO_SOCK | 1038 | #ifndef OPENSSL_NO_SOCK |
| 1179 | acbio = BIO_new_accept(port); | 1039 | acbio = BIO_new_accept(port); |
| @@ -1185,91 +1045,85 @@ static BIO *init_responder(char *port) | |||
| 1185 | BIO_set_accept_bios(acbio, bufbio); | 1045 | BIO_set_accept_bios(acbio, bufbio); |
| 1186 | bufbio = NULL; | 1046 | bufbio = NULL; |
| 1187 | 1047 | ||
| 1188 | if (BIO_do_accept(acbio) <= 0) | 1048 | if (BIO_do_accept(acbio) <= 0) { |
| 1189 | { | 1049 | BIO_printf(bio_err, "Error setting up accept BIO\n"); |
| 1190 | BIO_printf(bio_err, "Error setting up accept BIO\n"); | 1050 | ERR_print_errors(bio_err); |
| 1191 | ERR_print_errors(bio_err); | 1051 | goto err; |
| 1192 | goto err; | 1052 | } |
| 1193 | } | ||
| 1194 | |||
| 1195 | return acbio; | 1053 | return acbio; |
| 1196 | 1054 | ||
| 1197 | err: | 1055 | err: |
| 1198 | BIO_free_all(acbio); | 1056 | BIO_free_all(acbio); |
| 1199 | BIO_free(bufbio); | 1057 | BIO_free(bufbio); |
| 1200 | return NULL; | 1058 | return NULL; |
| 1201 | } | 1059 | } |
| 1202 | 1060 | ||
| 1203 | static int do_responder(OCSP_REQUEST **preq, BIO **pcbio, BIO *acbio, char *port) | 1061 | static int |
| 1204 | { | 1062 | do_responder(OCSP_REQUEST ** preq, BIO ** pcbio, BIO * acbio, char *port) |
| 1063 | { | ||
| 1205 | int have_post = 0, len; | 1064 | int have_post = 0, len; |
| 1206 | OCSP_REQUEST *req = NULL; | 1065 | OCSP_REQUEST *req = NULL; |
| 1207 | char inbuf[1024]; | 1066 | char inbuf[1024]; |
| 1208 | BIO *cbio = NULL; | 1067 | BIO *cbio = NULL; |
| 1209 | 1068 | ||
| 1210 | if (BIO_do_accept(acbio) <= 0) | 1069 | if (BIO_do_accept(acbio) <= 0) { |
| 1211 | { | 1070 | BIO_printf(bio_err, "Error accepting connection\n"); |
| 1212 | BIO_printf(bio_err, "Error accepting connection\n"); | 1071 | ERR_print_errors(bio_err); |
| 1213 | ERR_print_errors(bio_err); | 1072 | return 0; |
| 1214 | return 0; | 1073 | } |
| 1215 | } | ||
| 1216 | |||
| 1217 | cbio = BIO_pop(acbio); | 1074 | cbio = BIO_pop(acbio); |
| 1218 | *pcbio = cbio; | 1075 | *pcbio = cbio; |
| 1219 | 1076 | ||
| 1220 | for(;;) | 1077 | for (;;) { |
| 1221 | { | ||
| 1222 | len = BIO_gets(cbio, inbuf, sizeof inbuf); | 1078 | len = BIO_gets(cbio, inbuf, sizeof inbuf); |
| 1223 | if (len <= 0) | 1079 | if (len <= 0) |
| 1224 | return 1; | 1080 | return 1; |
| 1225 | /* Look for "POST" signalling start of query */ | 1081 | /* Look for "POST" signalling start of query */ |
| 1226 | if (!have_post) | 1082 | if (!have_post) { |
| 1227 | { | 1083 | if (strncmp(inbuf, "POST", 4)) { |
| 1228 | if(strncmp(inbuf, "POST", 4)) | ||
| 1229 | { | ||
| 1230 | BIO_printf(bio_err, "Invalid request\n"); | 1084 | BIO_printf(bio_err, "Invalid request\n"); |
| 1231 | return 1; | 1085 | return 1; |
| 1232 | } | ||
| 1233 | have_post = 1; | ||
| 1234 | } | 1086 | } |
| 1087 | have_post = 1; | ||
| 1088 | } | ||
| 1235 | /* Look for end of headers */ | 1089 | /* Look for end of headers */ |
| 1236 | if ((inbuf[0] == '\r') || (inbuf[0] == '\n')) | 1090 | if ((inbuf[0] == '\r') || (inbuf[0] == '\n')) |
| 1237 | break; | 1091 | break; |
| 1238 | } | 1092 | } |
| 1239 | 1093 | ||
| 1240 | /* Try to read OCSP request */ | 1094 | /* Try to read OCSP request */ |
| 1241 | 1095 | ||
| 1242 | req = d2i_OCSP_REQUEST_bio(cbio, NULL); | 1096 | req = d2i_OCSP_REQUEST_bio(cbio, NULL); |
| 1243 | 1097 | ||
| 1244 | if (!req) | 1098 | if (!req) { |
| 1245 | { | ||
| 1246 | BIO_printf(bio_err, "Error parsing OCSP request\n"); | 1099 | BIO_printf(bio_err, "Error parsing OCSP request\n"); |
| 1247 | ERR_print_errors(bio_err); | 1100 | ERR_print_errors(bio_err); |
| 1248 | } | 1101 | } |
| 1249 | |||
| 1250 | *preq = req; | 1102 | *preq = req; |
| 1251 | 1103 | ||
| 1252 | return 1; | 1104 | return 1; |
| 1253 | 1105 | ||
| 1254 | } | 1106 | } |
| 1255 | 1107 | ||
| 1256 | static int send_ocsp_response(BIO *cbio, OCSP_RESPONSE *resp) | 1108 | static int |
| 1257 | { | 1109 | send_ocsp_response(BIO * cbio, OCSP_RESPONSE * resp) |
| 1258 | static const char http_resp[] = | 1110 | { |
| 1259 | "HTTP/1.0 200 OK\r\nContent-type: application/ocsp-response\r\n" | 1111 | static const char http_resp[] = |
| 1260 | "Content-Length: %d\r\n\r\n"; | 1112 | "HTTP/1.0 200 OK\r\nContent-type: application/ocsp-response\r\n" |
| 1113 | "Content-Length: %d\r\n\r\n"; | ||
| 1261 | if (!cbio) | 1114 | if (!cbio) |
| 1262 | return 0; | 1115 | return 0; |
| 1263 | BIO_printf(cbio, http_resp, i2d_OCSP_RESPONSE(resp, NULL)); | 1116 | BIO_printf(cbio, http_resp, i2d_OCSP_RESPONSE(resp, NULL)); |
| 1264 | i2d_OCSP_RESPONSE_bio(cbio, resp); | 1117 | i2d_OCSP_RESPONSE_bio(cbio, resp); |
| 1265 | (void)BIO_flush(cbio); | 1118 | (void) BIO_flush(cbio); |
| 1266 | return 1; | 1119 | return 1; |
| 1267 | } | 1120 | } |
| 1268 | 1121 | ||
| 1269 | static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path, | 1122 | static OCSP_RESPONSE * |
| 1270 | STACK_OF(CONF_VALUE) *headers, | 1123 | query_responder(BIO * err, BIO * cbio, char *path, |
| 1271 | OCSP_REQUEST *req, int req_timeout) | 1124 | STACK_OF(CONF_VALUE) * headers, |
| 1272 | { | 1125 | OCSP_REQUEST * req, int req_timeout) |
| 1126 | { | ||
| 1273 | int fd; | 1127 | int fd; |
| 1274 | int rv; | 1128 | int rv; |
| 1275 | int i; | 1129 | int i; |
| @@ -1283,49 +1137,39 @@ static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path, | |||
| 1283 | 1137 | ||
| 1284 | rv = BIO_do_connect(cbio); | 1138 | rv = BIO_do_connect(cbio); |
| 1285 | 1139 | ||
| 1286 | if ((rv <= 0) && ((req_timeout == -1) || !BIO_should_retry(cbio))) | 1140 | if ((rv <= 0) && ((req_timeout == -1) || !BIO_should_retry(cbio))) { |
| 1287 | { | ||
| 1288 | BIO_puts(err, "Error connecting BIO\n"); | 1141 | BIO_puts(err, "Error connecting BIO\n"); |
| 1289 | return NULL; | 1142 | return NULL; |
| 1290 | } | 1143 | } |
| 1291 | 1144 | if (BIO_get_fd(cbio, &fd) <= 0) { | |
| 1292 | if (BIO_get_fd(cbio, &fd) <= 0) | ||
| 1293 | { | ||
| 1294 | BIO_puts(err, "Can't get connection fd\n"); | 1145 | BIO_puts(err, "Can't get connection fd\n"); |
| 1295 | goto err; | 1146 | goto err; |
| 1296 | } | 1147 | } |
| 1297 | 1148 | if (req_timeout != -1 && rv <= 0) { | |
| 1298 | if (req_timeout != -1 && rv <= 0) | ||
| 1299 | { | ||
| 1300 | FD_ZERO(&confds); | 1149 | FD_ZERO(&confds); |
| 1301 | openssl_fdset(fd, &confds); | 1150 | openssl_fdset(fd, &confds); |
| 1302 | tv.tv_usec = 0; | 1151 | tv.tv_usec = 0; |
| 1303 | tv.tv_sec = req_timeout; | 1152 | tv.tv_sec = req_timeout; |
| 1304 | rv = select(fd + 1, NULL, (void *)&confds, NULL, &tv); | 1153 | rv = select(fd + 1, NULL, (void *) &confds, NULL, &tv); |
| 1305 | if (rv == 0) | 1154 | if (rv == 0) { |
| 1306 | { | ||
| 1307 | BIO_puts(err, "Timeout on connect\n"); | 1155 | BIO_puts(err, "Timeout on connect\n"); |
| 1308 | return NULL; | 1156 | return NULL; |
| 1309 | } | ||
| 1310 | } | 1157 | } |
| 1311 | 1158 | } | |
| 1312 | |||
| 1313 | ctx = OCSP_sendreq_new(cbio, path, NULL, -1); | 1159 | ctx = OCSP_sendreq_new(cbio, path, NULL, -1); |
| 1314 | if (!ctx) | 1160 | if (!ctx) |
| 1315 | return NULL; | 1161 | return NULL; |
| 1316 | 1162 | ||
| 1317 | for (i = 0; i < sk_CONF_VALUE_num(headers); i++) | 1163 | for (i = 0; i < sk_CONF_VALUE_num(headers); i++) { |
| 1318 | { | ||
| 1319 | CONF_VALUE *hdr = sk_CONF_VALUE_value(headers, i); | 1164 | CONF_VALUE *hdr = sk_CONF_VALUE_value(headers, i); |
| 1320 | if (!OCSP_REQ_CTX_add1_header(ctx, hdr->name, hdr->value)) | 1165 | if (!OCSP_REQ_CTX_add1_header(ctx, hdr->name, hdr->value)) |
| 1321 | goto err; | 1166 | goto err; |
| 1322 | } | 1167 | } |
| 1323 | 1168 | ||
| 1324 | if (!OCSP_REQ_CTX_set1_req(ctx, req)) | 1169 | if (!OCSP_REQ_CTX_set1_req(ctx, req)) |
| 1325 | goto err; | 1170 | goto err; |
| 1326 | 1171 | ||
| 1327 | for (;;) | 1172 | for (;;) { |
| 1328 | { | ||
| 1329 | rv = OCSP_sendreq_nbio(&rsp, ctx); | 1173 | rv = OCSP_sendreq_nbio(&rsp, ctx); |
| 1330 | if (rv != -1) | 1174 | if (rv != -1) |
| 1331 | break; | 1175 | break; |
| @@ -1336,70 +1180,65 @@ static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path, | |||
| 1336 | tv.tv_usec = 0; | 1180 | tv.tv_usec = 0; |
| 1337 | tv.tv_sec = req_timeout; | 1181 | tv.tv_sec = req_timeout; |
| 1338 | if (BIO_should_read(cbio)) | 1182 | if (BIO_should_read(cbio)) |
| 1339 | rv = select(fd + 1, (void *)&confds, NULL, NULL, &tv); | 1183 | rv = select(fd + 1, (void *) &confds, NULL, NULL, &tv); |
| 1340 | else if (BIO_should_write(cbio)) | 1184 | else if (BIO_should_write(cbio)) |
| 1341 | rv = select(fd + 1, NULL, (void *)&confds, NULL, &tv); | 1185 | rv = select(fd + 1, NULL, (void *) &confds, NULL, &tv); |
| 1342 | else | 1186 | else { |
| 1343 | { | ||
| 1344 | BIO_puts(err, "Unexpected retry condition\n"); | 1187 | BIO_puts(err, "Unexpected retry condition\n"); |
| 1345 | goto err; | 1188 | goto err; |
| 1346 | } | 1189 | } |
| 1347 | if (rv == 0) | 1190 | if (rv == 0) { |
| 1348 | { | ||
| 1349 | BIO_puts(err, "Timeout on request\n"); | 1191 | BIO_puts(err, "Timeout on request\n"); |
| 1350 | break; | 1192 | break; |
| 1351 | } | 1193 | } |
| 1352 | if (rv == -1) | 1194 | if (rv == -1) { |
| 1353 | { | ||
| 1354 | BIO_puts(err, "Select error\n"); | 1195 | BIO_puts(err, "Select error\n"); |
| 1355 | break; | 1196 | break; |
| 1356 | } | ||
| 1357 | |||
| 1358 | } | 1197 | } |
| 1359 | err: | 1198 | } |
| 1199 | err: | ||
| 1360 | if (ctx) | 1200 | if (ctx) |
| 1361 | OCSP_REQ_CTX_free(ctx); | 1201 | OCSP_REQ_CTX_free(ctx); |
| 1362 | 1202 | ||
| 1363 | return rsp; | 1203 | return rsp; |
| 1364 | } | 1204 | } |
| 1365 | 1205 | ||
| 1366 | OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req, | 1206 | OCSP_RESPONSE * |
| 1367 | char *host, char *path, char *port, int use_ssl, | 1207 | process_responder(BIO * err, OCSP_REQUEST * req, |
| 1368 | STACK_OF(CONF_VALUE) *headers, | 1208 | char *host, char *path, char *port, int use_ssl, |
| 1369 | int req_timeout) | 1209 | STACK_OF(CONF_VALUE) * headers, |
| 1370 | { | 1210 | int req_timeout) |
| 1211 | { | ||
| 1371 | BIO *cbio = NULL; | 1212 | BIO *cbio = NULL; |
| 1372 | SSL_CTX *ctx = NULL; | 1213 | SSL_CTX *ctx = NULL; |
| 1373 | OCSP_RESPONSE *resp = NULL; | 1214 | OCSP_RESPONSE *resp = NULL; |
| 1374 | cbio = BIO_new_connect(host); | 1215 | cbio = BIO_new_connect(host); |
| 1375 | if (!cbio) | 1216 | if (!cbio) { |
| 1376 | { | ||
| 1377 | BIO_printf(err, "Error creating connect BIO\n"); | 1217 | BIO_printf(err, "Error creating connect BIO\n"); |
| 1378 | goto end; | 1218 | goto end; |
| 1379 | } | 1219 | } |
| 1380 | if (port) BIO_set_conn_port(cbio, port); | 1220 | if (port) |
| 1381 | if (use_ssl == 1) | 1221 | BIO_set_conn_port(cbio, port); |
| 1382 | { | 1222 | if (use_ssl == 1) { |
| 1383 | BIO *sbio; | 1223 | BIO *sbio; |
| 1384 | ctx = SSL_CTX_new(SSLv23_client_method()); | 1224 | ctx = SSL_CTX_new(SSLv23_client_method()); |
| 1385 | if (ctx == NULL) | 1225 | if (ctx == NULL) { |
| 1386 | { | ||
| 1387 | BIO_printf(err, "Error creating SSL context.\n"); | 1226 | BIO_printf(err, "Error creating SSL context.\n"); |
| 1388 | goto end; | 1227 | goto end; |
| 1389 | } | 1228 | } |
| 1390 | SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY); | 1229 | SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY); |
| 1391 | sbio = BIO_new_ssl(ctx, 1); | 1230 | sbio = BIO_new_ssl(ctx, 1); |
| 1392 | cbio = BIO_push(sbio, cbio); | 1231 | cbio = BIO_push(sbio, cbio); |
| 1393 | } | 1232 | } |
| 1394 | resp = query_responder(err, cbio, path, headers, req, req_timeout); | 1233 | resp = query_responder(err, cbio, path, headers, req, req_timeout); |
| 1395 | if (!resp) | 1234 | if (!resp) |
| 1396 | BIO_printf(bio_err, "Error querying OCSP responder\n"); | 1235 | BIO_printf(bio_err, "Error querying OCSP responder\n"); |
| 1397 | end: | 1236 | end: |
| 1398 | if (cbio) | 1237 | if (cbio) |
| 1399 | BIO_free_all(cbio); | 1238 | BIO_free_all(cbio); |
| 1400 | if (ctx) | 1239 | if (ctx) |
| 1401 | SSL_CTX_free(ctx); | 1240 | SSL_CTX_free(ctx); |
| 1402 | return resp; | 1241 | return resp; |
| 1403 | } | 1242 | } |
| 1404 | 1243 | ||
| 1405 | #endif | 1244 | #endif |
diff --git a/src/lib/libssl/src/apps/openssl.c b/src/lib/libssl/src/apps/openssl.c index 8b2f699cba..9f01e3c576 100644 --- a/src/lib/libssl/src/apps/openssl.c +++ b/src/lib/libssl/src/apps/openssl.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written |
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). |
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. |
| 8 | * | 8 | * |
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as |
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions |
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, |
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation |
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms |
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). |
| 15 | * | 15 | * |
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in |
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. |
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution |
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. |
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or |
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. |
| 22 | * | 22 | * |
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without |
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions |
| 25 | * are met: | 25 | * are met: |
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" |
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library |
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). |
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from |
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: |
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" |
| 40 | * | 40 | * |
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. |
| 52 | * | 52 | * |
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or |
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be |
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence |
| @@ -63,7 +63,7 @@ | |||
| 63 | * are met: | 63 | * are met: |
| 64 | * | 64 | * |
| 65 | * 1. Redistributions of source code must retain the above copyright | 65 | * 1. Redistributions of source code must retain the above copyright |
| 66 | * notice, this list of conditions and the following disclaimer. | 66 | * notice, this list of conditions and the following disclaimer. |
| 67 | * | 67 | * |
| 68 | * 2. Redistributions in binary form must reproduce the above copyright | 68 | * 2. Redistributions in binary form must reproduce the above copyright |
| 69 | * notice, this list of conditions and the following disclaimer in | 69 | * notice, this list of conditions and the following disclaimer in |
| @@ -113,7 +113,8 @@ | |||
| 113 | #include <stdio.h> | 113 | #include <stdio.h> |
| 114 | #include <string.h> | 114 | #include <string.h> |
| 115 | #include <stdlib.h> | 115 | #include <stdlib.h> |
| 116 | #define OPENSSL_C /* tells apps.h to use complete apps_startup() */ | 116 | #define OPENSSL_C /* tells apps.h to use complete |
| 117 | * apps_startup() */ | ||
| 117 | #include "apps.h" | 118 | #include "apps.h" |
| 118 | #include <openssl/bio.h> | 119 | #include <openssl/bio.h> |
| 119 | #include <openssl/crypto.h> | 120 | #include <openssl/crypto.h> |
| @@ -135,256 +136,236 @@ | |||
| 135 | * type of "FUNCTION*"). This removes the necessity for macro-generated wrapper | 136 | * type of "FUNCTION*"). This removes the necessity for macro-generated wrapper |
| 136 | * functions. */ | 137 | * functions. */ |
| 137 | 138 | ||
| 138 | static LHASH_OF(FUNCTION) *prog_init(void ); | 139 | static LHASH_OF(FUNCTION) * prog_init(void); |
| 139 | static int do_cmd(LHASH_OF(FUNCTION) *prog,int argc,char *argv[]); | 140 | static int do_cmd(LHASH_OF(FUNCTION) * prog, int argc, char *argv[]); |
| 140 | static void list_pkey(BIO *out); | 141 | static void list_pkey(BIO * out); |
| 141 | static void list_cipher(BIO *out); | 142 | static void list_cipher(BIO * out); |
| 142 | static void list_md(BIO *out); | 143 | static void list_md(BIO * out); |
| 143 | char *default_config_file=NULL; | 144 | char *default_config_file = NULL; |
| 144 | 145 | ||
| 145 | CONF *config=NULL; | 146 | CONF *config = NULL; |
| 146 | BIO *bio_err=NULL; | 147 | BIO *bio_err = NULL; |
| 147 | 148 | ||
| 148 | static void lock_dbg_cb(int mode, int type, const char *file, int line) | 149 | static void |
| 149 | { | 150 | lock_dbg_cb(int mode, int type, const char *file, int line) |
| 150 | static int modes[CRYPTO_NUM_LOCKS]; /* = {0, 0, ... } */ | 151 | { |
| 152 | static int modes[CRYPTO_NUM_LOCKS]; /* = {0, 0, ... } */ | ||
| 151 | const char *errstr = NULL; | 153 | const char *errstr = NULL; |
| 152 | int rw; | 154 | int rw; |
| 153 | 155 | ||
| 154 | rw = mode & (CRYPTO_READ|CRYPTO_WRITE); | 156 | rw = mode & (CRYPTO_READ | CRYPTO_WRITE); |
| 155 | if (!((rw == CRYPTO_READ) || (rw == CRYPTO_WRITE))) | 157 | if (!((rw == CRYPTO_READ) || (rw == CRYPTO_WRITE))) { |
| 156 | { | ||
| 157 | errstr = "invalid mode"; | 158 | errstr = "invalid mode"; |
| 158 | goto err; | 159 | goto err; |
| 159 | } | 160 | } |
| 160 | 161 | if (type < 0 || type >= CRYPTO_NUM_LOCKS) { | |
| 161 | if (type < 0 || type >= CRYPTO_NUM_LOCKS) | ||
| 162 | { | ||
| 163 | errstr = "type out of bounds"; | 162 | errstr = "type out of bounds"; |
| 164 | goto err; | 163 | goto err; |
| 165 | } | 164 | } |
| 166 | 165 | if (mode & CRYPTO_LOCK) { | |
| 167 | if (mode & CRYPTO_LOCK) | 166 | if (modes[type]) { |
| 168 | { | ||
| 169 | if (modes[type]) | ||
| 170 | { | ||
| 171 | errstr = "already locked"; | 167 | errstr = "already locked"; |
| 172 | /* must not happen in a single-threaded program | 168 | /* |
| 173 | * (would deadlock) */ | 169 | * must not happen in a single-threaded program |
| 170 | * (would deadlock) | ||
| 171 | */ | ||
| 174 | goto err; | 172 | goto err; |
| 175 | } | ||
| 176 | |||
| 177 | modes[type] = rw; | ||
| 178 | } | 173 | } |
| 179 | else if (mode & CRYPTO_UNLOCK) | 174 | modes[type] = rw; |
| 180 | { | 175 | } else if (mode & CRYPTO_UNLOCK) { |
| 181 | if (!modes[type]) | 176 | if (!modes[type]) { |
| 182 | { | ||
| 183 | errstr = "not locked"; | 177 | errstr = "not locked"; |
| 184 | goto err; | 178 | goto err; |
| 185 | } | 179 | } |
| 186 | 180 | if (modes[type] != rw) { | |
| 187 | if (modes[type] != rw) | ||
| 188 | { | ||
| 189 | errstr = (rw == CRYPTO_READ) ? | 181 | errstr = (rw == CRYPTO_READ) ? |
| 190 | "CRYPTO_r_unlock on write lock" : | 182 | "CRYPTO_r_unlock on write lock" : |
| 191 | "CRYPTO_w_unlock on read lock"; | 183 | "CRYPTO_w_unlock on read lock"; |
| 192 | } | ||
| 193 | |||
| 194 | modes[type] = 0; | ||
| 195 | } | 184 | } |
| 196 | else | 185 | modes[type] = 0; |
| 197 | { | 186 | } else { |
| 198 | errstr = "invalid mode"; | 187 | errstr = "invalid mode"; |
| 199 | goto err; | 188 | goto err; |
| 200 | } | 189 | } |
| 201 | 190 | ||
| 202 | err: | 191 | err: |
| 203 | if (errstr) | 192 | if (errstr) { |
| 204 | { | ||
| 205 | /* we cannot use bio_err here */ | 193 | /* we cannot use bio_err here */ |
| 206 | fprintf(stderr, "openssl (lock_dbg_cb): %s (mode=%d, type=%d) at %s:%d\n", | 194 | fprintf(stderr, "openssl (lock_dbg_cb): %s (mode=%d, type=%d) at %s:%d\n", |
| 207 | errstr, mode, type, file, line); | 195 | errstr, mode, type, file, line); |
| 208 | } | ||
| 209 | } | 196 | } |
| 197 | } | ||
| 210 | 198 | ||
| 211 | # define ARGV Argv | 199 | #define ARGV Argv |
| 212 | 200 | ||
| 213 | int main(int Argc, char *ARGV[]) | 201 | int |
| 214 | { | 202 | main(int Argc, char *ARGV[]) |
| 203 | { | ||
| 215 | ARGS arg; | 204 | ARGS arg; |
| 216 | #define PROG_NAME_SIZE 39 | 205 | #define PROG_NAME_SIZE 39 |
| 217 | char pname[PROG_NAME_SIZE+1]; | 206 | char pname[PROG_NAME_SIZE + 1]; |
| 218 | FUNCTION f,*fp; | 207 | FUNCTION f, *fp; |
| 219 | const char *prompt; | 208 | const char *prompt; |
| 220 | char buf[1024]; | 209 | char buf[1024]; |
| 221 | char *to_free=NULL; | 210 | char *to_free = NULL; |
| 222 | int n,i,ret=0; | 211 | int n, i, ret = 0; |
| 223 | int argc; | 212 | int argc; |
| 224 | char **argv,*p; | 213 | char **argv, *p; |
| 225 | LHASH_OF(FUNCTION) *prog=NULL; | 214 | LHASH_OF(FUNCTION) * prog = NULL; |
| 226 | long errline; | 215 | long errline; |
| 227 | 216 | ||
| 228 | arg.data=NULL; | 217 | arg.data = NULL; |
| 229 | arg.count=0; | 218 | arg.count = 0; |
| 230 | 219 | ||
| 231 | if (bio_err == NULL) | 220 | if (bio_err == NULL) |
| 232 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) | 221 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 233 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); | 222 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 234 | 223 | ||
| 235 | if (getenv("OPENSSL_DEBUG_MEMORY") != NULL) /* if not defined, use compiled-in library defaults */ | 224 | if (getenv("OPENSSL_DEBUG_MEMORY") != NULL) { /* if not defined, use |
| 236 | { | 225 | * compiled-in library |
| 237 | if (!(0 == strcmp(getenv("OPENSSL_DEBUG_MEMORY"), "off"))) | 226 | * defaults */ |
| 238 | { | 227 | if (!(0 == strcmp(getenv("OPENSSL_DEBUG_MEMORY"), "off"))) { |
| 239 | CRYPTO_malloc_debug_init(); | 228 | CRYPTO_malloc_debug_init(); |
| 240 | CRYPTO_set_mem_debug_options(V_CRYPTO_MDEBUG_ALL); | 229 | CRYPTO_set_mem_debug_options(V_CRYPTO_MDEBUG_ALL); |
| 241 | } | 230 | } else { |
| 242 | else | ||
| 243 | { | ||
| 244 | /* OPENSSL_DEBUG_MEMORY=off */ | 231 | /* OPENSSL_DEBUG_MEMORY=off */ |
| 245 | CRYPTO_set_mem_debug_functions(0, 0, 0, 0, 0); | 232 | CRYPTO_set_mem_debug_functions(0, 0, 0, 0, 0); |
| 246 | } | ||
| 247 | } | 233 | } |
| 234 | } | ||
| 248 | CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON); | 235 | CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON); |
| 249 | 236 | ||
| 250 | #if 0 | 237 | #if 0 |
| 251 | if (getenv("OPENSSL_DEBUG_LOCKING") != NULL) | 238 | if (getenv("OPENSSL_DEBUG_LOCKING") != NULL) |
| 252 | #endif | 239 | #endif |
| 253 | { | 240 | { |
| 254 | CRYPTO_set_locking_callback(lock_dbg_cb); | 241 | CRYPTO_set_locking_callback(lock_dbg_cb); |
| 255 | } | 242 | } |
| 256 | 243 | if (getenv("OPENSSL_FIPS")) { | |
| 257 | if(getenv("OPENSSL_FIPS")) { | ||
| 258 | #ifdef OPENSSL_FIPS | 244 | #ifdef OPENSSL_FIPS |
| 259 | if (!FIPS_mode_set(1)) { | 245 | if (!FIPS_mode_set(1)) { |
| 260 | ERR_load_crypto_strings(); | 246 | ERR_load_crypto_strings(); |
| 261 | ERR_print_errors(BIO_new_fp(stderr,BIO_NOCLOSE)); | 247 | ERR_print_errors(BIO_new_fp(stderr, BIO_NOCLOSE)); |
| 262 | exit(1); | 248 | exit(1); |
| 263 | } | 249 | } |
| 264 | #else | 250 | #else |
| 265 | fprintf(stderr, "FIPS mode not supported.\n"); | 251 | fprintf(stderr, "FIPS mode not supported.\n"); |
| 266 | exit(1); | 252 | exit(1); |
| 267 | #endif | 253 | #endif |
| 268 | } | 254 | } |
| 269 | |||
| 270 | apps_startup(); | 255 | apps_startup(); |
| 271 | 256 | ||
| 272 | /* Lets load up our environment a little */ | 257 | /* Lets load up our environment a little */ |
| 273 | p=getenv("OPENSSL_CONF"); | 258 | p = getenv("OPENSSL_CONF"); |
| 274 | if (p == NULL) | 259 | if (p == NULL) |
| 275 | p=getenv("SSLEAY_CONF"); | 260 | p = getenv("SSLEAY_CONF"); |
| 276 | if (p == NULL) | 261 | if (p == NULL) |
| 277 | p=to_free=make_config_name(); | 262 | p = to_free = make_config_name(); |
| 278 | 263 | ||
| 279 | default_config_file=p; | 264 | default_config_file = p; |
| 280 | 265 | ||
| 281 | config=NCONF_new(NULL); | 266 | config = NCONF_new(NULL); |
| 282 | i=NCONF_load(config,p,&errline); | 267 | i = NCONF_load(config, p, &errline); |
| 283 | if (i == 0) | 268 | if (i == 0) { |
| 284 | { | ||
| 285 | if (ERR_GET_REASON(ERR_peek_last_error()) | 269 | if (ERR_GET_REASON(ERR_peek_last_error()) |
| 286 | == CONF_R_NO_SUCH_FILE) | 270 | == CONF_R_NO_SUCH_FILE) { |
| 287 | { | ||
| 288 | BIO_printf(bio_err, | 271 | BIO_printf(bio_err, |
| 289 | "WARNING: can't open config file: %s\n",p); | 272 | "WARNING: can't open config file: %s\n", p); |
| 290 | ERR_clear_error(); | 273 | ERR_clear_error(); |
| 291 | NCONF_free(config); | 274 | NCONF_free(config); |
| 292 | config = NULL; | 275 | config = NULL; |
| 293 | } | 276 | } else { |
| 294 | else | ||
| 295 | { | ||
| 296 | ERR_print_errors(bio_err); | 277 | ERR_print_errors(bio_err); |
| 297 | NCONF_free(config); | 278 | NCONF_free(config); |
| 298 | exit(1); | 279 | exit(1); |
| 299 | } | ||
| 300 | } | 280 | } |
| 301 | 281 | } | |
| 302 | prog=prog_init(); | 282 | prog = prog_init(); |
| 303 | 283 | ||
| 304 | /* first check the program name */ | 284 | /* first check the program name */ |
| 305 | program_name(Argv[0],pname,sizeof pname); | 285 | program_name(Argv[0], pname, sizeof pname); |
| 306 | |||
| 307 | f.name=pname; | ||
| 308 | fp=lh_FUNCTION_retrieve(prog,&f); | ||
| 309 | if (fp != NULL) | ||
| 310 | { | ||
| 311 | Argv[0]=pname; | ||
| 312 | ret=fp->func(Argc,Argv); | ||
| 313 | goto end; | ||
| 314 | } | ||
| 315 | 286 | ||
| 316 | /* ok, now check that there are not arguments, if there are, | 287 | f.name = pname; |
| 317 | * run with them, shifting the ssleay off the front */ | 288 | fp = lh_FUNCTION_retrieve(prog, &f); |
| 318 | if (Argc != 1) | 289 | if (fp != NULL) { |
| 319 | { | 290 | Argv[0] = pname; |
| 291 | ret = fp->func(Argc, Argv); | ||
| 292 | goto end; | ||
| 293 | } | ||
| 294 | /* | ||
| 295 | * ok, now check that there are not arguments, if there are, run with | ||
| 296 | * them, shifting the ssleay off the front | ||
| 297 | */ | ||
| 298 | if (Argc != 1) { | ||
| 320 | Argc--; | 299 | Argc--; |
| 321 | Argv++; | 300 | Argv++; |
| 322 | ret=do_cmd(prog,Argc,Argv); | 301 | ret = do_cmd(prog, Argc, Argv); |
| 323 | if (ret < 0) ret=0; | 302 | if (ret < 0) |
| 303 | ret = 0; | ||
| 324 | goto end; | 304 | goto end; |
| 325 | } | 305 | } |
| 326 | |||
| 327 | /* ok, lets enter the old 'OpenSSL>' mode */ | 306 | /* ok, lets enter the old 'OpenSSL>' mode */ |
| 328 | 307 | ||
| 329 | for (;;) | 308 | for (;;) { |
| 330 | { | 309 | ret = 0; |
| 331 | ret=0; | 310 | p = buf; |
| 332 | p=buf; | 311 | n = sizeof buf; |
| 333 | n=sizeof buf; | 312 | i = 0; |
| 334 | i=0; | 313 | for (;;) { |
| 335 | for (;;) | 314 | p[0] = '\0'; |
| 336 | { | ||
| 337 | p[0]='\0'; | ||
| 338 | if (i++) | 315 | if (i++) |
| 339 | prompt=">"; | 316 | prompt = ">"; |
| 340 | else prompt="OpenSSL> "; | 317 | else |
| 341 | fputs(prompt,stdout); | 318 | prompt = "OpenSSL> "; |
| 319 | fputs(prompt, stdout); | ||
| 342 | fflush(stdout); | 320 | fflush(stdout); |
| 343 | if (!fgets(p,n,stdin)) | 321 | if (!fgets(p, n, stdin)) |
| 344 | goto end; | 322 | goto end; |
| 345 | if (p[0] == '\0') goto end; | 323 | if (p[0] == '\0') |
| 346 | i=strlen(p); | 324 | goto end; |
| 347 | if (i <= 1) break; | 325 | i = strlen(p); |
| 348 | if (p[i-2] != '\\') break; | 326 | if (i <= 1) |
| 349 | i-=2; | 327 | break; |
| 350 | p+=i; | 328 | if (p[i - 2] != '\\') |
| 351 | n-=i; | 329 | break; |
| 352 | } | 330 | i -= 2; |
| 353 | if (!chopup_args(&arg,buf,&argc,&argv)) break; | 331 | p += i; |
| 332 | n -= i; | ||
| 333 | } | ||
| 334 | if (!chopup_args(&arg, buf, &argc, &argv)) | ||
| 335 | break; | ||
| 354 | 336 | ||
| 355 | ret=do_cmd(prog,argc,argv); | 337 | ret = do_cmd(prog, argc, argv); |
| 356 | if (ret < 0) | 338 | if (ret < 0) { |
| 357 | { | 339 | ret = 0; |
| 358 | ret=0; | ||
| 359 | goto end; | 340 | goto end; |
| 360 | } | ||
| 361 | if (ret != 0) | ||
| 362 | BIO_printf(bio_err,"error in %s\n",argv[0]); | ||
| 363 | (void)BIO_flush(bio_err); | ||
| 364 | } | 341 | } |
| 365 | BIO_printf(bio_err,"bad exit\n"); | 342 | if (ret != 0) |
| 366 | ret=1; | 343 | BIO_printf(bio_err, "error in %s\n", argv[0]); |
| 344 | (void) BIO_flush(bio_err); | ||
| 345 | } | ||
| 346 | BIO_printf(bio_err, "bad exit\n"); | ||
| 347 | ret = 1; | ||
| 367 | end: | 348 | end: |
| 368 | if (to_free) | 349 | if (to_free) |
| 369 | free(to_free); | 350 | free(to_free); |
| 370 | if (config != NULL) | 351 | if (config != NULL) { |
| 371 | { | ||
| 372 | NCONF_free(config); | 352 | NCONF_free(config); |
| 373 | config=NULL; | 353 | config = NULL; |
| 374 | } | 354 | } |
| 375 | if (prog != NULL) lh_FUNCTION_free(prog); | 355 | if (prog != NULL) |
| 376 | if (arg.data != NULL) free(arg.data); | 356 | lh_FUNCTION_free(prog); |
| 357 | if (arg.data != NULL) | ||
| 358 | free(arg.data); | ||
| 377 | 359 | ||
| 378 | apps_shutdown(); | 360 | apps_shutdown(); |
| 379 | 361 | ||
| 380 | CRYPTO_mem_leaks(bio_err); | 362 | CRYPTO_mem_leaks(bio_err); |
| 381 | if (bio_err != NULL) | 363 | if (bio_err != NULL) { |
| 382 | { | ||
| 383 | BIO_free(bio_err); | 364 | BIO_free(bio_err); |
| 384 | bio_err=NULL; | 365 | bio_err = NULL; |
| 385 | } | ||
| 386 | return(ret); | ||
| 387 | } | 366 | } |
| 367 | return (ret); | ||
| 368 | } | ||
| 388 | 369 | ||
| 389 | #define LIST_STANDARD_COMMANDS "list-standard-commands" | 370 | #define LIST_STANDARD_COMMANDS "list-standard-commands" |
| 390 | #define LIST_MESSAGE_DIGEST_COMMANDS "list-message-digest-commands" | 371 | #define LIST_MESSAGE_DIGEST_COMMANDS "list-message-digest-commands" |
| @@ -394,257 +375,241 @@ end: | |||
| 394 | #define LIST_PUBLIC_KEY_ALGORITHMS "list-public-key-algorithms" | 375 | #define LIST_PUBLIC_KEY_ALGORITHMS "list-public-key-algorithms" |
| 395 | 376 | ||
| 396 | 377 | ||
| 397 | static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[]) | 378 | static int |
| 398 | { | 379 | do_cmd(LHASH_OF(FUNCTION) * prog, int argc, char *argv[]) |
| 399 | FUNCTION f,*fp; | 380 | { |
| 400 | int i,ret=1,tp,nl; | 381 | FUNCTION f, *fp; |
| 401 | 382 | int i, ret = 1, tp, nl; | |
| 402 | if ((argc <= 0) || (argv[0] == NULL)) | 383 | |
| 403 | { ret=0; goto end; } | 384 | if ((argc <= 0) || (argv[0] == NULL)) { |
| 404 | f.name=argv[0]; | 385 | ret = 0; |
| 405 | fp=lh_FUNCTION_retrieve(prog,&f); | 386 | goto end; |
| 406 | if (fp == NULL) | 387 | } |
| 407 | { | 388 | f.name = argv[0]; |
| 408 | if (EVP_get_digestbyname(argv[0])) | 389 | fp = lh_FUNCTION_retrieve(prog, &f); |
| 409 | { | 390 | if (fp == NULL) { |
| 391 | if (EVP_get_digestbyname(argv[0])) { | ||
| 410 | f.type = FUNC_TYPE_MD; | 392 | f.type = FUNC_TYPE_MD; |
| 411 | f.func = dgst_main; | 393 | f.func = dgst_main; |
| 412 | fp = &f; | 394 | fp = &f; |
| 413 | } | 395 | } else if (EVP_get_cipherbyname(argv[0])) { |
| 414 | else if (EVP_get_cipherbyname(argv[0])) | ||
| 415 | { | ||
| 416 | f.type = FUNC_TYPE_CIPHER; | 396 | f.type = FUNC_TYPE_CIPHER; |
| 417 | f.func = enc_main; | 397 | f.func = enc_main; |
| 418 | fp = &f; | 398 | fp = &f; |
| 419 | } | ||
| 420 | } | 399 | } |
| 421 | if (fp != NULL) | 400 | } |
| 422 | { | 401 | if (fp != NULL) { |
| 423 | ret=fp->func(argc,argv); | 402 | ret = fp->func(argc, argv); |
| 424 | } | 403 | } else if ((strncmp(argv[0], "no-", 3)) == 0) { |
| 425 | else if ((strncmp(argv[0],"no-",3)) == 0) | 404 | BIO *bio_stdout = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 426 | { | 405 | f.name = argv[0] + 3; |
| 427 | BIO *bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE); | 406 | ret = (lh_FUNCTION_retrieve(prog, &f) != NULL); |
| 428 | f.name=argv[0]+3; | ||
| 429 | ret = (lh_FUNCTION_retrieve(prog,&f) != NULL); | ||
| 430 | if (!ret) | 407 | if (!ret) |
| 431 | BIO_printf(bio_stdout, "%s\n", argv[0]); | 408 | BIO_printf(bio_stdout, "%s\n", argv[0]); |
| 432 | else | 409 | else |
| 433 | BIO_printf(bio_stdout, "%s\n", argv[0]+3); | 410 | BIO_printf(bio_stdout, "%s\n", argv[0] + 3); |
| 434 | BIO_free_all(bio_stdout); | 411 | BIO_free_all(bio_stdout); |
| 435 | goto end; | 412 | goto end; |
| 436 | } | 413 | } else if ((strcmp(argv[0], "quit") == 0) || |
| 437 | else if ((strcmp(argv[0],"quit") == 0) || | 414 | (strcmp(argv[0], "q") == 0) || |
| 438 | (strcmp(argv[0],"q") == 0) || | 415 | (strcmp(argv[0], "exit") == 0) || |
| 439 | (strcmp(argv[0],"exit") == 0) || | 416 | (strcmp(argv[0], "bye") == 0)) { |
| 440 | (strcmp(argv[0],"bye") == 0)) | 417 | ret = -1; |
| 441 | { | ||
| 442 | ret= -1; | ||
| 443 | goto end; | 418 | goto end; |
| 444 | } | 419 | } else if ((strcmp(argv[0], LIST_STANDARD_COMMANDS) == 0) || |
| 445 | else if ((strcmp(argv[0],LIST_STANDARD_COMMANDS) == 0) || | 420 | (strcmp(argv[0], LIST_MESSAGE_DIGEST_COMMANDS) == 0) || |
| 446 | (strcmp(argv[0],LIST_MESSAGE_DIGEST_COMMANDS) == 0) || | 421 | (strcmp(argv[0], LIST_MESSAGE_DIGEST_ALGORITHMS) == 0) || |
| 447 | (strcmp(argv[0],LIST_MESSAGE_DIGEST_ALGORITHMS) == 0) || | 422 | (strcmp(argv[0], LIST_CIPHER_COMMANDS) == 0) || |
| 448 | (strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0) || | 423 | (strcmp(argv[0], LIST_CIPHER_ALGORITHMS) == 0) || |
| 449 | (strcmp(argv[0],LIST_CIPHER_ALGORITHMS) == 0) || | 424 | (strcmp(argv[0], LIST_PUBLIC_KEY_ALGORITHMS) == 0)) { |
| 450 | (strcmp(argv[0],LIST_PUBLIC_KEY_ALGORITHMS) == 0)) | ||
| 451 | { | ||
| 452 | int list_type; | 425 | int list_type; |
| 453 | BIO *bio_stdout; | 426 | BIO *bio_stdout; |
| 454 | 427 | ||
| 455 | if (strcmp(argv[0],LIST_STANDARD_COMMANDS) == 0) | 428 | if (strcmp(argv[0], LIST_STANDARD_COMMANDS) == 0) |
| 456 | list_type = FUNC_TYPE_GENERAL; | 429 | list_type = FUNC_TYPE_GENERAL; |
| 457 | else if (strcmp(argv[0],LIST_MESSAGE_DIGEST_COMMANDS) == 0) | 430 | else if (strcmp(argv[0], LIST_MESSAGE_DIGEST_COMMANDS) == 0) |
| 458 | list_type = FUNC_TYPE_MD; | 431 | list_type = FUNC_TYPE_MD; |
| 459 | else if (strcmp(argv[0],LIST_MESSAGE_DIGEST_ALGORITHMS) == 0) | 432 | else if (strcmp(argv[0], LIST_MESSAGE_DIGEST_ALGORITHMS) == 0) |
| 460 | list_type = FUNC_TYPE_MD_ALG; | 433 | list_type = FUNC_TYPE_MD_ALG; |
| 461 | else if (strcmp(argv[0],LIST_PUBLIC_KEY_ALGORITHMS) == 0) | 434 | else if (strcmp(argv[0], LIST_PUBLIC_KEY_ALGORITHMS) == 0) |
| 462 | list_type = FUNC_TYPE_PKEY; | 435 | list_type = FUNC_TYPE_PKEY; |
| 463 | else if (strcmp(argv[0],LIST_CIPHER_ALGORITHMS) == 0) | 436 | else if (strcmp(argv[0], LIST_CIPHER_ALGORITHMS) == 0) |
| 464 | list_type = FUNC_TYPE_CIPHER_ALG; | 437 | list_type = FUNC_TYPE_CIPHER_ALG; |
| 465 | else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */ | 438 | else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */ |
| 466 | list_type = FUNC_TYPE_CIPHER; | 439 | list_type = FUNC_TYPE_CIPHER; |
| 467 | bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE); | 440 | bio_stdout = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 468 | 441 | ||
| 469 | if (!load_config(bio_err, NULL)) | 442 | if (!load_config(bio_err, NULL)) |
| 470 | goto end; | 443 | goto end; |
| 471 | 444 | ||
| 472 | if (list_type == FUNC_TYPE_PKEY) | 445 | if (list_type == FUNC_TYPE_PKEY) |
| 473 | list_pkey(bio_stdout); | 446 | list_pkey(bio_stdout); |
| 474 | if (list_type == FUNC_TYPE_MD_ALG) | 447 | if (list_type == FUNC_TYPE_MD_ALG) |
| 475 | list_md(bio_stdout); | 448 | list_md(bio_stdout); |
| 476 | if (list_type == FUNC_TYPE_CIPHER_ALG) | 449 | if (list_type == FUNC_TYPE_CIPHER_ALG) |
| 477 | list_cipher(bio_stdout); | 450 | list_cipher(bio_stdout); |
| 478 | else | 451 | else { |
| 479 | { | 452 | for (fp = functions; fp->name != NULL; fp++) |
| 480 | for (fp=functions; fp->name != NULL; fp++) | ||
| 481 | if (fp->type == list_type) | 453 | if (fp->type == list_type) |
| 482 | BIO_printf(bio_stdout, "%s\n", | 454 | BIO_printf(bio_stdout, "%s\n", |
| 483 | fp->name); | 455 | fp->name); |
| 484 | } | 456 | } |
| 485 | BIO_free_all(bio_stdout); | 457 | BIO_free_all(bio_stdout); |
| 486 | ret=0; | 458 | ret = 0; |
| 487 | goto end; | 459 | goto end; |
| 488 | } | 460 | } else { |
| 489 | else | 461 | BIO_printf(bio_err, "openssl:Error: '%s' is an invalid command.\n", |
| 490 | { | 462 | argv[0]); |
| 491 | BIO_printf(bio_err,"openssl:Error: '%s' is an invalid command.\n", | ||
| 492 | argv[0]); | ||
| 493 | BIO_printf(bio_err, "\nStandard commands"); | 463 | BIO_printf(bio_err, "\nStandard commands"); |
| 494 | i=0; | 464 | i = 0; |
| 495 | tp=0; | 465 | tp = 0; |
| 496 | for (fp=functions; fp->name != NULL; fp++) | 466 | for (fp = functions; fp->name != NULL; fp++) { |
| 497 | { | 467 | nl = 0; |
| 498 | nl=0; | ||
| 499 | #ifdef OPENSSL_NO_CAMELLIA | 468 | #ifdef OPENSSL_NO_CAMELLIA |
| 500 | if (((i++) % 5) == 0) | 469 | if (((i++) % 5) == 0) |
| 501 | #else | 470 | #else |
| 502 | if (((i++) % 4) == 0) | 471 | if (((i++) % 4) == 0) |
| 503 | #endif | 472 | #endif |
| 504 | { | 473 | { |
| 505 | BIO_printf(bio_err,"\n"); | 474 | BIO_printf(bio_err, "\n"); |
| 506 | nl=1; | 475 | nl = 1; |
| 507 | } | 476 | } |
| 508 | if (fp->type != tp) | 477 | if (fp->type != tp) { |
| 509 | { | 478 | tp = fp->type; |
| 510 | tp=fp->type; | 479 | if (!nl) |
| 511 | if (!nl) BIO_printf(bio_err,"\n"); | 480 | BIO_printf(bio_err, "\n"); |
| 512 | if (tp == FUNC_TYPE_MD) | 481 | if (tp == FUNC_TYPE_MD) { |
| 513 | { | 482 | i = 1; |
| 514 | i=1; | ||
| 515 | BIO_printf(bio_err, | 483 | BIO_printf(bio_err, |
| 516 | "\nMessage Digest commands (see the `dgst' command for more details)\n"); | 484 | "\nMessage Digest commands (see the `dgst' command for more details)\n"); |
| 517 | } | 485 | } else if (tp == FUNC_TYPE_CIPHER) { |
| 518 | else if (tp == FUNC_TYPE_CIPHER) | 486 | i = 1; |
| 519 | { | 487 | BIO_printf(bio_err, "\nCipher commands (see the `enc' command for more details)\n"); |
| 520 | i=1; | ||
| 521 | BIO_printf(bio_err,"\nCipher commands (see the `enc' command for more details)\n"); | ||
| 522 | } | ||
| 523 | } | 488 | } |
| 489 | } | ||
| 524 | #ifdef OPENSSL_NO_CAMELLIA | 490 | #ifdef OPENSSL_NO_CAMELLIA |
| 525 | BIO_printf(bio_err,"%-15s",fp->name); | 491 | BIO_printf(bio_err, "%-15s", fp->name); |
| 526 | #else | 492 | #else |
| 527 | BIO_printf(bio_err,"%-18s",fp->name); | 493 | BIO_printf(bio_err, "%-18s", fp->name); |
| 528 | #endif | 494 | #endif |
| 529 | } | ||
| 530 | BIO_printf(bio_err,"\n\n"); | ||
| 531 | ret=0; | ||
| 532 | } | 495 | } |
| 533 | end: | 496 | BIO_printf(bio_err, "\n\n"); |
| 534 | return(ret); | 497 | ret = 0; |
| 535 | } | 498 | } |
| 536 | 499 | end: | |
| 537 | static int SortFnByName(const void *_f1,const void *_f2) | 500 | return (ret); |
| 538 | { | 501 | } |
| 539 | const FUNCTION *f1=_f1; | 502 | |
| 540 | const FUNCTION *f2=_f2; | 503 | static int |
| 541 | 504 | SortFnByName(const void *_f1, const void *_f2) | |
| 542 | if(f1->type != f2->type) | 505 | { |
| 543 | return f1->type-f2->type; | 506 | const FUNCTION *f1 = _f1; |
| 544 | return strcmp(f1->name,f2->name); | 507 | const FUNCTION *f2 = _f2; |
| 545 | } | 508 | |
| 546 | 509 | if (f1->type != f2->type) | |
| 547 | static void list_pkey(BIO *out) | 510 | return f1->type - f2->type; |
| 548 | { | 511 | return strcmp(f1->name, f2->name); |
| 512 | } | ||
| 513 | |||
| 514 | static void | ||
| 515 | list_pkey(BIO * out) | ||
| 516 | { | ||
| 549 | int i; | 517 | int i; |
| 550 | for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) | 518 | for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) { |
| 551 | { | ||
| 552 | const EVP_PKEY_ASN1_METHOD *ameth; | 519 | const EVP_PKEY_ASN1_METHOD *ameth; |
| 553 | int pkey_id, pkey_base_id, pkey_flags; | 520 | int pkey_id, pkey_base_id, pkey_flags; |
| 554 | const char *pinfo, *pem_str; | 521 | const char *pinfo, *pem_str; |
| 555 | ameth = EVP_PKEY_asn1_get0(i); | 522 | ameth = EVP_PKEY_asn1_get0(i); |
| 556 | EVP_PKEY_asn1_get0_info(&pkey_id, &pkey_base_id, &pkey_flags, | 523 | EVP_PKEY_asn1_get0_info(&pkey_id, &pkey_base_id, &pkey_flags, |
| 557 | &pinfo, &pem_str, ameth); | 524 | &pinfo, &pem_str, ameth); |
| 558 | if (pkey_flags & ASN1_PKEY_ALIAS) | 525 | if (pkey_flags & ASN1_PKEY_ALIAS) { |
| 559 | { | 526 | BIO_printf(out, "Name: %s\n", |
| 560 | BIO_printf(out, "Name: %s\n", | 527 | OBJ_nid2ln(pkey_id)); |
| 561 | OBJ_nid2ln(pkey_id)); | ||
| 562 | BIO_printf(out, "\tType: Alias to %s\n", | 528 | BIO_printf(out, "\tType: Alias to %s\n", |
| 563 | OBJ_nid2ln(pkey_base_id)); | 529 | OBJ_nid2ln(pkey_base_id)); |
| 564 | } | 530 | } else { |
| 565 | else | ||
| 566 | { | ||
| 567 | BIO_printf(out, "Name: %s\n", pinfo); | 531 | BIO_printf(out, "Name: %s\n", pinfo); |
| 568 | BIO_printf(out, "\tType: %s Algorithm\n", | 532 | BIO_printf(out, "\tType: %s Algorithm\n", |
| 569 | pkey_flags & ASN1_PKEY_DYNAMIC ? | 533 | pkey_flags & ASN1_PKEY_DYNAMIC ? |
| 570 | "External" : "Builtin"); | 534 | "External" : "Builtin"); |
| 571 | BIO_printf(out, "\tOID: %s\n", OBJ_nid2ln(pkey_id)); | 535 | BIO_printf(out, "\tOID: %s\n", OBJ_nid2ln(pkey_id)); |
| 572 | if (pem_str == NULL) | 536 | if (pem_str == NULL) |
| 573 | pem_str = "(none)"; | 537 | pem_str = "(none)"; |
| 574 | BIO_printf(out, "\tPEM string: %s\n", pem_str); | 538 | BIO_printf(out, "\tPEM string: %s\n", pem_str); |
| 575 | } | ||
| 576 | |||
| 577 | } | 539 | } |
| 540 | |||
| 578 | } | 541 | } |
| 542 | } | ||
| 579 | 543 | ||
| 580 | static void list_cipher_fn(const EVP_CIPHER *c, | 544 | static void |
| 581 | const char *from, const char *to, void *arg) | 545 | list_cipher_fn(const EVP_CIPHER * c, |
| 582 | { | 546 | const char *from, const char *to, void *arg) |
| 547 | { | ||
| 583 | if (c) | 548 | if (c) |
| 584 | BIO_printf(arg, "%s\n", EVP_CIPHER_name(c)); | 549 | BIO_printf(arg, "%s\n", EVP_CIPHER_name(c)); |
| 585 | else | 550 | else { |
| 586 | { | ||
| 587 | if (!from) | 551 | if (!from) |
| 588 | from = "<undefined>"; | 552 | from = "<undefined>"; |
| 589 | if (!to) | 553 | if (!to) |
| 590 | to = "<undefined>"; | 554 | to = "<undefined>"; |
| 591 | BIO_printf(arg, "%s => %s\n", from, to); | 555 | BIO_printf(arg, "%s => %s\n", from, to); |
| 592 | } | ||
| 593 | } | 556 | } |
| 557 | } | ||
| 594 | 558 | ||
| 595 | static void list_cipher(BIO *out) | 559 | static void |
| 596 | { | 560 | list_cipher(BIO * out) |
| 561 | { | ||
| 597 | EVP_CIPHER_do_all_sorted(list_cipher_fn, out); | 562 | EVP_CIPHER_do_all_sorted(list_cipher_fn, out); |
| 598 | } | 563 | } |
| 599 | 564 | ||
| 600 | static void list_md_fn(const EVP_MD *m, | 565 | static void |
| 601 | const char *from, const char *to, void *arg) | 566 | list_md_fn(const EVP_MD * m, |
| 602 | { | 567 | const char *from, const char *to, void *arg) |
| 568 | { | ||
| 603 | if (m) | 569 | if (m) |
| 604 | BIO_printf(arg, "%s\n", EVP_MD_name(m)); | 570 | BIO_printf(arg, "%s\n", EVP_MD_name(m)); |
| 605 | else | 571 | else { |
| 606 | { | ||
| 607 | if (!from) | 572 | if (!from) |
| 608 | from = "<undefined>"; | 573 | from = "<undefined>"; |
| 609 | if (!to) | 574 | if (!to) |
| 610 | to = "<undefined>"; | 575 | to = "<undefined>"; |
| 611 | BIO_printf(arg, "%s => %s\n", from, to); | 576 | BIO_printf(arg, "%s => %s\n", from, to); |
| 612 | } | ||
| 613 | } | 577 | } |
| 578 | } | ||
| 614 | 579 | ||
| 615 | static void list_md(BIO *out) | 580 | static void |
| 616 | { | 581 | list_md(BIO * out) |
| 582 | { | ||
| 617 | EVP_MD_do_all_sorted(list_md_fn, out); | 583 | EVP_MD_do_all_sorted(list_md_fn, out); |
| 618 | } | 584 | } |
| 619 | 585 | ||
| 620 | static int function_cmp(const FUNCTION *a, const FUNCTION *b) | 586 | static int |
| 621 | { | 587 | function_cmp(const FUNCTION * a, const FUNCTION * b) |
| 622 | return strncmp(a->name,b->name,8); | 588 | { |
| 623 | } | 589 | return strncmp(a->name, b->name, 8); |
| 624 | static IMPLEMENT_LHASH_COMP_FN(function, FUNCTION) | 590 | } |
| 625 | 591 | static | |
| 626 | static unsigned long function_hash(const FUNCTION *a) | 592 | IMPLEMENT_LHASH_COMP_FN(function, FUNCTION) |
| 627 | { | 593 | static unsigned long function_hash(const FUNCTION * a) |
| 594 | { | ||
| 628 | return lh_strhash(a->name); | 595 | return lh_strhash(a->name); |
| 629 | } | 596 | } |
| 630 | static IMPLEMENT_LHASH_HASH_FN(function, FUNCTION) | 597 | static |
| 631 | 598 | IMPLEMENT_LHASH_HASH_FN(function, FUNCTION) | |
| 632 | static LHASH_OF(FUNCTION) *prog_init(void) | 599 | static LHASH_OF(FUNCTION) * prog_init(void) |
| 633 | { | 600 | { |
| 634 | LHASH_OF(FUNCTION) *ret; | 601 | LHASH_OF(FUNCTION) * ret; |
| 635 | FUNCTION *f; | 602 | FUNCTION *f; |
| 636 | size_t i; | 603 | size_t i; |
| 637 | 604 | ||
| 638 | /* Purely so it looks nice when the user hits ? */ | 605 | /* Purely so it looks nice when the user hits ? */ |
| 639 | for(i=0,f=functions ; f->name != NULL ; ++f,++i) | 606 | for (i = 0, f = functions; f->name != NULL; ++f, ++i); |
| 640 | ; | 607 | qsort(functions, i, sizeof *functions, SortFnByName); |
| 641 | qsort(functions,i,sizeof *functions,SortFnByName); | ||
| 642 | |||
| 643 | if ((ret=lh_FUNCTION_new()) == NULL) | ||
| 644 | return(NULL); | ||
| 645 | 608 | ||
| 646 | for (f=functions; f->name != NULL; f++) | 609 | if ((ret = lh_FUNCTION_new()) == NULL) |
| 647 | (void)lh_FUNCTION_insert(ret,f); | 610 | return (NULL); |
| 648 | return(ret); | ||
| 649 | } | ||
| 650 | 611 | ||
| 612 | for (f = functions; f->name != NULL; f++) | ||
| 613 | (void) lh_FUNCTION_insert(ret, f); | ||
| 614 | return (ret); | ||
| 615 | } | ||
diff --git a/src/lib/libssl/src/apps/passwd.c b/src/lib/libssl/src/apps/passwd.c index 7f99e3fd23..92f6b776b6 100644 --- a/src/lib/libssl/src/apps/passwd.c +++ b/src/lib/libssl/src/apps/passwd.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* apps/passwd.c */ | 1 | /* apps/passwd.c */ |
| 2 | 2 | ||
| 3 | #if defined OPENSSL_NO_MD5 | 3 | #if defined OPENSSL_NO_MD5 |
| 4 | # define NO_MD5CRYPT_1 | 4 | #define NO_MD5CRYPT_1 |
| 5 | #endif | 5 | #endif |
| 6 | 6 | ||
| 7 | #if !defined(OPENSSL_NO_DES) || !defined(NO_MD5CRYPT_1) | 7 | #if !defined(OPENSSL_NO_DES) || !defined(NO_MD5CRYPT_1) |
| @@ -16,10 +16,10 @@ | |||
| 16 | #include <openssl/evp.h> | 16 | #include <openssl/evp.h> |
| 17 | #include <openssl/rand.h> | 17 | #include <openssl/rand.h> |
| 18 | #ifndef OPENSSL_NO_DES | 18 | #ifndef OPENSSL_NO_DES |
| 19 | # include <openssl/des.h> | 19 | #include <openssl/des.h> |
| 20 | #endif | 20 | #endif |
| 21 | #ifndef NO_MD5CRYPT_1 | 21 | #ifndef NO_MD5CRYPT_1 |
| 22 | # include <openssl/md5.h> | 22 | #include <openssl/md5.h> |
| 23 | #endif | 23 | #endif |
| 24 | 24 | ||
| 25 | 25 | ||
| @@ -27,21 +27,22 @@ | |||
| 27 | #define PROG passwd_main | 27 | #define PROG passwd_main |
| 28 | 28 | ||
| 29 | 29 | ||
| 30 | static unsigned const char cov_2char[64]={ | 30 | static unsigned const char cov_2char[64] = { |
| 31 | /* from crypto/des/fcrypt.c */ | 31 | /* from crypto/des/fcrypt.c */ |
| 32 | 0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35, | 32 | 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, |
| 33 | 0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44, | 33 | 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, |
| 34 | 0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C, | 34 | 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, |
| 35 | 0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54, | 35 | 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, |
| 36 | 0x55,0x56,0x57,0x58,0x59,0x5A,0x61,0x62, | 36 | 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, |
| 37 | 0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A, | 37 | 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, |
| 38 | 0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72, | 38 | 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, |
| 39 | 0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A | 39 | 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A |
| 40 | }; | 40 | }; |
| 41 | 41 | ||
| 42 | static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p, | 42 | static int |
| 43 | char *passwd, BIO *out, int quiet, int table, int reverse, | 43 | do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p, |
| 44 | size_t pw_maxlen, int usecrypt, int use1, int useapr1); | 44 | char *passwd, BIO * out, int quiet, int table, int reverse, |
| 45 | size_t pw_maxlen, int usecrypt, int use1, int useapr1); | ||
| 45 | 46 | ||
| 46 | /* -crypt - standard Unix password algorithm (default) | 47 | /* -crypt - standard Unix password algorithm (default) |
| 47 | * -1 - MD5-based password algorithm | 48 | * -1 - MD5-based password algorithm |
| @@ -57,8 +58,9 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p, | |||
| 57 | 58 | ||
| 58 | int MAIN(int, char **); | 59 | int MAIN(int, char **); |
| 59 | 60 | ||
| 60 | int MAIN(int argc, char **argv) | 61 | int |
| 61 | { | 62 | MAIN(int argc, char **argv) |
| 63 | { | ||
| 62 | int ret = 1; | 64 | int ret = 1; |
| 63 | char *infile = NULL; | 65 | char *infile = NULL; |
| 64 | int in_stdin = 0; | 66 | int in_stdin = 0; |
| @@ -76,8 +78,8 @@ int MAIN(int argc, char **argv) | |||
| 76 | apps_startup(); | 78 | apps_startup(); |
| 77 | 79 | ||
| 78 | if (bio_err == NULL) | 80 | if (bio_err == NULL) |
| 79 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) | 81 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 80 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); | 82 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 81 | 83 | ||
| 82 | if (!load_config(bio_err, NULL)) | 84 | if (!load_config(bio_err, NULL)) |
| 83 | goto err; | 85 | goto err; |
| @@ -88,45 +90,32 @@ int MAIN(int argc, char **argv) | |||
| 88 | 90 | ||
| 89 | badopt = 0, opt_done = 0; | 91 | badopt = 0, opt_done = 0; |
| 90 | i = 0; | 92 | i = 0; |
| 91 | while (!badopt && !opt_done && argv[++i] != NULL) | 93 | while (!badopt && !opt_done && argv[++i] != NULL) { |
| 92 | { | ||
| 93 | if (strcmp(argv[i], "-crypt") == 0) | 94 | if (strcmp(argv[i], "-crypt") == 0) |
| 94 | usecrypt = 1; | 95 | usecrypt = 1; |
| 95 | else if (strcmp(argv[i], "-1") == 0) | 96 | else if (strcmp(argv[i], "-1") == 0) |
| 96 | use1 = 1; | 97 | use1 = 1; |
| 97 | else if (strcmp(argv[i], "-apr1") == 0) | 98 | else if (strcmp(argv[i], "-apr1") == 0) |
| 98 | useapr1 = 1; | 99 | useapr1 = 1; |
| 99 | else if (strcmp(argv[i], "-salt") == 0) | 100 | else if (strcmp(argv[i], "-salt") == 0) { |
| 100 | { | 101 | if ((argv[i + 1] != NULL) && (salt == NULL)) { |
| 101 | if ((argv[i+1] != NULL) && (salt == NULL)) | ||
| 102 | { | ||
| 103 | passed_salt = 1; | 102 | passed_salt = 1; |
| 104 | salt = argv[++i]; | 103 | salt = argv[++i]; |
| 105 | } | 104 | } else |
| 106 | else | ||
| 107 | badopt = 1; | 105 | badopt = 1; |
| 108 | } | 106 | } else if (strcmp(argv[i], "-in") == 0) { |
| 109 | else if (strcmp(argv[i], "-in") == 0) | 107 | if ((argv[i + 1] != NULL) && !pw_source_defined) { |
| 110 | { | ||
| 111 | if ((argv[i+1] != NULL) && !pw_source_defined) | ||
| 112 | { | ||
| 113 | pw_source_defined = 1; | 108 | pw_source_defined = 1; |
| 114 | infile = argv[++i]; | 109 | infile = argv[++i]; |
| 115 | } | 110 | } else |
| 116 | else | ||
| 117 | badopt = 1; | 111 | badopt = 1; |
| 118 | } | 112 | } else if (strcmp(argv[i], "-stdin") == 0) { |
| 119 | else if (strcmp(argv[i], "-stdin") == 0) | 113 | if (!pw_source_defined) { |
| 120 | { | ||
| 121 | if (!pw_source_defined) | ||
| 122 | { | ||
| 123 | pw_source_defined = 1; | 114 | pw_source_defined = 1; |
| 124 | in_stdin = 1; | 115 | in_stdin = 1; |
| 125 | } | 116 | } else |
| 126 | else | ||
| 127 | badopt = 1; | 117 | badopt = 1; |
| 128 | } | 118 | } else if (strcmp(argv[i], "-noverify") == 0) |
| 129 | else if (strcmp(argv[i], "-noverify") == 0) | ||
| 130 | in_noverify = 1; | 119 | in_noverify = 1; |
| 131 | else if (strcmp(argv[i], "-quiet") == 0) | 120 | else if (strcmp(argv[i], "-quiet") == 0) |
| 132 | quiet = 1; | 121 | quiet = 1; |
| @@ -138,30 +127,30 @@ int MAIN(int argc, char **argv) | |||
| 138 | badopt = 1; | 127 | badopt = 1; |
| 139 | else if (!pw_source_defined) | 128 | else if (!pw_source_defined) |
| 140 | /* non-option arguments, use as passwords */ | 129 | /* non-option arguments, use as passwords */ |
| 141 | { | 130 | { |
| 142 | pw_source_defined = 1; | 131 | pw_source_defined = 1; |
| 143 | passwds = &argv[i]; | 132 | passwds = &argv[i]; |
| 144 | opt_done = 1; | 133 | opt_done = 1; |
| 145 | } | 134 | } else |
| 146 | else | ||
| 147 | badopt = 1; | 135 | badopt = 1; |
| 148 | } | 136 | } |
| 149 | 137 | ||
| 150 | if (!usecrypt && !use1 && !useapr1) /* use default */ | 138 | if (!usecrypt && !use1 && !useapr1) /* use default */ |
| 151 | usecrypt = 1; | 139 | usecrypt = 1; |
| 152 | if (usecrypt + use1 + useapr1 > 1) /* conflict */ | 140 | if (usecrypt + use1 + useapr1 > 1) /* conflict */ |
| 153 | badopt = 1; | 141 | badopt = 1; |
| 154 | 142 | ||
| 155 | /* reject unsupported algorithms */ | 143 | /* reject unsupported algorithms */ |
| 156 | #ifdef OPENSSL_NO_DES | 144 | #ifdef OPENSSL_NO_DES |
| 157 | if (usecrypt) badopt = 1; | 145 | if (usecrypt) |
| 146 | badopt = 1; | ||
| 158 | #endif | 147 | #endif |
| 159 | #ifdef NO_MD5CRYPT_1 | 148 | #ifdef NO_MD5CRYPT_1 |
| 160 | if (use1 || useapr1) badopt = 1; | 149 | if (use1 || useapr1) |
| 150 | badopt = 1; | ||
| 161 | #endif | 151 | #endif |
| 162 | 152 | ||
| 163 | if (badopt) | 153 | if (badopt) { |
| 164 | { | ||
| 165 | BIO_printf(bio_err, "Usage: passwd [options] [passwords]\n"); | 154 | BIO_printf(bio_err, "Usage: passwd [options] [passwords]\n"); |
| 166 | BIO_printf(bio_err, "where options are\n"); | 155 | BIO_printf(bio_err, "where options are\n"); |
| 167 | #ifndef OPENSSL_NO_DES | 156 | #ifndef OPENSSL_NO_DES |
| @@ -178,35 +167,29 @@ int MAIN(int argc, char **argv) | |||
| 178 | BIO_printf(bio_err, "-quiet no warnings\n"); | 167 | BIO_printf(bio_err, "-quiet no warnings\n"); |
| 179 | BIO_printf(bio_err, "-table format output as table\n"); | 168 | BIO_printf(bio_err, "-table format output as table\n"); |
| 180 | BIO_printf(bio_err, "-reverse switch table columns\n"); | 169 | BIO_printf(bio_err, "-reverse switch table columns\n"); |
| 181 | |||
| 182 | goto err; | ||
| 183 | } | ||
| 184 | 170 | ||
| 185 | if ((infile != NULL) || in_stdin) | 171 | goto err; |
| 186 | { | 172 | } |
| 173 | if ((infile != NULL) || in_stdin) { | ||
| 187 | in = BIO_new(BIO_s_file()); | 174 | in = BIO_new(BIO_s_file()); |
| 188 | if (in == NULL) | 175 | if (in == NULL) |
| 189 | goto err; | 176 | goto err; |
| 190 | if (infile != NULL) | 177 | if (infile != NULL) { |
| 191 | { | ||
| 192 | assert(in_stdin == 0); | 178 | assert(in_stdin == 0); |
| 193 | if (BIO_read_filename(in, infile) <= 0) | 179 | if (BIO_read_filename(in, infile) <= 0) |
| 194 | goto err; | 180 | goto err; |
| 195 | } | 181 | } else { |
| 196 | else | ||
| 197 | { | ||
| 198 | assert(in_stdin); | 182 | assert(in_stdin); |
| 199 | BIO_set_fp(in, stdin, BIO_NOCLOSE); | 183 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 200 | } | ||
| 201 | } | 184 | } |
| 202 | 185 | } | |
| 203 | if (usecrypt) | 186 | if (usecrypt) |
| 204 | pw_maxlen = 8; | 187 | pw_maxlen = 8; |
| 205 | else if (use1 || useapr1) | 188 | else if (use1 || useapr1) |
| 206 | pw_maxlen = 256; /* arbitrary limit, should be enough for most passwords */ | 189 | pw_maxlen = 256;/* arbitrary limit, should be enough for most |
| 190 | * passwords */ | ||
| 207 | 191 | ||
| 208 | if (passwds == NULL) | 192 | if (passwds == NULL) { |
| 209 | { | ||
| 210 | /* no passwords on the command line */ | 193 | /* no passwords on the command line */ |
| 211 | 194 | ||
| 212 | passwd_malloc_size = pw_maxlen + 2; | 195 | passwd_malloc_size = pw_maxlen + 2; |
| @@ -214,65 +197,56 @@ int MAIN(int argc, char **argv) | |||
| 214 | passwd = passwd_malloc = malloc(passwd_malloc_size); | 197 | passwd = passwd_malloc = malloc(passwd_malloc_size); |
| 215 | if (passwd_malloc == NULL) | 198 | if (passwd_malloc == NULL) |
| 216 | goto err; | 199 | goto err; |
| 217 | } | 200 | } |
| 218 | 201 | if ((in == NULL) && (passwds == NULL)) { | |
| 219 | if ((in == NULL) && (passwds == NULL)) | ||
| 220 | { | ||
| 221 | /* build a null-terminated list */ | 202 | /* build a null-terminated list */ |
| 222 | static char *passwds_static[2] = {NULL, NULL}; | 203 | static char *passwds_static[2] = {NULL, NULL}; |
| 223 | 204 | ||
| 224 | passwds = passwds_static; | 205 | passwds = passwds_static; |
| 225 | if (in == NULL) | 206 | if (in == NULL) |
| 226 | if (EVP_read_pw_string(passwd_malloc, passwd_malloc_size, "Password: ", !(passed_salt || in_noverify)) != 0) | 207 | if (EVP_read_pw_string(passwd_malloc, passwd_malloc_size, "Password: ", !(passed_salt || in_noverify)) != 0) |
| 227 | goto err; | 208 | goto err; |
| 228 | passwds[0] = passwd_malloc; | 209 | passwds[0] = passwd_malloc; |
| 229 | } | 210 | } |
| 230 | 211 | if (in == NULL) { | |
| 231 | if (in == NULL) | ||
| 232 | { | ||
| 233 | assert(passwds != NULL); | 212 | assert(passwds != NULL); |
| 234 | assert(*passwds != NULL); | 213 | assert(*passwds != NULL); |
| 235 | 214 | ||
| 236 | do /* loop over list of passwords */ | 215 | do { /* loop over list of passwords */ |
| 237 | { | ||
| 238 | passwd = *passwds++; | 216 | passwd = *passwds++; |
| 239 | if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out, | 217 | if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out, |
| 240 | quiet, table, reverse, pw_maxlen, usecrypt, use1, useapr1)) | 218 | quiet, table, reverse, pw_maxlen, usecrypt, use1, useapr1)) |
| 241 | goto err; | 219 | goto err; |
| 242 | } | ||
| 243 | while (*passwds != NULL); | ||
| 244 | } | 220 | } |
| 245 | else | 221 | while (*passwds != NULL); |
| 222 | } else | ||
| 246 | /* in != NULL */ | 223 | /* in != NULL */ |
| 247 | { | 224 | { |
| 248 | int done; | 225 | int done; |
| 249 | 226 | ||
| 250 | assert (passwd != NULL); | 227 | assert(passwd != NULL); |
| 251 | do | 228 | do { |
| 252 | { | ||
| 253 | int r = BIO_gets(in, passwd, pw_maxlen + 1); | 229 | int r = BIO_gets(in, passwd, pw_maxlen + 1); |
| 254 | if (r > 0) | 230 | if (r > 0) { |
| 255 | { | 231 | char *c = (strchr(passwd, '\n')); |
| 256 | char *c = (strchr(passwd, '\n')) ; | ||
| 257 | if (c != NULL) | 232 | if (c != NULL) |
| 258 | *c = 0; /* truncate at newline */ | 233 | *c = 0; /* truncate at newline */ |
| 259 | else | 234 | else { |
| 260 | { | ||
| 261 | /* ignore rest of line */ | 235 | /* ignore rest of line */ |
| 262 | char trash[BUFSIZ]; | 236 | char trash[BUFSIZ]; |
| 263 | do | 237 | do |
| 264 | r = BIO_gets(in, trash, sizeof trash); | 238 | r = BIO_gets(in, trash, sizeof trash); |
| 265 | while ((r > 0) && (!strchr(trash, '\n'))); | 239 | while ((r > 0) && (!strchr(trash, '\n'))); |
| 266 | } | 240 | } |
| 267 | 241 | ||
| 268 | if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out, | 242 | if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out, |
| 269 | quiet, table, reverse, pw_maxlen, usecrypt, use1, useapr1)) | 243 | quiet, table, reverse, pw_maxlen, usecrypt, use1, useapr1)) |
| 270 | goto err; | 244 | goto err; |
| 271 | } | ||
| 272 | done = (r <= 0); | ||
| 273 | } | 245 | } |
| 274 | while (!done); | 246 | done = (r <= 0); |
| 275 | } | 247 | } |
| 248 | while (!done); | ||
| 249 | } | ||
| 276 | ret = 0; | 250 | ret = 0; |
| 277 | 251 | ||
| 278 | err: | 252 | err: |
| @@ -286,8 +260,8 @@ err: | |||
| 286 | if (out) | 260 | if (out) |
| 287 | BIO_free_all(out); | 261 | BIO_free_all(out); |
| 288 | apps_shutdown(); | 262 | apps_shutdown(); |
| 289 | return(ret); | 263 | return (ret); |
| 290 | } | 264 | } |
| 291 | 265 | ||
| 292 | 266 | ||
| 293 | #ifndef NO_MD5CRYPT_1 | 267 | #ifndef NO_MD5CRYPT_1 |
| @@ -301,38 +275,40 @@ err: | |||
| 301 | * 'magic' string was changed -- the laziest application of the NIH principle | 275 | * 'magic' string was changed -- the laziest application of the NIH principle |
| 302 | * I've ever encountered.) | 276 | * I've ever encountered.) |
| 303 | */ | 277 | */ |
| 304 | static char *md5crypt(const char *passwd, const char *magic, const char *salt) | 278 | static char * |
| 305 | { | 279 | md5crypt(const char *passwd, const char *magic, const char *salt) |
| 306 | static char out_buf[6 + 9 + 24 + 2]; /* "$apr1$..salt..$.......md5hash..........\0" */ | 280 | { |
| 281 | static char out_buf[6 + 9 + 24 + 2]; /* "$apr1$..salt..$.......md5h | ||
| 282 | * ash..........\0" */ | ||
| 307 | unsigned char buf[MD5_DIGEST_LENGTH]; | 283 | unsigned char buf[MD5_DIGEST_LENGTH]; |
| 308 | char *salt_out; | 284 | char *salt_out; |
| 309 | int n; | 285 | int n; |
| 310 | unsigned int i; | 286 | unsigned int i; |
| 311 | EVP_MD_CTX md,md2; | 287 | EVP_MD_CTX md, md2; |
| 312 | size_t passwd_len, salt_len; | 288 | size_t passwd_len, salt_len; |
| 313 | 289 | ||
| 314 | passwd_len = strlen(passwd); | 290 | passwd_len = strlen(passwd); |
| 315 | out_buf[0] = '$'; | 291 | out_buf[0] = '$'; |
| 316 | out_buf[1] = 0; | 292 | out_buf[1] = 0; |
| 317 | assert(strlen(magic) <= 4); /* "1" or "apr1" */ | 293 | assert(strlen(magic) <= 4); /* "1" or "apr1" */ |
| 318 | strlcat(out_buf, magic, sizeof(out_buf)); | 294 | strlcat(out_buf, magic, sizeof(out_buf)); |
| 319 | strlcat(out_buf, "$", sizeof(out_buf)); | 295 | strlcat(out_buf, "$", sizeof(out_buf)); |
| 320 | strlcat(out_buf, salt, sizeof(out_buf)); | 296 | strlcat(out_buf, salt, sizeof(out_buf)); |
| 321 | assert(strlen(out_buf) <= 6 + 8); /* "$apr1$..salt.." */ | 297 | assert(strlen(out_buf) <= 6 + 8); /* "$apr1$..salt.." */ |
| 322 | salt_out = out_buf + 2 + strlen(magic); | 298 | salt_out = out_buf + 2 + strlen(magic); |
| 323 | salt_len = strlen(salt_out); | 299 | salt_len = strlen(salt_out); |
| 324 | assert(salt_len <= 8); | 300 | assert(salt_len <= 8); |
| 325 | 301 | ||
| 326 | EVP_MD_CTX_init(&md); | 302 | EVP_MD_CTX_init(&md); |
| 327 | EVP_DigestInit_ex(&md,EVP_md5(), NULL); | 303 | EVP_DigestInit_ex(&md, EVP_md5(), NULL); |
| 328 | EVP_DigestUpdate(&md, passwd, passwd_len); | 304 | EVP_DigestUpdate(&md, passwd, passwd_len); |
| 329 | EVP_DigestUpdate(&md, "$", 1); | 305 | EVP_DigestUpdate(&md, "$", 1); |
| 330 | EVP_DigestUpdate(&md, magic, strlen(magic)); | 306 | EVP_DigestUpdate(&md, magic, strlen(magic)); |
| 331 | EVP_DigestUpdate(&md, "$", 1); | 307 | EVP_DigestUpdate(&md, "$", 1); |
| 332 | EVP_DigestUpdate(&md, salt_out, salt_len); | 308 | EVP_DigestUpdate(&md, salt_out, salt_len); |
| 333 | 309 | ||
| 334 | EVP_MD_CTX_init(&md2); | 310 | EVP_MD_CTX_init(&md2); |
| 335 | EVP_DigestInit_ex(&md2,EVP_md5(), NULL); | 311 | EVP_DigestInit_ex(&md2, EVP_md5(), NULL); |
| 336 | EVP_DigestUpdate(&md2, passwd, passwd_len); | 312 | EVP_DigestUpdate(&md2, passwd, passwd_len); |
| 337 | EVP_DigestUpdate(&md2, salt_out, salt_len); | 313 | EVP_DigestUpdate(&md2, salt_out, salt_len); |
| 338 | EVP_DigestUpdate(&md2, passwd, passwd_len); | 314 | EVP_DigestUpdate(&md2, passwd, passwd_len); |
| @@ -341,33 +317,31 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt) | |||
| 341 | for (i = passwd_len; i > sizeof buf; i -= sizeof buf) | 317 | for (i = passwd_len; i > sizeof buf; i -= sizeof buf) |
| 342 | EVP_DigestUpdate(&md, buf, sizeof buf); | 318 | EVP_DigestUpdate(&md, buf, sizeof buf); |
| 343 | EVP_DigestUpdate(&md, buf, i); | 319 | EVP_DigestUpdate(&md, buf, i); |
| 344 | 320 | ||
| 345 | n = passwd_len; | 321 | n = passwd_len; |
| 346 | while (n) | 322 | while (n) { |
| 347 | { | ||
| 348 | EVP_DigestUpdate(&md, (n & 1) ? "\0" : passwd, 1); | 323 | EVP_DigestUpdate(&md, (n & 1) ? "\0" : passwd, 1); |
| 349 | n >>= 1; | 324 | n >>= 1; |
| 350 | } | 325 | } |
| 351 | EVP_DigestFinal_ex(&md, buf, NULL); | 326 | EVP_DigestFinal_ex(&md, buf, NULL); |
| 352 | 327 | ||
| 353 | for (i = 0; i < 1000; i++) | 328 | for (i = 0; i < 1000; i++) { |
| 354 | { | 329 | EVP_DigestInit_ex(&md2, EVP_md5(), NULL); |
| 355 | EVP_DigestInit_ex(&md2,EVP_md5(), NULL); | ||
| 356 | EVP_DigestUpdate(&md2, (i & 1) ? (unsigned const char *) passwd : buf, | 330 | EVP_DigestUpdate(&md2, (i & 1) ? (unsigned const char *) passwd : buf, |
| 357 | (i & 1) ? passwd_len : sizeof buf); | 331 | (i & 1) ? passwd_len : sizeof buf); |
| 358 | if (i % 3) | 332 | if (i % 3) |
| 359 | EVP_DigestUpdate(&md2, salt_out, salt_len); | 333 | EVP_DigestUpdate(&md2, salt_out, salt_len); |
| 360 | if (i % 7) | 334 | if (i % 7) |
| 361 | EVP_DigestUpdate(&md2, passwd, passwd_len); | 335 | EVP_DigestUpdate(&md2, passwd, passwd_len); |
| 362 | EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned const char *) passwd, | 336 | EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned const char *) passwd, |
| 363 | (i & 1) ? sizeof buf : passwd_len); | 337 | (i & 1) ? sizeof buf : passwd_len); |
| 364 | EVP_DigestFinal_ex(&md2, buf, NULL); | 338 | EVP_DigestFinal_ex(&md2, buf, NULL); |
| 365 | } | 339 | } |
| 366 | EVP_MD_CTX_cleanup(&md2); | 340 | EVP_MD_CTX_cleanup(&md2); |
| 367 | 341 | ||
| 368 | { | 342 | { |
| 369 | /* transform buf into output string */ | 343 | /* transform buf into output string */ |
| 370 | 344 | ||
| 371 | unsigned char buf_perm[sizeof buf]; | 345 | unsigned char buf_perm[sizeof buf]; |
| 372 | int dest, source; | 346 | int dest, source; |
| 373 | char *output; | 347 | char *output; |
| @@ -377,99 +351,96 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt) | |||
| 377 | buf_perm[dest] = buf[source]; | 351 | buf_perm[dest] = buf[source]; |
| 378 | buf_perm[14] = buf[5]; | 352 | buf_perm[14] = buf[5]; |
| 379 | buf_perm[15] = buf[11]; | 353 | buf_perm[15] = buf[11]; |
| 380 | #ifndef PEDANTIC /* Unfortunately, this generates a "no effect" warning */ | 354 | #ifndef PEDANTIC /* Unfortunately, this generates a "no |
| 355 | * effect" warning */ | ||
| 381 | assert(16 == sizeof buf_perm); | 356 | assert(16 == sizeof buf_perm); |
| 382 | #endif | 357 | #endif |
| 383 | 358 | ||
| 384 | output = salt_out + salt_len; | 359 | output = salt_out + salt_len; |
| 385 | assert(output == out_buf + strlen(out_buf)); | 360 | assert(output == out_buf + strlen(out_buf)); |
| 386 | 361 | ||
| 387 | *output++ = '$'; | 362 | *output++ = '$'; |
| 388 | 363 | ||
| 389 | for (i = 0; i < 15; i += 3) | 364 | for (i = 0; i < 15; i += 3) { |
| 390 | { | 365 | *output++ = cov_2char[buf_perm[i + 2] & 0x3f]; |
| 391 | *output++ = cov_2char[buf_perm[i+2] & 0x3f]; | 366 | *output++ = cov_2char[((buf_perm[i + 1] & 0xf) << 2) | |
| 392 | *output++ = cov_2char[((buf_perm[i+1] & 0xf) << 2) | | 367 | (buf_perm[i + 2] >> 6)]; |
| 393 | (buf_perm[i+2] >> 6)]; | ||
| 394 | *output++ = cov_2char[((buf_perm[i] & 3) << 4) | | 368 | *output++ = cov_2char[((buf_perm[i] & 3) << 4) | |
| 395 | (buf_perm[i+1] >> 4)]; | 369 | (buf_perm[i + 1] >> 4)]; |
| 396 | *output++ = cov_2char[buf_perm[i] >> 2]; | 370 | *output++ = cov_2char[buf_perm[i] >> 2]; |
| 397 | } | 371 | } |
| 398 | assert(i == 15); | 372 | assert(i == 15); |
| 399 | *output++ = cov_2char[buf_perm[i] & 0x3f]; | 373 | *output++ = cov_2char[buf_perm[i] & 0x3f]; |
| 400 | *output++ = cov_2char[buf_perm[i] >> 6]; | 374 | *output++ = cov_2char[buf_perm[i] >> 6]; |
| 401 | *output = 0; | 375 | *output = 0; |
| 402 | assert(strlen(out_buf) < sizeof(out_buf)); | 376 | assert(strlen(out_buf) < sizeof(out_buf)); |
| 403 | } | 377 | } |
| 404 | EVP_MD_CTX_cleanup(&md); | 378 | EVP_MD_CTX_cleanup(&md); |
| 405 | 379 | ||
| 406 | return out_buf; | 380 | return out_buf; |
| 407 | } | 381 | } |
| 408 | #endif | 382 | #endif |
| 409 | 383 | ||
| 410 | 384 | ||
| 411 | static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p, | 385 | static int |
| 412 | char *passwd, BIO *out, int quiet, int table, int reverse, | 386 | do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p, |
| 413 | size_t pw_maxlen, int usecrypt, int use1, int useapr1) | 387 | char *passwd, BIO * out, int quiet, int table, int reverse, |
| 414 | { | 388 | size_t pw_maxlen, int usecrypt, int use1, int useapr1) |
| 389 | { | ||
| 415 | char *hash = NULL; | 390 | char *hash = NULL; |
| 416 | 391 | ||
| 417 | assert(salt_p != NULL); | 392 | assert(salt_p != NULL); |
| 418 | assert(salt_malloc_p != NULL); | 393 | assert(salt_malloc_p != NULL); |
| 419 | 394 | ||
| 420 | /* first make sure we have a salt */ | 395 | /* first make sure we have a salt */ |
| 421 | if (!passed_salt) | 396 | if (!passed_salt) { |
| 422 | { | ||
| 423 | #ifndef OPENSSL_NO_DES | 397 | #ifndef OPENSSL_NO_DES |
| 424 | if (usecrypt) | 398 | if (usecrypt) { |
| 425 | { | 399 | if (*salt_malloc_p == NULL) { |
| 426 | if (*salt_malloc_p == NULL) | ||
| 427 | { | ||
| 428 | *salt_p = *salt_malloc_p = malloc(3); | 400 | *salt_p = *salt_malloc_p = malloc(3); |
| 429 | if (*salt_malloc_p == NULL) | 401 | if (*salt_malloc_p == NULL) |
| 430 | goto err; | 402 | goto err; |
| 431 | } | 403 | } |
| 432 | if (RAND_pseudo_bytes((unsigned char *)*salt_p, 2) < 0) | 404 | if (RAND_pseudo_bytes((unsigned char *) *salt_p, 2) < 0) |
| 433 | goto err; | 405 | goto err; |
| 434 | (*salt_p)[0] = cov_2char[(*salt_p)[0] & 0x3f]; /* 6 bits */ | 406 | (*salt_p)[0] = cov_2char[(*salt_p)[0] & 0x3f]; /* 6 bits */ |
| 435 | (*salt_p)[1] = cov_2char[(*salt_p)[1] & 0x3f]; /* 6 bits */ | 407 | (*salt_p)[1] = cov_2char[(*salt_p)[1] & 0x3f]; /* 6 bits */ |
| 436 | (*salt_p)[2] = 0; | 408 | (*salt_p)[2] = 0; |
| 437 | } | 409 | } |
| 438 | #endif /* !OPENSSL_NO_DES */ | 410 | #endif /* !OPENSSL_NO_DES */ |
| 439 | 411 | ||
| 440 | #ifndef NO_MD5CRYPT_1 | 412 | #ifndef NO_MD5CRYPT_1 |
| 441 | if (use1 || useapr1) | 413 | if (use1 || useapr1) { |
| 442 | { | ||
| 443 | int i; | 414 | int i; |
| 444 | 415 | ||
| 445 | if (*salt_malloc_p == NULL) | 416 | if (*salt_malloc_p == NULL) { |
| 446 | { | ||
| 447 | *salt_p = *salt_malloc_p = malloc(9); | 417 | *salt_p = *salt_malloc_p = malloc(9); |
| 448 | if (*salt_malloc_p == NULL) | 418 | if (*salt_malloc_p == NULL) |
| 449 | goto err; | 419 | goto err; |
| 450 | } | 420 | } |
| 451 | if (RAND_pseudo_bytes((unsigned char *)*salt_p, 8) < 0) | 421 | if (RAND_pseudo_bytes((unsigned char *) *salt_p, 8) < 0) |
| 452 | goto err; | 422 | goto err; |
| 453 | 423 | ||
| 454 | for (i = 0; i < 8; i++) | 424 | for (i = 0; i < 8; i++) |
| 455 | (*salt_p)[i] = cov_2char[(*salt_p)[i] & 0x3f]; /* 6 bits */ | 425 | (*salt_p)[i] = cov_2char[(*salt_p)[i] & 0x3f]; /* 6 bits */ |
| 456 | (*salt_p)[8] = 0; | 426 | (*salt_p)[8] = 0; |
| 457 | } | ||
| 458 | #endif /* !NO_MD5CRYPT_1 */ | ||
| 459 | } | 427 | } |
| 460 | 428 | #endif /* !NO_MD5CRYPT_1 */ | |
| 429 | } | ||
| 461 | assert(*salt_p != NULL); | 430 | assert(*salt_p != NULL); |
| 462 | 431 | ||
| 463 | /* truncate password if necessary */ | 432 | /* truncate password if necessary */ |
| 464 | if ((strlen(passwd) > pw_maxlen)) | 433 | if ((strlen(passwd) > pw_maxlen)) { |
| 465 | { | ||
| 466 | if (!quiet) | 434 | if (!quiet) |
| 467 | /* XXX: really we should know how to print a size_t, not cast it */ | 435 | /* |
| 468 | BIO_printf(bio_err, "Warning: truncating password to %u characters\n", (unsigned)pw_maxlen); | 436 | * XXX: really we should know how to print a size_t, |
| 437 | * not cast it | ||
| 438 | */ | ||
| 439 | BIO_printf(bio_err, "Warning: truncating password to %u characters\n", (unsigned) pw_maxlen); | ||
| 469 | passwd[pw_maxlen] = 0; | 440 | passwd[pw_maxlen] = 0; |
| 470 | } | 441 | } |
| 471 | assert(strlen(passwd) <= pw_maxlen); | 442 | assert(strlen(passwd) <= pw_maxlen); |
| 472 | 443 | ||
| 473 | /* now compute password hash */ | 444 | /* now compute password hash */ |
| 474 | #ifndef OPENSSL_NO_DES | 445 | #ifndef OPENSSL_NO_DES |
| 475 | if (usecrypt) | 446 | if (usecrypt) |
| @@ -488,15 +459,16 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p, | |||
| 488 | else | 459 | else |
| 489 | BIO_printf(out, "%s\n", hash); | 460 | BIO_printf(out, "%s\n", hash); |
| 490 | return 1; | 461 | return 1; |
| 491 | 462 | ||
| 492 | err: | 463 | err: |
| 493 | return 0; | 464 | return 0; |
| 494 | } | 465 | } |
| 495 | #else | 466 | #else |
| 496 | 467 | ||
| 497 | int MAIN(int argc, char **argv) | 468 | int |
| 498 | { | 469 | MAIN(int argc, char **argv) |
| 470 | { | ||
| 499 | fputs("Program not available.\n", stderr) | 471 | fputs("Program not available.\n", stderr) |
| 500 | return(1); | 472 | return (1); |
| 501 | } | 473 | } |
| 502 | #endif | 474 | #endif |
diff --git a/src/lib/libssl/src/apps/pkcs12.c b/src/lib/libssl/src/apps/pkcs12.c index ca6824efcc..783abe277e 100644 --- a/src/lib/libssl/src/apps/pkcs12.c +++ b/src/lib/libssl/src/apps/pkcs12.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -79,739 +79,786 @@ const EVP_CIPHER *enc; | |||
| 79 | #define CLCERTS 0x8 | 79 | #define CLCERTS 0x8 |
| 80 | #define CACERTS 0x10 | 80 | #define CACERTS 0x10 |
| 81 | 81 | ||
| 82 | int get_cert_chain (X509 *cert, X509_STORE *store, STACK_OF(X509) **chain); | 82 | int get_cert_chain(X509 * cert, X509_STORE * store, STACK_OF(X509) ** chain); |
| 83 | int dump_certs_keys_p12(BIO *out, PKCS12 *p12, char *pass, int passlen, int options, char *pempass); | 83 | int dump_certs_keys_p12(BIO * out, PKCS12 * p12, char *pass, int passlen, int options, char *pempass); |
| 84 | int dump_certs_pkeys_bags(BIO *out, STACK_OF(PKCS12_SAFEBAG) *bags, char *pass, | 84 | int |
| 85 | int passlen, int options, char *pempass); | 85 | dump_certs_pkeys_bags(BIO * out, STACK_OF(PKCS12_SAFEBAG) * bags, char *pass, |
| 86 | int dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bags, char *pass, int passlen, int options, char *pempass); | 86 | int passlen, int options, char *pempass); |
| 87 | int print_attribs(BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst,const char *name); | 87 | int dump_certs_pkeys_bag(BIO * out, PKCS12_SAFEBAG * bags, char *pass, int passlen, int options, char *pempass); |
| 88 | void hex_prin(BIO *out, unsigned char *buf, int len); | 88 | int print_attribs(BIO * out, STACK_OF(X509_ATTRIBUTE) * attrlst, const char *name); |
| 89 | int alg_print(BIO *x, X509_ALGOR *alg); | 89 | void hex_prin(BIO * out, unsigned char *buf, int len); |
| 90 | int cert_load(BIO *in, STACK_OF(X509) *sk); | 90 | int alg_print(BIO * x, X509_ALGOR * alg); |
| 91 | static int set_pbe(BIO *err, int *ppbe, const char *str); | 91 | int cert_load(BIO * in, STACK_OF(X509) * sk); |
| 92 | 92 | static int set_pbe(BIO * err, int *ppbe, const char *str); | |
| 93 | int MAIN(int, char **); | 93 | |
| 94 | 94 | int MAIN(int, char **); | |
| 95 | int MAIN(int argc, char **argv) | 95 | |
| 96 | int MAIN(int argc, char **argv) | ||
| 96 | { | 97 | { |
| 97 | ENGINE *e = NULL; | 98 | ENGINE *e = NULL; |
| 98 | char *infile=NULL, *outfile=NULL, *keyname = NULL; | 99 | char *infile = NULL, *outfile = NULL, *keyname = NULL; |
| 99 | char *certfile=NULL; | 100 | char *certfile = NULL; |
| 100 | BIO *in=NULL, *out = NULL; | 101 | BIO *in = NULL, *out = NULL; |
| 101 | char **args; | 102 | char **args; |
| 102 | char *name = NULL; | 103 | char *name = NULL; |
| 103 | char *csp_name = NULL; | 104 | char *csp_name = NULL; |
| 104 | int add_lmk = 0; | 105 | int add_lmk = 0; |
| 105 | PKCS12 *p12 = NULL; | 106 | PKCS12 *p12 = NULL; |
| 106 | char pass[50], macpass[50]; | 107 | char pass[50], macpass[50]; |
| 107 | int export_cert = 0; | 108 | int export_cert = 0; |
| 108 | int options = 0; | 109 | int options = 0; |
| 109 | int chain = 0; | 110 | int chain = 0; |
| 110 | int badarg = 0; | 111 | int badarg = 0; |
| 111 | int iter = PKCS12_DEFAULT_ITER; | 112 | int iter = PKCS12_DEFAULT_ITER; |
| 112 | int maciter = PKCS12_DEFAULT_ITER; | 113 | int maciter = PKCS12_DEFAULT_ITER; |
| 113 | int twopass = 0; | 114 | int twopass = 0; |
| 114 | int keytype = 0; | 115 | int keytype = 0; |
| 115 | int cert_pbe; | 116 | int cert_pbe; |
| 116 | int key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; | 117 | int key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; |
| 117 | int ret = 1; | 118 | int ret = 1; |
| 118 | int macver = 1; | 119 | int macver = 1; |
| 119 | int noprompt = 0; | 120 | int noprompt = 0; |
| 120 | STACK_OF(OPENSSL_STRING) *canames = NULL; | 121 | STACK_OF(OPENSSL_STRING) * canames = NULL; |
| 121 | char *cpass = NULL, *mpass = NULL; | 122 | char *cpass = NULL, *mpass = NULL; |
| 122 | char *passargin = NULL, *passargout = NULL, *passarg = NULL; | 123 | char *passargin = NULL, *passargout = NULL, *passarg = NULL; |
| 123 | char *passin = NULL, *passout = NULL; | 124 | char *passin = NULL, *passout = NULL; |
| 124 | char *inrand = NULL; | 125 | char *inrand = NULL; |
| 125 | char *macalg = NULL; | 126 | char *macalg = NULL; |
| 126 | char *CApath = NULL, *CAfile = NULL; | 127 | char *CApath = NULL, *CAfile = NULL; |
| 127 | #ifndef OPENSSL_NO_ENGINE | 128 | #ifndef OPENSSL_NO_ENGINE |
| 128 | char *engine=NULL; | 129 | char *engine = NULL; |
| 129 | #endif | 130 | #endif |
| 130 | 131 | ||
| 131 | apps_startup(); | 132 | apps_startup(); |
| 132 | 133 | ||
| 133 | cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC; | 134 | cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC; |
| 134 | 135 | ||
| 135 | enc = EVP_des_ede3_cbc(); | 136 | enc = EVP_des_ede3_cbc(); |
| 136 | if (bio_err == NULL ) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE); | 137 | if (bio_err == NULL) |
| 138 | bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); | ||
| 137 | 139 | ||
| 138 | if (!load_config(bio_err, NULL)) | 140 | if (!load_config(bio_err, NULL)) |
| 139 | goto end; | 141 | goto end; |
| 140 | 142 | ||
| 141 | args = argv + 1; | 143 | args = argv + 1; |
| 142 | 144 | ||
| 143 | 145 | ||
| 144 | while (*args) { | 146 | while (*args) { |
| 145 | if (*args[0] == '-') { | 147 | if (*args[0] == '-') { |
| 146 | if (!strcmp (*args, "-nokeys")) options |= NOKEYS; | 148 | if (!strcmp(*args, "-nokeys")) |
| 147 | else if (!strcmp (*args, "-keyex")) keytype = KEY_EX; | 149 | options |= NOKEYS; |
| 148 | else if (!strcmp (*args, "-keysig")) keytype = KEY_SIG; | 150 | else if (!strcmp(*args, "-keyex")) |
| 149 | else if (!strcmp (*args, "-nocerts")) options |= NOCERTS; | 151 | keytype = KEY_EX; |
| 150 | else if (!strcmp (*args, "-clcerts")) options |= CLCERTS; | 152 | else if (!strcmp(*args, "-keysig")) |
| 151 | else if (!strcmp (*args, "-cacerts")) options |= CACERTS; | 153 | keytype = KEY_SIG; |
| 152 | else if (!strcmp (*args, "-noout")) options |= (NOKEYS|NOCERTS); | 154 | else if (!strcmp(*args, "-nocerts")) |
| 153 | else if (!strcmp (*args, "-info")) options |= INFO; | 155 | options |= NOCERTS; |
| 154 | else if (!strcmp (*args, "-chain")) chain = 1; | 156 | else if (!strcmp(*args, "-clcerts")) |
| 155 | else if (!strcmp (*args, "-twopass")) twopass = 1; | 157 | options |= CLCERTS; |
| 156 | else if (!strcmp (*args, "-nomacver")) macver = 0; | 158 | else if (!strcmp(*args, "-cacerts")) |
| 157 | else if (!strcmp (*args, "-descert")) | 159 | options |= CACERTS; |
| 158 | cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; | 160 | else if (!strcmp(*args, "-noout")) |
| 159 | else if (!strcmp (*args, "-export")) export_cert = 1; | 161 | options |= (NOKEYS | NOCERTS); |
| 160 | else if (!strcmp (*args, "-des")) enc=EVP_des_cbc(); | 162 | else if (!strcmp(*args, "-info")) |
| 161 | else if (!strcmp (*args, "-des3")) enc = EVP_des_ede3_cbc(); | 163 | options |= INFO; |
| 164 | else if (!strcmp(*args, "-chain")) | ||
| 165 | chain = 1; | ||
| 166 | else if (!strcmp(*args, "-twopass")) | ||
| 167 | twopass = 1; | ||
| 168 | else if (!strcmp(*args, "-nomacver")) | ||
| 169 | macver = 0; | ||
| 170 | else if (!strcmp(*args, "-descert")) | ||
| 171 | cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; | ||
| 172 | else if (!strcmp(*args, "-export")) | ||
| 173 | export_cert = 1; | ||
| 174 | else if (!strcmp(*args, "-des")) | ||
| 175 | enc = EVP_des_cbc(); | ||
| 176 | else if (!strcmp(*args, "-des3")) | ||
| 177 | enc = EVP_des_ede3_cbc(); | ||
| 162 | #ifndef OPENSSL_NO_IDEA | 178 | #ifndef OPENSSL_NO_IDEA |
| 163 | else if (!strcmp (*args, "-idea")) enc=EVP_idea_cbc(); | 179 | else if (!strcmp(*args, "-idea")) |
| 180 | enc = EVP_idea_cbc(); | ||
| 164 | #endif | 181 | #endif |
| 165 | #ifndef OPENSSL_NO_SEED | 182 | #ifndef OPENSSL_NO_SEED |
| 166 | else if (!strcmp(*args, "-seed")) enc=EVP_seed_cbc(); | 183 | else if (!strcmp(*args, "-seed")) |
| 184 | enc = EVP_seed_cbc(); | ||
| 167 | #endif | 185 | #endif |
| 168 | #ifndef OPENSSL_NO_AES | 186 | #ifndef OPENSSL_NO_AES |
| 169 | else if (!strcmp(*args,"-aes128")) enc=EVP_aes_128_cbc(); | 187 | else if (!strcmp(*args, "-aes128")) |
| 170 | else if (!strcmp(*args,"-aes192")) enc=EVP_aes_192_cbc(); | 188 | enc = EVP_aes_128_cbc(); |
| 171 | else if (!strcmp(*args,"-aes256")) enc=EVP_aes_256_cbc(); | 189 | else if (!strcmp(*args, "-aes192")) |
| 190 | enc = EVP_aes_192_cbc(); | ||
| 191 | else if (!strcmp(*args, "-aes256")) | ||
| 192 | enc = EVP_aes_256_cbc(); | ||
| 172 | #endif | 193 | #endif |
| 173 | #ifndef OPENSSL_NO_CAMELLIA | 194 | #ifndef OPENSSL_NO_CAMELLIA |
| 174 | else if (!strcmp(*args,"-camellia128")) enc=EVP_camellia_128_cbc(); | 195 | else if (!strcmp(*args, "-camellia128")) |
| 175 | else if (!strcmp(*args,"-camellia192")) enc=EVP_camellia_192_cbc(); | 196 | enc = EVP_camellia_128_cbc(); |
| 176 | else if (!strcmp(*args,"-camellia256")) enc=EVP_camellia_256_cbc(); | 197 | else if (!strcmp(*args, "-camellia192")) |
| 177 | #endif | 198 | enc = EVP_camellia_192_cbc(); |
| 178 | else if (!strcmp (*args, "-noiter")) iter = 1; | 199 | else if (!strcmp(*args, "-camellia256")) |
| 179 | else if (!strcmp (*args, "-maciter")) | 200 | enc = EVP_camellia_256_cbc(); |
| 180 | maciter = PKCS12_DEFAULT_ITER; | 201 | #endif |
| 181 | else if (!strcmp (*args, "-nomaciter")) | 202 | else if (!strcmp(*args, "-noiter")) |
| 182 | maciter = 1; | 203 | iter = 1; |
| 183 | else if (!strcmp (*args, "-nomac")) | 204 | else if (!strcmp(*args, "-maciter")) |
| 184 | maciter = -1; | 205 | maciter = PKCS12_DEFAULT_ITER; |
| 185 | else if (!strcmp (*args, "-macalg")) | 206 | else if (!strcmp(*args, "-nomaciter")) |
| 186 | if (args[1]) { | 207 | maciter = 1; |
| 187 | args++; | 208 | else if (!strcmp(*args, "-nomac")) |
| 188 | macalg = *args; | 209 | maciter = -1; |
| 189 | } else badarg = 1; | 210 | else if (!strcmp(*args, "-macalg")) |
| 190 | else if (!strcmp (*args, "-nodes")) enc=NULL; | 211 | if (args[1]) { |
| 191 | else if (!strcmp (*args, "-certpbe")) { | 212 | args++; |
| 192 | if (!set_pbe(bio_err, &cert_pbe, *++args)) | 213 | macalg = *args; |
| 193 | badarg = 1; | 214 | } else |
| 194 | } else if (!strcmp (*args, "-keypbe")) { | 215 | badarg = 1; |
| 195 | if (!set_pbe(bio_err, &key_pbe, *++args)) | 216 | else if (!strcmp(*args, "-nodes")) |
| 196 | badarg = 1; | 217 | enc = NULL; |
| 197 | } else if (!strcmp (*args, "-rand")) { | 218 | else if (!strcmp(*args, "-certpbe")) { |
| 198 | if (args[1]) { | 219 | if (!set_pbe(bio_err, &cert_pbe, *++args)) |
| 199 | args++; | 220 | badarg = 1; |
| 200 | inrand = *args; | 221 | } else if (!strcmp(*args, "-keypbe")) { |
| 201 | } else badarg = 1; | 222 | if (!set_pbe(bio_err, &key_pbe, *++args)) |
| 202 | } else if (!strcmp (*args, "-inkey")) { | 223 | badarg = 1; |
| 203 | if (args[1]) { | 224 | } else if (!strcmp(*args, "-rand")) { |
| 204 | args++; | 225 | if (args[1]) { |
| 205 | keyname = *args; | 226 | args++; |
| 206 | } else badarg = 1; | 227 | inrand = *args; |
| 207 | } else if (!strcmp (*args, "-certfile")) { | 228 | } else |
| 208 | if (args[1]) { | 229 | badarg = 1; |
| 209 | args++; | 230 | } else if (!strcmp(*args, "-inkey")) { |
| 210 | certfile = *args; | 231 | if (args[1]) { |
| 211 | } else badarg = 1; | 232 | args++; |
| 212 | } else if (!strcmp (*args, "-name")) { | 233 | keyname = *args; |
| 213 | if (args[1]) { | 234 | } else |
| 214 | args++; | 235 | badarg = 1; |
| 215 | name = *args; | 236 | } else if (!strcmp(*args, "-certfile")) { |
| 216 | } else badarg = 1; | 237 | if (args[1]) { |
| 217 | } else if (!strcmp (*args, "-LMK")) | 238 | args++; |
| 218 | add_lmk = 1; | 239 | certfile = *args; |
| 219 | else if (!strcmp (*args, "-CSP")) { | 240 | } else |
| 220 | if (args[1]) { | 241 | badarg = 1; |
| 221 | args++; | 242 | } else if (!strcmp(*args, "-name")) { |
| 222 | csp_name = *args; | 243 | if (args[1]) { |
| 223 | } else badarg = 1; | 244 | args++; |
| 224 | } else if (!strcmp (*args, "-caname")) { | 245 | name = *args; |
| 225 | if (args[1]) { | 246 | } else |
| 226 | args++; | 247 | badarg = 1; |
| 227 | if (!canames) canames = sk_OPENSSL_STRING_new_null(); | 248 | } else if (!strcmp(*args, "-LMK")) |
| 228 | sk_OPENSSL_STRING_push(canames, *args); | 249 | add_lmk = 1; |
| 229 | } else badarg = 1; | 250 | else if (!strcmp(*args, "-CSP")) { |
| 230 | } else if (!strcmp (*args, "-in")) { | 251 | if (args[1]) { |
| 231 | if (args[1]) { | 252 | args++; |
| 232 | args++; | 253 | csp_name = *args; |
| 233 | infile = *args; | 254 | } else |
| 234 | } else badarg = 1; | 255 | badarg = 1; |
| 235 | } else if (!strcmp (*args, "-out")) { | 256 | } else if (!strcmp(*args, "-caname")) { |
| 236 | if (args[1]) { | 257 | if (args[1]) { |
| 237 | args++; | 258 | args++; |
| 238 | outfile = *args; | 259 | if (!canames) |
| 239 | } else badarg = 1; | 260 | canames = sk_OPENSSL_STRING_new_null(); |
| 240 | } else if (!strcmp(*args,"-passin")) { | 261 | sk_OPENSSL_STRING_push(canames, *args); |
| 241 | if (args[1]) { | 262 | } else |
| 242 | args++; | 263 | badarg = 1; |
| 243 | passargin = *args; | 264 | } else if (!strcmp(*args, "-in")) { |
| 244 | } else badarg = 1; | 265 | if (args[1]) { |
| 245 | } else if (!strcmp(*args,"-passout")) { | 266 | args++; |
| 246 | if (args[1]) { | 267 | infile = *args; |
| 247 | args++; | 268 | } else |
| 248 | passargout = *args; | 269 | badarg = 1; |
| 249 | } else badarg = 1; | 270 | } else if (!strcmp(*args, "-out")) { |
| 250 | } else if (!strcmp (*args, "-password")) { | 271 | if (args[1]) { |
| 251 | if (args[1]) { | 272 | args++; |
| 252 | args++; | 273 | outfile = *args; |
| 253 | passarg = *args; | 274 | } else |
| 254 | noprompt = 1; | 275 | badarg = 1; |
| 255 | } else badarg = 1; | 276 | } else if (!strcmp(*args, "-passin")) { |
| 256 | } else if (!strcmp(*args,"-CApath")) { | 277 | if (args[1]) { |
| 257 | if (args[1]) { | 278 | args++; |
| 258 | args++; | 279 | passargin = *args; |
| 259 | CApath = *args; | 280 | } else |
| 260 | } else badarg = 1; | 281 | badarg = 1; |
| 261 | } else if (!strcmp(*args,"-CAfile")) { | 282 | } else if (!strcmp(*args, "-passout")) { |
| 262 | if (args[1]) { | 283 | if (args[1]) { |
| 263 | args++; | 284 | args++; |
| 264 | CAfile = *args; | 285 | passargout = *args; |
| 265 | } else badarg = 1; | 286 | } else |
| 287 | badarg = 1; | ||
| 288 | } else if (!strcmp(*args, "-password")) { | ||
| 289 | if (args[1]) { | ||
| 290 | args++; | ||
| 291 | passarg = *args; | ||
| 292 | noprompt = 1; | ||
| 293 | } else | ||
| 294 | badarg = 1; | ||
| 295 | } else if (!strcmp(*args, "-CApath")) { | ||
| 296 | if (args[1]) { | ||
| 297 | args++; | ||
| 298 | CApath = *args; | ||
| 299 | } else | ||
| 300 | badarg = 1; | ||
| 301 | } else if (!strcmp(*args, "-CAfile")) { | ||
| 302 | if (args[1]) { | ||
| 303 | args++; | ||
| 304 | CAfile = *args; | ||
| 305 | } else | ||
| 306 | badarg = 1; | ||
| 266 | #ifndef OPENSSL_NO_ENGINE | 307 | #ifndef OPENSSL_NO_ENGINE |
| 267 | } else if (!strcmp(*args,"-engine")) { | 308 | } else if (!strcmp(*args, "-engine")) { |
| 268 | if (args[1]) { | 309 | if (args[1]) { |
| 269 | args++; | 310 | args++; |
| 270 | engine = *args; | 311 | engine = *args; |
| 271 | } else badarg = 1; | 312 | } else |
| 272 | #endif | 313 | badarg = 1; |
| 273 | } else badarg = 1; | 314 | #endif |
| 274 | 315 | } else | |
| 275 | } else badarg = 1; | 316 | badarg = 1; |
| 276 | args++; | 317 | |
| 277 | } | 318 | } else |
| 278 | 319 | badarg = 1; | |
| 279 | if (badarg) { | 320 | args++; |
| 280 | BIO_printf (bio_err, "Usage: pkcs12 [options]\n"); | 321 | } |
| 281 | BIO_printf (bio_err, "where options are\n"); | 322 | |
| 282 | BIO_printf (bio_err, "-export output PKCS12 file\n"); | 323 | if (badarg) { |
| 283 | BIO_printf (bio_err, "-chain add certificate chain\n"); | 324 | BIO_printf(bio_err, "Usage: pkcs12 [options]\n"); |
| 284 | BIO_printf (bio_err, "-inkey file private key if not infile\n"); | 325 | BIO_printf(bio_err, "where options are\n"); |
| 285 | BIO_printf (bio_err, "-certfile f add all certs in f\n"); | 326 | BIO_printf(bio_err, "-export output PKCS12 file\n"); |
| 286 | BIO_printf (bio_err, "-CApath arg - PEM format directory of CA's\n"); | 327 | BIO_printf(bio_err, "-chain add certificate chain\n"); |
| 287 | BIO_printf (bio_err, "-CAfile arg - PEM format file of CA's\n"); | 328 | BIO_printf(bio_err, "-inkey file private key if not infile\n"); |
| 288 | BIO_printf (bio_err, "-name \"name\" use name as friendly name\n"); | 329 | BIO_printf(bio_err, "-certfile f add all certs in f\n"); |
| 289 | BIO_printf (bio_err, "-caname \"nm\" use nm as CA friendly name (can be used more than once).\n"); | 330 | BIO_printf(bio_err, "-CApath arg - PEM format directory of CA's\n"); |
| 290 | BIO_printf (bio_err, "-in infile input filename\n"); | 331 | BIO_printf(bio_err, "-CAfile arg - PEM format file of CA's\n"); |
| 291 | BIO_printf (bio_err, "-out outfile output filename\n"); | 332 | BIO_printf(bio_err, "-name \"name\" use name as friendly name\n"); |
| 292 | BIO_printf (bio_err, "-noout don't output anything, just verify.\n"); | 333 | BIO_printf(bio_err, "-caname \"nm\" use nm as CA friendly name (can be used more than once).\n"); |
| 293 | BIO_printf (bio_err, "-nomacver don't verify MAC.\n"); | 334 | BIO_printf(bio_err, "-in infile input filename\n"); |
| 294 | BIO_printf (bio_err, "-nocerts don't output certificates.\n"); | 335 | BIO_printf(bio_err, "-out outfile output filename\n"); |
| 295 | BIO_printf (bio_err, "-clcerts only output client certificates.\n"); | 336 | BIO_printf(bio_err, "-noout don't output anything, just verify.\n"); |
| 296 | BIO_printf (bio_err, "-cacerts only output CA certificates.\n"); | 337 | BIO_printf(bio_err, "-nomacver don't verify MAC.\n"); |
| 297 | BIO_printf (bio_err, "-nokeys don't output private keys.\n"); | 338 | BIO_printf(bio_err, "-nocerts don't output certificates.\n"); |
| 298 | BIO_printf (bio_err, "-info give info about PKCS#12 structure.\n"); | 339 | BIO_printf(bio_err, "-clcerts only output client certificates.\n"); |
| 299 | BIO_printf (bio_err, "-des encrypt private keys with DES\n"); | 340 | BIO_printf(bio_err, "-cacerts only output CA certificates.\n"); |
| 300 | BIO_printf (bio_err, "-des3 encrypt private keys with triple DES (default)\n"); | 341 | BIO_printf(bio_err, "-nokeys don't output private keys.\n"); |
| 342 | BIO_printf(bio_err, "-info give info about PKCS#12 structure.\n"); | ||
| 343 | BIO_printf(bio_err, "-des encrypt private keys with DES\n"); | ||
| 344 | BIO_printf(bio_err, "-des3 encrypt private keys with triple DES (default)\n"); | ||
| 301 | #ifndef OPENSSL_NO_IDEA | 345 | #ifndef OPENSSL_NO_IDEA |
| 302 | BIO_printf (bio_err, "-idea encrypt private keys with idea\n"); | 346 | BIO_printf(bio_err, "-idea encrypt private keys with idea\n"); |
| 303 | #endif | 347 | #endif |
| 304 | #ifndef OPENSSL_NO_SEED | 348 | #ifndef OPENSSL_NO_SEED |
| 305 | BIO_printf (bio_err, "-seed encrypt private keys with seed\n"); | 349 | BIO_printf(bio_err, "-seed encrypt private keys with seed\n"); |
| 306 | #endif | 350 | #endif |
| 307 | #ifndef OPENSSL_NO_AES | 351 | #ifndef OPENSSL_NO_AES |
| 308 | BIO_printf (bio_err, "-aes128, -aes192, -aes256\n"); | 352 | BIO_printf(bio_err, "-aes128, -aes192, -aes256\n"); |
| 309 | BIO_printf (bio_err, " encrypt PEM output with cbc aes\n"); | 353 | BIO_printf(bio_err, " encrypt PEM output with cbc aes\n"); |
| 310 | #endif | 354 | #endif |
| 311 | #ifndef OPENSSL_NO_CAMELLIA | 355 | #ifndef OPENSSL_NO_CAMELLIA |
| 312 | BIO_printf (bio_err, "-camellia128, -camellia192, -camellia256\n"); | 356 | BIO_printf(bio_err, "-camellia128, -camellia192, -camellia256\n"); |
| 313 | BIO_printf (bio_err, " encrypt PEM output with cbc camellia\n"); | 357 | BIO_printf(bio_err, " encrypt PEM output with cbc camellia\n"); |
| 314 | #endif | 358 | #endif |
| 315 | BIO_printf (bio_err, "-nodes don't encrypt private keys\n"); | 359 | BIO_printf(bio_err, "-nodes don't encrypt private keys\n"); |
| 316 | BIO_printf (bio_err, "-noiter don't use encryption iteration\n"); | 360 | BIO_printf(bio_err, "-noiter don't use encryption iteration\n"); |
| 317 | BIO_printf (bio_err, "-nomaciter don't use MAC iteration\n"); | 361 | BIO_printf(bio_err, "-nomaciter don't use MAC iteration\n"); |
| 318 | BIO_printf (bio_err, "-maciter use MAC iteration\n"); | 362 | BIO_printf(bio_err, "-maciter use MAC iteration\n"); |
| 319 | BIO_printf (bio_err, "-nomac don't generate MAC\n"); | 363 | BIO_printf(bio_err, "-nomac don't generate MAC\n"); |
| 320 | BIO_printf (bio_err, "-twopass separate MAC, encryption passwords\n"); | 364 | BIO_printf(bio_err, "-twopass separate MAC, encryption passwords\n"); |
| 321 | BIO_printf (bio_err, "-descert encrypt PKCS#12 certificates with triple DES (default RC2-40)\n"); | 365 | BIO_printf(bio_err, "-descert encrypt PKCS#12 certificates with triple DES (default RC2-40)\n"); |
| 322 | BIO_printf (bio_err, "-certpbe alg specify certificate PBE algorithm (default RC2-40)\n"); | 366 | BIO_printf(bio_err, "-certpbe alg specify certificate PBE algorithm (default RC2-40)\n"); |
| 323 | BIO_printf (bio_err, "-keypbe alg specify private key PBE algorithm (default 3DES)\n"); | 367 | BIO_printf(bio_err, "-keypbe alg specify private key PBE algorithm (default 3DES)\n"); |
| 324 | BIO_printf (bio_err, "-macalg alg digest algorithm used in MAC (default SHA1)\n"); | 368 | BIO_printf(bio_err, "-macalg alg digest algorithm used in MAC (default SHA1)\n"); |
| 325 | BIO_printf (bio_err, "-keyex set MS key exchange type\n"); | 369 | BIO_printf(bio_err, "-keyex set MS key exchange type\n"); |
| 326 | BIO_printf (bio_err, "-keysig set MS key signature type\n"); | 370 | BIO_printf(bio_err, "-keysig set MS key signature type\n"); |
| 327 | BIO_printf (bio_err, "-password p set import/export password source\n"); | 371 | BIO_printf(bio_err, "-password p set import/export password source\n"); |
| 328 | BIO_printf (bio_err, "-passin p input file pass phrase source\n"); | 372 | BIO_printf(bio_err, "-passin p input file pass phrase source\n"); |
| 329 | BIO_printf (bio_err, "-passout p output file pass phrase source\n"); | 373 | BIO_printf(bio_err, "-passout p output file pass phrase source\n"); |
| 330 | #ifndef OPENSSL_NO_ENGINE | 374 | #ifndef OPENSSL_NO_ENGINE |
| 331 | BIO_printf (bio_err, "-engine e use engine e, possibly a hardware device.\n"); | 375 | BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n"); |
| 332 | #endif | 376 | #endif |
| 333 | BIO_printf(bio_err, "-rand file%cfile%c...\n", ':', ':'); | 377 | BIO_printf(bio_err, "-rand file%cfile%c...\n", ':', ':'); |
| 334 | BIO_printf(bio_err, " load the file (or the files in the directory) into\n"); | 378 | BIO_printf(bio_err, " load the file (or the files in the directory) into\n"); |
| 335 | BIO_printf(bio_err, " the random number generator\n"); | 379 | BIO_printf(bio_err, " the random number generator\n"); |
| 336 | BIO_printf(bio_err, "-CSP name Microsoft CSP name\n"); | 380 | BIO_printf(bio_err, "-CSP name Microsoft CSP name\n"); |
| 337 | BIO_printf(bio_err, "-LMK Add local machine keyset attribute to private key\n"); | 381 | BIO_printf(bio_err, "-LMK Add local machine keyset attribute to private key\n"); |
| 338 | goto end; | 382 | goto end; |
| 339 | } | 383 | } |
| 340 | |||
| 341 | #ifndef OPENSSL_NO_ENGINE | 384 | #ifndef OPENSSL_NO_ENGINE |
| 342 | e = setup_engine(bio_err, engine, 0); | 385 | e = setup_engine(bio_err, engine, 0); |
| 343 | #endif | ||
| 344 | |||
| 345 | if(passarg) { | ||
| 346 | if(export_cert) passargout = passarg; | ||
| 347 | else passargin = passarg; | ||
| 348 | } | ||
| 349 | |||
| 350 | if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { | ||
| 351 | BIO_printf(bio_err, "Error getting passwords\n"); | ||
| 352 | goto end; | ||
| 353 | } | ||
| 354 | |||
| 355 | if(!cpass) { | ||
| 356 | if(export_cert) cpass = passout; | ||
| 357 | else cpass = passin; | ||
| 358 | } | ||
| 359 | |||
| 360 | if(cpass) { | ||
| 361 | mpass = cpass; | ||
| 362 | noprompt = 1; | ||
| 363 | } else { | ||
| 364 | cpass = pass; | ||
| 365 | mpass = macpass; | ||
| 366 | } | ||
| 367 | |||
| 368 | if(export_cert || inrand) { | ||
| 369 | app_RAND_load_file(NULL, bio_err, (inrand != NULL)); | ||
| 370 | if (inrand != NULL) | ||
| 371 | BIO_printf(bio_err,"%ld semi-random bytes loaded\n", | ||
| 372 | app_RAND_load_files(inrand)); | ||
| 373 | } | ||
| 374 | ERR_load_crypto_strings(); | ||
| 375 | |||
| 376 | #ifdef CRYPTO_MDEBUG | ||
| 377 | CRYPTO_push_info("read files"); | ||
| 378 | #endif | 386 | #endif |
| 379 | 387 | ||
| 380 | if (!infile) in = BIO_new_fp(stdin, BIO_NOCLOSE); | 388 | if (passarg) { |
| 381 | else in = BIO_new_file(infile, "rb"); | 389 | if (export_cert) |
| 382 | if (!in) { | 390 | passargout = passarg; |
| 383 | BIO_printf(bio_err, "Error opening input file %s\n", | 391 | else |
| 384 | infile ? infile : "<stdin>"); | 392 | passargin = passarg; |
| 385 | perror (infile); | 393 | } |
| 386 | goto end; | 394 | if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { |
| 387 | } | 395 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 396 | goto end; | ||
| 397 | } | ||
| 398 | if (!cpass) { | ||
| 399 | if (export_cert) | ||
| 400 | cpass = passout; | ||
| 401 | else | ||
| 402 | cpass = passin; | ||
| 403 | } | ||
| 404 | if (cpass) { | ||
| 405 | mpass = cpass; | ||
| 406 | noprompt = 1; | ||
| 407 | } else { | ||
| 408 | cpass = pass; | ||
| 409 | mpass = macpass; | ||
| 410 | } | ||
| 411 | |||
| 412 | if (export_cert || inrand) { | ||
| 413 | app_RAND_load_file(NULL, bio_err, (inrand != NULL)); | ||
| 414 | if (inrand != NULL) | ||
| 415 | BIO_printf(bio_err, "%ld semi-random bytes loaded\n", | ||
| 416 | app_RAND_load_files(inrand)); | ||
| 417 | } | ||
| 418 | ERR_load_crypto_strings(); | ||
| 388 | 419 | ||
| 389 | #ifdef CRYPTO_MDEBUG | 420 | #ifdef CRYPTO_MDEBUG |
| 390 | CRYPTO_pop_info(); | 421 | CRYPTO_push_info("read files"); |
| 391 | CRYPTO_push_info("write files"); | ||
| 392 | #endif | ||
| 393 | |||
| 394 | if (!outfile) { | ||
| 395 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | ||
| 396 | } else out = BIO_new_file(outfile, "wb"); | ||
| 397 | if (!out) { | ||
| 398 | BIO_printf(bio_err, "Error opening output file %s\n", | ||
| 399 | outfile ? outfile : "<stdout>"); | ||
| 400 | perror (outfile); | ||
| 401 | goto end; | ||
| 402 | } | ||
| 403 | if (twopass) { | ||
| 404 | #ifdef CRYPTO_MDEBUG | ||
| 405 | CRYPTO_push_info("read MAC password"); | ||
| 406 | #endif | 422 | #endif |
| 407 | if(EVP_read_pw_string (macpass, sizeof macpass, "Enter MAC Password:", export_cert)) | 423 | |
| 408 | { | 424 | if (!infile) |
| 409 | BIO_printf (bio_err, "Can't read Password\n"); | 425 | in = BIO_new_fp(stdin, BIO_NOCLOSE); |
| 410 | goto end; | 426 | else |
| 411 | } | 427 | in = BIO_new_file(infile, "rb"); |
| 428 | if (!in) { | ||
| 429 | BIO_printf(bio_err, "Error opening input file %s\n", | ||
| 430 | infile ? infile : "<stdin>"); | ||
| 431 | perror(infile); | ||
| 432 | goto end; | ||
| 433 | } | ||
| 412 | #ifdef CRYPTO_MDEBUG | 434 | #ifdef CRYPTO_MDEBUG |
| 413 | CRYPTO_pop_info(); | 435 | CRYPTO_pop_info(); |
| 436 | CRYPTO_push_info("write files"); | ||
| 414 | #endif | 437 | #endif |
| 415 | } | ||
| 416 | 438 | ||
| 417 | if (export_cert) { | 439 | if (!outfile) { |
| 418 | EVP_PKEY *key = NULL; | 440 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 419 | X509 *ucert = NULL, *x = NULL; | 441 | } else |
| 420 | STACK_OF(X509) *certs=NULL; | 442 | out = BIO_new_file(outfile, "wb"); |
| 421 | const EVP_MD *macmd = NULL; | 443 | if (!out) { |
| 422 | unsigned char *catmp = NULL; | 444 | BIO_printf(bio_err, "Error opening output file %s\n", |
| 423 | int i; | 445 | outfile ? outfile : "<stdout>"); |
| 424 | 446 | perror(outfile); | |
| 425 | if ((options & (NOCERTS|NOKEYS)) == (NOCERTS|NOKEYS)) | 447 | goto end; |
| 426 | { | 448 | } |
| 427 | BIO_printf(bio_err, "Nothing to do!\n"); | 449 | if (twopass) { |
| 428 | goto export_end; | 450 | #ifdef CRYPTO_MDEBUG |
| 451 | CRYPTO_push_info("read MAC password"); | ||
| 452 | #endif | ||
| 453 | if (EVP_read_pw_string(macpass, sizeof macpass, "Enter MAC Password:", export_cert)) { | ||
| 454 | BIO_printf(bio_err, "Can't read Password\n"); | ||
| 455 | goto end; | ||
| 429 | } | 456 | } |
| 430 | |||
| 431 | if (options & NOCERTS) | ||
| 432 | chain = 0; | ||
| 433 | |||
| 434 | #ifdef CRYPTO_MDEBUG | 457 | #ifdef CRYPTO_MDEBUG |
| 435 | CRYPTO_push_info("process -export_cert"); | 458 | CRYPTO_pop_info(); |
| 436 | CRYPTO_push_info("reading private key"); | 459 | #endif |
| 437 | #endif | 460 | } |
| 438 | if (!(options & NOKEYS)) | 461 | if (export_cert) { |
| 439 | { | 462 | EVP_PKEY *key = NULL; |
| 440 | key = load_key(bio_err, keyname ? keyname : infile, | 463 | X509 *ucert = NULL, *x = NULL; |
| 441 | FORMAT_PEM, 1, passin, e, "private key"); | 464 | STACK_OF(X509) * certs = NULL; |
| 442 | if (!key) | 465 | const EVP_MD *macmd = NULL; |
| 466 | unsigned char *catmp = NULL; | ||
| 467 | int i; | ||
| 468 | |||
| 469 | if ((options & (NOCERTS | NOKEYS)) == (NOCERTS | NOKEYS)) { | ||
| 470 | BIO_printf(bio_err, "Nothing to do!\n"); | ||
| 443 | goto export_end; | 471 | goto export_end; |
| 444 | } | 472 | } |
| 473 | if (options & NOCERTS) | ||
| 474 | chain = 0; | ||
| 445 | 475 | ||
| 446 | #ifdef CRYPTO_MDEBUG | 476 | #ifdef CRYPTO_MDEBUG |
| 447 | CRYPTO_pop_info(); | 477 | CRYPTO_push_info("process -export_cert"); |
| 448 | CRYPTO_push_info("reading certs from input"); | 478 | CRYPTO_push_info("reading private key"); |
| 479 | #endif | ||
| 480 | if (!(options & NOKEYS)) { | ||
| 481 | key = load_key(bio_err, keyname ? keyname : infile, | ||
| 482 | FORMAT_PEM, 1, passin, e, "private key"); | ||
| 483 | if (!key) | ||
| 484 | goto export_end; | ||
| 485 | } | ||
| 486 | #ifdef CRYPTO_MDEBUG | ||
| 487 | CRYPTO_pop_info(); | ||
| 488 | CRYPTO_push_info("reading certs from input"); | ||
| 449 | #endif | 489 | #endif |
| 450 | 490 | ||
| 451 | /* Load in all certs in input file */ | 491 | /* Load in all certs in input file */ |
| 452 | if(!(options & NOCERTS)) | 492 | if (!(options & NOCERTS)) { |
| 453 | { | 493 | certs = load_certs(bio_err, infile, FORMAT_PEM, NULL, e, |
| 454 | certs = load_certs(bio_err, infile, FORMAT_PEM, NULL, e, | 494 | "certificates"); |
| 455 | "certificates"); | 495 | if (!certs) |
| 456 | if (!certs) | 496 | goto export_end; |
| 457 | goto export_end; | ||
| 458 | 497 | ||
| 459 | if (key) | 498 | if (key) { |
| 460 | { | 499 | /* Look for matching private key */ |
| 461 | /* Look for matching private key */ | 500 | for (i = 0; i < sk_X509_num(certs); i++) { |
| 462 | for(i = 0; i < sk_X509_num(certs); i++) | 501 | x = sk_X509_value(certs, i); |
| 463 | { | 502 | if (X509_check_private_key(x, key)) { |
| 464 | x = sk_X509_value(certs, i); | 503 | ucert = x; |
| 465 | if(X509_check_private_key(x, key)) | 504 | /* Zero keyid and alias */ |
| 466 | { | 505 | X509_keyid_set1(ucert, NULL, 0); |
| 467 | ucert = x; | 506 | X509_alias_set1(ucert, NULL, 0); |
| 468 | /* Zero keyid and alias */ | 507 | /* Remove from list */ |
| 469 | X509_keyid_set1(ucert, NULL, 0); | 508 | (void) sk_X509_delete(certs, i); |
| 470 | X509_alias_set1(ucert, NULL, 0); | 509 | break; |
| 471 | /* Remove from list */ | ||
| 472 | (void)sk_X509_delete(certs, i); | ||
| 473 | break; | ||
| 474 | } | 510 | } |
| 475 | } | 511 | } |
| 476 | if (!ucert) | 512 | if (!ucert) { |
| 477 | { | 513 | BIO_printf(bio_err, "No certificate matches private key\n"); |
| 478 | BIO_printf(bio_err, "No certificate matches private key\n"); | 514 | goto export_end; |
| 479 | goto export_end; | ||
| 480 | } | 515 | } |
| 481 | } | 516 | } |
| 482 | |||
| 483 | } | 517 | } |
| 484 | |||
| 485 | #ifdef CRYPTO_MDEBUG | 518 | #ifdef CRYPTO_MDEBUG |
| 486 | CRYPTO_pop_info(); | 519 | CRYPTO_pop_info(); |
| 487 | CRYPTO_push_info("reading certs from input 2"); | 520 | CRYPTO_push_info("reading certs from input 2"); |
| 488 | #endif | 521 | #endif |
| 489 | 522 | ||
| 490 | /* Add any more certificates asked for */ | 523 | /* Add any more certificates asked for */ |
| 491 | if(certfile) | 524 | if (certfile) { |
| 492 | { | 525 | STACK_OF(X509) * morecerts = NULL; |
| 493 | STACK_OF(X509) *morecerts=NULL; | 526 | if (!(morecerts = load_certs(bio_err, certfile, FORMAT_PEM, |
| 494 | if(!(morecerts = load_certs(bio_err, certfile, FORMAT_PEM, | 527 | NULL, e, |
| 495 | NULL, e, | 528 | "certificates from certfile"))) |
| 496 | "certificates from certfile"))) | 529 | goto export_end; |
| 497 | goto export_end; | 530 | while (sk_X509_num(morecerts) > 0) |
| 498 | while(sk_X509_num(morecerts) > 0) | 531 | sk_X509_push(certs, sk_X509_shift(morecerts)); |
| 499 | sk_X509_push(certs, sk_X509_shift(morecerts)); | 532 | sk_X509_free(morecerts); |
| 500 | sk_X509_free(morecerts); | 533 | } |
| 501 | } | ||
| 502 | |||
| 503 | #ifdef CRYPTO_MDEBUG | 534 | #ifdef CRYPTO_MDEBUG |
| 504 | CRYPTO_pop_info(); | 535 | CRYPTO_pop_info(); |
| 505 | CRYPTO_push_info("reading certs from certfile"); | 536 | CRYPTO_push_info("reading certs from certfile"); |
| 506 | #endif | 537 | #endif |
| 507 | 538 | ||
| 508 | #ifdef CRYPTO_MDEBUG | 539 | #ifdef CRYPTO_MDEBUG |
| 509 | CRYPTO_pop_info(); | 540 | CRYPTO_pop_info(); |
| 510 | CRYPTO_push_info("building chain"); | 541 | CRYPTO_push_info("building chain"); |
| 511 | #endif | 542 | #endif |
| 512 | 543 | ||
| 513 | /* If chaining get chain from user cert */ | 544 | /* If chaining get chain from user cert */ |
| 514 | if (chain) { | 545 | if (chain) { |
| 515 | int vret; | 546 | int vret; |
| 516 | STACK_OF(X509) *chain2; | 547 | STACK_OF(X509) * chain2; |
| 517 | X509_STORE *store = X509_STORE_new(); | 548 | X509_STORE *store = X509_STORE_new(); |
| 518 | if (!store) | 549 | if (!store) { |
| 519 | { | 550 | BIO_printf(bio_err, "Memory allocation error\n"); |
| 520 | BIO_printf (bio_err, "Memory allocation error\n"); | 551 | goto export_end; |
| 521 | goto export_end; | ||
| 522 | } | 552 | } |
| 523 | if (!X509_STORE_load_locations(store, CAfile, CApath)) | 553 | if (!X509_STORE_load_locations(store, CAfile, CApath)) |
| 524 | X509_STORE_set_default_paths (store); | 554 | X509_STORE_set_default_paths(store); |
| 525 | 555 | ||
| 526 | vret = get_cert_chain (ucert, store, &chain2); | 556 | vret = get_cert_chain(ucert, store, &chain2); |
| 527 | X509_STORE_free(store); | 557 | X509_STORE_free(store); |
| 528 | 558 | ||
| 529 | if (!vret) { | 559 | if (!vret) { |
| 530 | /* Exclude verified certificate */ | 560 | /* Exclude verified certificate */ |
| 531 | for (i = 1; i < sk_X509_num (chain2) ; i++) | 561 | for (i = 1; i < sk_X509_num(chain2); i++) |
| 532 | sk_X509_push(certs, sk_X509_value (chain2, i)); | 562 | sk_X509_push(certs, sk_X509_value(chain2, i)); |
| 533 | /* Free first certificate */ | 563 | /* Free first certificate */ |
| 534 | X509_free(sk_X509_value(chain2, 0)); | 564 | X509_free(sk_X509_value(chain2, 0)); |
| 535 | sk_X509_free(chain2); | 565 | sk_X509_free(chain2); |
| 536 | } else { | 566 | } else { |
| 537 | if (vret >= 0) | 567 | if (vret >= 0) |
| 538 | BIO_printf (bio_err, "Error %s getting chain.\n", | 568 | BIO_printf(bio_err, "Error %s getting chain.\n", |
| 539 | X509_verify_cert_error_string(vret)); | 569 | X509_verify_cert_error_string(vret)); |
| 540 | else | 570 | else |
| 541 | ERR_print_errors(bio_err); | 571 | ERR_print_errors(bio_err); |
| 542 | goto export_end; | 572 | goto export_end; |
| 543 | } | 573 | } |
| 544 | } | 574 | } |
| 545 | 575 | /* Add any CA names */ | |
| 546 | /* Add any CA names */ | ||
| 547 | 576 | ||
| 548 | for (i = 0; i < sk_OPENSSL_STRING_num(canames); i++) | 577 | for (i = 0; i < sk_OPENSSL_STRING_num(canames); i++) { |
| 549 | { | 578 | catmp = (unsigned char *) sk_OPENSSL_STRING_value(canames, i); |
| 550 | catmp = (unsigned char *)sk_OPENSSL_STRING_value(canames, i); | 579 | X509_alias_set1(sk_X509_value(certs, i), catmp, -1); |
| 551 | X509_alias_set1(sk_X509_value(certs, i), catmp, -1); | ||
| 552 | } | 580 | } |
| 553 | 581 | ||
| 554 | if (csp_name && key) | 582 | if (csp_name && key) |
| 555 | EVP_PKEY_add1_attr_by_NID(key, NID_ms_csp_name, | 583 | EVP_PKEY_add1_attr_by_NID(key, NID_ms_csp_name, |
| 556 | MBSTRING_ASC, (unsigned char *)csp_name, -1); | 584 | MBSTRING_ASC, (unsigned char *) csp_name, -1); |
| 557 | 585 | ||
| 558 | if (add_lmk && key) | 586 | if (add_lmk && key) |
| 559 | EVP_PKEY_add1_attr_by_NID(key, NID_LocalKeySet, 0, NULL, -1); | 587 | EVP_PKEY_add1_attr_by_NID(key, NID_LocalKeySet, 0, NULL, -1); |
| 560 | 588 | ||
| 561 | #ifdef CRYPTO_MDEBUG | 589 | #ifdef CRYPTO_MDEBUG |
| 562 | CRYPTO_pop_info(); | 590 | CRYPTO_pop_info(); |
| 563 | CRYPTO_push_info("reading password"); | 591 | CRYPTO_push_info("reading password"); |
| 564 | #endif | 592 | #endif |
| 565 | 593 | ||
| 566 | if(!noprompt && | 594 | if (!noprompt && |
| 567 | EVP_read_pw_string(pass, sizeof pass, "Enter Export Password:", 1)) | 595 | EVP_read_pw_string(pass, sizeof pass, "Enter Export Password:", 1)) { |
| 568 | { | 596 | BIO_printf(bio_err, "Can't read Password\n"); |
| 569 | BIO_printf (bio_err, "Can't read Password\n"); | 597 | goto export_end; |
| 570 | goto export_end; | 598 | } |
| 571 | } | 599 | if (!twopass) |
| 572 | if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass); | 600 | BUF_strlcpy(macpass, pass, sizeof macpass); |
| 573 | 601 | ||
| 574 | #ifdef CRYPTO_MDEBUG | 602 | #ifdef CRYPTO_MDEBUG |
| 575 | CRYPTO_pop_info(); | 603 | CRYPTO_pop_info(); |
| 576 | CRYPTO_push_info("creating PKCS#12 structure"); | 604 | CRYPTO_push_info("creating PKCS#12 structure"); |
| 577 | #endif | 605 | #endif |
| 578 | 606 | ||
| 579 | p12 = PKCS12_create(cpass, name, key, ucert, certs, | 607 | p12 = PKCS12_create(cpass, name, key, ucert, certs, |
| 580 | key_pbe, cert_pbe, iter, -1, keytype); | 608 | key_pbe, cert_pbe, iter, -1, keytype); |
| 581 | 609 | ||
| 582 | if (!p12) | 610 | if (!p12) { |
| 583 | { | 611 | ERR_print_errors(bio_err); |
| 584 | ERR_print_errors (bio_err); | 612 | goto export_end; |
| 585 | goto export_end; | ||
| 586 | } | 613 | } |
| 587 | 614 | if (macalg) { | |
| 588 | if (macalg) | 615 | macmd = EVP_get_digestbyname(macalg); |
| 589 | { | 616 | if (!macmd) { |
| 590 | macmd = EVP_get_digestbyname(macalg); | 617 | BIO_printf(bio_err, "Unknown digest algorithm %s\n", |
| 591 | if (!macmd) | 618 | macalg); |
| 592 | { | ||
| 593 | BIO_printf(bio_err, "Unknown digest algorithm %s\n", | ||
| 594 | macalg); | ||
| 595 | } | 619 | } |
| 596 | } | 620 | } |
| 597 | 621 | if (maciter != -1) | |
| 598 | if (maciter != -1) | 622 | PKCS12_set_mac(p12, mpass, -1, NULL, 0, maciter, macmd); |
| 599 | PKCS12_set_mac(p12, mpass, -1, NULL, 0, maciter, macmd); | ||
| 600 | 623 | ||
| 601 | #ifdef CRYPTO_MDEBUG | 624 | #ifdef CRYPTO_MDEBUG |
| 602 | CRYPTO_pop_info(); | 625 | CRYPTO_pop_info(); |
| 603 | CRYPTO_push_info("writing pkcs12"); | 626 | CRYPTO_push_info("writing pkcs12"); |
| 604 | #endif | 627 | #endif |
| 605 | 628 | ||
| 606 | i2d_PKCS12_bio(out, p12); | 629 | i2d_PKCS12_bio(out, p12); |
| 607 | 630 | ||
| 608 | ret = 0; | 631 | ret = 0; |
| 609 | 632 | ||
| 610 | export_end: | 633 | export_end: |
| 611 | #ifdef CRYPTO_MDEBUG | 634 | #ifdef CRYPTO_MDEBUG |
| 612 | CRYPTO_pop_info(); | 635 | CRYPTO_pop_info(); |
| 613 | CRYPTO_pop_info(); | 636 | CRYPTO_pop_info(); |
| 614 | CRYPTO_push_info("process -export_cert: freeing"); | 637 | CRYPTO_push_info("process -export_cert: freeing"); |
| 615 | #endif | 638 | #endif |
| 616 | 639 | ||
| 617 | if (key) EVP_PKEY_free(key); | 640 | if (key) |
| 618 | if (certs) sk_X509_pop_free(certs, X509_free); | 641 | EVP_PKEY_free(key); |
| 619 | if (ucert) X509_free(ucert); | 642 | if (certs) |
| 643 | sk_X509_pop_free(certs, X509_free); | ||
| 644 | if (ucert) | ||
| 645 | X509_free(ucert); | ||
| 620 | 646 | ||
| 621 | #ifdef CRYPTO_MDEBUG | 647 | #ifdef CRYPTO_MDEBUG |
| 622 | CRYPTO_pop_info(); | 648 | CRYPTO_pop_info(); |
| 623 | #endif | 649 | #endif |
| 624 | goto end; | 650 | goto end; |
| 625 | |||
| 626 | } | ||
| 627 | |||
| 628 | if (!(p12 = d2i_PKCS12_bio (in, NULL))) { | ||
| 629 | ERR_print_errors(bio_err); | ||
| 630 | goto end; | ||
| 631 | } | ||
| 632 | 651 | ||
| 652 | } | ||
| 653 | if (!(p12 = d2i_PKCS12_bio(in, NULL))) { | ||
| 654 | ERR_print_errors(bio_err); | ||
| 655 | goto end; | ||
| 656 | } | ||
| 633 | #ifdef CRYPTO_MDEBUG | 657 | #ifdef CRYPTO_MDEBUG |
| 634 | CRYPTO_push_info("read import password"); | 658 | CRYPTO_push_info("read import password"); |
| 635 | #endif | 659 | #endif |
| 636 | if(!noprompt && EVP_read_pw_string(pass, sizeof pass, "Enter Import Password:", 0)) { | 660 | if (!noprompt && EVP_read_pw_string(pass, sizeof pass, "Enter Import Password:", 0)) { |
| 637 | BIO_printf (bio_err, "Can't read Password\n"); | 661 | BIO_printf(bio_err, "Can't read Password\n"); |
| 638 | goto end; | 662 | goto end; |
| 639 | } | 663 | } |
| 640 | #ifdef CRYPTO_MDEBUG | 664 | #ifdef CRYPTO_MDEBUG |
| 641 | CRYPTO_pop_info(); | 665 | CRYPTO_pop_info(); |
| 642 | #endif | 666 | #endif |
| 643 | 667 | ||
| 644 | if (!twopass) BUF_strlcpy(macpass, pass, sizeof macpass); | 668 | if (!twopass) |
| 669 | BUF_strlcpy(macpass, pass, sizeof macpass); | ||
| 645 | 670 | ||
| 646 | if ((options & INFO) && p12->mac) BIO_printf (bio_err, "MAC Iteration %ld\n", p12->mac->iter ? ASN1_INTEGER_get (p12->mac->iter) : 1); | 671 | if ((options & INFO) && p12->mac) |
| 647 | if(macver) { | 672 | BIO_printf(bio_err, "MAC Iteration %ld\n", p12->mac->iter ? ASN1_INTEGER_get(p12->mac->iter) : 1); |
| 673 | if (macver) { | ||
| 648 | #ifdef CRYPTO_MDEBUG | 674 | #ifdef CRYPTO_MDEBUG |
| 649 | CRYPTO_push_info("verify MAC"); | 675 | CRYPTO_push_info("verify MAC"); |
| 650 | #endif | 676 | #endif |
| 651 | /* If we enter empty password try no password first */ | 677 | /* If we enter empty password try no password first */ |
| 652 | if(!mpass[0] && PKCS12_verify_mac(p12, NULL, 0)) { | 678 | if (!mpass[0] && PKCS12_verify_mac(p12, NULL, 0)) { |
| 653 | /* If mac and crypto pass the same set it to NULL too */ | 679 | /* If mac and crypto pass the same set it to NULL too */ |
| 654 | if(!twopass) cpass = NULL; | 680 | if (!twopass) |
| 655 | } else if (!PKCS12_verify_mac(p12, mpass, -1)) { | 681 | cpass = NULL; |
| 656 | BIO_printf (bio_err, "Mac verify error: invalid password?\n"); | 682 | } else if (!PKCS12_verify_mac(p12, mpass, -1)) { |
| 657 | ERR_print_errors (bio_err); | 683 | BIO_printf(bio_err, "Mac verify error: invalid password?\n"); |
| 658 | goto end; | 684 | ERR_print_errors(bio_err); |
| 659 | } | 685 | goto end; |
| 660 | BIO_printf (bio_err, "MAC verified OK\n"); | 686 | } |
| 687 | BIO_printf(bio_err, "MAC verified OK\n"); | ||
| 661 | #ifdef CRYPTO_MDEBUG | 688 | #ifdef CRYPTO_MDEBUG |
| 662 | CRYPTO_pop_info(); | 689 | CRYPTO_pop_info(); |
| 663 | #endif | 690 | #endif |
| 664 | } | 691 | } |
| 665 | |||
| 666 | #ifdef CRYPTO_MDEBUG | 692 | #ifdef CRYPTO_MDEBUG |
| 667 | CRYPTO_push_info("output keys and certificates"); | 693 | CRYPTO_push_info("output keys and certificates"); |
| 668 | #endif | 694 | #endif |
| 669 | if (!dump_certs_keys_p12 (out, p12, cpass, -1, options, passout)) { | 695 | if (!dump_certs_keys_p12(out, p12, cpass, -1, options, passout)) { |
| 670 | BIO_printf(bio_err, "Error outputting keys and certificates\n"); | 696 | BIO_printf(bio_err, "Error outputting keys and certificates\n"); |
| 671 | ERR_print_errors (bio_err); | 697 | ERR_print_errors(bio_err); |
| 672 | goto end; | 698 | goto end; |
| 673 | } | 699 | } |
| 674 | #ifdef CRYPTO_MDEBUG | 700 | #ifdef CRYPTO_MDEBUG |
| 675 | CRYPTO_pop_info(); | 701 | CRYPTO_pop_info(); |
| 676 | #endif | 702 | #endif |
| 677 | ret = 0; | 703 | ret = 0; |
| 678 | end: | 704 | end: |
| 679 | if (p12) PKCS12_free(p12); | 705 | if (p12) |
| 680 | if(export_cert || inrand) app_RAND_write_file(NULL, bio_err); | 706 | PKCS12_free(p12); |
| 707 | if (export_cert || inrand) | ||
| 708 | app_RAND_write_file(NULL, bio_err); | ||
| 681 | #ifdef CRYPTO_MDEBUG | 709 | #ifdef CRYPTO_MDEBUG |
| 682 | CRYPTO_remove_all_info(); | 710 | CRYPTO_remove_all_info(); |
| 683 | #endif | 711 | #endif |
| 684 | BIO_free(in); | 712 | BIO_free(in); |
| 685 | BIO_free_all(out); | 713 | BIO_free_all(out); |
| 686 | if (canames) sk_OPENSSL_STRING_free(canames); | 714 | if (canames) |
| 687 | if(passin) free(passin); | 715 | sk_OPENSSL_STRING_free(canames); |
| 688 | if(passout) free(passout); | 716 | if (passin) |
| 689 | apps_shutdown(); | 717 | free(passin); |
| 690 | return(ret); | 718 | if (passout) |
| 719 | free(passout); | ||
| 720 | apps_shutdown(); | ||
| 721 | return (ret); | ||
| 691 | } | 722 | } |
| 692 | 723 | ||
| 693 | int dump_certs_keys_p12 (BIO *out, PKCS12 *p12, char *pass, | 724 | int |
| 694 | int passlen, int options, char *pempass) | 725 | dump_certs_keys_p12(BIO * out, PKCS12 * p12, char *pass, |
| 726 | int passlen, int options, char *pempass) | ||
| 695 | { | 727 | { |
| 696 | STACK_OF(PKCS7) *asafes = NULL; | 728 | STACK_OF(PKCS7) * asafes = NULL; |
| 697 | STACK_OF(PKCS12_SAFEBAG) *bags; | 729 | STACK_OF(PKCS12_SAFEBAG) * bags; |
| 698 | int i, bagnid; | 730 | int i, bagnid; |
| 699 | int ret = 0; | 731 | int ret = 0; |
| 700 | PKCS7 *p7; | 732 | PKCS7 *p7; |
| 701 | 733 | ||
| 702 | if (!( asafes = PKCS12_unpack_authsafes(p12))) return 0; | 734 | if (!(asafes = PKCS12_unpack_authsafes(p12))) |
| 703 | for (i = 0; i < sk_PKCS7_num (asafes); i++) { | 735 | return 0; |
| 704 | p7 = sk_PKCS7_value (asafes, i); | 736 | for (i = 0; i < sk_PKCS7_num(asafes); i++) { |
| 705 | bagnid = OBJ_obj2nid (p7->type); | 737 | p7 = sk_PKCS7_value(asafes, i); |
| 738 | bagnid = OBJ_obj2nid(p7->type); | ||
| 706 | if (bagnid == NID_pkcs7_data) { | 739 | if (bagnid == NID_pkcs7_data) { |
| 707 | bags = PKCS12_unpack_p7data(p7); | 740 | bags = PKCS12_unpack_p7data(p7); |
| 708 | if (options & INFO) BIO_printf (bio_err, "PKCS7 Data\n"); | 741 | if (options & INFO) |
| 742 | BIO_printf(bio_err, "PKCS7 Data\n"); | ||
| 709 | } else if (bagnid == NID_pkcs7_encrypted) { | 743 | } else if (bagnid == NID_pkcs7_encrypted) { |
| 710 | if (options & INFO) { | 744 | if (options & INFO) { |
| 711 | BIO_printf(bio_err, "PKCS7 Encrypted data: "); | 745 | BIO_printf(bio_err, "PKCS7 Encrypted data: "); |
| 712 | alg_print(bio_err, | 746 | alg_print(bio_err, |
| 713 | p7->d.encrypted->enc_data->algorithm); | 747 | p7->d.encrypted->enc_data->algorithm); |
| 714 | } | 748 | } |
| 715 | bags = PKCS12_unpack_p7encdata(p7, pass, passlen); | 749 | bags = PKCS12_unpack_p7encdata(p7, pass, passlen); |
| 716 | } else continue; | 750 | } else |
| 717 | if (!bags) goto err; | 751 | continue; |
| 718 | if (!dump_certs_pkeys_bags (out, bags, pass, passlen, | 752 | if (!bags) |
| 719 | options, pempass)) { | 753 | goto err; |
| 720 | sk_PKCS12_SAFEBAG_pop_free (bags, PKCS12_SAFEBAG_free); | 754 | if (!dump_certs_pkeys_bags(out, bags, pass, passlen, |
| 755 | options, pempass)) { | ||
| 756 | sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free); | ||
| 721 | goto err; | 757 | goto err; |
| 722 | } | 758 | } |
| 723 | sk_PKCS12_SAFEBAG_pop_free (bags, PKCS12_SAFEBAG_free); | 759 | sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free); |
| 724 | bags = NULL; | 760 | bags = NULL; |
| 725 | } | 761 | } |
| 726 | ret = 1; | 762 | ret = 1; |
| 727 | 763 | ||
| 728 | err: | 764 | err: |
| 729 | 765 | ||
| 730 | if (asafes) | 766 | if (asafes) |
| 731 | sk_PKCS7_pop_free (asafes, PKCS7_free); | 767 | sk_PKCS7_pop_free(asafes, PKCS7_free); |
| 732 | return ret; | 768 | return ret; |
| 733 | } | 769 | } |
| 734 | 770 | ||
| 735 | int dump_certs_pkeys_bags (BIO *out, STACK_OF(PKCS12_SAFEBAG) *bags, | 771 | int |
| 736 | char *pass, int passlen, int options, char *pempass) | 772 | dump_certs_pkeys_bags(BIO * out, STACK_OF(PKCS12_SAFEBAG) * bags, |
| 773 | char *pass, int passlen, int options, char *pempass) | ||
| 737 | { | 774 | { |
| 738 | int i; | 775 | int i; |
| 739 | for (i = 0; i < sk_PKCS12_SAFEBAG_num (bags); i++) { | 776 | for (i = 0; i < sk_PKCS12_SAFEBAG_num(bags); i++) { |
| 740 | if (!dump_certs_pkeys_bag (out, | 777 | if (!dump_certs_pkeys_bag(out, |
| 741 | sk_PKCS12_SAFEBAG_value (bags, i), | 778 | sk_PKCS12_SAFEBAG_value(bags, i), |
| 742 | pass, passlen, | 779 | pass, passlen, |
| 743 | options, pempass)) | 780 | options, pempass)) |
| 744 | return 0; | 781 | return 0; |
| 745 | } | 782 | } |
| 746 | return 1; | 783 | return 1; |
| 747 | } | 784 | } |
| 748 | 785 | ||
| 749 | int dump_certs_pkeys_bag (BIO *out, PKCS12_SAFEBAG *bag, char *pass, | 786 | int |
| 750 | int passlen, int options, char *pempass) | 787 | dump_certs_pkeys_bag(BIO * out, PKCS12_SAFEBAG * bag, char *pass, |
| 788 | int passlen, int options, char *pempass) | ||
| 751 | { | 789 | { |
| 752 | EVP_PKEY *pkey; | 790 | EVP_PKEY *pkey; |
| 753 | PKCS8_PRIV_KEY_INFO *p8; | 791 | PKCS8_PRIV_KEY_INFO *p8; |
| 754 | X509 *x509; | 792 | X509 *x509; |
| 755 | 793 | ||
| 756 | switch (M_PKCS12_bag_type(bag)) | 794 | switch (M_PKCS12_bag_type(bag)) { |
| 757 | { | ||
| 758 | case NID_keyBag: | 795 | case NID_keyBag: |
| 759 | if (options & INFO) BIO_printf (bio_err, "Key bag\n"); | 796 | if (options & INFO) |
| 760 | if (options & NOKEYS) return 1; | 797 | BIO_printf(bio_err, "Key bag\n"); |
| 761 | print_attribs (out, bag->attrib, "Bag Attributes"); | 798 | if (options & NOKEYS) |
| 799 | return 1; | ||
| 800 | print_attribs(out, bag->attrib, "Bag Attributes"); | ||
| 762 | p8 = bag->value.keybag; | 801 | p8 = bag->value.keybag; |
| 763 | if (!(pkey = EVP_PKCS82PKEY (p8))) return 0; | 802 | if (!(pkey = EVP_PKCS82PKEY(p8))) |
| 764 | print_attribs (out, p8->attributes, "Key Attributes"); | 803 | return 0; |
| 765 | PEM_write_bio_PrivateKey (out, pkey, enc, NULL, 0, NULL, pempass); | 804 | print_attribs(out, p8->attributes, "Key Attributes"); |
| 805 | PEM_write_bio_PrivateKey(out, pkey, enc, NULL, 0, NULL, pempass); | ||
| 766 | EVP_PKEY_free(pkey); | 806 | EVP_PKEY_free(pkey); |
| 767 | break; | 807 | break; |
| 768 | 808 | ||
| 769 | case NID_pkcs8ShroudedKeyBag: | 809 | case NID_pkcs8ShroudedKeyBag: |
| 770 | if (options & INFO) { | 810 | if (options & INFO) { |
| 771 | BIO_printf (bio_err, "Shrouded Keybag: "); | 811 | BIO_printf(bio_err, "Shrouded Keybag: "); |
| 772 | alg_print (bio_err, bag->value.shkeybag->algor); | 812 | alg_print(bio_err, bag->value.shkeybag->algor); |
| 773 | } | 813 | } |
| 774 | if (options & NOKEYS) return 1; | 814 | if (options & NOKEYS) |
| 775 | print_attribs (out, bag->attrib, "Bag Attributes"); | 815 | return 1; |
| 816 | print_attribs(out, bag->attrib, "Bag Attributes"); | ||
| 776 | if (!(p8 = PKCS12_decrypt_skey(bag, pass, passlen))) | 817 | if (!(p8 = PKCS12_decrypt_skey(bag, pass, passlen))) |
| 777 | return 0; | 818 | return 0; |
| 778 | if (!(pkey = EVP_PKCS82PKEY (p8))) { | 819 | if (!(pkey = EVP_PKCS82PKEY(p8))) { |
| 779 | PKCS8_PRIV_KEY_INFO_free(p8); | 820 | PKCS8_PRIV_KEY_INFO_free(p8); |
| 780 | return 0; | 821 | return 0; |
| 781 | } | 822 | } |
| 782 | print_attribs (out, p8->attributes, "Key Attributes"); | 823 | print_attribs(out, p8->attributes, "Key Attributes"); |
| 783 | PKCS8_PRIV_KEY_INFO_free(p8); | 824 | PKCS8_PRIV_KEY_INFO_free(p8); |
| 784 | PEM_write_bio_PrivateKey (out, pkey, enc, NULL, 0, NULL, pempass); | 825 | PEM_write_bio_PrivateKey(out, pkey, enc, NULL, 0, NULL, pempass); |
| 785 | EVP_PKEY_free(pkey); | 826 | EVP_PKEY_free(pkey); |
| 786 | break; | 827 | break; |
| 787 | 828 | ||
| 788 | case NID_certBag: | 829 | case NID_certBag: |
| 789 | if (options & INFO) BIO_printf (bio_err, "Certificate bag\n"); | 830 | if (options & INFO) |
| 790 | if (options & NOCERTS) return 1; | 831 | BIO_printf(bio_err, "Certificate bag\n"); |
| 791 | if (PKCS12_get_attr(bag, NID_localKeyID)) { | 832 | if (options & NOCERTS) |
| 792 | if (options & CACERTS) return 1; | 833 | return 1; |
| 793 | } else if (options & CLCERTS) return 1; | 834 | if (PKCS12_get_attr(bag, NID_localKeyID)) { |
| 794 | print_attribs (out, bag->attrib, "Bag Attributes"); | 835 | if (options & CACERTS) |
| 795 | if (M_PKCS12_cert_bag_type(bag) != NID_x509Certificate ) | 836 | return 1; |
| 796 | return 1; | 837 | } else if (options & CLCERTS) |
| 797 | if (!(x509 = PKCS12_certbag2x509(bag))) return 0; | 838 | return 1; |
| 798 | dump_cert_text (out, x509); | 839 | print_attribs(out, bag->attrib, "Bag Attributes"); |
| 799 | PEM_write_bio_X509 (out, x509); | 840 | if (M_PKCS12_cert_bag_type(bag) != NID_x509Certificate) |
| 841 | return 1; | ||
| 842 | if (!(x509 = PKCS12_certbag2x509(bag))) | ||
| 843 | return 0; | ||
| 844 | dump_cert_text(out, x509); | ||
| 845 | PEM_write_bio_X509(out, x509); | ||
| 800 | X509_free(x509); | 846 | X509_free(x509); |
| 801 | break; | 847 | break; |
| 802 | 848 | ||
| 803 | case NID_safeContentsBag: | 849 | case NID_safeContentsBag: |
| 804 | if (options & INFO) BIO_printf (bio_err, "Safe Contents bag\n"); | 850 | if (options & INFO) |
| 805 | print_attribs (out, bag->attrib, "Bag Attributes"); | 851 | BIO_printf(bio_err, "Safe Contents bag\n"); |
| 806 | return dump_certs_pkeys_bags (out, bag->value.safes, pass, | 852 | print_attribs(out, bag->attrib, "Bag Attributes"); |
| 807 | passlen, options, pempass); | 853 | return dump_certs_pkeys_bags(out, bag->value.safes, pass, |
| 808 | 854 | passlen, options, pempass); | |
| 855 | |||
| 809 | default: | 856 | default: |
| 810 | BIO_printf (bio_err, "Warning unsupported bag type: "); | 857 | BIO_printf(bio_err, "Warning unsupported bag type: "); |
| 811 | i2a_ASN1_OBJECT (bio_err, bag->type); | 858 | i2a_ASN1_OBJECT(bio_err, bag->type); |
| 812 | BIO_printf (bio_err, "\n"); | 859 | BIO_printf(bio_err, "\n"); |
| 813 | return 1; | 860 | return 1; |
| 814 | break; | 861 | break; |
| 815 | } | 862 | } |
| 816 | return 1; | 863 | return 1; |
| 817 | } | 864 | } |
| @@ -820,21 +867,26 @@ int dump_certs_pkeys_bag (BIO *out, PKCS12_SAFEBAG *bag, char *pass, | |||
| 820 | 867 | ||
| 821 | /* Hope this is OK .... */ | 868 | /* Hope this is OK .... */ |
| 822 | 869 | ||
| 823 | int get_cert_chain (X509 *cert, X509_STORE *store, STACK_OF(X509) **chain) | 870 | int |
| 871 | get_cert_chain(X509 * cert, X509_STORE * store, STACK_OF(X509) ** chain) | ||
| 824 | { | 872 | { |
| 825 | X509_STORE_CTX store_ctx; | 873 | X509_STORE_CTX store_ctx; |
| 826 | STACK_OF(X509) *chn; | 874 | STACK_OF(X509) * chn; |
| 827 | int i = 0; | 875 | int i = 0; |
| 828 | 876 | ||
| 829 | /* FIXME: Should really check the return status of X509_STORE_CTX_init | 877 | /* |
| 830 | * for an error, but how that fits into the return value of this | 878 | * FIXME: Should really check the return status of |
| 831 | * function is less obvious. */ | 879 | * X509_STORE_CTX_init for an error, but how that fits into the |
| 880 | * return value of this function is less obvious. | ||
| 881 | */ | ||
| 832 | X509_STORE_CTX_init(&store_ctx, store, cert, NULL); | 882 | X509_STORE_CTX_init(&store_ctx, store, cert, NULL); |
| 833 | if (X509_verify_cert(&store_ctx) <= 0) { | 883 | if (X509_verify_cert(&store_ctx) <= 0) { |
| 834 | i = X509_STORE_CTX_get_error (&store_ctx); | 884 | i = X509_STORE_CTX_get_error(&store_ctx); |
| 835 | if (i == 0) | 885 | if (i == 0) |
| 836 | /* avoid returning 0 if X509_verify_cert() did not | 886 | /* |
| 837 | * set an appropriate error value in the context */ | 887 | * avoid returning 0 if X509_verify_cert() did not |
| 888 | * set an appropriate error value in the context | ||
| 889 | */ | ||
| 838 | i = -1; | 890 | i = -1; |
| 839 | chn = NULL; | 891 | chn = NULL; |
| 840 | goto err; | 892 | goto err; |
| @@ -843,11 +895,12 @@ int get_cert_chain (X509 *cert, X509_STORE *store, STACK_OF(X509) **chain) | |||
| 843 | err: | 895 | err: |
| 844 | X509_STORE_CTX_cleanup(&store_ctx); | 896 | X509_STORE_CTX_cleanup(&store_ctx); |
| 845 | *chain = chn; | 897 | *chain = chn; |
| 846 | 898 | ||
| 847 | return i; | 899 | return i; |
| 848 | } | 900 | } |
| 849 | 901 | ||
| 850 | int alg_print (BIO *x, X509_ALGOR *alg) | 902 | int |
| 903 | alg_print(BIO * x, X509_ALGOR * alg) | ||
| 851 | { | 904 | { |
| 852 | PBEPARAM *pbe; | 905 | PBEPARAM *pbe; |
| 853 | const unsigned char *p; | 906 | const unsigned char *p; |
| @@ -855,16 +908,17 @@ int alg_print (BIO *x, X509_ALGOR *alg) | |||
| 855 | pbe = d2i_PBEPARAM(NULL, &p, alg->parameter->value.sequence->length); | 908 | pbe = d2i_PBEPARAM(NULL, &p, alg->parameter->value.sequence->length); |
| 856 | if (!pbe) | 909 | if (!pbe) |
| 857 | return 1; | 910 | return 1; |
| 858 | BIO_printf (bio_err, "%s, Iteration %ld\n", | 911 | BIO_printf(bio_err, "%s, Iteration %ld\n", |
| 859 | OBJ_nid2ln(OBJ_obj2nid(alg->algorithm)), | 912 | OBJ_nid2ln(OBJ_obj2nid(alg->algorithm)), |
| 860 | ASN1_INTEGER_get(pbe->iter)); | 913 | ASN1_INTEGER_get(pbe->iter)); |
| 861 | PBEPARAM_free (pbe); | 914 | PBEPARAM_free(pbe); |
| 862 | return 1; | 915 | return 1; |
| 863 | } | 916 | } |
| 864 | 917 | ||
| 865 | /* Load all certificates from a given file */ | 918 | /* Load all certificates from a given file */ |
| 866 | 919 | ||
| 867 | int cert_load(BIO *in, STACK_OF(X509) *sk) | 920 | int |
| 921 | cert_load(BIO * in, STACK_OF(X509) * sk) | ||
| 868 | { | 922 | { |
| 869 | int ret; | 923 | int ret; |
| 870 | X509 *cert; | 924 | X509 *cert; |
| @@ -872,7 +926,7 @@ int cert_load(BIO *in, STACK_OF(X509) *sk) | |||
| 872 | #ifdef CRYPTO_MDEBUG | 926 | #ifdef CRYPTO_MDEBUG |
| 873 | CRYPTO_push_info("cert_load(): reading one cert"); | 927 | CRYPTO_push_info("cert_load(): reading one cert"); |
| 874 | #endif | 928 | #endif |
| 875 | while((cert = PEM_read_bio_X509(in, NULL, NULL, NULL))) { | 929 | while ((cert = PEM_read_bio_X509(in, NULL, NULL, NULL))) { |
| 876 | #ifdef CRYPTO_MDEBUG | 930 | #ifdef CRYPTO_MDEBUG |
| 877 | CRYPTO_pop_info(); | 931 | CRYPTO_pop_info(); |
| 878 | #endif | 932 | #endif |
| @@ -885,89 +939,94 @@ int cert_load(BIO *in, STACK_OF(X509) *sk) | |||
| 885 | #ifdef CRYPTO_MDEBUG | 939 | #ifdef CRYPTO_MDEBUG |
| 886 | CRYPTO_pop_info(); | 940 | CRYPTO_pop_info(); |
| 887 | #endif | 941 | #endif |
| 888 | if(ret) ERR_clear_error(); | 942 | if (ret) |
| 943 | ERR_clear_error(); | ||
| 889 | return ret; | 944 | return ret; |
| 890 | } | 945 | } |
| 891 | 946 | ||
| 892 | /* Generalised attribute print: handle PKCS#8 and bag attributes */ | 947 | /* Generalised attribute print: handle PKCS#8 and bag attributes */ |
| 893 | 948 | ||
| 894 | int print_attribs (BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst,const char *name) | 949 | int |
| 950 | print_attribs(BIO * out, STACK_OF(X509_ATTRIBUTE) * attrlst, const char *name) | ||
| 895 | { | 951 | { |
| 896 | X509_ATTRIBUTE *attr; | 952 | X509_ATTRIBUTE *attr; |
| 897 | ASN1_TYPE *av; | 953 | ASN1_TYPE *av; |
| 898 | char *value; | 954 | char *value; |
| 899 | int i, attr_nid; | 955 | int i, attr_nid; |
| 900 | if(!attrlst) { | 956 | if (!attrlst) { |
| 901 | BIO_printf(out, "%s: <No Attributes>\n", name); | 957 | BIO_printf(out, "%s: <No Attributes>\n", name); |
| 902 | return 1; | 958 | return 1; |
| 903 | } | 959 | } |
| 904 | if(!sk_X509_ATTRIBUTE_num(attrlst)) { | 960 | if (!sk_X509_ATTRIBUTE_num(attrlst)) { |
| 905 | BIO_printf(out, "%s: <Empty Attributes>\n", name); | 961 | BIO_printf(out, "%s: <Empty Attributes>\n", name); |
| 906 | return 1; | 962 | return 1; |
| 907 | } | 963 | } |
| 908 | BIO_printf(out, "%s\n", name); | 964 | BIO_printf(out, "%s\n", name); |
| 909 | for(i = 0; i < sk_X509_ATTRIBUTE_num(attrlst); i++) { | 965 | for (i = 0; i < sk_X509_ATTRIBUTE_num(attrlst); i++) { |
| 910 | attr = sk_X509_ATTRIBUTE_value(attrlst, i); | 966 | attr = sk_X509_ATTRIBUTE_value(attrlst, i); |
| 911 | attr_nid = OBJ_obj2nid(attr->object); | 967 | attr_nid = OBJ_obj2nid(attr->object); |
| 912 | BIO_printf(out, " "); | 968 | BIO_printf(out, " "); |
| 913 | if(attr_nid == NID_undef) { | 969 | if (attr_nid == NID_undef) { |
| 914 | i2a_ASN1_OBJECT (out, attr->object); | 970 | i2a_ASN1_OBJECT(out, attr->object); |
| 915 | BIO_printf(out, ": "); | 971 | BIO_printf(out, ": "); |
| 916 | } else BIO_printf(out, "%s: ", OBJ_nid2ln(attr_nid)); | 972 | } else |
| 973 | BIO_printf(out, "%s: ", OBJ_nid2ln(attr_nid)); | ||
| 917 | 974 | ||
| 918 | if(sk_ASN1_TYPE_num(attr->value.set)) { | 975 | if (sk_ASN1_TYPE_num(attr->value.set)) { |
| 919 | av = sk_ASN1_TYPE_value(attr->value.set, 0); | 976 | av = sk_ASN1_TYPE_value(attr->value.set, 0); |
| 920 | switch(av->type) { | 977 | switch (av->type) { |
| 921 | case V_ASN1_BMPSTRING: | 978 | case V_ASN1_BMPSTRING: |
| 922 | value = OPENSSL_uni2asc(av->value.bmpstring->data, | 979 | value = OPENSSL_uni2asc(av->value.bmpstring->data, |
| 923 | av->value.bmpstring->length); | 980 | av->value.bmpstring->length); |
| 924 | BIO_printf(out, "%s\n", value); | 981 | BIO_printf(out, "%s\n", value); |
| 925 | free(value); | 982 | free(value); |
| 926 | break; | 983 | break; |
| 927 | 984 | ||
| 928 | case V_ASN1_OCTET_STRING: | 985 | case V_ASN1_OCTET_STRING: |
| 929 | hex_prin(out, av->value.octet_string->data, | 986 | hex_prin(out, av->value.octet_string->data, |
| 930 | av->value.octet_string->length); | 987 | av->value.octet_string->length); |
| 931 | BIO_printf(out, "\n"); | 988 | BIO_printf(out, "\n"); |
| 932 | break; | 989 | break; |
| 933 | 990 | ||
| 934 | case V_ASN1_BIT_STRING: | 991 | case V_ASN1_BIT_STRING: |
| 935 | hex_prin(out, av->value.bit_string->data, | 992 | hex_prin(out, av->value.bit_string->data, |
| 936 | av->value.bit_string->length); | 993 | av->value.bit_string->length); |
| 937 | BIO_printf(out, "\n"); | 994 | BIO_printf(out, "\n"); |
| 938 | break; | 995 | break; |
| 939 | 996 | ||
| 940 | default: | 997 | default: |
| 941 | BIO_printf(out, "<Unsupported tag %d>\n", av->type); | 998 | BIO_printf(out, "<Unsupported tag %d>\n", av->type); |
| 942 | break; | 999 | break; |
| 943 | } | 1000 | } |
| 944 | } else BIO_printf(out, "<No Values>\n"); | 1001 | } else |
| 1002 | BIO_printf(out, "<No Values>\n"); | ||
| 945 | } | 1003 | } |
| 946 | return 1; | 1004 | return 1; |
| 947 | } | 1005 | } |
| 948 | 1006 | ||
| 949 | void hex_prin(BIO *out, unsigned char *buf, int len) | 1007 | void |
| 1008 | hex_prin(BIO * out, unsigned char *buf, int len) | ||
| 950 | { | 1009 | { |
| 951 | int i; | 1010 | int i; |
| 952 | for (i = 0; i < len; i++) BIO_printf (out, "%02X ", buf[i]); | 1011 | for (i = 0; i < len; i++) |
| 1012 | BIO_printf(out, "%02X ", buf[i]); | ||
| 953 | } | 1013 | } |
| 954 | 1014 | ||
| 955 | static int set_pbe(BIO *err, int *ppbe, const char *str) | 1015 | static int |
| 956 | { | 1016 | set_pbe(BIO * err, int *ppbe, const char *str) |
| 1017 | { | ||
| 957 | if (!str) | 1018 | if (!str) |
| 958 | return 0; | 1019 | return 0; |
| 959 | if (!strcmp(str, "NONE")) | 1020 | if (!strcmp(str, "NONE")) { |
| 960 | { | ||
| 961 | *ppbe = -1; | 1021 | *ppbe = -1; |
| 962 | return 1; | 1022 | return 1; |
| 963 | } | 1023 | } |
| 964 | *ppbe=OBJ_txt2nid(str); | 1024 | *ppbe = OBJ_txt2nid(str); |
| 965 | if (*ppbe == NID_undef) | 1025 | if (*ppbe == NID_undef) { |
| 966 | { | ||
| 967 | BIO_printf(bio_err, "Unknown PBE algorithm %s\n", str); | 1026 | BIO_printf(bio_err, "Unknown PBE algorithm %s\n", str); |
| 968 | return 0; | 1027 | return 0; |
| 969 | } | ||
| 970 | return 1; | ||
| 971 | } | 1028 | } |
| 972 | 1029 | return 1; | |
| 1030 | } | ||
| 1031 | |||
| 973 | #endif | 1032 | #endif |
diff --git a/src/lib/libssl/src/apps/pkcs7.c b/src/lib/libssl/src/apps/pkcs7.c index 8a0e878e49..3c5cf09680 100644 --- a/src/lib/libssl/src/apps/pkcs7.c +++ b/src/lib/libssl/src/apps/pkcs7.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written |
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). |
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. |
| 8 | * | 8 | * |
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as |
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions |
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, |
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation |
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms |
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). |
| 15 | * | 15 | * |
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in |
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. |
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution |
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. |
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or |
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. |
| 22 | * | 22 | * |
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without |
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions |
| 25 | * are met: | 25 | * are met: |
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" |
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library |
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). |
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from |
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: |
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" |
| 40 | * | 40 | * |
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. |
| 52 | * | 52 | * |
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or |
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be |
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence |
| @@ -80,235 +80,215 @@ | |||
| 80 | 80 | ||
| 81 | int MAIN(int, char **); | 81 | int MAIN(int, char **); |
| 82 | 82 | ||
| 83 | int MAIN(int argc, char **argv) | 83 | int |
| 84 | { | 84 | MAIN(int argc, char **argv) |
| 85 | PKCS7 *p7=NULL; | 85 | { |
| 86 | int i,badops=0; | 86 | PKCS7 *p7 = NULL; |
| 87 | BIO *in=NULL,*out=NULL; | 87 | int i, badops = 0; |
| 88 | int informat,outformat; | 88 | BIO *in = NULL, *out = NULL; |
| 89 | char *infile,*outfile,*prog; | 89 | int informat, outformat; |
| 90 | int print_certs=0,text=0,noout=0,p7_print=0; | 90 | char *infile, *outfile, *prog; |
| 91 | int ret=1; | 91 | int print_certs = 0, text = 0, noout = 0, p7_print = 0; |
| 92 | int ret = 1; | ||
| 92 | #ifndef OPENSSL_NO_ENGINE | 93 | #ifndef OPENSSL_NO_ENGINE |
| 93 | char *engine=NULL; | 94 | char *engine = NULL; |
| 94 | #endif | 95 | #endif |
| 95 | 96 | ||
| 96 | apps_startup(); | 97 | apps_startup(); |
| 97 | 98 | ||
| 98 | if (bio_err == NULL) | 99 | if (bio_err == NULL) |
| 99 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) | 100 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 100 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); | 101 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 101 | 102 | ||
| 102 | if (!load_config(bio_err, NULL)) | 103 | if (!load_config(bio_err, NULL)) |
| 103 | goto end; | 104 | goto end; |
| 104 | 105 | ||
| 105 | infile=NULL; | 106 | infile = NULL; |
| 106 | outfile=NULL; | 107 | outfile = NULL; |
| 107 | informat=FORMAT_PEM; | 108 | informat = FORMAT_PEM; |
| 108 | outformat=FORMAT_PEM; | 109 | outformat = FORMAT_PEM; |
| 109 | 110 | ||
| 110 | prog=argv[0]; | 111 | prog = argv[0]; |
| 111 | argc--; | 112 | argc--; |
| 112 | argv++; | 113 | argv++; |
| 113 | while (argc >= 1) | 114 | while (argc >= 1) { |
| 114 | { | 115 | if (strcmp(*argv, "-inform") == 0) { |
| 115 | if (strcmp(*argv,"-inform") == 0) | 116 | if (--argc < 1) |
| 116 | { | 117 | goto bad; |
| 117 | if (--argc < 1) goto bad; | 118 | informat = str2fmt(*(++argv)); |
| 118 | informat=str2fmt(*(++argv)); | 119 | } else if (strcmp(*argv, "-outform") == 0) { |
| 119 | } | 120 | if (--argc < 1) |
| 120 | else if (strcmp(*argv,"-outform") == 0) | 121 | goto bad; |
| 121 | { | 122 | outformat = str2fmt(*(++argv)); |
| 122 | if (--argc < 1) goto bad; | 123 | } else if (strcmp(*argv, "-in") == 0) { |
| 123 | outformat=str2fmt(*(++argv)); | 124 | if (--argc < 1) |
| 124 | } | 125 | goto bad; |
| 125 | else if (strcmp(*argv,"-in") == 0) | 126 | infile = *(++argv); |
| 126 | { | 127 | } else if (strcmp(*argv, "-out") == 0) { |
| 127 | if (--argc < 1) goto bad; | 128 | if (--argc < 1) |
| 128 | infile= *(++argv); | 129 | goto bad; |
| 129 | } | 130 | outfile = *(++argv); |
| 130 | else if (strcmp(*argv,"-out") == 0) | 131 | } else if (strcmp(*argv, "-noout") == 0) |
| 131 | { | 132 | noout = 1; |
| 132 | if (--argc < 1) goto bad; | 133 | else if (strcmp(*argv, "-text") == 0) |
| 133 | outfile= *(++argv); | 134 | text = 1; |
| 134 | } | 135 | else if (strcmp(*argv, "-print") == 0) |
| 135 | else if (strcmp(*argv,"-noout") == 0) | 136 | p7_print = 1; |
| 136 | noout=1; | 137 | else if (strcmp(*argv, "-print_certs") == 0) |
| 137 | else if (strcmp(*argv,"-text") == 0) | 138 | print_certs = 1; |
| 138 | text=1; | ||
| 139 | else if (strcmp(*argv,"-print") == 0) | ||
| 140 | p7_print=1; | ||
| 141 | else if (strcmp(*argv,"-print_certs") == 0) | ||
| 142 | print_certs=1; | ||
| 143 | #ifndef OPENSSL_NO_ENGINE | 139 | #ifndef OPENSSL_NO_ENGINE |
| 144 | else if (strcmp(*argv,"-engine") == 0) | 140 | else if (strcmp(*argv, "-engine") == 0) { |
| 145 | { | 141 | if (--argc < 1) |
| 146 | if (--argc < 1) goto bad; | 142 | goto bad; |
| 147 | engine= *(++argv); | 143 | engine = *(++argv); |
| 148 | } | 144 | } |
| 149 | #endif | 145 | #endif |
| 150 | else | 146 | else { |
| 151 | { | 147 | BIO_printf(bio_err, "unknown option %s\n", *argv); |
| 152 | BIO_printf(bio_err,"unknown option %s\n",*argv); | 148 | badops = 1; |
| 153 | badops=1; | ||
| 154 | break; | 149 | break; |
| 155 | } | 150 | } |
| 156 | argc--; | 151 | argc--; |
| 157 | argv++; | 152 | argv++; |
| 158 | } | 153 | } |
| 159 | 154 | ||
| 160 | if (badops) | 155 | if (badops) { |
| 161 | { | ||
| 162 | bad: | 156 | bad: |
| 163 | BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog); | 157 | BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog); |
| 164 | BIO_printf(bio_err,"where options are\n"); | 158 | BIO_printf(bio_err, "where options are\n"); |
| 165 | BIO_printf(bio_err," -inform arg input format - DER or PEM\n"); | 159 | BIO_printf(bio_err, " -inform arg input format - DER or PEM\n"); |
| 166 | BIO_printf(bio_err," -outform arg output format - DER or PEM\n"); | 160 | BIO_printf(bio_err, " -outform arg output format - DER or PEM\n"); |
| 167 | BIO_printf(bio_err," -in arg input file\n"); | 161 | BIO_printf(bio_err, " -in arg input file\n"); |
| 168 | BIO_printf(bio_err," -out arg output file\n"); | 162 | BIO_printf(bio_err, " -out arg output file\n"); |
| 169 | BIO_printf(bio_err," -print_certs print any certs or crl in the input\n"); | 163 | BIO_printf(bio_err, " -print_certs print any certs or crl in the input\n"); |
| 170 | BIO_printf(bio_err," -text print full details of certificates\n"); | 164 | BIO_printf(bio_err, " -text print full details of certificates\n"); |
| 171 | BIO_printf(bio_err," -noout don't output encoded data\n"); | 165 | BIO_printf(bio_err, " -noout don't output encoded data\n"); |
| 172 | #ifndef OPENSSL_NO_ENGINE | 166 | #ifndef OPENSSL_NO_ENGINE |
| 173 | BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n"); | 167 | BIO_printf(bio_err, " -engine e use engine e, possibly a hardware device.\n"); |
| 174 | #endif | 168 | #endif |
| 175 | ret = 1; | 169 | ret = 1; |
| 176 | goto end; | 170 | goto end; |
| 177 | } | 171 | } |
| 178 | |||
| 179 | ERR_load_crypto_strings(); | 172 | ERR_load_crypto_strings(); |
| 180 | 173 | ||
| 181 | #ifndef OPENSSL_NO_ENGINE | 174 | #ifndef OPENSSL_NO_ENGINE |
| 182 | setup_engine(bio_err, engine, 0); | 175 | setup_engine(bio_err, engine, 0); |
| 183 | #endif | 176 | #endif |
| 184 | 177 | ||
| 185 | in=BIO_new(BIO_s_file()); | 178 | in = BIO_new(BIO_s_file()); |
| 186 | out=BIO_new(BIO_s_file()); | 179 | out = BIO_new(BIO_s_file()); |
| 187 | if ((in == NULL) || (out == NULL)) | 180 | if ((in == NULL) || (out == NULL)) { |
| 188 | { | ||
| 189 | ERR_print_errors(bio_err); | 181 | ERR_print_errors(bio_err); |
| 190 | goto end; | 182 | goto end; |
| 191 | } | 183 | } |
| 192 | |||
| 193 | if (infile == NULL) | 184 | if (infile == NULL) |
| 194 | BIO_set_fp(in,stdin,BIO_NOCLOSE); | 185 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 195 | else | 186 | else { |
| 196 | { | 187 | if (BIO_read_filename(in, infile) <= 0) |
| 197 | if (BIO_read_filename(in,infile) <= 0) | 188 | if (in == NULL) { |
| 198 | if (in == NULL) | 189 | perror(infile); |
| 199 | { | 190 | goto end; |
| 200 | perror(infile); | ||
| 201 | goto end; | ||
| 202 | } | 191 | } |
| 203 | } | 192 | } |
| 204 | 193 | ||
| 205 | if (informat == FORMAT_ASN1) | 194 | if (informat == FORMAT_ASN1) |
| 206 | p7=d2i_PKCS7_bio(in,NULL); | 195 | p7 = d2i_PKCS7_bio(in, NULL); |
| 207 | else if (informat == FORMAT_PEM) | 196 | else if (informat == FORMAT_PEM) |
| 208 | p7=PEM_read_bio_PKCS7(in,NULL,NULL,NULL); | 197 | p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL); |
| 209 | else | 198 | else { |
| 210 | { | 199 | BIO_printf(bio_err, "bad input format specified for pkcs7 object\n"); |
| 211 | BIO_printf(bio_err,"bad input format specified for pkcs7 object\n"); | ||
| 212 | goto end; | 200 | goto end; |
| 213 | } | 201 | } |
| 214 | if (p7 == NULL) | 202 | if (p7 == NULL) { |
| 215 | { | 203 | BIO_printf(bio_err, "unable to load PKCS7 object\n"); |
| 216 | BIO_printf(bio_err,"unable to load PKCS7 object\n"); | ||
| 217 | ERR_print_errors(bio_err); | 204 | ERR_print_errors(bio_err); |
| 218 | goto end; | 205 | goto end; |
| 219 | } | 206 | } |
| 220 | 207 | if (outfile == NULL) { | |
| 221 | if (outfile == NULL) | 208 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 222 | { | 209 | } else { |
| 223 | BIO_set_fp(out,stdout,BIO_NOCLOSE); | 210 | if (BIO_write_filename(out, outfile) <= 0) { |
| 224 | } | ||
| 225 | else | ||
| 226 | { | ||
| 227 | if (BIO_write_filename(out,outfile) <= 0) | ||
| 228 | { | ||
| 229 | perror(outfile); | 211 | perror(outfile); |
| 230 | goto end; | 212 | goto end; |
| 231 | } | ||
| 232 | } | 213 | } |
| 214 | } | ||
| 233 | 215 | ||
| 234 | if (p7_print) | 216 | if (p7_print) |
| 235 | PKCS7_print_ctx(out, p7, 0, NULL); | 217 | PKCS7_print_ctx(out, p7, 0, NULL); |
| 236 | 218 | ||
| 237 | if (print_certs) | 219 | if (print_certs) { |
| 238 | { | 220 | STACK_OF(X509) * certs = NULL; |
| 239 | STACK_OF(X509) *certs=NULL; | 221 | STACK_OF(X509_CRL) * crls = NULL; |
| 240 | STACK_OF(X509_CRL) *crls=NULL; | ||
| 241 | 222 | ||
| 242 | i=OBJ_obj2nid(p7->type); | 223 | i = OBJ_obj2nid(p7->type); |
| 243 | switch (i) | 224 | switch (i) { |
| 244 | { | ||
| 245 | case NID_pkcs7_signed: | 225 | case NID_pkcs7_signed: |
| 246 | certs=p7->d.sign->cert; | 226 | certs = p7->d.sign->cert; |
| 247 | crls=p7->d.sign->crl; | 227 | crls = p7->d.sign->crl; |
| 248 | break; | 228 | break; |
| 249 | case NID_pkcs7_signedAndEnveloped: | 229 | case NID_pkcs7_signedAndEnveloped: |
| 250 | certs=p7->d.signed_and_enveloped->cert; | 230 | certs = p7->d.signed_and_enveloped->cert; |
| 251 | crls=p7->d.signed_and_enveloped->crl; | 231 | crls = p7->d.signed_and_enveloped->crl; |
| 252 | break; | 232 | break; |
| 253 | default: | 233 | default: |
| 254 | break; | 234 | break; |
| 255 | } | 235 | } |
| 256 | 236 | ||
| 257 | if (certs != NULL) | 237 | if (certs != NULL) { |
| 258 | { | ||
| 259 | X509 *x; | 238 | X509 *x; |
| 260 | 239 | ||
| 261 | for (i=0; i<sk_X509_num(certs); i++) | 240 | for (i = 0; i < sk_X509_num(certs); i++) { |
| 262 | { | 241 | x = sk_X509_value(certs, i); |
| 263 | x=sk_X509_value(certs,i); | 242 | if (text) |
| 264 | if(text) X509_print(out, x); | 243 | X509_print(out, x); |
| 265 | else dump_cert_text(out, x); | 244 | else |
| 245 | dump_cert_text(out, x); | ||
| 266 | 246 | ||
| 267 | if(!noout) PEM_write_bio_X509(out,x); | 247 | if (!noout) |
| 268 | BIO_puts(out,"\n"); | 248 | PEM_write_bio_X509(out, x); |
| 269 | } | 249 | BIO_puts(out, "\n"); |
| 270 | } | 250 | } |
| 271 | if (crls != NULL) | 251 | } |
| 272 | { | 252 | if (crls != NULL) { |
| 273 | X509_CRL *crl; | 253 | X509_CRL *crl; |
| 274 | 254 | ||
| 275 | for (i=0; i<sk_X509_CRL_num(crls); i++) | 255 | for (i = 0; i < sk_X509_CRL_num(crls); i++) { |
| 276 | { | 256 | crl = sk_X509_CRL_value(crls, i); |
| 277 | crl=sk_X509_CRL_value(crls,i); | ||
| 278 | 257 | ||
| 279 | X509_CRL_print(out, crl); | 258 | X509_CRL_print(out, crl); |
| 280 | 259 | ||
| 281 | if(!noout)PEM_write_bio_X509_CRL(out,crl); | 260 | if (!noout) |
| 282 | BIO_puts(out,"\n"); | 261 | PEM_write_bio_X509_CRL(out, crl); |
| 283 | } | 262 | BIO_puts(out, "\n"); |
| 284 | } | 263 | } |
| 285 | |||
| 286 | ret=0; | ||
| 287 | goto end; | ||
| 288 | } | 264 | } |
| 289 | 265 | ret = 0; | |
| 290 | if(!noout) { | 266 | goto end; |
| 291 | if (outformat == FORMAT_ASN1) | 267 | } |
| 292 | i=i2d_PKCS7_bio(out,p7); | 268 | if (!noout) { |
| 269 | if (outformat == FORMAT_ASN1) | ||
| 270 | i = i2d_PKCS7_bio(out, p7); | ||
| 293 | else if (outformat == FORMAT_PEM) | 271 | else if (outformat == FORMAT_PEM) |
| 294 | i=PEM_write_bio_PKCS7(out,p7); | 272 | i = PEM_write_bio_PKCS7(out, p7); |
| 295 | else { | 273 | else { |
| 296 | BIO_printf(bio_err,"bad output format specified for outfile\n"); | 274 | BIO_printf(bio_err, "bad output format specified for outfile\n"); |
| 297 | goto end; | 275 | goto end; |
| 298 | } | 276 | } |
| 299 | 277 | ||
| 300 | if (!i) | 278 | if (!i) { |
| 301 | { | 279 | BIO_printf(bio_err, "unable to write pkcs7 object\n"); |
| 302 | BIO_printf(bio_err,"unable to write pkcs7 object\n"); | ||
| 303 | ERR_print_errors(bio_err); | 280 | ERR_print_errors(bio_err); |
| 304 | goto end; | 281 | goto end; |
| 305 | } | 282 | } |
| 306 | } | 283 | } |
| 307 | ret=0; | 284 | ret = 0; |
| 308 | end: | 285 | end: |
| 309 | if (p7 != NULL) PKCS7_free(p7); | 286 | if (p7 != NULL) |
| 310 | if (in != NULL) BIO_free(in); | 287 | PKCS7_free(p7); |
| 311 | if (out != NULL) BIO_free_all(out); | 288 | if (in != NULL) |
| 289 | BIO_free(in); | ||
| 290 | if (out != NULL) | ||
| 291 | BIO_free_all(out); | ||
| 312 | apps_shutdown(); | 292 | apps_shutdown(); |
| 313 | return(ret); | 293 | return (ret); |
| 314 | } | 294 | } |
diff --git a/src/lib/libssl/src/apps/pkcs8.c b/src/lib/libssl/src/apps/pkcs8.c index 74fe9a1b3d..089511ee2a 100644 --- a/src/lib/libssl/src/apps/pkcs8.c +++ b/src/lib/libssl/src/apps/pkcs8.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -67,8 +67,9 @@ | |||
| 67 | 67 | ||
| 68 | int MAIN(int, char **); | 68 | int MAIN(int, char **); |
| 69 | 69 | ||
| 70 | int MAIN(int argc, char **argv) | 70 | int |
| 71 | { | 71 | MAIN(int argc, char **argv) |
| 72 | { | ||
| 72 | ENGINE *e = NULL; | 73 | ENGINE *e = NULL; |
| 73 | char **args, *infile = NULL, *outfile = NULL; | 74 | char **args, *infile = NULL, *outfile = NULL; |
| 74 | char *passargin = NULL, *passargout = NULL; | 75 | char *passargin = NULL, *passargout = NULL; |
| @@ -82,131 +83,108 @@ int MAIN(int argc, char **argv) | |||
| 82 | int nocrypt = 0; | 83 | int nocrypt = 0; |
| 83 | X509_SIG *p8 = NULL; | 84 | X509_SIG *p8 = NULL; |
| 84 | PKCS8_PRIV_KEY_INFO *p8inf = NULL; | 85 | PKCS8_PRIV_KEY_INFO *p8inf = NULL; |
| 85 | EVP_PKEY *pkey=NULL; | 86 | EVP_PKEY *pkey = NULL; |
| 86 | char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL; | 87 | char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL; |
| 87 | int badarg = 0; | 88 | int badarg = 0; |
| 88 | int ret = 1; | 89 | int ret = 1; |
| 89 | #ifndef OPENSSL_NO_ENGINE | 90 | #ifndef OPENSSL_NO_ENGINE |
| 90 | char *engine=NULL; | 91 | char *engine = NULL; |
| 91 | #endif | 92 | #endif |
| 92 | 93 | ||
| 93 | if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE); | 94 | if (bio_err == NULL) |
| 95 | bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); | ||
| 94 | 96 | ||
| 95 | if (!load_config(bio_err, NULL)) | 97 | if (!load_config(bio_err, NULL)) |
| 96 | goto end; | 98 | goto end; |
| 97 | 99 | ||
| 98 | informat=FORMAT_PEM; | 100 | informat = FORMAT_PEM; |
| 99 | outformat=FORMAT_PEM; | 101 | outformat = FORMAT_PEM; |
| 100 | 102 | ||
| 101 | ERR_load_crypto_strings(); | 103 | ERR_load_crypto_strings(); |
| 102 | OpenSSL_add_all_algorithms(); | 104 | OpenSSL_add_all_algorithms(); |
| 103 | args = argv + 1; | 105 | args = argv + 1; |
| 104 | while (!badarg && *args && *args[0] == '-') | 106 | while (!badarg && *args && *args[0] == '-') { |
| 105 | { | 107 | if (!strcmp(*args, "-v2")) { |
| 106 | if (!strcmp(*args,"-v2")) | 108 | if (args[1]) { |
| 107 | { | ||
| 108 | if (args[1]) | ||
| 109 | { | ||
| 110 | args++; | 109 | args++; |
| 111 | cipher=EVP_get_cipherbyname(*args); | 110 | cipher = EVP_get_cipherbyname(*args); |
| 112 | if (!cipher) | 111 | if (!cipher) { |
| 113 | { | ||
| 114 | BIO_printf(bio_err, | 112 | BIO_printf(bio_err, |
| 115 | "Unknown cipher %s\n", *args); | 113 | "Unknown cipher %s\n", *args); |
| 116 | badarg = 1; | 114 | badarg = 1; |
| 117 | } | ||
| 118 | } | 115 | } |
| 119 | else | 116 | } else |
| 120 | badarg = 1; | 117 | badarg = 1; |
| 121 | } | 118 | } else if (!strcmp(*args, "-v1")) { |
| 122 | else if (!strcmp(*args,"-v1")) | 119 | if (args[1]) { |
| 123 | { | ||
| 124 | if (args[1]) | ||
| 125 | { | ||
| 126 | args++; | 120 | args++; |
| 127 | pbe_nid=OBJ_txt2nid(*args); | 121 | pbe_nid = OBJ_txt2nid(*args); |
| 128 | if (pbe_nid == NID_undef) | 122 | if (pbe_nid == NID_undef) { |
| 129 | { | ||
| 130 | BIO_printf(bio_err, | 123 | BIO_printf(bio_err, |
| 131 | "Unknown PBE algorithm %s\n", *args); | 124 | "Unknown PBE algorithm %s\n", *args); |
| 132 | badarg = 1; | 125 | badarg = 1; |
| 133 | } | ||
| 134 | } | 126 | } |
| 135 | else | 127 | } else |
| 136 | badarg = 1; | 128 | badarg = 1; |
| 137 | } | 129 | } else if (!strcmp(*args, "-inform")) { |
| 138 | else if (!strcmp(*args,"-inform")) | 130 | if (args[1]) { |
| 139 | { | ||
| 140 | if (args[1]) | ||
| 141 | { | ||
| 142 | args++; | 131 | args++; |
| 143 | informat=str2fmt(*args); | 132 | informat = str2fmt(*args); |
| 144 | } | 133 | } else |
| 145 | else badarg = 1; | 134 | badarg = 1; |
| 146 | } | 135 | } else if (!strcmp(*args, "-outform")) { |
| 147 | else if (!strcmp(*args,"-outform")) | 136 | if (args[1]) { |
| 148 | { | ||
| 149 | if (args[1]) | ||
| 150 | { | ||
| 151 | args++; | 137 | args++; |
| 152 | outformat=str2fmt(*args); | 138 | outformat = str2fmt(*args); |
| 153 | } | 139 | } else |
| 154 | else badarg = 1; | 140 | badarg = 1; |
| 155 | } | 141 | } else if (!strcmp(*args, "-topk8")) |
| 156 | else if (!strcmp (*args, "-topk8")) | ||
| 157 | topk8 = 1; | 142 | topk8 = 1; |
| 158 | else if (!strcmp (*args, "-noiter")) | 143 | else if (!strcmp(*args, "-noiter")) |
| 159 | iter = 1; | 144 | iter = 1; |
| 160 | else if (!strcmp (*args, "-nocrypt")) | 145 | else if (!strcmp(*args, "-nocrypt")) |
| 161 | nocrypt = 1; | 146 | nocrypt = 1; |
| 162 | else if (!strcmp (*args, "-nooct")) | 147 | else if (!strcmp(*args, "-nooct")) |
| 163 | p8_broken = PKCS8_NO_OCTET; | 148 | p8_broken = PKCS8_NO_OCTET; |
| 164 | else if (!strcmp (*args, "-nsdb")) | 149 | else if (!strcmp(*args, "-nsdb")) |
| 165 | p8_broken = PKCS8_NS_DB; | 150 | p8_broken = PKCS8_NS_DB; |
| 166 | else if (!strcmp (*args, "-embed")) | 151 | else if (!strcmp(*args, "-embed")) |
| 167 | p8_broken = PKCS8_EMBEDDED_PARAM; | 152 | p8_broken = PKCS8_EMBEDDED_PARAM; |
| 168 | else if (!strcmp(*args,"-passin")) | 153 | else if (!strcmp(*args, "-passin")) { |
| 169 | { | 154 | if (!args[1]) |
| 170 | if (!args[1]) goto bad; | 155 | goto bad; |
| 171 | passargin= *(++args); | 156 | passargin = *(++args); |
| 172 | } | 157 | } else if (!strcmp(*args, "-passout")) { |
| 173 | else if (!strcmp(*args,"-passout")) | 158 | if (!args[1]) |
| 174 | { | 159 | goto bad; |
| 175 | if (!args[1]) goto bad; | 160 | passargout = *(++args); |
| 176 | passargout= *(++args); | 161 | } |
| 177 | } | ||
| 178 | #ifndef OPENSSL_NO_ENGINE | 162 | #ifndef OPENSSL_NO_ENGINE |
| 179 | else if (strcmp(*args,"-engine") == 0) | 163 | else if (strcmp(*args, "-engine") == 0) { |
| 180 | { | 164 | if (!args[1]) |
| 181 | if (!args[1]) goto bad; | 165 | goto bad; |
| 182 | engine= *(++args); | 166 | engine = *(++args); |
| 183 | } | 167 | } |
| 184 | #endif | 168 | #endif |
| 185 | else if (!strcmp (*args, "-in")) | 169 | else if (!strcmp(*args, "-in")) { |
| 186 | { | 170 | if (args[1]) { |
| 187 | if (args[1]) | ||
| 188 | { | ||
| 189 | args++; | 171 | args++; |
| 190 | infile = *args; | 172 | infile = *args; |
| 191 | } | 173 | } else |
| 192 | else badarg = 1; | 174 | badarg = 1; |
| 193 | } | 175 | } else if (!strcmp(*args, "-out")) { |
| 194 | else if (!strcmp (*args, "-out")) | 176 | if (args[1]) { |
| 195 | { | ||
| 196 | if (args[1]) | ||
| 197 | { | ||
| 198 | args++; | 177 | args++; |
| 199 | outfile = *args; | 178 | outfile = *args; |
| 200 | } | 179 | } else |
| 201 | else badarg = 1; | 180 | badarg = 1; |
| 202 | } | 181 | } else |
| 203 | else badarg = 1; | 182 | badarg = 1; |
| 204 | args++; | 183 | args++; |
| 205 | } | 184 | } |
| 206 | 185 | ||
| 207 | if (badarg) | 186 | if (badarg) { |
| 208 | { | 187 | bad: |
| 209 | bad: | ||
| 210 | BIO_printf(bio_err, "Usage pkcs8 [options]\n"); | 188 | BIO_printf(bio_err, "Usage pkcs8 [options]\n"); |
| 211 | BIO_printf(bio_err, "where options are\n"); | 189 | BIO_printf(bio_err, "where options are\n"); |
| 212 | BIO_printf(bio_err, "-in file input file\n"); | 190 | BIO_printf(bio_err, "-in file input file\n"); |
| @@ -224,201 +202,166 @@ int MAIN(int argc, char **argv) | |||
| 224 | BIO_printf(bio_err, "-v2 alg use PKCS#5 v2.0 and cipher \"alg\"\n"); | 202 | BIO_printf(bio_err, "-v2 alg use PKCS#5 v2.0 and cipher \"alg\"\n"); |
| 225 | BIO_printf(bio_err, "-v1 obj use PKCS#5 v1.5 and cipher \"alg\"\n"); | 203 | BIO_printf(bio_err, "-v1 obj use PKCS#5 v1.5 and cipher \"alg\"\n"); |
| 226 | #ifndef OPENSSL_NO_ENGINE | 204 | #ifndef OPENSSL_NO_ENGINE |
| 227 | BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n"); | 205 | BIO_printf(bio_err, " -engine e use engine e, possibly a hardware device.\n"); |
| 228 | #endif | 206 | #endif |
| 229 | goto end; | 207 | goto end; |
| 230 | } | 208 | } |
| 231 | |||
| 232 | #ifndef OPENSSL_NO_ENGINE | 209 | #ifndef OPENSSL_NO_ENGINE |
| 233 | e = setup_engine(bio_err, engine, 0); | 210 | e = setup_engine(bio_err, engine, 0); |
| 234 | #endif | 211 | #endif |
| 235 | 212 | ||
| 236 | if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) | 213 | if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { |
| 237 | { | ||
| 238 | BIO_printf(bio_err, "Error getting passwords\n"); | 214 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 239 | goto end; | 215 | goto end; |
| 240 | } | 216 | } |
| 241 | |||
| 242 | if ((pbe_nid == -1) && !cipher) | 217 | if ((pbe_nid == -1) && !cipher) |
| 243 | pbe_nid = NID_pbeWithMD5AndDES_CBC; | 218 | pbe_nid = NID_pbeWithMD5AndDES_CBC; |
| 244 | 219 | ||
| 245 | if (infile) | 220 | if (infile) { |
| 246 | { | 221 | if (!(in = BIO_new_file(infile, "rb"))) { |
| 247 | if (!(in = BIO_new_file(infile, "rb"))) | ||
| 248 | { | ||
| 249 | BIO_printf(bio_err, | 222 | BIO_printf(bio_err, |
| 250 | "Can't open input file %s\n", infile); | 223 | "Can't open input file %s\n", infile); |
| 251 | goto end; | 224 | goto end; |
| 252 | } | ||
| 253 | } | 225 | } |
| 254 | else | 226 | } else |
| 255 | in = BIO_new_fp (stdin, BIO_NOCLOSE); | 227 | in = BIO_new_fp(stdin, BIO_NOCLOSE); |
| 256 | 228 | ||
| 257 | if (outfile) | 229 | if (outfile) { |
| 258 | { | 230 | if (!(out = BIO_new_file(outfile, "wb"))) { |
| 259 | if (!(out = BIO_new_file (outfile, "wb"))) | ||
| 260 | { | ||
| 261 | BIO_printf(bio_err, | 231 | BIO_printf(bio_err, |
| 262 | "Can't open output file %s\n", outfile); | 232 | "Can't open output file %s\n", outfile); |
| 263 | goto end; | 233 | goto end; |
| 264 | } | ||
| 265 | } | ||
| 266 | else | ||
| 267 | { | ||
| 268 | out = BIO_new_fp (stdout, BIO_NOCLOSE); | ||
| 269 | } | 234 | } |
| 270 | if (topk8) | 235 | } else { |
| 271 | { | 236 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 237 | } | ||
| 238 | if (topk8) { | ||
| 272 | pkey = load_key(bio_err, infile, informat, 1, | 239 | pkey = load_key(bio_err, infile, informat, 1, |
| 273 | passin, e, "key"); | 240 | passin, e, "key"); |
| 274 | if (!pkey) | 241 | if (!pkey) |
| 275 | goto end; | 242 | goto end; |
| 276 | if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken))) | 243 | if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken))) { |
| 277 | { | ||
| 278 | BIO_printf(bio_err, "Error converting key\n"); | 244 | BIO_printf(bio_err, "Error converting key\n"); |
| 279 | ERR_print_errors(bio_err); | 245 | ERR_print_errors(bio_err); |
| 280 | goto end; | 246 | goto end; |
| 281 | } | 247 | } |
| 282 | if (nocrypt) | 248 | if (nocrypt) { |
| 283 | { | 249 | if (outformat == FORMAT_PEM) |
| 284 | if (outformat == FORMAT_PEM) | ||
| 285 | PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf); | 250 | PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf); |
| 286 | else if (outformat == FORMAT_ASN1) | 251 | else if (outformat == FORMAT_ASN1) |
| 287 | i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf); | 252 | i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf); |
| 288 | else | 253 | else { |
| 289 | { | ||
| 290 | BIO_printf(bio_err, "Bad format specified for key\n"); | 254 | BIO_printf(bio_err, "Bad format specified for key\n"); |
| 291 | goto end; | 255 | goto end; |
| 292 | } | ||
| 293 | } | 256 | } |
| 294 | else | 257 | } else { |
| 295 | { | ||
| 296 | if (passout) | 258 | if (passout) |
| 297 | p8pass = passout; | 259 | p8pass = passout; |
| 298 | else | 260 | else { |
| 299 | { | ||
| 300 | p8pass = pass; | 261 | p8pass = pass; |
| 301 | if (EVP_read_pw_string(pass, sizeof pass, "Enter Encryption Password:", 1)) | 262 | if (EVP_read_pw_string(pass, sizeof pass, "Enter Encryption Password:", 1)) |
| 302 | goto end; | 263 | goto end; |
| 303 | } | 264 | } |
| 304 | app_RAND_load_file(NULL, bio_err, 0); | 265 | app_RAND_load_file(NULL, bio_err, 0); |
| 305 | if (!(p8 = PKCS8_encrypt(pbe_nid, cipher, | 266 | if (!(p8 = PKCS8_encrypt(pbe_nid, cipher, |
| 306 | p8pass, strlen(p8pass), | 267 | p8pass, strlen(p8pass), |
| 307 | NULL, 0, iter, p8inf))) | 268 | NULL, 0, iter, p8inf))) { |
| 308 | { | ||
| 309 | BIO_printf(bio_err, "Error encrypting key\n"); | 269 | BIO_printf(bio_err, "Error encrypting key\n"); |
| 310 | ERR_print_errors(bio_err); | 270 | ERR_print_errors(bio_err); |
| 311 | goto end; | 271 | goto end; |
| 312 | } | 272 | } |
| 313 | app_RAND_write_file(NULL, bio_err); | 273 | app_RAND_write_file(NULL, bio_err); |
| 314 | if (outformat == FORMAT_PEM) | 274 | if (outformat == FORMAT_PEM) |
| 315 | PEM_write_bio_PKCS8(out, p8); | 275 | PEM_write_bio_PKCS8(out, p8); |
| 316 | else if (outformat == FORMAT_ASN1) | 276 | else if (outformat == FORMAT_ASN1) |
| 317 | i2d_PKCS8_bio(out, p8); | 277 | i2d_PKCS8_bio(out, p8); |
| 318 | else | 278 | else { |
| 319 | { | ||
| 320 | BIO_printf(bio_err, "Bad format specified for key\n"); | 279 | BIO_printf(bio_err, "Bad format specified for key\n"); |
| 321 | goto end; | 280 | goto end; |
| 322 | } | ||
| 323 | } | 281 | } |
| 282 | } | ||
| 324 | 283 | ||
| 325 | ret = 0; | 284 | ret = 0; |
| 326 | goto end; | 285 | goto end; |
| 327 | } | 286 | } |
| 328 | 287 | if (nocrypt) { | |
| 329 | if (nocrypt) | 288 | if (informat == FORMAT_PEM) |
| 330 | { | 289 | p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in, NULL, NULL, NULL); |
| 331 | if (informat == FORMAT_PEM) | ||
| 332 | p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in,NULL,NULL, NULL); | ||
| 333 | else if (informat == FORMAT_ASN1) | 290 | else if (informat == FORMAT_ASN1) |
| 334 | p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL); | 291 | p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL); |
| 335 | else | 292 | else { |
| 336 | { | ||
| 337 | BIO_printf(bio_err, "Bad format specified for key\n"); | 293 | BIO_printf(bio_err, "Bad format specified for key\n"); |
| 338 | goto end; | 294 | goto end; |
| 339 | } | ||
| 340 | } | 295 | } |
| 341 | else | 296 | } else { |
| 342 | { | 297 | if (informat == FORMAT_PEM) |
| 343 | if (informat == FORMAT_PEM) | ||
| 344 | p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL); | 298 | p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL); |
| 345 | else if (informat == FORMAT_ASN1) | 299 | else if (informat == FORMAT_ASN1) |
| 346 | p8 = d2i_PKCS8_bio(in, NULL); | 300 | p8 = d2i_PKCS8_bio(in, NULL); |
| 347 | else | 301 | else { |
| 348 | { | ||
| 349 | BIO_printf(bio_err, "Bad format specified for key\n"); | 302 | BIO_printf(bio_err, "Bad format specified for key\n"); |
| 350 | goto end; | 303 | goto end; |
| 351 | } | 304 | } |
| 352 | 305 | ||
| 353 | if (!p8) | 306 | if (!p8) { |
| 354 | { | 307 | BIO_printf(bio_err, "Error reading key\n"); |
| 355 | BIO_printf (bio_err, "Error reading key\n"); | ||
| 356 | ERR_print_errors(bio_err); | 308 | ERR_print_errors(bio_err); |
| 357 | goto end; | 309 | goto end; |
| 358 | } | 310 | } |
| 359 | if (passin) | 311 | if (passin) |
| 360 | p8pass = passin; | 312 | p8pass = passin; |
| 361 | else | 313 | else { |
| 362 | { | ||
| 363 | p8pass = pass; | 314 | p8pass = pass; |
| 364 | EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0); | 315 | EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0); |
| 365 | } | ||
| 366 | p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass)); | ||
| 367 | } | 316 | } |
| 317 | p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass)); | ||
| 318 | } | ||
| 368 | 319 | ||
| 369 | if (!p8inf) | 320 | if (!p8inf) { |
| 370 | { | ||
| 371 | BIO_printf(bio_err, "Error decrypting key\n"); | 321 | BIO_printf(bio_err, "Error decrypting key\n"); |
| 372 | ERR_print_errors(bio_err); | 322 | ERR_print_errors(bio_err); |
| 373 | goto end; | 323 | goto end; |
| 374 | } | 324 | } |
| 375 | 325 | if (!(pkey = EVP_PKCS82PKEY(p8inf))) { | |
| 376 | if (!(pkey = EVP_PKCS82PKEY(p8inf))) | ||
| 377 | { | ||
| 378 | BIO_printf(bio_err, "Error converting key\n"); | 326 | BIO_printf(bio_err, "Error converting key\n"); |
| 379 | ERR_print_errors(bio_err); | 327 | ERR_print_errors(bio_err); |
| 380 | goto end; | 328 | goto end; |
| 381 | } | 329 | } |
| 382 | 330 | if (p8inf->broken) { | |
| 383 | if (p8inf->broken) | ||
| 384 | { | ||
| 385 | BIO_printf(bio_err, "Warning: broken key encoding: "); | 331 | BIO_printf(bio_err, "Warning: broken key encoding: "); |
| 386 | switch (p8inf->broken) | 332 | switch (p8inf->broken) { |
| 387 | { | 333 | case PKCS8_NO_OCTET: |
| 388 | case PKCS8_NO_OCTET: | ||
| 389 | BIO_printf(bio_err, "No Octet String in PrivateKey\n"); | 334 | BIO_printf(bio_err, "No Octet String in PrivateKey\n"); |
| 390 | break; | 335 | break; |
| 391 | 336 | ||
| 392 | case PKCS8_EMBEDDED_PARAM: | 337 | case PKCS8_EMBEDDED_PARAM: |
| 393 | BIO_printf(bio_err, "DSA parameters included in PrivateKey\n"); | 338 | BIO_printf(bio_err, "DSA parameters included in PrivateKey\n"); |
| 394 | break; | 339 | break; |
| 395 | 340 | ||
| 396 | case PKCS8_NS_DB: | 341 | case PKCS8_NS_DB: |
| 397 | BIO_printf(bio_err, "DSA public key include in PrivateKey\n"); | 342 | BIO_printf(bio_err, "DSA public key include in PrivateKey\n"); |
| 398 | break; | 343 | break; |
| 399 | 344 | ||
| 400 | case PKCS8_NEG_PRIVKEY: | 345 | case PKCS8_NEG_PRIVKEY: |
| 401 | BIO_printf(bio_err, "DSA private key value is negative\n"); | 346 | BIO_printf(bio_err, "DSA private key value is negative\n"); |
| 402 | break; | 347 | break; |
| 403 | 348 | ||
| 404 | default: | 349 | default: |
| 405 | BIO_printf(bio_err, "Unknown broken type\n"); | 350 | BIO_printf(bio_err, "Unknown broken type\n"); |
| 406 | break; | 351 | break; |
| 407 | } | 352 | } |
| 408 | } | 353 | } |
| 409 | 354 | if (outformat == FORMAT_PEM) | |
| 410 | if (outformat == FORMAT_PEM) | ||
| 411 | PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout); | 355 | PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout); |
| 412 | else if (outformat == FORMAT_ASN1) | 356 | else if (outformat == FORMAT_ASN1) |
| 413 | i2d_PrivateKey_bio(out, pkey); | 357 | i2d_PrivateKey_bio(out, pkey); |
| 414 | else | 358 | else { |
| 415 | { | ||
| 416 | BIO_printf(bio_err, "Bad format specified for key\n"); | 359 | BIO_printf(bio_err, "Bad format specified for key\n"); |
| 417 | goto end; | 360 | goto end; |
| 418 | } | 361 | } |
| 419 | ret = 0; | 362 | ret = 0; |
| 420 | 363 | ||
| 421 | end: | 364 | end: |
| 422 | X509_SIG_free(p8); | 365 | X509_SIG_free(p8); |
| 423 | PKCS8_PRIV_KEY_INFO_free(p8inf); | 366 | PKCS8_PRIV_KEY_INFO_free(p8inf); |
| 424 | EVP_PKEY_free(pkey); | 367 | EVP_PKEY_free(pkey); |
| @@ -430,4 +373,4 @@ int MAIN(int argc, char **argv) | |||
| 430 | free(passout); | 373 | free(passout); |
| 431 | 374 | ||
| 432 | return ret; | 375 | return ret; |
| 433 | } | 376 | } |
diff --git a/src/lib/libssl/src/apps/pkey.c b/src/lib/libssl/src/apps/pkey.c index 82c67b732b..963ab92368 100644 --- a/src/lib/libssl/src/apps/pkey.c +++ b/src/lib/libssl/src/apps/pkey.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -66,8 +66,9 @@ | |||
| 66 | 66 | ||
| 67 | int MAIN(int, char **); | 67 | int MAIN(int, char **); |
| 68 | 68 | ||
| 69 | int MAIN(int argc, char **argv) | 69 | int |
| 70 | { | 70 | MAIN(int argc, char **argv) |
| 71 | { | ||
| 71 | ENGINE *e = NULL; | 72 | ENGINE *e = NULL; |
| 72 | char **args, *infile = NULL, *outfile = NULL; | 73 | char **args, *infile = NULL, *outfile = NULL; |
| 73 | char *passargin = NULL, *passargout = NULL; | 74 | char *passargin = NULL, *passargout = NULL; |
| @@ -75,114 +76,93 @@ int MAIN(int argc, char **argv) | |||
| 75 | const EVP_CIPHER *cipher = NULL; | 76 | const EVP_CIPHER *cipher = NULL; |
| 76 | int informat, outformat; | 77 | int informat, outformat; |
| 77 | int pubin = 0, pubout = 0, pubtext = 0, text = 0, noout = 0; | 78 | int pubin = 0, pubout = 0, pubtext = 0, text = 0, noout = 0; |
| 78 | EVP_PKEY *pkey=NULL; | 79 | EVP_PKEY *pkey = NULL; |
| 79 | char *passin = NULL, *passout = NULL; | 80 | char *passin = NULL, *passout = NULL; |
| 80 | int badarg = 0; | 81 | int badarg = 0; |
| 81 | #ifndef OPENSSL_NO_ENGINE | 82 | #ifndef OPENSSL_NO_ENGINE |
| 82 | char *engine=NULL; | 83 | char *engine = NULL; |
| 83 | #endif | 84 | #endif |
| 84 | int ret = 1; | 85 | int ret = 1; |
| 85 | 86 | ||
| 86 | if (bio_err == NULL) | 87 | if (bio_err == NULL) |
| 87 | bio_err = BIO_new_fp (stderr, BIO_NOCLOSE); | 88 | bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); |
| 88 | 89 | ||
| 89 | if (!load_config(bio_err, NULL)) | 90 | if (!load_config(bio_err, NULL)) |
| 90 | goto end; | 91 | goto end; |
| 91 | 92 | ||
| 92 | informat=FORMAT_PEM; | 93 | informat = FORMAT_PEM; |
| 93 | outformat=FORMAT_PEM; | 94 | outformat = FORMAT_PEM; |
| 94 | 95 | ||
| 95 | ERR_load_crypto_strings(); | 96 | ERR_load_crypto_strings(); |
| 96 | OpenSSL_add_all_algorithms(); | 97 | OpenSSL_add_all_algorithms(); |
| 97 | args = argv + 1; | 98 | args = argv + 1; |
| 98 | while (!badarg && *args && *args[0] == '-') | 99 | while (!badarg && *args && *args[0] == '-') { |
| 99 | { | 100 | if (!strcmp(*args, "-inform")) { |
| 100 | if (!strcmp(*args,"-inform")) | 101 | if (args[1]) { |
| 101 | { | ||
| 102 | if (args[1]) | ||
| 103 | { | ||
| 104 | args++; | 102 | args++; |
| 105 | informat=str2fmt(*args); | 103 | informat = str2fmt(*args); |
| 106 | } | 104 | } else |
| 107 | else badarg = 1; | 105 | badarg = 1; |
| 108 | } | 106 | } else if (!strcmp(*args, "-outform")) { |
| 109 | else if (!strcmp(*args,"-outform")) | 107 | if (args[1]) { |
| 110 | { | ||
| 111 | if (args[1]) | ||
| 112 | { | ||
| 113 | args++; | 108 | args++; |
| 114 | outformat=str2fmt(*args); | 109 | outformat = str2fmt(*args); |
| 115 | } | 110 | } else |
| 116 | else badarg = 1; | 111 | badarg = 1; |
| 117 | } | 112 | } else if (!strcmp(*args, "-passin")) { |
| 118 | else if (!strcmp(*args,"-passin")) | 113 | if (!args[1]) |
| 119 | { | 114 | goto bad; |
| 120 | if (!args[1]) goto bad; | 115 | passargin = *(++args); |
| 121 | passargin= *(++args); | 116 | } else if (!strcmp(*args, "-passout")) { |
| 122 | } | 117 | if (!args[1]) |
| 123 | else if (!strcmp(*args,"-passout")) | 118 | goto bad; |
| 124 | { | 119 | passargout = *(++args); |
| 125 | if (!args[1]) goto bad; | 120 | } |
| 126 | passargout= *(++args); | ||
| 127 | } | ||
| 128 | #ifndef OPENSSL_NO_ENGINE | 121 | #ifndef OPENSSL_NO_ENGINE |
| 129 | else if (strcmp(*args,"-engine") == 0) | 122 | else if (strcmp(*args, "-engine") == 0) { |
| 130 | { | 123 | if (!args[1]) |
| 131 | if (!args[1]) goto bad; | 124 | goto bad; |
| 132 | engine= *(++args); | 125 | engine = *(++args); |
| 133 | } | 126 | } |
| 134 | #endif | 127 | #endif |
| 135 | else if (!strcmp (*args, "-in")) | 128 | else if (!strcmp(*args, "-in")) { |
| 136 | { | 129 | if (args[1]) { |
| 137 | if (args[1]) | ||
| 138 | { | ||
| 139 | args++; | 130 | args++; |
| 140 | infile = *args; | 131 | infile = *args; |
| 141 | } | 132 | } else |
| 142 | else badarg = 1; | 133 | badarg = 1; |
| 143 | } | 134 | } else if (!strcmp(*args, "-out")) { |
| 144 | else if (!strcmp (*args, "-out")) | 135 | if (args[1]) { |
| 145 | { | ||
| 146 | if (args[1]) | ||
| 147 | { | ||
| 148 | args++; | 136 | args++; |
| 149 | outfile = *args; | 137 | outfile = *args; |
| 150 | } | 138 | } else |
| 151 | else badarg = 1; | 139 | badarg = 1; |
| 152 | } | 140 | } else if (strcmp(*args, "-pubin") == 0) { |
| 153 | else if (strcmp(*args,"-pubin") == 0) | 141 | pubin = 1; |
| 154 | { | 142 | pubout = 1; |
| 155 | pubin=1; | 143 | pubtext = 1; |
| 156 | pubout=1; | 144 | } else if (strcmp(*args, "-pubout") == 0) |
| 157 | pubtext=1; | 145 | pubout = 1; |
| 158 | } | 146 | else if (strcmp(*args, "-text_pub") == 0) { |
| 159 | else if (strcmp(*args,"-pubout") == 0) | 147 | pubtext = 1; |
| 160 | pubout=1; | 148 | text = 1; |
| 161 | else if (strcmp(*args,"-text_pub") == 0) | 149 | } else if (strcmp(*args, "-text") == 0) |
| 162 | { | 150 | text = 1; |
| 163 | pubtext=1; | 151 | else if (strcmp(*args, "-noout") == 0) |
| 164 | text=1; | 152 | noout = 1; |
| 165 | } | 153 | else { |
| 166 | else if (strcmp(*args,"-text") == 0) | ||
| 167 | text=1; | ||
| 168 | else if (strcmp(*args,"-noout") == 0) | ||
| 169 | noout=1; | ||
| 170 | else | ||
| 171 | { | ||
| 172 | cipher = EVP_get_cipherbyname(*args + 1); | 154 | cipher = EVP_get_cipherbyname(*args + 1); |
| 173 | if (!cipher) | 155 | if (!cipher) { |
| 174 | { | ||
| 175 | BIO_printf(bio_err, "Unknown cipher %s\n", | 156 | BIO_printf(bio_err, "Unknown cipher %s\n", |
| 176 | *args + 1); | 157 | *args + 1); |
| 177 | badarg = 1; | 158 | badarg = 1; |
| 178 | } | ||
| 179 | } | 159 | } |
| 180 | args++; | ||
| 181 | } | 160 | } |
| 161 | args++; | ||
| 162 | } | ||
| 182 | 163 | ||
| 183 | if (badarg) | 164 | if (badarg) { |
| 184 | { | 165 | bad: |
| 185 | bad: | ||
| 186 | BIO_printf(bio_err, "Usage pkey [options]\n"); | 166 | BIO_printf(bio_err, "Usage pkey [options]\n"); |
| 187 | BIO_printf(bio_err, "where options are\n"); | 167 | BIO_printf(bio_err, "where options are\n"); |
| 188 | BIO_printf(bio_err, "-in file input file\n"); | 168 | BIO_printf(bio_err, "-in file input file\n"); |
| @@ -195,77 +175,61 @@ int MAIN(int argc, char **argv) | |||
| 195 | BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n"); | 175 | BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n"); |
| 196 | #endif | 176 | #endif |
| 197 | return 1; | 177 | return 1; |
| 198 | } | 178 | } |
| 199 | |||
| 200 | #ifndef OPENSSL_NO_ENGINE | 179 | #ifndef OPENSSL_NO_ENGINE |
| 201 | e = setup_engine(bio_err, engine, 0); | 180 | e = setup_engine(bio_err, engine, 0); |
| 202 | #endif | 181 | #endif |
| 203 | 182 | ||
| 204 | if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) | 183 | if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { |
| 205 | { | ||
| 206 | BIO_printf(bio_err, "Error getting passwords\n"); | 184 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 207 | goto end; | 185 | goto end; |
| 208 | } | 186 | } |
| 209 | 187 | if (outfile) { | |
| 210 | if (outfile) | 188 | if (!(out = BIO_new_file(outfile, "wb"))) { |
| 211 | { | ||
| 212 | if (!(out = BIO_new_file (outfile, "wb"))) | ||
| 213 | { | ||
| 214 | BIO_printf(bio_err, | 189 | BIO_printf(bio_err, |
| 215 | "Can't open output file %s\n", outfile); | 190 | "Can't open output file %s\n", outfile); |
| 216 | goto end; | 191 | goto end; |
| 217 | } | ||
| 218 | } | ||
| 219 | else | ||
| 220 | { | ||
| 221 | out = BIO_new_fp (stdout, BIO_NOCLOSE); | ||
| 222 | } | 192 | } |
| 193 | } else { | ||
| 194 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | ||
| 195 | } | ||
| 223 | 196 | ||
| 224 | if (pubin) | 197 | if (pubin) |
| 225 | pkey = load_pubkey(bio_err, infile, informat, 1, | 198 | pkey = load_pubkey(bio_err, infile, informat, 1, |
| 226 | passin, e, "Public Key"); | 199 | passin, e, "Public Key"); |
| 227 | else | 200 | else |
| 228 | pkey = load_key(bio_err, infile, informat, 1, | 201 | pkey = load_key(bio_err, infile, informat, 1, |
| 229 | passin, e, "key"); | 202 | passin, e, "key"); |
| 230 | if (!pkey) | 203 | if (!pkey) |
| 231 | goto end; | 204 | goto end; |
| 232 | 205 | ||
| 233 | if (!noout) | 206 | if (!noout) { |
| 234 | { | 207 | if (outformat == FORMAT_PEM) { |
| 235 | if (outformat == FORMAT_PEM) | ||
| 236 | { | ||
| 237 | if (pubout) | 208 | if (pubout) |
| 238 | PEM_write_bio_PUBKEY(out,pkey); | 209 | PEM_write_bio_PUBKEY(out, pkey); |
| 239 | else | 210 | else |
| 240 | PEM_write_bio_PrivateKey(out, pkey, cipher, | 211 | PEM_write_bio_PrivateKey(out, pkey, cipher, |
| 241 | NULL, 0, NULL, passout); | 212 | NULL, 0, NULL, passout); |
| 242 | } | 213 | } else if (outformat == FORMAT_ASN1) { |
| 243 | else if (outformat == FORMAT_ASN1) | ||
| 244 | { | ||
| 245 | if (pubout) | 214 | if (pubout) |
| 246 | i2d_PUBKEY_bio(out, pkey); | 215 | i2d_PUBKEY_bio(out, pkey); |
| 247 | else | 216 | else |
| 248 | i2d_PrivateKey_bio(out, pkey); | 217 | i2d_PrivateKey_bio(out, pkey); |
| 249 | } | 218 | } else { |
| 250 | else | ||
| 251 | { | ||
| 252 | BIO_printf(bio_err, "Bad format specified for key\n"); | 219 | BIO_printf(bio_err, "Bad format specified for key\n"); |
| 253 | goto end; | 220 | goto end; |
| 254 | } | ||
| 255 | |||
| 256 | } | 221 | } |
| 257 | 222 | ||
| 258 | if (text) | 223 | } |
| 259 | { | 224 | if (text) { |
| 260 | if (pubtext) | 225 | if (pubtext) |
| 261 | EVP_PKEY_print_public(out, pkey, 0, NULL); | 226 | EVP_PKEY_print_public(out, pkey, 0, NULL); |
| 262 | else | 227 | else |
| 263 | EVP_PKEY_print_private(out, pkey, 0, NULL); | 228 | EVP_PKEY_print_private(out, pkey, 0, NULL); |
| 264 | } | 229 | } |
| 265 | |||
| 266 | ret = 0; | 230 | ret = 0; |
| 267 | 231 | ||
| 268 | end: | 232 | end: |
| 269 | EVP_PKEY_free(pkey); | 233 | EVP_PKEY_free(pkey); |
| 270 | BIO_free_all(out); | 234 | BIO_free_all(out); |
| 271 | BIO_free(in); | 235 | BIO_free(in); |
| @@ -275,4 +239,4 @@ int MAIN(int argc, char **argv) | |||
| 275 | free(passout); | 239 | free(passout); |
| 276 | 240 | ||
| 277 | return ret; | 241 | return ret; |
| 278 | } | 242 | } |
diff --git a/src/lib/libssl/src/apps/pkeyparam.c b/src/lib/libssl/src/apps/pkeyparam.c index 6a46c8ac49..06c295dfe8 100644 --- a/src/lib/libssl/src/apps/pkeyparam.c +++ b/src/lib/libssl/src/apps/pkeyparam.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -66,20 +66,21 @@ | |||
| 66 | 66 | ||
| 67 | int MAIN(int, char **); | 67 | int MAIN(int, char **); |
| 68 | 68 | ||
| 69 | int MAIN(int argc, char **argv) | 69 | int |
| 70 | { | 70 | MAIN(int argc, char **argv) |
| 71 | { | ||
| 71 | char **args, *infile = NULL, *outfile = NULL; | 72 | char **args, *infile = NULL, *outfile = NULL; |
| 72 | BIO *in = NULL, *out = NULL; | 73 | BIO *in = NULL, *out = NULL; |
| 73 | int text = 0, noout = 0; | 74 | int text = 0, noout = 0; |
| 74 | EVP_PKEY *pkey=NULL; | 75 | EVP_PKEY *pkey = NULL; |
| 75 | int badarg = 0; | 76 | int badarg = 0; |
| 76 | #ifndef OPENSSL_NO_ENGINE | 77 | #ifndef OPENSSL_NO_ENGINE |
| 77 | char *engine=NULL; | 78 | char *engine = NULL; |
| 78 | #endif | 79 | #endif |
| 79 | int ret = 1; | 80 | int ret = 1; |
| 80 | 81 | ||
| 81 | if (bio_err == NULL) | 82 | if (bio_err == NULL) |
| 82 | bio_err = BIO_new_fp (stderr, BIO_NOCLOSE); | 83 | bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); |
| 83 | 84 | ||
| 84 | if (!load_config(bio_err, NULL)) | 85 | if (!load_config(bio_err, NULL)) |
| 85 | goto end; | 86 | goto end; |
| @@ -87,45 +88,38 @@ int MAIN(int argc, char **argv) | |||
| 87 | ERR_load_crypto_strings(); | 88 | ERR_load_crypto_strings(); |
| 88 | OpenSSL_add_all_algorithms(); | 89 | OpenSSL_add_all_algorithms(); |
| 89 | args = argv + 1; | 90 | args = argv + 1; |
| 90 | while (!badarg && *args && *args[0] == '-') | 91 | while (!badarg && *args && *args[0] == '-') { |
| 91 | { | 92 | if (!strcmp(*args, "-in")) { |
| 92 | if (!strcmp (*args, "-in")) | 93 | if (args[1]) { |
| 93 | { | ||
| 94 | if (args[1]) | ||
| 95 | { | ||
| 96 | args++; | 94 | args++; |
| 97 | infile = *args; | 95 | infile = *args; |
| 98 | } | 96 | } else |
| 99 | else badarg = 1; | 97 | badarg = 1; |
| 100 | } | 98 | } else if (!strcmp(*args, "-out")) { |
| 101 | else if (!strcmp (*args, "-out")) | 99 | if (args[1]) { |
| 102 | { | ||
| 103 | if (args[1]) | ||
| 104 | { | ||
| 105 | args++; | 100 | args++; |
| 106 | outfile = *args; | 101 | outfile = *args; |
| 107 | } | 102 | } else |
| 108 | else badarg = 1; | 103 | badarg = 1; |
| 109 | } | 104 | } |
| 110 | #ifndef OPENSSL_NO_ENGINE | 105 | #ifndef OPENSSL_NO_ENGINE |
| 111 | else if (strcmp(*args,"-engine") == 0) | 106 | else if (strcmp(*args, "-engine") == 0) { |
| 112 | { | 107 | if (!args[1]) |
| 113 | if (!args[1]) goto bad; | 108 | goto bad; |
| 114 | engine= *(++args); | 109 | engine = *(++args); |
| 115 | } | 110 | } |
| 116 | #endif | 111 | #endif |
| 117 | 112 | ||
| 118 | else if (strcmp(*args,"-text") == 0) | 113 | else if (strcmp(*args, "-text") == 0) |
| 119 | text=1; | 114 | text = 1; |
| 120 | else if (strcmp(*args,"-noout") == 0) | 115 | else if (strcmp(*args, "-noout") == 0) |
| 121 | noout=1; | 116 | noout = 1; |
| 122 | args++; | 117 | args++; |
| 123 | } | 118 | } |
| 124 | 119 | ||
| 125 | if (badarg) | 120 | if (badarg) { |
| 126 | { | ||
| 127 | #ifndef OPENSSL_NO_ENGINE | 121 | #ifndef OPENSSL_NO_ENGINE |
| 128 | bad: | 122 | bad: |
| 129 | #endif | 123 | #endif |
| 130 | BIO_printf(bio_err, "Usage pkeyparam [options]\n"); | 124 | BIO_printf(bio_err, "Usage pkeyparam [options]\n"); |
| 131 | BIO_printf(bio_err, "where options are\n"); | 125 | BIO_printf(bio_err, "where options are\n"); |
| @@ -137,58 +131,48 @@ int MAIN(int argc, char **argv) | |||
| 137 | BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n"); | 131 | BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n"); |
| 138 | #endif | 132 | #endif |
| 139 | return 1; | 133 | return 1; |
| 140 | } | 134 | } |
| 141 | |||
| 142 | #ifndef OPENSSL_NO_ENGINE | 135 | #ifndef OPENSSL_NO_ENGINE |
| 143 | setup_engine(bio_err, engine, 0); | 136 | setup_engine(bio_err, engine, 0); |
| 144 | #endif | 137 | #endif |
| 145 | 138 | ||
| 146 | if (infile) | 139 | if (infile) { |
| 147 | { | 140 | if (!(in = BIO_new_file(infile, "r"))) { |
| 148 | if (!(in = BIO_new_file (infile, "r"))) | ||
| 149 | { | ||
| 150 | BIO_printf(bio_err, | 141 | BIO_printf(bio_err, |
| 151 | "Can't open input file %s\n", infile); | 142 | "Can't open input file %s\n", infile); |
| 152 | goto end; | 143 | goto end; |
| 153 | } | ||
| 154 | } | 144 | } |
| 155 | else | 145 | } else |
| 156 | in = BIO_new_fp (stdin, BIO_NOCLOSE); | 146 | in = BIO_new_fp(stdin, BIO_NOCLOSE); |
| 157 | 147 | ||
| 158 | if (outfile) | 148 | if (outfile) { |
| 159 | { | 149 | if (!(out = BIO_new_file(outfile, "w"))) { |
| 160 | if (!(out = BIO_new_file (outfile, "w"))) | ||
| 161 | { | ||
| 162 | BIO_printf(bio_err, | 150 | BIO_printf(bio_err, |
| 163 | "Can't open output file %s\n", outfile); | 151 | "Can't open output file %s\n", outfile); |
| 164 | goto end; | 152 | goto end; |
| 165 | } | ||
| 166 | } | ||
| 167 | else | ||
| 168 | { | ||
| 169 | out = BIO_new_fp (stdout, BIO_NOCLOSE); | ||
| 170 | } | 153 | } |
| 154 | } else { | ||
| 155 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | ||
| 156 | } | ||
| 171 | 157 | ||
| 172 | pkey = PEM_read_bio_Parameters(in, NULL); | 158 | pkey = PEM_read_bio_Parameters(in, NULL); |
| 173 | if (!pkey) | 159 | if (!pkey) { |
| 174 | { | ||
| 175 | BIO_printf(bio_err, "Error reading parameters\n"); | 160 | BIO_printf(bio_err, "Error reading parameters\n"); |
| 176 | ERR_print_errors(bio_err); | 161 | ERR_print_errors(bio_err); |
| 177 | goto end; | 162 | goto end; |
| 178 | } | 163 | } |
| 179 | |||
| 180 | if (!noout) | 164 | if (!noout) |
| 181 | PEM_write_bio_Parameters(out,pkey); | 165 | PEM_write_bio_Parameters(out, pkey); |
| 182 | 166 | ||
| 183 | if (text) | 167 | if (text) |
| 184 | EVP_PKEY_print_params(out, pkey, 0, NULL); | 168 | EVP_PKEY_print_params(out, pkey, 0, NULL); |
| 185 | 169 | ||
| 186 | ret = 0; | 170 | ret = 0; |
| 187 | 171 | ||
| 188 | end: | 172 | end: |
| 189 | EVP_PKEY_free(pkey); | 173 | EVP_PKEY_free(pkey); |
| 190 | BIO_free_all(out); | 174 | BIO_free_all(out); |
| 191 | BIO_free(in); | 175 | BIO_free(in); |
| 192 | 176 | ||
| 193 | return ret; | 177 | return ret; |
| 194 | } | 178 | } |
diff --git a/src/lib/libssl/src/apps/pkeyutl.c b/src/lib/libssl/src/apps/pkeyutl.c index 3627839e05..226bb25220 100644 --- a/src/lib/libssl/src/apps/pkeyutl.c +++ b/src/lib/libssl/src/apps/pkeyutl.c | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | * are met: | 9 | * are met: |
| 10 | * | 10 | * |
| 11 | * 1. Redistributions of source code must retain the above copyright | 11 | * 1. Redistributions of source code must retain the above copyright |
| 12 | * notice, this list of conditions and the following disclaimer. | 12 | * notice, this list of conditions and the following disclaimer. |
| 13 | * | 13 | * |
| 14 | * 2. Redistributions in binary form must reproduce the above copyright | 14 | * 2. Redistributions in binary form must reproduce the above copyright |
| 15 | * notice, this list of conditions and the following disclaimer in | 15 | * notice, this list of conditions and the following disclaimer in |
| @@ -72,20 +72,24 @@ static void usage(void); | |||
| 72 | 72 | ||
| 73 | #define PROG pkeyutl_main | 73 | #define PROG pkeyutl_main |
| 74 | 74 | ||
| 75 | static EVP_PKEY_CTX *init_ctx(int *pkeysize, | 75 | static EVP_PKEY_CTX * |
| 76 | char *keyfile, int keyform, int key_type, | 76 | init_ctx(int *pkeysize, |
| 77 | char *passargin, int pkey_op, ENGINE *e); | 77 | char *keyfile, int keyform, int key_type, |
| 78 | char *passargin, int pkey_op, ENGINE * e); | ||
| 78 | 79 | ||
| 79 | static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform, | 80 | static int |
| 80 | const char *file); | 81 | setup_peer(BIO * err, EVP_PKEY_CTX * ctx, int peerform, |
| 82 | const char *file); | ||
| 81 | 83 | ||
| 82 | static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op, | 84 | static int |
| 83 | unsigned char *out, size_t *poutlen, | 85 | do_keyop(EVP_PKEY_CTX * ctx, int pkey_op, |
| 84 | unsigned char *in, size_t inlen); | 86 | unsigned char *out, size_t * poutlen, |
| 87 | unsigned char *in, size_t inlen); | ||
| 85 | 88 | ||
| 86 | int MAIN(int argc, char **); | 89 | int MAIN(int argc, char **); |
| 87 | 90 | ||
| 88 | int MAIN(int argc, char **argv) | 91 | int |
| 92 | MAIN(int argc, char **argv) | ||
| 89 | { | 93 | { |
| 90 | BIO *in = NULL, *out = NULL; | 94 | BIO *in = NULL, *out = NULL; |
| 91 | char *infile = NULL, *outfile = NULL, *sigfile = NULL; | 95 | char *infile = NULL, *outfile = NULL, *sigfile = NULL; |
| @@ -107,265 +111,223 @@ int MAIN(int argc, char **argv) | |||
| 107 | argc--; | 111 | argc--; |
| 108 | argv++; | 112 | argv++; |
| 109 | 113 | ||
| 110 | if(!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); | 114 | if (!bio_err) |
| 115 | bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); | ||
| 111 | 116 | ||
| 112 | if (!load_config(bio_err, NULL)) | 117 | if (!load_config(bio_err, NULL)) |
| 113 | goto end; | 118 | goto end; |
| 114 | ERR_load_crypto_strings(); | 119 | ERR_load_crypto_strings(); |
| 115 | OpenSSL_add_all_algorithms(); | 120 | OpenSSL_add_all_algorithms(); |
| 116 | 121 | ||
| 117 | while(argc >= 1) | 122 | while (argc >= 1) { |
| 118 | { | 123 | if (!strcmp(*argv, "-in")) { |
| 119 | if (!strcmp(*argv,"-in")) | 124 | if (--argc < 1) |
| 120 | { | 125 | badarg = 1; |
| 121 | if (--argc < 1) badarg = 1; | 126 | else |
| 122 | else infile= *(++argv); | 127 | infile = *(++argv); |
| 123 | } | 128 | } else if (!strcmp(*argv, "-out")) { |
| 124 | else if (!strcmp(*argv,"-out")) | ||
| 125 | { | ||
| 126 | if (--argc < 1) badarg = 1; | ||
| 127 | else outfile= *(++argv); | ||
| 128 | } | ||
| 129 | else if (!strcmp(*argv,"-sigfile")) | ||
| 130 | { | ||
| 131 | if (--argc < 1) badarg = 1; | ||
| 132 | else sigfile= *(++argv); | ||
| 133 | } | ||
| 134 | else if(!strcmp(*argv, "-inkey")) | ||
| 135 | { | ||
| 136 | if (--argc < 1) | 129 | if (--argc < 1) |
| 137 | badarg = 1; | 130 | badarg = 1; |
| 138 | else | 131 | else |
| 139 | { | 132 | outfile = *(++argv); |
| 133 | } else if (!strcmp(*argv, "-sigfile")) { | ||
| 134 | if (--argc < 1) | ||
| 135 | badarg = 1; | ||
| 136 | else | ||
| 137 | sigfile = *(++argv); | ||
| 138 | } else if (!strcmp(*argv, "-inkey")) { | ||
| 139 | if (--argc < 1) | ||
| 140 | badarg = 1; | ||
| 141 | else { | ||
| 140 | ctx = init_ctx(&keysize, | 142 | ctx = init_ctx(&keysize, |
| 141 | *(++argv), keyform, key_type, | 143 | *(++argv), keyform, key_type, |
| 142 | passargin, pkey_op, e); | 144 | passargin, pkey_op, e); |
| 143 | if (!ctx) | 145 | if (!ctx) { |
| 144 | { | ||
| 145 | BIO_puts(bio_err, | 146 | BIO_puts(bio_err, |
| 146 | "Error initializing context\n"); | 147 | "Error initializing context\n"); |
| 147 | ERR_print_errors(bio_err); | 148 | ERR_print_errors(bio_err); |
| 148 | badarg = 1; | 149 | badarg = 1; |
| 149 | } | ||
| 150 | } | 150 | } |
| 151 | } | 151 | } |
| 152 | else if (!strcmp(*argv,"-peerkey")) | 152 | } else if (!strcmp(*argv, "-peerkey")) { |
| 153 | { | ||
| 154 | if (--argc < 1) | 153 | if (--argc < 1) |
| 155 | badarg = 1; | 154 | badarg = 1; |
| 156 | else if (!setup_peer(bio_err, ctx, peerform, *(++argv))) | 155 | else if (!setup_peer(bio_err, ctx, peerform, *(++argv))) |
| 157 | badarg = 1; | 156 | badarg = 1; |
| 158 | } | 157 | } else if (!strcmp(*argv, "-passin")) { |
| 159 | else if (!strcmp(*argv,"-passin")) | 158 | if (--argc < 1) |
| 160 | { | 159 | badarg = 1; |
| 161 | if (--argc < 1) badarg = 1; | 160 | else |
| 162 | else passargin= *(++argv); | 161 | passargin = *(++argv); |
| 163 | } | 162 | } else if (strcmp(*argv, "-peerform") == 0) { |
| 164 | else if (strcmp(*argv,"-peerform") == 0) | 163 | if (--argc < 1) |
| 165 | { | 164 | badarg = 1; |
| 166 | if (--argc < 1) badarg = 1; | 165 | else |
| 167 | else peerform=str2fmt(*(++argv)); | 166 | peerform = str2fmt(*(++argv)); |
| 168 | } | 167 | } else if (strcmp(*argv, "-keyform") == 0) { |
| 169 | else if (strcmp(*argv,"-keyform") == 0) | 168 | if (--argc < 1) |
| 170 | { | 169 | badarg = 1; |
| 171 | if (--argc < 1) badarg = 1; | 170 | else |
| 172 | else keyform=str2fmt(*(++argv)); | 171 | keyform = str2fmt(*(++argv)); |
| 173 | } | 172 | } |
| 174 | #ifndef OPENSSL_NO_ENGINE | 173 | #ifndef OPENSSL_NO_ENGINE |
| 175 | else if(!strcmp(*argv, "-engine")) | 174 | else if (!strcmp(*argv, "-engine")) { |
| 176 | { | ||
| 177 | if (--argc < 1) | 175 | if (--argc < 1) |
| 178 | badarg = 1; | 176 | badarg = 1; |
| 179 | else | 177 | else |
| 180 | e = setup_engine(bio_err, *(++argv), 0); | 178 | e = setup_engine(bio_err, *(++argv), 0); |
| 181 | } | 179 | } |
| 182 | #endif | 180 | #endif |
| 183 | else if(!strcmp(*argv, "-pubin")) | 181 | else if (!strcmp(*argv, "-pubin")) |
| 184 | key_type = KEY_PUBKEY; | 182 | key_type = KEY_PUBKEY; |
| 185 | else if(!strcmp(*argv, "-certin")) | 183 | else if (!strcmp(*argv, "-certin")) |
| 186 | key_type = KEY_CERT; | 184 | key_type = KEY_CERT; |
| 187 | else if(!strcmp(*argv, "-asn1parse")) | 185 | else if (!strcmp(*argv, "-asn1parse")) |
| 188 | asn1parse = 1; | 186 | asn1parse = 1; |
| 189 | else if(!strcmp(*argv, "-hexdump")) | 187 | else if (!strcmp(*argv, "-hexdump")) |
| 190 | hexdump = 1; | 188 | hexdump = 1; |
| 191 | else if(!strcmp(*argv, "-sign")) | 189 | else if (!strcmp(*argv, "-sign")) |
| 192 | pkey_op = EVP_PKEY_OP_SIGN; | 190 | pkey_op = EVP_PKEY_OP_SIGN; |
| 193 | else if(!strcmp(*argv, "-verify")) | 191 | else if (!strcmp(*argv, "-verify")) |
| 194 | pkey_op = EVP_PKEY_OP_VERIFY; | 192 | pkey_op = EVP_PKEY_OP_VERIFY; |
| 195 | else if(!strcmp(*argv, "-verifyrecover")) | 193 | else if (!strcmp(*argv, "-verifyrecover")) |
| 196 | pkey_op = EVP_PKEY_OP_VERIFYRECOVER; | 194 | pkey_op = EVP_PKEY_OP_VERIFYRECOVER; |
| 197 | else if(!strcmp(*argv, "-rev")) | 195 | else if (!strcmp(*argv, "-rev")) |
| 198 | rev = 1; | 196 | rev = 1; |
| 199 | else if(!strcmp(*argv, "-encrypt")) | 197 | else if (!strcmp(*argv, "-encrypt")) |
| 200 | pkey_op = EVP_PKEY_OP_ENCRYPT; | 198 | pkey_op = EVP_PKEY_OP_ENCRYPT; |
| 201 | else if(!strcmp(*argv, "-decrypt")) | 199 | else if (!strcmp(*argv, "-decrypt")) |
| 202 | pkey_op = EVP_PKEY_OP_DECRYPT; | 200 | pkey_op = EVP_PKEY_OP_DECRYPT; |
| 203 | else if(!strcmp(*argv, "-derive")) | 201 | else if (!strcmp(*argv, "-derive")) |
| 204 | pkey_op = EVP_PKEY_OP_DERIVE; | 202 | pkey_op = EVP_PKEY_OP_DERIVE; |
| 205 | else if (strcmp(*argv,"-pkeyopt") == 0) | 203 | else if (strcmp(*argv, "-pkeyopt") == 0) { |
| 206 | { | ||
| 207 | if (--argc < 1) | 204 | if (--argc < 1) |
| 208 | badarg = 1; | 205 | badarg = 1; |
| 209 | else if (!ctx) | 206 | else if (!ctx) { |
| 210 | { | ||
| 211 | BIO_puts(bio_err, | 207 | BIO_puts(bio_err, |
| 212 | "-pkeyopt command before -inkey\n"); | 208 | "-pkeyopt command before -inkey\n"); |
| 213 | badarg = 1; | 209 | badarg = 1; |
| 214 | } | 210 | } else if (pkey_ctrl_string(ctx, *(++argv)) <= 0) { |
| 215 | else if (pkey_ctrl_string(ctx, *(++argv)) <= 0) | ||
| 216 | { | ||
| 217 | BIO_puts(bio_err, "parameter setting error\n"); | 211 | BIO_puts(bio_err, "parameter setting error\n"); |
| 218 | ERR_print_errors(bio_err); | 212 | ERR_print_errors(bio_err); |
| 219 | goto end; | 213 | goto end; |
| 220 | } | ||
| 221 | } | 214 | } |
| 222 | else badarg = 1; | 215 | } else |
| 223 | if(badarg) | 216 | badarg = 1; |
| 224 | { | 217 | if (badarg) { |
| 225 | usage(); | 218 | usage(); |
| 226 | goto end; | 219 | goto end; |
| 227 | } | 220 | } |
| 228 | argc--; | 221 | argc--; |
| 229 | argv++; | 222 | argv++; |
| 230 | } | 223 | } |
| 231 | 224 | ||
| 232 | if (!ctx) | 225 | if (!ctx) { |
| 233 | { | ||
| 234 | usage(); | 226 | usage(); |
| 235 | goto end; | 227 | goto end; |
| 236 | } | 228 | } |
| 237 | 229 | if (sigfile && (pkey_op != EVP_PKEY_OP_VERIFY)) { | |
| 238 | if (sigfile && (pkey_op != EVP_PKEY_OP_VERIFY)) | ||
| 239 | { | ||
| 240 | BIO_puts(bio_err, "Signature file specified for non verify\n"); | 230 | BIO_puts(bio_err, "Signature file specified for non verify\n"); |
| 241 | goto end; | 231 | goto end; |
| 242 | } | 232 | } |
| 243 | 233 | if (!sigfile && (pkey_op == EVP_PKEY_OP_VERIFY)) { | |
| 244 | if (!sigfile && (pkey_op == EVP_PKEY_OP_VERIFY)) | ||
| 245 | { | ||
| 246 | BIO_puts(bio_err, "No signature file specified for verify\n"); | 234 | BIO_puts(bio_err, "No signature file specified for verify\n"); |
| 247 | goto end; | 235 | goto end; |
| 248 | } | 236 | } |
| 249 | |||
| 250 | /* FIXME: seed PRNG only if needed */ | 237 | /* FIXME: seed PRNG only if needed */ |
| 251 | app_RAND_load_file(NULL, bio_err, 0); | 238 | app_RAND_load_file(NULL, bio_err, 0); |
| 252 | 239 | ||
| 253 | if (pkey_op != EVP_PKEY_OP_DERIVE) | 240 | if (pkey_op != EVP_PKEY_OP_DERIVE) { |
| 254 | { | 241 | if (infile) { |
| 255 | if(infile) | 242 | if (!(in = BIO_new_file(infile, "rb"))) { |
| 256 | { | ||
| 257 | if(!(in = BIO_new_file(infile, "rb"))) | ||
| 258 | { | ||
| 259 | BIO_puts(bio_err, | 243 | BIO_puts(bio_err, |
| 260 | "Error Opening Input File\n"); | 244 | "Error Opening Input File\n"); |
| 261 | ERR_print_errors(bio_err); | 245 | ERR_print_errors(bio_err); |
| 262 | goto end; | 246 | goto end; |
| 263 | } | ||
| 264 | } | 247 | } |
| 265 | else | 248 | } else |
| 266 | in = BIO_new_fp(stdin, BIO_NOCLOSE); | 249 | in = BIO_new_fp(stdin, BIO_NOCLOSE); |
| 267 | } | 250 | } |
| 268 | 251 | if (outfile) { | |
| 269 | if(outfile) | 252 | if (!(out = BIO_new_file(outfile, "wb"))) { |
| 270 | { | ||
| 271 | if(!(out = BIO_new_file(outfile, "wb"))) | ||
| 272 | { | ||
| 273 | BIO_printf(bio_err, "Error Creating Output File\n"); | 253 | BIO_printf(bio_err, "Error Creating Output File\n"); |
| 274 | ERR_print_errors(bio_err); | 254 | ERR_print_errors(bio_err); |
| 275 | goto end; | 255 | goto end; |
| 276 | } | ||
| 277 | } | 256 | } |
| 278 | else | 257 | } else { |
| 279 | { | ||
| 280 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | 258 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 281 | } | 259 | } |
| 282 | 260 | ||
| 283 | if (sigfile) | 261 | if (sigfile) { |
| 284 | { | ||
| 285 | BIO *sigbio = BIO_new_file(sigfile, "rb"); | 262 | BIO *sigbio = BIO_new_file(sigfile, "rb"); |
| 286 | if (!sigbio) | 263 | if (!sigbio) { |
| 287 | { | ||
| 288 | BIO_printf(bio_err, "Can't open signature file %s\n", | 264 | BIO_printf(bio_err, "Can't open signature file %s\n", |
| 289 | sigfile); | 265 | sigfile); |
| 290 | goto end; | 266 | goto end; |
| 291 | } | 267 | } |
| 292 | siglen = bio_to_mem(&sig, keysize * 10, sigbio); | 268 | siglen = bio_to_mem(&sig, keysize * 10, sigbio); |
| 293 | BIO_free(sigbio); | 269 | BIO_free(sigbio); |
| 294 | if (siglen <= 0) | 270 | if (siglen <= 0) { |
| 295 | { | ||
| 296 | BIO_printf(bio_err, "Error reading signature data\n"); | 271 | BIO_printf(bio_err, "Error reading signature data\n"); |
| 297 | goto end; | 272 | goto end; |
| 298 | } | ||
| 299 | } | 273 | } |
| 300 | 274 | } | |
| 301 | if (in) | 275 | if (in) { |
| 302 | { | ||
| 303 | /* Read the input data */ | 276 | /* Read the input data */ |
| 304 | buf_inlen = bio_to_mem(&buf_in, keysize * 10, in); | 277 | buf_inlen = bio_to_mem(&buf_in, keysize * 10, in); |
| 305 | if(buf_inlen <= 0) | 278 | if (buf_inlen <= 0) { |
| 306 | { | ||
| 307 | BIO_printf(bio_err, "Error reading input Data\n"); | 279 | BIO_printf(bio_err, "Error reading input Data\n"); |
| 308 | exit(1); | 280 | exit(1); |
| 309 | } | 281 | } |
| 310 | if(rev) | 282 | if (rev) { |
| 311 | { | ||
| 312 | size_t i; | 283 | size_t i; |
| 313 | unsigned char ctmp; | 284 | unsigned char ctmp; |
| 314 | size_t l = (size_t)buf_inlen; | 285 | size_t l = (size_t) buf_inlen; |
| 315 | for(i = 0; i < l/2; i++) | 286 | for (i = 0; i < l / 2; i++) { |
| 316 | { | ||
| 317 | ctmp = buf_in[i]; | 287 | ctmp = buf_in[i]; |
| 318 | buf_in[i] = buf_in[l - 1 - i]; | 288 | buf_in[i] = buf_in[l - 1 - i]; |
| 319 | buf_in[l - 1 - i] = ctmp; | 289 | buf_in[l - 1 - i] = ctmp; |
| 320 | } | ||
| 321 | } | 290 | } |
| 322 | } | 291 | } |
| 323 | 292 | } | |
| 324 | if(pkey_op == EVP_PKEY_OP_VERIFY) | 293 | if (pkey_op == EVP_PKEY_OP_VERIFY) { |
| 325 | { | 294 | rv = EVP_PKEY_verify(ctx, sig, (size_t) siglen, |
| 326 | rv = EVP_PKEY_verify(ctx, sig, (size_t)siglen, | 295 | buf_in, (size_t) buf_inlen); |
| 327 | buf_in, (size_t)buf_inlen); | ||
| 328 | if (rv == 0) | 296 | if (rv == 0) |
| 329 | BIO_puts(out, "Signature Verification Failure\n"); | 297 | BIO_puts(out, "Signature Verification Failure\n"); |
| 330 | else if (rv == 1) | 298 | else if (rv == 1) |
| 331 | BIO_puts(out, "Signature Verified Successfully\n"); | 299 | BIO_puts(out, "Signature Verified Successfully\n"); |
| 332 | if (rv >= 0) | 300 | if (rv >= 0) |
| 333 | goto end; | 301 | goto end; |
| 334 | } | 302 | } else { |
| 335 | else | 303 | rv = do_keyop(ctx, pkey_op, NULL, (size_t *) & buf_outlen, |
| 336 | { | 304 | buf_in, (size_t) buf_inlen); |
| 337 | rv = do_keyop(ctx, pkey_op, NULL, (size_t *)&buf_outlen, | 305 | if (rv > 0) { |
| 338 | buf_in, (size_t)buf_inlen); | ||
| 339 | if (rv > 0) | ||
| 340 | { | ||
| 341 | buf_out = malloc(buf_outlen); | 306 | buf_out = malloc(buf_outlen); |
| 342 | if (!buf_out) | 307 | if (!buf_out) |
| 343 | rv = -1; | 308 | rv = -1; |
| 344 | else | 309 | else |
| 345 | rv = do_keyop(ctx, pkey_op, | 310 | rv = do_keyop(ctx, pkey_op, |
| 346 | buf_out, (size_t *)&buf_outlen, | 311 | buf_out, (size_t *) & buf_outlen, |
| 347 | buf_in, (size_t)buf_inlen); | 312 | buf_in, (size_t) buf_inlen); |
| 348 | } | ||
| 349 | } | 313 | } |
| 314 | } | ||
| 350 | 315 | ||
| 351 | if(rv <= 0) | 316 | if (rv <= 0) { |
| 352 | { | ||
| 353 | BIO_printf(bio_err, "Public Key operation error\n"); | 317 | BIO_printf(bio_err, "Public Key operation error\n"); |
| 354 | ERR_print_errors(bio_err); | 318 | ERR_print_errors(bio_err); |
| 355 | goto end; | 319 | goto end; |
| 356 | } | 320 | } |
| 357 | ret = 0; | 321 | ret = 0; |
| 358 | if(asn1parse) | 322 | if (asn1parse) { |
| 359 | { | 323 | if (!ASN1_parse_dump(out, buf_out, buf_outlen, 1, -1)) |
| 360 | if(!ASN1_parse_dump(out, buf_out, buf_outlen, 1, -1)) | ||
| 361 | ERR_print_errors(bio_err); | 324 | ERR_print_errors(bio_err); |
| 362 | } | 325 | } else if (hexdump) |
| 363 | else if(hexdump) | 326 | BIO_dump(out, (char *) buf_out, buf_outlen); |
| 364 | BIO_dump(out, (char *)buf_out, buf_outlen); | ||
| 365 | else | 327 | else |
| 366 | BIO_write(out, buf_out, buf_outlen); | 328 | BIO_write(out, buf_out, buf_outlen); |
| 367 | 329 | ||
| 368 | end: | 330 | end: |
| 369 | if (ctx) | 331 | if (ctx) |
| 370 | EVP_PKEY_CTX_free(ctx); | 332 | EVP_PKEY_CTX_free(ctx); |
| 371 | BIO_free(in); | 333 | BIO_free(in); |
| @@ -379,7 +341,8 @@ int MAIN(int argc, char **argv) | |||
| 379 | return ret; | 341 | return ret; |
| 380 | } | 342 | } |
| 381 | 343 | ||
| 382 | static void usage() | 344 | static void |
| 345 | usage() | ||
| 383 | { | 346 | { |
| 384 | BIO_printf(bio_err, "Usage: pkeyutl [options]\n"); | 347 | BIO_printf(bio_err, "Usage: pkeyutl [options]\n"); |
| 385 | BIO_printf(bio_err, "-in file input file\n"); | 348 | BIO_printf(bio_err, "-in file input file\n"); |
| @@ -404,50 +367,47 @@ static void usage() | |||
| 404 | 367 | ||
| 405 | } | 368 | } |
| 406 | 369 | ||
| 407 | static EVP_PKEY_CTX *init_ctx(int *pkeysize, | 370 | static EVP_PKEY_CTX * |
| 408 | char *keyfile, int keyform, int key_type, | 371 | init_ctx(int *pkeysize, |
| 409 | char *passargin, int pkey_op, ENGINE *e) | 372 | char *keyfile, int keyform, int key_type, |
| 410 | { | 373 | char *passargin, int pkey_op, ENGINE * e) |
| 374 | { | ||
| 411 | EVP_PKEY *pkey = NULL; | 375 | EVP_PKEY *pkey = NULL; |
| 412 | EVP_PKEY_CTX *ctx = NULL; | 376 | EVP_PKEY_CTX *ctx = NULL; |
| 413 | char *passin = NULL; | 377 | char *passin = NULL; |
| 414 | int rv = -1; | 378 | int rv = -1; |
| 415 | X509 *x; | 379 | X509 *x; |
| 416 | if(((pkey_op == EVP_PKEY_OP_SIGN) || (pkey_op == EVP_PKEY_OP_DECRYPT) | 380 | if (((pkey_op == EVP_PKEY_OP_SIGN) || (pkey_op == EVP_PKEY_OP_DECRYPT) |
| 417 | || (pkey_op == EVP_PKEY_OP_DERIVE)) | 381 | || (pkey_op == EVP_PKEY_OP_DERIVE)) |
| 418 | && (key_type != KEY_PRIVKEY)) | 382 | && (key_type != KEY_PRIVKEY)) { |
| 419 | { | ||
| 420 | BIO_printf(bio_err, "A private key is needed for this operation\n"); | 383 | BIO_printf(bio_err, "A private key is needed for this operation\n"); |
| 421 | goto end; | 384 | goto end; |
| 422 | } | 385 | } |
| 423 | if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) | 386 | if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) { |
| 424 | { | ||
| 425 | BIO_printf(bio_err, "Error getting password\n"); | 387 | BIO_printf(bio_err, "Error getting password\n"); |
| 426 | goto end; | 388 | goto end; |
| 427 | } | 389 | } |
| 428 | switch(key_type) | 390 | switch (key_type) { |
| 429 | { | 391 | case KEY_PRIVKEY: |
| 430 | case KEY_PRIVKEY: | ||
| 431 | pkey = load_key(bio_err, keyfile, keyform, 0, | 392 | pkey = load_key(bio_err, keyfile, keyform, 0, |
| 432 | passin, e, "Private Key"); | 393 | passin, e, "Private Key"); |
| 433 | break; | 394 | break; |
| 434 | 395 | ||
| 435 | case KEY_PUBKEY: | 396 | case KEY_PUBKEY: |
| 436 | pkey = load_pubkey(bio_err, keyfile, keyform, 0, | 397 | pkey = load_pubkey(bio_err, keyfile, keyform, 0, |
| 437 | NULL, e, "Public Key"); | 398 | NULL, e, "Public Key"); |
| 438 | break; | 399 | break; |
| 439 | 400 | ||
| 440 | case KEY_CERT: | 401 | case KEY_CERT: |
| 441 | x = load_cert(bio_err, keyfile, keyform, | 402 | x = load_cert(bio_err, keyfile, keyform, |
| 442 | NULL, e, "Certificate"); | 403 | NULL, e, "Certificate"); |
| 443 | if(x) | 404 | if (x) { |
| 444 | { | ||
| 445 | pkey = X509_get_pubkey(x); | 405 | pkey = X509_get_pubkey(x); |
| 446 | X509_free(x); | 406 | X509_free(x); |
| 447 | } | 407 | } |
| 448 | break; | 408 | break; |
| 449 | 409 | ||
| 450 | } | 410 | } |
| 451 | 411 | ||
| 452 | *pkeysize = EVP_PKEY_size(pkey); | 412 | *pkeysize = EVP_PKEY_size(pkey); |
| 453 | 413 | ||
| @@ -461,40 +421,37 @@ static EVP_PKEY_CTX *init_ctx(int *pkeysize, | |||
| 461 | if (!ctx) | 421 | if (!ctx) |
| 462 | goto end; | 422 | goto end; |
| 463 | 423 | ||
| 464 | switch(pkey_op) | 424 | switch (pkey_op) { |
| 465 | { | 425 | case EVP_PKEY_OP_SIGN: |
| 466 | case EVP_PKEY_OP_SIGN: | ||
| 467 | rv = EVP_PKEY_sign_init(ctx); | 426 | rv = EVP_PKEY_sign_init(ctx); |
| 468 | break; | 427 | break; |
| 469 | 428 | ||
| 470 | case EVP_PKEY_OP_VERIFY: | 429 | case EVP_PKEY_OP_VERIFY: |
| 471 | rv = EVP_PKEY_verify_init(ctx); | 430 | rv = EVP_PKEY_verify_init(ctx); |
| 472 | break; | 431 | break; |
| 473 | 432 | ||
| 474 | case EVP_PKEY_OP_VERIFYRECOVER: | 433 | case EVP_PKEY_OP_VERIFYRECOVER: |
| 475 | rv = EVP_PKEY_verify_recover_init(ctx); | 434 | rv = EVP_PKEY_verify_recover_init(ctx); |
| 476 | break; | 435 | break; |
| 477 | 436 | ||
| 478 | case EVP_PKEY_OP_ENCRYPT: | 437 | case EVP_PKEY_OP_ENCRYPT: |
| 479 | rv = EVP_PKEY_encrypt_init(ctx); | 438 | rv = EVP_PKEY_encrypt_init(ctx); |
| 480 | break; | 439 | break; |
| 481 | 440 | ||
| 482 | case EVP_PKEY_OP_DECRYPT: | 441 | case EVP_PKEY_OP_DECRYPT: |
| 483 | rv = EVP_PKEY_decrypt_init(ctx); | 442 | rv = EVP_PKEY_decrypt_init(ctx); |
| 484 | break; | 443 | break; |
| 485 | 444 | ||
| 486 | case EVP_PKEY_OP_DERIVE: | 445 | case EVP_PKEY_OP_DERIVE: |
| 487 | rv = EVP_PKEY_derive_init(ctx); | 446 | rv = EVP_PKEY_derive_init(ctx); |
| 488 | break; | 447 | break; |
| 489 | } | 448 | } |
| 490 | 449 | ||
| 491 | if (rv <= 0) | 450 | if (rv <= 0) { |
| 492 | { | ||
| 493 | EVP_PKEY_CTX_free(ctx); | 451 | EVP_PKEY_CTX_free(ctx); |
| 494 | ctx = NULL; | 452 | ctx = NULL; |
| 495 | } | 453 | } |
| 496 | 454 | end: | |
| 497 | end: | ||
| 498 | 455 | ||
| 499 | if (passin) | 456 | if (passin) |
| 500 | free(passin); | 457 | free(passin); |
| @@ -502,63 +459,60 @@ static EVP_PKEY_CTX *init_ctx(int *pkeysize, | |||
| 502 | return ctx; | 459 | return ctx; |
| 503 | 460 | ||
| 504 | 461 | ||
| 505 | } | 462 | } |
| 506 | 463 | ||
| 507 | static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform, | 464 | static int |
| 508 | const char *file) | 465 | setup_peer(BIO * err, EVP_PKEY_CTX * ctx, int peerform, |
| 509 | { | 466 | const char *file) |
| 467 | { | ||
| 510 | EVP_PKEY *peer = NULL; | 468 | EVP_PKEY *peer = NULL; |
| 511 | int ret; | 469 | int ret; |
| 512 | if (!ctx) | 470 | if (!ctx) { |
| 513 | { | ||
| 514 | BIO_puts(err, "-peerkey command before -inkey\n"); | 471 | BIO_puts(err, "-peerkey command before -inkey\n"); |
| 515 | return 0; | 472 | return 0; |
| 516 | } | 473 | } |
| 517 | |||
| 518 | peer = load_pubkey(bio_err, file, peerform, 0, NULL, NULL, "Peer Key"); | 474 | peer = load_pubkey(bio_err, file, peerform, 0, NULL, NULL, "Peer Key"); |
| 519 | 475 | ||
| 520 | if (!peer) | 476 | if (!peer) { |
| 521 | { | ||
| 522 | BIO_printf(bio_err, "Error reading peer key %s\n", file); | 477 | BIO_printf(bio_err, "Error reading peer key %s\n", file); |
| 523 | ERR_print_errors(err); | 478 | ERR_print_errors(err); |
| 524 | return 0; | 479 | return 0; |
| 525 | } | 480 | } |
| 526 | |||
| 527 | ret = EVP_PKEY_derive_set_peer(ctx, peer); | 481 | ret = EVP_PKEY_derive_set_peer(ctx, peer); |
| 528 | 482 | ||
| 529 | EVP_PKEY_free(peer); | 483 | EVP_PKEY_free(peer); |
| 530 | if (ret <= 0) | 484 | if (ret <= 0) |
| 531 | ERR_print_errors(err); | 485 | ERR_print_errors(err); |
| 532 | return ret; | 486 | return ret; |
| 533 | } | 487 | } |
| 534 | 488 | ||
| 535 | static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op, | 489 | static int |
| 536 | unsigned char *out, size_t *poutlen, | 490 | do_keyop(EVP_PKEY_CTX * ctx, int pkey_op, |
| 537 | unsigned char *in, size_t inlen) | 491 | unsigned char *out, size_t * poutlen, |
| 538 | { | 492 | unsigned char *in, size_t inlen) |
| 493 | { | ||
| 539 | int rv = 0; | 494 | int rv = 0; |
| 540 | switch(pkey_op) | 495 | switch (pkey_op) { |
| 541 | { | 496 | case EVP_PKEY_OP_VERIFYRECOVER: |
| 542 | case EVP_PKEY_OP_VERIFYRECOVER: | 497 | rv = EVP_PKEY_verify_recover(ctx, out, poutlen, in, inlen); |
| 543 | rv = EVP_PKEY_verify_recover(ctx, out, poutlen, in, inlen); | ||
| 544 | break; | 498 | break; |
| 545 | 499 | ||
| 546 | case EVP_PKEY_OP_SIGN: | 500 | case EVP_PKEY_OP_SIGN: |
| 547 | rv = EVP_PKEY_sign(ctx, out, poutlen, in, inlen); | 501 | rv = EVP_PKEY_sign(ctx, out, poutlen, in, inlen); |
| 548 | break; | 502 | break; |
| 549 | 503 | ||
| 550 | case EVP_PKEY_OP_ENCRYPT: | 504 | case EVP_PKEY_OP_ENCRYPT: |
| 551 | rv = EVP_PKEY_encrypt(ctx, out, poutlen, in, inlen); | 505 | rv = EVP_PKEY_encrypt(ctx, out, poutlen, in, inlen); |
| 552 | break; | 506 | break; |
| 553 | 507 | ||
| 554 | case EVP_PKEY_OP_DECRYPT: | 508 | case EVP_PKEY_OP_DECRYPT: |
| 555 | rv = EVP_PKEY_decrypt(ctx, out, poutlen, in, inlen); | 509 | rv = EVP_PKEY_decrypt(ctx, out, poutlen, in, inlen); |
| 556 | break; | 510 | break; |
| 557 | 511 | ||
| 558 | case EVP_PKEY_OP_DERIVE: | 512 | case EVP_PKEY_OP_DERIVE: |
| 559 | rv = EVP_PKEY_derive(ctx, out, poutlen); | 513 | rv = EVP_PKEY_derive(ctx, out, poutlen); |
| 560 | break; | 514 | break; |
| 561 | 515 | ||
| 562 | } | ||
| 563 | return rv; | ||
| 564 | } | 516 | } |
| 517 | return rv; | ||
| 518 | } | ||
diff --git a/src/lib/libssl/src/apps/prime.c b/src/lib/libssl/src/apps/prime.c index 690f03ef32..4bd53a69bf 100644 --- a/src/lib/libssl/src/apps/prime.c +++ b/src/lib/libssl/src/apps/prime.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | * are met: | 6 | * are met: |
| 7 | * | 7 | * |
| 8 | * 1. Redistributions of source code must retain the above copyright | 8 | * 1. Redistributions of source code must retain the above copyright |
| 9 | * notice, this list of conditions and the following disclaimer. | 9 | * notice, this list of conditions and the following disclaimer. |
| 10 | * | 10 | * |
| 11 | * 2. Redistributions in binary form must reproduce the above copyright | 11 | * 2. Redistributions in binary form must reproduce the above copyright |
| 12 | * notice, this list of conditions and the following disclaimer in | 12 | * notice, this list of conditions and the following disclaimer in |
| @@ -58,97 +58,88 @@ | |||
| 58 | 58 | ||
| 59 | int MAIN(int, char **); | 59 | int MAIN(int, char **); |
| 60 | 60 | ||
| 61 | int MAIN(int argc, char **argv) | 61 | int |
| 62 | { | 62 | MAIN(int argc, char **argv) |
| 63 | int hex=0; | 63 | { |
| 64 | int checks=20; | 64 | int hex = 0; |
| 65 | int generate=0; | 65 | int checks = 20; |
| 66 | int bits=0; | 66 | int generate = 0; |
| 67 | int safe=0; | 67 | int bits = 0; |
| 68 | BIGNUM *bn=NULL; | 68 | int safe = 0; |
| 69 | BIO *bio_out; | 69 | BIGNUM *bn = NULL; |
| 70 | BIO *bio_out; | ||
| 70 | 71 | ||
| 71 | apps_startup(); | 72 | apps_startup(); |
| 72 | 73 | ||
| 73 | if (bio_err == NULL) | 74 | if (bio_err == NULL) |
| 74 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) | 75 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 75 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); | 76 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 76 | 77 | ||
| 77 | --argc; | ||
| 78 | ++argv; | ||
| 79 | while (argc >= 1 && **argv == '-') | ||
| 80 | { | ||
| 81 | if(!strcmp(*argv,"-hex")) | ||
| 82 | hex=1; | ||
| 83 | else if(!strcmp(*argv,"-generate")) | ||
| 84 | generate=1; | ||
| 85 | else if(!strcmp(*argv,"-bits")) | ||
| 86 | if(--argc < 1) | ||
| 87 | goto bad; | ||
| 88 | else | ||
| 89 | bits=atoi(*++argv); | ||
| 90 | else if(!strcmp(*argv,"-safe")) | ||
| 91 | safe=1; | ||
| 92 | else if(!strcmp(*argv,"-checks")) | ||
| 93 | if(--argc < 1) | ||
| 94 | goto bad; | ||
| 95 | else | ||
| 96 | checks=atoi(*++argv); | ||
| 97 | else | ||
| 98 | { | ||
| 99 | BIO_printf(bio_err,"Unknown option '%s'\n",*argv); | ||
| 100 | goto bad; | ||
| 101 | } | ||
| 102 | --argc; | 78 | --argc; |
| 103 | ++argv; | 79 | ++argv; |
| 80 | while (argc >= 1 && **argv == '-') { | ||
| 81 | if (!strcmp(*argv, "-hex")) | ||
| 82 | hex = 1; | ||
| 83 | else if (!strcmp(*argv, "-generate")) | ||
| 84 | generate = 1; | ||
| 85 | else if (!strcmp(*argv, "-bits")) | ||
| 86 | if (--argc < 1) | ||
| 87 | goto bad; | ||
| 88 | else | ||
| 89 | bits = atoi(*++argv); | ||
| 90 | else if (!strcmp(*argv, "-safe")) | ||
| 91 | safe = 1; | ||
| 92 | else if (!strcmp(*argv, "-checks")) | ||
| 93 | if (--argc < 1) | ||
| 94 | goto bad; | ||
| 95 | else | ||
| 96 | checks = atoi(*++argv); | ||
| 97 | else { | ||
| 98 | BIO_printf(bio_err, "Unknown option '%s'\n", *argv); | ||
| 99 | goto bad; | ||
| 100 | } | ||
| 101 | --argc; | ||
| 102 | ++argv; | ||
| 104 | } | 103 | } |
| 105 | 104 | ||
| 106 | if (argv[0] == NULL && !generate) | 105 | if (argv[0] == NULL && !generate) { |
| 107 | { | 106 | BIO_printf(bio_err, "No prime specified\n"); |
| 108 | BIO_printf(bio_err,"No prime specified\n"); | 107 | goto bad; |
| 109 | goto bad; | ||
| 110 | } | ||
| 111 | |||
| 112 | if ((bio_out=BIO_new(BIO_s_file())) != NULL) | ||
| 113 | { | ||
| 114 | BIO_set_fp(bio_out,stdout,BIO_NOCLOSE); | ||
| 115 | } | 108 | } |
| 116 | 109 | if ((bio_out = BIO_new(BIO_s_file())) != NULL) { | |
| 117 | if(generate) | 110 | BIO_set_fp(bio_out, stdout, BIO_NOCLOSE); |
| 118 | { | ||
| 119 | char *s; | ||
| 120 | |||
| 121 | if(!bits) | ||
| 122 | { | ||
| 123 | BIO_printf(bio_err,"Specifiy the number of bits.\n"); | ||
| 124 | return 1; | ||
| 125 | } | ||
| 126 | bn=BN_new(); | ||
| 127 | BN_generate_prime_ex(bn,bits,safe,NULL,NULL,NULL); | ||
| 128 | s=hex ? BN_bn2hex(bn) : BN_bn2dec(bn); | ||
| 129 | BIO_printf(bio_out,"%s\n",s); | ||
| 130 | free(s); | ||
| 131 | } | 111 | } |
| 132 | else | 112 | if (generate) { |
| 133 | { | 113 | char *s; |
| 134 | if(hex) | 114 | |
| 135 | BN_hex2bn(&bn,argv[0]); | 115 | if (!bits) { |
| 136 | else | 116 | BIO_printf(bio_err, "Specifiy the number of bits.\n"); |
| 137 | BN_dec2bn(&bn,argv[0]); | 117 | return 1; |
| 138 | 118 | } | |
| 139 | BN_print(bio_out,bn); | 119 | bn = BN_new(); |
| 140 | BIO_printf(bio_out," is %sprime\n", | 120 | BN_generate_prime_ex(bn, bits, safe, NULL, NULL, NULL); |
| 141 | BN_is_prime_ex(bn,checks,NULL,NULL) ? "" : "not "); | 121 | s = hex ? BN_bn2hex(bn) : BN_bn2dec(bn); |
| 122 | BIO_printf(bio_out, "%s\n", s); | ||
| 123 | free(s); | ||
| 124 | } else { | ||
| 125 | if (hex) | ||
| 126 | BN_hex2bn(&bn, argv[0]); | ||
| 127 | else | ||
| 128 | BN_dec2bn(&bn, argv[0]); | ||
| 129 | |||
| 130 | BN_print(bio_out, bn); | ||
| 131 | BIO_printf(bio_out, " is %sprime\n", | ||
| 132 | BN_is_prime_ex(bn, checks, NULL, NULL) ? "" : "not "); | ||
| 142 | } | 133 | } |
| 143 | 134 | ||
| 144 | BN_free(bn); | 135 | BN_free(bn); |
| 145 | BIO_free_all(bio_out); | 136 | BIO_free_all(bio_out); |
| 146 | 137 | ||
| 147 | return 0; | 138 | return 0; |
| 148 | 139 | ||
| 149 | bad: | 140 | bad: |
| 150 | BIO_printf(bio_err,"options are\n"); | 141 | BIO_printf(bio_err, "options are\n"); |
| 151 | BIO_printf(bio_err,"%-14s hex\n","-hex"); | 142 | BIO_printf(bio_err, "%-14s hex\n", "-hex"); |
| 152 | BIO_printf(bio_err,"%-14s number of checks\n","-checks <n>"); | 143 | BIO_printf(bio_err, "%-14s number of checks\n", "-checks <n>"); |
| 153 | return 1; | 144 | return 1; |
| 154 | } | 145 | } |
diff --git a/src/lib/libssl/src/apps/rand.c b/src/lib/libssl/src/apps/rand.c index c01df530ae..443a64d848 100644 --- a/src/lib/libssl/src/apps/rand.c +++ b/src/lib/libssl/src/apps/rand.c | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * are met: | 7 | * are met: |
| 8 | * | 8 | * |
| 9 | * 1. Redistributions of source code must retain the above copyright | 9 | * 1. Redistributions of source code must retain the above copyright |
| 10 | * notice, this list of conditions and the following disclaimer. | 10 | * notice, this list of conditions and the following disclaimer. |
| 11 | * | 11 | * |
| 12 | * 2. Redistributions in binary form must reproduce the above copyright | 12 | * 2. Redistributions in binary form must reproduce the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer in | 13 | * notice, this list of conditions and the following disclaimer in |
| @@ -75,8 +75,9 @@ | |||
| 75 | 75 | ||
| 76 | int MAIN(int, char **); | 76 | int MAIN(int, char **); |
| 77 | 77 | ||
| 78 | int MAIN(int argc, char **argv) | 78 | int |
| 79 | { | 79 | MAIN(int argc, char **argv) |
| 80 | { | ||
| 80 | int i, r, ret = 1; | 81 | int i, r, ret = 1; |
| 81 | int badopt; | 82 | int badopt; |
| 82 | char *outfile = NULL; | 83 | char *outfile = NULL; |
| @@ -86,82 +87,68 @@ int MAIN(int argc, char **argv) | |||
| 86 | BIO *out = NULL; | 87 | BIO *out = NULL; |
| 87 | int num = -1; | 88 | int num = -1; |
| 88 | #ifndef OPENSSL_NO_ENGINE | 89 | #ifndef OPENSSL_NO_ENGINE |
| 89 | char *engine=NULL; | 90 | char *engine = NULL; |
| 90 | #endif | 91 | #endif |
| 91 | 92 | ||
| 92 | apps_startup(); | 93 | apps_startup(); |
| 93 | 94 | ||
| 94 | if (bio_err == NULL) | 95 | if (bio_err == NULL) |
| 95 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 96 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 96 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 97 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 97 | 98 | ||
| 98 | if (!load_config(bio_err, NULL)) | 99 | if (!load_config(bio_err, NULL)) |
| 99 | goto err; | 100 | goto err; |
| 100 | 101 | ||
| 101 | badopt = 0; | 102 | badopt = 0; |
| 102 | i = 0; | 103 | i = 0; |
| 103 | while (!badopt && argv[++i] != NULL) | 104 | while (!badopt && argv[++i] != NULL) { |
| 104 | { | 105 | if (strcmp(argv[i], "-out") == 0) { |
| 105 | if (strcmp(argv[i], "-out") == 0) | 106 | if ((argv[i + 1] != NULL) && (outfile == NULL)) |
| 106 | { | ||
| 107 | if ((argv[i+1] != NULL) && (outfile == NULL)) | ||
| 108 | outfile = argv[++i]; | 107 | outfile = argv[++i]; |
| 109 | else | 108 | else |
| 110 | badopt = 1; | 109 | badopt = 1; |
| 111 | } | 110 | } |
| 112 | #ifndef OPENSSL_NO_ENGINE | 111 | #ifndef OPENSSL_NO_ENGINE |
| 113 | else if (strcmp(argv[i], "-engine") == 0) | 112 | else if (strcmp(argv[i], "-engine") == 0) { |
| 114 | { | 113 | if ((argv[i + 1] != NULL) && (engine == NULL)) |
| 115 | if ((argv[i+1] != NULL) && (engine == NULL)) | ||
| 116 | engine = argv[++i]; | 114 | engine = argv[++i]; |
| 117 | else | 115 | else |
| 118 | badopt = 1; | 116 | badopt = 1; |
| 119 | } | 117 | } |
| 120 | #endif | 118 | #endif |
| 121 | else if (strcmp(argv[i], "-rand") == 0) | 119 | else if (strcmp(argv[i], "-rand") == 0) { |
| 122 | { | 120 | if ((argv[i + 1] != NULL) && (inrand == NULL)) |
| 123 | if ((argv[i+1] != NULL) && (inrand == NULL)) | ||
| 124 | inrand = argv[++i]; | 121 | inrand = argv[++i]; |
| 125 | else | 122 | else |
| 126 | badopt = 1; | 123 | badopt = 1; |
| 127 | } | 124 | } else if (strcmp(argv[i], "-base64") == 0) { |
| 128 | else if (strcmp(argv[i], "-base64") == 0) | ||
| 129 | { | ||
| 130 | if (!base64) | 125 | if (!base64) |
| 131 | base64 = 1; | 126 | base64 = 1; |
| 132 | else | 127 | else |
| 133 | badopt = 1; | 128 | badopt = 1; |
| 134 | } | 129 | } else if (strcmp(argv[i], "-hex") == 0) { |
| 135 | else if (strcmp(argv[i], "-hex") == 0) | ||
| 136 | { | ||
| 137 | if (!hex) | 130 | if (!hex) |
| 138 | hex = 1; | 131 | hex = 1; |
| 139 | else | 132 | else |
| 140 | badopt = 1; | 133 | badopt = 1; |
| 141 | } | 134 | } else if (isdigit((unsigned char) argv[i][0])) { |
| 142 | else if (isdigit((unsigned char)argv[i][0])) | 135 | if (num < 0) { |
| 143 | { | ||
| 144 | if (num < 0) | ||
| 145 | { | ||
| 146 | r = sscanf(argv[i], "%d", &num); | 136 | r = sscanf(argv[i], "%d", &num); |
| 147 | if (r == 0 || num < 0) | 137 | if (r == 0 || num < 0) |
| 148 | badopt = 1; | 138 | badopt = 1; |
| 149 | } | 139 | } else |
| 150 | else | ||
| 151 | badopt = 1; | 140 | badopt = 1; |
| 152 | } | 141 | } else |
| 153 | else | ||
| 154 | badopt = 1; | 142 | badopt = 1; |
| 155 | } | 143 | } |
| 156 | 144 | ||
| 157 | if (hex && base64) | 145 | if (hex && base64) |
| 158 | badopt = 1; | 146 | badopt = 1; |
| 159 | 147 | ||
| 160 | if (num < 0) | 148 | if (num < 0) |
| 161 | badopt = 1; | 149 | badopt = 1; |
| 162 | 150 | ||
| 163 | if (badopt) | 151 | if (badopt) { |
| 164 | { | ||
| 165 | BIO_printf(bio_err, "Usage: rand [options] num\n"); | 152 | BIO_printf(bio_err, "Usage: rand [options] num\n"); |
| 166 | BIO_printf(bio_err, "where options are\n"); | 153 | BIO_printf(bio_err, "where options are\n"); |
| 167 | BIO_printf(bio_err, "-out file - write to file\n"); | 154 | BIO_printf(bio_err, "-out file - write to file\n"); |
| @@ -172,68 +159,62 @@ int MAIN(int argc, char **argv) | |||
| 172 | BIO_printf(bio_err, "-base64 - base64 encode output\n"); | 159 | BIO_printf(bio_err, "-base64 - base64 encode output\n"); |
| 173 | BIO_printf(bio_err, "-hex - hex encode output\n"); | 160 | BIO_printf(bio_err, "-hex - hex encode output\n"); |
| 174 | goto err; | 161 | goto err; |
| 175 | } | 162 | } |
| 176 | |||
| 177 | #ifndef OPENSSL_NO_ENGINE | 163 | #ifndef OPENSSL_NO_ENGINE |
| 178 | setup_engine(bio_err, engine, 0); | 164 | setup_engine(bio_err, engine, 0); |
| 179 | #endif | 165 | #endif |
| 180 | 166 | ||
| 181 | app_RAND_load_file(NULL, bio_err, (inrand != NULL)); | 167 | app_RAND_load_file(NULL, bio_err, (inrand != NULL)); |
| 182 | if (inrand != NULL) | 168 | if (inrand != NULL) |
| 183 | BIO_printf(bio_err,"%ld semi-random bytes loaded\n", | 169 | BIO_printf(bio_err, "%ld semi-random bytes loaded\n", |
| 184 | app_RAND_load_files(inrand)); | 170 | app_RAND_load_files(inrand)); |
| 185 | 171 | ||
| 186 | out = BIO_new(BIO_s_file()); | 172 | out = BIO_new(BIO_s_file()); |
| 187 | if (out == NULL) | 173 | if (out == NULL) |
| 188 | goto err; | 174 | goto err; |
| 189 | if (outfile != NULL) | 175 | if (outfile != NULL) |
| 190 | r = BIO_write_filename(out, outfile); | 176 | r = BIO_write_filename(out, outfile); |
| 191 | else | 177 | else { |
| 192 | { | ||
| 193 | r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); | 178 | r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); |
| 194 | } | 179 | } |
| 195 | if (r <= 0) | 180 | if (r <= 0) |
| 196 | goto err; | 181 | goto err; |
| 197 | 182 | ||
| 198 | if (base64) | 183 | if (base64) { |
| 199 | { | ||
| 200 | BIO *b64 = BIO_new(BIO_f_base64()); | 184 | BIO *b64 = BIO_new(BIO_f_base64()); |
| 201 | if (b64 == NULL) | 185 | if (b64 == NULL) |
| 202 | goto err; | 186 | goto err; |
| 203 | out = BIO_push(b64, out); | 187 | out = BIO_push(b64, out); |
| 204 | } | 188 | } |
| 205 | 189 | while (num > 0) { | |
| 206 | while (num > 0) | ||
| 207 | { | ||
| 208 | unsigned char buf[4096]; | 190 | unsigned char buf[4096]; |
| 209 | int chunk; | 191 | int chunk; |
| 210 | 192 | ||
| 211 | chunk = num; | 193 | chunk = num; |
| 212 | if (chunk > (int)sizeof(buf)) | 194 | if (chunk > (int) sizeof(buf)) |
| 213 | chunk = sizeof buf; | 195 | chunk = sizeof buf; |
| 214 | r = RAND_bytes(buf, chunk); | 196 | r = RAND_bytes(buf, chunk); |
| 215 | if (r <= 0) | 197 | if (r <= 0) |
| 216 | goto err; | 198 | goto err; |
| 217 | if (!hex) | 199 | if (!hex) |
| 218 | BIO_write(out, buf, chunk); | 200 | BIO_write(out, buf, chunk); |
| 219 | else | 201 | else { |
| 220 | { | ||
| 221 | for (i = 0; i < chunk; i++) | 202 | for (i = 0; i < chunk; i++) |
| 222 | BIO_printf(out, "%02x", buf[i]); | 203 | BIO_printf(out, "%02x", buf[i]); |
| 223 | } | ||
| 224 | num -= chunk; | ||
| 225 | } | 204 | } |
| 205 | num -= chunk; | ||
| 206 | } | ||
| 226 | if (hex) | 207 | if (hex) |
| 227 | BIO_puts(out, "\n"); | 208 | BIO_puts(out, "\n"); |
| 228 | (void)BIO_flush(out); | 209 | (void) BIO_flush(out); |
| 229 | 210 | ||
| 230 | app_RAND_write_file(NULL, bio_err); | 211 | app_RAND_write_file(NULL, bio_err); |
| 231 | ret = 0; | 212 | ret = 0; |
| 232 | 213 | ||
| 233 | err: | 214 | err: |
| 234 | ERR_print_errors(bio_err); | 215 | ERR_print_errors(bio_err); |
| 235 | if (out) | 216 | if (out) |
| 236 | BIO_free_all(out); | 217 | BIO_free_all(out); |
| 237 | apps_shutdown(); | 218 | apps_shutdown(); |
| 238 | return(ret); | 219 | return (ret); |
| 239 | } | 220 | } |
diff --git a/src/lib/libssl/src/apps/req.c b/src/lib/libssl/src/apps/req.c index d28a1f3258..923837c4f9 100644 --- a/src/lib/libssl/src/apps/req.c +++ b/src/lib/libssl/src/apps/req.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written |
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). |
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. |
| 8 | * | 8 | * |
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as |
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions |
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, |
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation |
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms |
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). |
| 15 | * | 15 | * |
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in |
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. |
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution |
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. |
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or |
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. |
| 22 | * | 22 | * |
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without |
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions |
| 25 | * are met: | 25 | * are met: |
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" |
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library |
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). |
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from |
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: |
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" |
| 40 | * | 40 | * |
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. |
| 52 | * | 52 | * |
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or |
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be |
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence |
| @@ -125,706 +125,617 @@ | |||
| 125 | * require. This format is wrong | 125 | * require. This format is wrong |
| 126 | */ | 126 | */ |
| 127 | 127 | ||
| 128 | static int make_REQ(X509_REQ *req,EVP_PKEY *pkey,char *dn,int mutlirdn, | 128 | static int |
| 129 | int attribs,unsigned long chtype); | 129 | make_REQ(X509_REQ * req, EVP_PKEY * pkey, char *dn, int mutlirdn, |
| 130 | static int build_subject(X509_REQ *req, char *subj, unsigned long chtype, | 130 | int attribs, unsigned long chtype); |
| 131 | int multirdn); | 131 | static int |
| 132 | static int prompt_info(X509_REQ *req, | 132 | build_subject(X509_REQ * req, char *subj, unsigned long chtype, |
| 133 | STACK_OF(CONF_VALUE) *dn_sk, char *dn_sect, | 133 | int multirdn); |
| 134 | STACK_OF(CONF_VALUE) *attr_sk, char *attr_sect, int attribs, | 134 | static int |
| 135 | unsigned long chtype); | 135 | prompt_info(X509_REQ * req, |
| 136 | static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *sk, | 136 | STACK_OF(CONF_VALUE) * dn_sk, char *dn_sect, |
| 137 | STACK_OF(CONF_VALUE) *attr, int attribs, | 137 | STACK_OF(CONF_VALUE) * attr_sk, char *attr_sect, int attribs, |
| 138 | unsigned long chtype); | 138 | unsigned long chtype); |
| 139 | static int add_attribute_object(X509_REQ *req, char *text, const char *def, | 139 | static int auto_info(X509_REQ * req, STACK_OF(CONF_VALUE) * sk, |
| 140 | char *value, int nid, int n_min, | 140 | STACK_OF(CONF_VALUE) * attr, int attribs, |
| 141 | int n_max, unsigned long chtype); | 141 | unsigned long chtype); |
| 142 | static int add_DN_object(X509_NAME *n, char *text, const char *def, char *value, | 142 | static int add_attribute_object(X509_REQ * req, char *text, const char *def, |
| 143 | int nid,int n_min,int n_max, unsigned long chtype, int mval); | 143 | char *value, int nid, int n_min, |
| 144 | static int genpkey_cb(EVP_PKEY_CTX *ctx); | 144 | int n_max, unsigned long chtype); |
| 145 | static int req_check_len(int len,int n_min,int n_max); | 145 | static int add_DN_object(X509_NAME * n, char *text, const char *def, char *value, |
| 146 | static int check_end(const char *str, const char *end); | 146 | int nid, int n_min, int n_max, unsigned long chtype, int mval); |
| 147 | static EVP_PKEY_CTX *set_keygen_ctx(BIO *err, const char *gstr, int *pkey_type, | 147 | static int genpkey_cb(EVP_PKEY_CTX * ctx); |
| 148 | long *pkeylen, char **palgnam, | 148 | static int req_check_len(int len, int n_min, int n_max); |
| 149 | ENGINE *keygen_engine); | 149 | static int check_end(const char *str, const char *end); |
| 150 | static CONF *req_conf=NULL; | 150 | static EVP_PKEY_CTX *set_keygen_ctx(BIO * err, const char *gstr, int *pkey_type, |
| 151 | static int batch=0; | 151 | long *pkeylen, char **palgnam, |
| 152 | 152 | ENGINE * keygen_engine); | |
| 153 | int MAIN(int, char **); | 153 | static CONF *req_conf = NULL; |
| 154 | 154 | static int batch = 0; | |
| 155 | int MAIN(int argc, char **argv) | 155 | |
| 156 | { | 156 | int MAIN(int, char **); |
| 157 | |||
| 158 | int MAIN(int argc, char **argv) | ||
| 159 | { | ||
| 157 | ENGINE *e = NULL, *gen_eng = NULL; | 160 | ENGINE *e = NULL, *gen_eng = NULL; |
| 158 | unsigned long nmflag = 0, reqflag = 0; | 161 | unsigned long nmflag = 0, reqflag = 0; |
| 159 | int ex=1,x509=0,days=30; | 162 | int ex = 1, x509 = 0, days = 30; |
| 160 | X509 *x509ss=NULL; | 163 | X509 *x509ss = NULL; |
| 161 | X509_REQ *req=NULL; | 164 | X509_REQ *req = NULL; |
| 162 | EVP_PKEY_CTX *genctx = NULL; | 165 | EVP_PKEY_CTX *genctx = NULL; |
| 163 | const char *keyalg = NULL; | 166 | const char *keyalg = NULL; |
| 164 | char *keyalgstr = NULL; | 167 | char *keyalgstr = NULL; |
| 165 | STACK_OF(OPENSSL_STRING) *pkeyopts = NULL, *sigopts = NULL; | 168 | STACK_OF(OPENSSL_STRING) * pkeyopts = NULL, *sigopts = NULL; |
| 166 | EVP_PKEY *pkey=NULL; | 169 | EVP_PKEY *pkey = NULL; |
| 167 | int i=0,badops=0,newreq=0,verbose=0,pkey_type=-1; | 170 | int i = 0, badops = 0, newreq = 0, verbose = 0, pkey_type = -1; |
| 168 | long newkey = -1; | 171 | long newkey = -1; |
| 169 | BIO *in=NULL,*out=NULL; | 172 | BIO *in = NULL, *out = NULL; |
| 170 | int informat,outformat,verify=0,noout=0,text=0,keyform=FORMAT_PEM; | 173 | int informat, outformat, verify = 0, noout = 0, text = 0, keyform = FORMAT_PEM; |
| 171 | int nodes=0,kludge=0,newhdr=0,subject=0,pubkey=0; | 174 | int nodes = 0, kludge = 0, newhdr = 0, subject = 0, pubkey = 0; |
| 172 | char *infile,*outfile,*prog,*keyfile=NULL,*template=NULL,*keyout=NULL; | 175 | char *infile, *outfile, *prog, *keyfile = NULL, *template = NULL, |
| 176 | *keyout = NULL; | ||
| 173 | #ifndef OPENSSL_NO_ENGINE | 177 | #ifndef OPENSSL_NO_ENGINE |
| 174 | char *engine=NULL; | 178 | char *engine = NULL; |
| 175 | #endif | 179 | #endif |
| 176 | char *extensions = NULL; | 180 | char *extensions = NULL; |
| 177 | char *req_exts = NULL; | 181 | char *req_exts = NULL; |
| 178 | const EVP_CIPHER *cipher=NULL; | 182 | const EVP_CIPHER *cipher = NULL; |
| 179 | ASN1_INTEGER *serial = NULL; | 183 | ASN1_INTEGER *serial = NULL; |
| 180 | int modulus=0; | 184 | int modulus = 0; |
| 181 | char *inrand=NULL; | 185 | char *inrand = NULL; |
| 182 | char *passargin = NULL, *passargout = NULL; | 186 | char *passargin = NULL, *passargout = NULL; |
| 183 | char *passin = NULL, *passout = NULL; | 187 | char *passin = NULL, *passout = NULL; |
| 184 | char *p; | 188 | char *p; |
| 185 | char *subj = NULL; | 189 | char *subj = NULL; |
| 186 | int multirdn = 0; | 190 | int multirdn = 0; |
| 187 | const EVP_MD *md_alg=NULL,*digest=NULL; | 191 | const EVP_MD *md_alg = NULL, *digest = NULL; |
| 188 | unsigned long chtype = MBSTRING_ASC; | 192 | unsigned long chtype = MBSTRING_ASC; |
| 189 | 193 | ||
| 190 | req_conf = NULL; | 194 | req_conf = NULL; |
| 191 | #ifndef OPENSSL_NO_DES | 195 | #ifndef OPENSSL_NO_DES |
| 192 | cipher=EVP_des_ede3_cbc(); | 196 | cipher = EVP_des_ede3_cbc(); |
| 193 | #endif | 197 | #endif |
| 194 | apps_startup(); | 198 | apps_startup(); |
| 195 | 199 | ||
| 196 | if (bio_err == NULL) | 200 | if (bio_err == NULL) |
| 197 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) | 201 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 198 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); | 202 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 199 | 203 | ||
| 200 | infile=NULL; | 204 | infile = NULL; |
| 201 | outfile=NULL; | 205 | outfile = NULL; |
| 202 | informat=FORMAT_PEM; | 206 | informat = FORMAT_PEM; |
| 203 | outformat=FORMAT_PEM; | 207 | outformat = FORMAT_PEM; |
| 204 | 208 | ||
| 205 | prog=argv[0]; | 209 | prog = argv[0]; |
| 206 | argc--; | 210 | argc--; |
| 207 | argv++; | 211 | argv++; |
| 208 | while (argc >= 1) | 212 | while (argc >= 1) { |
| 209 | { | 213 | if (strcmp(*argv, "-inform") == 0) { |
| 210 | if (strcmp(*argv,"-inform") == 0) | 214 | if (--argc < 1) |
| 211 | { | 215 | goto bad; |
| 212 | if (--argc < 1) goto bad; | 216 | informat = str2fmt(*(++argv)); |
| 213 | informat=str2fmt(*(++argv)); | 217 | } else if (strcmp(*argv, "-outform") == 0) { |
| 214 | } | 218 | if (--argc < 1) |
| 215 | else if (strcmp(*argv,"-outform") == 0) | 219 | goto bad; |
| 216 | { | 220 | outformat = str2fmt(*(++argv)); |
| 217 | if (--argc < 1) goto bad; | 221 | } |
| 218 | outformat=str2fmt(*(++argv)); | ||
| 219 | } | ||
| 220 | #ifndef OPENSSL_NO_ENGINE | 222 | #ifndef OPENSSL_NO_ENGINE |
| 221 | else if (strcmp(*argv,"-engine") == 0) | 223 | else if (strcmp(*argv, "-engine") == 0) { |
| 222 | { | 224 | if (--argc < 1) |
| 223 | if (--argc < 1) goto bad; | 225 | goto bad; |
| 224 | engine= *(++argv); | 226 | engine = *(++argv); |
| 225 | } | 227 | } else if (strcmp(*argv, "-keygen_engine") == 0) { |
| 226 | else if (strcmp(*argv,"-keygen_engine") == 0) | 228 | if (--argc < 1) |
| 227 | { | 229 | goto bad; |
| 228 | if (--argc < 1) goto bad; | ||
| 229 | gen_eng = ENGINE_by_id(*(++argv)); | 230 | gen_eng = ENGINE_by_id(*(++argv)); |
| 230 | if (gen_eng == NULL) | 231 | if (gen_eng == NULL) { |
| 231 | { | ||
| 232 | BIO_printf(bio_err, "Can't find keygen engine %s\n", *argv); | 232 | BIO_printf(bio_err, "Can't find keygen engine %s\n", *argv); |
| 233 | goto end; | 233 | goto end; |
| 234 | } | ||
| 235 | } | 234 | } |
| 235 | } | ||
| 236 | #endif | 236 | #endif |
| 237 | else if (strcmp(*argv,"-key") == 0) | 237 | else if (strcmp(*argv, "-key") == 0) { |
| 238 | { | 238 | if (--argc < 1) |
| 239 | if (--argc < 1) goto bad; | 239 | goto bad; |
| 240 | keyfile= *(++argv); | 240 | keyfile = *(++argv); |
| 241 | } | 241 | } else if (strcmp(*argv, "-pubkey") == 0) { |
| 242 | else if (strcmp(*argv,"-pubkey") == 0) | 242 | pubkey = 1; |
| 243 | { | 243 | } else if (strcmp(*argv, "-new") == 0) { |
| 244 | pubkey=1; | 244 | newreq = 1; |
| 245 | } | 245 | } else if (strcmp(*argv, "-config") == 0) { |
| 246 | else if (strcmp(*argv,"-new") == 0) | 246 | if (--argc < 1) |
| 247 | { | 247 | goto bad; |
| 248 | newreq=1; | 248 | template = *(++argv); |
| 249 | } | 249 | } else if (strcmp(*argv, "-keyform") == 0) { |
| 250 | else if (strcmp(*argv,"-config") == 0) | 250 | if (--argc < 1) |
| 251 | { | 251 | goto bad; |
| 252 | if (--argc < 1) goto bad; | 252 | keyform = str2fmt(*(++argv)); |
| 253 | template= *(++argv); | 253 | } else if (strcmp(*argv, "-in") == 0) { |
| 254 | } | 254 | if (--argc < 1) |
| 255 | else if (strcmp(*argv,"-keyform") == 0) | 255 | goto bad; |
| 256 | { | 256 | infile = *(++argv); |
| 257 | if (--argc < 1) goto bad; | 257 | } else if (strcmp(*argv, "-out") == 0) { |
| 258 | keyform=str2fmt(*(++argv)); | 258 | if (--argc < 1) |
| 259 | } | 259 | goto bad; |
| 260 | else if (strcmp(*argv,"-in") == 0) | 260 | outfile = *(++argv); |
| 261 | { | 261 | } else if (strcmp(*argv, "-keyout") == 0) { |
| 262 | if (--argc < 1) goto bad; | 262 | if (--argc < 1) |
| 263 | infile= *(++argv); | 263 | goto bad; |
| 264 | } | 264 | keyout = *(++argv); |
| 265 | else if (strcmp(*argv,"-out") == 0) | 265 | } else if (strcmp(*argv, "-passin") == 0) { |
| 266 | { | 266 | if (--argc < 1) |
| 267 | if (--argc < 1) goto bad; | 267 | goto bad; |
| 268 | outfile= *(++argv); | 268 | passargin = *(++argv); |
| 269 | } | 269 | } else if (strcmp(*argv, "-passout") == 0) { |
| 270 | else if (strcmp(*argv,"-keyout") == 0) | 270 | if (--argc < 1) |
| 271 | { | 271 | goto bad; |
| 272 | if (--argc < 1) goto bad; | 272 | passargout = *(++argv); |
| 273 | keyout= *(++argv); | 273 | } else if (strcmp(*argv, "-rand") == 0) { |
| 274 | } | 274 | if (--argc < 1) |
| 275 | else if (strcmp(*argv,"-passin") == 0) | 275 | goto bad; |
| 276 | { | 276 | inrand = *(++argv); |
| 277 | if (--argc < 1) goto bad; | 277 | } else if (strcmp(*argv, "-newkey") == 0) { |
| 278 | passargin= *(++argv); | ||
| 279 | } | ||
| 280 | else if (strcmp(*argv,"-passout") == 0) | ||
| 281 | { | ||
| 282 | if (--argc < 1) goto bad; | ||
| 283 | passargout= *(++argv); | ||
| 284 | } | ||
| 285 | else if (strcmp(*argv,"-rand") == 0) | ||
| 286 | { | ||
| 287 | if (--argc < 1) goto bad; | ||
| 288 | inrand= *(++argv); | ||
| 289 | } | ||
| 290 | else if (strcmp(*argv,"-newkey") == 0) | ||
| 291 | { | ||
| 292 | if (--argc < 1) | 278 | if (--argc < 1) |
| 293 | goto bad; | 279 | goto bad; |
| 294 | keyalg = *(++argv); | 280 | keyalg = *(++argv); |
| 295 | newreq=1; | 281 | newreq = 1; |
| 296 | } | 282 | } else if (strcmp(*argv, "-pkeyopt") == 0) { |
| 297 | else if (strcmp(*argv,"-pkeyopt") == 0) | ||
| 298 | { | ||
| 299 | if (--argc < 1) | 283 | if (--argc < 1) |
| 300 | goto bad; | 284 | goto bad; |
| 301 | if (!pkeyopts) | 285 | if (!pkeyopts) |
| 302 | pkeyopts = sk_OPENSSL_STRING_new_null(); | 286 | pkeyopts = sk_OPENSSL_STRING_new_null(); |
| 303 | if (!pkeyopts || !sk_OPENSSL_STRING_push(pkeyopts, *(++argv))) | 287 | if (!pkeyopts || !sk_OPENSSL_STRING_push(pkeyopts, *(++argv))) |
| 304 | goto bad; | 288 | goto bad; |
| 305 | } | 289 | } else if (strcmp(*argv, "-sigopt") == 0) { |
| 306 | else if (strcmp(*argv,"-sigopt") == 0) | ||
| 307 | { | ||
| 308 | if (--argc < 1) | 290 | if (--argc < 1) |
| 309 | goto bad; | 291 | goto bad; |
| 310 | if (!sigopts) | 292 | if (!sigopts) |
| 311 | sigopts = sk_OPENSSL_STRING_new_null(); | 293 | sigopts = sk_OPENSSL_STRING_new_null(); |
| 312 | if (!sigopts || !sk_OPENSSL_STRING_push(sigopts, *(++argv))) | 294 | if (!sigopts || !sk_OPENSSL_STRING_push(sigopts, *(++argv))) |
| 313 | goto bad; | 295 | goto bad; |
| 314 | } | 296 | } else if (strcmp(*argv, "-batch") == 0) |
| 315 | else if (strcmp(*argv,"-batch") == 0) | 297 | batch = 1; |
| 316 | batch=1; | 298 | else if (strcmp(*argv, "-newhdr") == 0) |
| 317 | else if (strcmp(*argv,"-newhdr") == 0) | 299 | newhdr = 1; |
| 318 | newhdr=1; | 300 | else if (strcmp(*argv, "-modulus") == 0) |
| 319 | else if (strcmp(*argv,"-modulus") == 0) | 301 | modulus = 1; |
| 320 | modulus=1; | 302 | else if (strcmp(*argv, "-verify") == 0) |
| 321 | else if (strcmp(*argv,"-verify") == 0) | 303 | verify = 1; |
| 322 | verify=1; | 304 | else if (strcmp(*argv, "-nodes") == 0) |
| 323 | else if (strcmp(*argv,"-nodes") == 0) | 305 | nodes = 1; |
| 324 | nodes=1; | 306 | else if (strcmp(*argv, "-noout") == 0) |
| 325 | else if (strcmp(*argv,"-noout") == 0) | 307 | noout = 1; |
| 326 | noout=1; | 308 | else if (strcmp(*argv, "-verbose") == 0) |
| 327 | else if (strcmp(*argv,"-verbose") == 0) | 309 | verbose = 1; |
| 328 | verbose=1; | 310 | else if (strcmp(*argv, "-utf8") == 0) |
| 329 | else if (strcmp(*argv,"-utf8") == 0) | ||
| 330 | chtype = MBSTRING_UTF8; | 311 | chtype = MBSTRING_UTF8; |
| 331 | else if (strcmp(*argv,"-nameopt") == 0) | 312 | else if (strcmp(*argv, "-nameopt") == 0) { |
| 332 | { | 313 | if (--argc < 1) |
| 333 | if (--argc < 1) goto bad; | 314 | goto bad; |
| 334 | if (!set_name_ex(&nmflag, *(++argv))) goto bad; | 315 | if (!set_name_ex(&nmflag, *(++argv))) |
| 335 | } | 316 | goto bad; |
| 336 | else if (strcmp(*argv,"-reqopt") == 0) | 317 | } else if (strcmp(*argv, "-reqopt") == 0) { |
| 337 | { | 318 | if (--argc < 1) |
| 338 | if (--argc < 1) goto bad; | 319 | goto bad; |
| 339 | if (!set_cert_ex(&reqflag, *(++argv))) goto bad; | 320 | if (!set_cert_ex(&reqflag, *(++argv))) |
| 340 | } | 321 | goto bad; |
| 341 | else if (strcmp(*argv,"-subject") == 0) | 322 | } else if (strcmp(*argv, "-subject") == 0) |
| 342 | subject=1; | 323 | subject = 1; |
| 343 | else if (strcmp(*argv,"-text") == 0) | 324 | else if (strcmp(*argv, "-text") == 0) |
| 344 | text=1; | 325 | text = 1; |
| 345 | else if (strcmp(*argv,"-x509") == 0) | 326 | else if (strcmp(*argv, "-x509") == 0) |
| 346 | x509=1; | 327 | x509 = 1; |
| 347 | else if (strcmp(*argv,"-asn1-kludge") == 0) | 328 | else if (strcmp(*argv, "-asn1-kludge") == 0) |
| 348 | kludge=1; | 329 | kludge = 1; |
| 349 | else if (strcmp(*argv,"-no-asn1-kludge") == 0) | 330 | else if (strcmp(*argv, "-no-asn1-kludge") == 0) |
| 350 | kludge=0; | 331 | kludge = 0; |
| 351 | else if (strcmp(*argv,"-subj") == 0) | 332 | else if (strcmp(*argv, "-subj") == 0) { |
| 352 | { | 333 | if (--argc < 1) |
| 353 | if (--argc < 1) goto bad; | 334 | goto bad; |
| 354 | subj= *(++argv); | 335 | subj = *(++argv); |
| 355 | } | 336 | } else if (strcmp(*argv, "-multivalue-rdn") == 0) |
| 356 | else if (strcmp(*argv,"-multivalue-rdn") == 0) | 337 | multirdn = 1; |
| 357 | multirdn=1; | 338 | else if (strcmp(*argv, "-days") == 0) { |
| 358 | else if (strcmp(*argv,"-days") == 0) | 339 | if (--argc < 1) |
| 359 | { | 340 | goto bad; |
| 360 | if (--argc < 1) goto bad; | 341 | days = atoi(*(++argv)); |
| 361 | days= atoi(*(++argv)); | 342 | if (days == 0) |
| 362 | if (days == 0) days=30; | 343 | days = 30; |
| 363 | } | 344 | } else if (strcmp(*argv, "-set_serial") == 0) { |
| 364 | else if (strcmp(*argv,"-set_serial") == 0) | 345 | if (--argc < 1) |
| 365 | { | 346 | goto bad; |
| 366 | if (--argc < 1) goto bad; | ||
| 367 | serial = s2i_ASN1_INTEGER(NULL, *(++argv)); | 347 | serial = s2i_ASN1_INTEGER(NULL, *(++argv)); |
| 368 | if (!serial) goto bad; | 348 | if (!serial) |
| 369 | } | 349 | goto bad; |
| 370 | else if (strcmp(*argv,"-extensions") == 0) | 350 | } else if (strcmp(*argv, "-extensions") == 0) { |
| 371 | { | 351 | if (--argc < 1) |
| 372 | if (--argc < 1) goto bad; | 352 | goto bad; |
| 373 | extensions = *(++argv); | 353 | extensions = *(++argv); |
| 374 | } | 354 | } else if (strcmp(*argv, "-reqexts") == 0) { |
| 375 | else if (strcmp(*argv,"-reqexts") == 0) | 355 | if (--argc < 1) |
| 376 | { | 356 | goto bad; |
| 377 | if (--argc < 1) goto bad; | ||
| 378 | req_exts = *(++argv); | 357 | req_exts = *(++argv); |
| 379 | } | 358 | } else if ((md_alg = EVP_get_digestbyname(&((*argv)[1]))) != NULL) { |
| 380 | else if ((md_alg=EVP_get_digestbyname(&((*argv)[1]))) != NULL) | ||
| 381 | { | ||
| 382 | /* ok */ | 359 | /* ok */ |
| 383 | digest=md_alg; | 360 | digest = md_alg; |
| 384 | } | 361 | } else { |
| 385 | else | 362 | BIO_printf(bio_err, "unknown option %s\n", *argv); |
| 386 | { | 363 | badops = 1; |
| 387 | BIO_printf(bio_err,"unknown option %s\n",*argv); | ||
| 388 | badops=1; | ||
| 389 | break; | 364 | break; |
| 390 | } | 365 | } |
| 391 | argc--; | 366 | argc--; |
| 392 | argv++; | 367 | argv++; |
| 393 | } | 368 | } |
| 394 | 369 | ||
| 395 | if (badops) | 370 | if (badops) { |
| 396 | { | ||
| 397 | bad: | 371 | bad: |
| 398 | BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog); | 372 | BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog); |
| 399 | BIO_printf(bio_err,"where options are\n"); | 373 | BIO_printf(bio_err, "where options are\n"); |
| 400 | BIO_printf(bio_err," -inform arg input format - DER or PEM\n"); | 374 | BIO_printf(bio_err, " -inform arg input format - DER or PEM\n"); |
| 401 | BIO_printf(bio_err," -outform arg output format - DER or PEM\n"); | 375 | BIO_printf(bio_err, " -outform arg output format - DER or PEM\n"); |
| 402 | BIO_printf(bio_err," -in arg input file\n"); | 376 | BIO_printf(bio_err, " -in arg input file\n"); |
| 403 | BIO_printf(bio_err," -out arg output file\n"); | 377 | BIO_printf(bio_err, " -out arg output file\n"); |
| 404 | BIO_printf(bio_err," -text text form of request\n"); | 378 | BIO_printf(bio_err, " -text text form of request\n"); |
| 405 | BIO_printf(bio_err," -pubkey output public key\n"); | 379 | BIO_printf(bio_err, " -pubkey output public key\n"); |
| 406 | BIO_printf(bio_err," -noout do not output REQ\n"); | 380 | BIO_printf(bio_err, " -noout do not output REQ\n"); |
| 407 | BIO_printf(bio_err," -verify verify signature on REQ\n"); | 381 | BIO_printf(bio_err, " -verify verify signature on REQ\n"); |
| 408 | BIO_printf(bio_err," -modulus RSA modulus\n"); | 382 | BIO_printf(bio_err, " -modulus RSA modulus\n"); |
| 409 | BIO_printf(bio_err," -nodes don't encrypt the output key\n"); | 383 | BIO_printf(bio_err, " -nodes don't encrypt the output key\n"); |
| 410 | #ifndef OPENSSL_NO_ENGINE | 384 | #ifndef OPENSSL_NO_ENGINE |
| 411 | BIO_printf(bio_err," -engine e use engine e, possibly a hardware device\n"); | 385 | BIO_printf(bio_err, " -engine e use engine e, possibly a hardware device\n"); |
| 412 | #endif | 386 | #endif |
| 413 | BIO_printf(bio_err," -subject output the request's subject\n"); | 387 | BIO_printf(bio_err, " -subject output the request's subject\n"); |
| 414 | BIO_printf(bio_err," -passin private key password source\n"); | 388 | BIO_printf(bio_err, " -passin private key password source\n"); |
| 415 | BIO_printf(bio_err," -key file use the private key contained in file\n"); | 389 | BIO_printf(bio_err, " -key file use the private key contained in file\n"); |
| 416 | BIO_printf(bio_err," -keyform arg key file format\n"); | 390 | BIO_printf(bio_err, " -keyform arg key file format\n"); |
| 417 | BIO_printf(bio_err," -keyout arg file to send the key to\n"); | 391 | BIO_printf(bio_err, " -keyout arg file to send the key to\n"); |
| 418 | BIO_printf(bio_err," -rand file:file:...\n"); | 392 | BIO_printf(bio_err, " -rand file:file:...\n"); |
| 419 | BIO_printf(bio_err," load the file (or the files in the directory) into\n"); | 393 | BIO_printf(bio_err, " load the file (or the files in the directory) into\n"); |
| 420 | BIO_printf(bio_err," the random number generator\n"); | 394 | BIO_printf(bio_err, " the random number generator\n"); |
| 421 | BIO_printf(bio_err," -newkey rsa:bits generate a new RSA key of 'bits' in size\n"); | 395 | BIO_printf(bio_err, " -newkey rsa:bits generate a new RSA key of 'bits' in size\n"); |
| 422 | BIO_printf(bio_err," -newkey dsa:file generate a new DSA key, parameters taken from CA in 'file'\n"); | 396 | BIO_printf(bio_err, " -newkey dsa:file generate a new DSA key, parameters taken from CA in 'file'\n"); |
| 423 | #ifndef OPENSSL_NO_ECDSA | 397 | #ifndef OPENSSL_NO_ECDSA |
| 424 | BIO_printf(bio_err," -newkey ec:file generate a new EC key, parameters taken from CA in 'file'\n"); | 398 | BIO_printf(bio_err, " -newkey ec:file generate a new EC key, parameters taken from CA in 'file'\n"); |
| 425 | #endif | 399 | #endif |
| 426 | BIO_printf(bio_err," -[digest] Digest to sign with (md5, sha1, md2, mdc2, md4)\n"); | 400 | BIO_printf(bio_err, " -[digest] Digest to sign with (md5, sha1, md2, mdc2, md4)\n"); |
| 427 | BIO_printf(bio_err," -config file request template file.\n"); | 401 | BIO_printf(bio_err, " -config file request template file.\n"); |
| 428 | BIO_printf(bio_err," -subj arg set or modify request subject\n"); | 402 | BIO_printf(bio_err, " -subj arg set or modify request subject\n"); |
| 429 | BIO_printf(bio_err," -multivalue-rdn enable support for multivalued RDNs\n"); | 403 | BIO_printf(bio_err, " -multivalue-rdn enable support for multivalued RDNs\n"); |
| 430 | BIO_printf(bio_err," -new new request.\n"); | 404 | BIO_printf(bio_err, " -new new request.\n"); |
| 431 | BIO_printf(bio_err," -batch do not ask anything during request generation\n"); | 405 | BIO_printf(bio_err, " -batch do not ask anything during request generation\n"); |
| 432 | BIO_printf(bio_err," -x509 output a x509 structure instead of a cert. req.\n"); | 406 | BIO_printf(bio_err, " -x509 output a x509 structure instead of a cert. req.\n"); |
| 433 | BIO_printf(bio_err," -days number of days a certificate generated by -x509 is valid for.\n"); | 407 | BIO_printf(bio_err, " -days number of days a certificate generated by -x509 is valid for.\n"); |
| 434 | BIO_printf(bio_err," -set_serial serial number to use for a certificate generated by -x509.\n"); | 408 | BIO_printf(bio_err, " -set_serial serial number to use for a certificate generated by -x509.\n"); |
| 435 | BIO_printf(bio_err," -newhdr output \"NEW\" in the header lines\n"); | 409 | BIO_printf(bio_err, " -newhdr output \"NEW\" in the header lines\n"); |
| 436 | BIO_printf(bio_err," -asn1-kludge Output the 'request' in a format that is wrong but some CA's\n"); | 410 | BIO_printf(bio_err, " -asn1-kludge Output the 'request' in a format that is wrong but some CA's\n"); |
| 437 | BIO_printf(bio_err," have been reported as requiring\n"); | 411 | BIO_printf(bio_err, " have been reported as requiring\n"); |
| 438 | BIO_printf(bio_err," -extensions .. specify certificate extension section (override value in config file)\n"); | 412 | BIO_printf(bio_err, " -extensions .. specify certificate extension section (override value in config file)\n"); |
| 439 | BIO_printf(bio_err," -reqexts .. specify request extension section (override value in config file)\n"); | 413 | BIO_printf(bio_err, " -reqexts .. specify request extension section (override value in config file)\n"); |
| 440 | BIO_printf(bio_err," -utf8 input characters are UTF8 (default ASCII)\n"); | 414 | BIO_printf(bio_err, " -utf8 input characters are UTF8 (default ASCII)\n"); |
| 441 | BIO_printf(bio_err," -nameopt arg - various certificate name options\n"); | 415 | BIO_printf(bio_err, " -nameopt arg - various certificate name options\n"); |
| 442 | BIO_printf(bio_err," -reqopt arg - various request text options\n\n"); | 416 | BIO_printf(bio_err, " -reqopt arg - various request text options\n\n"); |
| 443 | goto end; | 417 | goto end; |
| 444 | } | 418 | } |
| 445 | |||
| 446 | ERR_load_crypto_strings(); | 419 | ERR_load_crypto_strings(); |
| 447 | if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { | 420 | if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { |
| 448 | BIO_printf(bio_err, "Error getting passwords\n"); | 421 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 449 | goto end; | 422 | goto end; |
| 450 | } | 423 | } |
| 451 | 424 | if (template != NULL) { | |
| 452 | if (template != NULL) | ||
| 453 | { | ||
| 454 | long errline = -1; | 425 | long errline = -1; |
| 455 | 426 | ||
| 456 | if( verbose ) | 427 | if (verbose) |
| 457 | BIO_printf(bio_err,"Using configuration from %s\n",template); | 428 | BIO_printf(bio_err, "Using configuration from %s\n", template); |
| 458 | req_conf=NCONF_new(NULL); | 429 | req_conf = NCONF_new(NULL); |
| 459 | i=NCONF_load(req_conf,template,&errline); | 430 | i = NCONF_load(req_conf, template, &errline); |
| 460 | if (i == 0) | 431 | if (i == 0) { |
| 461 | { | 432 | BIO_printf(bio_err, "error on line %ld of %s\n", errline, template); |
| 462 | BIO_printf(bio_err,"error on line %ld of %s\n",errline,template); | ||
| 463 | goto end; | 433 | goto end; |
| 464 | } | ||
| 465 | } | 434 | } |
| 466 | else | 435 | } else { |
| 467 | { | 436 | req_conf = config; |
| 468 | req_conf=config; | ||
| 469 | 437 | ||
| 470 | if (req_conf == NULL) | 438 | if (req_conf == NULL) { |
| 471 | { | 439 | BIO_printf(bio_err, "Unable to load config info from %s\n", default_config_file); |
| 472 | BIO_printf(bio_err,"Unable to load config info from %s\n", default_config_file); | ||
| 473 | if (newreq) | 440 | if (newreq) |
| 474 | goto end; | 441 | goto end; |
| 475 | } | 442 | } else if (verbose) |
| 476 | else if( verbose ) | 443 | BIO_printf(bio_err, "Using configuration from %s\n", |
| 477 | BIO_printf(bio_err,"Using configuration from %s\n", | 444 | default_config_file); |
| 478 | default_config_file); | 445 | } |
| 479 | } | ||
| 480 | 446 | ||
| 481 | if (req_conf != NULL) | 447 | if (req_conf != NULL) { |
| 482 | { | ||
| 483 | if (!load_config(bio_err, req_conf)) | 448 | if (!load_config(bio_err, req_conf)) |
| 484 | goto end; | 449 | goto end; |
| 485 | p=NCONF_get_string(req_conf,NULL,"oid_file"); | 450 | p = NCONF_get_string(req_conf, NULL, "oid_file"); |
| 486 | if (p == NULL) | 451 | if (p == NULL) |
| 487 | ERR_clear_error(); | 452 | ERR_clear_error(); |
| 488 | if (p != NULL) | 453 | if (p != NULL) { |
| 489 | { | ||
| 490 | BIO *oid_bio; | 454 | BIO *oid_bio; |
| 491 | 455 | ||
| 492 | oid_bio=BIO_new_file(p,"r"); | 456 | oid_bio = BIO_new_file(p, "r"); |
| 493 | if (oid_bio == NULL) | 457 | if (oid_bio == NULL) { |
| 494 | { | ||
| 495 | /* | 458 | /* |
| 496 | BIO_printf(bio_err,"problems opening %s for extra oid's\n",p); | 459 | BIO_printf(bio_err,"problems opening %s for extra oid's\n",p); |
| 497 | ERR_print_errors(bio_err); | 460 | ERR_print_errors(bio_err); |
| 498 | */ | 461 | */ |
| 499 | } | 462 | } else { |
| 500 | else | ||
| 501 | { | ||
| 502 | OBJ_create_objects(oid_bio); | 463 | OBJ_create_objects(oid_bio); |
| 503 | BIO_free(oid_bio); | 464 | BIO_free(oid_bio); |
| 504 | } | ||
| 505 | } | 465 | } |
| 506 | } | 466 | } |
| 507 | if(!add_oid_section(bio_err, req_conf)) goto end; | 467 | } |
| 468 | if (!add_oid_section(bio_err, req_conf)) | ||
| 469 | goto end; | ||
| 508 | 470 | ||
| 509 | if (md_alg == NULL) | 471 | if (md_alg == NULL) { |
| 510 | { | 472 | p = NCONF_get_string(req_conf, SECTION, "default_md"); |
| 511 | p=NCONF_get_string(req_conf,SECTION,"default_md"); | ||
| 512 | if (p == NULL) | 473 | if (p == NULL) |
| 513 | ERR_clear_error(); | 474 | ERR_clear_error(); |
| 514 | if (p != NULL) | 475 | if (p != NULL) { |
| 515 | { | 476 | if ((md_alg = EVP_get_digestbyname(p)) != NULL) |
| 516 | if ((md_alg=EVP_get_digestbyname(p)) != NULL) | 477 | digest = md_alg; |
| 517 | digest=md_alg; | ||
| 518 | } | ||
| 519 | } | 478 | } |
| 520 | 479 | } | |
| 521 | if (!extensions) | 480 | if (!extensions) { |
| 522 | { | ||
| 523 | extensions = NCONF_get_string(req_conf, SECTION, V3_EXTENSIONS); | 481 | extensions = NCONF_get_string(req_conf, SECTION, V3_EXTENSIONS); |
| 524 | if (!extensions) | 482 | if (!extensions) |
| 525 | ERR_clear_error(); | 483 | ERR_clear_error(); |
| 526 | } | 484 | } |
| 527 | if (extensions) { | 485 | if (extensions) { |
| 528 | /* Check syntax of file */ | 486 | /* Check syntax of file */ |
| 529 | X509V3_CTX ctx; | 487 | X509V3_CTX ctx; |
| 530 | X509V3_set_ctx_test(&ctx); | 488 | X509V3_set_ctx_test(&ctx); |
| 531 | X509V3_set_nconf(&ctx, req_conf); | 489 | X509V3_set_nconf(&ctx, req_conf); |
| 532 | if(!X509V3_EXT_add_nconf(req_conf, &ctx, extensions, NULL)) { | 490 | if (!X509V3_EXT_add_nconf(req_conf, &ctx, extensions, NULL)) { |
| 533 | BIO_printf(bio_err, | 491 | BIO_printf(bio_err, |
| 534 | "Error Loading extension section %s\n", extensions); | 492 | "Error Loading extension section %s\n", extensions); |
| 535 | goto end; | 493 | goto end; |
| 536 | } | 494 | } |
| 537 | } | 495 | } |
| 538 | 496 | if (!passin) { | |
| 539 | if(!passin) | ||
| 540 | { | ||
| 541 | passin = NCONF_get_string(req_conf, SECTION, "input_password"); | 497 | passin = NCONF_get_string(req_conf, SECTION, "input_password"); |
| 542 | if (!passin) | 498 | if (!passin) |
| 543 | ERR_clear_error(); | 499 | ERR_clear_error(); |
| 544 | } | 500 | } |
| 545 | 501 | if (!passout) { | |
| 546 | if(!passout) | ||
| 547 | { | ||
| 548 | passout = NCONF_get_string(req_conf, SECTION, "output_password"); | 502 | passout = NCONF_get_string(req_conf, SECTION, "output_password"); |
| 549 | if (!passout) | 503 | if (!passout) |
| 550 | ERR_clear_error(); | 504 | ERR_clear_error(); |
| 551 | } | 505 | } |
| 552 | |||
| 553 | p = NCONF_get_string(req_conf, SECTION, STRING_MASK); | 506 | p = NCONF_get_string(req_conf, SECTION, STRING_MASK); |
| 554 | if (!p) | 507 | if (!p) |
| 555 | ERR_clear_error(); | 508 | ERR_clear_error(); |
| 556 | 509 | ||
| 557 | if(p && !ASN1_STRING_set_default_mask_asc(p)) { | 510 | if (p && !ASN1_STRING_set_default_mask_asc(p)) { |
| 558 | BIO_printf(bio_err, "Invalid global string mask setting %s\n", p); | 511 | BIO_printf(bio_err, "Invalid global string mask setting %s\n", p); |
| 559 | goto end; | 512 | goto end; |
| 560 | } | 513 | } |
| 561 | 514 | if (chtype != MBSTRING_UTF8) { | |
| 562 | if (chtype != MBSTRING_UTF8) | ||
| 563 | { | ||
| 564 | p = NCONF_get_string(req_conf, SECTION, UTF8_IN); | 515 | p = NCONF_get_string(req_conf, SECTION, UTF8_IN); |
| 565 | if (!p) | 516 | if (!p) |
| 566 | ERR_clear_error(); | 517 | ERR_clear_error(); |
| 567 | else if (!strcmp(p, "yes")) | 518 | else if (!strcmp(p, "yes")) |
| 568 | chtype = MBSTRING_UTF8; | 519 | chtype = MBSTRING_UTF8; |
| 569 | } | 520 | } |
| 570 | 521 | if (!req_exts) { | |
| 571 | |||
| 572 | if(!req_exts) | ||
| 573 | { | ||
| 574 | req_exts = NCONF_get_string(req_conf, SECTION, REQ_EXTENSIONS); | 522 | req_exts = NCONF_get_string(req_conf, SECTION, REQ_EXTENSIONS); |
| 575 | if (!req_exts) | 523 | if (!req_exts) |
| 576 | ERR_clear_error(); | 524 | ERR_clear_error(); |
| 577 | } | 525 | } |
| 578 | if(req_exts) { | 526 | if (req_exts) { |
| 579 | /* Check syntax of file */ | 527 | /* Check syntax of file */ |
| 580 | X509V3_CTX ctx; | 528 | X509V3_CTX ctx; |
| 581 | X509V3_set_ctx_test(&ctx); | 529 | X509V3_set_ctx_test(&ctx); |
| 582 | X509V3_set_nconf(&ctx, req_conf); | 530 | X509V3_set_nconf(&ctx, req_conf); |
| 583 | if(!X509V3_EXT_add_nconf(req_conf, &ctx, req_exts, NULL)) { | 531 | if (!X509V3_EXT_add_nconf(req_conf, &ctx, req_exts, NULL)) { |
| 584 | BIO_printf(bio_err, | 532 | BIO_printf(bio_err, |
| 585 | "Error Loading request extension section %s\n", | 533 | "Error Loading request extension section %s\n", |
| 586 | req_exts); | 534 | req_exts); |
| 587 | goto end; | 535 | goto end; |
| 588 | } | 536 | } |
| 589 | } | 537 | } |
| 590 | 538 | in = BIO_new(BIO_s_file()); | |
| 591 | in=BIO_new(BIO_s_file()); | 539 | out = BIO_new(BIO_s_file()); |
| 592 | out=BIO_new(BIO_s_file()); | ||
| 593 | if ((in == NULL) || (out == NULL)) | 540 | if ((in == NULL) || (out == NULL)) |
| 594 | goto end; | 541 | goto end; |
| 595 | 542 | ||
| 596 | #ifndef OPENSSL_NO_ENGINE | 543 | #ifndef OPENSSL_NO_ENGINE |
| 597 | e = setup_engine(bio_err, engine, 0); | 544 | e = setup_engine(bio_err, engine, 0); |
| 598 | #endif | 545 | #endif |
| 599 | 546 | ||
| 600 | if (keyfile != NULL) | 547 | if (keyfile != NULL) { |
| 601 | { | ||
| 602 | pkey = load_key(bio_err, keyfile, keyform, 0, passin, e, | 548 | pkey = load_key(bio_err, keyfile, keyform, 0, passin, e, |
| 603 | "Private Key"); | 549 | "Private Key"); |
| 604 | if (!pkey) | 550 | if (!pkey) { |
| 605 | { | 551 | /* |
| 606 | /* load_key() has already printed an appropriate | 552 | * load_key() has already printed an appropriate |
| 607 | message */ | 553 | * message |
| 554 | */ | ||
| 608 | goto end; | 555 | goto end; |
| 609 | } | 556 | } else { |
| 610 | else | 557 | char *randfile = NCONF_get_string(req_conf, SECTION, "RANDFILE"); |
| 611 | { | ||
| 612 | char *randfile = NCONF_get_string(req_conf,SECTION,"RANDFILE"); | ||
| 613 | if (randfile == NULL) | 558 | if (randfile == NULL) |
| 614 | ERR_clear_error(); | 559 | ERR_clear_error(); |
| 615 | app_RAND_load_file(randfile, bio_err, 0); | 560 | app_RAND_load_file(randfile, bio_err, 0); |
| 616 | } | ||
| 617 | } | 561 | } |
| 618 | 562 | } | |
| 619 | if (newreq && (pkey == NULL)) | 563 | if (newreq && (pkey == NULL)) { |
| 620 | { | 564 | char *randfile = NCONF_get_string(req_conf, SECTION, "RANDFILE"); |
| 621 | char *randfile = NCONF_get_string(req_conf,SECTION,"RANDFILE"); | ||
| 622 | if (randfile == NULL) | 565 | if (randfile == NULL) |
| 623 | ERR_clear_error(); | 566 | ERR_clear_error(); |
| 624 | app_RAND_load_file(randfile, bio_err, 0); | 567 | app_RAND_load_file(randfile, bio_err, 0); |
| 625 | if (inrand) | 568 | if (inrand) |
| 626 | app_RAND_load_files(inrand); | 569 | app_RAND_load_files(inrand); |
| 627 | 570 | ||
| 628 | if (!NCONF_get_number(req_conf,SECTION,BITS, &newkey)) | 571 | if (!NCONF_get_number(req_conf, SECTION, BITS, &newkey)) { |
| 629 | { | 572 | newkey = DEFAULT_KEY_LENGTH; |
| 630 | newkey=DEFAULT_KEY_LENGTH; | 573 | } |
| 631 | } | 574 | if (keyalg) { |
| 632 | |||
| 633 | if (keyalg) | ||
| 634 | { | ||
| 635 | genctx = set_keygen_ctx(bio_err, keyalg, &pkey_type, &newkey, | 575 | genctx = set_keygen_ctx(bio_err, keyalg, &pkey_type, &newkey, |
| 636 | &keyalgstr, gen_eng); | 576 | &keyalgstr, gen_eng); |
| 637 | if (!genctx) | 577 | if (!genctx) |
| 638 | goto end; | 578 | goto end; |
| 639 | } | 579 | } |
| 640 | 580 | if (newkey < MIN_KEY_LENGTH && (pkey_type == EVP_PKEY_RSA || pkey_type == EVP_PKEY_DSA)) { | |
| 641 | if (newkey < MIN_KEY_LENGTH && (pkey_type == EVP_PKEY_RSA || pkey_type == EVP_PKEY_DSA)) | 581 | BIO_printf(bio_err, "private key length is too short,\n"); |
| 642 | { | 582 | BIO_printf(bio_err, "it needs to be at least %d bits, not %ld\n", MIN_KEY_LENGTH, newkey); |
| 643 | BIO_printf(bio_err,"private key length is too short,\n"); | ||
| 644 | BIO_printf(bio_err,"it needs to be at least %d bits, not %ld\n",MIN_KEY_LENGTH,newkey); | ||
| 645 | goto end; | 583 | goto end; |
| 646 | } | 584 | } |
| 647 | 585 | if (!genctx) { | |
| 648 | if (!genctx) | ||
| 649 | { | ||
| 650 | genctx = set_keygen_ctx(bio_err, NULL, &pkey_type, &newkey, | 586 | genctx = set_keygen_ctx(bio_err, NULL, &pkey_type, &newkey, |
| 651 | &keyalgstr, gen_eng); | 587 | &keyalgstr, gen_eng); |
| 652 | if (!genctx) | 588 | if (!genctx) |
| 653 | goto end; | 589 | goto end; |
| 654 | } | 590 | } |
| 655 | 591 | if (pkeyopts) { | |
| 656 | if (pkeyopts) | ||
| 657 | { | ||
| 658 | char *genopt; | 592 | char *genopt; |
| 659 | for (i = 0; i < sk_OPENSSL_STRING_num(pkeyopts); i++) | 593 | for (i = 0; i < sk_OPENSSL_STRING_num(pkeyopts); i++) { |
| 660 | { | ||
| 661 | genopt = sk_OPENSSL_STRING_value(pkeyopts, i); | 594 | genopt = sk_OPENSSL_STRING_value(pkeyopts, i); |
| 662 | if (pkey_ctrl_string(genctx, genopt) <= 0) | 595 | if (pkey_ctrl_string(genctx, genopt) <= 0) { |
| 663 | { | ||
| 664 | BIO_printf(bio_err, | 596 | BIO_printf(bio_err, |
| 665 | "parameter error \"%s\"\n", | 597 | "parameter error \"%s\"\n", |
| 666 | genopt); | 598 | genopt); |
| 667 | ERR_print_errors(bio_err); | 599 | ERR_print_errors(bio_err); |
| 668 | goto end; | 600 | goto end; |
| 669 | } | ||
| 670 | } | 601 | } |
| 671 | } | 602 | } |
| 672 | 603 | } | |
| 673 | BIO_printf(bio_err,"Generating a %ld bit %s private key\n", | 604 | BIO_printf(bio_err, "Generating a %ld bit %s private key\n", |
| 674 | newkey, keyalgstr); | 605 | newkey, keyalgstr); |
| 675 | 606 | ||
| 676 | EVP_PKEY_CTX_set_cb(genctx, genpkey_cb); | 607 | EVP_PKEY_CTX_set_cb(genctx, genpkey_cb); |
| 677 | EVP_PKEY_CTX_set_app_data(genctx, bio_err); | 608 | EVP_PKEY_CTX_set_app_data(genctx, bio_err); |
| 678 | 609 | ||
| 679 | if (EVP_PKEY_keygen(genctx, &pkey) <= 0) | 610 | if (EVP_PKEY_keygen(genctx, &pkey) <= 0) { |
| 680 | { | ||
| 681 | BIO_puts(bio_err, "Error Generating Key\n"); | 611 | BIO_puts(bio_err, "Error Generating Key\n"); |
| 682 | goto end; | 612 | goto end; |
| 683 | } | 613 | } |
| 684 | |||
| 685 | EVP_PKEY_CTX_free(genctx); | 614 | EVP_PKEY_CTX_free(genctx); |
| 686 | genctx = NULL; | 615 | genctx = NULL; |
| 687 | 616 | ||
| 688 | app_RAND_write_file(randfile, bio_err); | 617 | app_RAND_write_file(randfile, bio_err); |
| 689 | 618 | ||
| 690 | if (keyout == NULL) | 619 | if (keyout == NULL) { |
| 691 | { | 620 | keyout = NCONF_get_string(req_conf, SECTION, KEYFILE); |
| 692 | keyout=NCONF_get_string(req_conf,SECTION,KEYFILE); | ||
| 693 | if (keyout == NULL) | 621 | if (keyout == NULL) |
| 694 | ERR_clear_error(); | 622 | ERR_clear_error(); |
| 695 | } | 623 | } |
| 696 | 624 | if (keyout == NULL) { | |
| 697 | if (keyout == NULL) | 625 | BIO_printf(bio_err, "writing new private key to stdout\n"); |
| 698 | { | 626 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 699 | BIO_printf(bio_err,"writing new private key to stdout\n"); | 627 | } else { |
| 700 | BIO_set_fp(out,stdout,BIO_NOCLOSE); | 628 | BIO_printf(bio_err, "writing new private key to '%s'\n", keyout); |
| 701 | } | 629 | if (BIO_write_filename(out, keyout) <= 0) { |
| 702 | else | ||
| 703 | { | ||
| 704 | BIO_printf(bio_err,"writing new private key to '%s'\n",keyout); | ||
| 705 | if (BIO_write_filename(out,keyout) <= 0) | ||
| 706 | { | ||
| 707 | perror(keyout); | 630 | perror(keyout); |
| 708 | goto end; | 631 | goto end; |
| 709 | } | ||
| 710 | } | 632 | } |
| 633 | } | ||
| 711 | 634 | ||
| 712 | p=NCONF_get_string(req_conf,SECTION,"encrypt_rsa_key"); | 635 | p = NCONF_get_string(req_conf, SECTION, "encrypt_rsa_key"); |
| 713 | if (p == NULL) | 636 | if (p == NULL) { |
| 714 | { | ||
| 715 | ERR_clear_error(); | 637 | ERR_clear_error(); |
| 716 | p=NCONF_get_string(req_conf,SECTION,"encrypt_key"); | 638 | p = NCONF_get_string(req_conf, SECTION, "encrypt_key"); |
| 717 | if (p == NULL) | 639 | if (p == NULL) |
| 718 | ERR_clear_error(); | 640 | ERR_clear_error(); |
| 719 | } | 641 | } |
| 720 | if ((p != NULL) && (strcmp(p,"no") == 0)) | 642 | if ((p != NULL) && (strcmp(p, "no") == 0)) |
| 721 | cipher=NULL; | 643 | cipher = NULL; |
| 722 | if (nodes) cipher=NULL; | 644 | if (nodes) |
| 723 | 645 | cipher = NULL; | |
| 724 | i=0; | 646 | |
| 647 | i = 0; | ||
| 725 | loop: | 648 | loop: |
| 726 | if (!PEM_write_bio_PrivateKey(out,pkey,cipher, | 649 | if (!PEM_write_bio_PrivateKey(out, pkey, cipher, |
| 727 | NULL,0,NULL,passout)) | 650 | NULL, 0, NULL, passout)) { |
| 728 | { | ||
| 729 | if ((ERR_GET_REASON(ERR_peek_error()) == | 651 | if ((ERR_GET_REASON(ERR_peek_error()) == |
| 730 | PEM_R_PROBLEMS_GETTING_PASSWORD) && (i < 3)) | 652 | PEM_R_PROBLEMS_GETTING_PASSWORD) && (i < 3)) { |
| 731 | { | ||
| 732 | ERR_clear_error(); | 653 | ERR_clear_error(); |
| 733 | i++; | 654 | i++; |
| 734 | goto loop; | 655 | goto loop; |
| 735 | } | ||
| 736 | goto end; | ||
| 737 | } | 656 | } |
| 738 | BIO_printf(bio_err,"-----\n"); | 657 | goto end; |
| 739 | } | 658 | } |
| 740 | 659 | BIO_printf(bio_err, "-----\n"); | |
| 741 | if (!newreq) | 660 | } |
| 742 | { | 661 | if (!newreq) { |
| 743 | /* Since we are using a pre-existing certificate | 662 | /* |
| 744 | * request, the kludge 'format' info should not be | 663 | * Since we are using a pre-existing certificate request, the |
| 745 | * changed. */ | 664 | * kludge 'format' info should not be changed. |
| 746 | kludge= -1; | 665 | */ |
| 666 | kludge = -1; | ||
| 747 | if (infile == NULL) | 667 | if (infile == NULL) |
| 748 | BIO_set_fp(in,stdin,BIO_NOCLOSE); | 668 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 749 | else | 669 | else { |
| 750 | { | 670 | if (BIO_read_filename(in, infile) <= 0) { |
| 751 | if (BIO_read_filename(in,infile) <= 0) | ||
| 752 | { | ||
| 753 | perror(infile); | 671 | perror(infile); |
| 754 | goto end; | 672 | goto end; |
| 755 | } | ||
| 756 | } | 673 | } |
| 674 | } | ||
| 757 | 675 | ||
| 758 | if (informat == FORMAT_ASN1) | 676 | if (informat == FORMAT_ASN1) |
| 759 | req=d2i_X509_REQ_bio(in,NULL); | 677 | req = d2i_X509_REQ_bio(in, NULL); |
| 760 | else if (informat == FORMAT_PEM) | 678 | else if (informat == FORMAT_PEM) |
| 761 | req=PEM_read_bio_X509_REQ(in,NULL,NULL,NULL); | 679 | req = PEM_read_bio_X509_REQ(in, NULL, NULL, NULL); |
| 762 | else | 680 | else { |
| 763 | { | 681 | BIO_printf(bio_err, "bad input format specified for X509 request\n"); |
| 764 | BIO_printf(bio_err,"bad input format specified for X509 request\n"); | ||
| 765 | goto end; | 682 | goto end; |
| 766 | } | 683 | } |
| 767 | if (req == NULL) | 684 | if (req == NULL) { |
| 768 | { | 685 | BIO_printf(bio_err, "unable to load X509 request\n"); |
| 769 | BIO_printf(bio_err,"unable to load X509 request\n"); | ||
| 770 | goto end; | 686 | goto end; |
| 771 | } | ||
| 772 | } | 687 | } |
| 773 | 688 | } | |
| 774 | if (newreq || x509) | 689 | if (newreq || x509) { |
| 775 | { | 690 | if (pkey == NULL) { |
| 776 | if (pkey == NULL) | 691 | BIO_printf(bio_err, "you need to specify a private key\n"); |
| 777 | { | ||
| 778 | BIO_printf(bio_err,"you need to specify a private key\n"); | ||
| 779 | goto end; | 692 | goto end; |
| 780 | } | 693 | } |
| 781 | 694 | if (req == NULL) { | |
| 782 | if (req == NULL) | 695 | req = X509_REQ_new(); |
| 783 | { | 696 | if (req == NULL) { |
| 784 | req=X509_REQ_new(); | ||
| 785 | if (req == NULL) | ||
| 786 | { | ||
| 787 | goto end; | 697 | goto end; |
| 788 | } | 698 | } |
| 789 | 699 | i = make_REQ(req, pkey, subj, multirdn, !x509, chtype); | |
| 790 | i=make_REQ(req,pkey,subj,multirdn,!x509, chtype); | 700 | subj = NULL; /* done processing '-subj' option */ |
| 791 | subj=NULL; /* done processing '-subj' option */ | 701 | if ((kludge > 0) && !sk_X509_ATTRIBUTE_num(req->req_info->attributes)) { |
| 792 | if ((kludge > 0) && !sk_X509_ATTRIBUTE_num(req->req_info->attributes)) | ||
| 793 | { | ||
| 794 | sk_X509_ATTRIBUTE_free(req->req_info->attributes); | 702 | sk_X509_ATTRIBUTE_free(req->req_info->attributes); |
| 795 | req->req_info->attributes = NULL; | 703 | req->req_info->attributes = NULL; |
| 796 | } | 704 | } |
| 797 | if (!i) | 705 | if (!i) { |
| 798 | { | 706 | BIO_printf(bio_err, "problems making Certificate Request\n"); |
| 799 | BIO_printf(bio_err,"problems making Certificate Request\n"); | ||
| 800 | goto end; | 707 | goto end; |
| 801 | } | ||
| 802 | } | 708 | } |
| 803 | if (x509) | 709 | } |
| 804 | { | 710 | if (x509) { |
| 805 | EVP_PKEY *tmppkey; | 711 | EVP_PKEY *tmppkey; |
| 806 | X509V3_CTX ext_ctx; | 712 | X509V3_CTX ext_ctx; |
| 807 | if ((x509ss=X509_new()) == NULL) goto end; | 713 | if ((x509ss = X509_new()) == NULL) |
| 714 | goto end; | ||
| 808 | 715 | ||
| 809 | /* Set version to V3 */ | 716 | /* Set version to V3 */ |
| 810 | if(extensions && !X509_set_version(x509ss, 2)) goto end; | 717 | if (extensions && !X509_set_version(x509ss, 2)) |
| 811 | if (serial) | 718 | goto end; |
| 812 | { | 719 | if (serial) { |
| 813 | if (!X509_set_serialNumber(x509ss, serial)) goto end; | 720 | if (!X509_set_serialNumber(x509ss, serial)) |
| 814 | } | 721 | goto end; |
| 815 | else | 722 | } else { |
| 816 | { | ||
| 817 | if (!rand_serial(NULL, | 723 | if (!rand_serial(NULL, |
| 818 | X509_get_serialNumber(x509ss))) | 724 | X509_get_serialNumber(x509ss))) |
| 819 | goto end; | 725 | goto end; |
| 820 | } | 726 | } |
| 821 | 727 | ||
| 822 | if (!X509_set_issuer_name(x509ss, X509_REQ_get_subject_name(req))) goto end; | 728 | if (!X509_set_issuer_name(x509ss, X509_REQ_get_subject_name(req))) |
| 823 | if (!X509_gmtime_adj(X509_get_notBefore(x509ss),0)) goto end; | 729 | goto end; |
| 824 | if (!X509_time_adj_ex(X509_get_notAfter(x509ss), days, 0, NULL)) goto end; | 730 | if (!X509_gmtime_adj(X509_get_notBefore(x509ss), 0)) |
| 825 | if (!X509_set_subject_name(x509ss, X509_REQ_get_subject_name(req))) goto end; | 731 | goto end; |
| 732 | if (!X509_time_adj_ex(X509_get_notAfter(x509ss), days, 0, NULL)) | ||
| 733 | goto end; | ||
| 734 | if (!X509_set_subject_name(x509ss, X509_REQ_get_subject_name(req))) | ||
| 735 | goto end; | ||
| 826 | tmppkey = X509_REQ_get_pubkey(req); | 736 | tmppkey = X509_REQ_get_pubkey(req); |
| 827 | if (!tmppkey || !X509_set_pubkey(x509ss,tmppkey)) goto end; | 737 | if (!tmppkey || !X509_set_pubkey(x509ss, tmppkey)) |
| 738 | goto end; | ||
| 828 | EVP_PKEY_free(tmppkey); | 739 | EVP_PKEY_free(tmppkey); |
| 829 | 740 | ||
| 830 | /* Set up V3 context struct */ | 741 | /* Set up V3 context struct */ |
| @@ -833,24 +744,19 @@ loop: | |||
| 833 | X509V3_set_nconf(&ext_ctx, req_conf); | 744 | X509V3_set_nconf(&ext_ctx, req_conf); |
| 834 | 745 | ||
| 835 | /* Add extensions */ | 746 | /* Add extensions */ |
| 836 | if(extensions && !X509V3_EXT_add_nconf(req_conf, | 747 | if (extensions && !X509V3_EXT_add_nconf(req_conf, |
| 837 | &ext_ctx, extensions, x509ss)) | 748 | &ext_ctx, extensions, x509ss)) { |
| 838 | { | ||
| 839 | BIO_printf(bio_err, | 749 | BIO_printf(bio_err, |
| 840 | "Error Loading extension section %s\n", | 750 | "Error Loading extension section %s\n", |
| 841 | extensions); | 751 | extensions); |
| 842 | goto end; | 752 | goto end; |
| 843 | } | 753 | } |
| 844 | 754 | i = do_X509_sign(bio_err, x509ss, pkey, digest, sigopts); | |
| 845 | i=do_X509_sign(bio_err, x509ss, pkey, digest, sigopts); | 755 | if (!i) { |
| 846 | if (!i) | ||
| 847 | { | ||
| 848 | ERR_print_errors(bio_err); | 756 | ERR_print_errors(bio_err); |
| 849 | goto end; | 757 | goto end; |
| 850 | } | ||
| 851 | } | 758 | } |
| 852 | else | 759 | } else { |
| 853 | { | ||
| 854 | X509V3_CTX ext_ctx; | 760 | X509V3_CTX ext_ctx; |
| 855 | 761 | ||
| 856 | /* Set up V3 context struct */ | 762 | /* Set up V3 context struct */ |
| @@ -859,199 +765,161 @@ loop: | |||
| 859 | X509V3_set_nconf(&ext_ctx, req_conf); | 765 | X509V3_set_nconf(&ext_ctx, req_conf); |
| 860 | 766 | ||
| 861 | /* Add extensions */ | 767 | /* Add extensions */ |
| 862 | if(req_exts && !X509V3_EXT_REQ_add_nconf(req_conf, | 768 | if (req_exts && !X509V3_EXT_REQ_add_nconf(req_conf, |
| 863 | &ext_ctx, req_exts, req)) | 769 | &ext_ctx, req_exts, req)) { |
| 864 | { | ||
| 865 | BIO_printf(bio_err, | 770 | BIO_printf(bio_err, |
| 866 | "Error Loading extension section %s\n", | 771 | "Error Loading extension section %s\n", |
| 867 | req_exts); | 772 | req_exts); |
| 868 | goto end; | 773 | goto end; |
| 869 | } | 774 | } |
| 870 | i=do_X509_REQ_sign(bio_err, req, pkey, digest, sigopts); | 775 | i = do_X509_REQ_sign(bio_err, req, pkey, digest, sigopts); |
| 871 | if (!i) | 776 | if (!i) { |
| 872 | { | ||
| 873 | ERR_print_errors(bio_err); | 777 | ERR_print_errors(bio_err); |
| 874 | goto end; | 778 | goto end; |
| 875 | } | ||
| 876 | } | 779 | } |
| 877 | } | 780 | } |
| 878 | 781 | } | |
| 879 | if (subj && x509) | 782 | if (subj && x509) { |
| 880 | { | ||
| 881 | BIO_printf(bio_err, "Cannot modifiy certificate subject\n"); | 783 | BIO_printf(bio_err, "Cannot modifiy certificate subject\n"); |
| 882 | goto end; | 784 | goto end; |
| 883 | } | 785 | } |
| 884 | 786 | if (subj && !x509) { | |
| 885 | if (subj && !x509) | 787 | if (verbose) { |
| 886 | { | ||
| 887 | if (verbose) | ||
| 888 | { | ||
| 889 | BIO_printf(bio_err, "Modifying Request's Subject\n"); | 788 | BIO_printf(bio_err, "Modifying Request's Subject\n"); |
| 890 | print_name(bio_err, "old subject=", X509_REQ_get_subject_name(req), nmflag); | 789 | print_name(bio_err, "old subject=", X509_REQ_get_subject_name(req), nmflag); |
| 891 | } | 790 | } |
| 892 | 791 | if (build_subject(req, subj, chtype, multirdn) == 0) { | |
| 893 | if (build_subject(req, subj, chtype, multirdn) == 0) | ||
| 894 | { | ||
| 895 | BIO_printf(bio_err, "ERROR: cannot modify subject\n"); | 792 | BIO_printf(bio_err, "ERROR: cannot modify subject\n"); |
| 896 | ex=1; | 793 | ex = 1; |
| 897 | goto end; | 794 | goto end; |
| 898 | } | 795 | } |
| 899 | |||
| 900 | req->req_info->enc.modified = 1; | 796 | req->req_info->enc.modified = 1; |
| 901 | 797 | ||
| 902 | if (verbose) | 798 | if (verbose) { |
| 903 | { | ||
| 904 | print_name(bio_err, "new subject=", X509_REQ_get_subject_name(req), nmflag); | 799 | print_name(bio_err, "new subject=", X509_REQ_get_subject_name(req), nmflag); |
| 905 | } | ||
| 906 | } | 800 | } |
| 801 | } | ||
| 802 | if (verify && !x509) { | ||
| 803 | int tmp = 0; | ||
| 907 | 804 | ||
| 908 | if (verify && !x509) | 805 | if (pkey == NULL) { |
| 909 | { | 806 | pkey = X509_REQ_get_pubkey(req); |
| 910 | int tmp=0; | 807 | tmp = 1; |
| 911 | 808 | if (pkey == NULL) | |
| 912 | if (pkey == NULL) | 809 | goto end; |
| 913 | { | 810 | } |
| 914 | pkey=X509_REQ_get_pubkey(req); | 811 | i = X509_REQ_verify(req, pkey); |
| 915 | tmp=1; | ||
| 916 | if (pkey == NULL) goto end; | ||
| 917 | } | ||
| 918 | |||
| 919 | i=X509_REQ_verify(req,pkey); | ||
| 920 | if (tmp) { | 812 | if (tmp) { |
| 921 | EVP_PKEY_free(pkey); | 813 | EVP_PKEY_free(pkey); |
| 922 | pkey=NULL; | 814 | pkey = NULL; |
| 923 | } | 815 | } |
| 924 | 816 | if (i < 0) { | |
| 925 | if (i < 0) | ||
| 926 | { | ||
| 927 | goto end; | 817 | goto end; |
| 928 | } | 818 | } else if (i == 0) { |
| 929 | else if (i == 0) | 819 | BIO_printf(bio_err, "verify failure\n"); |
| 930 | { | ||
| 931 | BIO_printf(bio_err,"verify failure\n"); | ||
| 932 | ERR_print_errors(bio_err); | 820 | ERR_print_errors(bio_err); |
| 933 | } | 821 | } else /* if (i > 0) */ |
| 934 | else /* if (i > 0) */ | 822 | BIO_printf(bio_err, "verify OK\n"); |
| 935 | BIO_printf(bio_err,"verify OK\n"); | 823 | } |
| 936 | } | 824 | if (noout && !text && !modulus && !subject && !pubkey) { |
| 937 | 825 | ex = 0; | |
| 938 | if (noout && !text && !modulus && !subject && !pubkey) | ||
| 939 | { | ||
| 940 | ex=0; | ||
| 941 | goto end; | 826 | goto end; |
| 942 | } | 827 | } |
| 943 | 828 | if (outfile == NULL) { | |
| 944 | if (outfile == NULL) | 829 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 945 | { | 830 | } else { |
| 946 | BIO_set_fp(out,stdout,BIO_NOCLOSE); | 831 | if ((keyout != NULL) && (strcmp(outfile, keyout) == 0)) |
| 947 | } | 832 | i = (int) BIO_append_filename(out, outfile); |
| 948 | else | ||
| 949 | { | ||
| 950 | if ((keyout != NULL) && (strcmp(outfile,keyout) == 0)) | ||
| 951 | i=(int)BIO_append_filename(out,outfile); | ||
| 952 | else | 833 | else |
| 953 | i=(int)BIO_write_filename(out,outfile); | 834 | i = (int) BIO_write_filename(out, outfile); |
| 954 | if (!i) | 835 | if (!i) { |
| 955 | { | ||
| 956 | perror(outfile); | 836 | perror(outfile); |
| 957 | goto end; | 837 | goto end; |
| 958 | } | ||
| 959 | } | 838 | } |
| 839 | } | ||
| 960 | 840 | ||
| 961 | if (pubkey) | 841 | if (pubkey) { |
| 962 | { | 842 | EVP_PKEY *tpubkey; |
| 963 | EVP_PKEY *tpubkey; | 843 | tpubkey = X509_REQ_get_pubkey(req); |
| 964 | tpubkey=X509_REQ_get_pubkey(req); | 844 | if (tpubkey == NULL) { |
| 965 | if (tpubkey == NULL) | 845 | BIO_printf(bio_err, "Error getting public key\n"); |
| 966 | { | ||
| 967 | BIO_printf(bio_err,"Error getting public key\n"); | ||
| 968 | ERR_print_errors(bio_err); | 846 | ERR_print_errors(bio_err); |
| 969 | goto end; | 847 | goto end; |
| 970 | } | 848 | } |
| 971 | PEM_write_bio_PUBKEY(out, tpubkey); | 849 | PEM_write_bio_PUBKEY(out, tpubkey); |
| 972 | EVP_PKEY_free(tpubkey); | 850 | EVP_PKEY_free(tpubkey); |
| 973 | } | 851 | } |
| 974 | 852 | if (text) { | |
| 975 | if (text) | ||
| 976 | { | ||
| 977 | if (x509) | 853 | if (x509) |
| 978 | X509_print_ex(out, x509ss, nmflag, reqflag); | 854 | X509_print_ex(out, x509ss, nmflag, reqflag); |
| 979 | else | 855 | else |
| 980 | X509_REQ_print_ex(out, req, nmflag, reqflag); | 856 | X509_REQ_print_ex(out, req, nmflag, reqflag); |
| 981 | } | 857 | } |
| 982 | 858 | if (subject) { | |
| 983 | if(subject) | 859 | if (x509) |
| 984 | { | ||
| 985 | if(x509) | ||
| 986 | print_name(out, "subject=", X509_get_subject_name(x509ss), nmflag); | 860 | print_name(out, "subject=", X509_get_subject_name(x509ss), nmflag); |
| 987 | else | 861 | else |
| 988 | print_name(out, "subject=", X509_REQ_get_subject_name(req), nmflag); | 862 | print_name(out, "subject=", X509_REQ_get_subject_name(req), nmflag); |
| 989 | } | 863 | } |
| 990 | 864 | if (modulus) { | |
| 991 | if (modulus) | ||
| 992 | { | ||
| 993 | EVP_PKEY *tpubkey; | 865 | EVP_PKEY *tpubkey; |
| 994 | 866 | ||
| 995 | if (x509) | 867 | if (x509) |
| 996 | tpubkey=X509_get_pubkey(x509ss); | 868 | tpubkey = X509_get_pubkey(x509ss); |
| 997 | else | 869 | else |
| 998 | tpubkey=X509_REQ_get_pubkey(req); | 870 | tpubkey = X509_REQ_get_pubkey(req); |
| 999 | if (tpubkey == NULL) | 871 | if (tpubkey == NULL) { |
| 1000 | { | 872 | fprintf(stdout, "Modulus=unavailable\n"); |
| 1001 | fprintf(stdout,"Modulus=unavailable\n"); | 873 | goto end; |
| 1002 | goto end; | 874 | } |
| 1003 | } | 875 | fprintf(stdout, "Modulus="); |
| 1004 | fprintf(stdout,"Modulus="); | ||
| 1005 | #ifndef OPENSSL_NO_RSA | 876 | #ifndef OPENSSL_NO_RSA |
| 1006 | if (EVP_PKEY_base_id(tpubkey) == EVP_PKEY_RSA) | 877 | if (EVP_PKEY_base_id(tpubkey) == EVP_PKEY_RSA) |
| 1007 | BN_print(out,tpubkey->pkey.rsa->n); | 878 | BN_print(out, tpubkey->pkey.rsa->n); |
| 1008 | else | 879 | else |
| 1009 | #endif | 880 | #endif |
| 1010 | fprintf(stdout,"Wrong Algorithm type"); | 881 | fprintf(stdout, "Wrong Algorithm type"); |
| 1011 | EVP_PKEY_free(tpubkey); | 882 | EVP_PKEY_free(tpubkey); |
| 1012 | fprintf(stdout,"\n"); | 883 | fprintf(stdout, "\n"); |
| 1013 | } | 884 | } |
| 1014 | 885 | if (!noout && !x509) { | |
| 1015 | if (!noout && !x509) | 886 | if (outformat == FORMAT_ASN1) |
| 1016 | { | 887 | i = i2d_X509_REQ_bio(out, req); |
| 1017 | if (outformat == FORMAT_ASN1) | ||
| 1018 | i=i2d_X509_REQ_bio(out,req); | ||
| 1019 | else if (outformat == FORMAT_PEM) { | 888 | else if (outformat == FORMAT_PEM) { |
| 1020 | if(newhdr) i=PEM_write_bio_X509_REQ_NEW(out,req); | 889 | if (newhdr) |
| 1021 | else i=PEM_write_bio_X509_REQ(out,req); | 890 | i = PEM_write_bio_X509_REQ_NEW(out, req); |
| 891 | else | ||
| 892 | i = PEM_write_bio_X509_REQ(out, req); | ||
| 1022 | } else { | 893 | } else { |
| 1023 | BIO_printf(bio_err,"bad output format specified for outfile\n"); | 894 | BIO_printf(bio_err, "bad output format specified for outfile\n"); |
| 1024 | goto end; | 895 | goto end; |
| 1025 | } | 896 | } |
| 1026 | if (!i) | 897 | if (!i) { |
| 1027 | { | 898 | BIO_printf(bio_err, "unable to write X509 request\n"); |
| 1028 | BIO_printf(bio_err,"unable to write X509 request\n"); | ||
| 1029 | goto end; | 899 | goto end; |
| 1030 | } | ||
| 1031 | } | 900 | } |
| 1032 | if (!noout && x509 && (x509ss != NULL)) | 901 | } |
| 1033 | { | 902 | if (!noout && x509 && (x509ss != NULL)) { |
| 1034 | if (outformat == FORMAT_ASN1) | 903 | if (outformat == FORMAT_ASN1) |
| 1035 | i=i2d_X509_bio(out,x509ss); | 904 | i = i2d_X509_bio(out, x509ss); |
| 1036 | else if (outformat == FORMAT_PEM) | 905 | else if (outformat == FORMAT_PEM) |
| 1037 | i=PEM_write_bio_X509(out,x509ss); | 906 | i = PEM_write_bio_X509(out, x509ss); |
| 1038 | else { | 907 | else { |
| 1039 | BIO_printf(bio_err,"bad output format specified for outfile\n"); | 908 | BIO_printf(bio_err, "bad output format specified for outfile\n"); |
| 1040 | goto end; | 909 | goto end; |
| 1041 | } | 910 | } |
| 1042 | if (!i) | 911 | if (!i) { |
| 1043 | { | 912 | BIO_printf(bio_err, "unable to write X509 certificate\n"); |
| 1044 | BIO_printf(bio_err,"unable to write X509 certificate\n"); | ||
| 1045 | goto end; | 913 | goto end; |
| 1046 | } | ||
| 1047 | } | 914 | } |
| 1048 | ex=0; | 915 | } |
| 916 | ex = 0; | ||
| 1049 | end: | 917 | end: |
| 1050 | if (ex) | 918 | if (ex) { |
| 1051 | { | ||
| 1052 | ERR_print_errors(bio_err); | 919 | ERR_print_errors(bio_err); |
| 1053 | } | 920 | } |
| 1054 | if ((req_conf != NULL) && (req_conf != config)) NCONF_free(req_conf); | 921 | if ((req_conf != NULL) && (req_conf != config)) |
| 922 | NCONF_free(req_conf); | ||
| 1055 | BIO_free(in); | 923 | BIO_free(in); |
| 1056 | BIO_free_all(out); | 924 | BIO_free_all(out); |
| 1057 | EVP_PKEY_free(pkey); | 925 | EVP_PKEY_free(pkey); |
| @@ -1070,502 +938,459 @@ end: | |||
| 1070 | X509_REQ_free(req); | 938 | X509_REQ_free(req); |
| 1071 | X509_free(x509ss); | 939 | X509_free(x509ss); |
| 1072 | ASN1_INTEGER_free(serial); | 940 | ASN1_INTEGER_free(serial); |
| 1073 | if(passargin && passin) free(passin); | 941 | if (passargin && passin) |
| 1074 | if(passargout && passout) free(passout); | 942 | free(passin); |
| 943 | if (passargout && passout) | ||
| 944 | free(passout); | ||
| 1075 | OBJ_cleanup(); | 945 | OBJ_cleanup(); |
| 1076 | apps_shutdown(); | 946 | apps_shutdown(); |
| 1077 | return(ex); | 947 | return (ex); |
| 1078 | } | 948 | } |
| 1079 | 949 | ||
| 1080 | static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, char *subj, int multirdn, | 950 | static int |
| 1081 | int attribs, unsigned long chtype) | 951 | make_REQ(X509_REQ * req, EVP_PKEY * pkey, char *subj, int multirdn, |
| 1082 | { | 952 | int attribs, unsigned long chtype) |
| 1083 | int ret=0,i; | 953 | { |
| 954 | int ret = 0, i; | ||
| 1084 | char no_prompt = 0; | 955 | char no_prompt = 0; |
| 1085 | STACK_OF(CONF_VALUE) *dn_sk, *attr_sk = NULL; | 956 | STACK_OF(CONF_VALUE) * dn_sk, *attr_sk = NULL; |
| 1086 | char *tmp, *dn_sect,*attr_sect; | 957 | char *tmp, *dn_sect, *attr_sect; |
| 1087 | 958 | ||
| 1088 | tmp=NCONF_get_string(req_conf,SECTION,PROMPT); | 959 | tmp = NCONF_get_string(req_conf, SECTION, PROMPT); |
| 1089 | if (tmp == NULL) | 960 | if (tmp == NULL) |
| 1090 | ERR_clear_error(); | 961 | ERR_clear_error(); |
| 1091 | if((tmp != NULL) && !strcmp(tmp, "no")) no_prompt = 1; | 962 | if ((tmp != NULL) && !strcmp(tmp, "no")) |
| 963 | no_prompt = 1; | ||
| 1092 | 964 | ||
| 1093 | dn_sect=NCONF_get_string(req_conf,SECTION,DISTINGUISHED_NAME); | 965 | dn_sect = NCONF_get_string(req_conf, SECTION, DISTINGUISHED_NAME); |
| 1094 | if (dn_sect == NULL) | 966 | if (dn_sect == NULL) { |
| 1095 | { | 967 | BIO_printf(bio_err, "unable to find '%s' in config\n", |
| 1096 | BIO_printf(bio_err,"unable to find '%s' in config\n", | 968 | DISTINGUISHED_NAME); |
| 1097 | DISTINGUISHED_NAME); | ||
| 1098 | goto err; | 969 | goto err; |
| 1099 | } | 970 | } |
| 1100 | dn_sk=NCONF_get_section(req_conf,dn_sect); | 971 | dn_sk = NCONF_get_section(req_conf, dn_sect); |
| 1101 | if (dn_sk == NULL) | 972 | if (dn_sk == NULL) { |
| 1102 | { | 973 | BIO_printf(bio_err, "unable to get '%s' section\n", dn_sect); |
| 1103 | BIO_printf(bio_err,"unable to get '%s' section\n",dn_sect); | ||
| 1104 | goto err; | 974 | goto err; |
| 1105 | } | 975 | } |
| 1106 | 976 | attr_sect = NCONF_get_string(req_conf, SECTION, ATTRIBUTES); | |
| 1107 | attr_sect=NCONF_get_string(req_conf,SECTION,ATTRIBUTES); | 977 | if (attr_sect == NULL) { |
| 1108 | if (attr_sect == NULL) | 978 | ERR_clear_error(); |
| 1109 | { | 979 | attr_sk = NULL; |
| 1110 | ERR_clear_error(); | 980 | } else { |
| 1111 | attr_sk=NULL; | 981 | attr_sk = NCONF_get_section(req_conf, attr_sect); |
| 1112 | } | 982 | if (attr_sk == NULL) { |
| 1113 | else | 983 | BIO_printf(bio_err, "unable to get '%s' section\n", attr_sect); |
| 1114 | { | ||
| 1115 | attr_sk=NCONF_get_section(req_conf,attr_sect); | ||
| 1116 | if (attr_sk == NULL) | ||
| 1117 | { | ||
| 1118 | BIO_printf(bio_err,"unable to get '%s' section\n",attr_sect); | ||
| 1119 | goto err; | 984 | goto err; |
| 1120 | } | ||
| 1121 | } | 985 | } |
| 986 | } | ||
| 1122 | 987 | ||
| 1123 | /* setup version number */ | 988 | /* setup version number */ |
| 1124 | if (!X509_REQ_set_version(req,0L)) goto err; /* version 1 */ | 989 | if (!X509_REQ_set_version(req, 0L)) |
| 990 | goto err; /* version 1 */ | ||
| 1125 | 991 | ||
| 1126 | if (no_prompt) | 992 | if (no_prompt) |
| 1127 | i = auto_info(req, dn_sk, attr_sk, attribs, chtype); | 993 | i = auto_info(req, dn_sk, attr_sk, attribs, chtype); |
| 1128 | else | 994 | else { |
| 1129 | { | ||
| 1130 | if (subj) | 995 | if (subj) |
| 1131 | i = build_subject(req, subj, chtype, multirdn); | 996 | i = build_subject(req, subj, chtype, multirdn); |
| 1132 | else | 997 | else |
| 1133 | i = prompt_info(req, dn_sk, dn_sect, attr_sk, attr_sect, attribs, chtype); | 998 | i = prompt_info(req, dn_sk, dn_sect, attr_sk, attr_sect, attribs, chtype); |
| 1134 | } | 999 | } |
| 1135 | if(!i) goto err; | 1000 | if (!i) |
| 1001 | goto err; | ||
| 1136 | 1002 | ||
| 1137 | if (!X509_REQ_set_pubkey(req,pkey)) goto err; | 1003 | if (!X509_REQ_set_pubkey(req, pkey)) |
| 1004 | goto err; | ||
| 1138 | 1005 | ||
| 1139 | ret=1; | 1006 | ret = 1; |
| 1140 | err: | 1007 | err: |
| 1141 | return(ret); | 1008 | return (ret); |
| 1142 | } | 1009 | } |
| 1143 | 1010 | ||
| 1144 | /* | 1011 | /* |
| 1145 | * subject is expected to be in the format /type0=value0/type1=value1/type2=... | 1012 | * subject is expected to be in the format /type0=value0/type1=value1/type2=... |
| 1146 | * where characters may be escaped by \ | 1013 | * where characters may be escaped by \ |
| 1147 | */ | 1014 | */ |
| 1148 | static int build_subject(X509_REQ *req, char *subject, unsigned long chtype, int multirdn) | 1015 | static int |
| 1149 | { | 1016 | build_subject(X509_REQ * req, char *subject, unsigned long chtype, int multirdn) |
| 1017 | { | ||
| 1150 | X509_NAME *n; | 1018 | X509_NAME *n; |
| 1151 | 1019 | ||
| 1152 | if (!(n = parse_name(subject, chtype, multirdn))) | 1020 | if (!(n = parse_name(subject, chtype, multirdn))) |
| 1153 | return 0; | 1021 | return 0; |
| 1154 | 1022 | ||
| 1155 | if (!X509_REQ_set_subject_name(req, n)) | 1023 | if (!X509_REQ_set_subject_name(req, n)) { |
| 1156 | { | ||
| 1157 | X509_NAME_free(n); | 1024 | X509_NAME_free(n); |
| 1158 | return 0; | 1025 | return 0; |
| 1159 | } | 1026 | } |
| 1160 | X509_NAME_free(n); | 1027 | X509_NAME_free(n); |
| 1161 | return 1; | 1028 | return 1; |
| 1162 | } | 1029 | } |
| 1163 | 1030 | ||
| 1164 | 1031 | ||
| 1165 | static int prompt_info(X509_REQ *req, | 1032 | static int |
| 1166 | STACK_OF(CONF_VALUE) *dn_sk, char *dn_sect, | 1033 | prompt_info(X509_REQ * req, |
| 1167 | STACK_OF(CONF_VALUE) *attr_sk, char *attr_sect, int attribs, | 1034 | STACK_OF(CONF_VALUE) * dn_sk, char *dn_sect, |
| 1168 | unsigned long chtype) | 1035 | STACK_OF(CONF_VALUE) * attr_sk, char *attr_sect, int attribs, |
| 1169 | { | 1036 | unsigned long chtype) |
| 1037 | { | ||
| 1170 | int i; | 1038 | int i; |
| 1171 | char *p,*q; | 1039 | char *p, *q; |
| 1172 | char buf[100]; | 1040 | char buf[100]; |
| 1173 | int nid, mval; | 1041 | int nid, mval; |
| 1174 | long n_min,n_max; | 1042 | long n_min, n_max; |
| 1175 | char *type, *value; | 1043 | char *type, *value; |
| 1176 | const char *def; | 1044 | const char *def; |
| 1177 | CONF_VALUE *v; | 1045 | CONF_VALUE *v; |
| 1178 | X509_NAME *subj; | 1046 | X509_NAME *subj; |
| 1179 | subj = X509_REQ_get_subject_name(req); | 1047 | subj = X509_REQ_get_subject_name(req); |
| 1180 | 1048 | ||
| 1181 | if(!batch) | 1049 | if (!batch) { |
| 1182 | { | 1050 | BIO_printf(bio_err, "You are about to be asked to enter information that will be incorporated\n"); |
| 1183 | BIO_printf(bio_err,"You are about to be asked to enter information that will be incorporated\n"); | 1051 | BIO_printf(bio_err, "into your certificate request.\n"); |
| 1184 | BIO_printf(bio_err,"into your certificate request.\n"); | 1052 | BIO_printf(bio_err, "What you are about to enter is what is called a Distinguished Name or a DN.\n"); |
| 1185 | BIO_printf(bio_err,"What you are about to enter is what is called a Distinguished Name or a DN.\n"); | 1053 | BIO_printf(bio_err, "There are quite a few fields but you can leave some blank\n"); |
| 1186 | BIO_printf(bio_err,"There are quite a few fields but you can leave some blank\n"); | 1054 | BIO_printf(bio_err, "For some fields there will be a default value,\n"); |
| 1187 | BIO_printf(bio_err,"For some fields there will be a default value,\n"); | 1055 | BIO_printf(bio_err, "If you enter '.', the field will be left blank.\n"); |
| 1188 | BIO_printf(bio_err,"If you enter '.', the field will be left blank.\n"); | 1056 | BIO_printf(bio_err, "-----\n"); |
| 1189 | BIO_printf(bio_err,"-----\n"); | 1057 | } |
| 1190 | } | 1058 | if (sk_CONF_VALUE_num(dn_sk)) { |
| 1191 | 1059 | i = -1; | |
| 1192 | 1060 | start: for (;;) { | |
| 1193 | if (sk_CONF_VALUE_num(dn_sk)) | ||
| 1194 | { | ||
| 1195 | i= -1; | ||
| 1196 | start: for (;;) | ||
| 1197 | { | ||
| 1198 | int ret; | 1061 | int ret; |
| 1199 | i++; | 1062 | i++; |
| 1200 | if (sk_CONF_VALUE_num(dn_sk) <= i) break; | 1063 | if (sk_CONF_VALUE_num(dn_sk) <= i) |
| 1201 | 1064 | break; | |
| 1202 | v=sk_CONF_VALUE_value(dn_sk,i); | 1065 | |
| 1203 | p=q=NULL; | 1066 | v = sk_CONF_VALUE_value(dn_sk, i); |
| 1204 | type=v->name; | 1067 | p = q = NULL; |
| 1205 | if(!check_end(type,"_min") || !check_end(type,"_max") || | 1068 | type = v->name; |
| 1206 | !check_end(type,"_default") || | 1069 | if (!check_end(type, "_min") || !check_end(type, "_max") || |
| 1207 | !check_end(type,"_value")) continue; | 1070 | !check_end(type, "_default") || |
| 1208 | /* Skip past any leading X. X: X, etc to allow for | 1071 | !check_end(type, "_value")) |
| 1209 | * multiple instances | 1072 | continue; |
| 1073 | /* | ||
| 1074 | * Skip past any leading X. X: X, etc to allow for | ||
| 1075 | * multiple instances | ||
| 1210 | */ | 1076 | */ |
| 1211 | for(p = v->name; *p ; p++) | 1077 | for (p = v->name; *p; p++) |
| 1212 | if ((*p == ':') || (*p == ',') || | 1078 | if ((*p == ':') || (*p == ',') || |
| 1213 | (*p == '.')) { | 1079 | (*p == '.')) { |
| 1214 | p++; | 1080 | p++; |
| 1215 | if(*p) type = p; | 1081 | if (*p) |
| 1082 | type = p; | ||
| 1216 | break; | 1083 | break; |
| 1217 | } | 1084 | } |
| 1218 | if (*type == '+') | 1085 | if (*type == '+') { |
| 1219 | { | ||
| 1220 | mval = -1; | 1086 | mval = -1; |
| 1221 | type++; | 1087 | type++; |
| 1222 | } | 1088 | } else |
| 1223 | else | ||
| 1224 | mval = 0; | 1089 | mval = 0; |
| 1225 | /* If OBJ not recognised ignore it */ | 1090 | /* If OBJ not recognised ignore it */ |
| 1226 | if ((nid=OBJ_txt2nid(type)) == NID_undef) goto start; | 1091 | if ((nid = OBJ_txt2nid(type)) == NID_undef) |
| 1227 | ret = snprintf(buf,sizeof buf,"%s_default",v->name); | 1092 | goto start; |
| 1228 | if (ret == -1 || ret >= sizeof(buf)) | 1093 | ret = snprintf(buf, sizeof buf, "%s_default", v->name); |
| 1229 | { | 1094 | if (ret == -1 || ret >= sizeof(buf)) { |
| 1230 | BIO_printf(bio_err,"Name '%s' too long\n",v->name); | 1095 | BIO_printf(bio_err, "Name '%s' too long\n", v->name); |
| 1231 | return 0; | 1096 | return 0; |
| 1232 | } | 1097 | } |
| 1233 | 1098 | if ((def = NCONF_get_string(req_conf, dn_sect, buf)) == NULL) { | |
| 1234 | if ((def=NCONF_get_string(req_conf,dn_sect,buf)) == NULL) | ||
| 1235 | { | ||
| 1236 | ERR_clear_error(); | 1099 | ERR_clear_error(); |
| 1237 | def=""; | 1100 | def = ""; |
| 1238 | } | 1101 | } |
| 1239 | 1102 | (void) snprintf(buf, sizeof buf, "%s_value", v->name); | |
| 1240 | (void) snprintf(buf,sizeof buf,"%s_value",v->name); | 1103 | if ((value = NCONF_get_string(req_conf, dn_sect, buf)) == NULL) { |
| 1241 | if ((value=NCONF_get_string(req_conf,dn_sect,buf)) == NULL) | ||
| 1242 | { | ||
| 1243 | ERR_clear_error(); | 1104 | ERR_clear_error(); |
| 1244 | value=NULL; | 1105 | value = NULL; |
| 1245 | } | 1106 | } |
| 1246 | 1107 | (void) snprintf(buf, sizeof buf, "%s_min", v->name); | |
| 1247 | (void) snprintf(buf,sizeof buf,"%s_min",v->name); | 1108 | if (!NCONF_get_number(req_conf, dn_sect, buf, &n_min)) { |
| 1248 | if (!NCONF_get_number(req_conf,dn_sect,buf, &n_min)) | ||
| 1249 | { | ||
| 1250 | ERR_clear_error(); | 1109 | ERR_clear_error(); |
| 1251 | n_min = -1; | 1110 | n_min = -1; |
| 1252 | } | 1111 | } |
| 1253 | 1112 | (void) snprintf(buf, sizeof buf, "%s_max", v->name); | |
| 1254 | (void) snprintf(buf,sizeof buf,"%s_max",v->name); | 1113 | if (!NCONF_get_number(req_conf, dn_sect, buf, &n_max)) { |
| 1255 | if (!NCONF_get_number(req_conf,dn_sect,buf, &n_max)) | ||
| 1256 | { | ||
| 1257 | ERR_clear_error(); | 1114 | ERR_clear_error(); |
| 1258 | n_max = -1; | 1115 | n_max = -1; |
| 1259 | } | ||
| 1260 | |||
| 1261 | if (!add_DN_object(subj,v->value,def,value,nid, | ||
| 1262 | n_min,n_max, chtype, mval)) | ||
| 1263 | return 0; | ||
| 1264 | } | 1116 | } |
| 1265 | if (X509_NAME_entry_count(subj) == 0) | 1117 | if (!add_DN_object(subj, v->value, def, value, nid, |
| 1266 | { | 1118 | n_min, n_max, chtype, mval)) |
| 1267 | BIO_printf(bio_err,"error, no objects specified in config file\n"); | 1119 | return 0; |
| 1120 | } | ||
| 1121 | if (X509_NAME_entry_count(subj) == 0) { | ||
| 1122 | BIO_printf(bio_err, "error, no objects specified in config file\n"); | ||
| 1268 | return 0; | 1123 | return 0; |
| 1124 | } | ||
| 1125 | if (attribs) { | ||
| 1126 | if ((attr_sk != NULL) && (sk_CONF_VALUE_num(attr_sk) > 0) && (!batch)) { | ||
| 1127 | BIO_printf(bio_err, "\nPlease enter the following 'extra' attributes\n"); | ||
| 1128 | BIO_printf(bio_err, "to be sent with your certificate request\n"); | ||
| 1269 | } | 1129 | } |
| 1270 | 1130 | i = -1; | |
| 1271 | if (attribs) | 1131 | start2: for (;;) { |
| 1272 | { | ||
| 1273 | if ((attr_sk != NULL) && (sk_CONF_VALUE_num(attr_sk) > 0) && (!batch)) | ||
| 1274 | { | ||
| 1275 | BIO_printf(bio_err,"\nPlease enter the following 'extra' attributes\n"); | ||
| 1276 | BIO_printf(bio_err,"to be sent with your certificate request\n"); | ||
| 1277 | } | ||
| 1278 | |||
| 1279 | i= -1; | ||
| 1280 | start2: for (;;) | ||
| 1281 | { | ||
| 1282 | int ret; | 1132 | int ret; |
| 1283 | i++; | 1133 | i++; |
| 1284 | if ((attr_sk == NULL) || | 1134 | if ((attr_sk == NULL) || |
| 1285 | (sk_CONF_VALUE_num(attr_sk) <= i)) | 1135 | (sk_CONF_VALUE_num(attr_sk) <= i)) |
| 1286 | break; | 1136 | break; |
| 1287 | 1137 | ||
| 1288 | v=sk_CONF_VALUE_value(attr_sk,i); | 1138 | v = sk_CONF_VALUE_value(attr_sk, i); |
| 1289 | type=v->name; | 1139 | type = v->name; |
| 1290 | if ((nid=OBJ_txt2nid(type)) == NID_undef) | 1140 | if ((nid = OBJ_txt2nid(type)) == NID_undef) |
| 1291 | goto start2; | 1141 | goto start2; |
| 1292 | ret = snprintf(buf,sizeof buf,"%s_default",type); | 1142 | ret = snprintf(buf, sizeof buf, "%s_default", type); |
| 1293 | if (ret == -1 || ret >= sizeof(buf)) | 1143 | if (ret == -1 || ret >= sizeof(buf)) { |
| 1294 | { | 1144 | BIO_printf(bio_err, "Name '%s' too long\n", v->name); |
| 1295 | BIO_printf(bio_err,"Name '%s' too long\n",v->name); | 1145 | return 0; |
| 1296 | return 0; | 1146 | } |
| 1297 | } | 1147 | if ((def = NCONF_get_string(req_conf, attr_sect, buf)) |
| 1298 | 1148 | == NULL) { | |
| 1299 | if ((def=NCONF_get_string(req_conf,attr_sect,buf)) | ||
| 1300 | == NULL) | ||
| 1301 | { | ||
| 1302 | ERR_clear_error(); | 1149 | ERR_clear_error(); |
| 1303 | def=""; | 1150 | def = ""; |
| 1304 | } | 1151 | } |
| 1305 | 1152 | (void) snprintf(buf, sizeof buf, "%s_value", type); | |
| 1306 | 1153 | if ((value = NCONF_get_string(req_conf, attr_sect, buf)) | |
| 1307 | (void) snprintf(buf,sizeof buf,"%s_value",type); | 1154 | == NULL) { |
| 1308 | if ((value=NCONF_get_string(req_conf,attr_sect,buf)) | ||
| 1309 | == NULL) | ||
| 1310 | { | ||
| 1311 | ERR_clear_error(); | 1155 | ERR_clear_error(); |
| 1312 | value=NULL; | 1156 | value = NULL; |
| 1313 | } | 1157 | } |
| 1314 | 1158 | (void) snprintf(buf, sizeof buf, "%s_min", type); | |
| 1315 | (void) snprintf(buf,sizeof buf,"%s_min",type); | 1159 | if (!NCONF_get_number(req_conf, attr_sect, buf, &n_min)) { |
| 1316 | if (!NCONF_get_number(req_conf,attr_sect,buf, &n_min)) | ||
| 1317 | { | ||
| 1318 | ERR_clear_error(); | 1160 | ERR_clear_error(); |
| 1319 | n_min = -1; | 1161 | n_min = -1; |
| 1320 | } | 1162 | } |
| 1321 | 1163 | (void) snprintf(buf, sizeof buf, "%s_max", type); | |
| 1322 | (void) snprintf(buf,sizeof buf,"%s_max",type); | 1164 | if (!NCONF_get_number(req_conf, attr_sect, buf, &n_max)) { |
| 1323 | if (!NCONF_get_number(req_conf,attr_sect,buf, &n_max)) | ||
| 1324 | { | ||
| 1325 | ERR_clear_error(); | 1165 | ERR_clear_error(); |
| 1326 | n_max = -1; | 1166 | n_max = -1; |
| 1327 | } | 1167 | } |
| 1328 | |||
| 1329 | if (!add_attribute_object(req, | 1168 | if (!add_attribute_object(req, |
| 1330 | v->value,def,value,nid,n_min,n_max, chtype)) | 1169 | v->value, def, value, nid, n_min, n_max, chtype)) |
| 1331 | return 0; | 1170 | return 0; |
| 1332 | } | ||
| 1333 | } | 1171 | } |
| 1334 | } | 1172 | } |
| 1335 | else | 1173 | } else { |
| 1336 | { | 1174 | BIO_printf(bio_err, "No template, please set one up.\n"); |
| 1337 | BIO_printf(bio_err,"No template, please set one up.\n"); | ||
| 1338 | return 0; | 1175 | return 0; |
| 1339 | } | 1176 | } |
| 1340 | 1177 | ||
| 1341 | return 1; | 1178 | return 1; |
| 1342 | 1179 | ||
| 1343 | } | 1180 | } |
| 1344 | 1181 | ||
| 1345 | static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *dn_sk, | 1182 | static int |
| 1346 | STACK_OF(CONF_VALUE) *attr_sk, int attribs, unsigned long chtype) | 1183 | auto_info(X509_REQ * req, STACK_OF(CONF_VALUE) * dn_sk, |
| 1347 | { | 1184 | STACK_OF(CONF_VALUE) * attr_sk, int attribs, unsigned long chtype) |
| 1185 | { | ||
| 1348 | int i; | 1186 | int i; |
| 1349 | char *p,*q; | 1187 | char *p, *q; |
| 1350 | char *type; | 1188 | char *type; |
| 1351 | CONF_VALUE *v; | 1189 | CONF_VALUE *v; |
| 1352 | X509_NAME *subj; | 1190 | X509_NAME *subj; |
| 1353 | 1191 | ||
| 1354 | subj = X509_REQ_get_subject_name(req); | 1192 | subj = X509_REQ_get_subject_name(req); |
| 1355 | 1193 | ||
| 1356 | for (i = 0; i < sk_CONF_VALUE_num(dn_sk); i++) | 1194 | for (i = 0; i < sk_CONF_VALUE_num(dn_sk); i++) { |
| 1357 | { | ||
| 1358 | int mval; | 1195 | int mval; |
| 1359 | v=sk_CONF_VALUE_value(dn_sk,i); | 1196 | v = sk_CONF_VALUE_value(dn_sk, i); |
| 1360 | p=q=NULL; | 1197 | p = q = NULL; |
| 1361 | type=v->name; | 1198 | type = v->name; |
| 1362 | /* Skip past any leading X. X: X, etc to allow for | 1199 | /* |
| 1363 | * multiple instances | 1200 | * Skip past any leading X. X: X, etc to allow for multiple |
| 1201 | * instances | ||
| 1364 | */ | 1202 | */ |
| 1365 | for(p = v->name; *p ; p++) | 1203 | for (p = v->name; *p; p++) |
| 1366 | if ((*p == ':') || (*p == ',') || (*p == '.')) { | 1204 | if ((*p == ':') || (*p == ',') || (*p == '.')) { |
| 1367 | p++; | 1205 | p++; |
| 1368 | if(*p) type = p; | 1206 | if (*p) |
| 1207 | type = p; | ||
| 1369 | break; | 1208 | break; |
| 1370 | } | 1209 | } |
| 1371 | if (*p == '+') | 1210 | if (*p == '+') { |
| 1372 | { | ||
| 1373 | p++; | 1211 | p++; |
| 1374 | mval = -1; | 1212 | mval = -1; |
| 1375 | } | 1213 | } else |
| 1376 | else | ||
| 1377 | mval = 0; | 1214 | mval = 0; |
| 1378 | if (!X509_NAME_add_entry_by_txt(subj,type, chtype, | 1215 | if (!X509_NAME_add_entry_by_txt(subj, type, chtype, |
| 1379 | (unsigned char *) v->value,-1,-1,mval)) return 0; | 1216 | (unsigned char *) v->value, -1, -1, mval)) |
| 1217 | return 0; | ||
| 1380 | 1218 | ||
| 1381 | } | 1219 | } |
| 1382 | 1220 | ||
| 1383 | if (!X509_NAME_entry_count(subj)) | 1221 | if (!X509_NAME_entry_count(subj)) { |
| 1384 | { | 1222 | BIO_printf(bio_err, "error, no objects specified in config file\n"); |
| 1385 | BIO_printf(bio_err,"error, no objects specified in config file\n"); | 1223 | return 0; |
| 1386 | return 0; | ||
| 1387 | } | ||
| 1388 | if (attribs) | ||
| 1389 | { | ||
| 1390 | for (i = 0; i < sk_CONF_VALUE_num(attr_sk); i++) | ||
| 1391 | { | ||
| 1392 | v=sk_CONF_VALUE_value(attr_sk,i); | ||
| 1393 | if(!X509_REQ_add1_attr_by_txt(req, v->name, chtype, | ||
| 1394 | (unsigned char *)v->value, -1)) return 0; | ||
| 1395 | } | ||
| 1396 | } | ||
| 1397 | return 1; | ||
| 1398 | } | 1224 | } |
| 1225 | if (attribs) { | ||
| 1226 | for (i = 0; i < sk_CONF_VALUE_num(attr_sk); i++) { | ||
| 1227 | v = sk_CONF_VALUE_value(attr_sk, i); | ||
| 1228 | if (!X509_REQ_add1_attr_by_txt(req, v->name, chtype, | ||
| 1229 | (unsigned char *) v->value, -1)) | ||
| 1230 | return 0; | ||
| 1231 | } | ||
| 1232 | } | ||
| 1233 | return 1; | ||
| 1234 | } | ||
| 1399 | 1235 | ||
| 1400 | 1236 | ||
| 1401 | static int add_DN_object(X509_NAME *n, char *text, const char *def, char *value, | 1237 | static int |
| 1402 | int nid, int n_min, int n_max, unsigned long chtype, int mval) | 1238 | add_DN_object(X509_NAME * n, char *text, const char *def, char *value, |
| 1403 | { | 1239 | int nid, int n_min, int n_max, unsigned long chtype, int mval) |
| 1404 | int i,ret=0; | 1240 | { |
| 1241 | int i, ret = 0; | ||
| 1405 | char buf[1024]; | 1242 | char buf[1024]; |
| 1406 | start: | 1243 | start: |
| 1407 | if (!batch) BIO_printf(bio_err,"%s [%s]:",text,def); | 1244 | if (!batch) |
| 1408 | (void)BIO_flush(bio_err); | 1245 | BIO_printf(bio_err, "%s [%s]:", text, def); |
| 1409 | if(value != NULL) | 1246 | (void) BIO_flush(bio_err); |
| 1410 | { | 1247 | if (value != NULL) { |
| 1411 | BUF_strlcpy(buf,value,sizeof buf); | 1248 | BUF_strlcpy(buf, value, sizeof buf); |
| 1412 | BUF_strlcat(buf,"\n",sizeof buf); | 1249 | BUF_strlcat(buf, "\n", sizeof buf); |
| 1413 | BIO_printf(bio_err,"%s\n",value); | 1250 | BIO_printf(bio_err, "%s\n", value); |
| 1414 | } | 1251 | } else { |
| 1415 | else | 1252 | buf[0] = '\0'; |
| 1416 | { | 1253 | if (!batch) { |
| 1417 | buf[0]='\0'; | 1254 | if (!fgets(buf, sizeof buf, stdin)) |
| 1418 | if (!batch) | ||
| 1419 | { | ||
| 1420 | if (!fgets(buf,sizeof buf,stdin)) | ||
| 1421 | return 0; | 1255 | return 0; |
| 1422 | } | 1256 | } else { |
| 1423 | else | ||
| 1424 | { | ||
| 1425 | buf[0] = '\n'; | 1257 | buf[0] = '\n'; |
| 1426 | buf[1] = '\0'; | 1258 | buf[1] = '\0'; |
| 1427 | } | ||
| 1428 | } | 1259 | } |
| 1260 | } | ||
| 1429 | 1261 | ||
| 1430 | if (buf[0] == '\0') return(0); | 1262 | if (buf[0] == '\0') |
| 1431 | else if (buf[0] == '\n') | 1263 | return (0); |
| 1432 | { | 1264 | else if (buf[0] == '\n') { |
| 1433 | if ((def == NULL) || (def[0] == '\0')) | 1265 | if ((def == NULL) || (def[0] == '\0')) |
| 1434 | return(1); | 1266 | return (1); |
| 1435 | BUF_strlcpy(buf,def,sizeof buf); | 1267 | BUF_strlcpy(buf, def, sizeof buf); |
| 1436 | BUF_strlcat(buf,"\n",sizeof buf); | 1268 | BUF_strlcat(buf, "\n", sizeof buf); |
| 1437 | } | 1269 | } else if ((buf[0] == '.') && (buf[1] == '\n')) |
| 1438 | else if ((buf[0] == '.') && (buf[1] == '\n')) return(1); | 1270 | return (1); |
| 1439 | 1271 | ||
| 1440 | i=strlen(buf); | 1272 | i = strlen(buf); |
| 1441 | if (buf[i-1] != '\n') | 1273 | if (buf[i - 1] != '\n') { |
| 1442 | { | 1274 | BIO_printf(bio_err, "weird input :-(\n"); |
| 1443 | BIO_printf(bio_err,"weird input :-(\n"); | 1275 | return (0); |
| 1444 | return(0); | ||
| 1445 | } | ||
| 1446 | buf[--i]='\0'; | ||
| 1447 | if(!req_check_len(i, n_min, n_max)) goto start; | ||
| 1448 | if (!X509_NAME_add_entry_by_NID(n,nid, chtype, | ||
| 1449 | (unsigned char *) buf, -1,-1,mval)) goto err; | ||
| 1450 | ret=1; | ||
| 1451 | err: | ||
| 1452 | return(ret); | ||
| 1453 | } | 1276 | } |
| 1277 | buf[--i] = '\0'; | ||
| 1278 | if (!req_check_len(i, n_min, n_max)) | ||
| 1279 | goto start; | ||
| 1280 | if (!X509_NAME_add_entry_by_NID(n, nid, chtype, | ||
| 1281 | (unsigned char *) buf, -1, -1, mval)) | ||
| 1282 | goto err; | ||
| 1283 | ret = 1; | ||
| 1284 | err: | ||
| 1285 | return (ret); | ||
| 1286 | } | ||
| 1454 | 1287 | ||
| 1455 | static int add_attribute_object(X509_REQ *req, char *text, const char *def, | 1288 | static int |
| 1456 | char *value, int nid, int n_min, | 1289 | add_attribute_object(X509_REQ * req, char *text, const char *def, |
| 1457 | int n_max, unsigned long chtype) | 1290 | char *value, int nid, int n_min, |
| 1458 | { | 1291 | int n_max, unsigned long chtype) |
| 1292 | { | ||
| 1459 | int i; | 1293 | int i; |
| 1460 | static char buf[1024]; | 1294 | static char buf[1024]; |
| 1461 | 1295 | ||
| 1462 | start: | 1296 | start: |
| 1463 | if (!batch) BIO_printf(bio_err,"%s [%s]:",text,def); | 1297 | if (!batch) |
| 1464 | (void)BIO_flush(bio_err); | 1298 | BIO_printf(bio_err, "%s [%s]:", text, def); |
| 1465 | if (value != NULL) | 1299 | (void) BIO_flush(bio_err); |
| 1466 | { | 1300 | if (value != NULL) { |
| 1467 | BUF_strlcpy(buf,value,sizeof buf); | 1301 | BUF_strlcpy(buf, value, sizeof buf); |
| 1468 | BUF_strlcat(buf,"\n",sizeof buf); | 1302 | BUF_strlcat(buf, "\n", sizeof buf); |
| 1469 | BIO_printf(bio_err,"%s\n",value); | 1303 | BIO_printf(bio_err, "%s\n", value); |
| 1470 | } | 1304 | } else { |
| 1471 | else | 1305 | buf[0] = '\0'; |
| 1472 | { | 1306 | if (!batch) { |
| 1473 | buf[0]='\0'; | 1307 | if (!fgets(buf, sizeof buf, stdin)) |
| 1474 | if (!batch) | ||
| 1475 | { | ||
| 1476 | if (!fgets(buf,sizeof buf,stdin)) | ||
| 1477 | return 0; | 1308 | return 0; |
| 1478 | } | 1309 | } else { |
| 1479 | else | ||
| 1480 | { | ||
| 1481 | buf[0] = '\n'; | 1310 | buf[0] = '\n'; |
| 1482 | buf[1] = '\0'; | 1311 | buf[1] = '\0'; |
| 1483 | } | ||
| 1484 | } | 1312 | } |
| 1313 | } | ||
| 1485 | 1314 | ||
| 1486 | if (buf[0] == '\0') return(0); | 1315 | if (buf[0] == '\0') |
| 1487 | else if (buf[0] == '\n') | 1316 | return (0); |
| 1488 | { | 1317 | else if (buf[0] == '\n') { |
| 1489 | if ((def == NULL) || (def[0] == '\0')) | 1318 | if ((def == NULL) || (def[0] == '\0')) |
| 1490 | return(1); | 1319 | return (1); |
| 1491 | BUF_strlcpy(buf,def,sizeof buf); | 1320 | BUF_strlcpy(buf, def, sizeof buf); |
| 1492 | BUF_strlcat(buf,"\n",sizeof buf); | 1321 | BUF_strlcat(buf, "\n", sizeof buf); |
| 1493 | } | 1322 | } else if ((buf[0] == '.') && (buf[1] == '\n')) |
| 1494 | else if ((buf[0] == '.') && (buf[1] == '\n')) return(1); | 1323 | return (1); |
| 1495 | 1324 | ||
| 1496 | i=strlen(buf); | 1325 | i = strlen(buf); |
| 1497 | if (buf[i-1] != '\n') | 1326 | if (buf[i - 1] != '\n') { |
| 1498 | { | 1327 | BIO_printf(bio_err, "weird input :-(\n"); |
| 1499 | BIO_printf(bio_err,"weird input :-(\n"); | 1328 | return (0); |
| 1500 | return(0); | 1329 | } |
| 1501 | } | 1330 | buf[--i] = '\0'; |
| 1502 | buf[--i]='\0'; | 1331 | if (!req_check_len(i, n_min, n_max)) |
| 1503 | if(!req_check_len(i, n_min, n_max)) goto start; | 1332 | goto start; |
| 1504 | 1333 | ||
| 1505 | if(!X509_REQ_add1_attr_by_NID(req, nid, chtype, | 1334 | if (!X509_REQ_add1_attr_by_NID(req, nid, chtype, |
| 1506 | (unsigned char *)buf, -1)) { | 1335 | (unsigned char *) buf, -1)) { |
| 1507 | BIO_printf(bio_err, "Error adding attribute\n"); | 1336 | BIO_printf(bio_err, "Error adding attribute\n"); |
| 1508 | ERR_print_errors(bio_err); | 1337 | ERR_print_errors(bio_err); |
| 1509 | goto err; | 1338 | goto err; |
| 1510 | } | 1339 | } |
| 1511 | 1340 | return (1); | |
| 1512 | return(1); | ||
| 1513 | err: | 1341 | err: |
| 1514 | return(0); | 1342 | return (0); |
| 1515 | } | 1343 | } |
| 1516 | 1344 | ||
| 1517 | static int req_check_len(int len, int n_min, int n_max) | 1345 | static int |
| 1518 | { | 1346 | req_check_len(int len, int n_min, int n_max) |
| 1519 | if ((n_min > 0) && (len < n_min)) | 1347 | { |
| 1520 | { | 1348 | if ((n_min > 0) && (len < n_min)) { |
| 1521 | BIO_printf(bio_err,"string is too short, it needs to be at least %d bytes long\n",n_min); | 1349 | BIO_printf(bio_err, "string is too short, it needs to be at least %d bytes long\n", n_min); |
| 1522 | return(0); | 1350 | return (0); |
| 1523 | } | 1351 | } |
| 1524 | if ((n_max >= 0) && (len > n_max)) | 1352 | if ((n_max >= 0) && (len > n_max)) { |
| 1525 | { | 1353 | BIO_printf(bio_err, "string is too long, it needs to be less than %d bytes long\n", n_max); |
| 1526 | BIO_printf(bio_err,"string is too long, it needs to be less than %d bytes long\n",n_max); | 1354 | return (0); |
| 1527 | return(0); | ||
| 1528 | } | ||
| 1529 | return(1); | ||
| 1530 | } | 1355 | } |
| 1356 | return (1); | ||
| 1357 | } | ||
| 1531 | 1358 | ||
| 1532 | /* Check if the end of a string matches 'end' */ | 1359 | /* Check if the end of a string matches 'end' */ |
| 1533 | static int check_end(const char *str, const char *end) | 1360 | static int |
| 1361 | check_end(const char *str, const char *end) | ||
| 1534 | { | 1362 | { |
| 1535 | int elen, slen; | 1363 | int elen, slen; |
| 1536 | const char *tmp; | 1364 | const char *tmp; |
| 1537 | elen = strlen(end); | 1365 | elen = strlen(end); |
| 1538 | slen = strlen(str); | 1366 | slen = strlen(str); |
| 1539 | if(elen > slen) return 1; | 1367 | if (elen > slen) |
| 1368 | return 1; | ||
| 1540 | tmp = str + slen - elen; | 1369 | tmp = str + slen - elen; |
| 1541 | return strcmp(tmp, end); | 1370 | return strcmp(tmp, end); |
| 1542 | } | 1371 | } |
| 1543 | 1372 | ||
| 1544 | static EVP_PKEY_CTX *set_keygen_ctx(BIO *err, const char *gstr, int *pkey_type, | 1373 | static EVP_PKEY_CTX * |
| 1545 | long *pkeylen, char **palgnam, | 1374 | set_keygen_ctx(BIO * err, const char *gstr, int *pkey_type, |
| 1546 | ENGINE *keygen_engine) | 1375 | long *pkeylen, char **palgnam, |
| 1547 | { | 1376 | ENGINE * keygen_engine) |
| 1377 | { | ||
| 1548 | EVP_PKEY_CTX *gctx = NULL; | 1378 | EVP_PKEY_CTX *gctx = NULL; |
| 1549 | EVP_PKEY *param = NULL; | 1379 | EVP_PKEY *param = NULL; |
| 1550 | long keylen = -1; | 1380 | long keylen = -1; |
| 1551 | BIO *pbio = NULL; | 1381 | BIO *pbio = NULL; |
| 1552 | const char *paramfile = NULL; | 1382 | const char *paramfile = NULL; |
| 1553 | 1383 | ||
| 1554 | if (gstr == NULL) | 1384 | if (gstr == NULL) { |
| 1555 | { | ||
| 1556 | *pkey_type = EVP_PKEY_RSA; | 1385 | *pkey_type = EVP_PKEY_RSA; |
| 1557 | keylen = *pkeylen; | 1386 | keylen = *pkeylen; |
| 1558 | } | 1387 | } else if (gstr[0] >= '0' && gstr[0] <= '9') { |
| 1559 | else if (gstr[0] >= '0' && gstr[0] <= '9') | ||
| 1560 | { | ||
| 1561 | *pkey_type = EVP_PKEY_RSA; | 1388 | *pkey_type = EVP_PKEY_RSA; |
| 1562 | keylen = atol(gstr); | 1389 | keylen = atol(gstr); |
| 1563 | *pkeylen = keylen; | 1390 | *pkeylen = keylen; |
| 1564 | } | 1391 | } else if (!strncmp(gstr, "param:", 6)) |
| 1565 | else if (!strncmp(gstr, "param:", 6)) | ||
| 1566 | paramfile = gstr + 6; | 1392 | paramfile = gstr + 6; |
| 1567 | else | 1393 | else { |
| 1568 | { | ||
| 1569 | const char *p = strchr(gstr, ':'); | 1394 | const char *p = strchr(gstr, ':'); |
| 1570 | int len; | 1395 | int len; |
| 1571 | ENGINE *tmpeng; | 1396 | ENGINE *tmpeng; |
| @@ -1575,178 +1400,160 @@ static EVP_PKEY_CTX *set_keygen_ctx(BIO *err, const char *gstr, int *pkey_type, | |||
| 1575 | len = p - gstr; | 1400 | len = p - gstr; |
| 1576 | else | 1401 | else |
| 1577 | len = strlen(gstr); | 1402 | len = strlen(gstr); |
| 1578 | /* The lookup of a the string will cover all engines so | 1403 | /* |
| 1579 | * keep a note of the implementation. | 1404 | * The lookup of a the string will cover all engines so keep |
| 1405 | * a note of the implementation. | ||
| 1580 | */ | 1406 | */ |
| 1581 | 1407 | ||
| 1582 | ameth = EVP_PKEY_asn1_find_str(&tmpeng, gstr, len); | 1408 | ameth = EVP_PKEY_asn1_find_str(&tmpeng, gstr, len); |
| 1583 | 1409 | ||
| 1584 | if (!ameth) | 1410 | if (!ameth) { |
| 1585 | { | ||
| 1586 | BIO_printf(err, "Unknown algorithm %.*s\n", len, gstr); | 1411 | BIO_printf(err, "Unknown algorithm %.*s\n", len, gstr); |
| 1587 | return NULL; | 1412 | return NULL; |
| 1588 | } | 1413 | } |
| 1589 | |||
| 1590 | EVP_PKEY_asn1_get0_info(NULL, pkey_type, NULL, NULL, NULL, | 1414 | EVP_PKEY_asn1_get0_info(NULL, pkey_type, NULL, NULL, NULL, |
| 1591 | ameth); | 1415 | ameth); |
| 1592 | #ifndef OPENSSL_NO_ENGINE | 1416 | #ifndef OPENSSL_NO_ENGINE |
| 1593 | if (tmpeng) | 1417 | if (tmpeng) |
| 1594 | ENGINE_finish(tmpeng); | 1418 | ENGINE_finish(tmpeng); |
| 1595 | #endif | 1419 | #endif |
| 1596 | if (*pkey_type == EVP_PKEY_RSA) | 1420 | if (*pkey_type == EVP_PKEY_RSA) { |
| 1597 | { | 1421 | if (p) { |
| 1598 | if (p) | ||
| 1599 | { | ||
| 1600 | keylen = atol(p + 1); | 1422 | keylen = atol(p + 1); |
| 1601 | *pkeylen = keylen; | 1423 | *pkeylen = keylen; |
| 1602 | } | 1424 | } else |
| 1603 | else | ||
| 1604 | keylen = *pkeylen; | 1425 | keylen = *pkeylen; |
| 1605 | } | 1426 | } else if (p) |
| 1606 | else if (p) | ||
| 1607 | paramfile = p + 1; | 1427 | paramfile = p + 1; |
| 1608 | } | 1428 | } |
| 1609 | 1429 | ||
| 1610 | if (paramfile) | 1430 | if (paramfile) { |
| 1611 | { | ||
| 1612 | pbio = BIO_new_file(paramfile, "r"); | 1431 | pbio = BIO_new_file(paramfile, "r"); |
| 1613 | if (!pbio) | 1432 | if (!pbio) { |
| 1614 | { | ||
| 1615 | BIO_printf(err, "Can't open parameter file %s\n", | 1433 | BIO_printf(err, "Can't open parameter file %s\n", |
| 1616 | paramfile); | 1434 | paramfile); |
| 1617 | return NULL; | 1435 | return NULL; |
| 1618 | } | 1436 | } |
| 1619 | param = PEM_read_bio_Parameters(pbio, NULL); | 1437 | param = PEM_read_bio_Parameters(pbio, NULL); |
| 1620 | 1438 | ||
| 1621 | if (!param) | 1439 | if (!param) { |
| 1622 | { | ||
| 1623 | X509 *x; | 1440 | X509 *x; |
| 1624 | (void)BIO_reset(pbio); | 1441 | (void) BIO_reset(pbio); |
| 1625 | x = PEM_read_bio_X509(pbio, NULL, NULL, NULL); | 1442 | x = PEM_read_bio_X509(pbio, NULL, NULL, NULL); |
| 1626 | if (x) | 1443 | if (x) { |
| 1627 | { | ||
| 1628 | param = X509_get_pubkey(x); | 1444 | param = X509_get_pubkey(x); |
| 1629 | X509_free(x); | 1445 | X509_free(x); |
| 1630 | } | ||
| 1631 | } | 1446 | } |
| 1632 | 1447 | } | |
| 1633 | BIO_free(pbio); | 1448 | BIO_free(pbio); |
| 1634 | 1449 | ||
| 1635 | if (!param) | 1450 | if (!param) { |
| 1636 | { | ||
| 1637 | BIO_printf(err, "Error reading parameter file %s\n", | 1451 | BIO_printf(err, "Error reading parameter file %s\n", |
| 1638 | paramfile); | 1452 | paramfile); |
| 1639 | return NULL; | 1453 | return NULL; |
| 1640 | } | 1454 | } |
| 1641 | if (*pkey_type == -1) | 1455 | if (*pkey_type == -1) |
| 1642 | *pkey_type = EVP_PKEY_id(param); | 1456 | *pkey_type = EVP_PKEY_id(param); |
| 1643 | else if (*pkey_type != EVP_PKEY_base_id(param)) | 1457 | else if (*pkey_type != EVP_PKEY_base_id(param)) { |
| 1644 | { | ||
| 1645 | BIO_printf(err, "Key Type does not match parameters\n"); | 1458 | BIO_printf(err, "Key Type does not match parameters\n"); |
| 1646 | EVP_PKEY_free(param); | 1459 | EVP_PKEY_free(param); |
| 1647 | return NULL; | 1460 | return NULL; |
| 1648 | } | ||
| 1649 | } | 1461 | } |
| 1650 | 1462 | } | |
| 1651 | if (palgnam) | 1463 | if (palgnam) { |
| 1652 | { | ||
| 1653 | const EVP_PKEY_ASN1_METHOD *ameth; | 1464 | const EVP_PKEY_ASN1_METHOD *ameth; |
| 1654 | ENGINE *tmpeng; | 1465 | ENGINE *tmpeng; |
| 1655 | const char *anam; | 1466 | const char *anam; |
| 1656 | ameth = EVP_PKEY_asn1_find(&tmpeng, *pkey_type); | 1467 | ameth = EVP_PKEY_asn1_find(&tmpeng, *pkey_type); |
| 1657 | if (!ameth) | 1468 | if (!ameth) { |
| 1658 | { | ||
| 1659 | BIO_puts(err, "Internal error: can't find key algorithm\n"); | 1469 | BIO_puts(err, "Internal error: can't find key algorithm\n"); |
| 1660 | return NULL; | 1470 | return NULL; |
| 1661 | } | 1471 | } |
| 1662 | EVP_PKEY_asn1_get0_info(NULL, NULL, NULL, NULL, &anam, ameth); | 1472 | EVP_PKEY_asn1_get0_info(NULL, NULL, NULL, NULL, &anam, ameth); |
| 1663 | *palgnam = BUF_strdup(anam); | 1473 | *palgnam = BUF_strdup(anam); |
| 1664 | #ifndef OPENSSL_NO_ENGINE | 1474 | #ifndef OPENSSL_NO_ENGINE |
| 1665 | if (tmpeng) | 1475 | if (tmpeng) |
| 1666 | ENGINE_finish(tmpeng); | 1476 | ENGINE_finish(tmpeng); |
| 1667 | #endif | 1477 | #endif |
| 1668 | } | 1478 | } |
| 1669 | 1479 | if (param) { | |
| 1670 | if (param) | ||
| 1671 | { | ||
| 1672 | gctx = EVP_PKEY_CTX_new(param, keygen_engine); | 1480 | gctx = EVP_PKEY_CTX_new(param, keygen_engine); |
| 1673 | *pkeylen = EVP_PKEY_bits(param); | 1481 | *pkeylen = EVP_PKEY_bits(param); |
| 1674 | EVP_PKEY_free(param); | 1482 | EVP_PKEY_free(param); |
| 1675 | } | 1483 | } else |
| 1676 | else | ||
| 1677 | gctx = EVP_PKEY_CTX_new_id(*pkey_type, keygen_engine); | 1484 | gctx = EVP_PKEY_CTX_new_id(*pkey_type, keygen_engine); |
| 1678 | 1485 | ||
| 1679 | if (!gctx) | 1486 | if (!gctx) { |
| 1680 | { | ||
| 1681 | BIO_puts(err, "Error allocating keygen context\n"); | 1487 | BIO_puts(err, "Error allocating keygen context\n"); |
| 1682 | ERR_print_errors(err); | 1488 | ERR_print_errors(err); |
| 1683 | return NULL; | 1489 | return NULL; |
| 1684 | } | 1490 | } |
| 1685 | 1491 | if (EVP_PKEY_keygen_init(gctx) <= 0) { | |
| 1686 | if (EVP_PKEY_keygen_init(gctx) <= 0) | ||
| 1687 | { | ||
| 1688 | BIO_puts(err, "Error initializing keygen context\n"); | 1492 | BIO_puts(err, "Error initializing keygen context\n"); |
| 1689 | ERR_print_errors(err); | 1493 | ERR_print_errors(err); |
| 1690 | return NULL; | 1494 | return NULL; |
| 1691 | } | 1495 | } |
| 1692 | #ifndef OPENSSL_NO_RSA | 1496 | #ifndef OPENSSL_NO_RSA |
| 1693 | if ((*pkey_type == EVP_PKEY_RSA) && (keylen != -1)) | 1497 | if ((*pkey_type == EVP_PKEY_RSA) && (keylen != -1)) { |
| 1694 | { | 1498 | if (EVP_PKEY_CTX_set_rsa_keygen_bits(gctx, keylen) <= 0) { |
| 1695 | if (EVP_PKEY_CTX_set_rsa_keygen_bits(gctx, keylen) <= 0) | ||
| 1696 | { | ||
| 1697 | BIO_puts(err, "Error setting RSA keysize\n"); | 1499 | BIO_puts(err, "Error setting RSA keysize\n"); |
| 1698 | ERR_print_errors(err); | 1500 | ERR_print_errors(err); |
| 1699 | EVP_PKEY_CTX_free(gctx); | 1501 | EVP_PKEY_CTX_free(gctx); |
| 1700 | return NULL; | 1502 | return NULL; |
| 1701 | } | ||
| 1702 | } | 1503 | } |
| 1504 | } | ||
| 1703 | #endif | 1505 | #endif |
| 1704 | 1506 | ||
| 1705 | return gctx; | 1507 | return gctx; |
| 1706 | } | 1508 | } |
| 1707 | 1509 | ||
| 1708 | static int genpkey_cb(EVP_PKEY_CTX *ctx) | 1510 | static int |
| 1709 | { | 1511 | genpkey_cb(EVP_PKEY_CTX * ctx) |
| 1710 | char c='*'; | 1512 | { |
| 1513 | char c = '*'; | ||
| 1711 | BIO *b = EVP_PKEY_CTX_get_app_data(ctx); | 1514 | BIO *b = EVP_PKEY_CTX_get_app_data(ctx); |
| 1712 | int p; | 1515 | int p; |
| 1713 | p = EVP_PKEY_CTX_get_keygen_info(ctx, 0); | 1516 | p = EVP_PKEY_CTX_get_keygen_info(ctx, 0); |
| 1714 | if (p == 0) c='.'; | 1517 | if (p == 0) |
| 1715 | if (p == 1) c='+'; | 1518 | c = '.'; |
| 1716 | if (p == 2) c='*'; | 1519 | if (p == 1) |
| 1717 | if (p == 3) c='\n'; | 1520 | c = '+'; |
| 1718 | BIO_write(b,&c,1); | 1521 | if (p == 2) |
| 1719 | (void)BIO_flush(b); | 1522 | c = '*'; |
| 1523 | if (p == 3) | ||
| 1524 | c = '\n'; | ||
| 1525 | BIO_write(b, &c, 1); | ||
| 1526 | (void) BIO_flush(b); | ||
| 1720 | #ifdef LINT | 1527 | #ifdef LINT |
| 1721 | p=n; | 1528 | p = n; |
| 1722 | #endif | 1529 | #endif |
| 1723 | return 1; | 1530 | return 1; |
| 1724 | } | 1531 | } |
| 1725 | 1532 | ||
| 1726 | static int do_sign_init(BIO *err, EVP_MD_CTX *ctx, EVP_PKEY *pkey, | 1533 | static int |
| 1727 | const EVP_MD *md, STACK_OF(OPENSSL_STRING) *sigopts) | 1534 | do_sign_init(BIO * err, EVP_MD_CTX * ctx, EVP_PKEY * pkey, |
| 1728 | { | 1535 | const EVP_MD * md, STACK_OF(OPENSSL_STRING) * sigopts) |
| 1536 | { | ||
| 1729 | EVP_PKEY_CTX *pkctx = NULL; | 1537 | EVP_PKEY_CTX *pkctx = NULL; |
| 1730 | int i; | 1538 | int i; |
| 1731 | EVP_MD_CTX_init(ctx); | 1539 | EVP_MD_CTX_init(ctx); |
| 1732 | if (!EVP_DigestSignInit(ctx, &pkctx, md, NULL, pkey)) | 1540 | if (!EVP_DigestSignInit(ctx, &pkctx, md, NULL, pkey)) |
| 1733 | return 0; | 1541 | return 0; |
| 1734 | for (i = 0; i < sk_OPENSSL_STRING_num(sigopts); i++) | 1542 | for (i = 0; i < sk_OPENSSL_STRING_num(sigopts); i++) { |
| 1735 | { | ||
| 1736 | char *sigopt = sk_OPENSSL_STRING_value(sigopts, i); | 1543 | char *sigopt = sk_OPENSSL_STRING_value(sigopts, i); |
| 1737 | if (pkey_ctrl_string(pkctx, sigopt) <= 0) | 1544 | if (pkey_ctrl_string(pkctx, sigopt) <= 0) { |
| 1738 | { | ||
| 1739 | BIO_printf(err, "parameter error \"%s\"\n", sigopt); | 1545 | BIO_printf(err, "parameter error \"%s\"\n", sigopt); |
| 1740 | ERR_print_errors(bio_err); | 1546 | ERR_print_errors(bio_err); |
| 1741 | return 0; | 1547 | return 0; |
| 1742 | } | ||
| 1743 | } | 1548 | } |
| 1744 | return 1; | ||
| 1745 | } | 1549 | } |
| 1550 | return 1; | ||
| 1551 | } | ||
| 1746 | 1552 | ||
| 1747 | int do_X509_sign(BIO *err, X509 *x, EVP_PKEY *pkey, const EVP_MD *md, | 1553 | int |
| 1748 | STACK_OF(OPENSSL_STRING) *sigopts) | 1554 | do_X509_sign(BIO * err, X509 * x, EVP_PKEY * pkey, const EVP_MD * md, |
| 1749 | { | 1555 | STACK_OF(OPENSSL_STRING) * sigopts) |
| 1556 | { | ||
| 1750 | int rv; | 1557 | int rv; |
| 1751 | EVP_MD_CTX mctx; | 1558 | EVP_MD_CTX mctx; |
| 1752 | EVP_MD_CTX_init(&mctx); | 1559 | EVP_MD_CTX_init(&mctx); |
| @@ -1755,12 +1562,13 @@ int do_X509_sign(BIO *err, X509 *x, EVP_PKEY *pkey, const EVP_MD *md, | |||
| 1755 | rv = X509_sign_ctx(x, &mctx); | 1562 | rv = X509_sign_ctx(x, &mctx); |
| 1756 | EVP_MD_CTX_cleanup(&mctx); | 1563 | EVP_MD_CTX_cleanup(&mctx); |
| 1757 | return rv > 0 ? 1 : 0; | 1564 | return rv > 0 ? 1 : 0; |
| 1758 | } | 1565 | } |
| 1759 | 1566 | ||
| 1760 | 1567 | ||
| 1761 | int do_X509_REQ_sign(BIO *err, X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md, | 1568 | int |
| 1762 | STACK_OF(OPENSSL_STRING) *sigopts) | 1569 | do_X509_REQ_sign(BIO * err, X509_REQ * x, EVP_PKEY * pkey, const EVP_MD * md, |
| 1763 | { | 1570 | STACK_OF(OPENSSL_STRING) * sigopts) |
| 1571 | { | ||
| 1764 | int rv; | 1572 | int rv; |
| 1765 | EVP_MD_CTX mctx; | 1573 | EVP_MD_CTX mctx; |
| 1766 | EVP_MD_CTX_init(&mctx); | 1574 | EVP_MD_CTX_init(&mctx); |
| @@ -1769,13 +1577,14 @@ int do_X509_REQ_sign(BIO *err, X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md, | |||
| 1769 | rv = X509_REQ_sign_ctx(x, &mctx); | 1577 | rv = X509_REQ_sign_ctx(x, &mctx); |
| 1770 | EVP_MD_CTX_cleanup(&mctx); | 1578 | EVP_MD_CTX_cleanup(&mctx); |
| 1771 | return rv > 0 ? 1 : 0; | 1579 | return rv > 0 ? 1 : 0; |
| 1772 | } | 1580 | } |
| 1773 | 1581 | ||
| 1774 | 1582 | ||
| 1775 | 1583 | ||
| 1776 | int do_X509_CRL_sign(BIO *err, X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md, | 1584 | int |
| 1777 | STACK_OF(OPENSSL_STRING) *sigopts) | 1585 | do_X509_CRL_sign(BIO * err, X509_CRL * x, EVP_PKEY * pkey, const EVP_MD * md, |
| 1778 | { | 1586 | STACK_OF(OPENSSL_STRING) * sigopts) |
| 1587 | { | ||
| 1779 | int rv; | 1588 | int rv; |
| 1780 | EVP_MD_CTX mctx; | 1589 | EVP_MD_CTX mctx; |
| 1781 | EVP_MD_CTX_init(&mctx); | 1590 | EVP_MD_CTX_init(&mctx); |
| @@ -1784,6 +1593,4 @@ int do_X509_CRL_sign(BIO *err, X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md, | |||
| 1784 | rv = X509_CRL_sign_ctx(x, &mctx); | 1593 | rv = X509_CRL_sign_ctx(x, &mctx); |
| 1785 | EVP_MD_CTX_cleanup(&mctx); | 1594 | EVP_MD_CTX_cleanup(&mctx); |
| 1786 | return rv > 0 ? 1 : 0; | 1595 | return rv > 0 ? 1 : 0; |
| 1787 | } | 1596 | } |
| 1788 | |||
| 1789 | |||
diff --git a/src/lib/libssl/src/apps/rsa.c b/src/lib/libssl/src/apps/rsa.c index b367f23551..e3f4989aeb 100644 --- a/src/lib/libssl/src/apps/rsa.c +++ b/src/lib/libssl/src/apps/rsa.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written |
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). |
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. |
| 8 | * | 8 | * |
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as |
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions |
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, |
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation |
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms |
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). |
| 15 | * | 15 | * |
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in |
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. |
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution |
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. |
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or |
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. |
| 22 | * | 22 | * |
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without |
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions |
| 25 | * are met: | 25 | * are met: |
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" |
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library |
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). |
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from |
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: |
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" |
| 40 | * | 40 | * |
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. |
| 52 | * | 52 | * |
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or |
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be |
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence |
| @@ -97,312 +97,279 @@ | |||
| 97 | 97 | ||
| 98 | int MAIN(int, char **); | 98 | int MAIN(int, char **); |
| 99 | 99 | ||
| 100 | int MAIN(int argc, char **argv) | 100 | int |
| 101 | { | 101 | MAIN(int argc, char **argv) |
| 102 | { | ||
| 102 | ENGINE *e = NULL; | 103 | ENGINE *e = NULL; |
| 103 | int ret=1; | 104 | int ret = 1; |
| 104 | RSA *rsa=NULL; | 105 | RSA *rsa = NULL; |
| 105 | int i,badops=0, sgckey=0; | 106 | int i, badops = 0, sgckey = 0; |
| 106 | const EVP_CIPHER *enc=NULL; | 107 | const EVP_CIPHER *enc = NULL; |
| 107 | BIO *out=NULL; | 108 | BIO *out = NULL; |
| 108 | int informat,outformat,text=0,check=0,noout=0; | 109 | int informat, outformat, text = 0, check = 0, noout = 0; |
| 109 | int pubin = 0, pubout = 0; | 110 | int pubin = 0, pubout = 0; |
| 110 | char *infile,*outfile,*prog; | 111 | char *infile, *outfile, *prog; |
| 111 | char *passargin = NULL, *passargout = NULL; | 112 | char *passargin = NULL, *passargout = NULL; |
| 112 | char *passin = NULL, *passout = NULL; | 113 | char *passin = NULL, *passout = NULL; |
| 113 | #ifndef OPENSSL_NO_ENGINE | 114 | #ifndef OPENSSL_NO_ENGINE |
| 114 | char *engine=NULL; | 115 | char *engine = NULL; |
| 115 | #endif | 116 | #endif |
| 116 | int modulus=0; | 117 | int modulus = 0; |
| 117 | 118 | ||
| 118 | int pvk_encr = 2; | 119 | int pvk_encr = 2; |
| 119 | 120 | ||
| 120 | apps_startup(); | 121 | apps_startup(); |
| 121 | 122 | ||
| 122 | if (bio_err == NULL) | 123 | if (bio_err == NULL) |
| 123 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) | 124 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 124 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); | 125 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 125 | 126 | ||
| 126 | if (!load_config(bio_err, NULL)) | 127 | if (!load_config(bio_err, NULL)) |
| 127 | goto end; | 128 | goto end; |
| 128 | 129 | ||
| 129 | infile=NULL; | 130 | infile = NULL; |
| 130 | outfile=NULL; | 131 | outfile = NULL; |
| 131 | informat=FORMAT_PEM; | 132 | informat = FORMAT_PEM; |
| 132 | outformat=FORMAT_PEM; | 133 | outformat = FORMAT_PEM; |
| 133 | 134 | ||
| 134 | prog=argv[0]; | 135 | prog = argv[0]; |
| 135 | argc--; | 136 | argc--; |
| 136 | argv++; | 137 | argv++; |
| 137 | while (argc >= 1) | 138 | while (argc >= 1) { |
| 138 | { | 139 | if (strcmp(*argv, "-inform") == 0) { |
| 139 | if (strcmp(*argv,"-inform") == 0) | 140 | if (--argc < 1) |
| 140 | { | 141 | goto bad; |
| 141 | if (--argc < 1) goto bad; | 142 | informat = str2fmt(*(++argv)); |
| 142 | informat=str2fmt(*(++argv)); | 143 | } else if (strcmp(*argv, "-outform") == 0) { |
| 143 | } | 144 | if (--argc < 1) |
| 144 | else if (strcmp(*argv,"-outform") == 0) | 145 | goto bad; |
| 145 | { | 146 | outformat = str2fmt(*(++argv)); |
| 146 | if (--argc < 1) goto bad; | 147 | } else if (strcmp(*argv, "-in") == 0) { |
| 147 | outformat=str2fmt(*(++argv)); | 148 | if (--argc < 1) |
| 148 | } | 149 | goto bad; |
| 149 | else if (strcmp(*argv,"-in") == 0) | 150 | infile = *(++argv); |
| 150 | { | 151 | } else if (strcmp(*argv, "-out") == 0) { |
| 151 | if (--argc < 1) goto bad; | 152 | if (--argc < 1) |
| 152 | infile= *(++argv); | 153 | goto bad; |
| 153 | } | 154 | outfile = *(++argv); |
| 154 | else if (strcmp(*argv,"-out") == 0) | 155 | } else if (strcmp(*argv, "-passin") == 0) { |
| 155 | { | 156 | if (--argc < 1) |
| 156 | if (--argc < 1) goto bad; | 157 | goto bad; |
| 157 | outfile= *(++argv); | 158 | passargin = *(++argv); |
| 158 | } | 159 | } else if (strcmp(*argv, "-passout") == 0) { |
| 159 | else if (strcmp(*argv,"-passin") == 0) | 160 | if (--argc < 1) |
| 160 | { | 161 | goto bad; |
| 161 | if (--argc < 1) goto bad; | 162 | passargout = *(++argv); |
| 162 | passargin= *(++argv); | 163 | } |
| 163 | } | ||
| 164 | else if (strcmp(*argv,"-passout") == 0) | ||
| 165 | { | ||
| 166 | if (--argc < 1) goto bad; | ||
| 167 | passargout= *(++argv); | ||
| 168 | } | ||
| 169 | #ifndef OPENSSL_NO_ENGINE | 164 | #ifndef OPENSSL_NO_ENGINE |
| 170 | else if (strcmp(*argv,"-engine") == 0) | 165 | else if (strcmp(*argv, "-engine") == 0) { |
| 171 | { | 166 | if (--argc < 1) |
| 172 | if (--argc < 1) goto bad; | 167 | goto bad; |
| 173 | engine= *(++argv); | 168 | engine = *(++argv); |
| 174 | } | 169 | } |
| 175 | #endif | 170 | #endif |
| 176 | else if (strcmp(*argv,"-sgckey") == 0) | 171 | else if (strcmp(*argv, "-sgckey") == 0) |
| 177 | sgckey=1; | 172 | sgckey = 1; |
| 178 | else if (strcmp(*argv,"-pubin") == 0) | 173 | else if (strcmp(*argv, "-pubin") == 0) |
| 179 | pubin=1; | 174 | pubin = 1; |
| 180 | else if (strcmp(*argv,"-pubout") == 0) | 175 | else if (strcmp(*argv, "-pubout") == 0) |
| 181 | pubout=1; | 176 | pubout = 1; |
| 182 | else if (strcmp(*argv,"-RSAPublicKey_in") == 0) | 177 | else if (strcmp(*argv, "-RSAPublicKey_in") == 0) |
| 183 | pubin = 2; | 178 | pubin = 2; |
| 184 | else if (strcmp(*argv,"-RSAPublicKey_out") == 0) | 179 | else if (strcmp(*argv, "-RSAPublicKey_out") == 0) |
| 185 | pubout = 2; | 180 | pubout = 2; |
| 186 | else if (strcmp(*argv,"-pvk-strong") == 0) | 181 | else if (strcmp(*argv, "-pvk-strong") == 0) |
| 187 | pvk_encr=2; | 182 | pvk_encr = 2; |
| 188 | else if (strcmp(*argv,"-pvk-weak") == 0) | 183 | else if (strcmp(*argv, "-pvk-weak") == 0) |
| 189 | pvk_encr=1; | 184 | pvk_encr = 1; |
| 190 | else if (strcmp(*argv,"-pvk-none") == 0) | 185 | else if (strcmp(*argv, "-pvk-none") == 0) |
| 191 | pvk_encr=0; | 186 | pvk_encr = 0; |
| 192 | else if (strcmp(*argv,"-noout") == 0) | 187 | else if (strcmp(*argv, "-noout") == 0) |
| 193 | noout=1; | 188 | noout = 1; |
| 194 | else if (strcmp(*argv,"-text") == 0) | 189 | else if (strcmp(*argv, "-text") == 0) |
| 195 | text=1; | 190 | text = 1; |
| 196 | else if (strcmp(*argv,"-modulus") == 0) | 191 | else if (strcmp(*argv, "-modulus") == 0) |
| 197 | modulus=1; | 192 | modulus = 1; |
| 198 | else if (strcmp(*argv,"-check") == 0) | 193 | else if (strcmp(*argv, "-check") == 0) |
| 199 | check=1; | 194 | check = 1; |
| 200 | else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL) | 195 | else if ((enc = EVP_get_cipherbyname(&(argv[0][1]))) == NULL) { |
| 201 | { | 196 | BIO_printf(bio_err, "unknown option %s\n", *argv); |
| 202 | BIO_printf(bio_err,"unknown option %s\n",*argv); | 197 | badops = 1; |
| 203 | badops=1; | ||
| 204 | break; | 198 | break; |
| 205 | } | 199 | } |
| 206 | argc--; | 200 | argc--; |
| 207 | argv++; | 201 | argv++; |
| 208 | } | 202 | } |
| 209 | 203 | ||
| 210 | if (badops) | 204 | if (badops) { |
| 211 | { | ||
| 212 | bad: | 205 | bad: |
| 213 | BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog); | 206 | BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog); |
| 214 | BIO_printf(bio_err,"where options are\n"); | 207 | BIO_printf(bio_err, "where options are\n"); |
| 215 | BIO_printf(bio_err," -inform arg input format - one of DER NET PEM\n"); | 208 | BIO_printf(bio_err, " -inform arg input format - one of DER NET PEM\n"); |
| 216 | BIO_printf(bio_err," -outform arg output format - one of DER NET PEM\n"); | 209 | BIO_printf(bio_err, " -outform arg output format - one of DER NET PEM\n"); |
| 217 | BIO_printf(bio_err," -in arg input file\n"); | 210 | BIO_printf(bio_err, " -in arg input file\n"); |
| 218 | BIO_printf(bio_err," -sgckey Use IIS SGC key format\n"); | 211 | BIO_printf(bio_err, " -sgckey Use IIS SGC key format\n"); |
| 219 | BIO_printf(bio_err," -passin arg input file pass phrase source\n"); | 212 | BIO_printf(bio_err, " -passin arg input file pass phrase source\n"); |
| 220 | BIO_printf(bio_err," -out arg output file\n"); | 213 | BIO_printf(bio_err, " -out arg output file\n"); |
| 221 | BIO_printf(bio_err," -passout arg output file pass phrase source\n"); | 214 | BIO_printf(bio_err, " -passout arg output file pass phrase source\n"); |
| 222 | BIO_printf(bio_err," -des encrypt PEM output with cbc des\n"); | 215 | BIO_printf(bio_err, " -des encrypt PEM output with cbc des\n"); |
| 223 | BIO_printf(bio_err," -des3 encrypt PEM output with ede cbc des using 168 bit key\n"); | 216 | BIO_printf(bio_err, " -des3 encrypt PEM output with ede cbc des using 168 bit key\n"); |
| 224 | #ifndef OPENSSL_NO_IDEA | 217 | #ifndef OPENSSL_NO_IDEA |
| 225 | BIO_printf(bio_err," -idea encrypt PEM output with cbc idea\n"); | 218 | BIO_printf(bio_err, " -idea encrypt PEM output with cbc idea\n"); |
| 226 | #endif | 219 | #endif |
| 227 | #ifndef OPENSSL_NO_SEED | 220 | #ifndef OPENSSL_NO_SEED |
| 228 | BIO_printf(bio_err," -seed encrypt PEM output with cbc seed\n"); | 221 | BIO_printf(bio_err, " -seed encrypt PEM output with cbc seed\n"); |
| 229 | #endif | 222 | #endif |
| 230 | #ifndef OPENSSL_NO_AES | 223 | #ifndef OPENSSL_NO_AES |
| 231 | BIO_printf(bio_err," -aes128, -aes192, -aes256\n"); | 224 | BIO_printf(bio_err, " -aes128, -aes192, -aes256\n"); |
| 232 | BIO_printf(bio_err," encrypt PEM output with cbc aes\n"); | 225 | BIO_printf(bio_err, " encrypt PEM output with cbc aes\n"); |
| 233 | #endif | 226 | #endif |
| 234 | #ifndef OPENSSL_NO_CAMELLIA | 227 | #ifndef OPENSSL_NO_CAMELLIA |
| 235 | BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n"); | 228 | BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n"); |
| 236 | BIO_printf(bio_err," encrypt PEM output with cbc camellia\n"); | 229 | BIO_printf(bio_err, " encrypt PEM output with cbc camellia\n"); |
| 237 | #endif | 230 | #endif |
| 238 | BIO_printf(bio_err," -text print the key in text\n"); | 231 | BIO_printf(bio_err, " -text print the key in text\n"); |
| 239 | BIO_printf(bio_err," -noout don't print key out\n"); | 232 | BIO_printf(bio_err, " -noout don't print key out\n"); |
| 240 | BIO_printf(bio_err," -modulus print the RSA key modulus\n"); | 233 | BIO_printf(bio_err, " -modulus print the RSA key modulus\n"); |
| 241 | BIO_printf(bio_err," -check verify key consistency\n"); | 234 | BIO_printf(bio_err, " -check verify key consistency\n"); |
| 242 | BIO_printf(bio_err," -pubin expect a public key in input file\n"); | 235 | BIO_printf(bio_err, " -pubin expect a public key in input file\n"); |
| 243 | BIO_printf(bio_err," -pubout output a public key\n"); | 236 | BIO_printf(bio_err, " -pubout output a public key\n"); |
| 244 | #ifndef OPENSSL_NO_ENGINE | 237 | #ifndef OPENSSL_NO_ENGINE |
| 245 | BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n"); | 238 | BIO_printf(bio_err, " -engine e use engine e, possibly a hardware device.\n"); |
| 246 | #endif | 239 | #endif |
| 247 | goto end; | 240 | goto end; |
| 248 | } | 241 | } |
| 249 | |||
| 250 | ERR_load_crypto_strings(); | 242 | ERR_load_crypto_strings(); |
| 251 | 243 | ||
| 252 | #ifndef OPENSSL_NO_ENGINE | 244 | #ifndef OPENSSL_NO_ENGINE |
| 253 | e = setup_engine(bio_err, engine, 0); | 245 | e = setup_engine(bio_err, engine, 0); |
| 254 | #endif | 246 | #endif |
| 255 | 247 | ||
| 256 | if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { | 248 | if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { |
| 257 | BIO_printf(bio_err, "Error getting passwords\n"); | 249 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 258 | goto end; | 250 | goto end; |
| 259 | } | 251 | } |
| 260 | 252 | if (check && pubin) { | |
| 261 | if(check && pubin) { | ||
| 262 | BIO_printf(bio_err, "Only private keys can be checked\n"); | 253 | BIO_printf(bio_err, "Only private keys can be checked\n"); |
| 263 | goto end; | 254 | goto end; |
| 264 | } | 255 | } |
| 265 | 256 | out = BIO_new(BIO_s_file()); | |
| 266 | out=BIO_new(BIO_s_file()); | ||
| 267 | 257 | ||
| 268 | { | 258 | { |
| 269 | EVP_PKEY *pkey; | 259 | EVP_PKEY *pkey; |
| 270 | 260 | ||
| 271 | if (pubin) | 261 | if (pubin) { |
| 272 | { | 262 | int tmpformat = -1; |
| 273 | int tmpformat=-1; | 263 | if (pubin == 2) { |
| 274 | if (pubin == 2) | ||
| 275 | { | ||
| 276 | if (informat == FORMAT_PEM) | 264 | if (informat == FORMAT_PEM) |
| 277 | tmpformat = FORMAT_PEMRSA; | 265 | tmpformat = FORMAT_PEMRSA; |
| 278 | else if (informat == FORMAT_ASN1) | 266 | else if (informat == FORMAT_ASN1) |
| 279 | tmpformat = FORMAT_ASN1RSA; | 267 | tmpformat = FORMAT_ASN1RSA; |
| 280 | } | 268 | } else if (informat == FORMAT_NETSCAPE && sgckey) |
| 281 | else if (informat == FORMAT_NETSCAPE && sgckey) | ||
| 282 | tmpformat = FORMAT_IISSGC; | 269 | tmpformat = FORMAT_IISSGC; |
| 283 | else | 270 | else |
| 284 | tmpformat = informat; | 271 | tmpformat = informat; |
| 285 | 272 | ||
| 286 | pkey = load_pubkey(bio_err, infile, tmpformat, 1, | 273 | pkey = load_pubkey(bio_err, infile, tmpformat, 1, |
| 287 | passin, e, "Public Key"); | 274 | passin, e, "Public Key"); |
| 288 | } | 275 | } else |
| 289 | else | ||
| 290 | pkey = load_key(bio_err, infile, | 276 | pkey = load_key(bio_err, infile, |
| 291 | (informat == FORMAT_NETSCAPE && sgckey ? | 277 | (informat == FORMAT_NETSCAPE && sgckey ? |
| 292 | FORMAT_IISSGC : informat), 1, | 278 | FORMAT_IISSGC : informat), 1, |
| 293 | passin, e, "Private Key"); | 279 | passin, e, "Private Key"); |
| 294 | 280 | ||
| 295 | if (pkey != NULL) | 281 | if (pkey != NULL) |
| 296 | rsa = EVP_PKEY_get1_RSA(pkey); | 282 | rsa = EVP_PKEY_get1_RSA(pkey); |
| 297 | EVP_PKEY_free(pkey); | 283 | EVP_PKEY_free(pkey); |
| 298 | } | 284 | } |
| 299 | 285 | ||
| 300 | if (rsa == NULL) | 286 | if (rsa == NULL) { |
| 301 | { | ||
| 302 | ERR_print_errors(bio_err); | 287 | ERR_print_errors(bio_err); |
| 303 | goto end; | 288 | goto end; |
| 304 | } | 289 | } |
| 305 | 290 | if (outfile == NULL) { | |
| 306 | if (outfile == NULL) | 291 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 307 | { | 292 | } else { |
| 308 | BIO_set_fp(out,stdout,BIO_NOCLOSE); | 293 | if (BIO_write_filename(out, outfile) <= 0) { |
| 309 | } | ||
| 310 | else | ||
| 311 | { | ||
| 312 | if (BIO_write_filename(out,outfile) <= 0) | ||
| 313 | { | ||
| 314 | perror(outfile); | 294 | perror(outfile); |
| 315 | goto end; | 295 | goto end; |
| 316 | } | ||
| 317 | } | 296 | } |
| 297 | } | ||
| 318 | 298 | ||
| 319 | if (text) | 299 | if (text) |
| 320 | if (!RSA_print(out,rsa,0)) | 300 | if (!RSA_print(out, rsa, 0)) { |
| 321 | { | ||
| 322 | perror(outfile); | 301 | perror(outfile); |
| 323 | ERR_print_errors(bio_err); | 302 | ERR_print_errors(bio_err); |
| 324 | goto end; | 303 | goto end; |
| 325 | } | ||
| 326 | |||
| 327 | if (modulus) | ||
| 328 | { | ||
| 329 | BIO_printf(out,"Modulus="); | ||
| 330 | BN_print(out,rsa->n); | ||
| 331 | BIO_printf(out,"\n"); | ||
| 332 | } | 304 | } |
| 333 | 305 | if (modulus) { | |
| 334 | if (check) | 306 | BIO_printf(out, "Modulus="); |
| 335 | { | 307 | BN_print(out, rsa->n); |
| 308 | BIO_printf(out, "\n"); | ||
| 309 | } | ||
| 310 | if (check) { | ||
| 336 | int r = RSA_check_key(rsa); | 311 | int r = RSA_check_key(rsa); |
| 337 | 312 | ||
| 338 | if (r == 1) | 313 | if (r == 1) |
| 339 | BIO_printf(out,"RSA key ok\n"); | 314 | BIO_printf(out, "RSA key ok\n"); |
| 340 | else if (r == 0) | 315 | else if (r == 0) { |
| 341 | { | ||
| 342 | unsigned long err; | 316 | unsigned long err; |
| 343 | 317 | ||
| 344 | while ((err = ERR_peek_error()) != 0 && | 318 | while ((err = ERR_peek_error()) != 0 && |
| 345 | ERR_GET_LIB(err) == ERR_LIB_RSA && | 319 | ERR_GET_LIB(err) == ERR_LIB_RSA && |
| 346 | ERR_GET_FUNC(err) == RSA_F_RSA_CHECK_KEY && | 320 | ERR_GET_FUNC(err) == RSA_F_RSA_CHECK_KEY && |
| 347 | ERR_GET_REASON(err) != ERR_R_MALLOC_FAILURE) | 321 | ERR_GET_REASON(err) != ERR_R_MALLOC_FAILURE) { |
| 348 | { | ||
| 349 | BIO_printf(out, "RSA key error: %s\n", ERR_reason_error_string(err)); | 322 | BIO_printf(out, "RSA key error: %s\n", ERR_reason_error_string(err)); |
| 350 | ERR_get_error(); /* remove e from error stack */ | 323 | ERR_get_error(); /* remove e from error |
| 351 | } | 324 | * stack */ |
| 352 | } | 325 | } |
| 353 | 326 | } | |
| 354 | if (r == -1 || ERR_peek_error() != 0) /* should happen only if r == -1 */ | 327 | if (r == -1 || ERR_peek_error() != 0) { /* should happen only if |
| 355 | { | 328 | * r == -1 */ |
| 356 | ERR_print_errors(bio_err); | 329 | ERR_print_errors(bio_err); |
| 357 | goto end; | 330 | goto end; |
| 358 | } | ||
| 359 | } | 331 | } |
| 360 | 332 | } | |
| 361 | if (noout) | 333 | if (noout) { |
| 362 | { | ||
| 363 | ret = 0; | 334 | ret = 0; |
| 364 | goto end; | 335 | goto end; |
| 365 | } | 336 | } |
| 366 | BIO_printf(bio_err,"writing RSA key\n"); | 337 | BIO_printf(bio_err, "writing RSA key\n"); |
| 367 | if (outformat == FORMAT_ASN1) { | 338 | if (outformat == FORMAT_ASN1) { |
| 368 | if(pubout || pubin) | 339 | if (pubout || pubin) { |
| 369 | { | ||
| 370 | if (pubout == 2) | 340 | if (pubout == 2) |
| 371 | i=i2d_RSAPublicKey_bio(out,rsa); | 341 | i = i2d_RSAPublicKey_bio(out, rsa); |
| 372 | else | 342 | else |
| 373 | i=i2d_RSA_PUBKEY_bio(out,rsa); | 343 | i = i2d_RSA_PUBKEY_bio(out, rsa); |
| 374 | } | 344 | } else |
| 375 | else i=i2d_RSAPrivateKey_bio(out,rsa); | 345 | i = i2d_RSAPrivateKey_bio(out, rsa); |
| 376 | } | 346 | } |
| 377 | #ifndef OPENSSL_NO_RC4 | 347 | #ifndef OPENSSL_NO_RC4 |
| 378 | else if (outformat == FORMAT_NETSCAPE) | 348 | else if (outformat == FORMAT_NETSCAPE) { |
| 379 | { | 349 | unsigned char *p, *pp; |
| 380 | unsigned char *p,*pp; | ||
| 381 | int size; | 350 | int size; |
| 382 | 351 | ||
| 383 | i=1; | 352 | i = 1; |
| 384 | size=i2d_RSA_NET(rsa,NULL,NULL, sgckey); | 353 | size = i2d_RSA_NET(rsa, NULL, NULL, sgckey); |
| 385 | if ((p=(unsigned char *)malloc(size)) == NULL) | 354 | if ((p = (unsigned char *) malloc(size)) == NULL) { |
| 386 | { | 355 | BIO_printf(bio_err, "Memory allocation failure\n"); |
| 387 | BIO_printf(bio_err,"Memory allocation failure\n"); | ||
| 388 | goto end; | 356 | goto end; |
| 389 | } | ||
| 390 | pp=p; | ||
| 391 | i2d_RSA_NET(rsa,&p,NULL, sgckey); | ||
| 392 | BIO_write(out,(char *)pp,size); | ||
| 393 | free(pp); | ||
| 394 | } | 357 | } |
| 358 | pp = p; | ||
| 359 | i2d_RSA_NET(rsa, &p, NULL, sgckey); | ||
| 360 | BIO_write(out, (char *) pp, size); | ||
| 361 | free(pp); | ||
| 362 | } | ||
| 395 | #endif | 363 | #endif |
| 396 | else if (outformat == FORMAT_PEM) { | 364 | else if (outformat == FORMAT_PEM) { |
| 397 | if(pubout || pubin) | 365 | if (pubout || pubin) { |
| 398 | { | ||
| 399 | if (pubout == 2) | 366 | if (pubout == 2) |
| 400 | i=PEM_write_bio_RSAPublicKey(out,rsa); | 367 | i = PEM_write_bio_RSAPublicKey(out, rsa); |
| 401 | else | 368 | else |
| 402 | i=PEM_write_bio_RSA_PUBKEY(out,rsa); | 369 | i = PEM_write_bio_RSA_PUBKEY(out, rsa); |
| 403 | } | 370 | } else |
| 404 | else i=PEM_write_bio_RSAPrivateKey(out,rsa, | 371 | i = PEM_write_bio_RSAPrivateKey(out, rsa, |
| 405 | enc,NULL,0,NULL,passout); | 372 | enc, NULL, 0, NULL, passout); |
| 406 | #if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_RC4) | 373 | #if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_RC4) |
| 407 | } else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) { | 374 | } else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) { |
| 408 | EVP_PKEY *pk; | 375 | EVP_PKEY *pk; |
| @@ -416,29 +383,31 @@ bad: | |||
| 416 | i = i2b_PrivateKey_bio(out, pk); | 383 | i = i2b_PrivateKey_bio(out, pk); |
| 417 | EVP_PKEY_free(pk); | 384 | EVP_PKEY_free(pk); |
| 418 | #endif | 385 | #endif |
| 419 | } else { | 386 | } else { |
| 420 | BIO_printf(bio_err,"bad output format specified for outfile\n"); | 387 | BIO_printf(bio_err, "bad output format specified for outfile\n"); |
| 421 | goto end; | 388 | goto end; |
| 422 | } | 389 | } |
| 423 | if (i <= 0) | 390 | if (i <= 0) { |
| 424 | { | 391 | BIO_printf(bio_err, "unable to write key\n"); |
| 425 | BIO_printf(bio_err,"unable to write key\n"); | ||
| 426 | ERR_print_errors(bio_err); | 392 | ERR_print_errors(bio_err); |
| 427 | } | 393 | } else |
| 428 | else | 394 | ret = 0; |
| 429 | ret=0; | ||
| 430 | end: | 395 | end: |
| 431 | if(out != NULL) BIO_free_all(out); | 396 | if (out != NULL) |
| 432 | if(rsa != NULL) RSA_free(rsa); | 397 | BIO_free_all(out); |
| 433 | if(passin) free(passin); | 398 | if (rsa != NULL) |
| 434 | if(passout) free(passout); | 399 | RSA_free(rsa); |
| 400 | if (passin) | ||
| 401 | free(passin); | ||
| 402 | if (passout) | ||
| 403 | free(passout); | ||
| 435 | apps_shutdown(); | 404 | apps_shutdown(); |
| 436 | return(ret); | 405 | return (ret); |
| 437 | } | 406 | } |
| 438 | #else /* !OPENSSL_NO_RSA */ | 407 | #else /* !OPENSSL_NO_RSA */ |
| 439 | 408 | ||
| 440 | # if PEDANTIC | 409 | #if PEDANTIC |
| 441 | static void *dummy=&dummy; | 410 | static void *dummy = &dummy; |
| 442 | # endif | 411 | #endif |
| 443 | 412 | ||
| 444 | #endif | 413 | #endif |
diff --git a/src/lib/libssl/src/apps/rsautl.c b/src/lib/libssl/src/apps/rsautl.c index ba9758c94b..9b8a040853 100644 --- a/src/lib/libssl/src/apps/rsautl.c +++ b/src/lib/libssl/src/apps/rsautl.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -82,7 +82,8 @@ static void usage(void); | |||
| 82 | 82 | ||
| 83 | int MAIN(int argc, char **); | 83 | int MAIN(int argc, char **); |
| 84 | 84 | ||
| 85 | int MAIN(int argc, char **argv) | 85 | int |
| 86 | MAIN(int argc, char **argv) | ||
| 86 | { | 87 | { |
| 87 | ENGINE *e = NULL; | 88 | ENGINE *e = NULL; |
| 88 | BIO *in = NULL, *out = NULL; | 89 | BIO *in = NULL, *out = NULL; |
| @@ -108,71 +109,81 @@ int MAIN(int argc, char **argv) | |||
| 108 | argc--; | 109 | argc--; |
| 109 | argv++; | 110 | argv++; |
| 110 | 111 | ||
| 111 | if(!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); | 112 | if (!bio_err) |
| 113 | bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); | ||
| 112 | 114 | ||
| 113 | if (!load_config(bio_err, NULL)) | 115 | if (!load_config(bio_err, NULL)) |
| 114 | goto end; | 116 | goto end; |
| 115 | ERR_load_crypto_strings(); | 117 | ERR_load_crypto_strings(); |
| 116 | OpenSSL_add_all_algorithms(); | 118 | OpenSSL_add_all_algorithms(); |
| 117 | pad = RSA_PKCS1_PADDING; | 119 | pad = RSA_PKCS1_PADDING; |
| 118 | 120 | ||
| 119 | while(argc >= 1) | 121 | while (argc >= 1) { |
| 120 | { | 122 | if (!strcmp(*argv, "-in")) { |
| 121 | if (!strcmp(*argv,"-in")) { | ||
| 122 | if (--argc < 1) | 123 | if (--argc < 1) |
| 123 | badarg = 1; | 124 | badarg = 1; |
| 124 | else | 125 | else |
| 125 | infile= *(++argv); | 126 | infile = *(++argv); |
| 126 | } else if (!strcmp(*argv,"-out")) { | 127 | } else if (!strcmp(*argv, "-out")) { |
| 127 | if (--argc < 1) | 128 | if (--argc < 1) |
| 128 | badarg = 1; | 129 | badarg = 1; |
| 129 | else | 130 | else |
| 130 | outfile= *(++argv); | 131 | outfile = *(++argv); |
| 131 | } else if(!strcmp(*argv, "-inkey")) { | 132 | } else if (!strcmp(*argv, "-inkey")) { |
| 132 | if (--argc < 1) | 133 | if (--argc < 1) |
| 133 | badarg = 1; | 134 | badarg = 1; |
| 134 | else | 135 | else |
| 135 | keyfile = *(++argv); | 136 | keyfile = *(++argv); |
| 136 | } else if (!strcmp(*argv,"-passin")) { | 137 | } else if (!strcmp(*argv, "-passin")) { |
| 137 | if (--argc < 1) | 138 | if (--argc < 1) |
| 138 | badarg = 1; | 139 | badarg = 1; |
| 139 | else | 140 | else |
| 140 | passargin= *(++argv); | 141 | passargin = *(++argv); |
| 141 | } else if (strcmp(*argv,"-keyform") == 0) { | 142 | } else if (strcmp(*argv, "-keyform") == 0) { |
| 142 | if (--argc < 1) | 143 | if (--argc < 1) |
| 143 | badarg = 1; | 144 | badarg = 1; |
| 144 | else | 145 | else |
| 145 | keyform=str2fmt(*(++argv)); | 146 | keyform = str2fmt(*(++argv)); |
| 146 | #ifndef OPENSSL_NO_ENGINE | 147 | #ifndef OPENSSL_NO_ENGINE |
| 147 | } else if(!strcmp(*argv, "-engine")) { | 148 | } else if (!strcmp(*argv, "-engine")) { |
| 148 | if (--argc < 1) | 149 | if (--argc < 1) |
| 149 | badarg = 1; | 150 | badarg = 1; |
| 150 | else | 151 | else |
| 151 | engine = *(++argv); | 152 | engine = *(++argv); |
| 152 | #endif | 153 | #endif |
| 153 | } else if(!strcmp(*argv, "-pubin")) { | 154 | } else if (!strcmp(*argv, "-pubin")) { |
| 154 | key_type = KEY_PUBKEY; | 155 | key_type = KEY_PUBKEY; |
| 155 | } else if(!strcmp(*argv, "-certin")) { | 156 | } else if (!strcmp(*argv, "-certin")) { |
| 156 | key_type = KEY_CERT; | 157 | key_type = KEY_CERT; |
| 157 | } | 158 | } else if (!strcmp(*argv, "-asn1parse")) |
| 158 | else if(!strcmp(*argv, "-asn1parse")) asn1parse = 1; | 159 | asn1parse = 1; |
| 159 | else if(!strcmp(*argv, "-hexdump")) hexdump = 1; | 160 | else if (!strcmp(*argv, "-hexdump")) |
| 160 | else if(!strcmp(*argv, "-raw")) pad = RSA_NO_PADDING; | 161 | hexdump = 1; |
| 161 | else if(!strcmp(*argv, "-oaep")) pad = RSA_PKCS1_OAEP_PADDING; | 162 | else if (!strcmp(*argv, "-raw")) |
| 162 | else if(!strcmp(*argv, "-ssl")) pad = RSA_SSLV23_PADDING; | 163 | pad = RSA_NO_PADDING; |
| 163 | else if(!strcmp(*argv, "-pkcs")) pad = RSA_PKCS1_PADDING; | 164 | else if (!strcmp(*argv, "-oaep")) |
| 164 | else if(!strcmp(*argv, "-x931")) pad = RSA_X931_PADDING; | 165 | pad = RSA_PKCS1_OAEP_PADDING; |
| 165 | else if(!strcmp(*argv, "-sign")) { | 166 | else if (!strcmp(*argv, "-ssl")) |
| 167 | pad = RSA_SSLV23_PADDING; | ||
| 168 | else if (!strcmp(*argv, "-pkcs")) | ||
| 169 | pad = RSA_PKCS1_PADDING; | ||
| 170 | else if (!strcmp(*argv, "-x931")) | ||
| 171 | pad = RSA_X931_PADDING; | ||
| 172 | else if (!strcmp(*argv, "-sign")) { | ||
| 166 | rsa_mode = RSA_SIGN; | 173 | rsa_mode = RSA_SIGN; |
| 167 | need_priv = 1; | 174 | need_priv = 1; |
| 168 | } else if(!strcmp(*argv, "-verify")) rsa_mode = RSA_VERIFY; | 175 | } else if (!strcmp(*argv, "-verify")) |
| 169 | else if(!strcmp(*argv, "-rev")) rev = 1; | 176 | rsa_mode = RSA_VERIFY; |
| 170 | else if(!strcmp(*argv, "-encrypt")) rsa_mode = RSA_ENCRYPT; | 177 | else if (!strcmp(*argv, "-rev")) |
| 171 | else if(!strcmp(*argv, "-decrypt")) { | 178 | rev = 1; |
| 179 | else if (!strcmp(*argv, "-encrypt")) | ||
| 180 | rsa_mode = RSA_ENCRYPT; | ||
| 181 | else if (!strcmp(*argv, "-decrypt")) { | ||
| 172 | rsa_mode = RSA_DECRYPT; | 182 | rsa_mode = RSA_DECRYPT; |
| 173 | need_priv = 1; | 183 | need_priv = 1; |
| 174 | } else badarg = 1; | 184 | } else |
| 175 | if(badarg) { | 185 | badarg = 1; |
| 186 | if (badarg) { | ||
| 176 | usage(); | 187 | usage(); |
| 177 | goto end; | 188 | goto end; |
| 178 | } | 189 | } |
| @@ -180,69 +191,65 @@ int MAIN(int argc, char **argv) | |||
| 180 | argv++; | 191 | argv++; |
| 181 | } | 192 | } |
| 182 | 193 | ||
| 183 | if(need_priv && (key_type != KEY_PRIVKEY)) { | 194 | if (need_priv && (key_type != KEY_PRIVKEY)) { |
| 184 | BIO_printf(bio_err, "A private key is needed for this operation\n"); | 195 | BIO_printf(bio_err, "A private key is needed for this operation\n"); |
| 185 | goto end; | 196 | goto end; |
| 186 | } | 197 | } |
| 187 | |||
| 188 | #ifndef OPENSSL_NO_ENGINE | 198 | #ifndef OPENSSL_NO_ENGINE |
| 189 | e = setup_engine(bio_err, engine, 0); | 199 | e = setup_engine(bio_err, engine, 0); |
| 190 | #endif | 200 | #endif |
| 191 | if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) { | 201 | if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) { |
| 192 | BIO_printf(bio_err, "Error getting password\n"); | 202 | BIO_printf(bio_err, "Error getting password\n"); |
| 193 | goto end; | 203 | goto end; |
| 194 | } | 204 | } |
| 195 | |||
| 196 | /* FIXME: seed PRNG only if needed */ | 205 | /* FIXME: seed PRNG only if needed */ |
| 197 | app_RAND_load_file(NULL, bio_err, 0); | 206 | app_RAND_load_file(NULL, bio_err, 0); |
| 198 | 207 | ||
| 199 | switch(key_type) { | 208 | switch (key_type) { |
| 200 | case KEY_PRIVKEY: | 209 | case KEY_PRIVKEY: |
| 201 | pkey = load_key(bio_err, keyfile, keyform, 0, | 210 | pkey = load_key(bio_err, keyfile, keyform, 0, |
| 202 | passin, e, "Private Key"); | 211 | passin, e, "Private Key"); |
| 203 | break; | 212 | break; |
| 204 | 213 | ||
| 205 | case KEY_PUBKEY: | 214 | case KEY_PUBKEY: |
| 206 | pkey = load_pubkey(bio_err, keyfile, keyform, 0, | 215 | pkey = load_pubkey(bio_err, keyfile, keyform, 0, |
| 207 | NULL, e, "Public Key"); | 216 | NULL, e, "Public Key"); |
| 208 | break; | 217 | break; |
| 209 | 218 | ||
| 210 | case KEY_CERT: | 219 | case KEY_CERT: |
| 211 | x = load_cert(bio_err, keyfile, keyform, | 220 | x = load_cert(bio_err, keyfile, keyform, |
| 212 | NULL, e, "Certificate"); | 221 | NULL, e, "Certificate"); |
| 213 | if(x) { | 222 | if (x) { |
| 214 | pkey = X509_get_pubkey(x); | 223 | pkey = X509_get_pubkey(x); |
| 215 | X509_free(x); | 224 | X509_free(x); |
| 216 | } | 225 | } |
| 217 | break; | 226 | break; |
| 218 | } | 227 | } |
| 219 | 228 | ||
| 220 | if(!pkey) { | 229 | if (!pkey) { |
| 221 | return 1; | 230 | return 1; |
| 222 | } | 231 | } |
| 223 | |||
| 224 | rsa = EVP_PKEY_get1_RSA(pkey); | 232 | rsa = EVP_PKEY_get1_RSA(pkey); |
| 225 | EVP_PKEY_free(pkey); | 233 | EVP_PKEY_free(pkey); |
| 226 | 234 | ||
| 227 | if(!rsa) { | 235 | if (!rsa) { |
| 228 | BIO_printf(bio_err, "Error getting RSA key\n"); | 236 | BIO_printf(bio_err, "Error getting RSA key\n"); |
| 229 | ERR_print_errors(bio_err); | 237 | ERR_print_errors(bio_err); |
| 230 | goto end; | 238 | goto end; |
| 231 | } | 239 | } |
| 232 | 240 | if (infile) { | |
| 233 | 241 | if (!(in = BIO_new_file(infile, "rb"))) { | |
| 234 | if(infile) { | ||
| 235 | if(!(in = BIO_new_file(infile, "rb"))) { | ||
| 236 | BIO_printf(bio_err, "Error Reading Input File\n"); | 242 | BIO_printf(bio_err, "Error Reading Input File\n"); |
| 237 | ERR_print_errors(bio_err); | 243 | ERR_print_errors(bio_err); |
| 238 | goto end; | 244 | goto end; |
| 239 | } | 245 | } |
| 240 | } else in = BIO_new_fp(stdin, BIO_NOCLOSE); | 246 | } else |
| 247 | in = BIO_new_fp(stdin, BIO_NOCLOSE); | ||
| 241 | 248 | ||
| 242 | if(outfile) { | 249 | if (outfile) { |
| 243 | if(!(out = BIO_new_file(outfile, "wb"))) { | 250 | if (!(out = BIO_new_file(outfile, "wb"))) { |
| 244 | BIO_printf(bio_err, "Error Reading Output File\n"); | 251 | BIO_printf(bio_err, "Error Reading Output File\n"); |
| 245 | ERR_print_errors(bio_err); | 252 | ERR_print_errors(bio_err); |
| 246 | goto end; | 253 | goto end; |
| 247 | } | 254 | } |
| 248 | } else { | 255 | } else { |
| @@ -256,62 +263,68 @@ int MAIN(int argc, char **argv) | |||
| 256 | 263 | ||
| 257 | /* Read the input data */ | 264 | /* Read the input data */ |
| 258 | rsa_inlen = BIO_read(in, rsa_in, keysize * 2); | 265 | rsa_inlen = BIO_read(in, rsa_in, keysize * 2); |
| 259 | if(rsa_inlen <= 0) { | 266 | if (rsa_inlen <= 0) { |
| 260 | BIO_printf(bio_err, "Error reading input Data\n"); | 267 | BIO_printf(bio_err, "Error reading input Data\n"); |
| 261 | exit(1); | 268 | exit(1); |
| 262 | } | 269 | } |
| 263 | if(rev) { | 270 | if (rev) { |
| 264 | int i; | 271 | int i; |
| 265 | unsigned char ctmp; | 272 | unsigned char ctmp; |
| 266 | for(i = 0; i < rsa_inlen/2; i++) { | 273 | for (i = 0; i < rsa_inlen / 2; i++) { |
| 267 | ctmp = rsa_in[i]; | 274 | ctmp = rsa_in[i]; |
| 268 | rsa_in[i] = rsa_in[rsa_inlen - 1 - i]; | 275 | rsa_in[i] = rsa_in[rsa_inlen - 1 - i]; |
| 269 | rsa_in[rsa_inlen - 1 - i] = ctmp; | 276 | rsa_in[rsa_inlen - 1 - i] = ctmp; |
| 270 | } | 277 | } |
| 271 | } | 278 | } |
| 272 | switch(rsa_mode) { | 279 | switch (rsa_mode) { |
| 273 | 280 | ||
| 274 | case RSA_VERIFY: | 281 | case RSA_VERIFY: |
| 275 | rsa_outlen = RSA_public_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); | 282 | rsa_outlen = RSA_public_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); |
| 276 | break; | 283 | break; |
| 277 | 284 | ||
| 278 | case RSA_SIGN: | 285 | case RSA_SIGN: |
| 279 | rsa_outlen = RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); | 286 | rsa_outlen = RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); |
| 280 | break; | 287 | break; |
| 281 | 288 | ||
| 282 | case RSA_ENCRYPT: | 289 | case RSA_ENCRYPT: |
| 283 | rsa_outlen = RSA_public_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); | 290 | rsa_outlen = RSA_public_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); |
| 284 | break; | 291 | break; |
| 285 | 292 | ||
| 286 | case RSA_DECRYPT: | 293 | case RSA_DECRYPT: |
| 287 | rsa_outlen = RSA_private_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); | 294 | rsa_outlen = RSA_private_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad); |
| 288 | break; | 295 | break; |
| 289 | 296 | ||
| 290 | } | 297 | } |
| 291 | 298 | ||
| 292 | if(rsa_outlen <= 0) { | 299 | if (rsa_outlen <= 0) { |
| 293 | BIO_printf(bio_err, "RSA operation error\n"); | 300 | BIO_printf(bio_err, "RSA operation error\n"); |
| 294 | ERR_print_errors(bio_err); | 301 | ERR_print_errors(bio_err); |
| 295 | goto end; | 302 | goto end; |
| 296 | } | 303 | } |
| 297 | ret = 0; | 304 | ret = 0; |
| 298 | if(asn1parse) { | 305 | if (asn1parse) { |
| 299 | if(!ASN1_parse_dump(out, rsa_out, rsa_outlen, 1, -1)) { | 306 | if (!ASN1_parse_dump(out, rsa_out, rsa_outlen, 1, -1)) { |
| 300 | ERR_print_errors(bio_err); | 307 | ERR_print_errors(bio_err); |
| 301 | } | 308 | } |
| 302 | } else if(hexdump) BIO_dump(out, (char *)rsa_out, rsa_outlen); | 309 | } else if (hexdump) |
| 303 | else BIO_write(out, rsa_out, rsa_outlen); | 310 | BIO_dump(out, (char *) rsa_out, rsa_outlen); |
| 304 | end: | 311 | else |
| 312 | BIO_write(out, rsa_out, rsa_outlen); | ||
| 313 | end: | ||
| 305 | RSA_free(rsa); | 314 | RSA_free(rsa); |
| 306 | BIO_free(in); | 315 | BIO_free(in); |
| 307 | BIO_free_all(out); | 316 | BIO_free_all(out); |
| 308 | if(rsa_in) free(rsa_in); | 317 | if (rsa_in) |
| 309 | if(rsa_out) free(rsa_out); | 318 | free(rsa_in); |
| 310 | if(passin) free(passin); | 319 | if (rsa_out) |
| 320 | free(rsa_out); | ||
| 321 | if (passin) | ||
| 322 | free(passin); | ||
| 311 | return ret; | 323 | return ret; |
| 312 | } | 324 | } |
| 313 | 325 | ||
| 314 | static void usage() | 326 | static void |
| 327 | usage() | ||
| 315 | { | 328 | { |
| 316 | BIO_printf(bio_err, "Usage: rsautl [options]\n"); | 329 | BIO_printf(bio_err, "Usage: rsautl [options]\n"); |
| 317 | BIO_printf(bio_err, "-in file input file\n"); | 330 | BIO_printf(bio_err, "-in file input file\n"); |
| @@ -331,15 +344,15 @@ static void usage() | |||
| 331 | BIO_printf(bio_err, "-hexdump hex dump output\n"); | 344 | BIO_printf(bio_err, "-hexdump hex dump output\n"); |
| 332 | #ifndef OPENSSL_NO_ENGINE | 345 | #ifndef OPENSSL_NO_ENGINE |
| 333 | BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n"); | 346 | BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n"); |
| 334 | BIO_printf (bio_err, "-passin arg pass phrase source\n"); | 347 | BIO_printf(bio_err, "-passin arg pass phrase source\n"); |
| 335 | #endif | 348 | #endif |
| 336 | 349 | ||
| 337 | } | 350 | } |
| 338 | 351 | ||
| 339 | #else /* !OPENSSL_NO_RSA */ | 352 | #else /* !OPENSSL_NO_RSA */ |
| 340 | 353 | ||
| 341 | # if PEDANTIC | 354 | #if PEDANTIC |
| 342 | static void *dummy=&dummy; | 355 | static void *dummy = &dummy; |
| 343 | # endif | 356 | #endif |
| 344 | 357 | ||
| 345 | #endif | 358 | #endif |
diff --git a/src/lib/libssl/src/apps/s_cb.c b/src/lib/libssl/src/apps/s_cb.c index b5dc40c53a..1d1a2bd6df 100644 --- a/src/lib/libssl/src/apps/s_cb.c +++ b/src/lib/libssl/src/apps/s_cb.c | |||
| @@ -133,7 +133,7 @@ unsigned char cookie_secret[COOKIE_SECRET_LENGTH]; | |||
| 133 | int cookie_initialized = 0; | 133 | int cookie_initialized = 0; |
| 134 | 134 | ||
| 135 | int | 135 | int |
| 136 | verify_callback(int ok, X509_STORE_CTX *ctx) | 136 | verify_callback(int ok, X509_STORE_CTX * ctx) |
| 137 | { | 137 | { |
| 138 | X509 *err_cert; | 138 | X509 *err_cert; |
| 139 | int err, depth; | 139 | int err, depth; |
| @@ -192,7 +192,7 @@ verify_callback(int ok, X509_STORE_CTX *ctx) | |||
| 192 | } | 192 | } |
| 193 | 193 | ||
| 194 | int | 194 | int |
| 195 | set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file) | 195 | set_cert_stuff(SSL_CTX * ctx, char *cert_file, char *key_file) |
| 196 | { | 196 | { |
| 197 | if (cert_file != NULL) { | 197 | if (cert_file != NULL) { |
| 198 | /* | 198 | /* |
| @@ -201,7 +201,7 @@ set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file) | |||
| 201 | */ | 201 | */ |
| 202 | 202 | ||
| 203 | if (SSL_CTX_use_certificate_file(ctx, cert_file, | 203 | if (SSL_CTX_use_certificate_file(ctx, cert_file, |
| 204 | SSL_FILETYPE_PEM) <= 0) { | 204 | SSL_FILETYPE_PEM) <= 0) { |
| 205 | BIO_printf(bio_err, | 205 | BIO_printf(bio_err, |
| 206 | "unable to get certificate from '%s'\n", cert_file); | 206 | "unable to get certificate from '%s'\n", cert_file); |
| 207 | ERR_print_errors(bio_err); | 207 | ERR_print_errors(bio_err); |
| @@ -210,13 +210,12 @@ set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file) | |||
| 210 | if (key_file == NULL) | 210 | if (key_file == NULL) |
| 211 | key_file = cert_file; | 211 | key_file = cert_file; |
| 212 | if (SSL_CTX_use_PrivateKey_file(ctx, key_file, | 212 | if (SSL_CTX_use_PrivateKey_file(ctx, key_file, |
| 213 | SSL_FILETYPE_PEM) <= 0) { | 213 | SSL_FILETYPE_PEM) <= 0) { |
| 214 | BIO_printf(bio_err, | 214 | BIO_printf(bio_err, |
| 215 | "unable to get private key from '%s'\n", key_file); | 215 | "unable to get private key from '%s'\n", key_file); |
| 216 | ERR_print_errors(bio_err); | 216 | ERR_print_errors(bio_err); |
| 217 | return (0); | 217 | return (0); |
| 218 | } | 218 | } |
| 219 | |||
| 220 | /* | 219 | /* |
| 221 | In theory this is no longer needed | 220 | In theory this is no longer needed |
| 222 | ssl=SSL_new(ctx); | 221 | ssl=SSL_new(ctx); |
| @@ -232,12 +231,16 @@ set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file) | |||
| 232 | SSL_free(ssl); | 231 | SSL_free(ssl); |
| 233 | */ | 232 | */ |
| 234 | 233 | ||
| 235 | /* If we are using DSA, we can copy the parameters from | 234 | /* |
| 236 | * the private key */ | 235 | * If we are using DSA, we can copy the parameters from the |
| 236 | * private key | ||
| 237 | */ | ||
| 237 | 238 | ||
| 238 | 239 | ||
| 239 | /* Now we know that a key and cert have been set against | 240 | /* |
| 240 | * the SSL context */ | 241 | * Now we know that a key and cert have been set against the |
| 242 | * SSL context | ||
| 243 | */ | ||
| 241 | if (!SSL_CTX_check_private_key(ctx)) { | 244 | if (!SSL_CTX_check_private_key(ctx)) { |
| 242 | BIO_printf(bio_err, | 245 | BIO_printf(bio_err, |
| 243 | "Private key does not match the certificate public key\n"); | 246 | "Private key does not match the certificate public key\n"); |
| @@ -248,9 +251,9 @@ set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file) | |||
| 248 | } | 251 | } |
| 249 | 252 | ||
| 250 | int | 253 | int |
| 251 | set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key) | 254 | set_cert_key_stuff(SSL_CTX * ctx, X509 * cert, EVP_PKEY * key) |
| 252 | { | 255 | { |
| 253 | if (cert == NULL) | 256 | if (cert == NULL) |
| 254 | return 1; | 257 | return 1; |
| 255 | if (SSL_CTX_use_certificate(ctx, cert) <= 0) { | 258 | if (SSL_CTX_use_certificate(ctx, cert) <= 0) { |
| 256 | BIO_printf(bio_err, "error setting certificate\n"); | 259 | BIO_printf(bio_err, "error setting certificate\n"); |
| @@ -262,9 +265,10 @@ set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key) | |||
| 262 | ERR_print_errors(bio_err); | 265 | ERR_print_errors(bio_err); |
| 263 | return 0; | 266 | return 0; |
| 264 | } | 267 | } |
| 265 | 268 | /* | |
| 266 | /* Now we know that a key and cert have been set against | 269 | * Now we know that a key and cert have been set against the SSL |
| 267 | * the SSL context */ | 270 | * context |
| 271 | */ | ||
| 268 | if (!SSL_CTX_check_private_key(ctx)) { | 272 | if (!SSL_CTX_check_private_key(ctx)) { |
| 269 | BIO_printf(bio_err, | 273 | BIO_printf(bio_err, |
| 270 | "Private key does not match the certificate public key\n"); | 274 | "Private key does not match the certificate public key\n"); |
| @@ -274,32 +278,32 @@ set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key) | |||
| 274 | } | 278 | } |
| 275 | 279 | ||
| 276 | long | 280 | long |
| 277 | bio_dump_callback(BIO *bio, int cmd, const char *argp, | 281 | bio_dump_callback(BIO * bio, int cmd, const char *argp, |
| 278 | int argi, long argl, long ret) | 282 | int argi, long argl, long ret) |
| 279 | { | 283 | { |
| 280 | BIO *out; | 284 | BIO *out; |
| 281 | 285 | ||
| 282 | out = (BIO *)BIO_get_callback_arg(bio); | 286 | out = (BIO *) BIO_get_callback_arg(bio); |
| 283 | if (out == NULL) | 287 | if (out == NULL) |
| 284 | return (ret); | 288 | return (ret); |
| 285 | 289 | ||
| 286 | if (cmd == (BIO_CB_READ|BIO_CB_RETURN)) { | 290 | if (cmd == (BIO_CB_READ | BIO_CB_RETURN)) { |
| 287 | BIO_printf(out, | 291 | BIO_printf(out, |
| 288 | "read from %p [%p] (%lu bytes => %ld (0x%lX))\n", | 292 | "read from %p [%p] (%lu bytes => %ld (0x%lX))\n", |
| 289 | (void *)bio, argp, (unsigned long)argi, ret, ret); | 293 | (void *) bio, argp, (unsigned long) argi, ret, ret); |
| 290 | BIO_dump(out, argp, (int)ret); | 294 | BIO_dump(out, argp, (int) ret); |
| 291 | return (ret); | 295 | return (ret); |
| 292 | } else if (cmd == (BIO_CB_WRITE|BIO_CB_RETURN)) { | 296 | } else if (cmd == (BIO_CB_WRITE | BIO_CB_RETURN)) { |
| 293 | BIO_printf(out, | 297 | BIO_printf(out, |
| 294 | "write to %p [%p] (%lu bytes => %ld (0x%lX))\n", | 298 | "write to %p [%p] (%lu bytes => %ld (0x%lX))\n", |
| 295 | (void *)bio, argp, (unsigned long)argi, ret, ret); | 299 | (void *) bio, argp, (unsigned long) argi, ret, ret); |
| 296 | BIO_dump(out, argp, (int)ret); | 300 | BIO_dump(out, argp, (int) ret); |
| 297 | } | 301 | } |
| 298 | return (ret); | 302 | return (ret); |
| 299 | } | 303 | } |
| 300 | 304 | ||
| 301 | void | 305 | void |
| 302 | apps_ssl_info_callback(const SSL *s, int where, int ret) | 306 | apps_ssl_info_callback(const SSL * s, int where, int ret) |
| 303 | { | 307 | { |
| 304 | const char *str; | 308 | const char *str; |
| 305 | int w; | 309 | int w; |
| @@ -333,10 +337,11 @@ apps_ssl_info_callback(const SSL *s, int where, int ret) | |||
| 333 | 337 | ||
| 334 | 338 | ||
| 335 | void | 339 | void |
| 336 | msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg) | 340 | msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, SSL * ssl, void *arg) |
| 337 | { | 341 | { |
| 338 | BIO *bio = arg; | 342 | BIO *bio = arg; |
| 339 | const char *str_write_p, *str_version, *str_content_type = "", *str_details1 = "", *str_details2 = ""; | 343 | const char *str_write_p, *str_version, *str_content_type = "", |
| 344 | *str_details1 = "", *str_details2 = ""; | ||
| 340 | 345 | ||
| 341 | str_write_p = write_p ? ">>>" : "<<<"; | 346 | str_write_p = write_p ? ">>>" : "<<<"; |
| 342 | 347 | ||
| @@ -370,12 +375,12 @@ msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, | |||
| 370 | str_details1 = "???"; | 375 | str_details1 = "???"; |
| 371 | 376 | ||
| 372 | if (len > 0) { | 377 | if (len > 0) { |
| 373 | switch (((const unsigned char*)buf)[0]) { | 378 | switch (((const unsigned char *) buf)[0]) { |
| 374 | case 0: | 379 | case 0: |
| 375 | str_details1 = ", ERROR:"; | 380 | str_details1 = ", ERROR:"; |
| 376 | str_details2 = " ???"; | 381 | str_details2 = " ???"; |
| 377 | if (len >= 3) { | 382 | if (len >= 3) { |
| 378 | unsigned err = (((const unsigned char*)buf)[1]<<8) + ((const unsigned char*)buf)[2]; | 383 | unsigned err = (((const unsigned char *) buf)[1] << 8) + ((const unsigned char *) buf)[2]; |
| 379 | 384 | ||
| 380 | switch (err) { | 385 | switch (err) { |
| 381 | case 0x0001: | 386 | case 0x0001: |
| @@ -392,7 +397,6 @@ msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, | |||
| 392 | break; | 397 | break; |
| 393 | } | 398 | } |
| 394 | } | 399 | } |
| 395 | |||
| 396 | break; | 400 | break; |
| 397 | case 1: | 401 | case 1: |
| 398 | str_details1 = ", CLIENT-HELLO"; | 402 | str_details1 = ", CLIENT-HELLO"; |
| @@ -421,7 +425,6 @@ msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, | |||
| 421 | } | 425 | } |
| 422 | } | 426 | } |
| 423 | } | 427 | } |
| 424 | |||
| 425 | if (version == SSL3_VERSION || version == TLS1_VERSION || | 428 | if (version == SSL3_VERSION || version == TLS1_VERSION || |
| 426 | version == TLS1_1_VERSION || version == TLS1_2_VERSION || | 429 | version == TLS1_1_VERSION || version == TLS1_2_VERSION || |
| 427 | version == DTLS1_VERSION || version == DTLS1_BAD_VER) { | 430 | version == DTLS1_VERSION || version == DTLS1_BAD_VER) { |
| @@ -437,12 +440,11 @@ msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, | |||
| 437 | break; | 440 | break; |
| 438 | } | 441 | } |
| 439 | 442 | ||
| 440 | if (content_type == 21) /* Alert */ | 443 | if (content_type == 21) { /* Alert */ |
| 441 | { | ||
| 442 | str_details1 = ", ???"; | 444 | str_details1 = ", ???"; |
| 443 | 445 | ||
| 444 | if (len == 2) { | 446 | if (len == 2) { |
| 445 | switch (((const unsigned char*)buf)[0]) { | 447 | switch (((const unsigned char *) buf)[0]) { |
| 446 | case 1: | 448 | case 1: |
| 447 | str_details1 = ", warning"; | 449 | str_details1 = ", warning"; |
| 448 | break; | 450 | break; |
| @@ -452,7 +454,7 @@ msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, | |||
| 452 | } | 454 | } |
| 453 | 455 | ||
| 454 | str_details2 = " ???"; | 456 | str_details2 = " ???"; |
| 455 | switch (((const unsigned char*)buf)[1]) { | 457 | switch (((const unsigned char *) buf)[1]) { |
| 456 | case 0: | 458 | case 0: |
| 457 | str_details2 = " close_notify"; | 459 | str_details2 = " close_notify"; |
| 458 | break; | 460 | break; |
| @@ -543,13 +545,11 @@ msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, | |||
| 543 | } | 545 | } |
| 544 | } | 546 | } |
| 545 | } | 547 | } |
| 546 | 548 | if (content_type == 22) { /* Handshake */ | |
| 547 | if (content_type == 22) /* Handshake */ | ||
| 548 | { | ||
| 549 | str_details1 = "???"; | 549 | str_details1 = "???"; |
| 550 | 550 | ||
| 551 | if (len > 0) { | 551 | if (len > 0) { |
| 552 | switch (((const unsigned char*)buf)[0]) { | 552 | switch (((const unsigned char *) buf)[0]) { |
| 553 | case 0: | 553 | case 0: |
| 554 | str_details1 = ", HelloRequest"; | 554 | str_details1 = ", HelloRequest"; |
| 555 | break; | 555 | break; |
| @@ -587,9 +587,8 @@ msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, | |||
| 587 | } | 587 | } |
| 588 | } | 588 | } |
| 589 | } | 589 | } |
| 590 | |||
| 591 | BIO_printf(bio, "%s %s%s [length %04lx]%s%s\n", str_write_p, | 590 | BIO_printf(bio, "%s %s%s [length %04lx]%s%s\n", str_write_p, |
| 592 | str_version, str_content_type, (unsigned long)len, | 591 | str_version, str_content_type, (unsigned long) len, |
| 593 | str_details1, str_details2); | 592 | str_details1, str_details2); |
| 594 | 593 | ||
| 595 | if (len > 0) { | 594 | if (len > 0) { |
| @@ -605,17 +604,17 @@ msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, | |||
| 605 | if (i % 16 == 0 && i > 0) | 604 | if (i % 16 == 0 && i > 0) |
| 606 | BIO_printf(bio, "\n "); | 605 | BIO_printf(bio, "\n "); |
| 607 | BIO_printf(bio, " %02x", | 606 | BIO_printf(bio, " %02x", |
| 608 | ((const unsigned char*)buf)[i]); | 607 | ((const unsigned char *) buf)[i]); |
| 609 | } | 608 | } |
| 610 | if (i < len) | 609 | if (i < len) |
| 611 | BIO_printf(bio, " ..."); | 610 | BIO_printf(bio, " ..."); |
| 612 | BIO_printf(bio, "\n"); | 611 | BIO_printf(bio, "\n"); |
| 613 | } | 612 | } |
| 614 | (void)BIO_flush(bio); | 613 | (void) BIO_flush(bio); |
| 615 | } | 614 | } |
| 616 | 615 | ||
| 617 | void | 616 | void |
| 618 | tlsext_cb(SSL *s, int client_server, int type, unsigned char *data, int len, | 617 | tlsext_cb(SSL * s, int client_server, int type, unsigned char *data, int len, |
| 619 | void *arg) | 618 | void *arg) |
| 620 | { | 619 | { |
| 621 | BIO *bio = arg; | 620 | BIO *bio = arg; |
| @@ -713,12 +712,12 @@ tlsext_cb(SSL *s, int client_server, int type, unsigned char *data, int len, | |||
| 713 | 712 | ||
| 714 | BIO_printf(bio, "TLS %s extension \"%s\" (id=%d), len=%d\n", | 713 | BIO_printf(bio, "TLS %s extension \"%s\" (id=%d), len=%d\n", |
| 715 | client_server ? "server" : "client", extname, type, len); | 714 | client_server ? "server" : "client", extname, type, len); |
| 716 | BIO_dump(bio, (char *)data, len); | 715 | BIO_dump(bio, (char *) data, len); |
| 717 | (void)BIO_flush(bio); | 716 | (void) BIO_flush(bio); |
| 718 | } | 717 | } |
| 719 | 718 | ||
| 720 | int | 719 | int |
| 721 | generate_cookie_callback(SSL *ssl, unsigned char *cookie, | 720 | generate_cookie_callback(SSL * ssl, unsigned char *cookie, |
| 722 | unsigned int *cookie_len) | 721 | unsigned int *cookie_len) |
| 723 | { | 722 | { |
| 724 | unsigned char *buffer, result[EVP_MAX_MD_SIZE]; | 723 | unsigned char *buffer, result[EVP_MAX_MD_SIZE]; |
| @@ -740,9 +739,8 @@ generate_cookie_callback(SSL *ssl, unsigned char *cookie, | |||
| 740 | } | 739 | } |
| 741 | cookie_initialized = 1; | 740 | cookie_initialized = 1; |
| 742 | } | 741 | } |
| 743 | |||
| 744 | /* Read peer information */ | 742 | /* Read peer information */ |
| 745 | (void)BIO_dgram_get_peer(SSL_get_rbio(ssl), &peer); | 743 | (void) BIO_dgram_get_peer(SSL_get_rbio(ssl), &peer); |
| 746 | 744 | ||
| 747 | /* Create buffer with peer's address and port */ | 745 | /* Create buffer with peer's address and port */ |
| 748 | length = 0; | 746 | length = 0; |
| @@ -767,7 +765,6 @@ generate_cookie_callback(SSL *ssl, unsigned char *cookie, | |||
| 767 | BIO_printf(bio_err, "out of memory\n"); | 765 | BIO_printf(bio_err, "out of memory\n"); |
| 768 | return 0; | 766 | return 0; |
| 769 | } | 767 | } |
| 770 | |||
| 771 | switch (peer.sa.sa_family) { | 768 | switch (peer.sa.sa_family) { |
| 772 | case AF_INET: | 769 | case AF_INET: |
| 773 | memcpy(buffer, &peer.s4.sin_port, sizeof(peer.s4.sin_port)); | 770 | memcpy(buffer, &peer.s4.sin_port, sizeof(peer.s4.sin_port)); |
| @@ -798,7 +795,7 @@ generate_cookie_callback(SSL *ssl, unsigned char *cookie, | |||
| 798 | } | 795 | } |
| 799 | 796 | ||
| 800 | int | 797 | int |
| 801 | verify_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int cookie_len) | 798 | verify_cookie_callback(SSL * ssl, unsigned char *cookie, unsigned int cookie_len) |
| 802 | { | 799 | { |
| 803 | unsigned char *buffer, result[EVP_MAX_MD_SIZE]; | 800 | unsigned char *buffer, result[EVP_MAX_MD_SIZE]; |
| 804 | unsigned int length, resultlength; | 801 | unsigned int length, resultlength; |
| @@ -815,7 +812,7 @@ verify_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int cookie_len) | |||
| 815 | return 0; | 812 | return 0; |
| 816 | 813 | ||
| 817 | /* Read peer information */ | 814 | /* Read peer information */ |
| 818 | (void)BIO_dgram_get_peer(SSL_get_rbio(ssl), &peer); | 815 | (void) BIO_dgram_get_peer(SSL_get_rbio(ssl), &peer); |
| 819 | 816 | ||
| 820 | /* Create buffer with peer's address and port */ | 817 | /* Create buffer with peer's address and port */ |
| 821 | length = 0; | 818 | length = 0; |
| @@ -840,7 +837,6 @@ verify_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int cookie_len) | |||
| 840 | BIO_printf(bio_err, "out of memory\n"); | 837 | BIO_printf(bio_err, "out of memory\n"); |
| 841 | return 0; | 838 | return 0; |
| 842 | } | 839 | } |
| 843 | |||
| 844 | switch (peer.sa.sa_family) { | 840 | switch (peer.sa.sa_family) { |
| 845 | case AF_INET: | 841 | case AF_INET: |
| 846 | memcpy(buffer, &peer.s4.sin_port, sizeof(peer.s4.sin_port)); | 842 | memcpy(buffer, &peer.s4.sin_port, sizeof(peer.s4.sin_port)); |
diff --git a/src/lib/libssl/src/apps/s_client.c b/src/lib/libssl/src/apps/s_client.c index d7552b1f1f..20b0ace583 100644 --- a/src/lib/libssl/src/apps/s_client.c +++ b/src/lib/libssl/src/apps/s_client.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written |
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). |
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. |
| 8 | * | 8 | * |
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as |
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions |
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, |
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation |
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms |
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). |
| 15 | * | 15 | * |
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in |
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. |
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution |
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. |
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or |
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. |
| 22 | * | 22 | * |
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without |
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions |
| 25 | * are met: | 25 | * are met: |
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" |
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library |
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). |
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from |
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: |
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" |
| 40 | * | 40 | * |
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. |
| 52 | * | 52 | * |
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or |
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be |
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence |
| @@ -63,7 +63,7 @@ | |||
| 63 | * are met: | 63 | * are met: |
| 64 | * | 64 | * |
| 65 | * 1. Redistributions of source code must retain the above copyright | 65 | * 1. Redistributions of source code must retain the above copyright |
| 66 | * notice, this list of conditions and the following disclaimer. | 66 | * notice, this list of conditions and the following disclaimer. |
| 67 | * | 67 | * |
| 68 | * 2. Redistributions in binary form must reproduce the above copyright | 68 | * 2. Redistributions in binary form must reproduce the above copyright |
| 69 | * notice, this list of conditions and the following disclaimer in | 69 | * notice, this list of conditions and the following disclaimer in |
| @@ -174,7 +174,7 @@ | |||
| 174 | /*#define SSL_HOST_NAME "193.118.187.102" */ | 174 | /*#define SSL_HOST_NAME "193.118.187.102" */ |
| 175 | #define SSL_HOST_NAME "localhost" | 175 | #define SSL_HOST_NAME "localhost" |
| 176 | 176 | ||
| 177 | /*#define TEST_CERT "client.pem" */ /* no default cert. */ | 177 | /*#define TEST_CERT "client.pem" *//* no default cert. */ |
| 178 | 178 | ||
| 179 | #undef BUFSIZZ | 179 | #undef BUFSIZZ |
| 180 | #define BUFSIZZ 1024*8 | 180 | #define BUFSIZZ 1024*8 |
| @@ -184,247 +184,247 @@ extern int verify_error; | |||
| 184 | extern int verify_return_error; | 184 | extern int verify_return_error; |
| 185 | 185 | ||
| 186 | #ifdef FIONBIO | 186 | #ifdef FIONBIO |
| 187 | static int c_nbio=0; | 187 | static int c_nbio = 0; |
| 188 | #endif | 188 | #endif |
| 189 | static int c_Pause=0; | 189 | static int c_Pause = 0; |
| 190 | static int c_debug=0; | 190 | static int c_debug = 0; |
| 191 | #ifndef OPENSSL_NO_TLSEXT | 191 | #ifndef OPENSSL_NO_TLSEXT |
| 192 | static int c_tlsextdebug=0; | 192 | static int c_tlsextdebug = 0; |
| 193 | static int c_status_req=0; | 193 | static int c_status_req = 0; |
| 194 | #endif | 194 | #endif |
| 195 | static int c_msg=0; | 195 | static int c_msg = 0; |
| 196 | static int c_showcerts=0; | 196 | static int c_showcerts = 0; |
| 197 | 197 | ||
| 198 | static char *keymatexportlabel=NULL; | 198 | static char *keymatexportlabel = NULL; |
| 199 | static int keymatexportlen=20; | 199 | static int keymatexportlen = 20; |
| 200 | 200 | ||
| 201 | static void sc_usage(void); | 201 | static void sc_usage(void); |
| 202 | static void print_stuff(BIO *berr,SSL *con,int full); | 202 | static void print_stuff(BIO * berr, SSL * con, int full); |
| 203 | #ifndef OPENSSL_NO_TLSEXT | 203 | #ifndef OPENSSL_NO_TLSEXT |
| 204 | static int ocsp_resp_cb(SSL *s, void *arg); | 204 | static int ocsp_resp_cb(SSL * s, void *arg); |
| 205 | #endif | 205 | #endif |
| 206 | static BIO *bio_c_out=NULL; | 206 | static BIO *bio_c_out = NULL; |
| 207 | static int c_quiet=0; | 207 | static int c_quiet = 0; |
| 208 | static int c_ign_eof=0; | 208 | static int c_ign_eof = 0; |
| 209 | 209 | ||
| 210 | #ifndef OPENSSL_NO_PSK | 210 | #ifndef OPENSSL_NO_PSK |
| 211 | /* Default PSK identity and key */ | 211 | /* Default PSK identity and key */ |
| 212 | static char *psk_identity="Client_identity"; | 212 | static char *psk_identity = "Client_identity"; |
| 213 | /*char *psk_key=NULL; by default PSK is not used */ | 213 | /*char *psk_key=NULL; by default PSK is not used */ |
| 214 | 214 | ||
| 215 | static unsigned int psk_client_cb(SSL *ssl, const char *hint, char *identity, | 215 | static unsigned int |
| 216 | unsigned int max_identity_len, unsigned char *psk, | 216 | psk_client_cb(SSL * ssl, const char *hint, char *identity, |
| 217 | unsigned int max_psk_len) | 217 | unsigned int max_identity_len, unsigned char *psk, |
| 218 | { | 218 | unsigned int max_psk_len) |
| 219 | { | ||
| 219 | unsigned int psk_len = 0; | 220 | unsigned int psk_len = 0; |
| 220 | size_t maxlen = 0; | 221 | size_t maxlen = 0; |
| 221 | int ret; | 222 | int ret; |
| 222 | BIGNUM *bn=NULL; | 223 | BIGNUM *bn = NULL; |
| 223 | 224 | ||
| 224 | if (c_debug) | 225 | if (c_debug) |
| 225 | BIO_printf(bio_c_out, "psk_client_cb\n"); | 226 | BIO_printf(bio_c_out, "psk_client_cb\n"); |
| 226 | if (max_identity_len > INT_MAX) | 227 | if (max_identity_len > INT_MAX) |
| 227 | goto out_err; | 228 | goto out_err; |
| 228 | maxlen = max_identity_len; | 229 | maxlen = max_identity_len; |
| 229 | if (!hint) | 230 | if (!hint) { |
| 230 | { | 231 | /* no ServerKeyExchange message */ |
| 231 | /* no ServerKeyExchange message*/ | ||
| 232 | if (c_debug) | 232 | if (c_debug) |
| 233 | BIO_printf(bio_c_out,"NULL received PSK identity hint, continuing anyway\n"); | 233 | BIO_printf(bio_c_out, "NULL received PSK identity hint, continuing anyway\n"); |
| 234 | } | 234 | } else if (c_debug) |
| 235 | else if (c_debug) | ||
| 236 | BIO_printf(bio_c_out, "Received PSK identity hint '%s'\n", hint); | 235 | BIO_printf(bio_c_out, "Received PSK identity hint '%s'\n", hint); |
| 237 | 236 | ||
| 238 | /* lookup PSK identity and PSK key based on the given identity hint here */ | 237 | /* |
| 238 | * lookup PSK identity and PSK key based on the given identity hint | ||
| 239 | * here | ||
| 240 | */ | ||
| 239 | ret = snprintf(identity, maxlen, "%s", psk_identity); | 241 | ret = snprintf(identity, maxlen, "%s", psk_identity); |
| 240 | if (ret == -1 || ret >= maxlen) | 242 | if (ret == -1 || ret >= maxlen) |
| 241 | goto out_err; | 243 | goto out_err; |
| 242 | if (c_debug) | 244 | if (c_debug) |
| 243 | BIO_printf(bio_c_out, "created identity '%s' len=%d\n", identity, ret); | 245 | BIO_printf(bio_c_out, "created identity '%s' len=%d\n", identity, ret); |
| 244 | ret=BN_hex2bn(&bn, psk_key); | 246 | ret = BN_hex2bn(&bn, psk_key); |
| 245 | if (!ret) | 247 | if (!ret) { |
| 246 | { | 248 | BIO_printf(bio_err, "Could not convert PSK key '%s' to BIGNUM\n", psk_key); |
| 247 | BIO_printf(bio_err,"Could not convert PSK key '%s' to BIGNUM\n", psk_key); | 249 | if (bn) |
| 248 | if (bn) | 250 | BN_free(bn); |
| 249 | BN_free(bn); | 251 | return 0; |
| 250 | return 0; | 252 | } |
| 251 | } | 253 | if ((unsigned int) BN_num_bytes(bn) > max_psk_len) { |
| 252 | 254 | BIO_printf(bio_err, "psk buffer of callback is too small (%d) for key (%d)\n", | |
| 253 | if ((unsigned int)BN_num_bytes(bn) > max_psk_len) | 255 | max_psk_len, BN_num_bytes(bn)); |
| 254 | { | 256 | BN_free(bn); |
| 255 | BIO_printf(bio_err,"psk buffer of callback is too small (%d) for key (%d)\n", | 257 | return 0; |
| 256 | max_psk_len, BN_num_bytes(bn)); | 258 | } |
| 257 | BN_free(bn); | 259 | psk_len = BN_bn2bin(bn, psk); |
| 258 | return 0; | 260 | BN_free(bn); |
| 259 | } | 261 | if (psk_len == 0) |
| 260 | 262 | goto out_err; | |
| 261 | psk_len=BN_bn2bin(bn, psk); | ||
| 262 | BN_free(bn); | ||
| 263 | if (psk_len == 0) | ||
| 264 | goto out_err; | ||
| 265 | 263 | ||
| 266 | if (c_debug) | 264 | if (c_debug) |
| 267 | BIO_printf(bio_c_out, "created PSK len=%d\n", psk_len); | 265 | BIO_printf(bio_c_out, "created PSK len=%d\n", psk_len); |
| 268 | 266 | ||
| 269 | return psk_len; | 267 | return psk_len; |
| 270 | out_err: | 268 | out_err: |
| 271 | if (c_debug) | 269 | if (c_debug) |
| 272 | BIO_printf(bio_err, "Error in PSK client callback\n"); | 270 | BIO_printf(bio_err, "Error in PSK client callback\n"); |
| 273 | return 0; | 271 | return 0; |
| 274 | } | 272 | } |
| 275 | #endif | 273 | #endif |
| 276 | 274 | ||
| 277 | static void sc_usage(void) | 275 | static void |
| 278 | { | 276 | sc_usage(void) |
| 279 | BIO_printf(bio_err,"usage: s_client args\n"); | 277 | { |
| 280 | BIO_printf(bio_err,"\n"); | 278 | BIO_printf(bio_err, "usage: s_client args\n"); |
| 281 | BIO_printf(bio_err," -4 - Force IPv4\n"); | 279 | BIO_printf(bio_err, "\n"); |
| 282 | BIO_printf(bio_err," -6 - Force IPv6\n"); | 280 | BIO_printf(bio_err, " -4 - Force IPv4\n"); |
| 283 | BIO_printf(bio_err," -host host - use -connect instead\n"); | 281 | BIO_printf(bio_err, " -6 - Force IPv6\n"); |
| 284 | BIO_printf(bio_err," -port port - use -connect instead\n"); | 282 | BIO_printf(bio_err, " -host host - use -connect instead\n"); |
| 285 | BIO_printf(bio_err," -connect host:port - who to connect to (default is %s:%s)\n",SSL_HOST_NAME,PORT_STR); | 283 | BIO_printf(bio_err, " -port port - use -connect instead\n"); |
| 286 | 284 | BIO_printf(bio_err, " -connect host:port - who to connect to (default is %s:%s)\n", SSL_HOST_NAME, PORT_STR); | |
| 287 | BIO_printf(bio_err," -verify arg - turn on peer certificate verification\n"); | 285 | |
| 288 | BIO_printf(bio_err," -cert arg - certificate file to use, PEM format assumed\n"); | 286 | BIO_printf(bio_err, " -verify arg - turn on peer certificate verification\n"); |
| 289 | BIO_printf(bio_err," -certform arg - certificate format (PEM or DER) PEM default\n"); | 287 | BIO_printf(bio_err, " -cert arg - certificate file to use, PEM format assumed\n"); |
| 290 | BIO_printf(bio_err," -key arg - Private key file to use, in cert file if\n"); | 288 | BIO_printf(bio_err, " -certform arg - certificate format (PEM or DER) PEM default\n"); |
| 291 | BIO_printf(bio_err," not specified but cert file is.\n"); | 289 | BIO_printf(bio_err, " -key arg - Private key file to use, in cert file if\n"); |
| 292 | BIO_printf(bio_err," -keyform arg - key format (PEM or DER) PEM default\n"); | 290 | BIO_printf(bio_err, " not specified but cert file is.\n"); |
| 293 | BIO_printf(bio_err," -pass arg - private key file pass phrase source\n"); | 291 | BIO_printf(bio_err, " -keyform arg - key format (PEM or DER) PEM default\n"); |
| 294 | BIO_printf(bio_err," -CApath arg - PEM format directory of CA's\n"); | 292 | BIO_printf(bio_err, " -pass arg - private key file pass phrase source\n"); |
| 295 | BIO_printf(bio_err," -CAfile arg - PEM format file of CA's\n"); | 293 | BIO_printf(bio_err, " -CApath arg - PEM format directory of CA's\n"); |
| 296 | BIO_printf(bio_err," -reconnect - Drop and re-make the connection with the same Session-ID\n"); | 294 | BIO_printf(bio_err, " -CAfile arg - PEM format file of CA's\n"); |
| 297 | BIO_printf(bio_err," -pause - sleep(1) after each read(2) and write(2) system call\n"); | 295 | BIO_printf(bio_err, " -reconnect - Drop and re-make the connection with the same Session-ID\n"); |
| 298 | BIO_printf(bio_err," -showcerts - show all certificates in the chain\n"); | 296 | BIO_printf(bio_err, " -pause - sleep(1) after each read(2) and write(2) system call\n"); |
| 299 | BIO_printf(bio_err," -debug - extra output\n"); | 297 | BIO_printf(bio_err, " -showcerts - show all certificates in the chain\n"); |
| 298 | BIO_printf(bio_err, " -debug - extra output\n"); | ||
| 300 | #ifdef WATT32 | 299 | #ifdef WATT32 |
| 301 | BIO_printf(bio_err," -wdebug - WATT-32 tcp debugging\n"); | 300 | BIO_printf(bio_err, " -wdebug - WATT-32 tcp debugging\n"); |
| 302 | #endif | 301 | #endif |
| 303 | BIO_printf(bio_err," -msg - Show protocol messages\n"); | 302 | BIO_printf(bio_err, " -msg - Show protocol messages\n"); |
| 304 | BIO_printf(bio_err," -nbio_test - more ssl protocol testing\n"); | 303 | BIO_printf(bio_err, " -nbio_test - more ssl protocol testing\n"); |
| 305 | BIO_printf(bio_err," -state - print the 'ssl' states\n"); | 304 | BIO_printf(bio_err, " -state - print the 'ssl' states\n"); |
| 306 | #ifdef FIONBIO | 305 | #ifdef FIONBIO |
| 307 | BIO_printf(bio_err," -nbio - Run with non-blocking IO\n"); | 306 | BIO_printf(bio_err, " -nbio - Run with non-blocking IO\n"); |
| 308 | #endif | 307 | #endif |
| 309 | BIO_printf(bio_err," -crlf - convert LF from terminal into CRLF\n"); | 308 | BIO_printf(bio_err, " -crlf - convert LF from terminal into CRLF\n"); |
| 310 | BIO_printf(bio_err," -quiet - no s_client output\n"); | 309 | BIO_printf(bio_err, " -quiet - no s_client output\n"); |
| 311 | BIO_printf(bio_err," -ign_eof - ignore input eof (default when -quiet)\n"); | 310 | BIO_printf(bio_err, " -ign_eof - ignore input eof (default when -quiet)\n"); |
| 312 | BIO_printf(bio_err," -no_ign_eof - don't ignore input eof\n"); | 311 | BIO_printf(bio_err, " -no_ign_eof - don't ignore input eof\n"); |
| 313 | #ifndef OPENSSL_NO_PSK | 312 | #ifndef OPENSSL_NO_PSK |
| 314 | BIO_printf(bio_err," -psk_identity arg - PSK identity\n"); | 313 | BIO_printf(bio_err, " -psk_identity arg - PSK identity\n"); |
| 315 | BIO_printf(bio_err," -psk arg - PSK in hex (without 0x)\n"); | 314 | BIO_printf(bio_err, " -psk arg - PSK in hex (without 0x)\n"); |
| 316 | # ifndef OPENSSL_NO_JPAKE | 315 | #ifndef OPENSSL_NO_JPAKE |
| 317 | BIO_printf(bio_err," -jpake arg - JPAKE secret to use\n"); | 316 | BIO_printf(bio_err, " -jpake arg - JPAKE secret to use\n"); |
| 318 | # endif | 317 | #endif |
| 319 | #endif | 318 | #endif |
| 320 | #ifndef OPENSSL_NO_SRP | 319 | #ifndef OPENSSL_NO_SRP |
| 321 | BIO_printf(bio_err," -srpuser user - SRP authentification for 'user'\n"); | 320 | BIO_printf(bio_err, " -srpuser user - SRP authentification for 'user'\n"); |
| 322 | BIO_printf(bio_err," -srppass arg - password for 'user'\n"); | 321 | BIO_printf(bio_err, " -srppass arg - password for 'user'\n"); |
| 323 | BIO_printf(bio_err," -srp_lateuser - SRP username into second ClientHello message\n"); | 322 | BIO_printf(bio_err, " -srp_lateuser - SRP username into second ClientHello message\n"); |
| 324 | BIO_printf(bio_err," -srp_moregroups - Tolerate other than the known g N values.\n"); | 323 | BIO_printf(bio_err, " -srp_moregroups - Tolerate other than the known g N values.\n"); |
| 325 | BIO_printf(bio_err," -srp_strength int - minimal mength in bits for N (default %d).\n",SRP_MINIMAL_N); | 324 | BIO_printf(bio_err, " -srp_strength int - minimal mength in bits for N (default %d).\n", SRP_MINIMAL_N); |
| 326 | #endif | 325 | #endif |
| 327 | BIO_printf(bio_err," -ssl3 - just use SSLv3\n"); | 326 | BIO_printf(bio_err, " -ssl3 - just use SSLv3\n"); |
| 328 | BIO_printf(bio_err," -tls1_2 - just use TLSv1.2\n"); | 327 | BIO_printf(bio_err, " -tls1_2 - just use TLSv1.2\n"); |
| 329 | BIO_printf(bio_err," -tls1_1 - just use TLSv1.1\n"); | 328 | BIO_printf(bio_err, " -tls1_1 - just use TLSv1.1\n"); |
| 330 | BIO_printf(bio_err," -tls1 - just use TLSv1\n"); | 329 | BIO_printf(bio_err, " -tls1 - just use TLSv1\n"); |
| 331 | BIO_printf(bio_err," -dtls1 - just use DTLSv1\n"); | 330 | BIO_printf(bio_err, " -dtls1 - just use DTLSv1\n"); |
| 332 | BIO_printf(bio_err," -mtu - set the link layer MTU\n"); | 331 | BIO_printf(bio_err, " -mtu - set the link layer MTU\n"); |
| 333 | BIO_printf(bio_err," -no_tls1_2/-no_tls1_1/-no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol\n"); | 332 | BIO_printf(bio_err, " -no_tls1_2/-no_tls1_1/-no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol\n"); |
| 334 | BIO_printf(bio_err," -bugs - Switch on all SSL implementation bug workarounds\n"); | 333 | BIO_printf(bio_err, " -bugs - Switch on all SSL implementation bug workarounds\n"); |
| 335 | BIO_printf(bio_err," -cipher - preferred cipher to use, use the 'openssl ciphers'\n"); | 334 | BIO_printf(bio_err, " -cipher - preferred cipher to use, use the 'openssl ciphers'\n"); |
| 336 | BIO_printf(bio_err," command to see what is available\n"); | 335 | BIO_printf(bio_err, " command to see what is available\n"); |
| 337 | BIO_printf(bio_err," -starttls prot - use the STARTTLS command before starting TLS\n"); | 336 | BIO_printf(bio_err, " -starttls prot - use the STARTTLS command before starting TLS\n"); |
| 338 | BIO_printf(bio_err," for those protocols that support it, where\n"); | 337 | BIO_printf(bio_err, " for those protocols that support it, where\n"); |
| 339 | BIO_printf(bio_err," 'prot' defines which one to assume. Currently,\n"); | 338 | BIO_printf(bio_err, " 'prot' defines which one to assume. Currently,\n"); |
| 340 | BIO_printf(bio_err," only \"smtp\", \"pop3\", \"imap\", \"ftp\" and \"xmpp\"\n"); | 339 | BIO_printf(bio_err, " only \"smtp\", \"pop3\", \"imap\", \"ftp\" and \"xmpp\"\n"); |
| 341 | BIO_printf(bio_err," are supported.\n"); | 340 | BIO_printf(bio_err, " are supported.\n"); |
| 342 | #ifndef OPENSSL_NO_ENGINE | 341 | #ifndef OPENSSL_NO_ENGINE |
| 343 | BIO_printf(bio_err," -engine id - Initialise and use the specified engine\n"); | 342 | BIO_printf(bio_err, " -engine id - Initialise and use the specified engine\n"); |
| 344 | #endif | 343 | #endif |
| 345 | BIO_printf(bio_err," -rand file%cfile%c...\n", ':', ':'); | 344 | BIO_printf(bio_err, " -rand file%cfile%c...\n", ':', ':'); |
| 346 | BIO_printf(bio_err," -sess_out arg - file to write SSL session to\n"); | 345 | BIO_printf(bio_err, " -sess_out arg - file to write SSL session to\n"); |
| 347 | BIO_printf(bio_err," -sess_in arg - file to read SSL session from\n"); | 346 | BIO_printf(bio_err, " -sess_in arg - file to read SSL session from\n"); |
| 348 | #ifndef OPENSSL_NO_TLSEXT | 347 | #ifndef OPENSSL_NO_TLSEXT |
| 349 | BIO_printf(bio_err," -servername host - Set TLS extension servername in ClientHello\n"); | 348 | BIO_printf(bio_err, " -servername host - Set TLS extension servername in ClientHello\n"); |
| 350 | BIO_printf(bio_err," -tlsextdebug - hex dump of all TLS extensions received\n"); | 349 | BIO_printf(bio_err, " -tlsextdebug - hex dump of all TLS extensions received\n"); |
| 351 | BIO_printf(bio_err," -status - request certificate status from server\n"); | 350 | BIO_printf(bio_err, " -status - request certificate status from server\n"); |
| 352 | BIO_printf(bio_err," -no_ticket - disable use of RFC4507bis session tickets\n"); | 351 | BIO_printf(bio_err, " -no_ticket - disable use of RFC4507bis session tickets\n"); |
| 353 | # ifndef OPENSSL_NO_NEXTPROTONEG | 352 | #ifndef OPENSSL_NO_NEXTPROTONEG |
| 354 | BIO_printf(bio_err," -nextprotoneg arg - enable NPN extension, considering named protocols supported (comma-separated list)\n"); | 353 | BIO_printf(bio_err, " -nextprotoneg arg - enable NPN extension, considering named protocols supported (comma-separated list)\n"); |
| 355 | # endif | 354 | #endif |
| 356 | #endif | 355 | #endif |
| 357 | BIO_printf(bio_err," -legacy_renegotiation - enable use of legacy renegotiation (dangerous)\n"); | 356 | BIO_printf(bio_err, " -legacy_renegotiation - enable use of legacy renegotiation (dangerous)\n"); |
| 358 | #ifndef OPENSSL_NO_SRTP | 357 | #ifndef OPENSSL_NO_SRTP |
| 359 | BIO_printf(bio_err," -use_srtp profiles - Offer SRTP key management with a colon-separated profile list\n"); | 358 | BIO_printf(bio_err, " -use_srtp profiles - Offer SRTP key management with a colon-separated profile list\n"); |
| 360 | #endif | 359 | #endif |
| 361 | BIO_printf(bio_err," -keymatexport label - Export keying material using label\n"); | 360 | BIO_printf(bio_err, " -keymatexport label - Export keying material using label\n"); |
| 362 | BIO_printf(bio_err," -keymatexportlen len - Export len bytes of keying material (default 20)\n"); | 361 | BIO_printf(bio_err, " -keymatexportlen len - Export len bytes of keying material (default 20)\n"); |
| 363 | } | 362 | } |
| 364 | 363 | ||
| 365 | #ifndef OPENSSL_NO_TLSEXT | 364 | #ifndef OPENSSL_NO_TLSEXT |
| 366 | 365 | ||
| 367 | /* This is a context that we pass to callbacks */ | 366 | /* This is a context that we pass to callbacks */ |
| 368 | typedef struct tlsextctx_st { | 367 | typedef struct tlsextctx_st { |
| 369 | BIO * biodebug; | 368 | BIO *biodebug; |
| 370 | int ack; | 369 | int ack; |
| 371 | } tlsextctx; | 370 | } tlsextctx; |
| 372 | 371 | ||
| 373 | 372 | ||
| 374 | static int ssl_servername_cb(SSL *s, int *ad, void *arg) | 373 | static int |
| 375 | { | 374 | ssl_servername_cb(SSL * s, int *ad, void *arg) |
| 376 | tlsextctx * p = (tlsextctx *) arg; | 375 | { |
| 377 | const char * hn= SSL_get_servername(s, TLSEXT_NAMETYPE_host_name); | 376 | tlsextctx *p = (tlsextctx *) arg; |
| 378 | if (SSL_get_servername_type(s) != -1) | 377 | const char *hn = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name); |
| 379 | p->ack = !SSL_session_reused(s) && hn != NULL; | 378 | if (SSL_get_servername_type(s) != -1) |
| 380 | else | 379 | p->ack = !SSL_session_reused(s) && hn != NULL; |
| 381 | BIO_printf(bio_err,"Can't use SSL_get_servername\n"); | 380 | else |
| 382 | 381 | BIO_printf(bio_err, "Can't use SSL_get_servername\n"); | |
| 382 | |||
| 383 | return SSL_TLSEXT_ERR_OK; | 383 | return SSL_TLSEXT_ERR_OK; |
| 384 | } | 384 | } |
| 385 | 385 | ||
| 386 | #ifndef OPENSSL_NO_SRP | 386 | #ifndef OPENSSL_NO_SRP |
| 387 | 387 | ||
| 388 | /* This is a context that we pass to all callbacks */ | 388 | /* This is a context that we pass to all callbacks */ |
| 389 | typedef struct srp_arg_st | 389 | typedef struct srp_arg_st { |
| 390 | { | ||
| 391 | char *srppassin; | 390 | char *srppassin; |
| 392 | char *srplogin; | 391 | char *srplogin; |
| 393 | int msg; /* copy from c_msg */ | 392 | int msg; /* copy from c_msg */ |
| 394 | int debug; /* copy from c_debug */ | 393 | int debug; /* copy from c_debug */ |
| 395 | int amp; /* allow more groups */ | 394 | int amp; /* allow more groups */ |
| 396 | int strength /* minimal size for N */ ; | 395 | int strength /* minimal size for N */ ; |
| 397 | } SRP_ARG; | 396 | } SRP_ARG; |
| 398 | 397 | ||
| 399 | #define SRP_NUMBER_ITERATIONS_FOR_PRIME 64 | 398 | #define SRP_NUMBER_ITERATIONS_FOR_PRIME 64 |
| 400 | 399 | ||
| 401 | static int srp_Verify_N_and_g(BIGNUM *N, BIGNUM *g) | 400 | static int |
| 402 | { | 401 | srp_Verify_N_and_g(BIGNUM * N, BIGNUM * g) |
| 402 | { | ||
| 403 | BN_CTX *bn_ctx = BN_CTX_new(); | 403 | BN_CTX *bn_ctx = BN_CTX_new(); |
| 404 | BIGNUM *p = BN_new(); | 404 | BIGNUM *p = BN_new(); |
| 405 | BIGNUM *r = BN_new(); | 405 | BIGNUM *r = BN_new(); |
| 406 | int ret = | 406 | int ret = |
| 407 | g != NULL && N != NULL && bn_ctx != NULL && BN_is_odd(N) && | 407 | g != NULL && N != NULL && bn_ctx != NULL && BN_is_odd(N) && |
| 408 | BN_is_prime_ex(N, SRP_NUMBER_ITERATIONS_FOR_PRIME, bn_ctx, NULL) && | 408 | BN_is_prime_ex(N, SRP_NUMBER_ITERATIONS_FOR_PRIME, bn_ctx, NULL) && |
| 409 | p != NULL && BN_rshift1(p, N) && | 409 | p != NULL && BN_rshift1(p, N) && |
| 410 | 410 | ||
| 411 | /* p = (N-1)/2 */ | 411 | /* p = (N-1)/2 */ |
| 412 | BN_is_prime_ex(p, SRP_NUMBER_ITERATIONS_FOR_PRIME, bn_ctx, NULL) && | 412 | BN_is_prime_ex(p, SRP_NUMBER_ITERATIONS_FOR_PRIME, bn_ctx, NULL) && |
| 413 | r != NULL && | 413 | r != NULL && |
| 414 | 414 | ||
| 415 | /* verify g^((N-1)/2) == -1 (mod N) */ | 415 | /* verify g^((N-1)/2) == -1 (mod N) */ |
| 416 | BN_mod_exp(r, g, p, N, bn_ctx) && | 416 | BN_mod_exp(r, g, p, N, bn_ctx) && |
| 417 | BN_add_word(r, 1) && | 417 | BN_add_word(r, 1) && |
| 418 | BN_cmp(r, N) == 0; | 418 | BN_cmp(r, N) == 0; |
| 419 | 419 | ||
| 420 | if(r) | 420 | if (r) |
| 421 | BN_free(r); | 421 | BN_free(r); |
| 422 | if(p) | 422 | if (p) |
| 423 | BN_free(p); | 423 | BN_free(p); |
| 424 | if(bn_ctx) | 424 | if (bn_ctx) |
| 425 | BN_CTX_free(bn_ctx); | 425 | BN_CTX_free(bn_ctx); |
| 426 | return ret; | 426 | return ret; |
| 427 | } | 427 | } |
| 428 | 428 | ||
| 429 | /* This callback is used here for two purposes: | 429 | /* This callback is used here for two purposes: |
| 430 | - extended debugging | 430 | - extended debugging |
| @@ -432,34 +432,34 @@ static int srp_Verify_N_and_g(BIGNUM *N, BIGNUM *g) | |||
| 432 | The callback is only called for a non default group. | 432 | The callback is only called for a non default group. |
| 433 | 433 | ||
| 434 | An application does not need the call back at all if | 434 | An application does not need the call back at all if |
| 435 | only the stanard groups are used. In real life situations, | 435 | only the stanard groups are used. In real life situations, |
| 436 | client and server already share well known groups, | 436 | client and server already share well known groups, |
| 437 | thus there is no need to verify them. | 437 | thus there is no need to verify them. |
| 438 | Furthermore, in case that a server actually proposes a group that | 438 | Furthermore, in case that a server actually proposes a group that |
| 439 | is not one of those defined in RFC 5054, it is more appropriate | 439 | is not one of those defined in RFC 5054, it is more appropriate |
| 440 | to add the group to a static list and then compare since | 440 | to add the group to a static list and then compare since |
| 441 | primality tests are rather cpu consuming. | 441 | primality tests are rather cpu consuming. |
| 442 | */ | 442 | */ |
| 443 | 443 | ||
| 444 | static int ssl_srp_verify_param_cb(SSL *s, void *arg) | 444 | static int |
| 445 | { | 445 | ssl_srp_verify_param_cb(SSL * s, void *arg) |
| 446 | SRP_ARG *srp_arg = (SRP_ARG *)arg; | 446 | { |
| 447 | SRP_ARG *srp_arg = (SRP_ARG *) arg; | ||
| 447 | BIGNUM *N = NULL, *g = NULL; | 448 | BIGNUM *N = NULL, *g = NULL; |
| 448 | if (!(N = SSL_get_srp_N(s)) || !(g = SSL_get_srp_g(s))) | 449 | if (!(N = SSL_get_srp_N(s)) || !(g = SSL_get_srp_g(s))) |
| 449 | return 0; | 450 | return 0; |
| 450 | if (srp_arg->debug || srp_arg->msg || srp_arg->amp == 1) | 451 | if (srp_arg->debug || srp_arg->msg || srp_arg->amp == 1) { |
| 451 | { | 452 | BIO_printf(bio_err, "SRP parameters:\n"); |
| 452 | BIO_printf(bio_err, "SRP parameters:\n"); | 453 | BIO_printf(bio_err, "\tN="); |
| 453 | BIO_printf(bio_err,"\tN="); BN_print(bio_err,N); | 454 | BN_print(bio_err, N); |
| 454 | BIO_printf(bio_err,"\n\tg="); BN_print(bio_err,g); | 455 | BIO_printf(bio_err, "\n\tg="); |
| 455 | BIO_printf(bio_err,"\n"); | 456 | BN_print(bio_err, g); |
| 456 | } | 457 | BIO_printf(bio_err, "\n"); |
| 457 | 458 | } | |
| 458 | if (SRP_check_known_gN_param(g,N)) | 459 | if (SRP_check_known_gN_param(g, N)) |
| 459 | return 1; | 460 | return 1; |
| 460 | 461 | ||
| 461 | if (srp_arg->amp == 1) | 462 | if (srp_arg->amp == 1) { |
| 462 | { | ||
| 463 | if (srp_arg->debug) | 463 | if (srp_arg->debug) |
| 464 | BIO_printf(bio_err, "SRP param N and g are not known params, going to check deeper.\n"); | 464 | BIO_printf(bio_err, "SRP param N and g are not known params, going to check deeper.\n"); |
| 465 | 465 | ||
| @@ -467,41 +467,41 @@ static int ssl_srp_verify_param_cb(SSL *s, void *arg) | |||
| 467 | Implementors should rather add the value to the known ones. | 467 | Implementors should rather add the value to the known ones. |
| 468 | The minimal size has already been tested. | 468 | The minimal size has already been tested. |
| 469 | */ | 469 | */ |
| 470 | if (BN_num_bits(g) <= BN_BITS && srp_Verify_N_and_g(N,g)) | 470 | if (BN_num_bits(g) <= BN_BITS && srp_Verify_N_and_g(N, g)) |
| 471 | return 1; | 471 | return 1; |
| 472 | } | 472 | } |
| 473 | BIO_printf(bio_err, "SRP param N and g rejected.\n"); | 473 | BIO_printf(bio_err, "SRP param N and g rejected.\n"); |
| 474 | return 0; | 474 | return 0; |
| 475 | } | 475 | } |
| 476 | 476 | ||
| 477 | #define PWD_STRLEN 1024 | 477 | #define PWD_STRLEN 1024 |
| 478 | 478 | ||
| 479 | static char * ssl_give_srp_client_pwd_cb(SSL *s, void *arg) | 479 | static char * |
| 480 | { | 480 | ssl_give_srp_client_pwd_cb(SSL * s, void *arg) |
| 481 | SRP_ARG *srp_arg = (SRP_ARG *)arg; | 481 | { |
| 482 | char *pass = (char *)malloc(PWD_STRLEN+1); | 482 | SRP_ARG *srp_arg = (SRP_ARG *) arg; |
| 483 | char *pass = (char *) malloc(PWD_STRLEN + 1); | ||
| 483 | PW_CB_DATA cb_tmp; | 484 | PW_CB_DATA cb_tmp; |
| 484 | int l; | 485 | int l; |
| 485 | 486 | ||
| 486 | cb_tmp.password = (char *)srp_arg->srppassin; | 487 | cb_tmp.password = (char *) srp_arg->srppassin; |
| 487 | cb_tmp.prompt_info = "SRP user"; | 488 | cb_tmp.prompt_info = "SRP user"; |
| 488 | if ((l = password_callback(pass, PWD_STRLEN, 0, &cb_tmp))<0) | 489 | if ((l = password_callback(pass, PWD_STRLEN, 0, &cb_tmp)) < 0) { |
| 489 | { | 490 | BIO_printf(bio_err, "Can't read Password\n"); |
| 490 | BIO_printf (bio_err, "Can't read Password\n"); | ||
| 491 | free(pass); | 491 | free(pass); |
| 492 | return NULL; | 492 | return NULL; |
| 493 | } | 493 | } |
| 494 | *(pass+l)= '\0'; | 494 | *(pass + l) = '\0'; |
| 495 | 495 | ||
| 496 | return pass; | 496 | return pass; |
| 497 | } | 497 | } |
| 498 | 498 | ||
| 499 | #endif | 499 | #endif |
| 500 | #ifndef OPENSSL_NO_SRTP | 500 | #ifndef OPENSSL_NO_SRTP |
| 501 | char *srtp_profiles = NULL; | 501 | char *srtp_profiles = NULL; |
| 502 | #endif | 502 | #endif |
| 503 | 503 | ||
| 504 | # ifndef OPENSSL_NO_NEXTPROTONEG | 504 | #ifndef OPENSSL_NO_NEXTPROTONEG |
| 505 | /* This the context that we pass to next_proto_cb */ | 505 | /* This the context that we pass to next_proto_cb */ |
| 506 | typedef struct tlsextnextprotoctx_st { | 506 | typedef struct tlsextnextprotoctx_st { |
| 507 | unsigned char *data; | 507 | unsigned char *data; |
| @@ -511,34 +511,31 @@ typedef struct tlsextnextprotoctx_st { | |||
| 511 | 511 | ||
| 512 | static tlsextnextprotoctx next_proto; | 512 | static tlsextnextprotoctx next_proto; |
| 513 | 513 | ||
| 514 | static int next_proto_cb(SSL *s, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg) | 514 | static int |
| 515 | { | 515 | next_proto_cb(SSL * s, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg) |
| 516 | { | ||
| 516 | tlsextnextprotoctx *ctx = arg; | 517 | tlsextnextprotoctx *ctx = arg; |
| 517 | 518 | ||
| 518 | if (!c_quiet) | 519 | if (!c_quiet) { |
| 519 | { | ||
| 520 | /* We can assume that |in| is syntactically valid. */ | 520 | /* We can assume that |in| is syntactically valid. */ |
| 521 | unsigned i; | 521 | unsigned i; |
| 522 | BIO_printf(bio_c_out, "Protocols advertised by server: "); | 522 | BIO_printf(bio_c_out, "Protocols advertised by server: "); |
| 523 | for (i = 0; i < inlen; ) | 523 | for (i = 0; i < inlen;) { |
| 524 | { | ||
| 525 | if (i) | 524 | if (i) |
| 526 | BIO_write(bio_c_out, ", ", 2); | 525 | BIO_write(bio_c_out, ", ", 2); |
| 527 | BIO_write(bio_c_out, &in[i + 1], in[i]); | 526 | BIO_write(bio_c_out, &in[i + 1], in[i]); |
| 528 | i += in[i] + 1; | 527 | i += in[i] + 1; |
| 529 | } | ||
| 530 | BIO_write(bio_c_out, "\n", 1); | ||
| 531 | } | 528 | } |
| 532 | 529 | BIO_write(bio_c_out, "\n", 1); | |
| 530 | } | ||
| 533 | ctx->status = SSL_select_next_proto(out, outlen, in, inlen, ctx->data, ctx->len); | 531 | ctx->status = SSL_select_next_proto(out, outlen, in, inlen, ctx->data, ctx->len); |
| 534 | return SSL_TLSEXT_ERR_OK; | 532 | return SSL_TLSEXT_ERR_OK; |
| 535 | } | 533 | } |
| 536 | # endif /* ndef OPENSSL_NO_NEXTPROTONEG */ | 534 | #endif /* ndef OPENSSL_NO_NEXTPROTONEG */ |
| 537 | #endif | 535 | #endif |
| 538 | 536 | ||
| 539 | enum | 537 | enum { |
| 540 | { | 538 | PROTO_OFF = 0, |
| 541 | PROTO_OFF = 0, | ||
| 542 | PROTO_SMTP, | 539 | PROTO_SMTP, |
| 543 | PROTO_POP3, | 540 | PROTO_POP3, |
| 544 | PROTO_IMAP, | 541 | PROTO_IMAP, |
| @@ -548,439 +545,406 @@ enum | |||
| 548 | 545 | ||
| 549 | int MAIN(int, char **); | 546 | int MAIN(int, char **); |
| 550 | 547 | ||
| 551 | int MAIN(int argc, char **argv) | 548 | int |
| 552 | { | 549 | MAIN(int argc, char **argv) |
| 553 | unsigned int off=0, clr=0; | 550 | { |
| 554 | SSL *con=NULL; | 551 | unsigned int off = 0, clr = 0; |
| 552 | SSL *con = NULL; | ||
| 555 | #ifndef OPENSSL_NO_KRB5 | 553 | #ifndef OPENSSL_NO_KRB5 |
| 556 | KSSL_CTX *kctx; | 554 | KSSL_CTX *kctx; |
| 557 | #endif | 555 | #endif |
| 558 | int s,k,width,state=0, af=AF_UNSPEC; | 556 | int s, k, width, state = 0, af = AF_UNSPEC; |
| 559 | char *cbuf=NULL,*sbuf=NULL,*mbuf=NULL; | 557 | char *cbuf = NULL, *sbuf = NULL, *mbuf = NULL; |
| 560 | int cbuf_len,cbuf_off; | 558 | int cbuf_len, cbuf_off; |
| 561 | int sbuf_len,sbuf_off; | 559 | int sbuf_len, sbuf_off; |
| 562 | fd_set readfds,writefds; | 560 | fd_set readfds, writefds; |
| 563 | char *port=PORT_STR; | 561 | char *port = PORT_STR; |
| 564 | int full_log=1; | 562 | int full_log = 1; |
| 565 | char *host=SSL_HOST_NAME; | 563 | char *host = SSL_HOST_NAME; |
| 566 | char *cert_file=NULL,*key_file=NULL; | 564 | char *cert_file = NULL, *key_file = NULL; |
| 567 | int cert_format = FORMAT_PEM, key_format = FORMAT_PEM; | 565 | int cert_format = FORMAT_PEM, key_format = FORMAT_PEM; |
| 568 | char *passarg = NULL, *pass = NULL; | 566 | char *passarg = NULL, *pass = NULL; |
| 569 | X509 *cert = NULL; | 567 | X509 *cert = NULL; |
| 570 | EVP_PKEY *key = NULL; | 568 | EVP_PKEY *key = NULL; |
| 571 | char *CApath=NULL,*CAfile=NULL,*cipher=NULL; | 569 | char *CApath = NULL, *CAfile = NULL, *cipher = NULL; |
| 572 | int reconnect=0,badop=0,verify=SSL_VERIFY_NONE,bugs=0; | 570 | int reconnect = 0, badop = 0, verify = SSL_VERIFY_NONE, bugs = 0; |
| 573 | int crlf=0; | 571 | int crlf = 0; |
| 574 | int write_tty,read_tty,write_ssl,read_ssl,tty_on,ssl_pending; | 572 | int write_tty, read_tty, write_ssl, read_ssl, tty_on, ssl_pending; |
| 575 | SSL_CTX *ctx=NULL; | 573 | SSL_CTX *ctx = NULL; |
| 576 | int ret=1,in_init=1,i,nbio_test=0; | 574 | int ret = 1, in_init = 1, i, nbio_test = 0; |
| 577 | int starttls_proto = PROTO_OFF; | 575 | int starttls_proto = PROTO_OFF; |
| 578 | int prexit = 0; | 576 | int prexit = 0; |
| 579 | X509_VERIFY_PARAM *vpm = NULL; | 577 | X509_VERIFY_PARAM *vpm = NULL; |
| 580 | int badarg = 0; | 578 | int badarg = 0; |
| 581 | const SSL_METHOD *meth=NULL; | 579 | const SSL_METHOD *meth = NULL; |
| 582 | int socket_type=SOCK_STREAM; | 580 | int socket_type = SOCK_STREAM; |
| 583 | BIO *sbio; | 581 | BIO *sbio; |
| 584 | char *inrand=NULL; | 582 | char *inrand = NULL; |
| 585 | int mbuf_len=0; | 583 | int mbuf_len = 0; |
| 586 | struct timeval timeout, *timeoutp; | 584 | struct timeval timeout, *timeoutp; |
| 587 | #ifndef OPENSSL_NO_ENGINE | 585 | #ifndef OPENSSL_NO_ENGINE |
| 588 | char *engine_id=NULL; | 586 | char *engine_id = NULL; |
| 589 | char *ssl_client_engine_id=NULL; | 587 | char *ssl_client_engine_id = NULL; |
| 590 | ENGINE *ssl_client_engine=NULL; | 588 | ENGINE *ssl_client_engine = NULL; |
| 591 | #endif | 589 | #endif |
| 592 | ENGINE *e=NULL; | 590 | ENGINE *e = NULL; |
| 593 | #ifndef OPENSSL_NO_TLSEXT | 591 | #ifndef OPENSSL_NO_TLSEXT |
| 594 | char *servername = NULL; | 592 | char *servername = NULL; |
| 595 | tlsextctx tlsextcbp = | 593 | tlsextctx tlsextcbp = |
| 596 | {NULL,0}; | 594 | {NULL, 0}; |
| 597 | # ifndef OPENSSL_NO_NEXTPROTONEG | 595 | #ifndef OPENSSL_NO_NEXTPROTONEG |
| 598 | const char *next_proto_neg_in = NULL; | 596 | const char *next_proto_neg_in = NULL; |
| 599 | # endif | 597 | #endif |
| 600 | #endif | 598 | #endif |
| 601 | char *sess_in = NULL; | 599 | char *sess_in = NULL; |
| 602 | char *sess_out = NULL; | 600 | char *sess_out = NULL; |
| 603 | struct sockaddr peer; | 601 | struct sockaddr peer; |
| 604 | int peerlen = sizeof(peer); | 602 | int peerlen = sizeof(peer); |
| 605 | int enable_timeouts = 0 ; | 603 | int enable_timeouts = 0; |
| 606 | long socket_mtu = 0; | 604 | long socket_mtu = 0; |
| 607 | #ifndef OPENSSL_NO_JPAKE | 605 | #ifndef OPENSSL_NO_JPAKE |
| 608 | char *jpake_secret = NULL; | 606 | char *jpake_secret = NULL; |
| 609 | #endif | 607 | #endif |
| 610 | #ifndef OPENSSL_NO_SRP | 608 | #ifndef OPENSSL_NO_SRP |
| 611 | char * srppass = NULL; | 609 | char *srppass = NULL; |
| 612 | int srp_lateuser = 0; | 610 | int srp_lateuser = 0; |
| 613 | SRP_ARG srp_arg = {NULL,NULL,0,0,0,1024}; | 611 | SRP_ARG srp_arg = {NULL, NULL, 0, 0, 0, 1024}; |
| 614 | #endif | 612 | #endif |
| 615 | 613 | ||
| 616 | meth=SSLv23_client_method(); | 614 | meth = SSLv23_client_method(); |
| 617 | 615 | ||
| 618 | apps_startup(); | 616 | apps_startup(); |
| 619 | c_Pause=0; | 617 | c_Pause = 0; |
| 620 | c_quiet=0; | 618 | c_quiet = 0; |
| 621 | c_ign_eof=0; | 619 | c_ign_eof = 0; |
| 622 | c_debug=0; | 620 | c_debug = 0; |
| 623 | c_msg=0; | 621 | c_msg = 0; |
| 624 | c_showcerts=0; | 622 | c_showcerts = 0; |
| 625 | 623 | ||
| 626 | if (bio_err == NULL) | 624 | if (bio_err == NULL) |
| 627 | bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); | 625 | bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); |
| 628 | 626 | ||
| 629 | if (!load_config(bio_err, NULL)) | 627 | if (!load_config(bio_err, NULL)) |
| 630 | goto end; | 628 | goto end; |
| 631 | 629 | ||
| 632 | if ( ((cbuf=malloc(BUFSIZZ)) == NULL) || | 630 | if (((cbuf = malloc(BUFSIZZ)) == NULL) || |
| 633 | ((sbuf=malloc(BUFSIZZ)) == NULL) || | 631 | ((sbuf = malloc(BUFSIZZ)) == NULL) || |
| 634 | ((mbuf=malloc(BUFSIZZ + 1)) == NULL)) /* NUL byte */ | 632 | ((mbuf = malloc(BUFSIZZ + 1)) == NULL)) { /* NUL byte */ |
| 635 | { | 633 | BIO_printf(bio_err, "out of memory\n"); |
| 636 | BIO_printf(bio_err,"out of memory\n"); | ||
| 637 | goto end; | 634 | goto end; |
| 638 | } | 635 | } |
| 639 | 636 | verify_depth = 0; | |
| 640 | verify_depth=0; | 637 | verify_error = X509_V_OK; |
| 641 | verify_error=X509_V_OK; | ||
| 642 | #ifdef FIONBIO | 638 | #ifdef FIONBIO |
| 643 | c_nbio=0; | 639 | c_nbio = 0; |
| 644 | #endif | 640 | #endif |
| 645 | 641 | ||
| 646 | argc--; | 642 | argc--; |
| 647 | argv++; | 643 | argv++; |
| 648 | while (argc >= 1) | 644 | while (argc >= 1) { |
| 649 | { | 645 | if (strcmp(*argv, "-host") == 0) { |
| 650 | if (strcmp(*argv,"-host") == 0) | 646 | if (--argc < 1) |
| 651 | { | 647 | goto bad; |
| 652 | if (--argc < 1) goto bad; | 648 | host = *(++argv); |
| 653 | host= *(++argv); | 649 | } else if (strcmp(*argv, "-port") == 0) { |
| 654 | } | 650 | if (--argc < 1) |
| 655 | else if (strcmp(*argv,"-port") == 0) | 651 | goto bad; |
| 656 | { | 652 | port = *(++argv); |
| 657 | if (--argc < 1) goto bad; | 653 | if (port == NULL || *port == '\0') |
| 658 | port= *(++argv); | 654 | goto bad; |
| 659 | if (port == NULL || *port == '\0') goto bad; | 655 | } else if (strcmp(*argv, "-connect") == 0) { |
| 660 | } | 656 | if (--argc < 1) |
| 661 | else if (strcmp(*argv,"-connect") == 0) | 657 | goto bad; |
| 662 | { | 658 | if (!extract_host_port(*(++argv), &host, NULL, &port)) |
| 663 | if (--argc < 1) goto bad; | 659 | goto bad; |
| 664 | if (!extract_host_port(*(++argv),&host,NULL,&port)) | 660 | } else if (strcmp(*argv, "-verify") == 0) { |
| 661 | verify = SSL_VERIFY_PEER; | ||
| 662 | if (--argc < 1) | ||
| 663 | goto bad; | ||
| 664 | verify_depth = atoi(*(++argv)); | ||
| 665 | BIO_printf(bio_err, "verify depth is %d\n", verify_depth); | ||
| 666 | } else if (strcmp(*argv, "-cert") == 0) { | ||
| 667 | if (--argc < 1) | ||
| 668 | goto bad; | ||
| 669 | cert_file = *(++argv); | ||
| 670 | } else if (strcmp(*argv, "-sess_out") == 0) { | ||
| 671 | if (--argc < 1) | ||
| 665 | goto bad; | 672 | goto bad; |
| 666 | } | ||
| 667 | else if (strcmp(*argv,"-verify") == 0) | ||
| 668 | { | ||
| 669 | verify=SSL_VERIFY_PEER; | ||
| 670 | if (--argc < 1) goto bad; | ||
| 671 | verify_depth=atoi(*(++argv)); | ||
| 672 | BIO_printf(bio_err,"verify depth is %d\n",verify_depth); | ||
| 673 | } | ||
| 674 | else if (strcmp(*argv,"-cert") == 0) | ||
| 675 | { | ||
| 676 | if (--argc < 1) goto bad; | ||
| 677 | cert_file= *(++argv); | ||
| 678 | } | ||
| 679 | else if (strcmp(*argv,"-sess_out") == 0) | ||
| 680 | { | ||
| 681 | if (--argc < 1) goto bad; | ||
| 682 | sess_out = *(++argv); | 673 | sess_out = *(++argv); |
| 683 | } | 674 | } else if (strcmp(*argv, "-sess_in") == 0) { |
| 684 | else if (strcmp(*argv,"-sess_in") == 0) | 675 | if (--argc < 1) |
| 685 | { | 676 | goto bad; |
| 686 | if (--argc < 1) goto bad; | ||
| 687 | sess_in = *(++argv); | 677 | sess_in = *(++argv); |
| 688 | } | 678 | } else if (strcmp(*argv, "-certform") == 0) { |
| 689 | else if (strcmp(*argv,"-certform") == 0) | 679 | if (--argc < 1) |
| 690 | { | 680 | goto bad; |
| 691 | if (--argc < 1) goto bad; | ||
| 692 | cert_format = str2fmt(*(++argv)); | 681 | cert_format = str2fmt(*(++argv)); |
| 693 | } | 682 | } else if (args_verify(&argv, &argc, &badarg, bio_err, &vpm)) { |
| 694 | else if (args_verify(&argv, &argc, &badarg, bio_err, &vpm)) | ||
| 695 | { | ||
| 696 | if (badarg) | 683 | if (badarg) |
| 697 | goto bad; | 684 | goto bad; |
| 698 | continue; | 685 | continue; |
| 699 | } | 686 | } else if (strcmp(*argv, "-verify_return_error") == 0) |
| 700 | else if (strcmp(*argv,"-verify_return_error") == 0) | ||
| 701 | verify_return_error = 1; | 687 | verify_return_error = 1; |
| 702 | else if (strcmp(*argv,"-prexit") == 0) | 688 | else if (strcmp(*argv, "-prexit") == 0) |
| 703 | prexit=1; | 689 | prexit = 1; |
| 704 | else if (strcmp(*argv,"-crlf") == 0) | 690 | else if (strcmp(*argv, "-crlf") == 0) |
| 705 | crlf=1; | 691 | crlf = 1; |
| 706 | else if (strcmp(*argv,"-quiet") == 0) | 692 | else if (strcmp(*argv, "-quiet") == 0) { |
| 707 | { | 693 | c_quiet = 1; |
| 708 | c_quiet=1; | 694 | c_ign_eof = 1; |
| 709 | c_ign_eof=1; | 695 | } else if (strcmp(*argv, "-ign_eof") == 0) |
| 710 | } | 696 | c_ign_eof = 1; |
| 711 | else if (strcmp(*argv,"-ign_eof") == 0) | 697 | else if (strcmp(*argv, "-no_ign_eof") == 0) |
| 712 | c_ign_eof=1; | 698 | c_ign_eof = 0; |
| 713 | else if (strcmp(*argv,"-no_ign_eof") == 0) | 699 | else if (strcmp(*argv, "-pause") == 0) |
| 714 | c_ign_eof=0; | 700 | c_Pause = 1; |
| 715 | else if (strcmp(*argv,"-pause") == 0) | 701 | else if (strcmp(*argv, "-debug") == 0) |
| 716 | c_Pause=1; | 702 | c_debug = 1; |
| 717 | else if (strcmp(*argv,"-debug") == 0) | ||
| 718 | c_debug=1; | ||
| 719 | #ifndef OPENSSL_NO_TLSEXT | 703 | #ifndef OPENSSL_NO_TLSEXT |
| 720 | else if (strcmp(*argv,"-tlsextdebug") == 0) | 704 | else if (strcmp(*argv, "-tlsextdebug") == 0) |
| 721 | c_tlsextdebug=1; | 705 | c_tlsextdebug = 1; |
| 722 | else if (strcmp(*argv,"-status") == 0) | 706 | else if (strcmp(*argv, "-status") == 0) |
| 723 | c_status_req=1; | 707 | c_status_req = 1; |
| 724 | #endif | 708 | #endif |
| 725 | #ifdef WATT32 | 709 | #ifdef WATT32 |
| 726 | else if (strcmp(*argv,"-wdebug") == 0) | 710 | else if (strcmp(*argv, "-wdebug") == 0) |
| 727 | dbug_init(); | 711 | dbug_init(); |
| 728 | #endif | 712 | #endif |
| 729 | else if (strcmp(*argv,"-msg") == 0) | 713 | else if (strcmp(*argv, "-msg") == 0) |
| 730 | c_msg=1; | 714 | c_msg = 1; |
| 731 | else if (strcmp(*argv,"-showcerts") == 0) | 715 | else if (strcmp(*argv, "-showcerts") == 0) |
| 732 | c_showcerts=1; | 716 | c_showcerts = 1; |
| 733 | else if (strcmp(*argv,"-nbio_test") == 0) | 717 | else if (strcmp(*argv, "-nbio_test") == 0) |
| 734 | nbio_test=1; | 718 | nbio_test = 1; |
| 735 | else if (strcmp(*argv,"-state") == 0) | 719 | else if (strcmp(*argv, "-state") == 0) |
| 736 | state=1; | 720 | state = 1; |
| 737 | #ifndef OPENSSL_NO_PSK | 721 | #ifndef OPENSSL_NO_PSK |
| 738 | else if (strcmp(*argv,"-psk_identity") == 0) | 722 | else if (strcmp(*argv, "-psk_identity") == 0) { |
| 739 | { | 723 | if (--argc < 1) |
| 740 | if (--argc < 1) goto bad; | 724 | goto bad; |
| 741 | psk_identity=*(++argv); | 725 | psk_identity = *(++argv); |
| 742 | } | 726 | } else if (strcmp(*argv, "-psk") == 0) { |
| 743 | else if (strcmp(*argv,"-psk") == 0) | 727 | size_t j; |
| 744 | { | 728 | |
| 745 | size_t j; | 729 | if (--argc < 1) |
| 746 | 730 | goto bad; | |
| 747 | if (--argc < 1) goto bad; | 731 | psk_key = *(++argv); |
| 748 | psk_key=*(++argv); | 732 | for (j = 0; j < strlen(psk_key); j++) { |
| 749 | for (j = 0; j < strlen(psk_key); j++) | 733 | if (isxdigit((unsigned char) psk_key[j])) |
| 750 | { | 734 | continue; |
| 751 | if (isxdigit((unsigned char)psk_key[j])) | 735 | BIO_printf(bio_err, "Not a hex number '%s'\n", *argv); |
| 752 | continue; | 736 | goto bad; |
| 753 | BIO_printf(bio_err,"Not a hex number '%s'\n",*argv); | ||
| 754 | goto bad; | ||
| 755 | } | ||
| 756 | } | 737 | } |
| 738 | } | ||
| 757 | #endif | 739 | #endif |
| 758 | #ifndef OPENSSL_NO_SRP | 740 | #ifndef OPENSSL_NO_SRP |
| 759 | else if (strcmp(*argv,"-srpuser") == 0) | 741 | else if (strcmp(*argv, "-srpuser") == 0) { |
| 760 | { | 742 | if (--argc < 1) |
| 761 | if (--argc < 1) goto bad; | 743 | goto bad; |
| 762 | srp_arg.srplogin= *(++argv); | 744 | srp_arg.srplogin = *(++argv); |
| 763 | meth=TLSv1_client_method(); | 745 | meth = TLSv1_client_method(); |
| 764 | } | 746 | } else if (strcmp(*argv, "-srppass") == 0) { |
| 765 | else if (strcmp(*argv,"-srppass") == 0) | 747 | if (--argc < 1) |
| 766 | { | 748 | goto bad; |
| 767 | if (--argc < 1) goto bad; | 749 | srppass = *(++argv); |
| 768 | srppass= *(++argv); | 750 | meth = TLSv1_client_method(); |
| 769 | meth=TLSv1_client_method(); | 751 | } else if (strcmp(*argv, "-srp_strength") == 0) { |
| 770 | } | 752 | if (--argc < 1) |
| 771 | else if (strcmp(*argv,"-srp_strength") == 0) | 753 | goto bad; |
| 772 | { | 754 | srp_arg.strength = atoi(*(++argv)); |
| 773 | if (--argc < 1) goto bad; | 755 | BIO_printf(bio_err, "SRP minimal length for N is %d\n", srp_arg.strength); |
| 774 | srp_arg.strength=atoi(*(++argv)); | 756 | meth = TLSv1_client_method(); |
| 775 | BIO_printf(bio_err,"SRP minimal length for N is %d\n",srp_arg.strength); | 757 | } else if (strcmp(*argv, "-srp_lateuser") == 0) { |
| 776 | meth=TLSv1_client_method(); | 758 | srp_lateuser = 1; |
| 777 | } | 759 | meth = TLSv1_client_method(); |
| 778 | else if (strcmp(*argv,"-srp_lateuser") == 0) | 760 | } else if (strcmp(*argv, "-srp_moregroups") == 0) { |
| 779 | { | 761 | srp_arg.amp = 1; |
| 780 | srp_lateuser= 1; | 762 | meth = TLSv1_client_method(); |
| 781 | meth=TLSv1_client_method(); | 763 | } |
| 782 | } | ||
| 783 | else if (strcmp(*argv,"-srp_moregroups") == 0) | ||
| 784 | { | ||
| 785 | srp_arg.amp=1; | ||
| 786 | meth=TLSv1_client_method(); | ||
| 787 | } | ||
| 788 | #endif | 764 | #endif |
| 789 | else if (strcmp(*argv,"-ssl3") == 0) | 765 | else if (strcmp(*argv, "-ssl3") == 0) |
| 790 | meth=SSLv3_client_method(); | 766 | meth = SSLv3_client_method(); |
| 791 | else if (strcmp(*argv,"-tls1_2") == 0) | 767 | else if (strcmp(*argv, "-tls1_2") == 0) |
| 792 | meth=TLSv1_2_client_method(); | 768 | meth = TLSv1_2_client_method(); |
| 793 | else if (strcmp(*argv,"-tls1_1") == 0) | 769 | else if (strcmp(*argv, "-tls1_1") == 0) |
| 794 | meth=TLSv1_1_client_method(); | 770 | meth = TLSv1_1_client_method(); |
| 795 | else if (strcmp(*argv,"-tls1") == 0) | 771 | else if (strcmp(*argv, "-tls1") == 0) |
| 796 | meth=TLSv1_client_method(); | 772 | meth = TLSv1_client_method(); |
| 797 | #ifndef OPENSSL_NO_DTLS1 | 773 | #ifndef OPENSSL_NO_DTLS1 |
| 798 | else if (strcmp(*argv,"-dtls1") == 0) | 774 | else if (strcmp(*argv, "-dtls1") == 0) { |
| 799 | { | 775 | meth = DTLSv1_client_method(); |
| 800 | meth=DTLSv1_client_method(); | 776 | socket_type = SOCK_DGRAM; |
| 801 | socket_type=SOCK_DGRAM; | 777 | } else if (strcmp(*argv, "-timeout") == 0) |
| 802 | } | 778 | enable_timeouts = 1; |
| 803 | else if (strcmp(*argv,"-timeout") == 0) | 779 | else if (strcmp(*argv, "-mtu") == 0) { |
| 804 | enable_timeouts=1; | 780 | if (--argc < 1) |
| 805 | else if (strcmp(*argv,"-mtu") == 0) | 781 | goto bad; |
| 806 | { | ||
| 807 | if (--argc < 1) goto bad; | ||
| 808 | socket_mtu = atol(*(++argv)); | 782 | socket_mtu = atol(*(++argv)); |
| 809 | } | 783 | } |
| 810 | #endif | 784 | #endif |
| 811 | else if (strcmp(*argv,"-bugs") == 0) | 785 | else if (strcmp(*argv, "-bugs") == 0) |
| 812 | bugs=1; | 786 | bugs = 1; |
| 813 | else if (strcmp(*argv,"-keyform") == 0) | 787 | else if (strcmp(*argv, "-keyform") == 0) { |
| 814 | { | 788 | if (--argc < 1) |
| 815 | if (--argc < 1) goto bad; | 789 | goto bad; |
| 816 | key_format = str2fmt(*(++argv)); | 790 | key_format = str2fmt(*(++argv)); |
| 817 | } | 791 | } else if (strcmp(*argv, "-pass") == 0) { |
| 818 | else if (strcmp(*argv,"-pass") == 0) | 792 | if (--argc < 1) |
| 819 | { | 793 | goto bad; |
| 820 | if (--argc < 1) goto bad; | ||
| 821 | passarg = *(++argv); | 794 | passarg = *(++argv); |
| 822 | } | 795 | } else if (strcmp(*argv, "-key") == 0) { |
| 823 | else if (strcmp(*argv,"-key") == 0) | 796 | if (--argc < 1) |
| 824 | { | 797 | goto bad; |
| 825 | if (--argc < 1) goto bad; | 798 | key_file = *(++argv); |
| 826 | key_file= *(++argv); | 799 | } else if (strcmp(*argv, "-reconnect") == 0) { |
| 827 | } | 800 | reconnect = 5; |
| 828 | else if (strcmp(*argv,"-reconnect") == 0) | 801 | } else if (strcmp(*argv, "-CApath") == 0) { |
| 829 | { | 802 | if (--argc < 1) |
| 830 | reconnect=5; | 803 | goto bad; |
| 831 | } | 804 | CApath = *(++argv); |
| 832 | else if (strcmp(*argv,"-CApath") == 0) | 805 | } else if (strcmp(*argv, "-CAfile") == 0) { |
| 833 | { | 806 | if (--argc < 1) |
| 834 | if (--argc < 1) goto bad; | 807 | goto bad; |
| 835 | CApath= *(++argv); | 808 | CAfile = *(++argv); |
| 836 | } | 809 | } else if (strcmp(*argv, "-no_tls1_2") == 0) |
| 837 | else if (strcmp(*argv,"-CAfile") == 0) | 810 | off |= SSL_OP_NO_TLSv1_2; |
| 838 | { | 811 | else if (strcmp(*argv, "-no_tls1_1") == 0) |
| 839 | if (--argc < 1) goto bad; | 812 | off |= SSL_OP_NO_TLSv1_1; |
| 840 | CAfile= *(++argv); | 813 | else if (strcmp(*argv, "-no_tls1") == 0) |
| 841 | } | 814 | off |= SSL_OP_NO_TLSv1; |
| 842 | else if (strcmp(*argv,"-no_tls1_2") == 0) | 815 | else if (strcmp(*argv, "-no_ssl3") == 0) |
| 843 | off|=SSL_OP_NO_TLSv1_2; | 816 | off |= SSL_OP_NO_SSLv3; |
| 844 | else if (strcmp(*argv,"-no_tls1_1") == 0) | 817 | else if (strcmp(*argv, "-no_ssl2") == 0) |
| 845 | off|=SSL_OP_NO_TLSv1_1; | 818 | off |= SSL_OP_NO_SSLv2; |
| 846 | else if (strcmp(*argv,"-no_tls1") == 0) | 819 | else if (strcmp(*argv, "-no_comp") == 0) { |
| 847 | off|=SSL_OP_NO_TLSv1; | 820 | off |= SSL_OP_NO_COMPRESSION; |
| 848 | else if (strcmp(*argv,"-no_ssl3") == 0) | 821 | } |
| 849 | off|=SSL_OP_NO_SSLv3; | ||
| 850 | else if (strcmp(*argv,"-no_ssl2") == 0) | ||
| 851 | off|=SSL_OP_NO_SSLv2; | ||
| 852 | else if (strcmp(*argv,"-no_comp") == 0) | ||
| 853 | { off|=SSL_OP_NO_COMPRESSION; } | ||
| 854 | #ifndef OPENSSL_NO_TLSEXT | 822 | #ifndef OPENSSL_NO_TLSEXT |
| 855 | else if (strcmp(*argv,"-no_ticket") == 0) | 823 | else if (strcmp(*argv, "-no_ticket") == 0) { |
| 856 | { off|=SSL_OP_NO_TICKET; } | 824 | off |= SSL_OP_NO_TICKET; |
| 857 | # ifndef OPENSSL_NO_NEXTPROTONEG | 825 | } |
| 858 | else if (strcmp(*argv,"-nextprotoneg") == 0) | 826 | #ifndef OPENSSL_NO_NEXTPROTONEG |
| 859 | { | 827 | else if (strcmp(*argv, "-nextprotoneg") == 0) { |
| 860 | if (--argc < 1) goto bad; | 828 | if (--argc < 1) |
| 829 | goto bad; | ||
| 861 | next_proto_neg_in = *(++argv); | 830 | next_proto_neg_in = *(++argv); |
| 862 | } | 831 | } |
| 863 | # endif | 832 | #endif |
| 864 | #endif | 833 | #endif |
| 865 | else if (strcmp(*argv,"-serverpref") == 0) | 834 | else if (strcmp(*argv, "-serverpref") == 0) |
| 866 | off|=SSL_OP_CIPHER_SERVER_PREFERENCE; | 835 | off |= SSL_OP_CIPHER_SERVER_PREFERENCE; |
| 867 | else if (strcmp(*argv,"-legacy_renegotiation") == 0) | 836 | else if (strcmp(*argv, "-legacy_renegotiation") == 0) |
| 868 | off|=SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION; | 837 | off |= SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION; |
| 869 | else if (strcmp(*argv,"-legacy_server_connect") == 0) | 838 | else if (strcmp(*argv, "-legacy_server_connect") == 0) { |
| 870 | { off|=SSL_OP_LEGACY_SERVER_CONNECT; } | 839 | off |= SSL_OP_LEGACY_SERVER_CONNECT; |
| 871 | else if (strcmp(*argv,"-no_legacy_server_connect") == 0) | 840 | } else if (strcmp(*argv, "-no_legacy_server_connect") == 0) { |
| 872 | { clr|=SSL_OP_LEGACY_SERVER_CONNECT; } | 841 | clr |= SSL_OP_LEGACY_SERVER_CONNECT; |
| 873 | else if (strcmp(*argv,"-cipher") == 0) | 842 | } else if (strcmp(*argv, "-cipher") == 0) { |
| 874 | { | 843 | if (--argc < 1) |
| 875 | if (--argc < 1) goto bad; | 844 | goto bad; |
| 876 | cipher= *(++argv); | 845 | cipher = *(++argv); |
| 877 | } | 846 | } |
| 878 | #ifdef FIONBIO | 847 | #ifdef FIONBIO |
| 879 | else if (strcmp(*argv,"-nbio") == 0) | 848 | else if (strcmp(*argv, "-nbio") == 0) { |
| 880 | { c_nbio=1; } | 849 | c_nbio = 1; |
| 850 | } | ||
| 881 | #endif | 851 | #endif |
| 882 | else if (strcmp(*argv,"-starttls") == 0) | 852 | else if (strcmp(*argv, "-starttls") == 0) { |
| 883 | { | 853 | if (--argc < 1) |
| 884 | if (--argc < 1) goto bad; | 854 | goto bad; |
| 885 | ++argv; | 855 | ++argv; |
| 886 | if (strcmp(*argv,"smtp") == 0) | 856 | if (strcmp(*argv, "smtp") == 0) |
| 887 | starttls_proto = PROTO_SMTP; | 857 | starttls_proto = PROTO_SMTP; |
| 888 | else if (strcmp(*argv,"pop3") == 0) | 858 | else if (strcmp(*argv, "pop3") == 0) |
| 889 | starttls_proto = PROTO_POP3; | 859 | starttls_proto = PROTO_POP3; |
| 890 | else if (strcmp(*argv,"imap") == 0) | 860 | else if (strcmp(*argv, "imap") == 0) |
| 891 | starttls_proto = PROTO_IMAP; | 861 | starttls_proto = PROTO_IMAP; |
| 892 | else if (strcmp(*argv,"ftp") == 0) | 862 | else if (strcmp(*argv, "ftp") == 0) |
| 893 | starttls_proto = PROTO_FTP; | 863 | starttls_proto = PROTO_FTP; |
| 894 | else if (strcmp(*argv, "xmpp") == 0) | 864 | else if (strcmp(*argv, "xmpp") == 0) |
| 895 | starttls_proto = PROTO_XMPP; | 865 | starttls_proto = PROTO_XMPP; |
| 896 | else | 866 | else |
| 897 | goto bad; | 867 | goto bad; |
| 898 | } | 868 | } |
| 899 | #ifndef OPENSSL_NO_ENGINE | 869 | #ifndef OPENSSL_NO_ENGINE |
| 900 | else if (strcmp(*argv,"-engine") == 0) | 870 | else if (strcmp(*argv, "-engine") == 0) { |
| 901 | { | 871 | if (--argc < 1) |
| 902 | if (--argc < 1) goto bad; | 872 | goto bad; |
| 903 | engine_id = *(++argv); | 873 | engine_id = *(++argv); |
| 904 | } | 874 | } else if (strcmp(*argv, "-ssl_client_engine") == 0) { |
| 905 | else if (strcmp(*argv,"-ssl_client_engine") == 0) | 875 | if (--argc < 1) |
| 906 | { | 876 | goto bad; |
| 907 | if (--argc < 1) goto bad; | ||
| 908 | ssl_client_engine_id = *(++argv); | 877 | ssl_client_engine_id = *(++argv); |
| 909 | } | 878 | } |
| 910 | #endif | 879 | #endif |
| 911 | else if (strcmp(*argv,"-rand") == 0) | 880 | else if (strcmp(*argv, "-rand") == 0) { |
| 912 | { | 881 | if (--argc < 1) |
| 913 | if (--argc < 1) goto bad; | 882 | goto bad; |
| 914 | inrand= *(++argv); | 883 | inrand = *(++argv); |
| 915 | } | 884 | } else if (strcmp(*argv, "-4") == 0) { |
| 916 | else if (strcmp(*argv,"-4") == 0) { af = AF_INET;} | 885 | af = AF_INET; |
| 917 | else if (strcmp(*argv,"-6") == 0) { af = AF_INET6;} | 886 | } else if (strcmp(*argv, "-6") == 0) { |
| 887 | af = AF_INET6; | ||
| 888 | } | ||
| 918 | #ifndef OPENSSL_NO_TLSEXT | 889 | #ifndef OPENSSL_NO_TLSEXT |
| 919 | else if (strcmp(*argv,"-servername") == 0) | 890 | else if (strcmp(*argv, "-servername") == 0) { |
| 920 | { | 891 | if (--argc < 1) |
| 921 | if (--argc < 1) goto bad; | 892 | goto bad; |
| 922 | servername= *(++argv); | 893 | servername = *(++argv); |
| 923 | /* meth=TLSv1_client_method(); */ | 894 | /* meth=TLSv1_client_method(); */ |
| 924 | } | 895 | } |
| 925 | #endif | 896 | #endif |
| 926 | #ifndef OPENSSL_NO_JPAKE | 897 | #ifndef OPENSSL_NO_JPAKE |
| 927 | else if (strcmp(*argv,"-jpake") == 0) | 898 | else if (strcmp(*argv, "-jpake") == 0) { |
| 928 | { | 899 | if (--argc < 1) |
| 929 | if (--argc < 1) goto bad; | 900 | goto bad; |
| 930 | jpake_secret = *++argv; | 901 | jpake_secret = *++argv; |
| 931 | } | 902 | } |
| 932 | #endif | 903 | #endif |
| 933 | #ifndef OPENSSL_NO_SRTP | 904 | #ifndef OPENSSL_NO_SRTP |
| 934 | else if (strcmp(*argv,"-use_srtp") == 0) | 905 | else if (strcmp(*argv, "-use_srtp") == 0) { |
| 935 | { | 906 | if (--argc < 1) |
| 936 | if (--argc < 1) goto bad; | 907 | goto bad; |
| 937 | srtp_profiles = *(++argv); | 908 | srtp_profiles = *(++argv); |
| 938 | } | 909 | } |
| 939 | #endif | 910 | #endif |
| 940 | else if (strcmp(*argv,"-keymatexport") == 0) | 911 | else if (strcmp(*argv, "-keymatexport") == 0) { |
| 941 | { | 912 | if (--argc < 1) |
| 942 | if (--argc < 1) goto bad; | 913 | goto bad; |
| 943 | keymatexportlabel= *(++argv); | 914 | keymatexportlabel = *(++argv); |
| 944 | } | 915 | } else if (strcmp(*argv, "-keymatexportlen") == 0) { |
| 945 | else if (strcmp(*argv,"-keymatexportlen") == 0) | 916 | if (--argc < 1) |
| 946 | { | 917 | goto bad; |
| 947 | if (--argc < 1) goto bad; | 918 | keymatexportlen = atoi(*(++argv)); |
| 948 | keymatexportlen=atoi(*(++argv)); | 919 | if (keymatexportlen == 0) |
| 949 | if (keymatexportlen == 0) goto bad; | 920 | goto bad; |
| 950 | } | 921 | } else { |
| 951 | else | 922 | BIO_printf(bio_err, "unknown option %s\n", *argv); |
| 952 | { | 923 | badop = 1; |
| 953 | BIO_printf(bio_err,"unknown option %s\n",*argv); | ||
| 954 | badop=1; | ||
| 955 | break; | 924 | break; |
| 956 | } | 925 | } |
| 957 | argc--; | 926 | argc--; |
| 958 | argv++; | 927 | argv++; |
| 959 | } | 928 | } |
| 960 | if (badop) | 929 | if (badop) { |
| 961 | { | ||
| 962 | bad: | 930 | bad: |
| 963 | sc_usage(); | 931 | sc_usage(); |
| 964 | goto end; | 932 | goto end; |
| 965 | } | 933 | } |
| 966 | |||
| 967 | #if !defined(OPENSSL_NO_JPAKE) && !defined(OPENSSL_NO_PSK) | 934 | #if !defined(OPENSSL_NO_JPAKE) && !defined(OPENSSL_NO_PSK) |
| 968 | if (jpake_secret) | 935 | if (jpake_secret) { |
| 969 | { | 936 | if (psk_key) { |
| 970 | if (psk_key) | ||
| 971 | { | ||
| 972 | BIO_printf(bio_err, | 937 | BIO_printf(bio_err, |
| 973 | "Can't use JPAKE and PSK together\n"); | 938 | "Can't use JPAKE and PSK together\n"); |
| 974 | goto end; | 939 | goto end; |
| 975 | } | 940 | } |
| 976 | psk_identity = "JPAKE"; | 941 | psk_identity = "JPAKE"; |
| 977 | if (cipher) | 942 | if (cipher) { |
| 978 | { | ||
| 979 | BIO_printf(bio_err, "JPAKE sets cipher to PSK\n"); | 943 | BIO_printf(bio_err, "JPAKE sets cipher to PSK\n"); |
| 980 | goto end; | 944 | goto end; |
| 981 | } | ||
| 982 | cipher = "PSK"; | ||
| 983 | } | 945 | } |
| 946 | cipher = "PSK"; | ||
| 947 | } | ||
| 984 | #endif | 948 | #endif |
| 985 | 949 | ||
| 986 | OpenSSL_add_ssl_algorithms(); | 950 | OpenSSL_add_ssl_algorithms(); |
| @@ -988,122 +952,94 @@ bad: | |||
| 988 | 952 | ||
| 989 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) | 953 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) |
| 990 | next_proto.status = -1; | 954 | next_proto.status = -1; |
| 991 | if (next_proto_neg_in) | 955 | if (next_proto_neg_in) { |
| 992 | { | ||
| 993 | next_proto.data = next_protos_parse(&next_proto.len, next_proto_neg_in); | 956 | next_proto.data = next_protos_parse(&next_proto.len, next_proto_neg_in); |
| 994 | if (next_proto.data == NULL) | 957 | if (next_proto.data == NULL) { |
| 995 | { | ||
| 996 | BIO_printf(bio_err, "Error parsing -nextprotoneg argument\n"); | 958 | BIO_printf(bio_err, "Error parsing -nextprotoneg argument\n"); |
| 997 | goto end; | 959 | goto end; |
| 998 | } | ||
| 999 | } | 960 | } |
| 1000 | else | 961 | } else |
| 1001 | next_proto.data = NULL; | 962 | next_proto.data = NULL; |
| 1002 | #endif | 963 | #endif |
| 1003 | 964 | ||
| 1004 | #ifndef OPENSSL_NO_ENGINE | 965 | #ifndef OPENSSL_NO_ENGINE |
| 1005 | e = setup_engine(bio_err, engine_id, 1); | 966 | e = setup_engine(bio_err, engine_id, 1); |
| 1006 | if (ssl_client_engine_id) | 967 | if (ssl_client_engine_id) { |
| 1007 | { | ||
| 1008 | ssl_client_engine = ENGINE_by_id(ssl_client_engine_id); | 968 | ssl_client_engine = ENGINE_by_id(ssl_client_engine_id); |
| 1009 | if (!ssl_client_engine) | 969 | if (!ssl_client_engine) { |
| 1010 | { | ||
| 1011 | BIO_printf(bio_err, | 970 | BIO_printf(bio_err, |
| 1012 | "Error getting client auth engine\n"); | 971 | "Error getting client auth engine\n"); |
| 1013 | goto end; | 972 | goto end; |
| 1014 | } | ||
| 1015 | } | 973 | } |
| 1016 | 974 | } | |
| 1017 | #endif | 975 | #endif |
| 1018 | if (!app_passwd(bio_err, passarg, NULL, &pass, NULL)) | 976 | if (!app_passwd(bio_err, passarg, NULL, &pass, NULL)) { |
| 1019 | { | ||
| 1020 | BIO_printf(bio_err, "Error getting password\n"); | 977 | BIO_printf(bio_err, "Error getting password\n"); |
| 1021 | goto end; | 978 | goto end; |
| 1022 | } | 979 | } |
| 1023 | |||
| 1024 | if (key_file == NULL) | 980 | if (key_file == NULL) |
| 1025 | key_file = cert_file; | 981 | key_file = cert_file; |
| 1026 | 982 | ||
| 1027 | 983 | ||
| 1028 | if (key_file) | 984 | if (key_file) { |
| 1029 | |||
| 1030 | { | ||
| 1031 | 985 | ||
| 1032 | key = load_key(bio_err, key_file, key_format, 0, pass, e, | 986 | key = load_key(bio_err, key_file, key_format, 0, pass, e, |
| 1033 | "client certificate private key file"); | 987 | "client certificate private key file"); |
| 1034 | if (!key) | 988 | if (!key) { |
| 1035 | { | ||
| 1036 | ERR_print_errors(bio_err); | 989 | ERR_print_errors(bio_err); |
| 1037 | goto end; | 990 | goto end; |
| 1038 | } | ||
| 1039 | |||
| 1040 | } | 991 | } |
| 992 | } | ||
| 993 | if (cert_file) { | ||
| 994 | cert = load_cert(bio_err, cert_file, cert_format, | ||
| 995 | NULL, e, "client certificate file"); | ||
| 1041 | 996 | ||
| 1042 | if (cert_file) | 997 | if (!cert) { |
| 1043 | |||
| 1044 | { | ||
| 1045 | cert = load_cert(bio_err,cert_file,cert_format, | ||
| 1046 | NULL, e, "client certificate file"); | ||
| 1047 | |||
| 1048 | if (!cert) | ||
| 1049 | { | ||
| 1050 | ERR_print_errors(bio_err); | 998 | ERR_print_errors(bio_err); |
| 1051 | goto end; | 999 | goto end; |
| 1052 | } | ||
| 1053 | } | 1000 | } |
| 1054 | 1001 | } | |
| 1055 | if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL | 1002 | if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL |
| 1056 | && !RAND_status()) | 1003 | && !RAND_status()) { |
| 1057 | { | 1004 | BIO_printf(bio_err, "warning, not much extra random data, consider using the -rand option\n"); |
| 1058 | BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n"); | 1005 | } |
| 1059 | } | ||
| 1060 | if (inrand != NULL) | 1006 | if (inrand != NULL) |
| 1061 | BIO_printf(bio_err,"%ld semi-random bytes loaded\n", | 1007 | BIO_printf(bio_err, "%ld semi-random bytes loaded\n", |
| 1062 | app_RAND_load_files(inrand)); | 1008 | app_RAND_load_files(inrand)); |
| 1063 | 1009 | ||
| 1064 | if (bio_c_out == NULL) | 1010 | if (bio_c_out == NULL) { |
| 1065 | { | 1011 | if (c_quiet && !c_debug && !c_msg) { |
| 1066 | if (c_quiet && !c_debug && !c_msg) | 1012 | bio_c_out = BIO_new(BIO_s_null()); |
| 1067 | { | 1013 | } else { |
| 1068 | bio_c_out=BIO_new(BIO_s_null()); | ||
| 1069 | } | ||
| 1070 | else | ||
| 1071 | { | ||
| 1072 | if (bio_c_out == NULL) | 1014 | if (bio_c_out == NULL) |
| 1073 | bio_c_out=BIO_new_fp(stdout,BIO_NOCLOSE); | 1015 | bio_c_out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 1074 | } | ||
| 1075 | } | 1016 | } |
| 1076 | 1017 | } | |
| 1077 | #ifndef OPENSSL_NO_SRP | 1018 | #ifndef OPENSSL_NO_SRP |
| 1078 | if(!app_passwd(bio_err, srppass, NULL, &srp_arg.srppassin, NULL)) | 1019 | if (!app_passwd(bio_err, srppass, NULL, &srp_arg.srppassin, NULL)) { |
| 1079 | { | ||
| 1080 | BIO_printf(bio_err, "Error getting password\n"); | 1020 | BIO_printf(bio_err, "Error getting password\n"); |
| 1081 | goto end; | 1021 | goto end; |
| 1082 | } | 1022 | } |
| 1083 | #endif | 1023 | #endif |
| 1084 | 1024 | ||
| 1085 | ctx=SSL_CTX_new(meth); | 1025 | ctx = SSL_CTX_new(meth); |
| 1086 | if (ctx == NULL) | 1026 | if (ctx == NULL) { |
| 1087 | { | ||
| 1088 | ERR_print_errors(bio_err); | 1027 | ERR_print_errors(bio_err); |
| 1089 | goto end; | 1028 | goto end; |
| 1090 | } | 1029 | } |
| 1091 | |||
| 1092 | if (vpm) | 1030 | if (vpm) |
| 1093 | SSL_CTX_set1_param(ctx, vpm); | 1031 | SSL_CTX_set1_param(ctx, vpm); |
| 1094 | 1032 | ||
| 1095 | #ifndef OPENSSL_NO_ENGINE | 1033 | #ifndef OPENSSL_NO_ENGINE |
| 1096 | if (ssl_client_engine) | 1034 | if (ssl_client_engine) { |
| 1097 | { | 1035 | if (!SSL_CTX_set_client_cert_engine(ctx, ssl_client_engine)) { |
| 1098 | if (!SSL_CTX_set_client_cert_engine(ctx, ssl_client_engine)) | ||
| 1099 | { | ||
| 1100 | BIO_puts(bio_err, "Error setting client auth engine\n"); | 1036 | BIO_puts(bio_err, "Error setting client auth engine\n"); |
| 1101 | ERR_print_errors(bio_err); | 1037 | ERR_print_errors(bio_err); |
| 1102 | ENGINE_free(ssl_client_engine); | 1038 | ENGINE_free(ssl_client_engine); |
| 1103 | goto end; | 1039 | goto end; |
| 1104 | } | ||
| 1105 | ENGINE_free(ssl_client_engine); | ||
| 1106 | } | 1040 | } |
| 1041 | ENGINE_free(ssl_client_engine); | ||
| 1042 | } | ||
| 1107 | #endif | 1043 | #endif |
| 1108 | 1044 | ||
| 1109 | #ifndef OPENSSL_NO_PSK | 1045 | #ifndef OPENSSL_NO_PSK |
| @@ -1112,126 +1048,120 @@ bad: | |||
| 1112 | #else | 1048 | #else |
| 1113 | if (psk_key != NULL || jpake_secret) | 1049 | if (psk_key != NULL || jpake_secret) |
| 1114 | #endif | 1050 | #endif |
| 1115 | { | 1051 | { |
| 1116 | if (c_debug) | 1052 | if (c_debug) |
| 1117 | BIO_printf(bio_c_out, "PSK key given or JPAKE in use, setting client callback\n"); | 1053 | BIO_printf(bio_c_out, "PSK key given or JPAKE in use, setting client callback\n"); |
| 1118 | SSL_CTX_set_psk_client_callback(ctx, psk_client_cb); | 1054 | SSL_CTX_set_psk_client_callback(ctx, psk_client_cb); |
| 1119 | } | 1055 | } |
| 1120 | #endif | 1056 | #endif |
| 1121 | #ifndef OPENSSL_NO_SRTP | 1057 | #ifndef OPENSSL_NO_SRTP |
| 1122 | if (srtp_profiles != NULL) | 1058 | if (srtp_profiles != NULL) |
| 1123 | SSL_CTX_set_tlsext_use_srtp(ctx, srtp_profiles); | 1059 | SSL_CTX_set_tlsext_use_srtp(ctx, srtp_profiles); |
| 1124 | #endif | 1060 | #endif |
| 1125 | if (bugs) | 1061 | if (bugs) |
| 1126 | SSL_CTX_set_options(ctx,SSL_OP_ALL|off); | 1062 | SSL_CTX_set_options(ctx, SSL_OP_ALL | off); |
| 1127 | else | 1063 | else |
| 1128 | SSL_CTX_set_options(ctx,off); | 1064 | SSL_CTX_set_options(ctx, off); |
| 1129 | 1065 | ||
| 1130 | if (clr) | 1066 | if (clr) |
| 1131 | SSL_CTX_clear_options(ctx, clr); | 1067 | SSL_CTX_clear_options(ctx, clr); |
| 1132 | /* DTLS: partial reads end up discarding unread UDP bytes :-( | 1068 | /* |
| 1133 | * Setting read ahead solves this problem. | 1069 | * DTLS: partial reads end up discarding unread UDP bytes :-( Setting |
| 1070 | * read ahead solves this problem. | ||
| 1134 | */ | 1071 | */ |
| 1135 | if (socket_type == SOCK_DGRAM) SSL_CTX_set_read_ahead(ctx, 1); | 1072 | if (socket_type == SOCK_DGRAM) |
| 1073 | SSL_CTX_set_read_ahead(ctx, 1); | ||
| 1136 | 1074 | ||
| 1137 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) | 1075 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) |
| 1138 | if (next_proto.data) | 1076 | if (next_proto.data) |
| 1139 | SSL_CTX_set_next_proto_select_cb(ctx, next_proto_cb, &next_proto); | 1077 | SSL_CTX_set_next_proto_select_cb(ctx, next_proto_cb, &next_proto); |
| 1140 | #endif | 1078 | #endif |
| 1141 | 1079 | ||
| 1142 | if (state) SSL_CTX_set_info_callback(ctx,apps_ssl_info_callback); | 1080 | if (state) |
| 1081 | SSL_CTX_set_info_callback(ctx, apps_ssl_info_callback); | ||
| 1143 | if (cipher != NULL) | 1082 | if (cipher != NULL) |
| 1144 | if(!SSL_CTX_set_cipher_list(ctx,cipher)) { | 1083 | if (!SSL_CTX_set_cipher_list(ctx, cipher)) { |
| 1145 | BIO_printf(bio_err,"error setting cipher list\n"); | 1084 | BIO_printf(bio_err, "error setting cipher list\n"); |
| 1146 | ERR_print_errors(bio_err); | 1085 | ERR_print_errors(bio_err); |
| 1147 | goto end; | 1086 | goto end; |
| 1148 | } | 1087 | } |
| 1149 | #if 0 | 1088 | #if 0 |
| 1150 | else | 1089 | else |
| 1151 | SSL_CTX_set_cipher_list(ctx,getenv("SSL_CIPHER")); | 1090 | SSL_CTX_set_cipher_list(ctx, getenv("SSL_CIPHER")); |
| 1152 | #endif | 1091 | #endif |
| 1153 | 1092 | ||
| 1154 | SSL_CTX_set_verify(ctx,verify,verify_callback); | 1093 | SSL_CTX_set_verify(ctx, verify, verify_callback); |
| 1155 | if (!set_cert_key_stuff(ctx,cert,key)) | 1094 | if (!set_cert_key_stuff(ctx, cert, key)) |
| 1156 | goto end; | 1095 | goto end; |
| 1157 | 1096 | ||
| 1158 | if ((!SSL_CTX_load_verify_locations(ctx,CAfile,CApath)) || | 1097 | if ((!SSL_CTX_load_verify_locations(ctx, CAfile, CApath)) || |
| 1159 | (!SSL_CTX_set_default_verify_paths(ctx))) | 1098 | (!SSL_CTX_set_default_verify_paths(ctx))) { |
| 1160 | { | 1099 | /* |
| 1161 | /* BIO_printf(bio_err,"error setting default verify locations\n"); */ | 1100 | * BIO_printf(bio_err,"error setting default verify |
| 1101 | * locations\n"); | ||
| 1102 | */ | ||
| 1162 | ERR_print_errors(bio_err); | 1103 | ERR_print_errors(bio_err); |
| 1163 | /* goto end; */ | 1104 | /* goto end; */ |
| 1164 | } | 1105 | } |
| 1165 | |||
| 1166 | #ifndef OPENSSL_NO_TLSEXT | 1106 | #ifndef OPENSSL_NO_TLSEXT |
| 1167 | if (servername != NULL) | 1107 | if (servername != NULL) { |
| 1168 | { | ||
| 1169 | tlsextcbp.biodebug = bio_err; | 1108 | tlsextcbp.biodebug = bio_err; |
| 1170 | SSL_CTX_set_tlsext_servername_callback(ctx, ssl_servername_cb); | 1109 | SSL_CTX_set_tlsext_servername_callback(ctx, ssl_servername_cb); |
| 1171 | SSL_CTX_set_tlsext_servername_arg(ctx, &tlsextcbp); | 1110 | SSL_CTX_set_tlsext_servername_arg(ctx, &tlsextcbp); |
| 1172 | } | 1111 | } |
| 1173 | #ifndef OPENSSL_NO_SRP | 1112 | #ifndef OPENSSL_NO_SRP |
| 1174 | if (srp_arg.srplogin) | 1113 | if (srp_arg.srplogin) { |
| 1175 | { | 1114 | if (!srp_lateuser && !SSL_CTX_set_srp_username(ctx, srp_arg.srplogin)) { |
| 1176 | if (!srp_lateuser && !SSL_CTX_set_srp_username(ctx, srp_arg.srplogin)) | 1115 | BIO_printf(bio_err, "Unable to set SRP username\n"); |
| 1177 | { | ||
| 1178 | BIO_printf(bio_err,"Unable to set SRP username\n"); | ||
| 1179 | goto end; | 1116 | goto end; |
| 1180 | } | 1117 | } |
| 1181 | srp_arg.msg = c_msg; | 1118 | srp_arg.msg = c_msg; |
| 1182 | srp_arg.debug = c_debug ; | 1119 | srp_arg.debug = c_debug; |
| 1183 | SSL_CTX_set_srp_cb_arg(ctx,&srp_arg); | 1120 | SSL_CTX_set_srp_cb_arg(ctx, &srp_arg); |
| 1184 | SSL_CTX_set_srp_client_pwd_callback(ctx, ssl_give_srp_client_pwd_cb); | 1121 | SSL_CTX_set_srp_client_pwd_callback(ctx, ssl_give_srp_client_pwd_cb); |
| 1185 | SSL_CTX_set_srp_strength(ctx, srp_arg.strength); | 1122 | SSL_CTX_set_srp_strength(ctx, srp_arg.strength); |
| 1186 | if (c_msg || c_debug || srp_arg.amp == 0) | 1123 | if (c_msg || c_debug || srp_arg.amp == 0) |
| 1187 | SSL_CTX_set_srp_verify_param_callback(ctx, ssl_srp_verify_param_cb); | 1124 | SSL_CTX_set_srp_verify_param_callback(ctx, ssl_srp_verify_param_cb); |
| 1188 | } | 1125 | } |
| 1189 | |||
| 1190 | #endif | 1126 | #endif |
| 1191 | #endif | 1127 | #endif |
| 1192 | 1128 | ||
| 1193 | con=SSL_new(ctx); | 1129 | con = SSL_new(ctx); |
| 1194 | if (sess_in) | 1130 | if (sess_in) { |
| 1195 | { | ||
| 1196 | SSL_SESSION *sess; | 1131 | SSL_SESSION *sess; |
| 1197 | BIO *stmp = BIO_new_file(sess_in, "r"); | 1132 | BIO *stmp = BIO_new_file(sess_in, "r"); |
| 1198 | if (!stmp) | 1133 | if (!stmp) { |
| 1199 | { | ||
| 1200 | BIO_printf(bio_err, "Can't open session file %s\n", | 1134 | BIO_printf(bio_err, "Can't open session file %s\n", |
| 1201 | sess_in); | 1135 | sess_in); |
| 1202 | ERR_print_errors(bio_err); | 1136 | ERR_print_errors(bio_err); |
| 1203 | goto end; | 1137 | goto end; |
| 1204 | } | 1138 | } |
| 1205 | sess = PEM_read_bio_SSL_SESSION(stmp, NULL, 0, NULL); | 1139 | sess = PEM_read_bio_SSL_SESSION(stmp, NULL, 0, NULL); |
| 1206 | BIO_free(stmp); | 1140 | BIO_free(stmp); |
| 1207 | if (!sess) | 1141 | if (!sess) { |
| 1208 | { | ||
| 1209 | BIO_printf(bio_err, "Can't open session file %s\n", | 1142 | BIO_printf(bio_err, "Can't open session file %s\n", |
| 1210 | sess_in); | 1143 | sess_in); |
| 1211 | ERR_print_errors(bio_err); | 1144 | ERR_print_errors(bio_err); |
| 1212 | goto end; | 1145 | goto end; |
| 1213 | } | 1146 | } |
| 1214 | SSL_set_session(con, sess); | 1147 | SSL_set_session(con, sess); |
| 1215 | SSL_SESSION_free(sess); | 1148 | SSL_SESSION_free(sess); |
| 1216 | } | 1149 | } |
| 1217 | #ifndef OPENSSL_NO_TLSEXT | 1150 | #ifndef OPENSSL_NO_TLSEXT |
| 1218 | if (servername != NULL) | 1151 | if (servername != NULL) { |
| 1219 | { | 1152 | if (!SSL_set_tlsext_host_name(con, servername)) { |
| 1220 | if (!SSL_set_tlsext_host_name(con,servername)) | 1153 | BIO_printf(bio_err, "Unable to set TLS servername extension.\n"); |
| 1221 | { | ||
| 1222 | BIO_printf(bio_err,"Unable to set TLS servername extension.\n"); | ||
| 1223 | ERR_print_errors(bio_err); | 1154 | ERR_print_errors(bio_err); |
| 1224 | goto end; | 1155 | goto end; |
| 1225 | } | ||
| 1226 | } | 1156 | } |
| 1157 | } | ||
| 1227 | #endif | 1158 | #endif |
| 1228 | #ifndef OPENSSL_NO_KRB5 | 1159 | #ifndef OPENSSL_NO_KRB5 |
| 1229 | if (con && (kctx = kssl_ctx_new()) != NULL) | 1160 | if (con && (kctx = kssl_ctx_new()) != NULL) { |
| 1230 | { | ||
| 1231 | SSL_set0_kssl_ctx(con, kctx); | 1161 | SSL_set0_kssl_ctx(con, kctx); |
| 1232 | kssl_ctx_setstring(kctx, KSSL_SERVER, host); | 1162 | kssl_ctx_setstring(kctx, KSSL_SERVER, host); |
| 1233 | } | 1163 | } |
| 1234 | #endif /* OPENSSL_NO_KRB5 */ | 1164 | #endif /* OPENSSL_NO_KRB5 */ |
| 1235 | /* SSL_set_cipher_list(con,"RC4-MD5"); */ | 1165 | /* SSL_set_cipher_list(con,"RC4-MD5"); */ |
| 1236 | #if 0 | 1166 | #if 0 |
| 1237 | #ifdef TLSEXT_TYPE_opaque_prf_input | 1167 | #ifdef TLSEXT_TYPE_opaque_prf_input |
| @@ -1241,564 +1171,499 @@ bad: | |||
| 1241 | 1171 | ||
| 1242 | re_start: | 1172 | re_start: |
| 1243 | 1173 | ||
| 1244 | if (init_client(&s,host,port,socket_type,af) == 0) | 1174 | if (init_client(&s, host, port, socket_type, af) == 0) { |
| 1245 | { | 1175 | BIO_printf(bio_err, "connect:errno=%d\n", errno); |
| 1246 | BIO_printf(bio_err,"connect:errno=%d\n",errno); | ||
| 1247 | shutdown(s, SHUT_RD); | 1176 | shutdown(s, SHUT_RD); |
| 1248 | close(s); | 1177 | close(s); |
| 1249 | goto end; | 1178 | goto end; |
| 1250 | } | 1179 | } |
| 1251 | BIO_printf(bio_c_out,"CONNECTED(%08X)\n",s); | 1180 | BIO_printf(bio_c_out, "CONNECTED(%08X)\n", s); |
| 1252 | 1181 | ||
| 1253 | #ifdef FIONBIO | 1182 | #ifdef FIONBIO |
| 1254 | if (c_nbio) | 1183 | if (c_nbio) { |
| 1255 | { | 1184 | unsigned long l = 1; |
| 1256 | unsigned long l=1; | 1185 | BIO_printf(bio_c_out, "turning on non blocking io\n"); |
| 1257 | BIO_printf(bio_c_out,"turning on non blocking io\n"); | 1186 | if (BIO_socket_ioctl(s, FIONBIO, &l) < 0) { |
| 1258 | if (BIO_socket_ioctl(s,FIONBIO,&l) < 0) | ||
| 1259 | { | ||
| 1260 | ERR_print_errors(bio_err); | 1187 | ERR_print_errors(bio_err); |
| 1261 | goto end; | 1188 | goto end; |
| 1262 | } | ||
| 1263 | } | 1189 | } |
| 1264 | #endif | 1190 | } |
| 1265 | if (c_Pause & 0x01) SSL_set_debug(con, 1); | 1191 | #endif |
| 1192 | if (c_Pause & 0x01) | ||
| 1193 | SSL_set_debug(con, 1); | ||
| 1266 | 1194 | ||
| 1267 | if ( SSL_version(con) == DTLS1_VERSION) | 1195 | if (SSL_version(con) == DTLS1_VERSION) { |
| 1268 | { | ||
| 1269 | 1196 | ||
| 1270 | sbio=BIO_new_dgram(s,BIO_NOCLOSE); | 1197 | sbio = BIO_new_dgram(s, BIO_NOCLOSE); |
| 1271 | if (getsockname(s, &peer, (void *)&peerlen) < 0) | 1198 | if (getsockname(s, &peer, (void *) &peerlen) < 0) { |
| 1272 | { | ||
| 1273 | BIO_printf(bio_err, "getsockname:errno=%d\n", | 1199 | BIO_printf(bio_err, "getsockname:errno=%d\n", |
| 1274 | errno); | 1200 | errno); |
| 1275 | shutdown(s, SHUT_RD); | 1201 | shutdown(s, SHUT_RD); |
| 1276 | close(s); | 1202 | close(s); |
| 1277 | goto end; | 1203 | goto end; |
| 1278 | } | 1204 | } |
| 1279 | 1205 | (void) BIO_ctrl_set_connected(sbio, 1, &peer); | |
| 1280 | (void)BIO_ctrl_set_connected(sbio, 1, &peer); | ||
| 1281 | 1206 | ||
| 1282 | if (enable_timeouts) | 1207 | if (enable_timeouts) { |
| 1283 | { | ||
| 1284 | timeout.tv_sec = 0; | 1208 | timeout.tv_sec = 0; |
| 1285 | timeout.tv_usec = DGRAM_RCV_TIMEOUT; | 1209 | timeout.tv_usec = DGRAM_RCV_TIMEOUT; |
| 1286 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_RECV_TIMEOUT, 0, &timeout); | 1210 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_RECV_TIMEOUT, 0, &timeout); |
| 1287 | 1211 | ||
| 1288 | timeout.tv_sec = 0; | 1212 | timeout.tv_sec = 0; |
| 1289 | timeout.tv_usec = DGRAM_SND_TIMEOUT; | 1213 | timeout.tv_usec = DGRAM_SND_TIMEOUT; |
| 1290 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, &timeout); | 1214 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, &timeout); |
| 1291 | } | 1215 | } |
| 1292 | 1216 | if (socket_mtu > 28) { | |
| 1293 | if (socket_mtu > 28) | ||
| 1294 | { | ||
| 1295 | SSL_set_options(con, SSL_OP_NO_QUERY_MTU); | 1217 | SSL_set_options(con, SSL_OP_NO_QUERY_MTU); |
| 1296 | SSL_set_mtu(con, socket_mtu - 28); | 1218 | SSL_set_mtu(con, socket_mtu - 28); |
| 1297 | } | 1219 | } else |
| 1298 | else | ||
| 1299 | /* want to do MTU discovery */ | 1220 | /* want to do MTU discovery */ |
| 1300 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_MTU_DISCOVER, 0, NULL); | 1221 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_MTU_DISCOVER, 0, NULL); |
| 1301 | } | 1222 | } else |
| 1302 | else | 1223 | sbio = BIO_new_socket(s, BIO_NOCLOSE); |
| 1303 | sbio=BIO_new_socket(s,BIO_NOCLOSE); | ||
| 1304 | 1224 | ||
| 1305 | if (nbio_test) | 1225 | if (nbio_test) { |
| 1306 | { | ||
| 1307 | BIO *test; | 1226 | BIO *test; |
| 1308 | 1227 | ||
| 1309 | test=BIO_new(BIO_f_nbio_test()); | 1228 | test = BIO_new(BIO_f_nbio_test()); |
| 1310 | sbio=BIO_push(test,sbio); | 1229 | sbio = BIO_push(test, sbio); |
| 1311 | } | 1230 | } |
| 1312 | 1231 | if (c_debug) { | |
| 1313 | if (c_debug) | ||
| 1314 | { | ||
| 1315 | SSL_set_debug(con, 1); | 1232 | SSL_set_debug(con, 1); |
| 1316 | BIO_set_callback(sbio,bio_dump_callback); | 1233 | BIO_set_callback(sbio, bio_dump_callback); |
| 1317 | BIO_set_callback_arg(sbio,(char *)bio_c_out); | 1234 | BIO_set_callback_arg(sbio, (char *) bio_c_out); |
| 1318 | } | 1235 | } |
| 1319 | if (c_msg) | 1236 | if (c_msg) { |
| 1320 | { | ||
| 1321 | SSL_set_msg_callback(con, msg_cb); | 1237 | SSL_set_msg_callback(con, msg_cb); |
| 1322 | SSL_set_msg_callback_arg(con, bio_c_out); | 1238 | SSL_set_msg_callback_arg(con, bio_c_out); |
| 1323 | } | 1239 | } |
| 1324 | #ifndef OPENSSL_NO_TLSEXT | 1240 | #ifndef OPENSSL_NO_TLSEXT |
| 1325 | if (c_tlsextdebug) | 1241 | if (c_tlsextdebug) { |
| 1326 | { | ||
| 1327 | SSL_set_tlsext_debug_callback(con, tlsext_cb); | 1242 | SSL_set_tlsext_debug_callback(con, tlsext_cb); |
| 1328 | SSL_set_tlsext_debug_arg(con, bio_c_out); | 1243 | SSL_set_tlsext_debug_arg(con, bio_c_out); |
| 1329 | } | 1244 | } |
| 1330 | if (c_status_req) | 1245 | if (c_status_req) { |
| 1331 | { | ||
| 1332 | SSL_set_tlsext_status_type(con, TLSEXT_STATUSTYPE_ocsp); | 1246 | SSL_set_tlsext_status_type(con, TLSEXT_STATUSTYPE_ocsp); |
| 1333 | SSL_CTX_set_tlsext_status_cb(ctx, ocsp_resp_cb); | 1247 | SSL_CTX_set_tlsext_status_cb(ctx, ocsp_resp_cb); |
| 1334 | SSL_CTX_set_tlsext_status_arg(ctx, bio_c_out); | 1248 | SSL_CTX_set_tlsext_status_arg(ctx, bio_c_out); |
| 1335 | #if 0 | 1249 | #if 0 |
| 1336 | { | 1250 | { |
| 1337 | STACK_OF(OCSP_RESPID) *ids = sk_OCSP_RESPID_new_null(); | 1251 | STACK_OF(OCSP_RESPID) * ids = sk_OCSP_RESPID_new_null(); |
| 1338 | OCSP_RESPID *id = OCSP_RESPID_new(); | 1252 | OCSP_RESPID *id = OCSP_RESPID_new(); |
| 1339 | id->value.byKey = ASN1_OCTET_STRING_new(); | 1253 | id->value.byKey = ASN1_OCTET_STRING_new(); |
| 1340 | id->type = V_OCSP_RESPID_KEY; | 1254 | id->type = V_OCSP_RESPID_KEY; |
| 1341 | ASN1_STRING_set(id->value.byKey, "Hello World", -1); | 1255 | ASN1_STRING_set(id->value.byKey, "Hello World", -1); |
| 1342 | sk_OCSP_RESPID_push(ids, id); | 1256 | sk_OCSP_RESPID_push(ids, id); |
| 1343 | SSL_set_tlsext_status_ids(con, ids); | 1257 | SSL_set_tlsext_status_ids(con, ids); |
| 1344 | } | ||
| 1345 | #endif | ||
| 1346 | } | 1258 | } |
| 1347 | #endif | 1259 | #endif |
| 1260 | } | ||
| 1261 | #endif | ||
| 1348 | #ifndef OPENSSL_NO_JPAKE | 1262 | #ifndef OPENSSL_NO_JPAKE |
| 1349 | if (jpake_secret) | 1263 | if (jpake_secret) |
| 1350 | jpake_client_auth(bio_c_out, sbio, jpake_secret); | 1264 | jpake_client_auth(bio_c_out, sbio, jpake_secret); |
| 1351 | #endif | 1265 | #endif |
| 1352 | 1266 | ||
| 1353 | SSL_set_bio(con,sbio,sbio); | 1267 | SSL_set_bio(con, sbio, sbio); |
| 1354 | SSL_set_connect_state(con); | 1268 | SSL_set_connect_state(con); |
| 1355 | 1269 | ||
| 1356 | /* ok, lets connect */ | 1270 | /* ok, lets connect */ |
| 1357 | width=SSL_get_fd(con)+1; | 1271 | width = SSL_get_fd(con) + 1; |
| 1358 | 1272 | ||
| 1359 | read_tty=1; | 1273 | read_tty = 1; |
| 1360 | write_tty=0; | 1274 | write_tty = 0; |
| 1361 | tty_on=0; | 1275 | tty_on = 0; |
| 1362 | read_ssl=1; | 1276 | read_ssl = 1; |
| 1363 | write_ssl=1; | 1277 | write_ssl = 1; |
| 1364 | 1278 | ||
| 1365 | cbuf_len=0; | 1279 | cbuf_len = 0; |
| 1366 | cbuf_off=0; | 1280 | cbuf_off = 0; |
| 1367 | sbuf_len=0; | 1281 | sbuf_len = 0; |
| 1368 | sbuf_off=0; | 1282 | sbuf_off = 0; |
| 1369 | 1283 | ||
| 1370 | /* This is an ugly hack that does a lot of assumptions */ | 1284 | /* This is an ugly hack that does a lot of assumptions */ |
| 1371 | /* We do have to handle multi-line responses which may come | 1285 | /* |
| 1372 | in a single packet or not. We therefore have to use | 1286 | * We do have to handle multi-line responses which may come in a |
| 1373 | BIO_gets() which does need a buffering BIO. So during | 1287 | * single packet or not. We therefore have to use BIO_gets() which |
| 1374 | the initial chitchat we do push a buffering BIO into the | 1288 | * does need a buffering BIO. So during the initial chitchat we do |
| 1375 | chain that is removed again later on to not disturb the | 1289 | * push a buffering BIO into the chain that is removed again later on |
| 1376 | rest of the s_client operation. */ | 1290 | * to not disturb the rest of the s_client operation. |
| 1377 | if (starttls_proto == PROTO_SMTP) | 1291 | */ |
| 1378 | { | 1292 | if (starttls_proto == PROTO_SMTP) { |
| 1379 | int foundit=0; | 1293 | int foundit = 0; |
| 1380 | BIO *fbio = BIO_new(BIO_f_buffer()); | 1294 | BIO *fbio = BIO_new(BIO_f_buffer()); |
| 1381 | BIO_push(fbio, sbio); | 1295 | BIO_push(fbio, sbio); |
| 1382 | /* wait for multi-line response to end from SMTP */ | 1296 | /* wait for multi-line response to end from SMTP */ |
| 1383 | do | 1297 | do { |
| 1384 | { | 1298 | mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ); |
| 1385 | mbuf_len = BIO_gets(fbio,mbuf,BUFSIZZ); | 1299 | } |
| 1386 | } | 1300 | while (mbuf_len > 3 && mbuf[3] == '-'); |
| 1387 | while (mbuf_len>3 && mbuf[3]=='-'); | ||
| 1388 | /* STARTTLS command requires EHLO... */ | 1301 | /* STARTTLS command requires EHLO... */ |
| 1389 | BIO_printf(fbio,"EHLO openssl.client.net\r\n"); | 1302 | BIO_printf(fbio, "EHLO openssl.client.net\r\n"); |
| 1390 | (void)BIO_flush(fbio); | 1303 | (void) BIO_flush(fbio); |
| 1391 | /* wait for multi-line response to end EHLO SMTP response */ | 1304 | /* wait for multi-line response to end EHLO SMTP response */ |
| 1392 | do | 1305 | do { |
| 1393 | { | 1306 | mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ); |
| 1394 | mbuf_len = BIO_gets(fbio,mbuf,BUFSIZZ); | 1307 | if (strstr(mbuf, "STARTTLS")) |
| 1395 | if (strstr(mbuf,"STARTTLS")) | 1308 | foundit = 1; |
| 1396 | foundit=1; | 1309 | } |
| 1397 | } | 1310 | while (mbuf_len > 3 && mbuf[3] == '-'); |
| 1398 | while (mbuf_len>3 && mbuf[3]=='-'); | 1311 | (void) BIO_flush(fbio); |
| 1399 | (void)BIO_flush(fbio); | ||
| 1400 | BIO_pop(fbio); | 1312 | BIO_pop(fbio); |
| 1401 | BIO_free(fbio); | 1313 | BIO_free(fbio); |
| 1402 | if (!foundit) | 1314 | if (!foundit) |
| 1403 | BIO_printf(bio_err, | 1315 | BIO_printf(bio_err, |
| 1404 | "didn't found starttls in server response," | 1316 | "didn't found starttls in server response," |
| 1405 | " try anyway...\n"); | 1317 | " try anyway...\n"); |
| 1406 | BIO_printf(sbio,"STARTTLS\r\n"); | 1318 | BIO_printf(sbio, "STARTTLS\r\n"); |
| 1407 | BIO_read(sbio,sbuf,BUFSIZZ); | 1319 | BIO_read(sbio, sbuf, BUFSIZZ); |
| 1408 | } | 1320 | } else if (starttls_proto == PROTO_POP3) { |
| 1409 | else if (starttls_proto == PROTO_POP3) | 1321 | mbuf_len = BIO_read(sbio, mbuf, BUFSIZZ); |
| 1410 | { | 1322 | if (mbuf_len == -1) { |
| 1411 | mbuf_len = BIO_read(sbio,mbuf,BUFSIZZ); | 1323 | BIO_printf(bio_err, "BIO_read failed\n"); |
| 1412 | if (mbuf_len == -1) | ||
| 1413 | { | ||
| 1414 | BIO_printf(bio_err,"BIO_read failed\n"); | ||
| 1415 | goto end; | 1324 | goto end; |
| 1416 | } | ||
| 1417 | BIO_printf(sbio,"STLS\r\n"); | ||
| 1418 | BIO_read(sbio,sbuf,BUFSIZZ); | ||
| 1419 | } | 1325 | } |
| 1420 | else if (starttls_proto == PROTO_IMAP) | 1326 | BIO_printf(sbio, "STLS\r\n"); |
| 1421 | { | 1327 | BIO_read(sbio, sbuf, BUFSIZZ); |
| 1422 | int foundit=0; | 1328 | } else if (starttls_proto == PROTO_IMAP) { |
| 1329 | int foundit = 0; | ||
| 1423 | BIO *fbio = BIO_new(BIO_f_buffer()); | 1330 | BIO *fbio = BIO_new(BIO_f_buffer()); |
| 1424 | BIO_push(fbio, sbio); | 1331 | BIO_push(fbio, sbio); |
| 1425 | BIO_gets(fbio,mbuf,BUFSIZZ); | 1332 | BIO_gets(fbio, mbuf, BUFSIZZ); |
| 1426 | /* STARTTLS command requires CAPABILITY... */ | 1333 | /* STARTTLS command requires CAPABILITY... */ |
| 1427 | BIO_printf(fbio,". CAPABILITY\r\n"); | 1334 | BIO_printf(fbio, ". CAPABILITY\r\n"); |
| 1428 | (void)BIO_flush(fbio); | 1335 | (void) BIO_flush(fbio); |
| 1429 | /* wait for multi-line CAPABILITY response */ | 1336 | /* wait for multi-line CAPABILITY response */ |
| 1430 | do | 1337 | do { |
| 1431 | { | 1338 | mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ); |
| 1432 | mbuf_len = BIO_gets(fbio,mbuf,BUFSIZZ); | 1339 | if (strstr(mbuf, "STARTTLS")) |
| 1433 | if (strstr(mbuf,"STARTTLS")) | 1340 | foundit = 1; |
| 1434 | foundit=1; | 1341 | } |
| 1435 | } | 1342 | while (mbuf_len > 3 && mbuf[0] != '.'); |
| 1436 | while (mbuf_len>3 && mbuf[0]!='.'); | 1343 | (void) BIO_flush(fbio); |
| 1437 | (void)BIO_flush(fbio); | ||
| 1438 | BIO_pop(fbio); | 1344 | BIO_pop(fbio); |
| 1439 | BIO_free(fbio); | 1345 | BIO_free(fbio); |
| 1440 | if (!foundit) | 1346 | if (!foundit) |
| 1441 | BIO_printf(bio_err, | 1347 | BIO_printf(bio_err, |
| 1442 | "didn't found STARTTLS in server response," | 1348 | "didn't found STARTTLS in server response," |
| 1443 | " try anyway...\n"); | 1349 | " try anyway...\n"); |
| 1444 | BIO_printf(sbio,". STARTTLS\r\n"); | 1350 | BIO_printf(sbio, ". STARTTLS\r\n"); |
| 1445 | BIO_read(sbio,sbuf,BUFSIZZ); | 1351 | BIO_read(sbio, sbuf, BUFSIZZ); |
| 1446 | } | 1352 | } else if (starttls_proto == PROTO_FTP) { |
| 1447 | else if (starttls_proto == PROTO_FTP) | ||
| 1448 | { | ||
| 1449 | BIO *fbio = BIO_new(BIO_f_buffer()); | 1353 | BIO *fbio = BIO_new(BIO_f_buffer()); |
| 1450 | BIO_push(fbio, sbio); | 1354 | BIO_push(fbio, sbio); |
| 1451 | /* wait for multi-line response to end from FTP */ | 1355 | /* wait for multi-line response to end from FTP */ |
| 1452 | do | 1356 | do { |
| 1453 | { | 1357 | mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ); |
| 1454 | mbuf_len = BIO_gets(fbio,mbuf,BUFSIZZ); | 1358 | } |
| 1455 | } | 1359 | while (mbuf_len > 3 && mbuf[3] == '-'); |
| 1456 | while (mbuf_len>3 && mbuf[3]=='-'); | 1360 | (void) BIO_flush(fbio); |
| 1457 | (void)BIO_flush(fbio); | ||
| 1458 | BIO_pop(fbio); | 1361 | BIO_pop(fbio); |
| 1459 | BIO_free(fbio); | 1362 | BIO_free(fbio); |
| 1460 | BIO_printf(sbio,"AUTH TLS\r\n"); | 1363 | BIO_printf(sbio, "AUTH TLS\r\n"); |
| 1461 | BIO_read(sbio,sbuf,BUFSIZZ); | 1364 | BIO_read(sbio, sbuf, BUFSIZZ); |
| 1462 | } | 1365 | } |
| 1463 | if (starttls_proto == PROTO_XMPP) | 1366 | if (starttls_proto == PROTO_XMPP) { |
| 1464 | { | ||
| 1465 | int seen = 0; | 1367 | int seen = 0; |
| 1466 | BIO_printf(sbio,"<stream:stream " | 1368 | BIO_printf(sbio, "<stream:stream " |
| 1467 | "xmlns:stream='http://etherx.jabber.org/streams' " | 1369 | "xmlns:stream='http://etherx.jabber.org/streams' " |
| 1468 | "xmlns='jabber:client' to='%s' version='1.0'>", host); | 1370 | "xmlns='jabber:client' to='%s' version='1.0'>", host); |
| 1469 | seen = BIO_read(sbio,mbuf,BUFSIZZ); | 1371 | seen = BIO_read(sbio, mbuf, BUFSIZZ); |
| 1470 | mbuf[seen] = 0; | 1372 | mbuf[seen] = 0; |
| 1471 | while (!strstr(mbuf, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'")) | 1373 | while (!strstr(mbuf, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'")) { |
| 1472 | { | ||
| 1473 | if (strstr(mbuf, "/stream:features>")) | 1374 | if (strstr(mbuf, "/stream:features>")) |
| 1474 | goto shut; | 1375 | goto shut; |
| 1475 | seen = BIO_read(sbio,mbuf,BUFSIZZ); | 1376 | seen = BIO_read(sbio, mbuf, BUFSIZZ); |
| 1476 | mbuf[seen] = 0; | 1377 | mbuf[seen] = 0; |
| 1477 | } | 1378 | } |
| 1478 | BIO_printf(sbio, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>"); | 1379 | BIO_printf(sbio, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>"); |
| 1479 | seen = BIO_read(sbio,sbuf,BUFSIZZ); | 1380 | seen = BIO_read(sbio, sbuf, BUFSIZZ); |
| 1480 | sbuf[seen] = 0; | 1381 | sbuf[seen] = 0; |
| 1481 | if (!strstr(sbuf, "<proceed")) | 1382 | if (!strstr(sbuf, "<proceed")) |
| 1482 | goto shut; | 1383 | goto shut; |
| 1483 | mbuf[0] = 0; | 1384 | mbuf[0] = 0; |
| 1484 | } | 1385 | } |
| 1485 | 1386 | for (;;) { | |
| 1486 | for (;;) | ||
| 1487 | { | ||
| 1488 | FD_ZERO(&readfds); | 1387 | FD_ZERO(&readfds); |
| 1489 | FD_ZERO(&writefds); | 1388 | FD_ZERO(&writefds); |
| 1490 | 1389 | ||
| 1491 | if ((SSL_version(con) == DTLS1_VERSION) && | 1390 | if ((SSL_version(con) == DTLS1_VERSION) && |
| 1492 | DTLSv1_get_timeout(con, &timeout)) | 1391 | DTLSv1_get_timeout(con, &timeout)) |
| 1493 | timeoutp = &timeout; | 1392 | timeoutp = &timeout; |
| 1494 | else | 1393 | else |
| 1495 | timeoutp = NULL; | 1394 | timeoutp = NULL; |
| 1496 | 1395 | ||
| 1497 | if (SSL_in_init(con) && !SSL_total_renegotiations(con)) | 1396 | if (SSL_in_init(con) && !SSL_total_renegotiations(con)) { |
| 1498 | { | 1397 | in_init = 1; |
| 1499 | in_init=1; | 1398 | tty_on = 0; |
| 1500 | tty_on=0; | 1399 | } else { |
| 1501 | } | 1400 | tty_on = 1; |
| 1502 | else | 1401 | if (in_init) { |
| 1503 | { | 1402 | in_init = 0; |
| 1504 | tty_on=1; | 1403 | #if 0 /* This test doesn't really work as intended |
| 1505 | if (in_init) | 1404 | * (needs to be fixed) */ |
| 1506 | { | ||
| 1507 | in_init=0; | ||
| 1508 | #if 0 /* This test doesn't really work as intended (needs to be fixed) */ | ||
| 1509 | #ifndef OPENSSL_NO_TLSEXT | 1405 | #ifndef OPENSSL_NO_TLSEXT |
| 1510 | if (servername != NULL && !SSL_session_reused(con)) | 1406 | if (servername != NULL && !SSL_session_reused(con)) { |
| 1511 | { | 1407 | BIO_printf(bio_c_out, "Server did %sacknowledge servername extension.\n", tlsextcbp.ack ? "" : "not "); |
| 1512 | BIO_printf(bio_c_out,"Server did %sacknowledge servername extension.\n",tlsextcbp.ack?"":"not "); | 1408 | } |
| 1513 | } | ||
| 1514 | #endif | 1409 | #endif |
| 1515 | #endif | 1410 | #endif |
| 1516 | if (sess_out) | 1411 | if (sess_out) { |
| 1517 | { | ||
| 1518 | BIO *stmp = BIO_new_file(sess_out, "w"); | 1412 | BIO *stmp = BIO_new_file(sess_out, "w"); |
| 1519 | if (stmp) | 1413 | if (stmp) { |
| 1520 | { | ||
| 1521 | PEM_write_bio_SSL_SESSION(stmp, SSL_get_session(con)); | 1414 | PEM_write_bio_SSL_SESSION(stmp, SSL_get_session(con)); |
| 1522 | BIO_free(stmp); | 1415 | BIO_free(stmp); |
| 1523 | } | 1416 | } else |
| 1524 | else | ||
| 1525 | BIO_printf(bio_err, "Error writing session file %s\n", sess_out); | 1417 | BIO_printf(bio_err, "Error writing session file %s\n", sess_out); |
| 1526 | } | 1418 | } |
| 1527 | print_stuff(bio_c_out,con,full_log); | 1419 | print_stuff(bio_c_out, con, full_log); |
| 1528 | if (full_log > 0) full_log--; | 1420 | if (full_log > 0) |
| 1421 | full_log--; | ||
| 1529 | 1422 | ||
| 1530 | if (starttls_proto) | 1423 | if (starttls_proto) { |
| 1531 | { | ||
| 1532 | BIO_write(bio_err, mbuf, mbuf_len); | 1424 | BIO_write(bio_err, mbuf, mbuf_len); |
| 1533 | /* We don't need to know any more */ | 1425 | /* We don't need to know any more */ |
| 1534 | starttls_proto = PROTO_OFF; | 1426 | starttls_proto = PROTO_OFF; |
| 1535 | } | 1427 | } |
| 1536 | 1428 | if (reconnect) { | |
| 1537 | if (reconnect) | ||
| 1538 | { | ||
| 1539 | reconnect--; | 1429 | reconnect--; |
| 1540 | BIO_printf(bio_c_out,"drop connection and then reconnect\n"); | 1430 | BIO_printf(bio_c_out, "drop connection and then reconnect\n"); |
| 1541 | SSL_shutdown(con); | 1431 | SSL_shutdown(con); |
| 1542 | SSL_set_connect_state(con); | 1432 | SSL_set_connect_state(con); |
| 1543 | shutdown(SSL_get_fd(con), SHUT_RD); | 1433 | shutdown(SSL_get_fd(con), SHUT_RD); |
| 1544 | close(SSL_get_fd(con)); | 1434 | close(SSL_get_fd(con)); |
| 1545 | goto re_start; | 1435 | goto re_start; |
| 1546 | } | ||
| 1547 | } | 1436 | } |
| 1548 | } | 1437 | } |
| 1438 | } | ||
| 1549 | 1439 | ||
| 1550 | ssl_pending = read_ssl && SSL_pending(con); | 1440 | ssl_pending = read_ssl && SSL_pending(con); |
| 1551 | 1441 | ||
| 1552 | if (!ssl_pending) | 1442 | if (!ssl_pending) { |
| 1553 | { | 1443 | if (tty_on) { |
| 1554 | if (tty_on) | 1444 | if (read_tty) |
| 1555 | { | 1445 | openssl_fdset(fileno(stdin), &readfds); |
| 1556 | if (read_tty) openssl_fdset(fileno(stdin),&readfds); | 1446 | if (write_tty) |
| 1557 | if (write_tty) openssl_fdset(fileno(stdout),&writefds); | 1447 | openssl_fdset(fileno(stdout), &writefds); |
| 1558 | } | 1448 | } |
| 1559 | if (read_ssl) | 1449 | if (read_ssl) |
| 1560 | openssl_fdset(SSL_get_fd(con),&readfds); | 1450 | openssl_fdset(SSL_get_fd(con), &readfds); |
| 1561 | if (write_ssl) | 1451 | if (write_ssl) |
| 1562 | openssl_fdset(SSL_get_fd(con),&writefds); | 1452 | openssl_fdset(SSL_get_fd(con), &writefds); |
| 1563 | /* printf("mode tty(%d %d%d) ssl(%d%d)\n", | 1453 | /* printf("mode tty(%d %d%d) ssl(%d%d)\n", |
| 1564 | tty_on,read_tty,write_tty,read_ssl,write_ssl);*/ | 1454 | tty_on,read_tty,write_tty,read_ssl,write_ssl);*/ |
| 1565 | 1455 | ||
| 1566 | /* Note: under VMS with SOCKETSHR the second parameter | 1456 | /* |
| 1567 | * is currently of type (int *) whereas under other | 1457 | * Note: under VMS with SOCKETSHR the second |
| 1568 | * systems it is (void *) if you don't have a cast it | 1458 | * parameter is currently of type (int *) whereas |
| 1569 | * will choke the compiler: if you do have a cast then | 1459 | * under other systems it is (void *) if you don't |
| 1570 | * you can either go for (int *) or (void *). | 1460 | * have a cast it will choke the compiler: if you do |
| 1461 | * have a cast then you can either go for (int *) or | ||
| 1462 | * (void *). | ||
| 1571 | */ | 1463 | */ |
| 1572 | i=select(width,(void *)&readfds,(void *)&writefds, | 1464 | i = select(width, (void *) &readfds, (void *) &writefds, |
| 1573 | NULL,timeoutp); | 1465 | NULL, timeoutp); |
| 1574 | if ( i < 0) | 1466 | if (i < 0) { |
| 1575 | { | 1467 | BIO_printf(bio_err, "bad select %d\n", |
| 1576 | BIO_printf(bio_err,"bad select %d\n", | ||
| 1577 | errno); | 1468 | errno); |
| 1578 | goto shut; | 1469 | goto shut; |
| 1579 | /* goto end; */ | 1470 | /* goto end; */ |
| 1580 | } | ||
| 1581 | } | ||
| 1582 | |||
| 1583 | if ((SSL_version(con) == DTLS1_VERSION) && DTLSv1_handle_timeout(con) > 0) | ||
| 1584 | { | ||
| 1585 | BIO_printf(bio_err,"TIMEOUT occured\n"); | ||
| 1586 | } | 1471 | } |
| 1587 | 1472 | } | |
| 1588 | if (!ssl_pending && FD_ISSET(SSL_get_fd(con),&writefds)) | 1473 | if ((SSL_version(con) == DTLS1_VERSION) && DTLSv1_handle_timeout(con) > 0) { |
| 1589 | { | 1474 | BIO_printf(bio_err, "TIMEOUT occured\n"); |
| 1590 | k=SSL_write(con,&(cbuf[cbuf_off]), | 1475 | } |
| 1591 | (unsigned int)cbuf_len); | 1476 | if (!ssl_pending && FD_ISSET(SSL_get_fd(con), &writefds)) { |
| 1592 | switch (SSL_get_error(con,k)) | 1477 | k = SSL_write(con, &(cbuf[cbuf_off]), |
| 1593 | { | 1478 | (unsigned int) cbuf_len); |
| 1479 | switch (SSL_get_error(con, k)) { | ||
| 1594 | case SSL_ERROR_NONE: | 1480 | case SSL_ERROR_NONE: |
| 1595 | cbuf_off+=k; | 1481 | cbuf_off += k; |
| 1596 | cbuf_len-=k; | 1482 | cbuf_len -= k; |
| 1597 | if (k <= 0) goto end; | 1483 | if (k <= 0) |
| 1484 | goto end; | ||
| 1598 | /* we have done a write(con,NULL,0); */ | 1485 | /* we have done a write(con,NULL,0); */ |
| 1599 | if (cbuf_len <= 0) | 1486 | if (cbuf_len <= 0) { |
| 1600 | { | 1487 | read_tty = 1; |
| 1601 | read_tty=1; | 1488 | write_ssl = 0; |
| 1602 | write_ssl=0; | 1489 | } else { /* if (cbuf_len > 0) */ |
| 1603 | } | 1490 | read_tty = 0; |
| 1604 | else /* if (cbuf_len > 0) */ | 1491 | write_ssl = 1; |
| 1605 | { | 1492 | } |
| 1606 | read_tty=0; | ||
| 1607 | write_ssl=1; | ||
| 1608 | } | ||
| 1609 | break; | 1493 | break; |
| 1610 | case SSL_ERROR_WANT_WRITE: | 1494 | case SSL_ERROR_WANT_WRITE: |
| 1611 | BIO_printf(bio_c_out,"write W BLOCK\n"); | 1495 | BIO_printf(bio_c_out, "write W BLOCK\n"); |
| 1612 | write_ssl=1; | 1496 | write_ssl = 1; |
| 1613 | read_tty=0; | 1497 | read_tty = 0; |
| 1614 | break; | 1498 | break; |
| 1615 | case SSL_ERROR_WANT_READ: | 1499 | case SSL_ERROR_WANT_READ: |
| 1616 | BIO_printf(bio_c_out,"write R BLOCK\n"); | 1500 | BIO_printf(bio_c_out, "write R BLOCK\n"); |
| 1617 | write_tty=0; | 1501 | write_tty = 0; |
| 1618 | read_ssl=1; | 1502 | read_ssl = 1; |
| 1619 | write_ssl=0; | 1503 | write_ssl = 0; |
| 1620 | break; | 1504 | break; |
| 1621 | case SSL_ERROR_WANT_X509_LOOKUP: | 1505 | case SSL_ERROR_WANT_X509_LOOKUP: |
| 1622 | BIO_printf(bio_c_out,"write X BLOCK\n"); | 1506 | BIO_printf(bio_c_out, "write X BLOCK\n"); |
| 1623 | break; | 1507 | break; |
| 1624 | case SSL_ERROR_ZERO_RETURN: | 1508 | case SSL_ERROR_ZERO_RETURN: |
| 1625 | if (cbuf_len != 0) | 1509 | if (cbuf_len != 0) { |
| 1626 | { | 1510 | BIO_printf(bio_c_out, "shutdown\n"); |
| 1627 | BIO_printf(bio_c_out,"shutdown\n"); | ||
| 1628 | ret = 0; | 1511 | ret = 0; |
| 1629 | goto shut; | 1512 | goto shut; |
| 1630 | } | 1513 | } else { |
| 1631 | else | 1514 | read_tty = 1; |
| 1632 | { | 1515 | write_ssl = 0; |
| 1633 | read_tty=1; | ||
| 1634 | write_ssl=0; | ||
| 1635 | break; | 1516 | break; |
| 1636 | } | 1517 | } |
| 1637 | 1518 | ||
| 1638 | case SSL_ERROR_SYSCALL: | 1519 | case SSL_ERROR_SYSCALL: |
| 1639 | if ((k != 0) || (cbuf_len != 0)) | 1520 | if ((k != 0) || (cbuf_len != 0)) { |
| 1640 | { | 1521 | BIO_printf(bio_err, "write:errno=%d\n", |
| 1641 | BIO_printf(bio_err,"write:errno=%d\n", | 1522 | errno); |
| 1642 | errno); | ||
| 1643 | goto shut; | 1523 | goto shut; |
| 1644 | } | 1524 | } else { |
| 1645 | else | 1525 | read_tty = 1; |
| 1646 | { | 1526 | write_ssl = 0; |
| 1647 | read_tty=1; | 1527 | } |
| 1648 | write_ssl=0; | ||
| 1649 | } | ||
| 1650 | break; | 1528 | break; |
| 1651 | case SSL_ERROR_SSL: | 1529 | case SSL_ERROR_SSL: |
| 1652 | ERR_print_errors(bio_err); | 1530 | ERR_print_errors(bio_err); |
| 1653 | goto shut; | 1531 | goto shut; |
| 1654 | } | ||
| 1655 | } | 1532 | } |
| 1656 | else if (!ssl_pending && FD_ISSET(fileno(stdout),&writefds)) | 1533 | } else if (!ssl_pending && FD_ISSET(fileno(stdout), &writefds)) { |
| 1657 | { | 1534 | i = raw_write_stdout(&(sbuf[sbuf_off]), sbuf_len); |
| 1658 | i=raw_write_stdout(&(sbuf[sbuf_off]),sbuf_len); | ||
| 1659 | 1535 | ||
| 1660 | if (i <= 0) | 1536 | if (i <= 0) { |
| 1661 | { | 1537 | BIO_printf(bio_c_out, "DONE\n"); |
| 1662 | BIO_printf(bio_c_out,"DONE\n"); | ||
| 1663 | ret = 0; | 1538 | ret = 0; |
| 1664 | goto shut; | 1539 | goto shut; |
| 1665 | /* goto end; */ | 1540 | /* goto end; */ |
| 1666 | } | ||
| 1667 | |||
| 1668 | sbuf_len-=i; | ||
| 1669 | sbuf_off+=i; | ||
| 1670 | if (sbuf_len <= 0) | ||
| 1671 | { | ||
| 1672 | read_ssl=1; | ||
| 1673 | write_tty=0; | ||
| 1674 | } | ||
| 1675 | } | 1541 | } |
| 1676 | else if (ssl_pending || FD_ISSET(SSL_get_fd(con),&readfds)) | 1542 | sbuf_len -= i; |
| 1677 | { | 1543 | sbuf_off += i; |
| 1544 | if (sbuf_len <= 0) { | ||
| 1545 | read_ssl = 1; | ||
| 1546 | write_tty = 0; | ||
| 1547 | } | ||
| 1548 | } else if (ssl_pending || FD_ISSET(SSL_get_fd(con), &readfds)) { | ||
| 1678 | #ifdef RENEG | 1549 | #ifdef RENEG |
| 1679 | { static int iiii; if (++iiii == 52) { SSL_renegotiate(con); iiii=0; } } | 1550 | { |
| 1551 | static int iiii; | ||
| 1552 | if (++iiii == 52) { | ||
| 1553 | SSL_renegotiate(con); | ||
| 1554 | iiii = 0; | ||
| 1555 | } | ||
| 1556 | } | ||
| 1680 | #endif | 1557 | #endif |
| 1681 | #if 1 | 1558 | #if 1 |
| 1682 | k=SSL_read(con,sbuf,1024 /* BUFSIZZ */ ); | 1559 | k = SSL_read(con, sbuf, 1024 /* BUFSIZZ */ ); |
| 1683 | #else | 1560 | #else |
| 1684 | /* Demo for pending and peek :-) */ | 1561 | /* Demo for pending and peek :-) */ |
| 1685 | k=SSL_read(con,sbuf,16); | 1562 | k = SSL_read(con, sbuf, 16); |
| 1686 | { char zbuf[10240]; | 1563 | { |
| 1687 | printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240)); | 1564 | char zbuf[10240]; |
| 1688 | } | 1565 | printf("read=%d pending=%d peek=%d\n", k, SSL_pending(con), SSL_peek(con, zbuf, 10240)); |
| 1566 | } | ||
| 1689 | #endif | 1567 | #endif |
| 1690 | 1568 | ||
| 1691 | switch (SSL_get_error(con,k)) | 1569 | switch (SSL_get_error(con, k)) { |
| 1692 | { | ||
| 1693 | case SSL_ERROR_NONE: | 1570 | case SSL_ERROR_NONE: |
| 1694 | if (k <= 0) | 1571 | if (k <= 0) |
| 1695 | goto end; | 1572 | goto end; |
| 1696 | sbuf_off=0; | 1573 | sbuf_off = 0; |
| 1697 | sbuf_len=k; | 1574 | sbuf_len = k; |
| 1698 | 1575 | ||
| 1699 | read_ssl=0; | 1576 | read_ssl = 0; |
| 1700 | write_tty=1; | 1577 | write_tty = 1; |
| 1701 | break; | 1578 | break; |
| 1702 | case SSL_ERROR_WANT_WRITE: | 1579 | case SSL_ERROR_WANT_WRITE: |
| 1703 | BIO_printf(bio_c_out,"read W BLOCK\n"); | 1580 | BIO_printf(bio_c_out, "read W BLOCK\n"); |
| 1704 | write_ssl=1; | 1581 | write_ssl = 1; |
| 1705 | read_tty=0; | 1582 | read_tty = 0; |
| 1706 | break; | 1583 | break; |
| 1707 | case SSL_ERROR_WANT_READ: | 1584 | case SSL_ERROR_WANT_READ: |
| 1708 | BIO_printf(bio_c_out,"read R BLOCK\n"); | 1585 | BIO_printf(bio_c_out, "read R BLOCK\n"); |
| 1709 | write_tty=0; | 1586 | write_tty = 0; |
| 1710 | read_ssl=1; | 1587 | read_ssl = 1; |
| 1711 | if ((read_tty == 0) && (write_ssl == 0)) | 1588 | if ((read_tty == 0) && (write_ssl == 0)) |
| 1712 | write_ssl=1; | 1589 | write_ssl = 1; |
| 1713 | break; | 1590 | break; |
| 1714 | case SSL_ERROR_WANT_X509_LOOKUP: | 1591 | case SSL_ERROR_WANT_X509_LOOKUP: |
| 1715 | BIO_printf(bio_c_out,"read X BLOCK\n"); | 1592 | BIO_printf(bio_c_out, "read X BLOCK\n"); |
| 1716 | break; | 1593 | break; |
| 1717 | case SSL_ERROR_SYSCALL: | 1594 | case SSL_ERROR_SYSCALL: |
| 1718 | ret=errno; | 1595 | ret = errno; |
| 1719 | BIO_printf(bio_err,"read:errno=%d\n",ret); | 1596 | BIO_printf(bio_err, "read:errno=%d\n", ret); |
| 1720 | goto shut; | 1597 | goto shut; |
| 1721 | case SSL_ERROR_ZERO_RETURN: | 1598 | case SSL_ERROR_ZERO_RETURN: |
| 1722 | BIO_printf(bio_c_out,"closed\n"); | 1599 | BIO_printf(bio_c_out, "closed\n"); |
| 1723 | ret=0; | 1600 | ret = 0; |
| 1724 | goto shut; | 1601 | goto shut; |
| 1725 | case SSL_ERROR_SSL: | 1602 | case SSL_ERROR_SSL: |
| 1726 | ERR_print_errors(bio_err); | 1603 | ERR_print_errors(bio_err); |
| 1727 | goto shut; | 1604 | goto shut; |
| 1728 | /* break; */ | 1605 | /* break; */ |
| 1729 | } | ||
| 1730 | } | 1606 | } |
| 1731 | 1607 | } else if (FD_ISSET(fileno(stdin), &readfds)) { | |
| 1732 | else if (FD_ISSET(fileno(stdin),&readfds)) | 1608 | if (crlf) { |
| 1733 | { | ||
| 1734 | if (crlf) | ||
| 1735 | { | ||
| 1736 | int j, lf_num; | 1609 | int j, lf_num; |
| 1737 | 1610 | ||
| 1738 | i=raw_read_stdin(cbuf,BUFSIZZ/2); | 1611 | i = raw_read_stdin(cbuf, BUFSIZZ / 2); |
| 1739 | lf_num = 0; | 1612 | lf_num = 0; |
| 1740 | /* both loops are skipped when i <= 0 */ | 1613 | /* both loops are skipped when i <= 0 */ |
| 1741 | for (j = 0; j < i; j++) | 1614 | for (j = 0; j < i; j++) |
| 1742 | if (cbuf[j] == '\n') | 1615 | if (cbuf[j] == '\n') |
| 1743 | lf_num++; | 1616 | lf_num++; |
| 1744 | for (j = i-1; j >= 0; j--) | 1617 | for (j = i - 1; j >= 0; j--) { |
| 1745 | { | 1618 | cbuf[j + lf_num] = cbuf[j]; |
| 1746 | cbuf[j+lf_num] = cbuf[j]; | 1619 | if (cbuf[j] == '\n') { |
| 1747 | if (cbuf[j] == '\n') | ||
| 1748 | { | ||
| 1749 | lf_num--; | 1620 | lf_num--; |
| 1750 | i++; | 1621 | i++; |
| 1751 | cbuf[j+lf_num] = '\r'; | 1622 | cbuf[j + lf_num] = '\r'; |
| 1752 | } | ||
| 1753 | } | 1623 | } |
| 1754 | assert(lf_num == 0); | ||
| 1755 | } | 1624 | } |
| 1756 | else | 1625 | assert(lf_num == 0); |
| 1757 | i=raw_read_stdin(cbuf,BUFSIZZ); | 1626 | } else |
| 1627 | i = raw_read_stdin(cbuf, BUFSIZZ); | ||
| 1758 | 1628 | ||
| 1759 | if ((!c_ign_eof) && ((i <= 0) || (cbuf[0] == 'Q'))) | 1629 | if ((!c_ign_eof) && ((i <= 0) || (cbuf[0] == 'Q'))) { |
| 1760 | { | 1630 | BIO_printf(bio_err, "DONE\n"); |
| 1761 | BIO_printf(bio_err,"DONE\n"); | 1631 | ret = 0; |
| 1762 | ret=0; | ||
| 1763 | goto shut; | 1632 | goto shut; |
| 1764 | } | 1633 | } |
| 1765 | 1634 | if ((!c_ign_eof) && (cbuf[0] == 'R')) { | |
| 1766 | if ((!c_ign_eof) && (cbuf[0] == 'R')) | 1635 | BIO_printf(bio_err, "RENEGOTIATING\n"); |
| 1767 | { | ||
| 1768 | BIO_printf(bio_err,"RENEGOTIATING\n"); | ||
| 1769 | SSL_renegotiate(con); | 1636 | SSL_renegotiate(con); |
| 1770 | cbuf_len=0; | 1637 | cbuf_len = 0; |
| 1771 | } | 1638 | } else { |
| 1772 | else | 1639 | cbuf_len = i; |
| 1773 | { | 1640 | cbuf_off = 0; |
| 1774 | cbuf_len=i; | ||
| 1775 | cbuf_off=0; | ||
| 1776 | } | ||
| 1777 | |||
| 1778 | write_ssl=1; | ||
| 1779 | read_tty=0; | ||
| 1780 | } | 1641 | } |
| 1642 | |||
| 1643 | write_ssl = 1; | ||
| 1644 | read_tty = 0; | ||
| 1781 | } | 1645 | } |
| 1646 | } | ||
| 1782 | 1647 | ||
| 1783 | ret=0; | 1648 | ret = 0; |
| 1784 | shut: | 1649 | shut: |
| 1785 | if (in_init) | 1650 | if (in_init) |
| 1786 | print_stuff(bio_c_out,con,full_log); | 1651 | print_stuff(bio_c_out, con, full_log); |
| 1787 | SSL_shutdown(con); | 1652 | SSL_shutdown(con); |
| 1788 | shutdown(SSL_get_fd(con), SHUT_RD); | 1653 | shutdown(SSL_get_fd(con), SHUT_RD); |
| 1789 | close(SSL_get_fd(con)); | 1654 | close(SSL_get_fd(con)); |
| 1790 | end: | 1655 | end: |
| 1791 | if (con != NULL) | 1656 | if (con != NULL) { |
| 1792 | { | ||
| 1793 | if (prexit != 0) | 1657 | if (prexit != 0) |
| 1794 | print_stuff(bio_c_out,con,1); | 1658 | print_stuff(bio_c_out, con, 1); |
| 1795 | SSL_free(con); | 1659 | SSL_free(con); |
| 1796 | } | 1660 | } |
| 1797 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) | 1661 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) |
| 1798 | if (next_proto.data) | 1662 | if (next_proto.data) |
| 1799 | free(next_proto.data); | 1663 | free(next_proto.data); |
| 1800 | #endif | 1664 | #endif |
| 1801 | if (ctx != NULL) SSL_CTX_free(ctx); | 1665 | if (ctx != NULL) |
| 1666 | SSL_CTX_free(ctx); | ||
| 1802 | if (cert) | 1667 | if (cert) |
| 1803 | X509_free(cert); | 1668 | X509_free(cert); |
| 1804 | if (key) | 1669 | if (key) |
| @@ -1807,156 +1672,154 @@ end: | |||
| 1807 | free(pass); | 1672 | free(pass); |
| 1808 | if (vpm) | 1673 | if (vpm) |
| 1809 | X509_VERIFY_PARAM_free(vpm); | 1674 | X509_VERIFY_PARAM_free(vpm); |
| 1810 | if (cbuf != NULL) { OPENSSL_cleanse(cbuf,BUFSIZZ); free(cbuf); } | 1675 | if (cbuf != NULL) { |
| 1811 | if (sbuf != NULL) { OPENSSL_cleanse(sbuf,BUFSIZZ); free(sbuf); } | 1676 | OPENSSL_cleanse(cbuf, BUFSIZZ); |
| 1812 | if (mbuf != NULL) { OPENSSL_cleanse(mbuf,BUFSIZZ); free(mbuf); } | 1677 | free(cbuf); |
| 1813 | if (bio_c_out != NULL) | 1678 | } |
| 1814 | { | 1679 | if (sbuf != NULL) { |
| 1680 | OPENSSL_cleanse(sbuf, BUFSIZZ); | ||
| 1681 | free(sbuf); | ||
| 1682 | } | ||
| 1683 | if (mbuf != NULL) { | ||
| 1684 | OPENSSL_cleanse(mbuf, BUFSIZZ); | ||
| 1685 | free(mbuf); | ||
| 1686 | } | ||
| 1687 | if (bio_c_out != NULL) { | ||
| 1815 | BIO_free(bio_c_out); | 1688 | BIO_free(bio_c_out); |
| 1816 | bio_c_out=NULL; | 1689 | bio_c_out = NULL; |
| 1817 | } | ||
| 1818 | apps_shutdown(); | ||
| 1819 | return(ret); | ||
| 1820 | } | 1690 | } |
| 1691 | apps_shutdown(); | ||
| 1692 | return (ret); | ||
| 1693 | } | ||
| 1821 | 1694 | ||
| 1822 | 1695 | ||
| 1823 | static void print_stuff(BIO *bio, SSL *s, int full) | 1696 | static void |
| 1824 | { | 1697 | print_stuff(BIO * bio, SSL * s, int full) |
| 1825 | X509 *peer=NULL; | 1698 | { |
| 1699 | X509 *peer = NULL; | ||
| 1826 | char *p; | 1700 | char *p; |
| 1827 | static const char *space=" "; | 1701 | static const char *space = " "; |
| 1828 | char buf[BUFSIZ]; | 1702 | char buf[BUFSIZ]; |
| 1829 | STACK_OF(X509) *sk; | 1703 | STACK_OF(X509) * sk; |
| 1830 | STACK_OF(X509_NAME) *sk2; | 1704 | STACK_OF(X509_NAME) * sk2; |
| 1831 | const SSL_CIPHER *c; | 1705 | const SSL_CIPHER *c; |
| 1832 | X509_NAME *xn; | 1706 | X509_NAME *xn; |
| 1833 | int j,i; | 1707 | int j, i; |
| 1834 | #ifndef OPENSSL_NO_COMP | 1708 | #ifndef OPENSSL_NO_COMP |
| 1835 | const COMP_METHOD *comp, *expansion; | 1709 | const COMP_METHOD *comp, *expansion; |
| 1836 | #endif | 1710 | #endif |
| 1837 | unsigned char *exportedkeymat; | 1711 | unsigned char *exportedkeymat; |
| 1838 | 1712 | ||
| 1839 | if (full) | 1713 | if (full) { |
| 1840 | { | ||
| 1841 | int got_a_chain = 0; | 1714 | int got_a_chain = 0; |
| 1842 | 1715 | ||
| 1843 | sk=SSL_get_peer_cert_chain(s); | 1716 | sk = SSL_get_peer_cert_chain(s); |
| 1844 | if (sk != NULL) | 1717 | if (sk != NULL) { |
| 1845 | { | 1718 | got_a_chain = 1; /* we don't have it for SSL2 |
| 1846 | got_a_chain = 1; /* we don't have it for SSL2 (yet) */ | 1719 | * (yet) */ |
| 1847 | 1720 | ||
| 1848 | BIO_printf(bio,"---\nCertificate chain\n"); | 1721 | BIO_printf(bio, "---\nCertificate chain\n"); |
| 1849 | for (i=0; i<sk_X509_num(sk); i++) | 1722 | for (i = 0; i < sk_X509_num(sk); i++) { |
| 1850 | { | ||
| 1851 | X509_NAME_oneline(X509_get_subject_name( | 1723 | X509_NAME_oneline(X509_get_subject_name( |
| 1852 | sk_X509_value(sk,i)),buf,sizeof buf); | 1724 | sk_X509_value(sk, i)), buf, sizeof buf); |
| 1853 | BIO_printf(bio,"%2d s:%s\n",i,buf); | 1725 | BIO_printf(bio, "%2d s:%s\n", i, buf); |
| 1854 | X509_NAME_oneline(X509_get_issuer_name( | 1726 | X509_NAME_oneline(X509_get_issuer_name( |
| 1855 | sk_X509_value(sk,i)),buf,sizeof buf); | 1727 | sk_X509_value(sk, i)), buf, sizeof buf); |
| 1856 | BIO_printf(bio," i:%s\n",buf); | 1728 | BIO_printf(bio, " i:%s\n", buf); |
| 1857 | if (c_showcerts) | 1729 | if (c_showcerts) |
| 1858 | PEM_write_bio_X509(bio,sk_X509_value(sk,i)); | 1730 | PEM_write_bio_X509(bio, sk_X509_value(sk, i)); |
| 1859 | } | ||
| 1860 | } | 1731 | } |
| 1861 | 1732 | } | |
| 1862 | BIO_printf(bio,"---\n"); | 1733 | BIO_printf(bio, "---\n"); |
| 1863 | peer=SSL_get_peer_certificate(s); | 1734 | peer = SSL_get_peer_certificate(s); |
| 1864 | if (peer != NULL) | 1735 | if (peer != NULL) { |
| 1865 | { | 1736 | BIO_printf(bio, "Server certificate\n"); |
| 1866 | BIO_printf(bio,"Server certificate\n"); | 1737 | if (!(c_showcerts && got_a_chain)) /* Redundant if we |
| 1867 | if (!(c_showcerts && got_a_chain)) /* Redundant if we showed the whole chain */ | 1738 | * showed the whole |
| 1868 | PEM_write_bio_X509(bio,peer); | 1739 | * chain */ |
| 1740 | PEM_write_bio_X509(bio, peer); | ||
| 1869 | X509_NAME_oneline(X509_get_subject_name(peer), | 1741 | X509_NAME_oneline(X509_get_subject_name(peer), |
| 1870 | buf,sizeof buf); | 1742 | buf, sizeof buf); |
| 1871 | BIO_printf(bio,"subject=%s\n",buf); | 1743 | BIO_printf(bio, "subject=%s\n", buf); |
| 1872 | X509_NAME_oneline(X509_get_issuer_name(peer), | 1744 | X509_NAME_oneline(X509_get_issuer_name(peer), |
| 1873 | buf,sizeof buf); | 1745 | buf, sizeof buf); |
| 1874 | BIO_printf(bio,"issuer=%s\n",buf); | 1746 | BIO_printf(bio, "issuer=%s\n", buf); |
| 1875 | } | 1747 | } else |
| 1876 | else | 1748 | BIO_printf(bio, "no peer certificate available\n"); |
| 1877 | BIO_printf(bio,"no peer certificate available\n"); | 1749 | |
| 1878 | 1750 | sk2 = SSL_get_client_CA_list(s); | |
| 1879 | sk2=SSL_get_client_CA_list(s); | 1751 | if ((sk2 != NULL) && (sk_X509_NAME_num(sk2) > 0)) { |
| 1880 | if ((sk2 != NULL) && (sk_X509_NAME_num(sk2) > 0)) | 1752 | BIO_printf(bio, "---\nAcceptable client certificate CA names\n"); |
| 1881 | { | 1753 | for (i = 0; i < sk_X509_NAME_num(sk2); i++) { |
| 1882 | BIO_printf(bio,"---\nAcceptable client certificate CA names\n"); | 1754 | xn = sk_X509_NAME_value(sk2, i); |
| 1883 | for (i=0; i<sk_X509_NAME_num(sk2); i++) | 1755 | X509_NAME_oneline(xn, buf, sizeof(buf)); |
| 1884 | { | 1756 | BIO_write(bio, buf, strlen(buf)); |
| 1885 | xn=sk_X509_NAME_value(sk2,i); | 1757 | BIO_write(bio, "\n", 1); |
| 1886 | X509_NAME_oneline(xn,buf,sizeof(buf)); | 1758 | } |
| 1887 | BIO_write(bio,buf,strlen(buf)); | 1759 | } else { |
| 1888 | BIO_write(bio,"\n",1); | 1760 | BIO_printf(bio, "---\nNo client certificate CA names sent\n"); |
| 1889 | } | 1761 | } |
| 1890 | } | 1762 | p = SSL_get_shared_ciphers(s, buf, sizeof buf); |
| 1891 | else | 1763 | if (p != NULL) { |
| 1892 | { | 1764 | /* |
| 1893 | BIO_printf(bio,"---\nNo client certificate CA names sent\n"); | 1765 | * This works only for SSL 2. In later protocol |
| 1894 | } | ||
| 1895 | p=SSL_get_shared_ciphers(s,buf,sizeof buf); | ||
| 1896 | if (p != NULL) | ||
| 1897 | { | ||
| 1898 | /* This works only for SSL 2. In later protocol | ||
| 1899 | * versions, the client does not know what other | 1766 | * versions, the client does not know what other |
| 1900 | * ciphers (in addition to the one to be used | 1767 | * ciphers (in addition to the one to be used in the |
| 1901 | * in the current connection) the server supports. */ | 1768 | * current connection) the server supports. |
| 1902 | 1769 | */ | |
| 1903 | BIO_printf(bio,"---\nCiphers common between both SSL endpoints:\n"); | 1770 | |
| 1904 | j=i=0; | 1771 | BIO_printf(bio, "---\nCiphers common between both SSL endpoints:\n"); |
| 1905 | while (*p) | 1772 | j = i = 0; |
| 1906 | { | 1773 | while (*p) { |
| 1907 | if (*p == ':') | 1774 | if (*p == ':') { |
| 1908 | { | 1775 | BIO_write(bio, space, 15 - j % 25); |
| 1909 | BIO_write(bio,space,15-j%25); | ||
| 1910 | i++; | 1776 | i++; |
| 1911 | j=0; | 1777 | j = 0; |
| 1912 | BIO_write(bio,((i%3)?" ":"\n"),1); | 1778 | BIO_write(bio, ((i % 3) ? " " : "\n"), 1); |
| 1913 | } | 1779 | } else { |
| 1914 | else | 1780 | BIO_write(bio, p, 1); |
| 1915 | { | ||
| 1916 | BIO_write(bio,p,1); | ||
| 1917 | j++; | 1781 | j++; |
| 1918 | } | ||
| 1919 | p++; | ||
| 1920 | } | 1782 | } |
| 1921 | BIO_write(bio,"\n",1); | 1783 | p++; |
| 1922 | } | 1784 | } |
| 1923 | 1785 | BIO_write(bio, "\n", 1); | |
| 1924 | BIO_printf(bio,"---\nSSL handshake has read %ld bytes and written %ld bytes\n", | ||
| 1925 | BIO_number_read(SSL_get_rbio(s)), | ||
| 1926 | BIO_number_written(SSL_get_wbio(s))); | ||
| 1927 | } | 1786 | } |
| 1928 | BIO_printf(bio,(SSL_cache_hit(s)?"---\nReused, ":"---\nNew, ")); | 1787 | BIO_printf(bio, "---\nSSL handshake has read %ld bytes and written %ld bytes\n", |
| 1929 | c=SSL_get_current_cipher(s); | 1788 | BIO_number_read(SSL_get_rbio(s)), |
| 1930 | BIO_printf(bio,"%s, Cipher is %s\n", | 1789 | BIO_number_written(SSL_get_wbio(s))); |
| 1931 | SSL_CIPHER_get_version(c), | 1790 | } |
| 1932 | SSL_CIPHER_get_name(c)); | 1791 | BIO_printf(bio, (SSL_cache_hit(s) ? "---\nReused, " : "---\nNew, ")); |
| 1792 | c = SSL_get_current_cipher(s); | ||
| 1793 | BIO_printf(bio, "%s, Cipher is %s\n", | ||
| 1794 | SSL_CIPHER_get_version(c), | ||
| 1795 | SSL_CIPHER_get_name(c)); | ||
| 1933 | if (peer != NULL) { | 1796 | if (peer != NULL) { |
| 1934 | EVP_PKEY *pktmp; | 1797 | EVP_PKEY *pktmp; |
| 1935 | pktmp = X509_get_pubkey(peer); | 1798 | pktmp = X509_get_pubkey(peer); |
| 1936 | BIO_printf(bio,"Server public key is %d bit\n", | 1799 | BIO_printf(bio, "Server public key is %d bit\n", |
| 1937 | EVP_PKEY_bits(pktmp)); | 1800 | EVP_PKEY_bits(pktmp)); |
| 1938 | EVP_PKEY_free(pktmp); | 1801 | EVP_PKEY_free(pktmp); |
| 1939 | } | 1802 | } |
| 1940 | BIO_printf(bio, "Secure Renegotiation IS%s supported\n", | 1803 | BIO_printf(bio, "Secure Renegotiation IS%s supported\n", |
| 1941 | SSL_get_secure_renegotiation_support(s) ? "" : " NOT"); | 1804 | SSL_get_secure_renegotiation_support(s) ? "" : " NOT"); |
| 1942 | #ifndef OPENSSL_NO_COMP | 1805 | #ifndef OPENSSL_NO_COMP |
| 1943 | comp=SSL_get_current_compression(s); | 1806 | comp = SSL_get_current_compression(s); |
| 1944 | expansion=SSL_get_current_expansion(s); | 1807 | expansion = SSL_get_current_expansion(s); |
| 1945 | BIO_printf(bio,"Compression: %s\n", | 1808 | BIO_printf(bio, "Compression: %s\n", |
| 1946 | comp ? SSL_COMP_get_name(comp) : "NONE"); | 1809 | comp ? SSL_COMP_get_name(comp) : "NONE"); |
| 1947 | BIO_printf(bio,"Expansion: %s\n", | 1810 | BIO_printf(bio, "Expansion: %s\n", |
| 1948 | expansion ? SSL_COMP_get_name(expansion) : "NONE"); | 1811 | expansion ? SSL_COMP_get_name(expansion) : "NONE"); |
| 1949 | #endif | 1812 | #endif |
| 1950 | 1813 | ||
| 1951 | #ifdef SSL_DEBUG | 1814 | #ifdef SSL_DEBUG |
| 1952 | { | 1815 | { |
| 1953 | /* Print out local port of connection: useful for debugging */ | 1816 | /* Print out local port of connection: useful for debugging */ |
| 1954 | int sock; | 1817 | int sock; |
| 1955 | struct sockaddr_in ladd; | 1818 | struct sockaddr_in ladd; |
| 1956 | socklen_t ladd_size = sizeof(ladd); | 1819 | socklen_t ladd_size = sizeof(ladd); |
| 1957 | sock = SSL_get_fd(s); | 1820 | sock = SSL_get_fd(s); |
| 1958 | getsockname(sock, (struct sockaddr *)&ladd, &ladd_size); | 1821 | getsockname(sock, (struct sockaddr *) & ladd, &ladd_size); |
| 1959 | BIO_printf(bio_c_out, "LOCAL PORT is %u\n", ntohs(ladd.sin_port)); | 1822 | BIO_printf(bio_c_out, "LOCAL PORT is %u\n", ntohs(ladd.sin_port)); |
| 1960 | } | 1823 | } |
| 1961 | #endif | 1824 | #endif |
| 1962 | 1825 | ||
| @@ -1972,76 +1835,70 @@ static void print_stuff(BIO *bio, SSL *s, int full) | |||
| 1972 | #endif | 1835 | #endif |
| 1973 | 1836 | ||
| 1974 | #ifndef OPENSSL_NO_SRTP | 1837 | #ifndef OPENSSL_NO_SRTP |
| 1975 | { | 1838 | { |
| 1976 | SRTP_PROTECTION_PROFILE *srtp_profile=SSL_get_selected_srtp_profile(s); | 1839 | SRTP_PROTECTION_PROFILE *srtp_profile = SSL_get_selected_srtp_profile(s); |
| 1977 | 1840 | ||
| 1978 | if(srtp_profile) | 1841 | if (srtp_profile) |
| 1979 | BIO_printf(bio,"SRTP Extension negotiated, profile=%s\n", | 1842 | BIO_printf(bio, "SRTP Extension negotiated, profile=%s\n", |
| 1980 | srtp_profile->name); | 1843 | srtp_profile->name); |
| 1981 | } | 1844 | } |
| 1982 | #endif | 1845 | #endif |
| 1983 | 1846 | ||
| 1984 | SSL_SESSION_print(bio,SSL_get_session(s)); | 1847 | SSL_SESSION_print(bio, SSL_get_session(s)); |
| 1985 | if (keymatexportlabel != NULL) | 1848 | if (keymatexportlabel != NULL) { |
| 1986 | { | ||
| 1987 | BIO_printf(bio, "Keying material exporter:\n"); | 1849 | BIO_printf(bio, "Keying material exporter:\n"); |
| 1988 | BIO_printf(bio, " Label: '%s'\n", keymatexportlabel); | 1850 | BIO_printf(bio, " Label: '%s'\n", keymatexportlabel); |
| 1989 | BIO_printf(bio, " Length: %i bytes\n", keymatexportlen); | 1851 | BIO_printf(bio, " Length: %i bytes\n", keymatexportlen); |
| 1990 | exportedkeymat = malloc(keymatexportlen); | 1852 | exportedkeymat = malloc(keymatexportlen); |
| 1991 | if (exportedkeymat != NULL) | 1853 | if (exportedkeymat != NULL) { |
| 1992 | { | ||
| 1993 | if (!SSL_export_keying_material(s, exportedkeymat, | 1854 | if (!SSL_export_keying_material(s, exportedkeymat, |
| 1994 | keymatexportlen, | 1855 | keymatexportlen, |
| 1995 | keymatexportlabel, | 1856 | keymatexportlabel, |
| 1996 | strlen(keymatexportlabel), | 1857 | strlen(keymatexportlabel), |
| 1997 | NULL, 0, 0)) | 1858 | NULL, 0, 0)) { |
| 1998 | { | ||
| 1999 | BIO_printf(bio, " Error\n"); | 1859 | BIO_printf(bio, " Error\n"); |
| 2000 | } | 1860 | } else { |
| 2001 | else | ||
| 2002 | { | ||
| 2003 | BIO_printf(bio, " Keying material: "); | 1861 | BIO_printf(bio, " Keying material: "); |
| 2004 | for (i=0; i<keymatexportlen; i++) | 1862 | for (i = 0; i < keymatexportlen; i++) |
| 2005 | BIO_printf(bio, "%02X", | 1863 | BIO_printf(bio, "%02X", |
| 2006 | exportedkeymat[i]); | 1864 | exportedkeymat[i]); |
| 2007 | BIO_printf(bio, "\n"); | 1865 | BIO_printf(bio, "\n"); |
| 2008 | } | ||
| 2009 | free(exportedkeymat); | ||
| 2010 | } | 1866 | } |
| 1867 | free(exportedkeymat); | ||
| 2011 | } | 1868 | } |
| 2012 | BIO_printf(bio,"---\n"); | 1869 | } |
| 1870 | BIO_printf(bio, "---\n"); | ||
| 2013 | if (peer != NULL) | 1871 | if (peer != NULL) |
| 2014 | X509_free(peer); | 1872 | X509_free(peer); |
| 2015 | /* flush, or debugging output gets mixed with http response */ | 1873 | /* flush, or debugging output gets mixed with http response */ |
| 2016 | (void)BIO_flush(bio); | 1874 | (void) BIO_flush(bio); |
| 2017 | } | 1875 | } |
| 2018 | 1876 | ||
| 2019 | #ifndef OPENSSL_NO_TLSEXT | 1877 | #ifndef OPENSSL_NO_TLSEXT |
| 2020 | 1878 | ||
| 2021 | static int ocsp_resp_cb(SSL *s, void *arg) | 1879 | static int |
| 2022 | { | 1880 | ocsp_resp_cb(SSL * s, void *arg) |
| 1881 | { | ||
| 2023 | const unsigned char *p; | 1882 | const unsigned char *p; |
| 2024 | int len; | 1883 | int len; |
| 2025 | OCSP_RESPONSE *rsp; | 1884 | OCSP_RESPONSE *rsp; |
| 2026 | len = SSL_get_tlsext_status_ocsp_resp(s, &p); | 1885 | len = SSL_get_tlsext_status_ocsp_resp(s, &p); |
| 2027 | BIO_puts(arg, "OCSP response: "); | 1886 | BIO_puts(arg, "OCSP response: "); |
| 2028 | if (!p) | 1887 | if (!p) { |
| 2029 | { | ||
| 2030 | BIO_puts(arg, "no response sent\n"); | 1888 | BIO_puts(arg, "no response sent\n"); |
| 2031 | return 1; | 1889 | return 1; |
| 2032 | } | 1890 | } |
| 2033 | rsp = d2i_OCSP_RESPONSE(NULL, &p, len); | 1891 | rsp = d2i_OCSP_RESPONSE(NULL, &p, len); |
| 2034 | if (!rsp) | 1892 | if (!rsp) { |
| 2035 | { | ||
| 2036 | BIO_puts(arg, "response parse error\n"); | 1893 | BIO_puts(arg, "response parse error\n"); |
| 2037 | BIO_dump_indent(arg, (char *)p, len, 4); | 1894 | BIO_dump_indent(arg, (char *) p, len, 4); |
| 2038 | return 0; | 1895 | return 0; |
| 2039 | } | 1896 | } |
| 2040 | BIO_puts(arg, "\n======================================\n"); | 1897 | BIO_puts(arg, "\n======================================\n"); |
| 2041 | OCSP_RESPONSE_print(arg, rsp, 0); | 1898 | OCSP_RESPONSE_print(arg, rsp, 0); |
| 2042 | BIO_puts(arg, "======================================\n"); | 1899 | BIO_puts(arg, "======================================\n"); |
| 2043 | OCSP_RESPONSE_free(rsp); | 1900 | OCSP_RESPONSE_free(rsp); |
| 2044 | return 1; | 1901 | return 1; |
| 2045 | } | 1902 | } |
| 2046 | 1903 | ||
| 2047 | #endif | 1904 | #endif |
diff --git a/src/lib/libssl/src/apps/s_server.c b/src/lib/libssl/src/apps/s_server.c index 7309f740e4..fb44573854 100644 --- a/src/lib/libssl/src/apps/s_server.c +++ b/src/lib/libssl/src/apps/s_server.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written |
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). |
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. |
| 8 | * | 8 | * |
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as |
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions |
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, |
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation |
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms |
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). |
| 15 | * | 15 | * |
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in |
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. |
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution |
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. |
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or |
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. |
| 22 | * | 22 | * |
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without |
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions |
| 25 | * are met: | 25 | * are met: |
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" |
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library |
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). |
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from |
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: |
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" |
| 40 | * | 40 | * |
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. |
| 52 | * | 52 | * |
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or |
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be |
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence |
| @@ -63,7 +63,7 @@ | |||
| 63 | * are met: | 63 | * are met: |
| 64 | * | 64 | * |
| 65 | * 1. Redistributions of source code must retain the above copyright | 65 | * 1. Redistributions of source code must retain the above copyright |
| 66 | * notice, this list of conditions and the following disclaimer. | 66 | * notice, this list of conditions and the following disclaimer. |
| 67 | * | 67 | * |
| 68 | * 2. Redistributions in binary form must reproduce the above copyright | 68 | * 2. Redistributions in binary form must reproduce the above copyright |
| 69 | * notice, this list of conditions and the following disclaimer in | 69 | * notice, this list of conditions and the following disclaimer in |
| @@ -110,7 +110,7 @@ | |||
| 110 | */ | 110 | */ |
| 111 | /* ==================================================================== | 111 | /* ==================================================================== |
| 112 | * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. | 112 | * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. |
| 113 | * ECC cipher suite support in OpenSSL originally developed by | 113 | * ECC cipher suite support in OpenSSL originally developed by |
| 114 | * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. | 114 | * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. |
| 115 | */ | 115 | */ |
| 116 | /* ==================================================================== | 116 | /* ==================================================================== |
| @@ -184,16 +184,17 @@ | |||
| 184 | 184 | ||
| 185 | 185 | ||
| 186 | #ifndef OPENSSL_NO_RSA | 186 | #ifndef OPENSSL_NO_RSA |
| 187 | static RSA *tmp_rsa_cb(SSL *s, int is_export, int keylength); | 187 | static RSA *tmp_rsa_cb(SSL * s, int is_export, int keylength); |
| 188 | #endif | 188 | #endif |
| 189 | static int sv_body(char *hostname, int s, unsigned char *context); | 189 | static int sv_body(char *hostname, int s, unsigned char *context); |
| 190 | static int www_body(char *hostname, int s, unsigned char *context); | 190 | static int www_body(char *hostname, int s, unsigned char *context); |
| 191 | static void close_accept_socket(void ); | 191 | static void close_accept_socket(void); |
| 192 | static void sv_usage(void); | 192 | static void sv_usage(void); |
| 193 | static int init_ssl_connection(SSL *s); | 193 | static int init_ssl_connection(SSL * s); |
| 194 | static void print_stats(BIO *bp,SSL_CTX *ctx); | 194 | static void print_stats(BIO * bp, SSL_CTX * ctx); |
| 195 | static int generate_session_id(const SSL *ssl, unsigned char *id, | 195 | static int |
| 196 | unsigned int *id_len); | 196 | generate_session_id(const SSL * ssl, unsigned char *id, |
| 197 | unsigned int *id_len); | ||
| 197 | #ifndef OPENSSL_NO_DH | 198 | #ifndef OPENSSL_NO_DH |
| 198 | static DH *load_dh_param(const char *dhfile); | 199 | static DH *load_dh_param(const char *dhfile); |
| 199 | static DH *get_dh512(void); | 200 | static DH *get_dh512(void); |
| @@ -202,29 +203,31 @@ static DH *get_dh512(void); | |||
| 202 | static void s_server_init(void); | 203 | static void s_server_init(void); |
| 203 | 204 | ||
| 204 | #ifndef OPENSSL_NO_DH | 205 | #ifndef OPENSSL_NO_DH |
| 205 | static unsigned char dh512_p[]={ | 206 | static unsigned char dh512_p[] = { |
| 206 | 0xDA,0x58,0x3C,0x16,0xD9,0x85,0x22,0x89,0xD0,0xE4,0xAF,0x75, | 207 | 0xDA, 0x58, 0x3C, 0x16, 0xD9, 0x85, 0x22, 0x89, 0xD0, 0xE4, 0xAF, 0x75, |
| 207 | 0x6F,0x4C,0xCA,0x92,0xDD,0x4B,0xE5,0x33,0xB8,0x04,0xFB,0x0F, | 208 | 0x6F, 0x4C, 0xCA, 0x92, 0xDD, 0x4B, 0xE5, 0x33, 0xB8, 0x04, 0xFB, 0x0F, |
| 208 | 0xED,0x94,0xEF,0x9C,0x8A,0x44,0x03,0xED,0x57,0x46,0x50,0xD3, | 209 | 0xED, 0x94, 0xEF, 0x9C, 0x8A, 0x44, 0x03, 0xED, 0x57, 0x46, 0x50, 0xD3, |
| 209 | 0x69,0x99,0xDB,0x29,0xD7,0x76,0x27,0x6B,0xA2,0xD3,0xD4,0x12, | 210 | 0x69, 0x99, 0xDB, 0x29, 0xD7, 0x76, 0x27, 0x6B, 0xA2, 0xD3, 0xD4, 0x12, |
| 210 | 0xE2,0x18,0xF4,0xDD,0x1E,0x08,0x4C,0xF6,0xD8,0x00,0x3E,0x7C, | 211 | 0xE2, 0x18, 0xF4, 0xDD, 0x1E, 0x08, 0x4C, 0xF6, 0xD8, 0x00, 0x3E, 0x7C, |
| 211 | 0x47,0x74,0xE8,0x33, | 212 | 0x47, 0x74, 0xE8, 0x33, |
| 212 | }; | 213 | }; |
| 213 | static unsigned char dh512_g[]={ | 214 | static unsigned char dh512_g[] = { |
| 214 | 0x02, | 215 | 0x02, |
| 215 | }; | 216 | }; |
| 216 | 217 | ||
| 217 | static DH *get_dh512(void) | 218 | static DH * |
| 218 | { | 219 | get_dh512(void) |
| 219 | DH *dh=NULL; | 220 | { |
| 221 | DH *dh = NULL; | ||
| 220 | 222 | ||
| 221 | if ((dh=DH_new()) == NULL) return(NULL); | 223 | if ((dh = DH_new()) == NULL) |
| 222 | dh->p=BN_bin2bn(dh512_p,sizeof(dh512_p),NULL); | 224 | return (NULL); |
| 223 | dh->g=BN_bin2bn(dh512_g,sizeof(dh512_g),NULL); | 225 | dh->p = BN_bin2bn(dh512_p, sizeof(dh512_p), NULL); |
| 226 | dh->g = BN_bin2bn(dh512_g, sizeof(dh512_g), NULL); | ||
| 224 | if ((dh->p == NULL) || (dh->g == NULL)) | 227 | if ((dh->p == NULL) || (dh->g == NULL)) |
| 225 | return(NULL); | 228 | return (NULL); |
| 226 | return(dh); | 229 | return (dh); |
| 227 | } | 230 | } |
| 228 | #endif | 231 | #endif |
| 229 | 232 | ||
| 230 | 233 | ||
| @@ -232,8 +235,8 @@ static DH *get_dh512(void) | |||
| 232 | 235 | ||
| 233 | #undef BUFSIZZ | 236 | #undef BUFSIZZ |
| 234 | #define BUFSIZZ 16*1024 | 237 | #define BUFSIZZ 16*1024 |
| 235 | static int bufsize=BUFSIZZ; | 238 | static int bufsize = BUFSIZZ; |
| 236 | static int accept_socket= -1; | 239 | static int accept_socket = -1; |
| 237 | 240 | ||
| 238 | #define TEST_CERT "server.pem" | 241 | #define TEST_CERT "server.pem" |
| 239 | #ifndef OPENSSL_NO_TLSEXT | 242 | #ifndef OPENSSL_NO_TLSEXT |
| @@ -244,43 +247,43 @@ static int accept_socket= -1; | |||
| 244 | 247 | ||
| 245 | extern int verify_depth, verify_return_error; | 248 | extern int verify_depth, verify_return_error; |
| 246 | 249 | ||
| 247 | static char *cipher=NULL; | 250 | static char *cipher = NULL; |
| 248 | static int s_server_verify=SSL_VERIFY_NONE; | 251 | static int s_server_verify = SSL_VERIFY_NONE; |
| 249 | static int s_server_session_id_context = 1; /* anything will do */ | 252 | static int s_server_session_id_context = 1; /* anything will do */ |
| 250 | static const char *s_cert_file=TEST_CERT,*s_key_file=NULL; | 253 | static const char *s_cert_file = TEST_CERT, *s_key_file = NULL; |
| 251 | #ifndef OPENSSL_NO_TLSEXT | 254 | #ifndef OPENSSL_NO_TLSEXT |
| 252 | static const char *s_cert_file2=TEST_CERT2,*s_key_file2=NULL; | 255 | static const char *s_cert_file2 = TEST_CERT2, *s_key_file2 = NULL; |
| 253 | #endif | 256 | #endif |
| 254 | static char *s_dcert_file=NULL,*s_dkey_file=NULL; | 257 | static char *s_dcert_file = NULL, *s_dkey_file = NULL; |
| 255 | #ifdef FIONBIO | 258 | #ifdef FIONBIO |
| 256 | static int s_nbio=0; | 259 | static int s_nbio = 0; |
| 257 | #endif | 260 | #endif |
| 258 | static int s_nbio_test=0; | 261 | static int s_nbio_test = 0; |
| 259 | int s_crlf=0; | 262 | int s_crlf = 0; |
| 260 | static SSL_CTX *ctx=NULL; | 263 | static SSL_CTX *ctx = NULL; |
| 261 | #ifndef OPENSSL_NO_TLSEXT | 264 | #ifndef OPENSSL_NO_TLSEXT |
| 262 | static SSL_CTX *ctx2=NULL; | 265 | static SSL_CTX *ctx2 = NULL; |
| 263 | #endif | 266 | #endif |
| 264 | static int www=0; | 267 | static int www = 0; |
| 265 | 268 | ||
| 266 | static BIO *bio_s_out=NULL; | 269 | static BIO *bio_s_out = NULL; |
| 267 | static int s_debug=0; | 270 | static int s_debug = 0; |
| 268 | #ifndef OPENSSL_NO_TLSEXT | 271 | #ifndef OPENSSL_NO_TLSEXT |
| 269 | static int s_tlsextdebug=0; | 272 | static int s_tlsextdebug = 0; |
| 270 | static int s_tlsextstatus=0; | 273 | static int s_tlsextstatus = 0; |
| 271 | static int cert_status_cb(SSL *s, void *arg); | 274 | static int cert_status_cb(SSL * s, void *arg); |
| 272 | #endif | 275 | #endif |
| 273 | static int s_msg=0; | 276 | static int s_msg = 0; |
| 274 | static int s_quiet=0; | 277 | static int s_quiet = 0; |
| 275 | 278 | ||
| 276 | static char *keymatexportlabel=NULL; | 279 | static char *keymatexportlabel = NULL; |
| 277 | static int keymatexportlen=20; | 280 | static int keymatexportlen = 20; |
| 278 | 281 | ||
| 279 | static int hack=0; | 282 | static int hack = 0; |
| 280 | #ifndef OPENSSL_NO_ENGINE | 283 | #ifndef OPENSSL_NO_ENGINE |
| 281 | static char *engine_id=NULL; | 284 | static char *engine_id = NULL; |
| 282 | #endif | 285 | #endif |
| 283 | static const char *session_id_prefix=NULL; | 286 | static const char *session_id_prefix = NULL; |
| 284 | 287 | ||
| 285 | static int enable_timeouts = 0; | 288 | static int enable_timeouts = 0; |
| 286 | static long socket_mtu; | 289 | static long socket_mtu; |
| @@ -290,303 +293,296 @@ static int cert_chain = 0; | |||
| 290 | 293 | ||
| 291 | 294 | ||
| 292 | #ifndef OPENSSL_NO_PSK | 295 | #ifndef OPENSSL_NO_PSK |
| 293 | static char *psk_identity="Client_identity"; | 296 | static char *psk_identity = "Client_identity"; |
| 294 | char *psk_key=NULL; /* by default PSK is not used */ | 297 | char *psk_key = NULL; /* by default PSK is not used */ |
| 295 | 298 | ||
| 296 | static unsigned int psk_server_cb(SSL *ssl, const char *identity, | 299 | static unsigned int |
| 297 | unsigned char *psk, unsigned int max_psk_len) | 300 | psk_server_cb(SSL * ssl, const char *identity, |
| 298 | { | 301 | unsigned char *psk, unsigned int max_psk_len) |
| 302 | { | ||
| 299 | unsigned int psk_len = 0; | 303 | unsigned int psk_len = 0; |
| 300 | int ret; | 304 | int ret; |
| 301 | BIGNUM *bn = NULL; | 305 | BIGNUM *bn = NULL; |
| 302 | 306 | ||
| 303 | if (s_debug) | 307 | if (s_debug) |
| 304 | BIO_printf(bio_s_out,"psk_server_cb\n"); | 308 | BIO_printf(bio_s_out, "psk_server_cb\n"); |
| 305 | if (!identity) | 309 | if (!identity) { |
| 306 | { | 310 | BIO_printf(bio_err, "Error: client did not send PSK identity\n"); |
| 307 | BIO_printf(bio_err,"Error: client did not send PSK identity\n"); | ||
| 308 | goto out_err; | 311 | goto out_err; |
| 309 | } | 312 | } |
| 310 | if (s_debug) | 313 | if (s_debug) |
| 311 | BIO_printf(bio_s_out,"identity_len=%d identity=%s\n", | 314 | BIO_printf(bio_s_out, "identity_len=%d identity=%s\n", |
| 312 | identity ? (int)strlen(identity) : 0, identity); | 315 | identity ? (int) strlen(identity) : 0, identity); |
| 313 | 316 | ||
| 314 | /* here we could lookup the given identity e.g. from a database */ | 317 | /* here we could lookup the given identity e.g. from a database */ |
| 315 | if (strcmp(identity, psk_identity) != 0) | 318 | if (strcmp(identity, psk_identity) != 0) { |
| 316 | { | 319 | BIO_printf(bio_s_out, "PSK error: client identity not found" |
| 317 | BIO_printf(bio_s_out, "PSK error: client identity not found" | 320 | " (got '%s' expected '%s')\n", identity, |
| 318 | " (got '%s' expected '%s')\n", identity, | 321 | psk_identity); |
| 319 | psk_identity); | ||
| 320 | goto out_err; | 322 | goto out_err; |
| 321 | } | 323 | } |
| 322 | if (s_debug) | 324 | if (s_debug) |
| 323 | BIO_printf(bio_s_out, "PSK client identity found\n"); | 325 | BIO_printf(bio_s_out, "PSK client identity found\n"); |
| 324 | 326 | ||
| 325 | /* convert the PSK key to binary */ | 327 | /* convert the PSK key to binary */ |
| 326 | ret = BN_hex2bn(&bn, psk_key); | 328 | ret = BN_hex2bn(&bn, psk_key); |
| 327 | if (!ret) | 329 | if (!ret) { |
| 328 | { | 330 | BIO_printf(bio_err, "Could not convert PSK key '%s' to BIGNUM\n", psk_key); |
| 329 | BIO_printf(bio_err,"Could not convert PSK key '%s' to BIGNUM\n", psk_key); | ||
| 330 | if (bn) | 331 | if (bn) |
| 331 | BN_free(bn); | 332 | BN_free(bn); |
| 332 | return 0; | 333 | return 0; |
| 333 | } | 334 | } |
| 334 | if (BN_num_bytes(bn) > (int)max_psk_len) | 335 | if (BN_num_bytes(bn) > (int) max_psk_len) { |
| 335 | { | 336 | BIO_printf(bio_err, "psk buffer of callback is too small (%d) for key (%d)\n", |
| 336 | BIO_printf(bio_err,"psk buffer of callback is too small (%d) for key (%d)\n", | 337 | max_psk_len, BN_num_bytes(bn)); |
| 337 | max_psk_len, BN_num_bytes(bn)); | ||
| 338 | BN_free(bn); | 338 | BN_free(bn); |
| 339 | return 0; | 339 | return 0; |
| 340 | } | 340 | } |
| 341 | |||
| 342 | ret = BN_bn2bin(bn, psk); | 341 | ret = BN_bn2bin(bn, psk); |
| 343 | BN_free(bn); | 342 | BN_free(bn); |
| 344 | 343 | ||
| 345 | if (ret < 0) | 344 | if (ret < 0) |
| 346 | goto out_err; | 345 | goto out_err; |
| 347 | psk_len = (unsigned int)ret; | 346 | psk_len = (unsigned int) ret; |
| 348 | 347 | ||
| 349 | if (s_debug) | 348 | if (s_debug) |
| 350 | BIO_printf(bio_s_out, "fetched PSK len=%d\n", psk_len); | 349 | BIO_printf(bio_s_out, "fetched PSK len=%d\n", psk_len); |
| 351 | return psk_len; | 350 | return psk_len; |
| 352 | out_err: | 351 | out_err: |
| 353 | if (s_debug) | 352 | if (s_debug) |
| 354 | BIO_printf(bio_err, "Error in PSK server callback\n"); | 353 | BIO_printf(bio_err, "Error in PSK server callback\n"); |
| 355 | return 0; | 354 | return 0; |
| 356 | } | 355 | } |
| 357 | #endif | 356 | #endif |
| 358 | 357 | ||
| 359 | #ifndef OPENSSL_NO_SRP | 358 | #ifndef OPENSSL_NO_SRP |
| 360 | /* This is a context that we pass to callbacks */ | 359 | /* This is a context that we pass to callbacks */ |
| 361 | typedef struct srpsrvparm_st | 360 | typedef struct srpsrvparm_st { |
| 362 | { | ||
| 363 | char *login; | 361 | char *login; |
| 364 | SRP_VBASE *vb; | 362 | SRP_VBASE *vb; |
| 365 | SRP_user_pwd *user; | 363 | SRP_user_pwd *user; |
| 366 | } srpsrvparm; | 364 | } srpsrvparm; |
| 367 | 365 | ||
| 368 | /* This callback pretends to require some asynchronous logic in order to obtain | 366 | /* This callback pretends to require some asynchronous logic in order to obtain |
| 369 | a verifier. When the callback is called for a new connection we return | 367 | a verifier. When the callback is called for a new connection we return |
| 370 | with a negative value. This will provoke the accept etc to return with | 368 | with a negative value. This will provoke the accept etc to return with |
| 371 | an LOOKUP_X509. The main logic of the reinvokes the suspended call | 369 | an LOOKUP_X509. The main logic of the reinvokes the suspended call |
| 372 | (which would normally occur after a worker has finished) and we | 370 | (which would normally occur after a worker has finished) and we |
| 373 | set the user parameters. | 371 | set the user parameters. |
| 374 | */ | 372 | */ |
| 375 | static int ssl_srp_server_param_cb(SSL *s, int *ad, void *arg) | 373 | static int |
| 376 | { | 374 | ssl_srp_server_param_cb(SSL * s, int *ad, void *arg) |
| 377 | srpsrvparm *p = (srpsrvparm *)arg; | 375 | { |
| 378 | if (p->login == NULL && p->user == NULL ) | 376 | srpsrvparm *p = (srpsrvparm *) arg; |
| 379 | { | 377 | if (p->login == NULL && p->user == NULL) { |
| 380 | p->login = SSL_get_srp_username(s); | 378 | p->login = SSL_get_srp_username(s); |
| 381 | BIO_printf(bio_err, "SRP username = \"%s\"\n", p->login); | 379 | BIO_printf(bio_err, "SRP username = \"%s\"\n", p->login); |
| 382 | return (-1) ; | 380 | return (-1); |
| 383 | } | 381 | } |
| 384 | 382 | if (p->user == NULL) { | |
| 385 | if (p->user == NULL) | ||
| 386 | { | ||
| 387 | BIO_printf(bio_err, "User %s doesn't exist\n", p->login); | 383 | BIO_printf(bio_err, "User %s doesn't exist\n", p->login); |
| 388 | return SSL3_AL_FATAL; | 384 | return SSL3_AL_FATAL; |
| 389 | } | 385 | } |
| 390 | if (SSL_set_srp_server_param(s, p->user->N, p->user->g, p->user->s, p->user->v, | 386 | if (SSL_set_srp_server_param(s, p->user->N, p->user->g, p->user->s, p->user->v, |
| 391 | p->user->info) < 0) | 387 | p->user->info) < 0) { |
| 392 | { | ||
| 393 | *ad = SSL_AD_INTERNAL_ERROR; | 388 | *ad = SSL_AD_INTERNAL_ERROR; |
| 394 | return SSL3_AL_FATAL; | 389 | return SSL3_AL_FATAL; |
| 395 | } | 390 | } |
| 396 | BIO_printf(bio_err, "SRP parameters set: username = \"%s\" info=\"%s\" \n", p->login,p->user->info); | 391 | BIO_printf(bio_err, "SRP parameters set: username = \"%s\" info=\"%s\" \n", p->login, p->user->info); |
| 397 | /* need to check whether there are memory leaks */ | 392 | /* need to check whether there are memory leaks */ |
| 398 | p->user = NULL; | 393 | p->user = NULL; |
| 399 | p->login = NULL; | 394 | p->login = NULL; |
| 400 | return SSL_ERROR_NONE; | 395 | return SSL_ERROR_NONE; |
| 401 | } | 396 | } |
| 402 | 397 | ||
| 403 | #endif | 398 | #endif |
| 404 | 399 | ||
| 405 | static void s_server_init(void) | 400 | static void |
| 406 | { | 401 | s_server_init(void) |
| 407 | accept_socket=-1; | 402 | { |
| 408 | cipher=NULL; | 403 | accept_socket = -1; |
| 409 | s_server_verify=SSL_VERIFY_NONE; | 404 | cipher = NULL; |
| 410 | s_dcert_file=NULL; | 405 | s_server_verify = SSL_VERIFY_NONE; |
| 411 | s_dkey_file=NULL; | 406 | s_dcert_file = NULL; |
| 412 | s_cert_file=TEST_CERT; | 407 | s_dkey_file = NULL; |
| 413 | s_key_file=NULL; | 408 | s_cert_file = TEST_CERT; |
| 409 | s_key_file = NULL; | ||
| 414 | #ifndef OPENSSL_NO_TLSEXT | 410 | #ifndef OPENSSL_NO_TLSEXT |
| 415 | s_cert_file2=TEST_CERT2; | 411 | s_cert_file2 = TEST_CERT2; |
| 416 | s_key_file2=NULL; | 412 | s_key_file2 = NULL; |
| 417 | ctx2=NULL; | 413 | ctx2 = NULL; |
| 418 | #endif | 414 | #endif |
| 419 | #ifdef FIONBIO | 415 | #ifdef FIONBIO |
| 420 | s_nbio=0; | 416 | s_nbio = 0; |
| 421 | #endif | 417 | #endif |
| 422 | s_nbio_test=0; | 418 | s_nbio_test = 0; |
| 423 | ctx=NULL; | 419 | ctx = NULL; |
| 424 | www=0; | 420 | www = 0; |
| 425 | 421 | ||
| 426 | bio_s_out=NULL; | 422 | bio_s_out = NULL; |
| 427 | s_debug=0; | 423 | s_debug = 0; |
| 428 | s_msg=0; | 424 | s_msg = 0; |
| 429 | s_quiet=0; | 425 | s_quiet = 0; |
| 430 | hack=0; | 426 | hack = 0; |
| 431 | #ifndef OPENSSL_NO_ENGINE | 427 | #ifndef OPENSSL_NO_ENGINE |
| 432 | engine_id=NULL; | 428 | engine_id = NULL; |
| 433 | #endif | 429 | #endif |
| 434 | } | 430 | } |
| 435 | 431 | ||
| 436 | static void sv_usage(void) | 432 | static void |
| 437 | { | 433 | sv_usage(void) |
| 438 | BIO_printf(bio_err,"usage: s_server [args ...]\n"); | 434 | { |
| 439 | BIO_printf(bio_err,"\n"); | 435 | BIO_printf(bio_err, "usage: s_server [args ...]\n"); |
| 440 | BIO_printf(bio_err," -accept arg - port to accept on (default is %d)\n",PORT); | 436 | BIO_printf(bio_err, "\n"); |
| 441 | BIO_printf(bio_err," -context arg - set session ID context\n"); | 437 | BIO_printf(bio_err, " -accept arg - port to accept on (default is %d)\n", PORT); |
| 442 | BIO_printf(bio_err," -verify arg - turn on peer certificate verification\n"); | 438 | BIO_printf(bio_err, " -context arg - set session ID context\n"); |
| 443 | BIO_printf(bio_err," -Verify arg - turn on peer certificate verification, must have a cert.\n"); | 439 | BIO_printf(bio_err, " -verify arg - turn on peer certificate verification\n"); |
| 444 | BIO_printf(bio_err," -cert arg - certificate file to use\n"); | 440 | BIO_printf(bio_err, " -Verify arg - turn on peer certificate verification, must have a cert.\n"); |
| 445 | BIO_printf(bio_err," (default is %s)\n",TEST_CERT); | 441 | BIO_printf(bio_err, " -cert arg - certificate file to use\n"); |
| 446 | BIO_printf(bio_err," -crl_check - check the peer certificate has not been revoked by its CA.\n" \ | 442 | BIO_printf(bio_err, " (default is %s)\n", TEST_CERT); |
| 447 | " The CRL(s) are appended to the certificate file\n"); | 443 | BIO_printf(bio_err, " -crl_check - check the peer certificate has not been revoked by its CA.\n" \ |
| 448 | BIO_printf(bio_err," -crl_check_all - check the peer certificate has not been revoked by its CA\n" \ | 444 | " The CRL(s) are appended to the certificate file\n"); |
| 449 | " or any other CRL in the CA chain. CRL(s) are appened to the\n" \ | 445 | BIO_printf(bio_err, " -crl_check_all - check the peer certificate has not been revoked by its CA\n" \ |
| 450 | " the certificate file.\n"); | 446 | " or any other CRL in the CA chain. CRL(s) are appened to the\n" \ |
| 451 | BIO_printf(bio_err," -certform arg - certificate format (PEM or DER) PEM default\n"); | 447 | " the certificate file.\n"); |
| 452 | BIO_printf(bio_err," -key arg - Private Key file to use, in cert file if\n"); | 448 | BIO_printf(bio_err, " -certform arg - certificate format (PEM or DER) PEM default\n"); |
| 453 | BIO_printf(bio_err," not specified (default is %s)\n",TEST_CERT); | 449 | BIO_printf(bio_err, " -key arg - Private Key file to use, in cert file if\n"); |
| 454 | BIO_printf(bio_err," -keyform arg - key format (PEM, DER or ENGINE) PEM default\n"); | 450 | BIO_printf(bio_err, " not specified (default is %s)\n", TEST_CERT); |
| 455 | BIO_printf(bio_err," -pass arg - private key file pass phrase source\n"); | 451 | BIO_printf(bio_err, " -keyform arg - key format (PEM, DER or ENGINE) PEM default\n"); |
| 456 | BIO_printf(bio_err," -dcert arg - second certificate file to use (usually for DSA)\n"); | 452 | BIO_printf(bio_err, " -pass arg - private key file pass phrase source\n"); |
| 457 | BIO_printf(bio_err," -dcertform x - second certificate format (PEM or DER) PEM default\n"); | 453 | BIO_printf(bio_err, " -dcert arg - second certificate file to use (usually for DSA)\n"); |
| 458 | BIO_printf(bio_err," -dkey arg - second private key file to use (usually for DSA)\n"); | 454 | BIO_printf(bio_err, " -dcertform x - second certificate format (PEM or DER) PEM default\n"); |
| 459 | BIO_printf(bio_err," -dkeyform arg - second key format (PEM, DER or ENGINE) PEM default\n"); | 455 | BIO_printf(bio_err, " -dkey arg - second private key file to use (usually for DSA)\n"); |
| 460 | BIO_printf(bio_err," -dpass arg - second private key file pass phrase source\n"); | 456 | BIO_printf(bio_err, " -dkeyform arg - second key format (PEM, DER or ENGINE) PEM default\n"); |
| 461 | BIO_printf(bio_err," -dhparam arg - DH parameter file to use, in cert file if not specified\n"); | 457 | BIO_printf(bio_err, " -dpass arg - second private key file pass phrase source\n"); |
| 462 | BIO_printf(bio_err," or a default set of parameters is used\n"); | 458 | BIO_printf(bio_err, " -dhparam arg - DH parameter file to use, in cert file if not specified\n"); |
| 459 | BIO_printf(bio_err, " or a default set of parameters is used\n"); | ||
| 463 | #ifndef OPENSSL_NO_ECDH | 460 | #ifndef OPENSSL_NO_ECDH |
| 464 | BIO_printf(bio_err," -named_curve arg - Elliptic curve name to use for ephemeral ECDH keys.\n" \ | 461 | BIO_printf(bio_err, " -named_curve arg - Elliptic curve name to use for ephemeral ECDH keys.\n" \ |
| 465 | " Use \"openssl ecparam -list_curves\" for all names\n" \ | 462 | " Use \"openssl ecparam -list_curves\" for all names\n" \ |
| 466 | " (default is nistp256).\n"); | 463 | " (default is nistp256).\n"); |
| 467 | #endif | 464 | #endif |
| 468 | #ifdef FIONBIO | 465 | #ifdef FIONBIO |
| 469 | BIO_printf(bio_err," -nbio - Run with non-blocking IO\n"); | 466 | BIO_printf(bio_err, " -nbio - Run with non-blocking IO\n"); |
| 470 | #endif | 467 | #endif |
| 471 | BIO_printf(bio_err," -nbio_test - test with the non-blocking test bio\n"); | 468 | BIO_printf(bio_err, " -nbio_test - test with the non-blocking test bio\n"); |
| 472 | BIO_printf(bio_err," -crlf - convert LF from terminal into CRLF\n"); | 469 | BIO_printf(bio_err, " -crlf - convert LF from terminal into CRLF\n"); |
| 473 | BIO_printf(bio_err," -debug - Print more output\n"); | 470 | BIO_printf(bio_err, " -debug - Print more output\n"); |
| 474 | BIO_printf(bio_err," -msg - Show protocol messages\n"); | 471 | BIO_printf(bio_err, " -msg - Show protocol messages\n"); |
| 475 | BIO_printf(bio_err," -state - Print the SSL states\n"); | 472 | BIO_printf(bio_err, " -state - Print the SSL states\n"); |
| 476 | BIO_printf(bio_err," -CApath arg - PEM format directory of CA's\n"); | 473 | BIO_printf(bio_err, " -CApath arg - PEM format directory of CA's\n"); |
| 477 | BIO_printf(bio_err," -CAfile arg - PEM format file of CA's\n"); | 474 | BIO_printf(bio_err, " -CAfile arg - PEM format file of CA's\n"); |
| 478 | BIO_printf(bio_err," -nocert - Don't use any certificates (Anon-DH)\n"); | 475 | BIO_printf(bio_err, " -nocert - Don't use any certificates (Anon-DH)\n"); |
| 479 | BIO_printf(bio_err," -cipher arg - play with 'openssl ciphers' to see what goes here\n"); | 476 | BIO_printf(bio_err, " -cipher arg - play with 'openssl ciphers' to see what goes here\n"); |
| 480 | BIO_printf(bio_err," -serverpref - Use server's cipher preferences\n"); | 477 | BIO_printf(bio_err, " -serverpref - Use server's cipher preferences\n"); |
| 481 | BIO_printf(bio_err," -quiet - No server output\n"); | 478 | BIO_printf(bio_err, " -quiet - No server output\n"); |
| 482 | BIO_printf(bio_err," -no_tmp_rsa - Do not generate a tmp RSA key\n"); | 479 | BIO_printf(bio_err, " -no_tmp_rsa - Do not generate a tmp RSA key\n"); |
| 483 | #ifndef OPENSSL_NO_PSK | 480 | #ifndef OPENSSL_NO_PSK |
| 484 | BIO_printf(bio_err," -psk_hint arg - PSK identity hint to use\n"); | 481 | BIO_printf(bio_err, " -psk_hint arg - PSK identity hint to use\n"); |
| 485 | BIO_printf(bio_err," -psk arg - PSK in hex (without 0x)\n"); | 482 | BIO_printf(bio_err, " -psk arg - PSK in hex (without 0x)\n"); |
| 486 | # ifndef OPENSSL_NO_JPAKE | 483 | #ifndef OPENSSL_NO_JPAKE |
| 487 | BIO_printf(bio_err," -jpake arg - JPAKE secret to use\n"); | 484 | BIO_printf(bio_err, " -jpake arg - JPAKE secret to use\n"); |
| 488 | # endif | 485 | #endif |
| 489 | #endif | 486 | #endif |
| 490 | #ifndef OPENSSL_NO_SRP | 487 | #ifndef OPENSSL_NO_SRP |
| 491 | BIO_printf(bio_err," -srpvfile file - The verifier file for SRP\n"); | 488 | BIO_printf(bio_err, " -srpvfile file - The verifier file for SRP\n"); |
| 492 | BIO_printf(bio_err," -srpuserseed string - A seed string for a default user salt.\n"); | 489 | BIO_printf(bio_err, " -srpuserseed string - A seed string for a default user salt.\n"); |
| 493 | #endif | 490 | #endif |
| 494 | BIO_printf(bio_err," -ssl2 - Just talk SSLv2\n"); | 491 | BIO_printf(bio_err, " -ssl2 - Just talk SSLv2\n"); |
| 495 | BIO_printf(bio_err," -ssl3 - Just talk SSLv3\n"); | 492 | BIO_printf(bio_err, " -ssl3 - Just talk SSLv3\n"); |
| 496 | BIO_printf(bio_err," -tls1_2 - Just talk TLSv1.2\n"); | 493 | BIO_printf(bio_err, " -tls1_2 - Just talk TLSv1.2\n"); |
| 497 | BIO_printf(bio_err," -tls1_1 - Just talk TLSv1.1\n"); | 494 | BIO_printf(bio_err, " -tls1_1 - Just talk TLSv1.1\n"); |
| 498 | BIO_printf(bio_err," -tls1 - Just talk TLSv1\n"); | 495 | BIO_printf(bio_err, " -tls1 - Just talk TLSv1\n"); |
| 499 | BIO_printf(bio_err," -dtls1 - Just talk DTLSv1\n"); | 496 | BIO_printf(bio_err, " -dtls1 - Just talk DTLSv1\n"); |
| 500 | BIO_printf(bio_err," -timeout - Enable timeouts\n"); | 497 | BIO_printf(bio_err, " -timeout - Enable timeouts\n"); |
| 501 | BIO_printf(bio_err," -mtu - Set link layer MTU\n"); | 498 | BIO_printf(bio_err, " -mtu - Set link layer MTU\n"); |
| 502 | BIO_printf(bio_err," -chain - Read a certificate chain\n"); | 499 | BIO_printf(bio_err, " -chain - Read a certificate chain\n"); |
| 503 | BIO_printf(bio_err," -no_ssl2 - Just disable SSLv2\n"); | 500 | BIO_printf(bio_err, " -no_ssl2 - Just disable SSLv2\n"); |
| 504 | BIO_printf(bio_err," -no_ssl3 - Just disable SSLv3\n"); | 501 | BIO_printf(bio_err, " -no_ssl3 - Just disable SSLv3\n"); |
| 505 | BIO_printf(bio_err," -no_tls1 - Just disable TLSv1\n"); | 502 | BIO_printf(bio_err, " -no_tls1 - Just disable TLSv1\n"); |
| 506 | BIO_printf(bio_err," -no_tls1_1 - Just disable TLSv1.1\n"); | 503 | BIO_printf(bio_err, " -no_tls1_1 - Just disable TLSv1.1\n"); |
| 507 | BIO_printf(bio_err," -no_tls1_2 - Just disable TLSv1.2\n"); | 504 | BIO_printf(bio_err, " -no_tls1_2 - Just disable TLSv1.2\n"); |
| 508 | #ifndef OPENSSL_NO_DH | 505 | #ifndef OPENSSL_NO_DH |
| 509 | BIO_printf(bio_err," -no_dhe - Disable ephemeral DH\n"); | 506 | BIO_printf(bio_err, " -no_dhe - Disable ephemeral DH\n"); |
| 510 | #endif | 507 | #endif |
| 511 | #ifndef OPENSSL_NO_ECDH | 508 | #ifndef OPENSSL_NO_ECDH |
| 512 | BIO_printf(bio_err," -no_ecdhe - Disable ephemeral ECDH\n"); | 509 | BIO_printf(bio_err, " -no_ecdhe - Disable ephemeral ECDH\n"); |
| 513 | #endif | 510 | #endif |
| 514 | BIO_printf(bio_err," -bugs - Turn on SSL bug compatibility\n"); | 511 | BIO_printf(bio_err, " -bugs - Turn on SSL bug compatibility\n"); |
| 515 | BIO_printf(bio_err," -www - Respond to a 'GET /' with a status page\n"); | 512 | BIO_printf(bio_err, " -www - Respond to a 'GET /' with a status page\n"); |
| 516 | BIO_printf(bio_err," -WWW - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>\n"); | 513 | BIO_printf(bio_err, " -WWW - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>\n"); |
| 517 | BIO_printf(bio_err," -HTTP - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>\n"); | 514 | BIO_printf(bio_err, " -HTTP - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>\n"); |
| 518 | BIO_printf(bio_err," with the assumption it contains a complete HTTP response.\n"); | 515 | BIO_printf(bio_err, " with the assumption it contains a complete HTTP response.\n"); |
| 519 | #ifndef OPENSSL_NO_ENGINE | 516 | #ifndef OPENSSL_NO_ENGINE |
| 520 | BIO_printf(bio_err," -engine id - Initialise and use the specified engine\n"); | 517 | BIO_printf(bio_err, " -engine id - Initialise and use the specified engine\n"); |
| 521 | #endif | 518 | #endif |
| 522 | BIO_printf(bio_err," -id_prefix arg - Generate SSL/TLS session IDs prefixed by 'arg'\n"); | 519 | BIO_printf(bio_err, " -id_prefix arg - Generate SSL/TLS session IDs prefixed by 'arg'\n"); |
| 523 | BIO_printf(bio_err," -rand file%cfile%c...\n", ':', ':'); | 520 | BIO_printf(bio_err, " -rand file%cfile%c...\n", ':', ':'); |
| 524 | #ifndef OPENSSL_NO_TLSEXT | 521 | #ifndef OPENSSL_NO_TLSEXT |
| 525 | BIO_printf(bio_err," -servername host - servername for HostName TLS extension\n"); | 522 | BIO_printf(bio_err, " -servername host - servername for HostName TLS extension\n"); |
| 526 | BIO_printf(bio_err," -servername_fatal - on mismatch send fatal alert (default warning alert)\n"); | 523 | BIO_printf(bio_err, " -servername_fatal - on mismatch send fatal alert (default warning alert)\n"); |
| 527 | BIO_printf(bio_err," -cert2 arg - certificate file to use for servername\n"); | 524 | BIO_printf(bio_err, " -cert2 arg - certificate file to use for servername\n"); |
| 528 | BIO_printf(bio_err," (default is %s)\n",TEST_CERT2); | 525 | BIO_printf(bio_err, " (default is %s)\n", TEST_CERT2); |
| 529 | BIO_printf(bio_err," -key2 arg - Private Key file to use for servername, in cert file if\n"); | 526 | BIO_printf(bio_err, " -key2 arg - Private Key file to use for servername, in cert file if\n"); |
| 530 | BIO_printf(bio_err," not specified (default is %s)\n",TEST_CERT2); | 527 | BIO_printf(bio_err, " not specified (default is %s)\n", TEST_CERT2); |
| 531 | BIO_printf(bio_err," -tlsextdebug - hex dump of all TLS extensions received\n"); | 528 | BIO_printf(bio_err, " -tlsextdebug - hex dump of all TLS extensions received\n"); |
| 532 | BIO_printf(bio_err," -no_ticket - disable use of RFC4507bis session tickets\n"); | 529 | BIO_printf(bio_err, " -no_ticket - disable use of RFC4507bis session tickets\n"); |
| 533 | BIO_printf(bio_err," -legacy_renegotiation - enable use of legacy renegotiation (dangerous)\n"); | 530 | BIO_printf(bio_err, " -legacy_renegotiation - enable use of legacy renegotiation (dangerous)\n"); |
| 534 | # ifndef OPENSSL_NO_NEXTPROTONEG | 531 | #ifndef OPENSSL_NO_NEXTPROTONEG |
| 535 | BIO_printf(bio_err," -nextprotoneg arg - set the advertised protocols for the NPN extension (comma-separated list)\n"); | 532 | BIO_printf(bio_err, " -nextprotoneg arg - set the advertised protocols for the NPN extension (comma-separated list)\n"); |
| 536 | # endif | 533 | #endif |
| 537 | # ifndef OPENSSL_NO_SRTP | 534 | #ifndef OPENSSL_NO_SRTP |
| 538 | BIO_printf(bio_err," -use_srtp profiles - Offer SRTP key management with a colon-separated profile list\n"); | 535 | BIO_printf(bio_err, " -use_srtp profiles - Offer SRTP key management with a colon-separated profile list\n"); |
| 539 | # endif | 536 | #endif |
| 540 | #endif | 537 | #endif |
| 541 | BIO_printf(bio_err," -keymatexport label - Export keying material using label\n"); | 538 | BIO_printf(bio_err, " -keymatexport label - Export keying material using label\n"); |
| 542 | BIO_printf(bio_err," -keymatexportlen len - Export len bytes of keying material (default 20)\n"); | 539 | BIO_printf(bio_err, " -keymatexportlen len - Export len bytes of keying material (default 20)\n"); |
| 543 | } | 540 | } |
| 544 | 541 | ||
| 545 | static int local_argc=0; | 542 | static int local_argc = 0; |
| 546 | static char **local_argv; | 543 | static char **local_argv; |
| 547 | 544 | ||
| 548 | #ifndef OPENSSL_NO_TLSEXT | 545 | #ifndef OPENSSL_NO_TLSEXT |
| 549 | 546 | ||
| 550 | /* This is a context that we pass to callbacks */ | 547 | /* This is a context that we pass to callbacks */ |
| 551 | typedef struct tlsextctx_st { | 548 | typedef struct tlsextctx_st { |
| 552 | char * servername; | 549 | char *servername; |
| 553 | BIO * biodebug; | 550 | BIO *biodebug; |
| 554 | int extension_error; | 551 | int extension_error; |
| 555 | } tlsextctx; | 552 | } tlsextctx; |
| 556 | 553 | ||
| 557 | 554 | ||
| 558 | static int ssl_servername_cb(SSL *s, int *ad, void *arg) | 555 | static int |
| 559 | { | 556 | ssl_servername_cb(SSL * s, int *ad, void *arg) |
| 560 | tlsextctx * p = (tlsextctx *) arg; | 557 | { |
| 561 | const char * servername = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name); | 558 | tlsextctx *p = (tlsextctx *) arg; |
| 562 | if (servername && p->biodebug) | 559 | const char *servername = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name); |
| 563 | BIO_printf(p->biodebug,"Hostname in TLS extension: \"%s\"\n",servername); | 560 | if (servername && p->biodebug) |
| 564 | 561 | BIO_printf(p->biodebug, "Hostname in TLS extension: \"%s\"\n", servername); | |
| 562 | |||
| 565 | if (!p->servername) | 563 | if (!p->servername) |
| 566 | return SSL_TLSEXT_ERR_NOACK; | 564 | return SSL_TLSEXT_ERR_NOACK; |
| 567 | 565 | ||
| 568 | if (servername) | 566 | if (servername) { |
| 569 | { | 567 | if (strcmp(servername, p->servername)) |
| 570 | if (strcmp(servername,p->servername)) | ||
| 571 | return p->extension_error; | 568 | return p->extension_error; |
| 572 | if (ctx2) | 569 | if (ctx2) { |
| 573 | { | 570 | BIO_printf(p->biodebug, "Switching server context.\n"); |
| 574 | BIO_printf(p->biodebug,"Switching server context.\n"); | 571 | SSL_set_SSL_CTX(s, ctx2); |
| 575 | SSL_set_SSL_CTX(s,ctx2); | ||
| 576 | } | ||
| 577 | } | 572 | } |
| 573 | } | ||
| 578 | return SSL_TLSEXT_ERR_OK; | 574 | return SSL_TLSEXT_ERR_OK; |
| 579 | } | 575 | } |
| 580 | 576 | ||
| 581 | /* Structure passed to cert status callback */ | 577 | /* Structure passed to cert status callback */ |
| 582 | 578 | ||
| 583 | typedef struct tlsextstatusctx_st { | 579 | typedef struct tlsextstatusctx_st { |
| 584 | /* Default responder to use */ | 580 | /* Default responder to use */ |
| 585 | char *host, *path, *port; | 581 | char *host, *path, *port; |
| 586 | int use_ssl; | 582 | int use_ssl; |
| 587 | int timeout; | 583 | int timeout; |
| 588 | BIO *err; | 584 | BIO *err; |
| 589 | int verbose; | 585 | int verbose; |
| 590 | } tlsextstatusctx; | 586 | } tlsextstatusctx; |
| 591 | 587 | ||
| 592 | static tlsextstatusctx tlscstatp = {NULL, NULL, NULL, 0, -1, NULL, 0}; | 588 | static tlsextstatusctx tlscstatp = {NULL, NULL, NULL, 0, -1, NULL, 0}; |
| @@ -602,70 +598,65 @@ static tlsextstatusctx tlscstatp = {NULL, NULL, NULL, 0, -1, NULL, 0}; | |||
| 602 | * considered "expired". | 598 | * considered "expired". |
| 603 | */ | 599 | */ |
| 604 | 600 | ||
| 605 | static int cert_status_cb(SSL *s, void *arg) | 601 | static int |
| 606 | { | 602 | cert_status_cb(SSL * s, void *arg) |
| 603 | { | ||
| 607 | tlsextstatusctx *srctx = arg; | 604 | tlsextstatusctx *srctx = arg; |
| 608 | BIO *err = srctx->err; | 605 | BIO *err = srctx->err; |
| 609 | char *host, *port, *path; | 606 | char *host, *port, *path; |
| 610 | int use_ssl; | 607 | int use_ssl; |
| 611 | unsigned char *rspder = NULL; | 608 | unsigned char *rspder = NULL; |
| 612 | int rspderlen; | 609 | int rspderlen; |
| 613 | STACK_OF(OPENSSL_STRING) *aia = NULL; | 610 | STACK_OF(OPENSSL_STRING) * aia = NULL; |
| 614 | X509 *x = NULL; | 611 | X509 *x = NULL; |
| 615 | X509_STORE_CTX inctx; | 612 | X509_STORE_CTX inctx; |
| 616 | X509_OBJECT obj; | 613 | X509_OBJECT obj; |
| 617 | OCSP_REQUEST *req = NULL; | 614 | OCSP_REQUEST *req = NULL; |
| 618 | OCSP_RESPONSE *resp = NULL; | 615 | OCSP_RESPONSE *resp = NULL; |
| 619 | OCSP_CERTID *id = NULL; | 616 | OCSP_CERTID *id = NULL; |
| 620 | STACK_OF(X509_EXTENSION) *exts; | 617 | STACK_OF(X509_EXTENSION) * exts; |
| 621 | int ret = SSL_TLSEXT_ERR_NOACK; | 618 | int ret = SSL_TLSEXT_ERR_NOACK; |
| 622 | int i; | 619 | int i; |
| 623 | #if 0 | 620 | #if 0 |
| 624 | STACK_OF(OCSP_RESPID) *ids; | 621 | STACK_OF(OCSP_RESPID) * ids; |
| 625 | SSL_get_tlsext_status_ids(s, &ids); | 622 | SSL_get_tlsext_status_ids(s, &ids); |
| 626 | BIO_printf(err, "cert_status: received %d ids\n", sk_OCSP_RESPID_num(ids)); | 623 | BIO_printf(err, "cert_status: received %d ids\n", sk_OCSP_RESPID_num(ids)); |
| 627 | #endif | 624 | #endif |
| 628 | if (srctx->verbose) | 625 | if (srctx->verbose) |
| 629 | BIO_puts(err, "cert_status: callback called\n"); | 626 | BIO_puts(err, "cert_status: callback called\n"); |
| 630 | /* Build up OCSP query from server certificate */ | 627 | /* Build up OCSP query from server certificate */ |
| 631 | x = SSL_get_certificate(s); | 628 | x = SSL_get_certificate(s); |
| 632 | aia = X509_get1_ocsp(x); | 629 | aia = X509_get1_ocsp(x); |
| 633 | if (aia) | 630 | if (aia) { |
| 634 | { | ||
| 635 | if (!OCSP_parse_url(sk_OPENSSL_STRING_value(aia, 0), | 631 | if (!OCSP_parse_url(sk_OPENSSL_STRING_value(aia, 0), |
| 636 | &host, &port, &path, &use_ssl)) | 632 | &host, &port, &path, &use_ssl)) { |
| 637 | { | ||
| 638 | BIO_puts(err, "cert_status: can't parse AIA URL\n"); | 633 | BIO_puts(err, "cert_status: can't parse AIA URL\n"); |
| 639 | goto err; | 634 | goto err; |
| 640 | } | 635 | } |
| 641 | if (srctx->verbose) | 636 | if (srctx->verbose) |
| 642 | BIO_printf(err, "cert_status: AIA URL: %s\n", | 637 | BIO_printf(err, "cert_status: AIA URL: %s\n", |
| 643 | sk_OPENSSL_STRING_value(aia, 0)); | 638 | sk_OPENSSL_STRING_value(aia, 0)); |
| 644 | } | 639 | } else { |
| 645 | else | 640 | if (!srctx->host) { |
| 646 | { | ||
| 647 | if (!srctx->host) | ||
| 648 | { | ||
| 649 | BIO_puts(srctx->err, "cert_status: no AIA and no default responder URL\n"); | 641 | BIO_puts(srctx->err, "cert_status: no AIA and no default responder URL\n"); |
| 650 | goto done; | 642 | goto done; |
| 651 | } | 643 | } |
| 652 | host = srctx->host; | 644 | host = srctx->host; |
| 653 | path = srctx->path; | 645 | path = srctx->path; |
| 654 | port = srctx->port; | 646 | port = srctx->port; |
| 655 | use_ssl = srctx->use_ssl; | 647 | use_ssl = srctx->use_ssl; |
| 656 | } | 648 | } |
| 657 | 649 | ||
| 658 | if (!X509_STORE_CTX_init(&inctx, | 650 | if (!X509_STORE_CTX_init(&inctx, |
| 659 | SSL_CTX_get_cert_store(SSL_get_SSL_CTX(s)), | 651 | SSL_CTX_get_cert_store(SSL_get_SSL_CTX(s)), |
| 660 | NULL, NULL)) | 652 | NULL, NULL)) |
| 661 | goto err; | 653 | goto err; |
| 662 | if (X509_STORE_get_by_subject(&inctx,X509_LU_X509, | 654 | if (X509_STORE_get_by_subject(&inctx, X509_LU_X509, |
| 663 | X509_get_issuer_name(x),&obj) <= 0) | 655 | X509_get_issuer_name(x), &obj) <= 0) { |
| 664 | { | ||
| 665 | BIO_puts(err, "cert_status: Can't retrieve issuer certificate.\n"); | 656 | BIO_puts(err, "cert_status: Can't retrieve issuer certificate.\n"); |
| 666 | X509_STORE_CTX_cleanup(&inctx); | 657 | X509_STORE_CTX_cleanup(&inctx); |
| 667 | goto done; | 658 | goto done; |
| 668 | } | 659 | } |
| 669 | req = OCSP_REQUEST_new(); | 660 | req = OCSP_REQUEST_new(); |
| 670 | if (!req) | 661 | if (!req) |
| 671 | goto err; | 662 | goto err; |
| @@ -679,39 +670,35 @@ BIO_printf(err, "cert_status: received %d ids\n", sk_OCSP_RESPID_num(ids)); | |||
| 679 | id = NULL; | 670 | id = NULL; |
| 680 | /* Add any extensions to the request */ | 671 | /* Add any extensions to the request */ |
| 681 | SSL_get_tlsext_status_exts(s, &exts); | 672 | SSL_get_tlsext_status_exts(s, &exts); |
| 682 | for (i = 0; i < sk_X509_EXTENSION_num(exts); i++) | 673 | for (i = 0; i < sk_X509_EXTENSION_num(exts); i++) { |
| 683 | { | ||
| 684 | X509_EXTENSION *ext = sk_X509_EXTENSION_value(exts, i); | 674 | X509_EXTENSION *ext = sk_X509_EXTENSION_value(exts, i); |
| 685 | if (!OCSP_REQUEST_add_ext(req, ext, -1)) | 675 | if (!OCSP_REQUEST_add_ext(req, ext, -1)) |
| 686 | goto err; | 676 | goto err; |
| 687 | } | 677 | } |
| 688 | resp = process_responder(err, req, host, path, port, use_ssl, NULL, | 678 | resp = process_responder(err, req, host, path, port, use_ssl, NULL, |
| 689 | srctx->timeout); | 679 | srctx->timeout); |
| 690 | if (!resp) | 680 | if (!resp) { |
| 691 | { | ||
| 692 | BIO_puts(err, "cert_status: error querying responder\n"); | 681 | BIO_puts(err, "cert_status: error querying responder\n"); |
| 693 | goto done; | 682 | goto done; |
| 694 | } | 683 | } |
| 695 | rspderlen = i2d_OCSP_RESPONSE(resp, &rspder); | 684 | rspderlen = i2d_OCSP_RESPONSE(resp, &rspder); |
| 696 | if (rspderlen <= 0) | 685 | if (rspderlen <= 0) |
| 697 | goto err; | 686 | goto err; |
| 698 | SSL_set_tlsext_status_ocsp_resp(s, rspder, rspderlen); | 687 | SSL_set_tlsext_status_ocsp_resp(s, rspder, rspderlen); |
| 699 | if (srctx->verbose) | 688 | if (srctx->verbose) { |
| 700 | { | ||
| 701 | BIO_puts(err, "cert_status: ocsp response sent:\n"); | 689 | BIO_puts(err, "cert_status: ocsp response sent:\n"); |
| 702 | OCSP_RESPONSE_print(err, resp, 2); | 690 | OCSP_RESPONSE_print(err, resp, 2); |
| 703 | } | 691 | } |
| 704 | ret = SSL_TLSEXT_ERR_OK; | 692 | ret = SSL_TLSEXT_ERR_OK; |
| 705 | done: | 693 | done: |
| 706 | if (ret != SSL_TLSEXT_ERR_OK) | 694 | if (ret != SSL_TLSEXT_ERR_OK) |
| 707 | ERR_print_errors(err); | 695 | ERR_print_errors(err); |
| 708 | if (aia) | 696 | if (aia) { |
| 709 | { | ||
| 710 | free(host); | 697 | free(host); |
| 711 | free(path); | 698 | free(path); |
| 712 | free(port); | 699 | free(port); |
| 713 | X509_email_free(aia); | 700 | X509_email_free(aia); |
| 714 | } | 701 | } |
| 715 | if (id) | 702 | if (id) |
| 716 | OCSP_CERTID_free(id); | 703 | OCSP_CERTID_free(id); |
| 717 | if (req) | 704 | if (req) |
| @@ -719,28 +706,29 @@ BIO_printf(err, "cert_status: received %d ids\n", sk_OCSP_RESPID_num(ids)); | |||
| 719 | if (resp) | 706 | if (resp) |
| 720 | OCSP_RESPONSE_free(resp); | 707 | OCSP_RESPONSE_free(resp); |
| 721 | return ret; | 708 | return ret; |
| 722 | err: | 709 | err: |
| 723 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; | 710 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; |
| 724 | goto done; | 711 | goto done; |
| 725 | } | 712 | } |
| 726 | 713 | ||
| 727 | # ifndef OPENSSL_NO_NEXTPROTONEG | 714 | #ifndef OPENSSL_NO_NEXTPROTONEG |
| 728 | /* This is the context that we pass to next_proto_cb */ | 715 | /* This is the context that we pass to next_proto_cb */ |
| 729 | typedef struct tlsextnextprotoctx_st { | 716 | typedef struct tlsextnextprotoctx_st { |
| 730 | unsigned char *data; | 717 | unsigned char *data; |
| 731 | unsigned int len; | 718 | unsigned int len; |
| 732 | } tlsextnextprotoctx; | 719 | } tlsextnextprotoctx; |
| 733 | 720 | ||
| 734 | static int next_proto_cb(SSL *s, const unsigned char **data, unsigned int *len, void *arg) | 721 | static int |
| 735 | { | 722 | next_proto_cb(SSL * s, const unsigned char **data, unsigned int *len, void *arg) |
| 723 | { | ||
| 736 | tlsextnextprotoctx *next_proto = arg; | 724 | tlsextnextprotoctx *next_proto = arg; |
| 737 | 725 | ||
| 738 | *data = next_proto->data; | 726 | *data = next_proto->data; |
| 739 | *len = next_proto->len; | 727 | *len = next_proto->len; |
| 740 | 728 | ||
| 741 | return SSL_TLSEXT_ERR_OK; | 729 | return SSL_TLSEXT_ERR_OK; |
| 742 | } | 730 | } |
| 743 | # endif /* ndef OPENSSL_NO_NEXTPROTONEG */ | 731 | #endif /* ndef OPENSSL_NO_NEXTPROTONEG */ |
| 744 | 732 | ||
| 745 | 733 | ||
| 746 | #endif | 734 | #endif |
| @@ -751,32 +739,33 @@ int MAIN(int, char **); | |||
| 751 | static char *jpake_secret = NULL; | 739 | static char *jpake_secret = NULL; |
| 752 | #endif | 740 | #endif |
| 753 | #ifndef OPENSSL_NO_SRP | 741 | #ifndef OPENSSL_NO_SRP |
| 754 | static srpsrvparm srp_callback_parm; | 742 | static srpsrvparm srp_callback_parm; |
| 755 | #endif | 743 | #endif |
| 756 | #ifndef OPENSSL_NO_SRTP | 744 | #ifndef OPENSSL_NO_SRTP |
| 757 | static char *srtp_profiles = NULL; | 745 | static char *srtp_profiles = NULL; |
| 758 | #endif | 746 | #endif |
| 759 | 747 | ||
| 760 | int MAIN(int argc, char *argv[]) | 748 | int |
| 761 | { | 749 | MAIN(int argc, char *argv[]) |
| 750 | { | ||
| 762 | X509_VERIFY_PARAM *vpm = NULL; | 751 | X509_VERIFY_PARAM *vpm = NULL; |
| 763 | int badarg = 0; | 752 | int badarg = 0; |
| 764 | short port=PORT; | 753 | short port = PORT; |
| 765 | char *CApath=NULL,*CAfile=NULL; | 754 | char *CApath = NULL, *CAfile = NULL; |
| 766 | unsigned char *context = NULL; | 755 | unsigned char *context = NULL; |
| 767 | char *dhfile = NULL; | 756 | char *dhfile = NULL; |
| 768 | #ifndef OPENSSL_NO_ECDH | 757 | #ifndef OPENSSL_NO_ECDH |
| 769 | char *named_curve = NULL; | 758 | char *named_curve = NULL; |
| 770 | #endif | 759 | #endif |
| 771 | int badop=0,bugs=0; | 760 | int badop = 0, bugs = 0; |
| 772 | int ret=1; | 761 | int ret = 1; |
| 773 | int off=0; | 762 | int off = 0; |
| 774 | int no_tmp_rsa=0,no_dhe=0,no_ecdhe=0,nocert=0; | 763 | int no_tmp_rsa = 0, no_dhe = 0, no_ecdhe = 0, nocert = 0; |
| 775 | int state=0; | 764 | int state = 0; |
| 776 | const SSL_METHOD *meth=NULL; | 765 | const SSL_METHOD *meth = NULL; |
| 777 | int socket_type=SOCK_STREAM; | 766 | int socket_type = SOCK_STREAM; |
| 778 | ENGINE *e=NULL; | 767 | ENGINE *e = NULL; |
| 779 | char *inrand=NULL; | 768 | char *inrand = NULL; |
| 780 | int s_cert_format = FORMAT_PEM, s_key_format = FORMAT_PEM; | 769 | int s_cert_format = FORMAT_PEM, s_key_format = FORMAT_PEM; |
| 781 | char *passarg = NULL, *pass = NULL; | 770 | char *passarg = NULL, *pass = NULL; |
| 782 | char *dpassarg = NULL, *dpass = NULL; | 771 | char *dpassarg = NULL, *dpass = NULL; |
| @@ -787,428 +776,388 @@ int MAIN(int argc, char *argv[]) | |||
| 787 | #ifndef OPENSSL_NO_TLSEXT | 776 | #ifndef OPENSSL_NO_TLSEXT |
| 788 | EVP_PKEY *s_key2 = NULL; | 777 | EVP_PKEY *s_key2 = NULL; |
| 789 | X509 *s_cert2 = NULL; | 778 | X509 *s_cert2 = NULL; |
| 790 | tlsextctx tlsextcbp = {NULL, NULL, SSL_TLSEXT_ERR_ALERT_WARNING}; | 779 | tlsextctx tlsextcbp = {NULL, NULL, SSL_TLSEXT_ERR_ALERT_WARNING}; |
| 791 | # ifndef OPENSSL_NO_NEXTPROTONEG | 780 | #ifndef OPENSSL_NO_NEXTPROTONEG |
| 792 | const char *next_proto_neg_in = NULL; | 781 | const char *next_proto_neg_in = NULL; |
| 793 | tlsextnextprotoctx next_proto; | 782 | tlsextnextprotoctx next_proto; |
| 794 | # endif | 783 | #endif |
| 795 | #endif | 784 | #endif |
| 796 | #ifndef OPENSSL_NO_PSK | 785 | #ifndef OPENSSL_NO_PSK |
| 797 | /* by default do not send a PSK identity hint */ | 786 | /* by default do not send a PSK identity hint */ |
| 798 | static char *psk_identity_hint=NULL; | 787 | static char *psk_identity_hint = NULL; |
| 799 | #endif | 788 | #endif |
| 800 | #ifndef OPENSSL_NO_SRP | 789 | #ifndef OPENSSL_NO_SRP |
| 801 | char *srpuserseed = NULL; | 790 | char *srpuserseed = NULL; |
| 802 | char *srp_verifier_file = NULL; | 791 | char *srp_verifier_file = NULL; |
| 803 | #endif | 792 | #endif |
| 804 | meth=SSLv23_server_method(); | 793 | meth = SSLv23_server_method(); |
| 805 | 794 | ||
| 806 | local_argc=argc; | 795 | local_argc = argc; |
| 807 | local_argv=argv; | 796 | local_argv = argv; |
| 808 | 797 | ||
| 809 | apps_startup(); | 798 | apps_startup(); |
| 810 | s_server_init(); | 799 | s_server_init(); |
| 811 | 800 | ||
| 812 | if (bio_err == NULL) | 801 | if (bio_err == NULL) |
| 813 | bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); | 802 | bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); |
| 814 | 803 | ||
| 815 | if (!load_config(bio_err, NULL)) | 804 | if (!load_config(bio_err, NULL)) |
| 816 | goto end; | 805 | goto end; |
| 817 | 806 | ||
| 818 | verify_depth=0; | 807 | verify_depth = 0; |
| 819 | #ifdef FIONBIO | 808 | #ifdef FIONBIO |
| 820 | s_nbio=0; | 809 | s_nbio = 0; |
| 821 | #endif | 810 | #endif |
| 822 | s_nbio_test=0; | 811 | s_nbio_test = 0; |
| 823 | 812 | ||
| 824 | argc--; | 813 | argc--; |
| 825 | argv++; | 814 | argv++; |
| 826 | 815 | ||
| 827 | while (argc >= 1) | 816 | while (argc >= 1) { |
| 828 | { | 817 | if ((strcmp(*argv, "-port") == 0) || |
| 829 | if ((strcmp(*argv,"-port") == 0) || | 818 | (strcmp(*argv, "-accept") == 0)) { |
| 830 | (strcmp(*argv,"-accept") == 0)) | 819 | if (--argc < 1) |
| 831 | { | 820 | goto bad; |
| 832 | if (--argc < 1) goto bad; | 821 | if (!extract_port(*(++argv), &port)) |
| 833 | if (!extract_port(*(++argv),&port)) | 822 | goto bad; |
| 823 | } else if (strcmp(*argv, "-verify") == 0) { | ||
| 824 | s_server_verify = SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE; | ||
| 825 | if (--argc < 1) | ||
| 826 | goto bad; | ||
| 827 | verify_depth = atoi(*(++argv)); | ||
| 828 | BIO_printf(bio_err, "verify depth is %d\n", verify_depth); | ||
| 829 | } else if (strcmp(*argv, "-Verify") == 0) { | ||
| 830 | s_server_verify = SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT | | ||
| 831 | SSL_VERIFY_CLIENT_ONCE; | ||
| 832 | if (--argc < 1) | ||
| 833 | goto bad; | ||
| 834 | verify_depth = atoi(*(++argv)); | ||
| 835 | BIO_printf(bio_err, "verify depth is %d, must return a certificate\n", verify_depth); | ||
| 836 | } else if (strcmp(*argv, "-context") == 0) { | ||
| 837 | if (--argc < 1) | ||
| 838 | goto bad; | ||
| 839 | context = (unsigned char *) *(++argv); | ||
| 840 | } else if (strcmp(*argv, "-cert") == 0) { | ||
| 841 | if (--argc < 1) | ||
| 842 | goto bad; | ||
| 843 | s_cert_file = *(++argv); | ||
| 844 | } else if (strcmp(*argv, "-certform") == 0) { | ||
| 845 | if (--argc < 1) | ||
| 834 | goto bad; | 846 | goto bad; |
| 835 | } | ||
| 836 | else if (strcmp(*argv,"-verify") == 0) | ||
| 837 | { | ||
| 838 | s_server_verify=SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE; | ||
| 839 | if (--argc < 1) goto bad; | ||
| 840 | verify_depth=atoi(*(++argv)); | ||
| 841 | BIO_printf(bio_err,"verify depth is %d\n",verify_depth); | ||
| 842 | } | ||
| 843 | else if (strcmp(*argv,"-Verify") == 0) | ||
| 844 | { | ||
| 845 | s_server_verify=SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT| | ||
| 846 | SSL_VERIFY_CLIENT_ONCE; | ||
| 847 | if (--argc < 1) goto bad; | ||
| 848 | verify_depth=atoi(*(++argv)); | ||
| 849 | BIO_printf(bio_err,"verify depth is %d, must return a certificate\n",verify_depth); | ||
| 850 | } | ||
| 851 | else if (strcmp(*argv,"-context") == 0) | ||
| 852 | { | ||
| 853 | if (--argc < 1) goto bad; | ||
| 854 | context= (unsigned char *)*(++argv); | ||
| 855 | } | ||
| 856 | else if (strcmp(*argv,"-cert") == 0) | ||
| 857 | { | ||
| 858 | if (--argc < 1) goto bad; | ||
| 859 | s_cert_file= *(++argv); | ||
| 860 | } | ||
| 861 | else if (strcmp(*argv,"-certform") == 0) | ||
| 862 | { | ||
| 863 | if (--argc < 1) goto bad; | ||
| 864 | s_cert_format = str2fmt(*(++argv)); | 847 | s_cert_format = str2fmt(*(++argv)); |
| 865 | } | 848 | } else if (strcmp(*argv, "-key") == 0) { |
| 866 | else if (strcmp(*argv,"-key") == 0) | 849 | if (--argc < 1) |
| 867 | { | 850 | goto bad; |
| 868 | if (--argc < 1) goto bad; | 851 | s_key_file = *(++argv); |
| 869 | s_key_file= *(++argv); | 852 | } else if (strcmp(*argv, "-keyform") == 0) { |
| 870 | } | 853 | if (--argc < 1) |
| 871 | else if (strcmp(*argv,"-keyform") == 0) | 854 | goto bad; |
| 872 | { | ||
| 873 | if (--argc < 1) goto bad; | ||
| 874 | s_key_format = str2fmt(*(++argv)); | 855 | s_key_format = str2fmt(*(++argv)); |
| 875 | } | 856 | } else if (strcmp(*argv, "-pass") == 0) { |
| 876 | else if (strcmp(*argv,"-pass") == 0) | 857 | if (--argc < 1) |
| 877 | { | 858 | goto bad; |
| 878 | if (--argc < 1) goto bad; | ||
| 879 | passarg = *(++argv); | 859 | passarg = *(++argv); |
| 880 | } | 860 | } else if (strcmp(*argv, "-dhparam") == 0) { |
| 881 | else if (strcmp(*argv,"-dhparam") == 0) | 861 | if (--argc < 1) |
| 882 | { | 862 | goto bad; |
| 883 | if (--argc < 1) goto bad; | ||
| 884 | dhfile = *(++argv); | 863 | dhfile = *(++argv); |
| 885 | } | 864 | } |
| 886 | #ifndef OPENSSL_NO_ECDH | 865 | #ifndef OPENSSL_NO_ECDH |
| 887 | else if (strcmp(*argv,"-named_curve") == 0) | 866 | else if (strcmp(*argv, "-named_curve") == 0) { |
| 888 | { | 867 | if (--argc < 1) |
| 889 | if (--argc < 1) goto bad; | 868 | goto bad; |
| 890 | named_curve = *(++argv); | 869 | named_curve = *(++argv); |
| 891 | } | 870 | } |
| 892 | #endif | 871 | #endif |
| 893 | else if (strcmp(*argv,"-dcertform") == 0) | 872 | else if (strcmp(*argv, "-dcertform") == 0) { |
| 894 | { | 873 | if (--argc < 1) |
| 895 | if (--argc < 1) goto bad; | 874 | goto bad; |
| 896 | s_dcert_format = str2fmt(*(++argv)); | 875 | s_dcert_format = str2fmt(*(++argv)); |
| 897 | } | 876 | } else if (strcmp(*argv, "-dcert") == 0) { |
| 898 | else if (strcmp(*argv,"-dcert") == 0) | 877 | if (--argc < 1) |
| 899 | { | 878 | goto bad; |
| 900 | if (--argc < 1) goto bad; | 879 | s_dcert_file = *(++argv); |
| 901 | s_dcert_file= *(++argv); | 880 | } else if (strcmp(*argv, "-dkeyform") == 0) { |
| 902 | } | 881 | if (--argc < 1) |
| 903 | else if (strcmp(*argv,"-dkeyform") == 0) | 882 | goto bad; |
| 904 | { | ||
| 905 | if (--argc < 1) goto bad; | ||
| 906 | s_dkey_format = str2fmt(*(++argv)); | 883 | s_dkey_format = str2fmt(*(++argv)); |
| 907 | } | 884 | } else if (strcmp(*argv, "-dpass") == 0) { |
| 908 | else if (strcmp(*argv,"-dpass") == 0) | 885 | if (--argc < 1) |
| 909 | { | 886 | goto bad; |
| 910 | if (--argc < 1) goto bad; | ||
| 911 | dpassarg = *(++argv); | 887 | dpassarg = *(++argv); |
| 912 | } | 888 | } else if (strcmp(*argv, "-dkey") == 0) { |
| 913 | else if (strcmp(*argv,"-dkey") == 0) | 889 | if (--argc < 1) |
| 914 | { | 890 | goto bad; |
| 915 | if (--argc < 1) goto bad; | 891 | s_dkey_file = *(++argv); |
| 916 | s_dkey_file= *(++argv); | 892 | } else if (strcmp(*argv, "-nocert") == 0) { |
| 917 | } | 893 | nocert = 1; |
| 918 | else if (strcmp(*argv,"-nocert") == 0) | 894 | } else if (strcmp(*argv, "-CApath") == 0) { |
| 919 | { | 895 | if (--argc < 1) |
| 920 | nocert=1; | 896 | goto bad; |
| 921 | } | 897 | CApath = *(++argv); |
| 922 | else if (strcmp(*argv,"-CApath") == 0) | 898 | } else if (strcmp(*argv, "-no_cache") == 0) |
| 923 | { | ||
| 924 | if (--argc < 1) goto bad; | ||
| 925 | CApath= *(++argv); | ||
| 926 | } | ||
| 927 | else if (strcmp(*argv,"-no_cache") == 0) | ||
| 928 | no_cache = 1; | 899 | no_cache = 1; |
| 929 | else if (args_verify(&argv, &argc, &badarg, bio_err, &vpm)) | 900 | else if (args_verify(&argv, &argc, &badarg, bio_err, &vpm)) { |
| 930 | { | ||
| 931 | if (badarg) | 901 | if (badarg) |
| 932 | goto bad; | 902 | goto bad; |
| 933 | continue; | 903 | continue; |
| 934 | } | 904 | } else if (strcmp(*argv, "-verify_return_error") == 0) |
| 935 | else if (strcmp(*argv,"-verify_return_error") == 0) | ||
| 936 | verify_return_error = 1; | 905 | verify_return_error = 1; |
| 937 | else if (strcmp(*argv,"-serverpref") == 0) | 906 | else if (strcmp(*argv, "-serverpref") == 0) { |
| 938 | { off|=SSL_OP_CIPHER_SERVER_PREFERENCE; } | 907 | off |= SSL_OP_CIPHER_SERVER_PREFERENCE; |
| 939 | else if (strcmp(*argv,"-legacy_renegotiation") == 0) | 908 | } else if (strcmp(*argv, "-legacy_renegotiation") == 0) |
| 940 | off|=SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION; | 909 | off |= SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION; |
| 941 | else if (strcmp(*argv,"-cipher") == 0) | 910 | else if (strcmp(*argv, "-cipher") == 0) { |
| 942 | { | 911 | if (--argc < 1) |
| 943 | if (--argc < 1) goto bad; | 912 | goto bad; |
| 944 | cipher= *(++argv); | 913 | cipher = *(++argv); |
| 945 | } | 914 | } else if (strcmp(*argv, "-CAfile") == 0) { |
| 946 | else if (strcmp(*argv,"-CAfile") == 0) | 915 | if (--argc < 1) |
| 947 | { | 916 | goto bad; |
| 948 | if (--argc < 1) goto bad; | 917 | CAfile = *(++argv); |
| 949 | CAfile= *(++argv); | 918 | } |
| 950 | } | 919 | #ifdef FIONBIO |
| 951 | #ifdef FIONBIO | 920 | else if (strcmp(*argv, "-nbio") == 0) { |
| 952 | else if (strcmp(*argv,"-nbio") == 0) | 921 | s_nbio = 1; |
| 953 | { s_nbio=1; } | 922 | } |
| 954 | #endif | 923 | #endif |
| 955 | else if (strcmp(*argv,"-nbio_test") == 0) | 924 | else if (strcmp(*argv, "-nbio_test") == 0) { |
| 956 | { | 925 | #ifdef FIONBIO |
| 957 | #ifdef FIONBIO | 926 | s_nbio = 1; |
| 958 | s_nbio=1; | ||
| 959 | #endif | 927 | #endif |
| 960 | s_nbio_test=1; | 928 | s_nbio_test = 1; |
| 961 | } | 929 | } else if (strcmp(*argv, "-debug") == 0) { |
| 962 | else if (strcmp(*argv,"-debug") == 0) | 930 | s_debug = 1; |
| 963 | { s_debug=1; } | 931 | } |
| 964 | #ifndef OPENSSL_NO_TLSEXT | 932 | #ifndef OPENSSL_NO_TLSEXT |
| 965 | else if (strcmp(*argv,"-tlsextdebug") == 0) | 933 | else if (strcmp(*argv, "-tlsextdebug") == 0) |
| 966 | s_tlsextdebug=1; | 934 | s_tlsextdebug = 1; |
| 967 | else if (strcmp(*argv,"-status") == 0) | 935 | else if (strcmp(*argv, "-status") == 0) |
| 968 | s_tlsextstatus=1; | 936 | s_tlsextstatus = 1; |
| 969 | else if (strcmp(*argv,"-status_verbose") == 0) | 937 | else if (strcmp(*argv, "-status_verbose") == 0) { |
| 970 | { | 938 | s_tlsextstatus = 1; |
| 971 | s_tlsextstatus=1; | ||
| 972 | tlscstatp.verbose = 1; | 939 | tlscstatp.verbose = 1; |
| 973 | } | 940 | } else if (!strcmp(*argv, "-status_timeout")) { |
| 974 | else if (!strcmp(*argv, "-status_timeout")) | 941 | s_tlsextstatus = 1; |
| 975 | { | 942 | if (--argc < 1) |
| 976 | s_tlsextstatus=1; | 943 | goto bad; |
| 977 | if (--argc < 1) goto bad; | ||
| 978 | tlscstatp.timeout = atoi(*(++argv)); | 944 | tlscstatp.timeout = atoi(*(++argv)); |
| 979 | } | 945 | } else if (!strcmp(*argv, "-status_url")) { |
| 980 | else if (!strcmp(*argv, "-status_url")) | 946 | s_tlsextstatus = 1; |
| 981 | { | 947 | if (--argc < 1) |
| 982 | s_tlsextstatus=1; | 948 | goto bad; |
| 983 | if (--argc < 1) goto bad; | ||
| 984 | if (!OCSP_parse_url(*(++argv), | 949 | if (!OCSP_parse_url(*(++argv), |
| 985 | &tlscstatp.host, | 950 | &tlscstatp.host, |
| 986 | &tlscstatp.port, | 951 | &tlscstatp.port, |
| 987 | &tlscstatp.path, | 952 | &tlscstatp.path, |
| 988 | &tlscstatp.use_ssl)) | 953 | &tlscstatp.use_ssl)) { |
| 989 | { | ||
| 990 | BIO_printf(bio_err, "Error parsing URL\n"); | 954 | BIO_printf(bio_err, "Error parsing URL\n"); |
| 991 | goto bad; | 955 | goto bad; |
| 992 | } | ||
| 993 | } | 956 | } |
| 957 | } | ||
| 994 | #endif | 958 | #endif |
| 995 | else if (strcmp(*argv,"-msg") == 0) | 959 | else if (strcmp(*argv, "-msg") == 0) { |
| 996 | { s_msg=1; } | 960 | s_msg = 1; |
| 997 | else if (strcmp(*argv,"-hack") == 0) | 961 | } else if (strcmp(*argv, "-hack") == 0) { |
| 998 | { hack=1; } | 962 | hack = 1; |
| 999 | else if (strcmp(*argv,"-state") == 0) | 963 | } else if (strcmp(*argv, "-state") == 0) { |
| 1000 | { state=1; } | 964 | state = 1; |
| 1001 | else if (strcmp(*argv,"-crlf") == 0) | 965 | } else if (strcmp(*argv, "-crlf") == 0) { |
| 1002 | { s_crlf=1; } | 966 | s_crlf = 1; |
| 1003 | else if (strcmp(*argv,"-quiet") == 0) | 967 | } else if (strcmp(*argv, "-quiet") == 0) { |
| 1004 | { s_quiet=1; } | 968 | s_quiet = 1; |
| 1005 | else if (strcmp(*argv,"-bugs") == 0) | 969 | } else if (strcmp(*argv, "-bugs") == 0) { |
| 1006 | { bugs=1; } | 970 | bugs = 1; |
| 1007 | else if (strcmp(*argv,"-no_tmp_rsa") == 0) | 971 | } else if (strcmp(*argv, "-no_tmp_rsa") == 0) { |
| 1008 | { no_tmp_rsa=1; } | 972 | no_tmp_rsa = 1; |
| 1009 | else if (strcmp(*argv,"-no_dhe") == 0) | 973 | } else if (strcmp(*argv, "-no_dhe") == 0) { |
| 1010 | { no_dhe=1; } | 974 | no_dhe = 1; |
| 1011 | else if (strcmp(*argv,"-no_ecdhe") == 0) | 975 | } else if (strcmp(*argv, "-no_ecdhe") == 0) { |
| 1012 | { no_ecdhe=1; } | 976 | no_ecdhe = 1; |
| 977 | } | ||
| 1013 | #ifndef OPENSSL_NO_PSK | 978 | #ifndef OPENSSL_NO_PSK |
| 1014 | else if (strcmp(*argv,"-psk_hint") == 0) | 979 | else if (strcmp(*argv, "-psk_hint") == 0) { |
| 1015 | { | 980 | if (--argc < 1) |
| 1016 | if (--argc < 1) goto bad; | 981 | goto bad; |
| 1017 | psk_identity_hint= *(++argv); | 982 | psk_identity_hint = *(++argv); |
| 1018 | } | 983 | } else if (strcmp(*argv, "-psk") == 0) { |
| 1019 | else if (strcmp(*argv,"-psk") == 0) | ||
| 1020 | { | ||
| 1021 | size_t i; | 984 | size_t i; |
| 1022 | 985 | ||
| 1023 | if (--argc < 1) goto bad; | 986 | if (--argc < 1) |
| 1024 | psk_key=*(++argv); | 987 | goto bad; |
| 1025 | for (i=0; i<strlen(psk_key); i++) | 988 | psk_key = *(++argv); |
| 1026 | { | 989 | for (i = 0; i < strlen(psk_key); i++) { |
| 1027 | if (isxdigit((unsigned char)psk_key[i])) | 990 | if (isxdigit((unsigned char) psk_key[i])) |
| 1028 | continue; | 991 | continue; |
| 1029 | BIO_printf(bio_err,"Not a hex number '%s'\n",*argv); | 992 | BIO_printf(bio_err, "Not a hex number '%s'\n", *argv); |
| 1030 | goto bad; | 993 | goto bad; |
| 1031 | } | ||
| 1032 | } | 994 | } |
| 995 | } | ||
| 1033 | #endif | 996 | #endif |
| 1034 | #ifndef OPENSSL_NO_SRP | 997 | #ifndef OPENSSL_NO_SRP |
| 1035 | else if (strcmp(*argv, "-srpvfile") == 0) | 998 | else if (strcmp(*argv, "-srpvfile") == 0) { |
| 1036 | { | 999 | if (--argc < 1) |
| 1037 | if (--argc < 1) goto bad; | 1000 | goto bad; |
| 1038 | srp_verifier_file = *(++argv); | 1001 | srp_verifier_file = *(++argv); |
| 1039 | meth = TLSv1_server_method(); | 1002 | meth = TLSv1_server_method(); |
| 1040 | } | 1003 | } else if (strcmp(*argv, "-srpuserseed") == 0) { |
| 1041 | else if (strcmp(*argv, "-srpuserseed") == 0) | 1004 | if (--argc < 1) |
| 1042 | { | 1005 | goto bad; |
| 1043 | if (--argc < 1) goto bad; | ||
| 1044 | srpuserseed = *(++argv); | 1006 | srpuserseed = *(++argv); |
| 1045 | meth = TLSv1_server_method(); | 1007 | meth = TLSv1_server_method(); |
| 1046 | } | 1008 | } |
| 1047 | #endif | 1009 | #endif |
| 1048 | else if (strcmp(*argv,"-www") == 0) | 1010 | else if (strcmp(*argv, "-www") == 0) { |
| 1049 | { www=1; } | 1011 | www = 1; |
| 1050 | else if (strcmp(*argv,"-WWW") == 0) | 1012 | } else if (strcmp(*argv, "-WWW") == 0) { |
| 1051 | { www=2; } | 1013 | www = 2; |
| 1052 | else if (strcmp(*argv,"-HTTP") == 0) | 1014 | } else if (strcmp(*argv, "-HTTP") == 0) { |
| 1053 | { www=3; } | 1015 | www = 3; |
| 1054 | else if (strcmp(*argv,"-no_ssl2") == 0) | 1016 | } else if (strcmp(*argv, "-no_ssl2") == 0) { |
| 1055 | { off|=SSL_OP_NO_SSLv2; } | 1017 | off |= SSL_OP_NO_SSLv2; |
| 1056 | else if (strcmp(*argv,"-no_ssl3") == 0) | 1018 | } else if (strcmp(*argv, "-no_ssl3") == 0) { |
| 1057 | { off|=SSL_OP_NO_SSLv3; } | 1019 | off |= SSL_OP_NO_SSLv3; |
| 1058 | else if (strcmp(*argv,"-no_tls1") == 0) | 1020 | } else if (strcmp(*argv, "-no_tls1") == 0) { |
| 1059 | { off|=SSL_OP_NO_TLSv1; } | 1021 | off |= SSL_OP_NO_TLSv1; |
| 1060 | else if (strcmp(*argv,"-no_tls1_1") == 0) | 1022 | } else if (strcmp(*argv, "-no_tls1_1") == 0) { |
| 1061 | { off|=SSL_OP_NO_TLSv1_1; } | 1023 | off |= SSL_OP_NO_TLSv1_1; |
| 1062 | else if (strcmp(*argv,"-no_tls1_2") == 0) | 1024 | } else if (strcmp(*argv, "-no_tls1_2") == 0) { |
| 1063 | { off|=SSL_OP_NO_TLSv1_2; } | 1025 | off |= SSL_OP_NO_TLSv1_2; |
| 1064 | else if (strcmp(*argv,"-no_comp") == 0) | 1026 | } else if (strcmp(*argv, "-no_comp") == 0) { |
| 1065 | { off|=SSL_OP_NO_COMPRESSION; } | 1027 | off |= SSL_OP_NO_COMPRESSION; |
| 1028 | } | ||
| 1066 | #ifndef OPENSSL_NO_TLSEXT | 1029 | #ifndef OPENSSL_NO_TLSEXT |
| 1067 | else if (strcmp(*argv,"-no_ticket") == 0) | 1030 | else if (strcmp(*argv, "-no_ticket") == 0) { |
| 1068 | { off|=SSL_OP_NO_TICKET; } | 1031 | off |= SSL_OP_NO_TICKET; |
| 1069 | #endif | 1032 | } |
| 1070 | else if (strcmp(*argv,"-ssl3") == 0) | 1033 | #endif |
| 1071 | { meth=SSLv3_server_method(); } | 1034 | else if (strcmp(*argv, "-ssl3") == 0) { |
| 1072 | else if (strcmp(*argv,"-tls1") == 0) | 1035 | meth = SSLv3_server_method(); |
| 1073 | { meth=TLSv1_server_method(); } | 1036 | } else if (strcmp(*argv, "-tls1") == 0) { |
| 1074 | else if (strcmp(*argv,"-tls1_1") == 0) | 1037 | meth = TLSv1_server_method(); |
| 1075 | { meth=TLSv1_1_server_method(); } | 1038 | } else if (strcmp(*argv, "-tls1_1") == 0) { |
| 1076 | else if (strcmp(*argv,"-tls1_2") == 0) | 1039 | meth = TLSv1_1_server_method(); |
| 1077 | { meth=TLSv1_2_server_method(); } | 1040 | } else if (strcmp(*argv, "-tls1_2") == 0) { |
| 1041 | meth = TLSv1_2_server_method(); | ||
| 1042 | } | ||
| 1078 | #ifndef OPENSSL_NO_DTLS1 | 1043 | #ifndef OPENSSL_NO_DTLS1 |
| 1079 | else if (strcmp(*argv,"-dtls1") == 0) | 1044 | else if (strcmp(*argv, "-dtls1") == 0) { |
| 1080 | { | 1045 | meth = DTLSv1_server_method(); |
| 1081 | meth=DTLSv1_server_method(); | ||
| 1082 | socket_type = SOCK_DGRAM; | 1046 | socket_type = SOCK_DGRAM; |
| 1083 | } | 1047 | } else if (strcmp(*argv, "-timeout") == 0) |
| 1084 | else if (strcmp(*argv,"-timeout") == 0) | ||
| 1085 | enable_timeouts = 1; | 1048 | enable_timeouts = 1; |
| 1086 | else if (strcmp(*argv,"-mtu") == 0) | 1049 | else if (strcmp(*argv, "-mtu") == 0) { |
| 1087 | { | 1050 | if (--argc < 1) |
| 1088 | if (--argc < 1) goto bad; | 1051 | goto bad; |
| 1089 | socket_mtu = atol(*(++argv)); | 1052 | socket_mtu = atol(*(++argv)); |
| 1090 | } | 1053 | } else if (strcmp(*argv, "-chain") == 0) |
| 1091 | else if (strcmp(*argv, "-chain") == 0) | ||
| 1092 | cert_chain = 1; | 1054 | cert_chain = 1; |
| 1093 | #endif | 1055 | #endif |
| 1094 | else if (strcmp(*argv, "-id_prefix") == 0) | 1056 | else if (strcmp(*argv, "-id_prefix") == 0) { |
| 1095 | { | 1057 | if (--argc < 1) |
| 1096 | if (--argc < 1) goto bad; | 1058 | goto bad; |
| 1097 | session_id_prefix = *(++argv); | 1059 | session_id_prefix = *(++argv); |
| 1098 | } | 1060 | } |
| 1099 | #ifndef OPENSSL_NO_ENGINE | 1061 | #ifndef OPENSSL_NO_ENGINE |
| 1100 | else if (strcmp(*argv,"-engine") == 0) | 1062 | else if (strcmp(*argv, "-engine") == 0) { |
| 1101 | { | 1063 | if (--argc < 1) |
| 1102 | if (--argc < 1) goto bad; | 1064 | goto bad; |
| 1103 | engine_id= *(++argv); | 1065 | engine_id = *(++argv); |
| 1104 | } | 1066 | } |
| 1105 | #endif | 1067 | #endif |
| 1106 | else if (strcmp(*argv,"-rand") == 0) | 1068 | else if (strcmp(*argv, "-rand") == 0) { |
| 1107 | { | 1069 | if (--argc < 1) |
| 1108 | if (--argc < 1) goto bad; | 1070 | goto bad; |
| 1109 | inrand= *(++argv); | 1071 | inrand = *(++argv); |
| 1110 | } | 1072 | } |
| 1111 | #ifndef OPENSSL_NO_TLSEXT | 1073 | #ifndef OPENSSL_NO_TLSEXT |
| 1112 | else if (strcmp(*argv,"-servername") == 0) | 1074 | else if (strcmp(*argv, "-servername") == 0) { |
| 1113 | { | 1075 | if (--argc < 1) |
| 1114 | if (--argc < 1) goto bad; | 1076 | goto bad; |
| 1115 | tlsextcbp.servername= *(++argv); | 1077 | tlsextcbp.servername = *(++argv); |
| 1116 | } | 1078 | } else if (strcmp(*argv, "-servername_fatal") == 0) { |
| 1117 | else if (strcmp(*argv,"-servername_fatal") == 0) | 1079 | tlsextcbp.extension_error = SSL_TLSEXT_ERR_ALERT_FATAL; |
| 1118 | { tlsextcbp.extension_error = SSL_TLSEXT_ERR_ALERT_FATAL; } | 1080 | } else if (strcmp(*argv, "-cert2") == 0) { |
| 1119 | else if (strcmp(*argv,"-cert2") == 0) | 1081 | if (--argc < 1) |
| 1120 | { | 1082 | goto bad; |
| 1121 | if (--argc < 1) goto bad; | 1083 | s_cert_file2 = *(++argv); |
| 1122 | s_cert_file2= *(++argv); | 1084 | } else if (strcmp(*argv, "-key2") == 0) { |
| 1123 | } | 1085 | if (--argc < 1) |
| 1124 | else if (strcmp(*argv,"-key2") == 0) | 1086 | goto bad; |
| 1125 | { | 1087 | s_key_file2 = *(++argv); |
| 1126 | if (--argc < 1) goto bad; | 1088 | } |
| 1127 | s_key_file2= *(++argv); | 1089 | #ifndef OPENSSL_NO_NEXTPROTONEG |
| 1128 | } | 1090 | else if (strcmp(*argv, "-nextprotoneg") == 0) { |
| 1129 | # ifndef OPENSSL_NO_NEXTPROTONEG | 1091 | if (--argc < 1) |
| 1130 | else if (strcmp(*argv,"-nextprotoneg") == 0) | 1092 | goto bad; |
| 1131 | { | ||
| 1132 | if (--argc < 1) goto bad; | ||
| 1133 | next_proto_neg_in = *(++argv); | 1093 | next_proto_neg_in = *(++argv); |
| 1134 | } | 1094 | } |
| 1135 | # endif | 1095 | #endif |
| 1136 | #endif | 1096 | #endif |
| 1137 | #if !defined(OPENSSL_NO_JPAKE) && !defined(OPENSSL_NO_PSK) | 1097 | #if !defined(OPENSSL_NO_JPAKE) && !defined(OPENSSL_NO_PSK) |
| 1138 | else if (strcmp(*argv,"-jpake") == 0) | 1098 | else if (strcmp(*argv, "-jpake") == 0) { |
| 1139 | { | 1099 | if (--argc < 1) |
| 1140 | if (--argc < 1) goto bad; | 1100 | goto bad; |
| 1141 | jpake_secret = *(++argv); | 1101 | jpake_secret = *(++argv); |
| 1142 | } | 1102 | } |
| 1143 | #endif | 1103 | #endif |
| 1144 | #ifndef OPENSSL_NO_SRTP | 1104 | #ifndef OPENSSL_NO_SRTP |
| 1145 | else if (strcmp(*argv,"-use_srtp") == 0) | 1105 | else if (strcmp(*argv, "-use_srtp") == 0) { |
| 1146 | { | 1106 | if (--argc < 1) |
| 1147 | if (--argc < 1) goto bad; | 1107 | goto bad; |
| 1148 | srtp_profiles = *(++argv); | 1108 | srtp_profiles = *(++argv); |
| 1149 | } | 1109 | } |
| 1150 | #endif | 1110 | #endif |
| 1151 | else if (strcmp(*argv,"-keymatexport") == 0) | 1111 | else if (strcmp(*argv, "-keymatexport") == 0) { |
| 1152 | { | 1112 | if (--argc < 1) |
| 1153 | if (--argc < 1) goto bad; | 1113 | goto bad; |
| 1154 | keymatexportlabel= *(++argv); | 1114 | keymatexportlabel = *(++argv); |
| 1155 | } | 1115 | } else if (strcmp(*argv, "-keymatexportlen") == 0) { |
| 1156 | else if (strcmp(*argv,"-keymatexportlen") == 0) | 1116 | if (--argc < 1) |
| 1157 | { | 1117 | goto bad; |
| 1158 | if (--argc < 1) goto bad; | 1118 | keymatexportlen = atoi(*(++argv)); |
| 1159 | keymatexportlen=atoi(*(++argv)); | 1119 | if (keymatexportlen == 0) |
| 1160 | if (keymatexportlen == 0) goto bad; | 1120 | goto bad; |
| 1161 | } | 1121 | } else { |
| 1162 | else | 1122 | BIO_printf(bio_err, "unknown option %s\n", *argv); |
| 1163 | { | 1123 | badop = 1; |
| 1164 | BIO_printf(bio_err,"unknown option %s\n",*argv); | ||
| 1165 | badop=1; | ||
| 1166 | break; | 1124 | break; |
| 1167 | } | 1125 | } |
| 1168 | argc--; | 1126 | argc--; |
| 1169 | argv++; | 1127 | argv++; |
| 1170 | } | 1128 | } |
| 1171 | if (badop) | 1129 | if (badop) { |
| 1172 | { | ||
| 1173 | bad: | 1130 | bad: |
| 1174 | sv_usage(); | 1131 | sv_usage(); |
| 1175 | goto end; | 1132 | goto end; |
| 1176 | } | 1133 | } |
| 1177 | |||
| 1178 | #if !defined(OPENSSL_NO_JPAKE) && !defined(OPENSSL_NO_PSK) | 1134 | #if !defined(OPENSSL_NO_JPAKE) && !defined(OPENSSL_NO_PSK) |
| 1179 | if (jpake_secret) | 1135 | if (jpake_secret) { |
| 1180 | { | 1136 | if (psk_key) { |
| 1181 | if (psk_key) | ||
| 1182 | { | ||
| 1183 | BIO_printf(bio_err, | 1137 | BIO_printf(bio_err, |
| 1184 | "Can't use JPAKE and PSK together\n"); | 1138 | "Can't use JPAKE and PSK together\n"); |
| 1185 | goto end; | 1139 | goto end; |
| 1186 | } | 1140 | } |
| 1187 | psk_identity = "JPAKE"; | 1141 | psk_identity = "JPAKE"; |
| 1188 | if (cipher) | 1142 | if (cipher) { |
| 1189 | { | ||
| 1190 | BIO_printf(bio_err, "JPAKE sets cipher to PSK\n"); | 1143 | BIO_printf(bio_err, "JPAKE sets cipher to PSK\n"); |
| 1191 | goto end; | 1144 | goto end; |
| 1192 | } | ||
| 1193 | cipher = "PSK"; | ||
| 1194 | } | 1145 | } |
| 1195 | 1146 | cipher = "PSK"; | |
| 1147 | } | ||
| 1196 | #endif | 1148 | #endif |
| 1197 | 1149 | ||
| 1198 | SSL_load_error_strings(); | 1150 | SSL_load_error_strings(); |
| 1199 | OpenSSL_add_ssl_algorithms(); | 1151 | OpenSSL_add_ssl_algorithms(); |
| 1200 | 1152 | ||
| 1201 | #ifndef OPENSSL_NO_ENGINE | 1153 | #ifndef OPENSSL_NO_ENGINE |
| 1202 | e = setup_engine(bio_err, engine_id, 1); | 1154 | e = setup_engine(bio_err, engine_id, 1); |
| 1203 | #endif | 1155 | #endif |
| 1204 | 1156 | ||
| 1205 | if (!app_passwd(bio_err, passarg, dpassarg, &pass, &dpass)) | 1157 | if (!app_passwd(bio_err, passarg, dpassarg, &pass, &dpass)) { |
| 1206 | { | ||
| 1207 | BIO_printf(bio_err, "Error getting password\n"); | 1158 | BIO_printf(bio_err, "Error getting password\n"); |
| 1208 | goto end; | 1159 | goto end; |
| 1209 | } | 1160 | } |
| 1210 | |||
| 1211 | |||
| 1212 | if (s_key_file == NULL) | 1161 | if (s_key_file == NULL) |
| 1213 | s_key_file = s_cert_file; | 1162 | s_key_file = s_cert_file; |
| 1214 | #ifndef OPENSSL_NO_TLSEXT | 1163 | #ifndef OPENSSL_NO_TLSEXT |
| @@ -1216,162 +1165,138 @@ bad: | |||
| 1216 | s_key_file2 = s_cert_file2; | 1165 | s_key_file2 = s_cert_file2; |
| 1217 | #endif | 1166 | #endif |
| 1218 | 1167 | ||
| 1219 | if (nocert == 0) | 1168 | if (nocert == 0) { |
| 1220 | { | ||
| 1221 | s_key = load_key(bio_err, s_key_file, s_key_format, 0, pass, e, | 1169 | s_key = load_key(bio_err, s_key_file, s_key_format, 0, pass, e, |
| 1222 | "server certificate private key file"); | 1170 | "server certificate private key file"); |
| 1223 | if (!s_key) | 1171 | if (!s_key) { |
| 1224 | { | ||
| 1225 | ERR_print_errors(bio_err); | 1172 | ERR_print_errors(bio_err); |
| 1226 | goto end; | 1173 | goto end; |
| 1227 | } | 1174 | } |
| 1228 | 1175 | s_cert = load_cert(bio_err, s_cert_file, s_cert_format, | |
| 1229 | s_cert = load_cert(bio_err,s_cert_file,s_cert_format, | 1176 | NULL, e, "server certificate file"); |
| 1230 | NULL, e, "server certificate file"); | ||
| 1231 | 1177 | ||
| 1232 | if (!s_cert) | 1178 | if (!s_cert) { |
| 1233 | { | ||
| 1234 | ERR_print_errors(bio_err); | 1179 | ERR_print_errors(bio_err); |
| 1235 | goto end; | 1180 | goto end; |
| 1236 | } | 1181 | } |
| 1237 | |||
| 1238 | #ifndef OPENSSL_NO_TLSEXT | 1182 | #ifndef OPENSSL_NO_TLSEXT |
| 1239 | if (tlsextcbp.servername) | 1183 | if (tlsextcbp.servername) { |
| 1240 | { | ||
| 1241 | s_key2 = load_key(bio_err, s_key_file2, s_key_format, 0, pass, e, | 1184 | s_key2 = load_key(bio_err, s_key_file2, s_key_format, 0, pass, e, |
| 1242 | "second server certificate private key file"); | 1185 | "second server certificate private key file"); |
| 1243 | if (!s_key2) | 1186 | if (!s_key2) { |
| 1244 | { | ||
| 1245 | ERR_print_errors(bio_err); | 1187 | ERR_print_errors(bio_err); |
| 1246 | goto end; | 1188 | goto end; |
| 1247 | } | 1189 | } |
| 1248 | 1190 | s_cert2 = load_cert(bio_err, s_cert_file2, s_cert_format, | |
| 1249 | s_cert2 = load_cert(bio_err,s_cert_file2,s_cert_format, | 1191 | NULL, e, "second server certificate file"); |
| 1250 | NULL, e, "second server certificate file"); | 1192 | |
| 1251 | 1193 | if (!s_cert2) { | |
| 1252 | if (!s_cert2) | ||
| 1253 | { | ||
| 1254 | ERR_print_errors(bio_err); | 1194 | ERR_print_errors(bio_err); |
| 1255 | goto end; | 1195 | goto end; |
| 1256 | } | ||
| 1257 | } | 1196 | } |
| 1258 | #endif | ||
| 1259 | } | 1197 | } |
| 1260 | 1198 | #endif | |
| 1261 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) | 1199 | } |
| 1262 | if (next_proto_neg_in) | 1200 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) |
| 1263 | { | 1201 | if (next_proto_neg_in) { |
| 1264 | unsigned short len; | 1202 | unsigned short len; |
| 1265 | next_proto.data = next_protos_parse(&len, next_proto_neg_in); | 1203 | next_proto.data = next_protos_parse(&len, next_proto_neg_in); |
| 1266 | if (next_proto.data == NULL) | 1204 | if (next_proto.data == NULL) |
| 1267 | goto end; | 1205 | goto end; |
| 1268 | next_proto.len = len; | 1206 | next_proto.len = len; |
| 1269 | } | 1207 | } else { |
| 1270 | else | ||
| 1271 | { | ||
| 1272 | next_proto.data = NULL; | 1208 | next_proto.data = NULL; |
| 1273 | } | 1209 | } |
| 1274 | #endif | 1210 | #endif |
| 1275 | 1211 | ||
| 1276 | 1212 | ||
| 1277 | if (s_dcert_file) | 1213 | if (s_dcert_file) { |
| 1278 | { | ||
| 1279 | 1214 | ||
| 1280 | if (s_dkey_file == NULL) | 1215 | if (s_dkey_file == NULL) |
| 1281 | s_dkey_file = s_dcert_file; | 1216 | s_dkey_file = s_dcert_file; |
| 1282 | 1217 | ||
| 1283 | s_dkey = load_key(bio_err, s_dkey_file, s_dkey_format, | 1218 | s_dkey = load_key(bio_err, s_dkey_file, s_dkey_format, |
| 1284 | 0, dpass, e, | 1219 | 0, dpass, e, |
| 1285 | "second certificate private key file"); | 1220 | "second certificate private key file"); |
| 1286 | if (!s_dkey) | 1221 | if (!s_dkey) { |
| 1287 | { | ||
| 1288 | ERR_print_errors(bio_err); | 1222 | ERR_print_errors(bio_err); |
| 1289 | goto end; | 1223 | goto end; |
| 1290 | } | 1224 | } |
| 1291 | 1225 | s_dcert = load_cert(bio_err, s_dcert_file, s_dcert_format, | |
| 1292 | s_dcert = load_cert(bio_err,s_dcert_file,s_dcert_format, | 1226 | NULL, e, "second server certificate file"); |
| 1293 | NULL, e, "second server certificate file"); | ||
| 1294 | 1227 | ||
| 1295 | if (!s_dcert) | 1228 | if (!s_dcert) { |
| 1296 | { | ||
| 1297 | ERR_print_errors(bio_err); | 1229 | ERR_print_errors(bio_err); |
| 1298 | goto end; | 1230 | goto end; |
| 1299 | } | ||
| 1300 | |||
| 1301 | } | 1231 | } |
| 1302 | 1232 | } | |
| 1303 | if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL | 1233 | if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL |
| 1304 | && !RAND_status()) | 1234 | && !RAND_status()) { |
| 1305 | { | 1235 | BIO_printf(bio_err, "warning, not much extra random data, consider using the -rand option\n"); |
| 1306 | BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n"); | 1236 | } |
| 1307 | } | ||
| 1308 | if (inrand != NULL) | 1237 | if (inrand != NULL) |
| 1309 | BIO_printf(bio_err,"%ld semi-random bytes loaded\n", | 1238 | BIO_printf(bio_err, "%ld semi-random bytes loaded\n", |
| 1310 | app_RAND_load_files(inrand)); | 1239 | app_RAND_load_files(inrand)); |
| 1311 | 1240 | ||
| 1312 | if (bio_s_out == NULL) | 1241 | if (bio_s_out == NULL) { |
| 1313 | { | 1242 | if (s_quiet && !s_debug && !s_msg) { |
| 1314 | if (s_quiet && !s_debug && !s_msg) | 1243 | bio_s_out = BIO_new(BIO_s_null()); |
| 1315 | { | 1244 | } else { |
| 1316 | bio_s_out=BIO_new(BIO_s_null()); | ||
| 1317 | } | ||
| 1318 | else | ||
| 1319 | { | ||
| 1320 | if (bio_s_out == NULL) | 1245 | if (bio_s_out == NULL) |
| 1321 | bio_s_out=BIO_new_fp(stdout,BIO_NOCLOSE); | 1246 | bio_s_out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 1322 | } | ||
| 1323 | } | 1247 | } |
| 1324 | 1248 | } | |
| 1325 | #if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_ECDSA) | 1249 | #if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_ECDSA) |
| 1326 | if (nocert) | 1250 | if (nocert) |
| 1327 | #endif | 1251 | #endif |
| 1328 | { | 1252 | { |
| 1329 | s_cert_file=NULL; | 1253 | s_cert_file = NULL; |
| 1330 | s_key_file=NULL; | 1254 | s_key_file = NULL; |
| 1331 | s_dcert_file=NULL; | 1255 | s_dcert_file = NULL; |
| 1332 | s_dkey_file=NULL; | 1256 | s_dkey_file = NULL; |
| 1333 | #ifndef OPENSSL_NO_TLSEXT | 1257 | #ifndef OPENSSL_NO_TLSEXT |
| 1334 | s_cert_file2=NULL; | 1258 | s_cert_file2 = NULL; |
| 1335 | s_key_file2=NULL; | 1259 | s_key_file2 = NULL; |
| 1336 | #endif | 1260 | #endif |
| 1337 | } | 1261 | } |
| 1338 | 1262 | ctx = SSL_CTX_new(meth); | |
| 1339 | ctx=SSL_CTX_new(meth); | 1263 | if (ctx == NULL) { |
| 1340 | if (ctx == NULL) | ||
| 1341 | { | ||
| 1342 | ERR_print_errors(bio_err); | 1264 | ERR_print_errors(bio_err); |
| 1343 | goto end; | 1265 | goto end; |
| 1344 | } | 1266 | } |
| 1345 | if (session_id_prefix) | 1267 | if (session_id_prefix) { |
| 1346 | { | 1268 | if (strlen(session_id_prefix) >= 32) |
| 1347 | if(strlen(session_id_prefix) >= 32) | ||
| 1348 | BIO_printf(bio_err, | 1269 | BIO_printf(bio_err, |
| 1349 | "warning: id_prefix is too long, only one new session will be possible\n"); | 1270 | "warning: id_prefix is too long, only one new session will be possible\n"); |
| 1350 | else if(strlen(session_id_prefix) >= 16) | 1271 | else if (strlen(session_id_prefix) >= 16) |
| 1351 | BIO_printf(bio_err, | 1272 | BIO_printf(bio_err, |
| 1352 | "warning: id_prefix is too long if you use SSLv2\n"); | 1273 | "warning: id_prefix is too long if you use SSLv2\n"); |
| 1353 | if(!SSL_CTX_set_generate_session_id(ctx, generate_session_id)) | 1274 | if (!SSL_CTX_set_generate_session_id(ctx, generate_session_id)) { |
| 1354 | { | 1275 | BIO_printf(bio_err, "error setting 'id_prefix'\n"); |
| 1355 | BIO_printf(bio_err,"error setting 'id_prefix'\n"); | ||
| 1356 | ERR_print_errors(bio_err); | 1276 | ERR_print_errors(bio_err); |
| 1357 | goto end; | 1277 | goto end; |
| 1358 | } | ||
| 1359 | BIO_printf(bio_err,"id_prefix '%s' set.\n", session_id_prefix); | ||
| 1360 | } | 1278 | } |
| 1361 | SSL_CTX_set_quiet_shutdown(ctx,1); | 1279 | BIO_printf(bio_err, "id_prefix '%s' set.\n", session_id_prefix); |
| 1362 | if (bugs) SSL_CTX_set_options(ctx,SSL_OP_ALL); | 1280 | } |
| 1363 | if (hack) SSL_CTX_set_options(ctx,SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG); | 1281 | SSL_CTX_set_quiet_shutdown(ctx, 1); |
| 1364 | SSL_CTX_set_options(ctx,off); | 1282 | if (bugs) |
| 1365 | /* DTLS: partial reads end up discarding unread UDP bytes :-( | 1283 | SSL_CTX_set_options(ctx, SSL_OP_ALL); |
| 1366 | * Setting read ahead solves this problem. | 1284 | if (hack) |
| 1285 | SSL_CTX_set_options(ctx, SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG); | ||
| 1286 | SSL_CTX_set_options(ctx, off); | ||
| 1287 | /* | ||
| 1288 | * DTLS: partial reads end up discarding unread UDP bytes :-( Setting | ||
| 1289 | * read ahead solves this problem. | ||
| 1367 | */ | 1290 | */ |
| 1368 | if (socket_type == SOCK_DGRAM) SSL_CTX_set_read_ahead(ctx, 1); | 1291 | if (socket_type == SOCK_DGRAM) |
| 1292 | SSL_CTX_set_read_ahead(ctx, 1); | ||
| 1369 | 1293 | ||
| 1370 | if (state) SSL_CTX_set_info_callback(ctx,apps_ssl_info_callback); | 1294 | if (state) |
| 1295 | SSL_CTX_set_info_callback(ctx, apps_ssl_info_callback); | ||
| 1371 | if (no_cache) | 1296 | if (no_cache) |
| 1372 | SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF); | 1297 | SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF); |
| 1373 | else | 1298 | else |
| 1374 | SSL_CTX_sess_set_cache_size(ctx,128); | 1299 | SSL_CTX_sess_set_cache_size(ctx, 128); |
| 1375 | 1300 | ||
| 1376 | #ifndef OPENSSL_NO_SRTP | 1301 | #ifndef OPENSSL_NO_SRTP |
| 1377 | if (srtp_profiles != NULL) | 1302 | if (srtp_profiles != NULL) |
| @@ -1379,232 +1304,205 @@ bad: | |||
| 1379 | #endif | 1304 | #endif |
| 1380 | 1305 | ||
| 1381 | #if 0 | 1306 | #if 0 |
| 1382 | if (cipher == NULL) cipher=getenv("SSL_CIPHER"); | 1307 | if (cipher == NULL) |
| 1308 | cipher = getenv("SSL_CIPHER"); | ||
| 1383 | #endif | 1309 | #endif |
| 1384 | 1310 | ||
| 1385 | #if 0 | 1311 | #if 0 |
| 1386 | if (s_cert_file == NULL) | 1312 | if (s_cert_file == NULL) { |
| 1387 | { | 1313 | BIO_printf(bio_err, "You must specify a certificate file for the server to use\n"); |
| 1388 | BIO_printf(bio_err,"You must specify a certificate file for the server to use\n"); | ||
| 1389 | goto end; | 1314 | goto end; |
| 1390 | } | 1315 | } |
| 1391 | #endif | 1316 | #endif |
| 1392 | 1317 | ||
| 1393 | if ((!SSL_CTX_load_verify_locations(ctx,CAfile,CApath)) || | 1318 | if ((!SSL_CTX_load_verify_locations(ctx, CAfile, CApath)) || |
| 1394 | (!SSL_CTX_set_default_verify_paths(ctx))) | 1319 | (!SSL_CTX_set_default_verify_paths(ctx))) { |
| 1395 | { | ||
| 1396 | /* BIO_printf(bio_err,"X509_load_verify_locations\n"); */ | 1320 | /* BIO_printf(bio_err,"X509_load_verify_locations\n"); */ |
| 1397 | ERR_print_errors(bio_err); | 1321 | ERR_print_errors(bio_err); |
| 1398 | /* goto end; */ | 1322 | /* goto end; */ |
| 1399 | } | 1323 | } |
| 1400 | if (vpm) | 1324 | if (vpm) |
| 1401 | SSL_CTX_set1_param(ctx, vpm); | 1325 | SSL_CTX_set1_param(ctx, vpm); |
| 1402 | 1326 | ||
| 1403 | #ifndef OPENSSL_NO_TLSEXT | 1327 | #ifndef OPENSSL_NO_TLSEXT |
| 1404 | if (s_cert2) | 1328 | if (s_cert2) { |
| 1405 | { | 1329 | ctx2 = SSL_CTX_new(meth); |
| 1406 | ctx2=SSL_CTX_new(meth); | 1330 | if (ctx2 == NULL) { |
| 1407 | if (ctx2 == NULL) | ||
| 1408 | { | ||
| 1409 | ERR_print_errors(bio_err); | 1331 | ERR_print_errors(bio_err); |
| 1410 | goto end; | 1332 | goto end; |
| 1411 | } | ||
| 1412 | } | 1333 | } |
| 1413 | 1334 | } | |
| 1414 | if (ctx2) | 1335 | if (ctx2) { |
| 1415 | { | 1336 | BIO_printf(bio_s_out, "Setting secondary ctx parameters\n"); |
| 1416 | BIO_printf(bio_s_out,"Setting secondary ctx parameters\n"); | 1337 | |
| 1417 | 1338 | if (session_id_prefix) { | |
| 1418 | if (session_id_prefix) | 1339 | if (strlen(session_id_prefix) >= 32) |
| 1419 | { | ||
| 1420 | if(strlen(session_id_prefix) >= 32) | ||
| 1421 | BIO_printf(bio_err, | 1340 | BIO_printf(bio_err, |
| 1422 | "warning: id_prefix is too long, only one new session will be possible\n"); | 1341 | "warning: id_prefix is too long, only one new session will be possible\n"); |
| 1423 | else if(strlen(session_id_prefix) >= 16) | 1342 | else if (strlen(session_id_prefix) >= 16) |
| 1424 | BIO_printf(bio_err, | 1343 | BIO_printf(bio_err, |
| 1425 | "warning: id_prefix is too long if you use SSLv2\n"); | 1344 | "warning: id_prefix is too long if you use SSLv2\n"); |
| 1426 | if(!SSL_CTX_set_generate_session_id(ctx2, generate_session_id)) | 1345 | if (!SSL_CTX_set_generate_session_id(ctx2, generate_session_id)) { |
| 1427 | { | 1346 | BIO_printf(bio_err, "error setting 'id_prefix'\n"); |
| 1428 | BIO_printf(bio_err,"error setting 'id_prefix'\n"); | ||
| 1429 | ERR_print_errors(bio_err); | 1347 | ERR_print_errors(bio_err); |
| 1430 | goto end; | 1348 | goto end; |
| 1431 | } | ||
| 1432 | BIO_printf(bio_err,"id_prefix '%s' set.\n", session_id_prefix); | ||
| 1433 | } | 1349 | } |
| 1434 | SSL_CTX_set_quiet_shutdown(ctx2,1); | 1350 | BIO_printf(bio_err, "id_prefix '%s' set.\n", session_id_prefix); |
| 1435 | if (bugs) SSL_CTX_set_options(ctx2,SSL_OP_ALL); | 1351 | } |
| 1436 | if (hack) SSL_CTX_set_options(ctx2,SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG); | 1352 | SSL_CTX_set_quiet_shutdown(ctx2, 1); |
| 1437 | SSL_CTX_set_options(ctx2,off); | 1353 | if (bugs) |
| 1438 | /* DTLS: partial reads end up discarding unread UDP bytes :-( | 1354 | SSL_CTX_set_options(ctx2, SSL_OP_ALL); |
| 1355 | if (hack) | ||
| 1356 | SSL_CTX_set_options(ctx2, SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG); | ||
| 1357 | SSL_CTX_set_options(ctx2, off); | ||
| 1358 | /* | ||
| 1359 | * DTLS: partial reads end up discarding unread UDP bytes :-( | ||
| 1439 | * Setting read ahead solves this problem. | 1360 | * Setting read ahead solves this problem. |
| 1440 | */ | 1361 | */ |
| 1441 | if (socket_type == SOCK_DGRAM) SSL_CTX_set_read_ahead(ctx2, 1); | 1362 | if (socket_type == SOCK_DGRAM) |
| 1363 | SSL_CTX_set_read_ahead(ctx2, 1); | ||
| 1442 | 1364 | ||
| 1443 | if (state) SSL_CTX_set_info_callback(ctx2,apps_ssl_info_callback); | 1365 | if (state) |
| 1366 | SSL_CTX_set_info_callback(ctx2, apps_ssl_info_callback); | ||
| 1444 | 1367 | ||
| 1445 | if (no_cache) | 1368 | if (no_cache) |
| 1446 | SSL_CTX_set_session_cache_mode(ctx2,SSL_SESS_CACHE_OFF); | 1369 | SSL_CTX_set_session_cache_mode(ctx2, SSL_SESS_CACHE_OFF); |
| 1447 | else | 1370 | else |
| 1448 | SSL_CTX_sess_set_cache_size(ctx2,128); | 1371 | SSL_CTX_sess_set_cache_size(ctx2, 128); |
| 1449 | 1372 | ||
| 1450 | if ((!SSL_CTX_load_verify_locations(ctx2,CAfile,CApath)) || | 1373 | if ((!SSL_CTX_load_verify_locations(ctx2, CAfile, CApath)) || |
| 1451 | (!SSL_CTX_set_default_verify_paths(ctx2))) | 1374 | (!SSL_CTX_set_default_verify_paths(ctx2))) { |
| 1452 | { | ||
| 1453 | ERR_print_errors(bio_err); | 1375 | ERR_print_errors(bio_err); |
| 1454 | } | 1376 | } |
| 1455 | if (vpm) | 1377 | if (vpm) |
| 1456 | SSL_CTX_set1_param(ctx2, vpm); | 1378 | SSL_CTX_set1_param(ctx2, vpm); |
| 1457 | } | 1379 | } |
| 1458 | 1380 | #ifndef OPENSSL_NO_NEXTPROTONEG | |
| 1459 | # ifndef OPENSSL_NO_NEXTPROTONEG | ||
| 1460 | if (next_proto.data) | 1381 | if (next_proto.data) |
| 1461 | SSL_CTX_set_next_protos_advertised_cb(ctx, next_proto_cb, &next_proto); | 1382 | SSL_CTX_set_next_protos_advertised_cb(ctx, next_proto_cb, &next_proto); |
| 1462 | # endif | 1383 | #endif |
| 1463 | #endif | 1384 | #endif |
| 1464 | 1385 | ||
| 1465 | #ifndef OPENSSL_NO_DH | 1386 | #ifndef OPENSSL_NO_DH |
| 1466 | if (!no_dhe) | 1387 | if (!no_dhe) { |
| 1467 | { | 1388 | DH *dh = NULL; |
| 1468 | DH *dh=NULL; | ||
| 1469 | 1389 | ||
| 1470 | if (dhfile) | 1390 | if (dhfile) |
| 1471 | dh = load_dh_param(dhfile); | 1391 | dh = load_dh_param(dhfile); |
| 1472 | else if (s_cert_file) | 1392 | else if (s_cert_file) |
| 1473 | dh = load_dh_param(s_cert_file); | 1393 | dh = load_dh_param(s_cert_file); |
| 1474 | 1394 | ||
| 1475 | if (dh != NULL) | 1395 | if (dh != NULL) { |
| 1476 | { | 1396 | BIO_printf(bio_s_out, "Setting temp DH parameters\n"); |
| 1477 | BIO_printf(bio_s_out,"Setting temp DH parameters\n"); | 1397 | } else { |
| 1478 | } | 1398 | BIO_printf(bio_s_out, "Using default temp DH parameters\n"); |
| 1479 | else | 1399 | dh = get_dh512(); |
| 1480 | { | 1400 | } |
| 1481 | BIO_printf(bio_s_out,"Using default temp DH parameters\n"); | 1401 | (void) BIO_flush(bio_s_out); |
| 1482 | dh=get_dh512(); | ||
| 1483 | } | ||
| 1484 | (void)BIO_flush(bio_s_out); | ||
| 1485 | 1402 | ||
| 1486 | SSL_CTX_set_tmp_dh(ctx,dh); | 1403 | SSL_CTX_set_tmp_dh(ctx, dh); |
| 1487 | #ifndef OPENSSL_NO_TLSEXT | 1404 | #ifndef OPENSSL_NO_TLSEXT |
| 1488 | if (ctx2) | 1405 | if (ctx2) { |
| 1489 | { | 1406 | if (!dhfile) { |
| 1490 | if (!dhfile) | 1407 | DH *dh2 = load_dh_param(s_cert_file2); |
| 1491 | { | 1408 | if (dh2 != NULL) { |
| 1492 | DH *dh2=load_dh_param(s_cert_file2); | 1409 | BIO_printf(bio_s_out, "Setting temp DH parameters\n"); |
| 1493 | if (dh2 != NULL) | 1410 | (void) BIO_flush(bio_s_out); |
| 1494 | { | ||
| 1495 | BIO_printf(bio_s_out,"Setting temp DH parameters\n"); | ||
| 1496 | (void)BIO_flush(bio_s_out); | ||
| 1497 | 1411 | ||
| 1498 | DH_free(dh); | 1412 | DH_free(dh); |
| 1499 | dh = dh2; | 1413 | dh = dh2; |
| 1500 | } | ||
| 1501 | } | 1414 | } |
| 1502 | SSL_CTX_set_tmp_dh(ctx2,dh); | ||
| 1503 | } | 1415 | } |
| 1416 | SSL_CTX_set_tmp_dh(ctx2, dh); | ||
| 1417 | } | ||
| 1504 | #endif | 1418 | #endif |
| 1505 | DH_free(dh); | 1419 | DH_free(dh); |
| 1506 | } | 1420 | } |
| 1507 | #endif | 1421 | #endif |
| 1508 | 1422 | ||
| 1509 | #ifndef OPENSSL_NO_ECDH | 1423 | #ifndef OPENSSL_NO_ECDH |
| 1510 | if (!no_ecdhe) | 1424 | if (!no_ecdhe) { |
| 1511 | { | 1425 | EC_KEY *ecdh = NULL; |
| 1512 | EC_KEY *ecdh=NULL; | ||
| 1513 | 1426 | ||
| 1514 | if (named_curve) | 1427 | if (named_curve) { |
| 1515 | { | ||
| 1516 | int nid = OBJ_sn2nid(named_curve); | 1428 | int nid = OBJ_sn2nid(named_curve); |
| 1517 | 1429 | ||
| 1518 | if (nid == 0) | 1430 | if (nid == 0) { |
| 1519 | { | 1431 | BIO_printf(bio_err, "unknown curve name (%s)\n", |
| 1520 | BIO_printf(bio_err, "unknown curve name (%s)\n", | 1432 | named_curve); |
| 1521 | named_curve); | ||
| 1522 | goto end; | 1433 | goto end; |
| 1523 | } | 1434 | } |
| 1524 | ecdh = EC_KEY_new_by_curve_name(nid); | 1435 | ecdh = EC_KEY_new_by_curve_name(nid); |
| 1525 | if (ecdh == NULL) | 1436 | if (ecdh == NULL) { |
| 1526 | { | 1437 | BIO_printf(bio_err, "unable to create curve (%s)\n", |
| 1527 | BIO_printf(bio_err, "unable to create curve (%s)\n", | 1438 | named_curve); |
| 1528 | named_curve); | ||
| 1529 | goto end; | 1439 | goto end; |
| 1530 | } | ||
| 1531 | } | 1440 | } |
| 1532 | 1441 | } | |
| 1533 | if (ecdh != NULL) | 1442 | if (ecdh != NULL) { |
| 1534 | { | 1443 | BIO_printf(bio_s_out, "Setting temp ECDH parameters\n"); |
| 1535 | BIO_printf(bio_s_out,"Setting temp ECDH parameters\n"); | 1444 | } else { |
| 1536 | } | 1445 | BIO_printf(bio_s_out, "Using default temp ECDH parameters\n"); |
| 1537 | else | ||
| 1538 | { | ||
| 1539 | BIO_printf(bio_s_out,"Using default temp ECDH parameters\n"); | ||
| 1540 | ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1); | 1446 | ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1); |
| 1541 | if (ecdh == NULL) | 1447 | if (ecdh == NULL) { |
| 1542 | { | ||
| 1543 | BIO_printf(bio_err, "unable to create curve (nistp256)\n"); | 1448 | BIO_printf(bio_err, "unable to create curve (nistp256)\n"); |
| 1544 | goto end; | 1449 | goto end; |
| 1545 | } | ||
| 1546 | } | 1450 | } |
| 1547 | (void)BIO_flush(bio_s_out); | 1451 | } |
| 1452 | (void) BIO_flush(bio_s_out); | ||
| 1548 | 1453 | ||
| 1549 | SSL_CTX_set_tmp_ecdh(ctx,ecdh); | 1454 | SSL_CTX_set_tmp_ecdh(ctx, ecdh); |
| 1550 | #ifndef OPENSSL_NO_TLSEXT | 1455 | #ifndef OPENSSL_NO_TLSEXT |
| 1551 | if (ctx2) | 1456 | if (ctx2) |
| 1552 | SSL_CTX_set_tmp_ecdh(ctx2,ecdh); | 1457 | SSL_CTX_set_tmp_ecdh(ctx2, ecdh); |
| 1553 | #endif | 1458 | #endif |
| 1554 | EC_KEY_free(ecdh); | 1459 | EC_KEY_free(ecdh); |
| 1555 | } | 1460 | } |
| 1556 | #endif | 1461 | #endif |
| 1557 | 1462 | ||
| 1558 | if (!set_cert_key_stuff(ctx, s_cert, s_key)) | 1463 | if (!set_cert_key_stuff(ctx, s_cert, s_key)) |
| 1559 | goto end; | 1464 | goto end; |
| 1560 | #ifndef OPENSSL_NO_TLSEXT | 1465 | #ifndef OPENSSL_NO_TLSEXT |
| 1561 | if (ctx2 && !set_cert_key_stuff(ctx2,s_cert2,s_key2)) | 1466 | if (ctx2 && !set_cert_key_stuff(ctx2, s_cert2, s_key2)) |
| 1562 | goto end; | 1467 | goto end; |
| 1563 | #endif | 1468 | #endif |
| 1564 | if (s_dcert != NULL) | 1469 | if (s_dcert != NULL) { |
| 1565 | { | ||
| 1566 | if (!set_cert_key_stuff(ctx, s_dcert, s_dkey)) | 1470 | if (!set_cert_key_stuff(ctx, s_dcert, s_dkey)) |
| 1567 | goto end; | 1471 | goto end; |
| 1568 | } | 1472 | } |
| 1569 | |||
| 1570 | #ifndef OPENSSL_NO_RSA | 1473 | #ifndef OPENSSL_NO_RSA |
| 1571 | #if 1 | 1474 | #if 1 |
| 1572 | if (!no_tmp_rsa) | 1475 | if (!no_tmp_rsa) { |
| 1573 | { | 1476 | SSL_CTX_set_tmp_rsa_callback(ctx, tmp_rsa_cb); |
| 1574 | SSL_CTX_set_tmp_rsa_callback(ctx,tmp_rsa_cb); | ||
| 1575 | #ifndef OPENSSL_NO_TLSEXT | 1477 | #ifndef OPENSSL_NO_TLSEXT |
| 1576 | if (ctx2) | 1478 | if (ctx2) |
| 1577 | SSL_CTX_set_tmp_rsa_callback(ctx2,tmp_rsa_cb); | 1479 | SSL_CTX_set_tmp_rsa_callback(ctx2, tmp_rsa_cb); |
| 1578 | #endif | 1480 | #endif |
| 1579 | } | 1481 | } |
| 1580 | #else | 1482 | #else |
| 1581 | if (!no_tmp_rsa && SSL_CTX_need_tmp_RSA(ctx)) | 1483 | if (!no_tmp_rsa && SSL_CTX_need_tmp_RSA(ctx)) { |
| 1582 | { | ||
| 1583 | RSA *rsa; | 1484 | RSA *rsa; |
| 1584 | 1485 | ||
| 1585 | BIO_printf(bio_s_out,"Generating temp (512 bit) RSA key..."); | 1486 | BIO_printf(bio_s_out, "Generating temp (512 bit) RSA key..."); |
| 1586 | BIO_flush(bio_s_out); | 1487 | BIO_flush(bio_s_out); |
| 1587 | 1488 | ||
| 1588 | rsa=RSA_generate_key(512,RSA_F4,NULL); | 1489 | rsa = RSA_generate_key(512, RSA_F4, NULL); |
| 1589 | 1490 | ||
| 1590 | if (!SSL_CTX_set_tmp_rsa(ctx,rsa)) | 1491 | if (!SSL_CTX_set_tmp_rsa(ctx, rsa)) { |
| 1591 | { | ||
| 1592 | ERR_print_errors(bio_err); | 1492 | ERR_print_errors(bio_err); |
| 1593 | goto end; | 1493 | goto end; |
| 1594 | } | 1494 | } |
| 1595 | #ifndef OPENSSL_NO_TLSEXT | 1495 | #ifndef OPENSSL_NO_TLSEXT |
| 1596 | if (ctx2) | 1496 | if (ctx2) { |
| 1597 | { | 1497 | if (!SSL_CTX_set_tmp_rsa(ctx2, rsa)) { |
| 1598 | if (!SSL_CTX_set_tmp_rsa(ctx2,rsa)) | 1498 | ERR_print_errors(bio_err); |
| 1599 | { | 1499 | goto end; |
| 1600 | ERR_print_errors(bio_err); | 1500 | } |
| 1601 | goto end; | 1501 | } |
| 1602 | } | ||
| 1603 | } | ||
| 1604 | #endif | 1502 | #endif |
| 1605 | RSA_free(rsa); | 1503 | RSA_free(rsa); |
| 1606 | BIO_printf(bio_s_out,"\n"); | 1504 | BIO_printf(bio_s_out, "\n"); |
| 1607 | } | 1505 | } |
| 1608 | #endif | 1506 | #endif |
| 1609 | #endif | 1507 | #endif |
| 1610 | 1508 | ||
| @@ -1614,98 +1512,88 @@ bad: | |||
| 1614 | #else | 1512 | #else |
| 1615 | if (psk_key != NULL || jpake_secret) | 1513 | if (psk_key != NULL || jpake_secret) |
| 1616 | #endif | 1514 | #endif |
| 1617 | { | 1515 | { |
| 1618 | if (s_debug) | 1516 | if (s_debug) |
| 1619 | BIO_printf(bio_s_out, "PSK key given or JPAKE in use, setting server callback\n"); | 1517 | BIO_printf(bio_s_out, "PSK key given or JPAKE in use, setting server callback\n"); |
| 1620 | SSL_CTX_set_psk_server_callback(ctx, psk_server_cb); | 1518 | SSL_CTX_set_psk_server_callback(ctx, psk_server_cb); |
| 1621 | } | 1519 | } |
| 1622 | 1520 | if (!SSL_CTX_use_psk_identity_hint(ctx, psk_identity_hint)) { | |
| 1623 | if (!SSL_CTX_use_psk_identity_hint(ctx, psk_identity_hint)) | 1521 | BIO_printf(bio_err, "error setting PSK identity hint to context\n"); |
| 1624 | { | ||
| 1625 | BIO_printf(bio_err,"error setting PSK identity hint to context\n"); | ||
| 1626 | ERR_print_errors(bio_err); | 1522 | ERR_print_errors(bio_err); |
| 1627 | goto end; | 1523 | goto end; |
| 1628 | } | 1524 | } |
| 1629 | #endif | 1525 | #endif |
| 1630 | 1526 | ||
| 1631 | if (cipher != NULL) | 1527 | if (cipher != NULL) { |
| 1632 | { | 1528 | if (!SSL_CTX_set_cipher_list(ctx, cipher)) { |
| 1633 | if(!SSL_CTX_set_cipher_list(ctx,cipher)) | 1529 | BIO_printf(bio_err, "error setting cipher list\n"); |
| 1634 | { | ||
| 1635 | BIO_printf(bio_err,"error setting cipher list\n"); | ||
| 1636 | ERR_print_errors(bio_err); | 1530 | ERR_print_errors(bio_err); |
| 1637 | goto end; | 1531 | goto end; |
| 1638 | } | 1532 | } |
| 1639 | #ifndef OPENSSL_NO_TLSEXT | 1533 | #ifndef OPENSSL_NO_TLSEXT |
| 1640 | if (ctx2 && !SSL_CTX_set_cipher_list(ctx2,cipher)) | 1534 | if (ctx2 && !SSL_CTX_set_cipher_list(ctx2, cipher)) { |
| 1641 | { | 1535 | BIO_printf(bio_err, "error setting cipher list\n"); |
| 1642 | BIO_printf(bio_err,"error setting cipher list\n"); | ||
| 1643 | ERR_print_errors(bio_err); | 1536 | ERR_print_errors(bio_err); |
| 1644 | goto end; | 1537 | goto end; |
| 1645 | } | ||
| 1646 | #endif | ||
| 1647 | } | 1538 | } |
| 1648 | SSL_CTX_set_verify(ctx,s_server_verify,verify_callback); | 1539 | #endif |
| 1649 | SSL_CTX_set_session_id_context(ctx,(void*)&s_server_session_id_context, | 1540 | } |
| 1650 | sizeof s_server_session_id_context); | 1541 | SSL_CTX_set_verify(ctx, s_server_verify, verify_callback); |
| 1542 | SSL_CTX_set_session_id_context(ctx, (void *) &s_server_session_id_context, | ||
| 1543 | sizeof s_server_session_id_context); | ||
| 1651 | 1544 | ||
| 1652 | /* Set DTLS cookie generation and verification callbacks */ | 1545 | /* Set DTLS cookie generation and verification callbacks */ |
| 1653 | SSL_CTX_set_cookie_generate_cb(ctx, generate_cookie_callback); | 1546 | SSL_CTX_set_cookie_generate_cb(ctx, generate_cookie_callback); |
| 1654 | SSL_CTX_set_cookie_verify_cb(ctx, verify_cookie_callback); | 1547 | SSL_CTX_set_cookie_verify_cb(ctx, verify_cookie_callback); |
| 1655 | 1548 | ||
| 1656 | #ifndef OPENSSL_NO_TLSEXT | 1549 | #ifndef OPENSSL_NO_TLSEXT |
| 1657 | if (ctx2) | 1550 | if (ctx2) { |
| 1658 | { | 1551 | SSL_CTX_set_verify(ctx2, s_server_verify, verify_callback); |
| 1659 | SSL_CTX_set_verify(ctx2,s_server_verify,verify_callback); | 1552 | SSL_CTX_set_session_id_context(ctx2, (void *) &s_server_session_id_context, |
| 1660 | SSL_CTX_set_session_id_context(ctx2,(void*)&s_server_session_id_context, | 1553 | sizeof s_server_session_id_context); |
| 1661 | sizeof s_server_session_id_context); | ||
| 1662 | 1554 | ||
| 1663 | tlsextcbp.biodebug = bio_s_out; | 1555 | tlsextcbp.biodebug = bio_s_out; |
| 1664 | SSL_CTX_set_tlsext_servername_callback(ctx2, ssl_servername_cb); | 1556 | SSL_CTX_set_tlsext_servername_callback(ctx2, ssl_servername_cb); |
| 1665 | SSL_CTX_set_tlsext_servername_arg(ctx2, &tlsextcbp); | 1557 | SSL_CTX_set_tlsext_servername_arg(ctx2, &tlsextcbp); |
| 1666 | SSL_CTX_set_tlsext_servername_callback(ctx, ssl_servername_cb); | 1558 | SSL_CTX_set_tlsext_servername_callback(ctx, ssl_servername_cb); |
| 1667 | SSL_CTX_set_tlsext_servername_arg(ctx, &tlsextcbp); | 1559 | SSL_CTX_set_tlsext_servername_arg(ctx, &tlsextcbp); |
| 1668 | } | 1560 | } |
| 1669 | #endif | 1561 | #endif |
| 1670 | 1562 | ||
| 1671 | #ifndef OPENSSL_NO_SRP | 1563 | #ifndef OPENSSL_NO_SRP |
| 1672 | if (srp_verifier_file != NULL) | 1564 | if (srp_verifier_file != NULL) { |
| 1673 | { | ||
| 1674 | srp_callback_parm.vb = SRP_VBASE_new(srpuserseed); | 1565 | srp_callback_parm.vb = SRP_VBASE_new(srpuserseed); |
| 1675 | srp_callback_parm.user = NULL; | 1566 | srp_callback_parm.user = NULL; |
| 1676 | srp_callback_parm.login = NULL; | 1567 | srp_callback_parm.login = NULL; |
| 1677 | if ((ret = SRP_VBASE_init(srp_callback_parm.vb, srp_verifier_file)) != SRP_NO_ERROR) | 1568 | if ((ret = SRP_VBASE_init(srp_callback_parm.vb, srp_verifier_file)) != SRP_NO_ERROR) { |
| 1678 | { | ||
| 1679 | BIO_printf(bio_err, | 1569 | BIO_printf(bio_err, |
| 1680 | "Cannot initialize SRP verifier file \"%s\":ret=%d\n", | 1570 | "Cannot initialize SRP verifier file \"%s\":ret=%d\n", |
| 1681 | srp_verifier_file, ret); | 1571 | srp_verifier_file, ret); |
| 1682 | goto end; | 1572 | goto end; |
| 1683 | } | ||
| 1684 | SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE,verify_callback); | ||
| 1685 | SSL_CTX_set_srp_cb_arg(ctx, &srp_callback_parm); | ||
| 1686 | SSL_CTX_set_srp_username_callback(ctx, ssl_srp_server_param_cb); | ||
| 1687 | } | 1573 | } |
| 1688 | else | 1574 | SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, verify_callback); |
| 1575 | SSL_CTX_set_srp_cb_arg(ctx, &srp_callback_parm); | ||
| 1576 | SSL_CTX_set_srp_username_callback(ctx, ssl_srp_server_param_cb); | ||
| 1577 | } else | ||
| 1689 | #endif | 1578 | #endif |
| 1690 | if (CAfile != NULL) | 1579 | if (CAfile != NULL) { |
| 1691 | { | 1580 | SSL_CTX_set_client_CA_list(ctx, SSL_load_client_CA_file(CAfile)); |
| 1692 | SSL_CTX_set_client_CA_list(ctx,SSL_load_client_CA_file(CAfile)); | ||
| 1693 | #ifndef OPENSSL_NO_TLSEXT | 1581 | #ifndef OPENSSL_NO_TLSEXT |
| 1694 | if (ctx2) | 1582 | if (ctx2) |
| 1695 | SSL_CTX_set_client_CA_list(ctx2,SSL_load_client_CA_file(CAfile)); | 1583 | SSL_CTX_set_client_CA_list(ctx2, SSL_load_client_CA_file(CAfile)); |
| 1696 | #endif | 1584 | #endif |
| 1697 | } | 1585 | } |
| 1698 | 1586 | BIO_printf(bio_s_out, "ACCEPT\n"); | |
| 1699 | BIO_printf(bio_s_out,"ACCEPT\n"); | 1587 | (void) BIO_flush(bio_s_out); |
| 1700 | (void)BIO_flush(bio_s_out); | ||
| 1701 | if (www) | 1588 | if (www) |
| 1702 | do_server(port,socket_type,&accept_socket,www_body, context); | 1589 | do_server(port, socket_type, &accept_socket, www_body, context); |
| 1703 | else | 1590 | else |
| 1704 | do_server(port,socket_type,&accept_socket,sv_body, context); | 1591 | do_server(port, socket_type, &accept_socket, sv_body, context); |
| 1705 | print_stats(bio_s_out,ctx); | 1592 | print_stats(bio_s_out, ctx); |
| 1706 | ret=0; | 1593 | ret = 0; |
| 1707 | end: | 1594 | end: |
| 1708 | if (ctx != NULL) SSL_CTX_free(ctx); | 1595 | if (ctx != NULL) |
| 1596 | SSL_CTX_free(ctx); | ||
| 1709 | if (s_cert) | 1597 | if (s_cert) |
| 1710 | X509_free(s_cert); | 1598 | X509_free(s_cert); |
| 1711 | if (s_dcert) | 1599 | if (s_dcert) |
| @@ -1727,54 +1615,56 @@ end: | |||
| 1727 | free(tlscstatp.port); | 1615 | free(tlscstatp.port); |
| 1728 | if (tlscstatp.path) | 1616 | if (tlscstatp.path) |
| 1729 | free(tlscstatp.path); | 1617 | free(tlscstatp.path); |
| 1730 | if (ctx2 != NULL) SSL_CTX_free(ctx2); | 1618 | if (ctx2 != NULL) |
| 1619 | SSL_CTX_free(ctx2); | ||
| 1731 | if (s_cert2) | 1620 | if (s_cert2) |
| 1732 | X509_free(s_cert2); | 1621 | X509_free(s_cert2); |
| 1733 | if (s_key2) | 1622 | if (s_key2) |
| 1734 | EVP_PKEY_free(s_key2); | 1623 | EVP_PKEY_free(s_key2); |
| 1735 | #endif | 1624 | #endif |
| 1736 | if (bio_s_out != NULL) | 1625 | if (bio_s_out != NULL) { |
| 1737 | { | 1626 | BIO_free(bio_s_out); |
| 1738 | BIO_free(bio_s_out); | 1627 | bio_s_out = NULL; |
| 1739 | bio_s_out=NULL; | ||
| 1740 | } | ||
| 1741 | apps_shutdown(); | ||
| 1742 | return(ret); | ||
| 1743 | } | 1628 | } |
| 1629 | apps_shutdown(); | ||
| 1630 | return (ret); | ||
| 1631 | } | ||
| 1744 | 1632 | ||
| 1745 | static void print_stats(BIO *bio, SSL_CTX *ssl_ctx) | 1633 | static void |
| 1746 | { | 1634 | print_stats(BIO * bio, SSL_CTX * ssl_ctx) |
| 1747 | BIO_printf(bio,"%4ld items in the session cache\n", | 1635 | { |
| 1748 | SSL_CTX_sess_number(ssl_ctx)); | 1636 | BIO_printf(bio, "%4ld items in the session cache\n", |
| 1749 | BIO_printf(bio,"%4ld client connects (SSL_connect())\n", | 1637 | SSL_CTX_sess_number(ssl_ctx)); |
| 1750 | SSL_CTX_sess_connect(ssl_ctx)); | 1638 | BIO_printf(bio, "%4ld client connects (SSL_connect())\n", |
| 1751 | BIO_printf(bio,"%4ld client renegotiates (SSL_connect())\n", | 1639 | SSL_CTX_sess_connect(ssl_ctx)); |
| 1752 | SSL_CTX_sess_connect_renegotiate(ssl_ctx)); | 1640 | BIO_printf(bio, "%4ld client renegotiates (SSL_connect())\n", |
| 1753 | BIO_printf(bio,"%4ld client connects that finished\n", | 1641 | SSL_CTX_sess_connect_renegotiate(ssl_ctx)); |
| 1754 | SSL_CTX_sess_connect_good(ssl_ctx)); | 1642 | BIO_printf(bio, "%4ld client connects that finished\n", |
| 1755 | BIO_printf(bio,"%4ld server accepts (SSL_accept())\n", | 1643 | SSL_CTX_sess_connect_good(ssl_ctx)); |
| 1756 | SSL_CTX_sess_accept(ssl_ctx)); | 1644 | BIO_printf(bio, "%4ld server accepts (SSL_accept())\n", |
| 1757 | BIO_printf(bio,"%4ld server renegotiates (SSL_accept())\n", | 1645 | SSL_CTX_sess_accept(ssl_ctx)); |
| 1758 | SSL_CTX_sess_accept_renegotiate(ssl_ctx)); | 1646 | BIO_printf(bio, "%4ld server renegotiates (SSL_accept())\n", |
| 1759 | BIO_printf(bio,"%4ld server accepts that finished\n", | 1647 | SSL_CTX_sess_accept_renegotiate(ssl_ctx)); |
| 1760 | SSL_CTX_sess_accept_good(ssl_ctx)); | 1648 | BIO_printf(bio, "%4ld server accepts that finished\n", |
| 1761 | BIO_printf(bio,"%4ld session cache hits\n",SSL_CTX_sess_hits(ssl_ctx)); | 1649 | SSL_CTX_sess_accept_good(ssl_ctx)); |
| 1762 | BIO_printf(bio,"%4ld session cache misses\n",SSL_CTX_sess_misses(ssl_ctx)); | 1650 | BIO_printf(bio, "%4ld session cache hits\n", SSL_CTX_sess_hits(ssl_ctx)); |
| 1763 | BIO_printf(bio,"%4ld session cache timeouts\n",SSL_CTX_sess_timeouts(ssl_ctx)); | 1651 | BIO_printf(bio, "%4ld session cache misses\n", SSL_CTX_sess_misses(ssl_ctx)); |
| 1764 | BIO_printf(bio,"%4ld callback cache hits\n",SSL_CTX_sess_cb_hits(ssl_ctx)); | 1652 | BIO_printf(bio, "%4ld session cache timeouts\n", SSL_CTX_sess_timeouts(ssl_ctx)); |
| 1765 | BIO_printf(bio,"%4ld cache full overflows (%ld allowed)\n", | 1653 | BIO_printf(bio, "%4ld callback cache hits\n", SSL_CTX_sess_cb_hits(ssl_ctx)); |
| 1766 | SSL_CTX_sess_cache_full(ssl_ctx), | 1654 | BIO_printf(bio, "%4ld cache full overflows (%ld allowed)\n", |
| 1767 | SSL_CTX_sess_get_cache_size(ssl_ctx)); | 1655 | SSL_CTX_sess_cache_full(ssl_ctx), |
| 1768 | } | 1656 | SSL_CTX_sess_get_cache_size(ssl_ctx)); |
| 1769 | 1657 | } | |
| 1770 | static int sv_body(char *hostname, int s, unsigned char *context) | 1658 | |
| 1771 | { | 1659 | static int |
| 1772 | char *buf=NULL; | 1660 | sv_body(char *hostname, int s, unsigned char *context) |
| 1661 | { | ||
| 1662 | char *buf = NULL; | ||
| 1773 | fd_set readfds; | 1663 | fd_set readfds; |
| 1774 | int ret=1,width; | 1664 | int ret = 1, width; |
| 1775 | int k,i; | 1665 | int k, i; |
| 1776 | unsigned long l; | 1666 | unsigned long l; |
| 1777 | SSL *con=NULL; | 1667 | SSL *con = NULL; |
| 1778 | BIO *sbio; | 1668 | BIO *sbio; |
| 1779 | #ifndef OPENSSL_NO_KRB5 | 1669 | #ifndef OPENSSL_NO_KRB5 |
| 1780 | KSSL_CTX *kctx; | 1670 | KSSL_CTX *kctx; |
| @@ -1782,49 +1672,44 @@ static int sv_body(char *hostname, int s, unsigned char *context) | |||
| 1782 | struct timeval timeout; | 1672 | struct timeval timeout; |
| 1783 | struct timeval *timeoutp; | 1673 | struct timeval *timeoutp; |
| 1784 | 1674 | ||
| 1785 | if ((buf=malloc(bufsize)) == NULL) | 1675 | if ((buf = malloc(bufsize)) == NULL) { |
| 1786 | { | 1676 | BIO_printf(bio_err, "out of memory\n"); |
| 1787 | BIO_printf(bio_err,"out of memory\n"); | ||
| 1788 | goto err; | 1677 | goto err; |
| 1789 | } | 1678 | } |
| 1790 | #ifdef FIONBIO | 1679 | #ifdef FIONBIO |
| 1791 | if (s_nbio) | 1680 | if (s_nbio) { |
| 1792 | { | 1681 | unsigned long sl = 1; |
| 1793 | unsigned long sl=1; | ||
| 1794 | 1682 | ||
| 1795 | if (!s_quiet) | 1683 | if (!s_quiet) |
| 1796 | BIO_printf(bio_err,"turning on non blocking io\n"); | 1684 | BIO_printf(bio_err, "turning on non blocking io\n"); |
| 1797 | if (BIO_socket_ioctl(s,FIONBIO,&sl) < 0) | 1685 | if (BIO_socket_ioctl(s, FIONBIO, &sl) < 0) |
| 1798 | ERR_print_errors(bio_err); | 1686 | ERR_print_errors(bio_err); |
| 1799 | } | 1687 | } |
| 1800 | #endif | 1688 | #endif |
| 1801 | 1689 | ||
| 1802 | if (con == NULL) { | 1690 | if (con == NULL) { |
| 1803 | con=SSL_new(ctx); | 1691 | con = SSL_new(ctx); |
| 1804 | #ifndef OPENSSL_NO_TLSEXT | 1692 | #ifndef OPENSSL_NO_TLSEXT |
| 1805 | if (s_tlsextdebug) | 1693 | if (s_tlsextdebug) { |
| 1806 | { | 1694 | SSL_set_tlsext_debug_callback(con, tlsext_cb); |
| 1807 | SSL_set_tlsext_debug_callback(con, tlsext_cb); | 1695 | SSL_set_tlsext_debug_arg(con, bio_s_out); |
| 1808 | SSL_set_tlsext_debug_arg(con, bio_s_out); | ||
| 1809 | } | 1696 | } |
| 1810 | if (s_tlsextstatus) | 1697 | if (s_tlsextstatus) { |
| 1811 | { | 1698 | SSL_CTX_set_tlsext_status_cb(ctx, cert_status_cb); |
| 1812 | SSL_CTX_set_tlsext_status_cb(ctx, cert_status_cb); | 1699 | tlscstatp.err = bio_err; |
| 1813 | tlscstatp.err = bio_err; | 1700 | SSL_CTX_set_tlsext_status_arg(ctx, &tlscstatp); |
| 1814 | SSL_CTX_set_tlsext_status_arg(ctx, &tlscstatp); | ||
| 1815 | } | 1701 | } |
| 1816 | #endif | 1702 | #endif |
| 1817 | #ifndef OPENSSL_NO_KRB5 | 1703 | #ifndef OPENSSL_NO_KRB5 |
| 1818 | if ((kctx = kssl_ctx_new()) != NULL) | 1704 | if ((kctx = kssl_ctx_new()) != NULL) { |
| 1819 | { | ||
| 1820 | SSL_set0_kssl_ctx(con, kctx); | 1705 | SSL_set0_kssl_ctx(con, kctx); |
| 1821 | kssl_ctx_setstring(kctx, KSSL_SERVICE, KRB5SVC); | 1706 | kssl_ctx_setstring(kctx, KSSL_SERVICE, KRB5SVC); |
| 1822 | kssl_ctx_setstring(kctx, KSSL_KEYTAB, KRB5KEYTAB); | 1707 | kssl_ctx_setstring(kctx, KSSL_KEYTAB, KRB5KEYTAB); |
| 1823 | } | 1708 | } |
| 1824 | #endif /* OPENSSL_NO_KRB5 */ | 1709 | #endif /* OPENSSL_NO_KRB5 */ |
| 1825 | if(context) | 1710 | if (context) |
| 1826 | SSL_set_session_id_context(con, context, | 1711 | SSL_set_session_id_context(con, context, |
| 1827 | strlen((char *)context)); | 1712 | strlen((char *) context)); |
| 1828 | } | 1713 | } |
| 1829 | SSL_clear(con); | 1714 | SSL_clear(con); |
| 1830 | #if 0 | 1715 | #if 0 |
| @@ -1833,329 +1718,309 @@ static int sv_body(char *hostname, int s, unsigned char *context) | |||
| 1833 | #endif | 1718 | #endif |
| 1834 | #endif | 1719 | #endif |
| 1835 | 1720 | ||
| 1836 | if (SSL_version(con) == DTLS1_VERSION) | 1721 | if (SSL_version(con) == DTLS1_VERSION) { |
| 1837 | { | ||
| 1838 | 1722 | ||
| 1839 | sbio=BIO_new_dgram(s,BIO_NOCLOSE); | 1723 | sbio = BIO_new_dgram(s, BIO_NOCLOSE); |
| 1840 | 1724 | ||
| 1841 | if (enable_timeouts) | 1725 | if (enable_timeouts) { |
| 1842 | { | ||
| 1843 | timeout.tv_sec = 0; | 1726 | timeout.tv_sec = 0; |
| 1844 | timeout.tv_usec = DGRAM_RCV_TIMEOUT; | 1727 | timeout.tv_usec = DGRAM_RCV_TIMEOUT; |
| 1845 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_RECV_TIMEOUT, 0, &timeout); | 1728 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_RECV_TIMEOUT, 0, &timeout); |
| 1846 | 1729 | ||
| 1847 | timeout.tv_sec = 0; | 1730 | timeout.tv_sec = 0; |
| 1848 | timeout.tv_usec = DGRAM_SND_TIMEOUT; | 1731 | timeout.tv_usec = DGRAM_SND_TIMEOUT; |
| 1849 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, &timeout); | 1732 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, &timeout); |
| 1850 | } | 1733 | } |
| 1851 | 1734 | if (socket_mtu > 28) { | |
| 1852 | if (socket_mtu > 28) | ||
| 1853 | { | ||
| 1854 | SSL_set_options(con, SSL_OP_NO_QUERY_MTU); | 1735 | SSL_set_options(con, SSL_OP_NO_QUERY_MTU); |
| 1855 | SSL_set_mtu(con, socket_mtu - 28); | 1736 | SSL_set_mtu(con, socket_mtu - 28); |
| 1856 | } | 1737 | } else |
| 1857 | else | ||
| 1858 | /* want to do MTU discovery */ | 1738 | /* want to do MTU discovery */ |
| 1859 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_MTU_DISCOVER, 0, NULL); | 1739 | BIO_ctrl(sbio, BIO_CTRL_DGRAM_MTU_DISCOVER, 0, NULL); |
| 1860 | 1740 | ||
| 1861 | /* turn on cookie exchange */ | 1741 | /* turn on cookie exchange */ |
| 1862 | SSL_set_options(con, SSL_OP_COOKIE_EXCHANGE); | 1742 | SSL_set_options(con, SSL_OP_COOKIE_EXCHANGE); |
| 1863 | } | 1743 | } else |
| 1864 | else | 1744 | sbio = BIO_new_socket(s, BIO_NOCLOSE); |
| 1865 | sbio=BIO_new_socket(s,BIO_NOCLOSE); | ||
| 1866 | 1745 | ||
| 1867 | if (s_nbio_test) | 1746 | if (s_nbio_test) { |
| 1868 | { | ||
| 1869 | BIO *test; | 1747 | BIO *test; |
| 1870 | 1748 | ||
| 1871 | test=BIO_new(BIO_f_nbio_test()); | 1749 | test = BIO_new(BIO_f_nbio_test()); |
| 1872 | sbio=BIO_push(test,sbio); | 1750 | sbio = BIO_push(test, sbio); |
| 1873 | } | 1751 | } |
| 1874 | #ifndef OPENSSL_NO_JPAKE | 1752 | #ifndef OPENSSL_NO_JPAKE |
| 1875 | if(jpake_secret) | 1753 | if (jpake_secret) |
| 1876 | jpake_server_auth(bio_s_out, sbio, jpake_secret); | 1754 | jpake_server_auth(bio_s_out, sbio, jpake_secret); |
| 1877 | #endif | 1755 | #endif |
| 1878 | 1756 | ||
| 1879 | SSL_set_bio(con,sbio,sbio); | 1757 | SSL_set_bio(con, sbio, sbio); |
| 1880 | SSL_set_accept_state(con); | 1758 | SSL_set_accept_state(con); |
| 1881 | /* SSL_set_fd(con,s); */ | 1759 | /* SSL_set_fd(con,s); */ |
| 1882 | 1760 | ||
| 1883 | if (s_debug) | 1761 | if (s_debug) { |
| 1884 | { | ||
| 1885 | SSL_set_debug(con, 1); | 1762 | SSL_set_debug(con, 1); |
| 1886 | BIO_set_callback(SSL_get_rbio(con),bio_dump_callback); | 1763 | BIO_set_callback(SSL_get_rbio(con), bio_dump_callback); |
| 1887 | BIO_set_callback_arg(SSL_get_rbio(con),(char *)bio_s_out); | 1764 | BIO_set_callback_arg(SSL_get_rbio(con), (char *) bio_s_out); |
| 1888 | } | 1765 | } |
| 1889 | if (s_msg) | 1766 | if (s_msg) { |
| 1890 | { | ||
| 1891 | SSL_set_msg_callback(con, msg_cb); | 1767 | SSL_set_msg_callback(con, msg_cb); |
| 1892 | SSL_set_msg_callback_arg(con, bio_s_out); | 1768 | SSL_set_msg_callback_arg(con, bio_s_out); |
| 1893 | } | 1769 | } |
| 1894 | #ifndef OPENSSL_NO_TLSEXT | 1770 | #ifndef OPENSSL_NO_TLSEXT |
| 1895 | if (s_tlsextdebug) | 1771 | if (s_tlsextdebug) { |
| 1896 | { | ||
| 1897 | SSL_set_tlsext_debug_callback(con, tlsext_cb); | 1772 | SSL_set_tlsext_debug_callback(con, tlsext_cb); |
| 1898 | SSL_set_tlsext_debug_arg(con, bio_s_out); | 1773 | SSL_set_tlsext_debug_arg(con, bio_s_out); |
| 1899 | } | 1774 | } |
| 1900 | #endif | 1775 | #endif |
| 1901 | 1776 | ||
| 1902 | width=s+1; | 1777 | width = s + 1; |
| 1903 | for (;;) | 1778 | for (;;) { |
| 1904 | { | ||
| 1905 | int read_from_terminal; | 1779 | int read_from_terminal; |
| 1906 | int read_from_sslcon; | 1780 | int read_from_sslcon; |
| 1907 | 1781 | ||
| 1908 | read_from_terminal = 0; | 1782 | read_from_terminal = 0; |
| 1909 | read_from_sslcon = SSL_pending(con); | 1783 | read_from_sslcon = SSL_pending(con); |
| 1910 | 1784 | ||
| 1911 | if (!read_from_sslcon) | 1785 | if (!read_from_sslcon) { |
| 1912 | { | ||
| 1913 | FD_ZERO(&readfds); | 1786 | FD_ZERO(&readfds); |
| 1914 | openssl_fdset(fileno(stdin),&readfds); | 1787 | openssl_fdset(fileno(stdin), &readfds); |
| 1915 | openssl_fdset(s,&readfds); | 1788 | openssl_fdset(s, &readfds); |
| 1916 | /* Note: under VMS with SOCKETSHR the second parameter is | 1789 | /* |
| 1917 | * currently of type (int *) whereas under other systems | 1790 | * Note: under VMS with SOCKETSHR the second |
| 1918 | * it is (void *) if you don't have a cast it will choke | 1791 | * parameter is currently of type (int *) whereas |
| 1919 | * the compiler: if you do have a cast then you can either | 1792 | * under other systems it is (void *) if you don't |
| 1920 | * go for (int *) or (void *). | 1793 | * have a cast it will choke the compiler: if you do |
| 1794 | * have a cast then you can either go for (int *) or | ||
| 1795 | * (void *). | ||
| 1921 | */ | 1796 | */ |
| 1922 | if ((SSL_version(con) == DTLS1_VERSION) && | 1797 | if ((SSL_version(con) == DTLS1_VERSION) && |
| 1923 | DTLSv1_get_timeout(con, &timeout)) | 1798 | DTLSv1_get_timeout(con, &timeout)) |
| 1924 | timeoutp = &timeout; | 1799 | timeoutp = &timeout; |
| 1925 | else | 1800 | else |
| 1926 | timeoutp = NULL; | 1801 | timeoutp = NULL; |
| 1927 | 1802 | ||
| 1928 | i=select(width,(void *)&readfds,NULL,NULL,timeoutp); | 1803 | i = select(width, (void *) &readfds, NULL, NULL, timeoutp); |
| 1929 | 1804 | ||
| 1930 | if ((SSL_version(con) == DTLS1_VERSION) && DTLSv1_handle_timeout(con) > 0) | 1805 | if ((SSL_version(con) == DTLS1_VERSION) && DTLSv1_handle_timeout(con) > 0) { |
| 1931 | { | 1806 | BIO_printf(bio_err, "TIMEOUT occured\n"); |
| 1932 | BIO_printf(bio_err,"TIMEOUT occured\n"); | 1807 | } |
| 1933 | } | 1808 | if (i <= 0) |
| 1934 | 1809 | continue; | |
| 1935 | if (i <= 0) continue; | 1810 | if (FD_ISSET(fileno(stdin), &readfds)) |
| 1936 | if (FD_ISSET(fileno(stdin),&readfds)) | ||
| 1937 | read_from_terminal = 1; | 1811 | read_from_terminal = 1; |
| 1938 | if (FD_ISSET(s,&readfds)) | 1812 | if (FD_ISSET(s, &readfds)) |
| 1939 | read_from_sslcon = 1; | 1813 | read_from_sslcon = 1; |
| 1940 | } | 1814 | } |
| 1941 | if (read_from_terminal) | 1815 | if (read_from_terminal) { |
| 1942 | { | 1816 | if (s_crlf) { |
| 1943 | if (s_crlf) | ||
| 1944 | { | ||
| 1945 | int j, lf_num; | 1817 | int j, lf_num; |
| 1946 | 1818 | ||
| 1947 | i=raw_read_stdin(buf, bufsize/2); | 1819 | i = raw_read_stdin(buf, bufsize / 2); |
| 1948 | lf_num = 0; | 1820 | lf_num = 0; |
| 1949 | /* both loops are skipped when i <= 0 */ | 1821 | /* both loops are skipped when i <= 0 */ |
| 1950 | for (j = 0; j < i; j++) | 1822 | for (j = 0; j < i; j++) |
| 1951 | if (buf[j] == '\n') | 1823 | if (buf[j] == '\n') |
| 1952 | lf_num++; | 1824 | lf_num++; |
| 1953 | for (j = i-1; j >= 0; j--) | 1825 | for (j = i - 1; j >= 0; j--) { |
| 1954 | { | 1826 | buf[j + lf_num] = buf[j]; |
| 1955 | buf[j+lf_num] = buf[j]; | 1827 | if (buf[j] == '\n') { |
| 1956 | if (buf[j] == '\n') | ||
| 1957 | { | ||
| 1958 | lf_num--; | 1828 | lf_num--; |
| 1959 | i++; | 1829 | i++; |
| 1960 | buf[j+lf_num] = '\r'; | 1830 | buf[j + lf_num] = '\r'; |
| 1961 | } | ||
| 1962 | } | 1831 | } |
| 1963 | assert(lf_num == 0); | ||
| 1964 | } | 1832 | } |
| 1965 | else | 1833 | assert(lf_num == 0); |
| 1966 | i=raw_read_stdin(buf,bufsize); | 1834 | } else |
| 1967 | if (!s_quiet) | 1835 | i = raw_read_stdin(buf, bufsize); |
| 1968 | { | 1836 | if (!s_quiet) { |
| 1969 | if ((i <= 0) || (buf[0] == 'Q')) | 1837 | if ((i <= 0) || (buf[0] == 'Q')) { |
| 1970 | { | 1838 | BIO_printf(bio_s_out, "DONE\n"); |
| 1971 | BIO_printf(bio_s_out,"DONE\n"); | ||
| 1972 | shutdown(s, SHUT_RD); | 1839 | shutdown(s, SHUT_RD); |
| 1973 | close(s); | 1840 | close(s); |
| 1974 | close_accept_socket(); | 1841 | close_accept_socket(); |
| 1975 | ret= -11; | 1842 | ret = -11; |
| 1976 | goto err; | 1843 | goto err; |
| 1977 | } | 1844 | } |
| 1978 | if ((i <= 0) || (buf[0] == 'q')) | 1845 | if ((i <= 0) || (buf[0] == 'q')) { |
| 1979 | { | 1846 | BIO_printf(bio_s_out, "DONE\n"); |
| 1980 | BIO_printf(bio_s_out,"DONE\n"); | ||
| 1981 | if (SSL_version(con) != DTLS1_VERSION) { | 1847 | if (SSL_version(con) != DTLS1_VERSION) { |
| 1982 | shutdown(s, SHUT_RD); | 1848 | shutdown(s, SHUT_RD); |
| 1983 | close(s); | 1849 | close(s); |
| 1984 | } | 1850 | } |
| 1985 | /* close_accept_socket(); | 1851 | /* |
| 1986 | ret= -11;*/ | 1852 | * close_accept_socket(); ret= -11; |
| 1853 | */ | ||
| 1987 | goto err; | 1854 | goto err; |
| 1988 | } | 1855 | } |
| 1989 | if ((buf[0] == 'r') && | 1856 | if ((buf[0] == 'r') && |
| 1990 | ((buf[1] == '\n') || (buf[1] == '\r'))) | 1857 | ((buf[1] == '\n') || (buf[1] == '\r'))) { |
| 1991 | { | ||
| 1992 | SSL_renegotiate(con); | 1858 | SSL_renegotiate(con); |
| 1993 | i=SSL_do_handshake(con); | 1859 | i = SSL_do_handshake(con); |
| 1994 | printf("SSL_do_handshake -> %d\n",i); | 1860 | printf("SSL_do_handshake -> %d\n", i); |
| 1995 | i=0; /*13; */ | 1861 | i = 0; /* 13; */ |
| 1996 | continue; | 1862 | continue; |
| 1997 | /* strcpy(buf,"server side RE-NEGOTIATE\n"); */ | 1863 | /* |
| 1998 | } | 1864 | * strcpy(buf,"server side |
| 1865 | * RE-NEGOTIATE\n"); | ||
| 1866 | */ | ||
| 1867 | } | ||
| 1999 | if ((buf[0] == 'R') && | 1868 | if ((buf[0] == 'R') && |
| 2000 | ((buf[1] == '\n') || (buf[1] == '\r'))) | 1869 | ((buf[1] == '\n') || (buf[1] == '\r'))) { |
| 2001 | { | ||
| 2002 | SSL_set_verify(con, | 1870 | SSL_set_verify(con, |
| 2003 | SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE,NULL); | 1871 | SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE, NULL); |
| 2004 | SSL_renegotiate(con); | 1872 | SSL_renegotiate(con); |
| 2005 | i=SSL_do_handshake(con); | 1873 | i = SSL_do_handshake(con); |
| 2006 | printf("SSL_do_handshake -> %d\n",i); | 1874 | printf("SSL_do_handshake -> %d\n", i); |
| 2007 | i=0; /* 13; */ | 1875 | i = 0; /* 13; */ |
| 2008 | continue; | 1876 | continue; |
| 2009 | /* strcpy(buf,"server side RE-NEGOTIATE asking for client cert\n"); */ | 1877 | /* |
| 2010 | } | 1878 | * strcpy(buf,"server side |
| 2011 | if (buf[0] == 'P') | 1879 | * RE-NEGOTIATE asking for client |
| 2012 | { | 1880 | * cert\n"); |
| 2013 | static const char *str="Lets print some clear text\n"; | 1881 | */ |
| 2014 | BIO_write(SSL_get_wbio(con),str,strlen(str)); | ||
| 2015 | } | ||
| 2016 | if (buf[0] == 'S') | ||
| 2017 | { | ||
| 2018 | print_stats(bio_s_out,SSL_get_SSL_CTX(con)); | ||
| 2019 | } | ||
| 2020 | } | 1882 | } |
| 2021 | l=k=0; | 1883 | if (buf[0] == 'P') { |
| 2022 | for (;;) | 1884 | static const char *str = "Lets print some clear text\n"; |
| 2023 | { | 1885 | BIO_write(SSL_get_wbio(con), str, strlen(str)); |
| 1886 | } | ||
| 1887 | if (buf[0] == 'S') { | ||
| 1888 | print_stats(bio_s_out, SSL_get_SSL_CTX(con)); | ||
| 1889 | } | ||
| 1890 | } | ||
| 1891 | l = k = 0; | ||
| 1892 | for (;;) { | ||
| 2024 | /* should do a select for the write */ | 1893 | /* should do a select for the write */ |
| 2025 | #ifdef RENEG | 1894 | #ifdef RENEG |
| 2026 | { static count=0; if (++count == 100) { count=0; SSL_renegotiate(con); } } | 1895 | { |
| 1896 | static count = 0; | ||
| 1897 | if (++count == 100) { | ||
| 1898 | count = 0; | ||
| 1899 | SSL_renegotiate(con); | ||
| 1900 | } | ||
| 1901 | } | ||
| 2027 | #endif | 1902 | #endif |
| 2028 | k=SSL_write(con,&(buf[l]),(unsigned int)i); | 1903 | k = SSL_write(con, &(buf[l]), (unsigned int) i); |
| 2029 | #ifndef OPENSSL_NO_SRP | 1904 | #ifndef OPENSSL_NO_SRP |
| 2030 | while (SSL_get_error(con,k) == SSL_ERROR_WANT_X509_LOOKUP) | 1905 | while (SSL_get_error(con, k) == SSL_ERROR_WANT_X509_LOOKUP) { |
| 2031 | { | 1906 | BIO_printf(bio_s_out, "LOOKUP renego during write\n"); |
| 2032 | BIO_printf(bio_s_out,"LOOKUP renego during write\n"); | 1907 | srp_callback_parm.user = SRP_VBASE_get_by_user(srp_callback_parm.vb, srp_callback_parm.login); |
| 2033 | srp_callback_parm.user = SRP_VBASE_get_by_user(srp_callback_parm.vb, srp_callback_parm.login); | 1908 | if (srp_callback_parm.user) |
| 2034 | if (srp_callback_parm.user) | 1909 | BIO_printf(bio_s_out, "LOOKUP done %s\n", srp_callback_parm.user->info); |
| 2035 | BIO_printf(bio_s_out,"LOOKUP done %s\n",srp_callback_parm.user->info); | 1910 | else |
| 2036 | else | 1911 | BIO_printf(bio_s_out, "LOOKUP not successful\n"); |
| 2037 | BIO_printf(bio_s_out,"LOOKUP not successful\n"); | 1912 | k = SSL_write(con, &(buf[l]), (unsigned int) i); |
| 2038 | k=SSL_write(con,&(buf[l]),(unsigned int)i); | 1913 | } |
| 2039 | } | ||
| 2040 | #endif | 1914 | #endif |
| 2041 | switch (SSL_get_error(con,k)) | 1915 | switch (SSL_get_error(con, k)) { |
| 2042 | { | ||
| 2043 | case SSL_ERROR_NONE: | 1916 | case SSL_ERROR_NONE: |
| 2044 | break; | 1917 | break; |
| 2045 | case SSL_ERROR_WANT_WRITE: | 1918 | case SSL_ERROR_WANT_WRITE: |
| 2046 | case SSL_ERROR_WANT_READ: | 1919 | case SSL_ERROR_WANT_READ: |
| 2047 | case SSL_ERROR_WANT_X509_LOOKUP: | 1920 | case SSL_ERROR_WANT_X509_LOOKUP: |
| 2048 | BIO_printf(bio_s_out,"Write BLOCK\n"); | 1921 | BIO_printf(bio_s_out, "Write BLOCK\n"); |
| 2049 | break; | 1922 | break; |
| 2050 | case SSL_ERROR_SYSCALL: | 1923 | case SSL_ERROR_SYSCALL: |
| 2051 | case SSL_ERROR_SSL: | 1924 | case SSL_ERROR_SSL: |
| 2052 | BIO_printf(bio_s_out,"ERROR\n"); | 1925 | BIO_printf(bio_s_out, "ERROR\n"); |
| 2053 | ERR_print_errors(bio_err); | 1926 | ERR_print_errors(bio_err); |
| 2054 | ret=1; | 1927 | ret = 1; |
| 2055 | goto err; | 1928 | goto err; |
| 2056 | /* break; */ | 1929 | /* break; */ |
| 2057 | case SSL_ERROR_ZERO_RETURN: | 1930 | case SSL_ERROR_ZERO_RETURN: |
| 2058 | BIO_printf(bio_s_out,"DONE\n"); | 1931 | BIO_printf(bio_s_out, "DONE\n"); |
| 2059 | ret=1; | 1932 | ret = 1; |
| 2060 | goto err; | 1933 | goto err; |
| 2061 | } | ||
| 2062 | l+=k; | ||
| 2063 | i-=k; | ||
| 2064 | if (i <= 0) break; | ||
| 2065 | } | 1934 | } |
| 1935 | l += k; | ||
| 1936 | i -= k; | ||
| 1937 | if (i <= 0) | ||
| 1938 | break; | ||
| 2066 | } | 1939 | } |
| 2067 | if (read_from_sslcon) | 1940 | } |
| 2068 | { | 1941 | if (read_from_sslcon) { |
| 2069 | if (!SSL_is_init_finished(con)) | 1942 | if (!SSL_is_init_finished(con)) { |
| 2070 | { | 1943 | i = init_ssl_connection(con); |
| 2071 | i=init_ssl_connection(con); | 1944 | |
| 2072 | 1945 | if (i < 0) { | |
| 2073 | if (i < 0) | 1946 | ret = 0; |
| 2074 | { | ||
| 2075 | ret=0; | ||
| 2076 | goto err; | 1947 | goto err; |
| 2077 | } | 1948 | } else if (i == 0) { |
| 2078 | else if (i == 0) | 1949 | ret = 1; |
| 2079 | { | ||
| 2080 | ret=1; | ||
| 2081 | goto err; | 1950 | goto err; |
| 2082 | } | ||
| 2083 | } | 1951 | } |
| 2084 | else | 1952 | } else { |
| 2085 | { | 1953 | again: |
| 2086 | again: | 1954 | i = SSL_read(con, (char *) buf, bufsize); |
| 2087 | i=SSL_read(con,(char *)buf,bufsize); | ||
| 2088 | #ifndef OPENSSL_NO_SRP | 1955 | #ifndef OPENSSL_NO_SRP |
| 2089 | while (SSL_get_error(con,i) == SSL_ERROR_WANT_X509_LOOKUP) | 1956 | while (SSL_get_error(con, i) == SSL_ERROR_WANT_X509_LOOKUP) { |
| 2090 | { | 1957 | BIO_printf(bio_s_out, "LOOKUP renego during read\n"); |
| 2091 | BIO_printf(bio_s_out,"LOOKUP renego during read\n"); | 1958 | srp_callback_parm.user = SRP_VBASE_get_by_user(srp_callback_parm.vb, srp_callback_parm.login); |
| 2092 | srp_callback_parm.user = SRP_VBASE_get_by_user(srp_callback_parm.vb, srp_callback_parm.login); | 1959 | if (srp_callback_parm.user) |
| 2093 | if (srp_callback_parm.user) | 1960 | BIO_printf(bio_s_out, "LOOKUP done %s\n", srp_callback_parm.user->info); |
| 2094 | BIO_printf(bio_s_out,"LOOKUP done %s\n",srp_callback_parm.user->info); | 1961 | else |
| 2095 | else | 1962 | BIO_printf(bio_s_out, "LOOKUP not successful\n"); |
| 2096 | BIO_printf(bio_s_out,"LOOKUP not successful\n"); | 1963 | i = SSL_read(con, (char *) buf, bufsize); |
| 2097 | i=SSL_read(con,(char *)buf,bufsize); | 1964 | } |
| 2098 | } | ||
| 2099 | #endif | 1965 | #endif |
| 2100 | switch (SSL_get_error(con,i)) | 1966 | switch (SSL_get_error(con, i)) { |
| 2101 | { | ||
| 2102 | case SSL_ERROR_NONE: | 1967 | case SSL_ERROR_NONE: |
| 2103 | raw_write_stdout(buf, | 1968 | raw_write_stdout(buf, |
| 2104 | (unsigned int)i); | 1969 | (unsigned int) i); |
| 2105 | if (SSL_pending(con)) goto again; | 1970 | if (SSL_pending(con)) |
| 1971 | goto again; | ||
| 2106 | break; | 1972 | break; |
| 2107 | case SSL_ERROR_WANT_WRITE: | 1973 | case SSL_ERROR_WANT_WRITE: |
| 2108 | case SSL_ERROR_WANT_READ: | 1974 | case SSL_ERROR_WANT_READ: |
| 2109 | BIO_printf(bio_s_out,"Read BLOCK\n"); | 1975 | BIO_printf(bio_s_out, "Read BLOCK\n"); |
| 2110 | break; | 1976 | break; |
| 2111 | case SSL_ERROR_SYSCALL: | 1977 | case SSL_ERROR_SYSCALL: |
| 2112 | case SSL_ERROR_SSL: | 1978 | case SSL_ERROR_SSL: |
| 2113 | BIO_printf(bio_s_out,"ERROR\n"); | 1979 | BIO_printf(bio_s_out, "ERROR\n"); |
| 2114 | ERR_print_errors(bio_err); | 1980 | ERR_print_errors(bio_err); |
| 2115 | ret=1; | 1981 | ret = 1; |
| 2116 | goto err; | 1982 | goto err; |
| 2117 | case SSL_ERROR_ZERO_RETURN: | 1983 | case SSL_ERROR_ZERO_RETURN: |
| 2118 | BIO_printf(bio_s_out,"DONE\n"); | 1984 | BIO_printf(bio_s_out, "DONE\n"); |
| 2119 | ret=1; | 1985 | ret = 1; |
| 2120 | goto err; | 1986 | goto err; |
| 2121 | } | ||
| 2122 | } | 1987 | } |
| 2123 | } | 1988 | } |
| 2124 | } | 1989 | } |
| 1990 | } | ||
| 2125 | err: | 1991 | err: |
| 2126 | if (con != NULL) | 1992 | if (con != NULL) { |
| 2127 | { | 1993 | BIO_printf(bio_s_out, "shutting down SSL\n"); |
| 2128 | BIO_printf(bio_s_out,"shutting down SSL\n"); | ||
| 2129 | #if 1 | 1994 | #if 1 |
| 2130 | SSL_set_shutdown(con,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); | 1995 | SSL_set_shutdown(con, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); |
| 2131 | #else | 1996 | #else |
| 2132 | SSL_shutdown(con); | 1997 | SSL_shutdown(con); |
| 2133 | #endif | 1998 | #endif |
| 2134 | SSL_free(con); | 1999 | SSL_free(con); |
| 2135 | } | 2000 | } |
| 2136 | BIO_printf(bio_s_out,"CONNECTION CLOSED\n"); | 2001 | BIO_printf(bio_s_out, "CONNECTION CLOSED\n"); |
| 2137 | if (buf != NULL) | 2002 | if (buf != NULL) { |
| 2138 | { | 2003 | OPENSSL_cleanse(buf, bufsize); |
| 2139 | OPENSSL_cleanse(buf,bufsize); | ||
| 2140 | free(buf); | 2004 | free(buf); |
| 2141 | } | ||
| 2142 | if (ret >= 0) | ||
| 2143 | BIO_printf(bio_s_out,"ACCEPT\n"); | ||
| 2144 | return(ret); | ||
| 2145 | } | 2005 | } |
| 2006 | if (ret >= 0) | ||
| 2007 | BIO_printf(bio_s_out, "ACCEPT\n"); | ||
| 2008 | return (ret); | ||
| 2009 | } | ||
| 2146 | 2010 | ||
| 2147 | static void close_accept_socket(void) | 2011 | static void |
| 2148 | { | 2012 | close_accept_socket(void) |
| 2149 | BIO_printf(bio_err,"shutdown accept socket\n"); | 2013 | { |
| 2150 | if (accept_socket >= 0) | 2014 | BIO_printf(bio_err, "shutdown accept socket\n"); |
| 2151 | { | 2015 | if (accept_socket >= 0) { |
| 2152 | shutdown(accept_socket, SHUT_RDWR); | 2016 | shutdown(accept_socket, SHUT_RDWR); |
| 2153 | close(accept_socket); | 2017 | close(accept_socket); |
| 2154 | } | ||
| 2155 | } | 2018 | } |
| 2019 | } | ||
| 2156 | 2020 | ||
| 2157 | static int init_ssl_connection(SSL *con) | 2021 | static int |
| 2158 | { | 2022 | init_ssl_connection(SSL * con) |
| 2023 | { | ||
| 2159 | int i; | 2024 | int i; |
| 2160 | const char *str; | 2025 | const char *str; |
| 2161 | X509 *peer; | 2026 | X509 *peer; |
| @@ -2171,260 +2036,242 @@ static int init_ssl_connection(SSL *con) | |||
| 2171 | unsigned char *exportedkeymat; | 2036 | unsigned char *exportedkeymat; |
| 2172 | 2037 | ||
| 2173 | 2038 | ||
| 2174 | i=SSL_accept(con); | 2039 | i = SSL_accept(con); |
| 2175 | #ifndef OPENSSL_NO_SRP | 2040 | #ifndef OPENSSL_NO_SRP |
| 2176 | while (i <= 0 && SSL_get_error(con,i) == SSL_ERROR_WANT_X509_LOOKUP) | 2041 | while (i <= 0 && SSL_get_error(con, i) == SSL_ERROR_WANT_X509_LOOKUP) { |
| 2177 | { | 2042 | BIO_printf(bio_s_out, "LOOKUP during accept %s\n", srp_callback_parm.login); |
| 2178 | BIO_printf(bio_s_out,"LOOKUP during accept %s\n",srp_callback_parm.login); | 2043 | srp_callback_parm.user = SRP_VBASE_get_by_user(srp_callback_parm.vb, srp_callback_parm.login); |
| 2179 | srp_callback_parm.user = SRP_VBASE_get_by_user(srp_callback_parm.vb, srp_callback_parm.login); | 2044 | if (srp_callback_parm.user) |
| 2180 | if (srp_callback_parm.user) | 2045 | BIO_printf(bio_s_out, "LOOKUP done %s\n", srp_callback_parm.user->info); |
| 2181 | BIO_printf(bio_s_out,"LOOKUP done %s\n",srp_callback_parm.user->info); | ||
| 2182 | else | ||
| 2183 | BIO_printf(bio_s_out,"LOOKUP not successful\n"); | ||
| 2184 | i=SSL_accept(con); | ||
| 2185 | } | ||
| 2186 | #endif | ||
| 2187 | if (i <= 0) | ||
| 2188 | { | ||
| 2189 | if (BIO_sock_should_retry(i)) | ||
| 2190 | { | ||
| 2191 | BIO_printf(bio_s_out,"DELAY\n"); | ||
| 2192 | return(1); | ||
| 2193 | } | ||
| 2194 | |||
| 2195 | BIO_printf(bio_err,"ERROR\n"); | ||
| 2196 | verify_error=SSL_get_verify_result(con); | ||
| 2197 | if (verify_error != X509_V_OK) | ||
| 2198 | { | ||
| 2199 | BIO_printf(bio_err,"verify error:%s\n", | ||
| 2200 | X509_verify_cert_error_string(verify_error)); | ||
| 2201 | } | ||
| 2202 | else | 2046 | else |
| 2047 | BIO_printf(bio_s_out, "LOOKUP not successful\n"); | ||
| 2048 | i = SSL_accept(con); | ||
| 2049 | } | ||
| 2050 | #endif | ||
| 2051 | if (i <= 0) { | ||
| 2052 | if (BIO_sock_should_retry(i)) { | ||
| 2053 | BIO_printf(bio_s_out, "DELAY\n"); | ||
| 2054 | return (1); | ||
| 2055 | } | ||
| 2056 | BIO_printf(bio_err, "ERROR\n"); | ||
| 2057 | verify_error = SSL_get_verify_result(con); | ||
| 2058 | if (verify_error != X509_V_OK) { | ||
| 2059 | BIO_printf(bio_err, "verify error:%s\n", | ||
| 2060 | X509_verify_cert_error_string(verify_error)); | ||
| 2061 | } else | ||
| 2203 | ERR_print_errors(bio_err); | 2062 | ERR_print_errors(bio_err); |
| 2204 | return(0); | 2063 | return (0); |
| 2205 | } | 2064 | } |
| 2206 | 2065 | PEM_write_bio_SSL_SESSION(bio_s_out, SSL_get_session(con)); | |
| 2207 | PEM_write_bio_SSL_SESSION(bio_s_out,SSL_get_session(con)); | 2066 | |
| 2208 | 2067 | peer = SSL_get_peer_certificate(con); | |
| 2209 | peer=SSL_get_peer_certificate(con); | 2068 | if (peer != NULL) { |
| 2210 | if (peer != NULL) | 2069 | BIO_printf(bio_s_out, "Client certificate\n"); |
| 2211 | { | 2070 | PEM_write_bio_X509(bio_s_out, peer); |
| 2212 | BIO_printf(bio_s_out,"Client certificate\n"); | 2071 | X509_NAME_oneline(X509_get_subject_name(peer), buf, sizeof buf); |
| 2213 | PEM_write_bio_X509(bio_s_out,peer); | 2072 | BIO_printf(bio_s_out, "subject=%s\n", buf); |
| 2214 | X509_NAME_oneline(X509_get_subject_name(peer),buf,sizeof buf); | 2073 | X509_NAME_oneline(X509_get_issuer_name(peer), buf, sizeof buf); |
| 2215 | BIO_printf(bio_s_out,"subject=%s\n",buf); | 2074 | BIO_printf(bio_s_out, "issuer=%s\n", buf); |
| 2216 | X509_NAME_oneline(X509_get_issuer_name(peer),buf,sizeof buf); | ||
| 2217 | BIO_printf(bio_s_out,"issuer=%s\n",buf); | ||
| 2218 | X509_free(peer); | 2075 | X509_free(peer); |
| 2219 | } | 2076 | } |
| 2220 | 2077 | if (SSL_get_shared_ciphers(con, buf, sizeof buf) != NULL) | |
| 2221 | if (SSL_get_shared_ciphers(con,buf,sizeof buf) != NULL) | 2078 | BIO_printf(bio_s_out, "Shared ciphers:%s\n", buf); |
| 2222 | BIO_printf(bio_s_out,"Shared ciphers:%s\n",buf); | 2079 | str = SSL_CIPHER_get_name(SSL_get_current_cipher(con)); |
| 2223 | str=SSL_CIPHER_get_name(SSL_get_current_cipher(con)); | 2080 | BIO_printf(bio_s_out, "CIPHER is %s\n", (str != NULL) ? str : "(NONE)"); |
| 2224 | BIO_printf(bio_s_out,"CIPHER is %s\n",(str != NULL)?str:"(NONE)"); | ||
| 2225 | 2081 | ||
| 2226 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) | 2082 | #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) |
| 2227 | SSL_get0_next_proto_negotiated(con, &next_proto_neg, &next_proto_neg_len); | 2083 | SSL_get0_next_proto_negotiated(con, &next_proto_neg, &next_proto_neg_len); |
| 2228 | if (next_proto_neg) | 2084 | if (next_proto_neg) { |
| 2229 | { | 2085 | BIO_printf(bio_s_out, "NEXTPROTO is "); |
| 2230 | BIO_printf(bio_s_out,"NEXTPROTO is "); | ||
| 2231 | BIO_write(bio_s_out, next_proto_neg, next_proto_neg_len); | 2086 | BIO_write(bio_s_out, next_proto_neg, next_proto_neg_len); |
| 2232 | BIO_printf(bio_s_out, "\n"); | 2087 | BIO_printf(bio_s_out, "\n"); |
| 2233 | } | 2088 | } |
| 2234 | #endif | 2089 | #endif |
| 2235 | #ifndef OPENSSL_NO_SRTP | 2090 | #ifndef OPENSSL_NO_SRTP |
| 2236 | { | 2091 | { |
| 2237 | SRTP_PROTECTION_PROFILE *srtp_profile | 2092 | SRTP_PROTECTION_PROFILE *srtp_profile |
| 2238 | = SSL_get_selected_srtp_profile(con); | 2093 | = SSL_get_selected_srtp_profile(con); |
| 2239 | 2094 | ||
| 2240 | if(srtp_profile) | 2095 | if (srtp_profile) |
| 2241 | BIO_printf(bio_s_out,"SRTP Extension negotiated, profile=%s\n", | 2096 | BIO_printf(bio_s_out, "SRTP Extension negotiated, profile=%s\n", |
| 2242 | srtp_profile->name); | 2097 | srtp_profile->name); |
| 2243 | } | 2098 | } |
| 2244 | #endif | 2099 | #endif |
| 2245 | if (SSL_cache_hit(con)) BIO_printf(bio_s_out,"Reused session-id\n"); | 2100 | if (SSL_cache_hit(con)) |
| 2246 | if (SSL_ctrl(con,SSL_CTRL_GET_FLAGS,0,NULL) & | 2101 | BIO_printf(bio_s_out, "Reused session-id\n"); |
| 2247 | TLS1_FLAGS_TLS_PADDING_BUG) | 2102 | if (SSL_ctrl(con, SSL_CTRL_GET_FLAGS, 0, NULL) & |
| 2103 | TLS1_FLAGS_TLS_PADDING_BUG) | ||
| 2248 | BIO_printf(bio_s_out, | 2104 | BIO_printf(bio_s_out, |
| 2249 | "Peer has incorrect TLSv1 block padding\n"); | 2105 | "Peer has incorrect TLSv1 block padding\n"); |
| 2250 | #ifndef OPENSSL_NO_KRB5 | 2106 | #ifndef OPENSSL_NO_KRB5 |
| 2251 | client_princ = kssl_ctx_get0_client_princ(SSL_get0_kssl_ctx(con)); | 2107 | client_princ = kssl_ctx_get0_client_princ(SSL_get0_kssl_ctx(con)); |
| 2252 | if (client_princ != NULL) | 2108 | if (client_princ != NULL) { |
| 2253 | { | 2109 | BIO_printf(bio_s_out, "Kerberos peer principal is %s\n", |
| 2254 | BIO_printf(bio_s_out,"Kerberos peer principal is %s\n", | 2110 | client_princ); |
| 2255 | client_princ); | 2111 | } |
| 2256 | } | 2112 | #endif /* OPENSSL_NO_KRB5 */ |
| 2257 | #endif /* OPENSSL_NO_KRB5 */ | ||
| 2258 | BIO_printf(bio_s_out, "Secure Renegotiation IS%s supported\n", | 2113 | BIO_printf(bio_s_out, "Secure Renegotiation IS%s supported\n", |
| 2259 | SSL_get_secure_renegotiation_support(con) ? "" : " NOT"); | 2114 | SSL_get_secure_renegotiation_support(con) ? "" : " NOT"); |
| 2260 | if (keymatexportlabel != NULL) | 2115 | if (keymatexportlabel != NULL) { |
| 2261 | { | ||
| 2262 | BIO_printf(bio_s_out, "Keying material exporter:\n"); | 2116 | BIO_printf(bio_s_out, "Keying material exporter:\n"); |
| 2263 | BIO_printf(bio_s_out, " Label: '%s'\n", keymatexportlabel); | 2117 | BIO_printf(bio_s_out, " Label: '%s'\n", keymatexportlabel); |
| 2264 | BIO_printf(bio_s_out, " Length: %i bytes\n", | 2118 | BIO_printf(bio_s_out, " Length: %i bytes\n", |
| 2265 | keymatexportlen); | 2119 | keymatexportlen); |
| 2266 | exportedkeymat = malloc(keymatexportlen); | 2120 | exportedkeymat = malloc(keymatexportlen); |
| 2267 | if (exportedkeymat != NULL) | 2121 | if (exportedkeymat != NULL) { |
| 2268 | { | ||
| 2269 | if (!SSL_export_keying_material(con, exportedkeymat, | 2122 | if (!SSL_export_keying_material(con, exportedkeymat, |
| 2270 | keymatexportlen, | 2123 | keymatexportlen, |
| 2271 | keymatexportlabel, | 2124 | keymatexportlabel, |
| 2272 | strlen(keymatexportlabel), | 2125 | strlen(keymatexportlabel), |
| 2273 | NULL, 0, 0)) | 2126 | NULL, 0, 0)) { |
| 2274 | { | ||
| 2275 | BIO_printf(bio_s_out, " Error\n"); | 2127 | BIO_printf(bio_s_out, " Error\n"); |
| 2276 | } | 2128 | } else { |
| 2277 | else | ||
| 2278 | { | ||
| 2279 | BIO_printf(bio_s_out, " Keying material: "); | 2129 | BIO_printf(bio_s_out, " Keying material: "); |
| 2280 | for (i=0; i<keymatexportlen; i++) | 2130 | for (i = 0; i < keymatexportlen; i++) |
| 2281 | BIO_printf(bio_s_out, "%02X", | 2131 | BIO_printf(bio_s_out, "%02X", |
| 2282 | exportedkeymat[i]); | 2132 | exportedkeymat[i]); |
| 2283 | BIO_printf(bio_s_out, "\n"); | 2133 | BIO_printf(bio_s_out, "\n"); |
| 2284 | } | ||
| 2285 | free(exportedkeymat); | ||
| 2286 | } | 2134 | } |
| 2135 | free(exportedkeymat); | ||
| 2287 | } | 2136 | } |
| 2288 | |||
| 2289 | return(1); | ||
| 2290 | } | 2137 | } |
| 2138 | return (1); | ||
| 2139 | } | ||
| 2291 | 2140 | ||
| 2292 | #ifndef OPENSSL_NO_DH | 2141 | #ifndef OPENSSL_NO_DH |
| 2293 | static DH *load_dh_param(const char *dhfile) | 2142 | static DH * |
| 2294 | { | 2143 | load_dh_param(const char *dhfile) |
| 2295 | DH *ret=NULL; | 2144 | { |
| 2145 | DH *ret = NULL; | ||
| 2296 | BIO *bio; | 2146 | BIO *bio; |
| 2297 | 2147 | ||
| 2298 | if ((bio=BIO_new_file(dhfile,"r")) == NULL) | 2148 | if ((bio = BIO_new_file(dhfile, "r")) == NULL) |
| 2299 | goto err; | 2149 | goto err; |
| 2300 | ret=PEM_read_bio_DHparams(bio,NULL,NULL,NULL); | 2150 | ret = PEM_read_bio_DHparams(bio, NULL, NULL, NULL); |
| 2301 | err: | 2151 | err: |
| 2302 | if (bio != NULL) BIO_free(bio); | 2152 | if (bio != NULL) |
| 2303 | return(ret); | 2153 | BIO_free(bio); |
| 2304 | } | 2154 | return (ret); |
| 2155 | } | ||
| 2305 | #endif | 2156 | #endif |
| 2306 | #ifndef OPENSSL_NO_KRB5 | 2157 | #ifndef OPENSSL_NO_KRB5 |
| 2307 | char *client_princ; | 2158 | char *client_princ; |
| 2308 | #endif | 2159 | #endif |
| 2309 | 2160 | ||
| 2310 | #if 0 | 2161 | #if 0 |
| 2311 | static int load_CA(SSL_CTX *ctx, char *file) | 2162 | static int |
| 2312 | { | 2163 | load_CA(SSL_CTX * ctx, char *file) |
| 2164 | { | ||
| 2313 | FILE *in; | 2165 | FILE *in; |
| 2314 | X509 *x=NULL; | 2166 | X509 *x = NULL; |
| 2315 | 2167 | ||
| 2316 | if ((in=fopen(file,"r")) == NULL) | 2168 | if ((in = fopen(file, "r")) == NULL) |
| 2317 | return(0); | 2169 | return (0); |
| 2318 | 2170 | ||
| 2319 | for (;;) | 2171 | for (;;) { |
| 2320 | { | 2172 | if (PEM_read_X509(in, &x, NULL) == NULL) |
| 2321 | if (PEM_read_X509(in,&x,NULL) == NULL) | ||
| 2322 | break; | 2173 | break; |
| 2323 | SSL_CTX_add_client_CA(ctx,x); | 2174 | SSL_CTX_add_client_CA(ctx, x); |
| 2324 | } | ||
| 2325 | if (x != NULL) X509_free(x); | ||
| 2326 | fclose(in); | ||
| 2327 | return(1); | ||
| 2328 | } | 2175 | } |
| 2176 | if (x != NULL) | ||
| 2177 | X509_free(x); | ||
| 2178 | fclose(in); | ||
| 2179 | return (1); | ||
| 2180 | } | ||
| 2329 | #endif | 2181 | #endif |
| 2330 | 2182 | ||
| 2331 | static int www_body(char *hostname, int s, unsigned char *context) | 2183 | static int |
| 2332 | { | 2184 | www_body(char *hostname, int s, unsigned char *context) |
| 2333 | char *buf=NULL; | 2185 | { |
| 2334 | int ret=1; | 2186 | char *buf = NULL; |
| 2335 | int i,j,k,dot; | 2187 | int ret = 1; |
| 2188 | int i, j, k, dot; | ||
| 2336 | SSL *con; | 2189 | SSL *con; |
| 2337 | const SSL_CIPHER *c; | 2190 | const SSL_CIPHER *c; |
| 2338 | BIO *io,*ssl_bio,*sbio; | 2191 | BIO *io, *ssl_bio, *sbio; |
| 2339 | #ifndef OPENSSL_NO_KRB5 | 2192 | #ifndef OPENSSL_NO_KRB5 |
| 2340 | KSSL_CTX *kctx; | 2193 | KSSL_CTX *kctx; |
| 2341 | #endif | 2194 | #endif |
| 2342 | 2195 | ||
| 2343 | buf=malloc(bufsize); | 2196 | buf = malloc(bufsize); |
| 2344 | if (buf == NULL) return(0); | 2197 | if (buf == NULL) |
| 2345 | io=BIO_new(BIO_f_buffer()); | 2198 | return (0); |
| 2346 | ssl_bio=BIO_new(BIO_f_ssl()); | 2199 | io = BIO_new(BIO_f_buffer()); |
| 2347 | if ((io == NULL) || (ssl_bio == NULL)) goto err; | 2200 | ssl_bio = BIO_new(BIO_f_ssl()); |
| 2201 | if ((io == NULL) || (ssl_bio == NULL)) | ||
| 2202 | goto err; | ||
| 2348 | 2203 | ||
| 2349 | #ifdef FIONBIO | 2204 | #ifdef FIONBIO |
| 2350 | if (s_nbio) | 2205 | if (s_nbio) { |
| 2351 | { | 2206 | unsigned long sl = 1; |
| 2352 | unsigned long sl=1; | ||
| 2353 | 2207 | ||
| 2354 | if (!s_quiet) | 2208 | if (!s_quiet) |
| 2355 | BIO_printf(bio_err,"turning on non blocking io\n"); | 2209 | BIO_printf(bio_err, "turning on non blocking io\n"); |
| 2356 | if (BIO_socket_ioctl(s,FIONBIO,&sl) < 0) | 2210 | if (BIO_socket_ioctl(s, FIONBIO, &sl) < 0) |
| 2357 | ERR_print_errors(bio_err); | 2211 | ERR_print_errors(bio_err); |
| 2358 | } | 2212 | } |
| 2359 | #endif | 2213 | #endif |
| 2360 | 2214 | ||
| 2361 | /* lets make the output buffer a reasonable size */ | 2215 | /* lets make the output buffer a reasonable size */ |
| 2362 | if (!BIO_set_write_buffer_size(io,bufsize)) goto err; | 2216 | if (!BIO_set_write_buffer_size(io, bufsize)) |
| 2217 | goto err; | ||
| 2363 | 2218 | ||
| 2364 | if ((con=SSL_new(ctx)) == NULL) goto err; | 2219 | if ((con = SSL_new(ctx)) == NULL) |
| 2220 | goto err; | ||
| 2365 | #ifndef OPENSSL_NO_TLSEXT | 2221 | #ifndef OPENSSL_NO_TLSEXT |
| 2366 | if (s_tlsextdebug) | 2222 | if (s_tlsextdebug) { |
| 2367 | { | 2223 | SSL_set_tlsext_debug_callback(con, tlsext_cb); |
| 2368 | SSL_set_tlsext_debug_callback(con, tlsext_cb); | 2224 | SSL_set_tlsext_debug_arg(con, bio_s_out); |
| 2369 | SSL_set_tlsext_debug_arg(con, bio_s_out); | 2225 | } |
| 2370 | } | ||
| 2371 | #endif | 2226 | #endif |
| 2372 | #ifndef OPENSSL_NO_KRB5 | 2227 | #ifndef OPENSSL_NO_KRB5 |
| 2373 | if ((kctx = kssl_ctx_new()) != NULL) | 2228 | if ((kctx = kssl_ctx_new()) != NULL) { |
| 2374 | { | ||
| 2375 | kssl_ctx_setstring(kctx, KSSL_SERVICE, KRB5SVC); | 2229 | kssl_ctx_setstring(kctx, KSSL_SERVICE, KRB5SVC); |
| 2376 | kssl_ctx_setstring(kctx, KSSL_KEYTAB, KRB5KEYTAB); | 2230 | kssl_ctx_setstring(kctx, KSSL_KEYTAB, KRB5KEYTAB); |
| 2377 | } | 2231 | } |
| 2378 | #endif /* OPENSSL_NO_KRB5 */ | 2232 | #endif /* OPENSSL_NO_KRB5 */ |
| 2379 | if(context) SSL_set_session_id_context(con, context, | 2233 | if (context) |
| 2380 | strlen((char *)context)); | 2234 | SSL_set_session_id_context(con, context, |
| 2235 | strlen((char *) context)); | ||
| 2381 | 2236 | ||
| 2382 | sbio=BIO_new_socket(s,BIO_NOCLOSE); | 2237 | sbio = BIO_new_socket(s, BIO_NOCLOSE); |
| 2383 | if (s_nbio_test) | 2238 | if (s_nbio_test) { |
| 2384 | { | ||
| 2385 | BIO *test; | 2239 | BIO *test; |
| 2386 | 2240 | ||
| 2387 | test=BIO_new(BIO_f_nbio_test()); | 2241 | test = BIO_new(BIO_f_nbio_test()); |
| 2388 | sbio=BIO_push(test,sbio); | 2242 | sbio = BIO_push(test, sbio); |
| 2389 | } | 2243 | } |
| 2390 | SSL_set_bio(con,sbio,sbio); | 2244 | SSL_set_bio(con, sbio, sbio); |
| 2391 | SSL_set_accept_state(con); | 2245 | SSL_set_accept_state(con); |
| 2392 | 2246 | ||
| 2393 | /* SSL_set_fd(con,s); */ | 2247 | /* SSL_set_fd(con,s); */ |
| 2394 | BIO_set_ssl(ssl_bio,con,BIO_CLOSE); | 2248 | BIO_set_ssl(ssl_bio, con, BIO_CLOSE); |
| 2395 | BIO_push(io,ssl_bio); | 2249 | BIO_push(io, ssl_bio); |
| 2396 | 2250 | ||
| 2397 | if (s_debug) | 2251 | if (s_debug) { |
| 2398 | { | ||
| 2399 | SSL_set_debug(con, 1); | 2252 | SSL_set_debug(con, 1); |
| 2400 | BIO_set_callback(SSL_get_rbio(con),bio_dump_callback); | 2253 | BIO_set_callback(SSL_get_rbio(con), bio_dump_callback); |
| 2401 | BIO_set_callback_arg(SSL_get_rbio(con),(char *)bio_s_out); | 2254 | BIO_set_callback_arg(SSL_get_rbio(con), (char *) bio_s_out); |
| 2402 | } | 2255 | } |
| 2403 | if (s_msg) | 2256 | if (s_msg) { |
| 2404 | { | ||
| 2405 | SSL_set_msg_callback(con, msg_cb); | 2257 | SSL_set_msg_callback(con, msg_cb); |
| 2406 | SSL_set_msg_callback_arg(con, bio_s_out); | 2258 | SSL_set_msg_callback_arg(con, bio_s_out); |
| 2407 | } | 2259 | } |
| 2408 | 2260 | for (;;) { | |
| 2409 | for (;;) | 2261 | if (hack) { |
| 2410 | { | 2262 | i = SSL_accept(con); |
| 2411 | if (hack) | ||
| 2412 | { | ||
| 2413 | i=SSL_accept(con); | ||
| 2414 | #ifndef OPENSSL_NO_SRP | 2263 | #ifndef OPENSSL_NO_SRP |
| 2415 | while (i <= 0 && SSL_get_error(con,i) == SSL_ERROR_WANT_X509_LOOKUP) | 2264 | while (i <= 0 && SSL_get_error(con, i) == SSL_ERROR_WANT_X509_LOOKUP) { |
| 2416 | { | 2265 | BIO_printf(bio_s_out, "LOOKUP during accept %s\n", srp_callback_parm.login); |
| 2417 | BIO_printf(bio_s_out,"LOOKUP during accept %s\n",srp_callback_parm.login); | 2266 | srp_callback_parm.user = SRP_VBASE_get_by_user(srp_callback_parm.vb, srp_callback_parm.login); |
| 2418 | srp_callback_parm.user = SRP_VBASE_get_by_user(srp_callback_parm.vb, srp_callback_parm.login); | 2267 | if (srp_callback_parm.user) |
| 2419 | if (srp_callback_parm.user) | 2268 | BIO_printf(bio_s_out, "LOOKUP done %s\n", srp_callback_parm.user->info); |
| 2420 | BIO_printf(bio_s_out,"LOOKUP done %s\n",srp_callback_parm.user->info); | 2269 | else |
| 2421 | else | 2270 | BIO_printf(bio_s_out, "LOOKUP not successful\n"); |
| 2422 | BIO_printf(bio_s_out,"LOOKUP not successful\n"); | 2271 | i = SSL_accept(con); |
| 2423 | i=SSL_accept(con); | 2272 | } |
| 2424 | } | ||
| 2425 | #endif | 2273 | #endif |
| 2426 | switch (SSL_get_error(con,i)) | 2274 | switch (SSL_get_error(con, i)) { |
| 2427 | { | ||
| 2428 | case SSL_ERROR_NONE: | 2275 | case SSL_ERROR_NONE: |
| 2429 | break; | 2276 | break; |
| 2430 | case SSL_ERROR_WANT_WRITE: | 2277 | case SSL_ERROR_WANT_WRITE: |
| @@ -2434,142 +2281,122 @@ static int www_body(char *hostname, int s, unsigned char *context) | |||
| 2434 | case SSL_ERROR_SYSCALL: | 2281 | case SSL_ERROR_SYSCALL: |
| 2435 | case SSL_ERROR_SSL: | 2282 | case SSL_ERROR_SSL: |
| 2436 | case SSL_ERROR_ZERO_RETURN: | 2283 | case SSL_ERROR_ZERO_RETURN: |
| 2437 | ret=1; | 2284 | ret = 1; |
| 2438 | goto err; | 2285 | goto err; |
| 2439 | /* break; */ | 2286 | /* break; */ |
| 2440 | } | ||
| 2441 | |||
| 2442 | SSL_renegotiate(con); | ||
| 2443 | SSL_write(con,NULL,0); | ||
| 2444 | } | 2287 | } |
| 2445 | 2288 | ||
| 2446 | i=BIO_gets(io,buf,bufsize-1); | 2289 | SSL_renegotiate(con); |
| 2447 | if (i < 0) /* error */ | 2290 | SSL_write(con, NULL, 0); |
| 2448 | { | 2291 | } |
| 2449 | if (!BIO_should_retry(io)) | 2292 | i = BIO_gets(io, buf, bufsize - 1); |
| 2450 | { | 2293 | if (i < 0) { /* error */ |
| 2294 | if (!BIO_should_retry(io)) { | ||
| 2451 | if (!s_quiet) | 2295 | if (!s_quiet) |
| 2452 | ERR_print_errors(bio_err); | 2296 | ERR_print_errors(bio_err); |
| 2453 | goto err; | 2297 | goto err; |
| 2454 | } | 2298 | } else { |
| 2455 | else | 2299 | BIO_printf(bio_s_out, "read R BLOCK\n"); |
| 2456 | { | ||
| 2457 | BIO_printf(bio_s_out,"read R BLOCK\n"); | ||
| 2458 | sleep(1); | 2300 | sleep(1); |
| 2459 | continue; | 2301 | continue; |
| 2460 | } | ||
| 2461 | } | 2302 | } |
| 2462 | else if (i == 0) /* end of input */ | 2303 | } else if (i == 0) { /* end of input */ |
| 2463 | { | 2304 | ret = 1; |
| 2464 | ret=1; | ||
| 2465 | goto end; | 2305 | goto end; |
| 2466 | } | 2306 | } |
| 2467 | |||
| 2468 | /* else we have data */ | 2307 | /* else we have data */ |
| 2469 | if ( ((www == 1) && (strncmp("GET ",buf,4) == 0)) || | 2308 | if (((www == 1) && (strncmp("GET ", buf, 4) == 0)) || |
| 2470 | ((www == 2) && (strncmp("GET /stats ",buf,11) == 0))) | 2309 | ((www == 2) && (strncmp("GET /stats ", buf, 11) == 0))) { |
| 2471 | { | ||
| 2472 | char *p; | 2310 | char *p; |
| 2473 | X509 *peer; | 2311 | X509 *peer; |
| 2474 | STACK_OF(SSL_CIPHER) *sk; | 2312 | STACK_OF(SSL_CIPHER) * sk; |
| 2475 | static const char *space=" "; | 2313 | static const char *space = " "; |
| 2476 | 2314 | ||
| 2477 | BIO_puts(io,"HTTP/1.0 200 ok\r\nContent-type: text/html\r\n\r\n"); | 2315 | BIO_puts(io, "HTTP/1.0 200 ok\r\nContent-type: text/html\r\n\r\n"); |
| 2478 | BIO_puts(io,"<HTML><BODY BGCOLOR=\"#ffffff\">\n"); | 2316 | BIO_puts(io, "<HTML><BODY BGCOLOR=\"#ffffff\">\n"); |
| 2479 | BIO_puts(io,"<pre>\n"); | 2317 | BIO_puts(io, "<pre>\n"); |
| 2480 | /* BIO_puts(io,SSLeay_version(SSLEAY_VERSION));*/ | 2318 | /* BIO_puts(io,SSLeay_version(SSLEAY_VERSION));*/ |
| 2481 | BIO_puts(io,"\n"); | 2319 | BIO_puts(io, "\n"); |
| 2482 | for (i=0; i<local_argc; i++) | 2320 | for (i = 0; i < local_argc; i++) { |
| 2483 | { | 2321 | BIO_puts(io, local_argv[i]); |
| 2484 | BIO_puts(io,local_argv[i]); | 2322 | BIO_write(io, " ", 1); |
| 2485 | BIO_write(io," ",1); | 2323 | } |
| 2486 | } | 2324 | BIO_puts(io, "\n"); |
| 2487 | BIO_puts(io,"\n"); | ||
| 2488 | 2325 | ||
| 2489 | BIO_printf(io, | 2326 | BIO_printf(io, |
| 2490 | "Secure Renegotiation IS%s supported\n", | 2327 | "Secure Renegotiation IS%s supported\n", |
| 2491 | SSL_get_secure_renegotiation_support(con) ? | 2328 | SSL_get_secure_renegotiation_support(con) ? |
| 2492 | "" : " NOT"); | 2329 | "" : " NOT"); |
| 2493 | 2330 | ||
| 2494 | /* The following is evil and should not really | 2331 | /* |
| 2495 | * be done */ | 2332 | * The following is evil and should not really be |
| 2496 | BIO_printf(io,"Ciphers supported in s_server binary\n"); | 2333 | * done |
| 2497 | sk=SSL_get_ciphers(con); | 2334 | */ |
| 2498 | j=sk_SSL_CIPHER_num(sk); | 2335 | BIO_printf(io, "Ciphers supported in s_server binary\n"); |
| 2499 | for (i=0; i<j; i++) | 2336 | sk = SSL_get_ciphers(con); |
| 2500 | { | 2337 | j = sk_SSL_CIPHER_num(sk); |
| 2501 | c=sk_SSL_CIPHER_value(sk,i); | 2338 | for (i = 0; i < j; i++) { |
| 2502 | BIO_printf(io,"%-11s:%-25s", | 2339 | c = sk_SSL_CIPHER_value(sk, i); |
| 2503 | SSL_CIPHER_get_version(c), | 2340 | BIO_printf(io, "%-11s:%-25s", |
| 2504 | SSL_CIPHER_get_name(c)); | 2341 | SSL_CIPHER_get_version(c), |
| 2505 | if ((((i+1)%2) == 0) && (i+1 != j)) | 2342 | SSL_CIPHER_get_name(c)); |
| 2506 | BIO_puts(io,"\n"); | 2343 | if ((((i + 1) % 2) == 0) && (i + 1 != j)) |
| 2507 | } | 2344 | BIO_puts(io, "\n"); |
| 2508 | BIO_puts(io,"\n"); | 2345 | } |
| 2509 | p=SSL_get_shared_ciphers(con,buf,bufsize); | 2346 | BIO_puts(io, "\n"); |
| 2510 | if (p != NULL) | 2347 | p = SSL_get_shared_ciphers(con, buf, bufsize); |
| 2511 | { | 2348 | if (p != NULL) { |
| 2512 | BIO_printf(io,"---\nCiphers common between both SSL end points:\n"); | 2349 | BIO_printf(io, "---\nCiphers common between both SSL end points:\n"); |
| 2513 | j=i=0; | 2350 | j = i = 0; |
| 2514 | while (*p) | 2351 | while (*p) { |
| 2515 | { | 2352 | if (*p == ':') { |
| 2516 | if (*p == ':') | 2353 | BIO_write(io, space, 26 - j); |
| 2517 | { | ||
| 2518 | BIO_write(io,space,26-j); | ||
| 2519 | i++; | 2354 | i++; |
| 2520 | j=0; | 2355 | j = 0; |
| 2521 | BIO_write(io,((i%3)?" ":"\n"),1); | 2356 | BIO_write(io, ((i % 3) ? " " : "\n"), 1); |
| 2522 | } | 2357 | } else { |
| 2523 | else | 2358 | BIO_write(io, p, 1); |
| 2524 | { | ||
| 2525 | BIO_write(io,p,1); | ||
| 2526 | j++; | 2359 | j++; |
| 2527 | } | ||
| 2528 | p++; | ||
| 2529 | } | 2360 | } |
| 2530 | BIO_puts(io,"\n"); | 2361 | p++; |
| 2531 | } | ||
| 2532 | BIO_printf(io,(SSL_cache_hit(con) | ||
| 2533 | ?"---\nReused, " | ||
| 2534 | :"---\nNew, ")); | ||
| 2535 | c=SSL_get_current_cipher(con); | ||
| 2536 | BIO_printf(io,"%s, Cipher is %s\n", | ||
| 2537 | SSL_CIPHER_get_version(c), | ||
| 2538 | SSL_CIPHER_get_name(c)); | ||
| 2539 | SSL_SESSION_print(io,SSL_get_session(con)); | ||
| 2540 | BIO_printf(io,"---\n"); | ||
| 2541 | print_stats(io,SSL_get_SSL_CTX(con)); | ||
| 2542 | BIO_printf(io,"---\n"); | ||
| 2543 | peer=SSL_get_peer_certificate(con); | ||
| 2544 | if (peer != NULL) | ||
| 2545 | { | ||
| 2546 | BIO_printf(io,"Client certificate\n"); | ||
| 2547 | X509_print(io,peer); | ||
| 2548 | PEM_write_bio_X509(io,peer); | ||
| 2549 | } | 2362 | } |
| 2550 | else | 2363 | BIO_puts(io, "\n"); |
| 2551 | BIO_puts(io,"no client certificate available\n"); | 2364 | } |
| 2552 | BIO_puts(io,"</BODY></HTML>\r\n\r\n"); | 2365 | BIO_printf(io, (SSL_cache_hit(con) |
| 2366 | ? "---\nReused, " | ||
| 2367 | : "---\nNew, ")); | ||
| 2368 | c = SSL_get_current_cipher(con); | ||
| 2369 | BIO_printf(io, "%s, Cipher is %s\n", | ||
| 2370 | SSL_CIPHER_get_version(c), | ||
| 2371 | SSL_CIPHER_get_name(c)); | ||
| 2372 | SSL_SESSION_print(io, SSL_get_session(con)); | ||
| 2373 | BIO_printf(io, "---\n"); | ||
| 2374 | print_stats(io, SSL_get_SSL_CTX(con)); | ||
| 2375 | BIO_printf(io, "---\n"); | ||
| 2376 | peer = SSL_get_peer_certificate(con); | ||
| 2377 | if (peer != NULL) { | ||
| 2378 | BIO_printf(io, "Client certificate\n"); | ||
| 2379 | X509_print(io, peer); | ||
| 2380 | PEM_write_bio_X509(io, peer); | ||
| 2381 | } else | ||
| 2382 | BIO_puts(io, "no client certificate available\n"); | ||
| 2383 | BIO_puts(io, "</BODY></HTML>\r\n\r\n"); | ||
| 2553 | break; | 2384 | break; |
| 2554 | } | 2385 | } else if ((www == 2 || www == 3) |
| 2555 | else if ((www == 2 || www == 3) | 2386 | && (strncmp("GET /", buf, 5) == 0)) { |
| 2556 | && (strncmp("GET /",buf,5) == 0)) | ||
| 2557 | { | ||
| 2558 | BIO *file; | 2387 | BIO *file; |
| 2559 | char *p,*e; | 2388 | char *p, *e; |
| 2560 | static const char *text="HTTP/1.0 200 ok\r\nContent-type: text/plain\r\n\r\n"; | 2389 | static const char *text = "HTTP/1.0 200 ok\r\nContent-type: text/plain\r\n\r\n"; |
| 2561 | 2390 | ||
| 2562 | /* skip the '/' */ | 2391 | /* skip the '/' */ |
| 2563 | p= &(buf[5]); | 2392 | p = &(buf[5]); |
| 2564 | 2393 | ||
| 2565 | dot = 1; | 2394 | dot = 1; |
| 2566 | for (e=p; *e != '\0'; e++) | 2395 | for (e = p; *e != '\0'; e++) { |
| 2567 | { | ||
| 2568 | if (e[0] == ' ') | 2396 | if (e[0] == ' ') |
| 2569 | break; | 2397 | break; |
| 2570 | 2398 | ||
| 2571 | switch (dot) | 2399 | switch (dot) { |
| 2572 | { | ||
| 2573 | case 1: | 2400 | case 1: |
| 2574 | dot = (e[0] == '.') ? 2 : 0; | 2401 | dot = (e[0] == '.') ? 2 : 0; |
| 2575 | break; | 2402 | break; |
| @@ -2579,132 +2406,119 @@ static int www_body(char *hostname, int s, unsigned char *context) | |||
| 2579 | case 3: | 2406 | case 3: |
| 2580 | dot = (e[0] == '/') ? -1 : 0; | 2407 | dot = (e[0] == '/') ? -1 : 0; |
| 2581 | break; | 2408 | break; |
| 2582 | } | 2409 | } |
| 2583 | if (dot == 0) | 2410 | if (dot == 0) |
| 2584 | dot = (e[0] == '/') ? 1 : 0; | 2411 | dot = (e[0] == '/') ? 1 : 0; |
| 2585 | } | 2412 | } |
| 2586 | dot = (dot == 3) || (dot == -1); /* filename contains ".." component */ | 2413 | dot = (dot == 3) || (dot == -1); /* filename contains |
| 2414 | * ".." component */ | ||
| 2587 | 2415 | ||
| 2588 | if (*e == '\0') | 2416 | if (*e == '\0') { |
| 2589 | { | 2417 | BIO_puts(io, text); |
| 2590 | BIO_puts(io,text); | 2418 | BIO_printf(io, "'%s' is an invalid file name\r\n", p); |
| 2591 | BIO_printf(io,"'%s' is an invalid file name\r\n",p); | ||
| 2592 | break; | 2419 | break; |
| 2593 | } | 2420 | } |
| 2594 | *e='\0'; | 2421 | *e = '\0'; |
| 2595 | 2422 | ||
| 2596 | if (dot) | 2423 | if (dot) { |
| 2597 | { | 2424 | BIO_puts(io, text); |
| 2598 | BIO_puts(io,text); | 2425 | BIO_printf(io, "'%s' contains '..' reference\r\n", p); |
| 2599 | BIO_printf(io,"'%s' contains '..' reference\r\n",p); | ||
| 2600 | break; | 2426 | break; |
| 2601 | } | 2427 | } |
| 2602 | 2428 | if (*p == '/') { | |
| 2603 | if (*p == '/') | 2429 | BIO_puts(io, text); |
| 2604 | { | 2430 | BIO_printf(io, "'%s' is an invalid path\r\n", p); |
| 2605 | BIO_puts(io,text); | ||
| 2606 | BIO_printf(io,"'%s' is an invalid path\r\n",p); | ||
| 2607 | break; | 2431 | break; |
| 2608 | } | 2432 | } |
| 2609 | |||
| 2610 | #if 0 | 2433 | #if 0 |
| 2611 | /* append if a directory lookup */ | 2434 | /* append if a directory lookup */ |
| 2612 | if (e[-1] == '/') | 2435 | if (e[-1] == '/') |
| 2613 | strcat(p,"index.html"); | 2436 | strcat(p, "index.html"); |
| 2614 | #endif | 2437 | #endif |
| 2615 | 2438 | ||
| 2616 | /* if a directory, do the index thang */ | 2439 | /* if a directory, do the index thang */ |
| 2617 | if (app_isdir(p)>0) | 2440 | if (app_isdir(p) > 0) { |
| 2618 | { | 2441 | #if 0 /* must check buffer size */ |
| 2619 | #if 0 /* must check buffer size */ | 2442 | strcat(p, "/index.html"); |
| 2620 | strcat(p,"/index.html"); | ||
| 2621 | #else | 2443 | #else |
| 2622 | BIO_puts(io,text); | 2444 | BIO_puts(io, text); |
| 2623 | BIO_printf(io,"'%s' is a directory\r\n",p); | 2445 | BIO_printf(io, "'%s' is a directory\r\n", p); |
| 2624 | break; | 2446 | break; |
| 2625 | #endif | 2447 | #endif |
| 2626 | } | 2448 | } |
| 2627 | 2449 | if ((file = BIO_new_file(p, "r")) == NULL) { | |
| 2628 | if ((file=BIO_new_file(p,"r")) == NULL) | 2450 | BIO_puts(io, text); |
| 2629 | { | 2451 | BIO_printf(io, "Error opening '%s'\r\n", p); |
| 2630 | BIO_puts(io,text); | ||
| 2631 | BIO_printf(io,"Error opening '%s'\r\n",p); | ||
| 2632 | ERR_print_errors(io); | 2452 | ERR_print_errors(io); |
| 2633 | break; | 2453 | break; |
| 2634 | } | 2454 | } |
| 2635 | |||
| 2636 | if (!s_quiet) | 2455 | if (!s_quiet) |
| 2637 | BIO_printf(bio_err,"FILE:%s\n",p); | 2456 | BIO_printf(bio_err, "FILE:%s\n", p); |
| 2638 | 2457 | ||
| 2639 | if (www == 2) | 2458 | if (www == 2) { |
| 2640 | { | 2459 | i = strlen(p); |
| 2641 | i=strlen(p); | 2460 | if (((i > 5) && (strcmp(&(p[i - 5]), ".html") == 0)) || |
| 2642 | if ( ((i > 5) && (strcmp(&(p[i-5]),".html") == 0)) || | 2461 | ((i > 4) && (strcmp(&(p[i - 4]), ".php") == 0)) || |
| 2643 | ((i > 4) && (strcmp(&(p[i-4]),".php") == 0)) || | 2462 | ((i > 4) && (strcmp(&(p[i - 4]), ".htm") == 0))) |
| 2644 | ((i > 4) && (strcmp(&(p[i-4]),".htm") == 0))) | 2463 | BIO_puts(io, "HTTP/1.0 200 ok\r\nContent-type: text/html\r\n\r\n"); |
| 2645 | BIO_puts(io,"HTTP/1.0 200 ok\r\nContent-type: text/html\r\n\r\n"); | 2464 | else |
| 2646 | else | 2465 | BIO_puts(io, "HTTP/1.0 200 ok\r\nContent-type: text/plain\r\n\r\n"); |
| 2647 | BIO_puts(io,"HTTP/1.0 200 ok\r\nContent-type: text/plain\r\n\r\n"); | 2466 | } |
| 2648 | } | ||
| 2649 | /* send the file */ | 2467 | /* send the file */ |
| 2650 | for (;;) | 2468 | for (;;) { |
| 2651 | { | 2469 | i = BIO_read(file, buf, bufsize); |
| 2652 | i=BIO_read(file,buf,bufsize); | 2470 | if (i <= 0) |
| 2653 | if (i <= 0) break; | 2471 | break; |
| 2654 | 2472 | ||
| 2655 | #ifdef RENEG | 2473 | #ifdef RENEG |
| 2656 | total_bytes+=i; | 2474 | total_bytes += i; |
| 2657 | fprintf(stderr,"%d\n",i); | 2475 | fprintf(stderr, "%d\n", i); |
| 2658 | if (total_bytes > 3*1024) | 2476 | if (total_bytes > 3 * 1024) { |
| 2659 | { | 2477 | total_bytes = 0; |
| 2660 | total_bytes=0; | 2478 | fprintf(stderr, "RENEGOTIATE\n"); |
| 2661 | fprintf(stderr,"RENEGOTIATE\n"); | ||
| 2662 | SSL_renegotiate(con); | 2479 | SSL_renegotiate(con); |
| 2663 | } | 2480 | } |
| 2664 | #endif | 2481 | #endif |
| 2665 | 2482 | ||
| 2666 | for (j=0; j<i; ) | 2483 | for (j = 0; j < i;) { |
| 2667 | { | ||
| 2668 | #ifdef RENEG | 2484 | #ifdef RENEG |
| 2669 | { static count=0; if (++count == 13) { SSL_renegotiate(con); } } | 2485 | { |
| 2486 | static count = 0; | ||
| 2487 | if (++count == 13) { | ||
| 2488 | SSL_renegotiate(con); | ||
| 2489 | } | ||
| 2490 | } | ||
| 2670 | #endif | 2491 | #endif |
| 2671 | k=BIO_write(io,&(buf[j]),i-j); | 2492 | k = BIO_write(io, &(buf[j]), i - j); |
| 2672 | if (k <= 0) | 2493 | if (k <= 0) { |
| 2673 | { | ||
| 2674 | if (!BIO_should_retry(io)) | 2494 | if (!BIO_should_retry(io)) |
| 2675 | goto write_error; | 2495 | goto write_error; |
| 2676 | else | 2496 | else { |
| 2677 | { | 2497 | BIO_printf(bio_s_out, "rwrite W BLOCK\n"); |
| 2678 | BIO_printf(bio_s_out,"rwrite W BLOCK\n"); | ||
| 2679 | } | ||
| 2680 | } | ||
| 2681 | else | ||
| 2682 | { | ||
| 2683 | j+=k; | ||
| 2684 | } | 2498 | } |
| 2499 | } else { | ||
| 2500 | j += k; | ||
| 2685 | } | 2501 | } |
| 2686 | } | 2502 | } |
| 2687 | write_error: | 2503 | } |
| 2504 | write_error: | ||
| 2688 | BIO_free(file); | 2505 | BIO_free(file); |
| 2689 | break; | 2506 | break; |
| 2690 | } | ||
| 2691 | } | 2507 | } |
| 2508 | } | ||
| 2692 | 2509 | ||
| 2693 | for (;;) | 2510 | for (;;) { |
| 2694 | { | 2511 | i = (int) BIO_flush(io); |
| 2695 | i=(int)BIO_flush(io); | 2512 | if (i <= 0) { |
| 2696 | if (i <= 0) | ||
| 2697 | { | ||
| 2698 | if (!BIO_should_retry(io)) | 2513 | if (!BIO_should_retry(io)) |
| 2699 | break; | 2514 | break; |
| 2700 | } | 2515 | } else |
| 2701 | else | ||
| 2702 | break; | 2516 | break; |
| 2703 | } | 2517 | } |
| 2704 | end: | 2518 | end: |
| 2705 | #if 1 | 2519 | #if 1 |
| 2706 | /* make sure we re-use sessions */ | 2520 | /* make sure we re-use sessions */ |
| 2707 | SSL_set_shutdown(con,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); | 2521 | SSL_set_shutdown(con, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); |
| 2708 | #else | 2522 | #else |
| 2709 | /* This kills performance */ | 2523 | /* This kills performance */ |
| 2710 | /* SSL_shutdown(con); A shutdown gets sent in the | 2524 | /* SSL_shutdown(con); A shutdown gets sent in the |
| @@ -2714,65 +2528,68 @@ end: | |||
| 2714 | err: | 2528 | err: |
| 2715 | 2529 | ||
| 2716 | if (ret >= 0) | 2530 | if (ret >= 0) |
| 2717 | BIO_printf(bio_s_out,"ACCEPT\n"); | 2531 | BIO_printf(bio_s_out, "ACCEPT\n"); |
| 2718 | 2532 | ||
| 2719 | if (buf != NULL) free(buf); | 2533 | if (buf != NULL) |
| 2720 | if (io != NULL) BIO_free_all(io); | 2534 | free(buf); |
| 2535 | if (io != NULL) | ||
| 2536 | BIO_free_all(io); | ||
| 2721 | /* if (ssl_bio != NULL) BIO_free(ssl_bio);*/ | 2537 | /* if (ssl_bio != NULL) BIO_free(ssl_bio);*/ |
| 2722 | return(ret); | 2538 | return (ret); |
| 2723 | } | 2539 | } |
| 2724 | 2540 | ||
| 2725 | #ifndef OPENSSL_NO_RSA | 2541 | #ifndef OPENSSL_NO_RSA |
| 2726 | static RSA *tmp_rsa_cb(SSL *s, int is_export, int keylength) | 2542 | static RSA * |
| 2727 | { | 2543 | tmp_rsa_cb(SSL * s, int is_export, int keylength) |
| 2544 | { | ||
| 2728 | BIGNUM *bn = NULL; | 2545 | BIGNUM *bn = NULL; |
| 2729 | static RSA *rsa_tmp=NULL; | 2546 | static RSA *rsa_tmp = NULL; |
| 2730 | 2547 | ||
| 2731 | if (!rsa_tmp && ((bn = BN_new()) == NULL)) | 2548 | if (!rsa_tmp && ((bn = BN_new()) == NULL)) |
| 2732 | BIO_printf(bio_err,"Allocation error in generating RSA key\n"); | 2549 | BIO_printf(bio_err, "Allocation error in generating RSA key\n"); |
| 2733 | if (!rsa_tmp && bn) | 2550 | if (!rsa_tmp && bn) { |
| 2734 | { | 2551 | if (!s_quiet) { |
| 2735 | if (!s_quiet) | 2552 | BIO_printf(bio_err, "Generating temp (%d bit) RSA key...", keylength); |
| 2736 | { | 2553 | (void) BIO_flush(bio_err); |
| 2737 | BIO_printf(bio_err,"Generating temp (%d bit) RSA key...",keylength); | 2554 | } |
| 2738 | (void)BIO_flush(bio_err); | 2555 | if (!BN_set_word(bn, RSA_F4) || ((rsa_tmp = RSA_new()) == NULL) || |
| 2739 | } | 2556 | !RSA_generate_key_ex(rsa_tmp, keylength, bn, NULL)) { |
| 2740 | if(!BN_set_word(bn, RSA_F4) || ((rsa_tmp = RSA_new()) == NULL) || | 2557 | if (rsa_tmp) |
| 2741 | !RSA_generate_key_ex(rsa_tmp, keylength, bn, NULL)) | 2558 | RSA_free(rsa_tmp); |
| 2742 | { | ||
| 2743 | if(rsa_tmp) RSA_free(rsa_tmp); | ||
| 2744 | rsa_tmp = NULL; | 2559 | rsa_tmp = NULL; |
| 2745 | } | ||
| 2746 | if (!s_quiet) | ||
| 2747 | { | ||
| 2748 | BIO_printf(bio_err,"\n"); | ||
| 2749 | (void)BIO_flush(bio_err); | ||
| 2750 | } | ||
| 2751 | BN_free(bn); | ||
| 2752 | } | 2560 | } |
| 2753 | return(rsa_tmp); | 2561 | if (!s_quiet) { |
| 2562 | BIO_printf(bio_err, "\n"); | ||
| 2563 | (void) BIO_flush(bio_err); | ||
| 2564 | } | ||
| 2565 | BN_free(bn); | ||
| 2754 | } | 2566 | } |
| 2567 | return (rsa_tmp); | ||
| 2568 | } | ||
| 2755 | #endif | 2569 | #endif |
| 2756 | 2570 | ||
| 2757 | #define MAX_SESSION_ID_ATTEMPTS 10 | 2571 | #define MAX_SESSION_ID_ATTEMPTS 10 |
| 2758 | static int generate_session_id(const SSL *ssl, unsigned char *id, | 2572 | static int |
| 2759 | unsigned int *id_len) | 2573 | generate_session_id(const SSL * ssl, unsigned char *id, |
| 2760 | { | 2574 | unsigned int *id_len) |
| 2575 | { | ||
| 2761 | unsigned int count = 0; | 2576 | unsigned int count = 0; |
| 2762 | do { | 2577 | do { |
| 2763 | RAND_pseudo_bytes(id, *id_len); | 2578 | RAND_pseudo_bytes(id, *id_len); |
| 2764 | /* Prefix the session_id with the required prefix. NB: If our | 2579 | /* |
| 2765 | * prefix is too long, clip it - but there will be worse effects | 2580 | * Prefix the session_id with the required prefix. NB: If our |
| 2766 | * anyway, eg. the server could only possibly create 1 session | 2581 | * prefix is too long, clip it - but there will be worse |
| 2767 | * ID (ie. the prefix!) so all future session negotiations will | 2582 | * effects anyway, eg. the server could only possibly create |
| 2768 | * fail due to conflicts. */ | 2583 | * 1 session ID (ie. the prefix!) so all future session |
| 2584 | * negotiations will fail due to conflicts. | ||
| 2585 | */ | ||
| 2769 | memcpy(id, session_id_prefix, | 2586 | memcpy(id, session_id_prefix, |
| 2770 | (strlen(session_id_prefix) < *id_len) ? | 2587 | (strlen(session_id_prefix) < *id_len) ? |
| 2771 | strlen(session_id_prefix) : *id_len); | 2588 | strlen(session_id_prefix) : *id_len); |
| 2772 | } | 2589 | } |
| 2773 | while(SSL_has_matching_session_id(ssl, id, *id_len) && | 2590 | while (SSL_has_matching_session_id(ssl, id, *id_len) && |
| 2774 | (++count < MAX_SESSION_ID_ATTEMPTS)); | 2591 | (++count < MAX_SESSION_ID_ATTEMPTS)); |
| 2775 | if(count >= MAX_SESSION_ID_ATTEMPTS) | 2592 | if (count >= MAX_SESSION_ID_ATTEMPTS) |
| 2776 | return 0; | 2593 | return 0; |
| 2777 | return 1; | 2594 | return 1; |
| 2778 | } | 2595 | } |
diff --git a/src/lib/libssl/src/apps/s_socket.c b/src/lib/libssl/src/apps/s_socket.c index 6e7d31554a..f3c66f623a 100644 --- a/src/lib/libssl/src/apps/s_socket.c +++ b/src/lib/libssl/src/apps/s_socket.c | |||
| @@ -126,7 +126,6 @@ init_client(int *sock, char *host, char *port, int type, int af) | |||
| 126 | } | 126 | } |
| 127 | return (0); | 127 | return (0); |
| 128 | } | 128 | } |
| 129 | |||
| 130 | for (ai = ai_top; ai != NULL; ai = ai->ai_next) { | 129 | for (ai = ai_top; ai != NULL; ai = ai->ai_next) { |
| 131 | s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); | 130 | s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); |
| 132 | if (s == -1) { | 131 | if (s == -1) { |
| @@ -135,7 +134,7 @@ init_client(int *sock, char *host, char *port, int type, int af) | |||
| 135 | if (type == SOCK_STREAM) { | 134 | if (type == SOCK_STREAM) { |
| 136 | i = 0; | 135 | i = 0; |
| 137 | i = setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, | 136 | i = setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, |
| 138 | (char *)&i, sizeof(i)); | 137 | (char *) &i, sizeof(i)); |
| 139 | if (i < 0) { | 138 | if (i < 0) { |
| 140 | perror("keepalive"); | 139 | perror("keepalive"); |
| 141 | return (0); | 140 | return (0); |
| @@ -146,7 +145,6 @@ init_client(int *sock, char *host, char *port, int type, int af) | |||
| 146 | freeaddrinfo(ai_top); | 145 | freeaddrinfo(ai_top); |
| 147 | return (1); | 146 | return (1); |
| 148 | } | 147 | } |
| 149 | |||
| 150 | close(s); | 148 | close(s); |
| 151 | } | 149 | } |
| 152 | 150 | ||
| @@ -158,7 +156,7 @@ init_client(int *sock, char *host, char *port, int type, int af) | |||
| 158 | 156 | ||
| 159 | int | 157 | int |
| 160 | do_server(int port, int type, int *ret, | 158 | do_server(int port, int type, int *ret, |
| 161 | int (*cb)(char *hostname, int s, unsigned char *context), | 159 | int (*cb) (char *hostname, int s, unsigned char *context), |
| 162 | unsigned char *context) | 160 | unsigned char *context) |
| 163 | { | 161 | { |
| 164 | int sock; | 162 | int sock; |
| @@ -171,7 +169,7 @@ do_server(int port, int type, int *ret, | |||
| 171 | 169 | ||
| 172 | if (ret != NULL) { | 170 | if (ret != NULL) { |
| 173 | *ret = accept_socket; | 171 | *ret = accept_socket; |
| 174 | /* return(1);*/ | 172 | /* return(1); */ |
| 175 | } | 173 | } |
| 176 | for (;;) { | 174 | for (;;) { |
| 177 | if (type == SOCK_STREAM) { | 175 | if (type == SOCK_STREAM) { |
| @@ -182,7 +180,7 @@ do_server(int port, int type, int *ret, | |||
| 182 | } | 180 | } |
| 183 | } else | 181 | } else |
| 184 | sock = accept_socket; | 182 | sock = accept_socket; |
| 185 | i = (*cb)(name, sock, context); | 183 | i = (*cb) (name, sock, context); |
| 186 | if (name != NULL) | 184 | if (name != NULL) |
| 187 | free(name); | 185 | free(name); |
| 188 | if (type == SOCK_STREAM) { | 186 | if (type == SOCK_STREAM) { |
| @@ -207,22 +205,22 @@ init_server_long(int *sock, int port, char *ip, int type) | |||
| 207 | if (!ssl_sock_init()) | 205 | if (!ssl_sock_init()) |
| 208 | return (0); | 206 | return (0); |
| 209 | 207 | ||
| 210 | memset((char *)&server, 0,sizeof(server)); | 208 | memset((char *) &server, 0, sizeof(server)); |
| 211 | server.sin_family = AF_INET; | 209 | server.sin_family = AF_INET; |
| 212 | server.sin_port = htons((unsigned short)port); | 210 | server.sin_port = htons((unsigned short) port); |
| 213 | if (ip == NULL) | 211 | if (ip == NULL) |
| 214 | server.sin_addr.s_addr = INADDR_ANY; | 212 | server.sin_addr.s_addr = INADDR_ANY; |
| 215 | else | 213 | else |
| 216 | /* Added for T3E, address-of fails on bit field (beckman@acl.lanl.gov) */ | 214 | /* Added for T3E, address-of fails on bit field (beckman@acl.lanl.gov) */ |
| 217 | #ifndef BIT_FIELD_LIMITS | 215 | #ifndef BIT_FIELD_LIMITS |
| 218 | memcpy(&server.sin_addr.s_addr, ip, 4); | 216 | memcpy(&server.sin_addr.s_addr, ip, 4); |
| 219 | #else | 217 | #else |
| 220 | memcpy(&server.sin_addr, ip, 4); | 218 | memcpy(&server.sin_addr, ip, 4); |
| 221 | #endif | 219 | #endif |
| 222 | 220 | ||
| 223 | if (type == SOCK_STREAM) | 221 | if (type == SOCK_STREAM) |
| 224 | s = socket(AF_INET, SOCK_STREAM, SOCKET_PROTOCOL); | 222 | s = socket(AF_INET, SOCK_STREAM, SOCKET_PROTOCOL); |
| 225 | else /* type == SOCK_DGRAM */ | 223 | else /* type == SOCK_DGRAM */ |
| 226 | s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); | 224 | s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); |
| 227 | 225 | ||
| 228 | if (s == -1) | 226 | if (s == -1) |
| @@ -234,7 +232,7 @@ init_server_long(int *sock, int port, char *ip, int type) | |||
| 234 | (void *) &j, sizeof j); | 232 | (void *) &j, sizeof j); |
| 235 | } | 233 | } |
| 236 | #endif | 234 | #endif |
| 237 | if (bind(s, (struct sockaddr *)&server, sizeof(server)) == -1) { | 235 | if (bind(s, (struct sockaddr *) & server, sizeof(server)) == -1) { |
| 238 | perror("bind"); | 236 | perror("bind"); |
| 239 | goto err; | 237 | goto err; |
| 240 | } | 238 | } |
| @@ -271,24 +269,24 @@ do_accept(int acc_sock, int *sock, char **host) | |||
| 271 | 269 | ||
| 272 | redoit: | 270 | redoit: |
| 273 | 271 | ||
| 274 | memset((char *)&from, 0, sizeof(from)); | 272 | memset((char *) &from, 0, sizeof(from)); |
| 275 | len = sizeof(from); | 273 | len = sizeof(from); |
| 276 | /* Note: under VMS with SOCKETSHR the fourth parameter is currently | 274 | /* |
| 277 | * of type (int *) whereas under other systems it is (void *) if | 275 | * Note: under VMS with SOCKETSHR the fourth parameter is currently |
| 278 | * you don't have a cast it will choke the compiler: if you do | 276 | * of type (int *) whereas under other systems it is (void *) if you |
| 279 | * have a cast then you can either go for (int *) or (void *). | 277 | * don't have a cast it will choke the compiler: if you do have a |
| 278 | * cast then you can either go for (int *) or (void *). | ||
| 280 | */ | 279 | */ |
| 281 | ret = accept(acc_sock, (struct sockaddr *)&from, (void *)&len); | 280 | ret = accept(acc_sock, (struct sockaddr *) & from, (void *) &len); |
| 282 | if (ret == -1) { | 281 | if (ret == -1) { |
| 283 | if (errno == EINTR) { | 282 | if (errno == EINTR) { |
| 284 | /*check_timeout(); */ | 283 | /* check_timeout(); */ |
| 285 | goto redoit; | 284 | goto redoit; |
| 286 | } | 285 | } |
| 287 | fprintf(stderr,"errno=%d ",errno); | 286 | fprintf(stderr, "errno=%d ", errno); |
| 288 | perror("accept"); | 287 | perror("accept"); |
| 289 | return (0); | 288 | return (0); |
| 290 | } | 289 | } |
| 291 | |||
| 292 | /* | 290 | /* |
| 293 | ling.l_onoff=1; | 291 | ling.l_onoff=1; |
| 294 | ling.l_linger=0; | 292 | ling.l_linger=0; |
| @@ -303,10 +301,10 @@ redoit: | |||
| 303 | goto end; | 301 | goto end; |
| 304 | #ifndef BIT_FIELD_LIMITS | 302 | #ifndef BIT_FIELD_LIMITS |
| 305 | /* I should use WSAAsyncGetHostByName() under windows */ | 303 | /* I should use WSAAsyncGetHostByName() under windows */ |
| 306 | h1 = gethostbyaddr((char *)&from.sin_addr.s_addr, | 304 | h1 = gethostbyaddr((char *) &from.sin_addr.s_addr, |
| 307 | sizeof(from.sin_addr.s_addr), AF_INET); | 305 | sizeof(from.sin_addr.s_addr), AF_INET); |
| 308 | #else | 306 | #else |
| 309 | h1 = gethostbyaddr((char *)&from.sin_addr, | 307 | h1 = gethostbyaddr((char *) &from.sin_addr, |
| 310 | sizeof(struct in_addr), AF_INET); | 308 | sizeof(struct in_addr), AF_INET); |
| 311 | #endif | 309 | #endif |
| 312 | if (h1 == NULL) { | 310 | if (h1 == NULL) { |
| @@ -314,7 +312,7 @@ redoit: | |||
| 314 | *host = NULL; | 312 | *host = NULL; |
| 315 | /* return(0); */ | 313 | /* return(0); */ |
| 316 | } else { | 314 | } else { |
| 317 | if ((*host = (char *)malloc(strlen(h1->h_name) + 1)) == NULL) { | 315 | if ((*host = (char *) malloc(strlen(h1->h_name) + 1)) == NULL) { |
| 318 | perror("malloc"); | 316 | perror("malloc"); |
| 319 | return (0); | 317 | return (0); |
| 320 | } | 318 | } |
| @@ -343,7 +341,7 @@ extract_host_port(char *str, char **host_ptr, unsigned char *ip, | |||
| 343 | char *h, *p; | 341 | char *h, *p; |
| 344 | 342 | ||
| 345 | h = str; | 343 | h = str; |
| 346 | p = strrchr(str, '/'); /* IPv6 host/port */ | 344 | p = strrchr(str, '/'); /* IPv6 host/port */ |
| 347 | if (p == NULL) { | 345 | if (p == NULL) { |
| 348 | p = strrchr(str, ':'); | 346 | p = strrchr(str, ':'); |
| 349 | } | 347 | } |
| @@ -370,14 +368,14 @@ extract_port(char *str, short *port_ptr) | |||
| 370 | 368 | ||
| 371 | i = atoi(str); | 369 | i = atoi(str); |
| 372 | if (i != 0) | 370 | if (i != 0) |
| 373 | *port_ptr = (unsigned short)i; | 371 | *port_ptr = (unsigned short) i; |
| 374 | else { | 372 | else { |
| 375 | s = getservbyname(str, "tcp"); | 373 | s = getservbyname(str, "tcp"); |
| 376 | if (s == NULL) { | 374 | if (s == NULL) { |
| 377 | BIO_printf(bio_err, "getservbyname failure for %s\n", str); | 375 | BIO_printf(bio_err, "getservbyname failure for %s\n", str); |
| 378 | return (0); | 376 | return (0); |
| 379 | } | 377 | } |
| 380 | *port_ptr = ntohs((unsigned short)s->s_port); | 378 | *port_ptr = ntohs((unsigned short) s->s_port); |
| 381 | } | 379 | } |
| 382 | return (1); | 380 | return (1); |
| 383 | } | 381 | } |
| @@ -393,10 +391,11 @@ static unsigned long ghbn_hits = 0L; | |||
| 393 | static unsigned long ghbn_miss = 0L; | 391 | static unsigned long ghbn_miss = 0L; |
| 394 | 392 | ||
| 395 | static struct hostent * | 393 | static struct hostent * |
| 396 | GetHostByName(char *name) { | 394 | GetHostByName(char *name) |
| 395 | { | ||
| 397 | struct hostent *ret; | 396 | struct hostent *ret; |
| 398 | int i, lowi = 0; | 397 | int i, lowi = 0; |
| 399 | unsigned long low = (unsigned long) - 1; | 398 | unsigned long low = (unsigned long) -1; |
| 400 | 399 | ||
| 401 | for (i = 0; i < GHBN_NUM; i++) { | 400 | for (i = 0; i < GHBN_NUM; i++) { |
| 402 | if (low > ghbn_cache[i].order) { | 401 | if (low > ghbn_cache[i].order) { |
| @@ -408,8 +407,7 @@ GetHostByName(char *name) { | |||
| 408 | break; | 407 | break; |
| 409 | } | 408 | } |
| 410 | } | 409 | } |
| 411 | if (i == GHBN_NUM) /* no hit*/ | 410 | if (i == GHBN_NUM) { /* no hit */ |
| 412 | { | ||
| 413 | ghbn_miss++; | 411 | ghbn_miss++; |
| 414 | ret = gethostbyname(name); | 412 | ret = gethostbyname(name); |
| 415 | if (ret == NULL) | 413 | if (ret == NULL) |
| @@ -417,7 +415,7 @@ GetHostByName(char *name) { | |||
| 417 | /* else add to cache */ | 415 | /* else add to cache */ |
| 418 | if (strlen(name) < sizeof ghbn_cache[0].name) { | 416 | if (strlen(name) < sizeof ghbn_cache[0].name) { |
| 419 | strlcpy(ghbn_cache[lowi].name, name, sizeof(ghbn_cache[0].name)); | 417 | strlcpy(ghbn_cache[lowi].name, name, sizeof(ghbn_cache[0].name)); |
| 420 | memcpy((char *)&(ghbn_cache[lowi].ent), ret, sizeof(struct hostent)); | 418 | memcpy((char *) &(ghbn_cache[lowi].ent), ret, sizeof(struct hostent)); |
| 421 | ghbn_cache[lowi].order = ghbn_miss + ghbn_hits; | 419 | ghbn_cache[lowi].order = ghbn_miss + ghbn_hits; |
| 422 | } | 420 | } |
| 423 | return (ret); | 421 | return (ret); |
diff --git a/src/lib/libssl/src/apps/s_time.c b/src/lib/libssl/src/apps/s_time.c index ee5f7c633e..bb680c6c9a 100644 --- a/src/lib/libssl/src/apps/s_time.c +++ b/src/lib/libssl/src/apps/s_time.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written |
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). |
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. |
| 8 | * | 8 | * |
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as |
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions |
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, |
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation |
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms |
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). |
| 15 | * | 15 | * |
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in |
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. |
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution |
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. |
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or |
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. |
| 22 | * | 22 | * |
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without |
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions |
| 25 | * are met: | 25 | * are met: |
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" |
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library |
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). |
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from |
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: |
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" |
| 40 | * | 40 | * |
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. |
| 52 | * | 52 | * |
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or |
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be |
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence |
| @@ -88,7 +88,7 @@ | |||
| 88 | 88 | ||
| 89 | #define SSL_CONNECT_NAME "localhost:4433" | 89 | #define SSL_CONNECT_NAME "localhost:4433" |
| 90 | 90 | ||
| 91 | /*#define TEST_CERT "client.pem" */ /* no default cert. */ | 91 | /*#define TEST_CERT "client.pem" *//* no default cert. */ |
| 92 | 92 | ||
| 93 | #undef BUFSIZZ | 93 | #undef BUFSIZZ |
| 94 | #define BUFSIZZ 1024*10 | 94 | #define BUFSIZZ 1024*10 |
| @@ -106,8 +106,8 @@ extern int verify_depth; | |||
| 106 | extern int verify_error; | 106 | extern int verify_error; |
| 107 | 107 | ||
| 108 | static void s_time_usage(void); | 108 | static void s_time_usage(void); |
| 109 | static int parseArgs( int argc, char **argv ); | 109 | static int parseArgs(int argc, char **argv); |
| 110 | static SSL *doConnection( SSL *scon ); | 110 | static SSL *doConnection(SSL * scon); |
| 111 | static void s_time_init(void); | 111 | static void s_time_init(void); |
| 112 | 112 | ||
| 113 | /*********************************************************************** | 113 | /*********************************************************************** |
| @@ -115,50 +115,52 @@ static void s_time_init(void); | |||
| 115 | */ | 115 | */ |
| 116 | 116 | ||
| 117 | /* static char *port=PORT_STR;*/ | 117 | /* static char *port=PORT_STR;*/ |
| 118 | static char *host=SSL_CONNECT_NAME; | 118 | static char *host = SSL_CONNECT_NAME; |
| 119 | static char *t_cert_file=NULL; | 119 | static char *t_cert_file = NULL; |
| 120 | static char *t_key_file=NULL; | 120 | static char *t_key_file = NULL; |
| 121 | static char *CApath=NULL; | 121 | static char *CApath = NULL; |
| 122 | static char *CAfile=NULL; | 122 | static char *CAfile = NULL; |
| 123 | static char *tm_cipher=NULL; | 123 | static char *tm_cipher = NULL; |
| 124 | static int tm_verify = SSL_VERIFY_NONE; | 124 | static int tm_verify = SSL_VERIFY_NONE; |
| 125 | static int maxTime = SECONDS; | 125 | static int maxTime = SECONDS; |
| 126 | static SSL_CTX *tm_ctx=NULL; | 126 | static SSL_CTX *tm_ctx = NULL; |
| 127 | static const SSL_METHOD *s_time_meth=NULL; | 127 | static const SSL_METHOD *s_time_meth = NULL; |
| 128 | static char *s_www_path=NULL; | 128 | static char *s_www_path = NULL; |
| 129 | static long bytes_read=0; | 129 | static long bytes_read = 0; |
| 130 | static int st_bugs=0; | 130 | static int st_bugs = 0; |
| 131 | static int perform=0; | 131 | static int perform = 0; |
| 132 | #ifdef FIONBIO | 132 | #ifdef FIONBIO |
| 133 | static int t_nbio=0; | 133 | static int t_nbio = 0; |
| 134 | #endif | 134 | #endif |
| 135 | 135 | ||
| 136 | static void s_time_init(void) | 136 | static void |
| 137 | { | 137 | s_time_init(void) |
| 138 | host=SSL_CONNECT_NAME; | 138 | { |
| 139 | t_cert_file=NULL; | 139 | host = SSL_CONNECT_NAME; |
| 140 | t_key_file=NULL; | 140 | t_cert_file = NULL; |
| 141 | CApath=NULL; | 141 | t_key_file = NULL; |
| 142 | CAfile=NULL; | 142 | CApath = NULL; |
| 143 | tm_cipher=NULL; | 143 | CAfile = NULL; |
| 144 | tm_cipher = NULL; | ||
| 144 | tm_verify = SSL_VERIFY_NONE; | 145 | tm_verify = SSL_VERIFY_NONE; |
| 145 | maxTime = SECONDS; | 146 | maxTime = SECONDS; |
| 146 | tm_ctx=NULL; | 147 | tm_ctx = NULL; |
| 147 | s_time_meth=NULL; | 148 | s_time_meth = NULL; |
| 148 | s_www_path=NULL; | 149 | s_www_path = NULL; |
| 149 | bytes_read=0; | 150 | bytes_read = 0; |
| 150 | st_bugs=0; | 151 | st_bugs = 0; |
| 151 | perform=0; | 152 | perform = 0; |
| 152 | 153 | ||
| 153 | #ifdef FIONBIO | 154 | #ifdef FIONBIO |
| 154 | t_nbio=0; | 155 | t_nbio = 0; |
| 155 | #endif | 156 | #endif |
| 156 | } | 157 | } |
| 157 | 158 | ||
| 158 | /*********************************************************************** | 159 | /*********************************************************************** |
| 159 | * usage - display usage message | 160 | * usage - display usage message |
| 160 | */ | 161 | */ |
| 161 | static void s_time_usage(void) | 162 | static void |
| 163 | s_time_usage(void) | ||
| 162 | { | 164 | { |
| 163 | static const char umsg[] = "\ | 165 | static const char umsg[] = "\ |
| 164 | -time arg - max number of seconds to collect data, default %d\n\ | 166 | -time arg - max number of seconds to collect data, default %d\n\ |
| @@ -170,9 +172,9 @@ static void s_time_usage(void) | |||
| 170 | -CAfile arg - PEM format file of CA's\n\ | 172 | -CAfile arg - PEM format file of CA's\n\ |
| 171 | -cipher - preferred cipher to use, play with 'openssl ciphers'\n\n"; | 173 | -cipher - preferred cipher to use, play with 'openssl ciphers'\n\n"; |
| 172 | 174 | ||
| 173 | printf( "usage: s_time <args>\n\n" ); | 175 | printf("usage: s_time <args>\n\n"); |
| 174 | 176 | ||
| 175 | printf("-connect host:port - host:port to connect to (default is %s)\n",SSL_CONNECT_NAME); | 177 | printf("-connect host:port - host:port to connect to (default is %s)\n", SSL_CONNECT_NAME); |
| 176 | #ifdef FIONBIO | 178 | #ifdef FIONBIO |
| 177 | printf("-nbio - Run with non-blocking IO\n"); | 179 | printf("-nbio - Run with non-blocking IO\n"); |
| 178 | printf("-ssl2 - Just use SSLv2\n"); | 180 | printf("-ssl2 - Just use SSLv2\n"); |
| @@ -182,7 +184,7 @@ static void s_time_usage(void) | |||
| 182 | printf("-reuse - Just time connection reuse\n"); | 184 | printf("-reuse - Just time connection reuse\n"); |
| 183 | printf("-www page - Retrieve 'page' from the site\n"); | 185 | printf("-www page - Retrieve 'page' from the site\n"); |
| 184 | #endif | 186 | #endif |
| 185 | printf( umsg,SECONDS ); | 187 | printf(umsg, SECONDS); |
| 186 | } | 188 | } |
| 187 | 189 | ||
| 188 | /*********************************************************************** | 190 | /*********************************************************************** |
| @@ -190,113 +192,117 @@ static void s_time_usage(void) | |||
| 190 | * | 192 | * |
| 191 | * Returns 0 if ok, -1 on bad args | 193 | * Returns 0 if ok, -1 on bad args |
| 192 | */ | 194 | */ |
| 193 | static int parseArgs(int argc, char **argv) | 195 | static int |
| 196 | parseArgs(int argc, char **argv) | ||
| 194 | { | 197 | { |
| 195 | int badop = 0; | 198 | int badop = 0; |
| 196 | 199 | ||
| 197 | verify_depth=0; | 200 | verify_depth = 0; |
| 198 | verify_error=X509_V_OK; | 201 | verify_error = X509_V_OK; |
| 199 | 202 | ||
| 200 | argc--; | 203 | argc--; |
| 201 | argv++; | 204 | argv++; |
| 202 | 205 | ||
| 203 | while (argc >= 1) { | 206 | while (argc >= 1) { |
| 204 | if (strcmp(*argv,"-connect") == 0) | 207 | if (strcmp(*argv, "-connect") == 0) { |
| 205 | { | 208 | if (--argc < 1) |
| 206 | if (--argc < 1) goto bad; | 209 | goto bad; |
| 207 | host= *(++argv); | 210 | host = *(++argv); |
| 208 | } | 211 | } |
| 209 | #if 0 | 212 | #if 0 |
| 210 | else if( strcmp(*argv,"-host") == 0) | 213 | else if (strcmp(*argv, "-host") == 0) { |
| 211 | { | 214 | if (--argc < 1) |
| 212 | if (--argc < 1) goto bad; | 215 | goto bad; |
| 213 | host= *(++argv); | 216 | host = *(++argv); |
| 214 | } | 217 | } else if (strcmp(*argv, "-port") == 0) { |
| 215 | else if( strcmp(*argv,"-port") == 0) | 218 | if (--argc < 1) |
| 216 | { | 219 | goto bad; |
| 217 | if (--argc < 1) goto bad; | 220 | port = *(++argv); |
| 218 | port= *(++argv); | ||
| 219 | } | 221 | } |
| 220 | #endif | 222 | #endif |
| 221 | else if (strcmp(*argv,"-reuse") == 0) | 223 | else if (strcmp(*argv, "-reuse") == 0) |
| 222 | perform=2; | 224 | perform = 2; |
| 223 | else if (strcmp(*argv,"-new") == 0) | 225 | else if (strcmp(*argv, "-new") == 0) |
| 224 | perform=1; | 226 | perform = 1; |
| 225 | else if( strcmp(*argv,"-verify") == 0) { | 227 | else if (strcmp(*argv, "-verify") == 0) { |
| 226 | 228 | ||
| 227 | tm_verify=SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE; | 229 | tm_verify = SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE; |
| 228 | if (--argc < 1) goto bad; | 230 | if (--argc < 1) |
| 229 | verify_depth=atoi(*(++argv)); | 231 | goto bad; |
| 230 | BIO_printf(bio_err,"verify depth is %d\n",verify_depth); | 232 | verify_depth = atoi(*(++argv)); |
| 233 | BIO_printf(bio_err, "verify depth is %d\n", verify_depth); | ||
| 231 | 234 | ||
| 232 | } else if( strcmp(*argv,"-cert") == 0) { | 235 | } else if (strcmp(*argv, "-cert") == 0) { |
| 233 | 236 | ||
| 234 | if (--argc < 1) goto bad; | 237 | if (--argc < 1) |
| 235 | t_cert_file= *(++argv); | 238 | goto bad; |
| 239 | t_cert_file = *(++argv); | ||
| 236 | 240 | ||
| 237 | } else if( strcmp(*argv,"-key") == 0) { | 241 | } else if (strcmp(*argv, "-key") == 0) { |
| 238 | 242 | ||
| 239 | if (--argc < 1) goto bad; | 243 | if (--argc < 1) |
| 240 | t_key_file= *(++argv); | 244 | goto bad; |
| 245 | t_key_file = *(++argv); | ||
| 241 | 246 | ||
| 242 | } else if( strcmp(*argv,"-CApath") == 0) { | 247 | } else if (strcmp(*argv, "-CApath") == 0) { |
| 243 | 248 | ||
| 244 | if (--argc < 1) goto bad; | 249 | if (--argc < 1) |
| 245 | CApath= *(++argv); | 250 | goto bad; |
| 251 | CApath = *(++argv); | ||
| 246 | 252 | ||
| 247 | } else if( strcmp(*argv,"-CAfile") == 0) { | 253 | } else if (strcmp(*argv, "-CAfile") == 0) { |
| 248 | 254 | ||
| 249 | if (--argc < 1) goto bad; | 255 | if (--argc < 1) |
| 250 | CAfile= *(++argv); | 256 | goto bad; |
| 257 | CAfile = *(++argv); | ||
| 251 | 258 | ||
| 252 | } else if( strcmp(*argv,"-cipher") == 0) { | 259 | } else if (strcmp(*argv, "-cipher") == 0) { |
| 253 | 260 | ||
| 254 | if (--argc < 1) goto bad; | 261 | if (--argc < 1) |
| 255 | tm_cipher= *(++argv); | 262 | goto bad; |
| 256 | } | 263 | tm_cipher = *(++argv); |
| 264 | } | ||
| 257 | #ifdef FIONBIO | 265 | #ifdef FIONBIO |
| 258 | else if(strcmp(*argv,"-nbio") == 0) { | 266 | else if (strcmp(*argv, "-nbio") == 0) { |
| 259 | t_nbio=1; | 267 | t_nbio = 1; |
| 260 | } | 268 | } |
| 261 | #endif | 269 | #endif |
| 262 | else if(strcmp(*argv,"-www") == 0) | 270 | else if (strcmp(*argv, "-www") == 0) { |
| 263 | { | 271 | if (--argc < 1) |
| 264 | if (--argc < 1) goto bad; | 272 | goto bad; |
| 265 | s_www_path= *(++argv); | 273 | s_www_path = *(++argv); |
| 266 | if(strlen(s_www_path) > MYBUFSIZ-100) | 274 | if (strlen(s_www_path) > MYBUFSIZ - 100) { |
| 267 | { | 275 | BIO_printf(bio_err, "-www option too long\n"); |
| 268 | BIO_printf(bio_err,"-www option too long\n"); | 276 | badop = 1; |
| 269 | badop=1; | ||
| 270 | } | 277 | } |
| 278 | } else if (strcmp(*argv, "-bugs") == 0) | ||
| 279 | st_bugs = 1; | ||
| 280 | else if (strcmp(*argv, "-ssl3") == 0) | ||
| 281 | s_time_meth = SSLv3_client_method(); | ||
| 282 | else if (strcmp(*argv, "-time") == 0) { | ||
| 283 | |||
| 284 | if (--argc < 1) | ||
| 285 | goto bad; | ||
| 286 | maxTime = atoi(*(++argv)); | ||
| 287 | } else { | ||
| 288 | BIO_printf(bio_err, "unknown option %s\n", *argv); | ||
| 289 | badop = 1; | ||
| 290 | break; | ||
| 271 | } | 291 | } |
| 272 | else if(strcmp(*argv,"-bugs") == 0) | ||
| 273 | st_bugs=1; | ||
| 274 | else if(strcmp(*argv,"-ssl3") == 0) | ||
| 275 | s_time_meth=SSLv3_client_method(); | ||
| 276 | else if( strcmp(*argv,"-time") == 0) { | ||
| 277 | |||
| 278 | if (--argc < 1) goto bad; | ||
| 279 | maxTime= atoi(*(++argv)); | ||
| 280 | } | ||
| 281 | else { | ||
| 282 | BIO_printf(bio_err,"unknown option %s\n",*argv); | ||
| 283 | badop=1; | ||
| 284 | break; | ||
| 285 | } | ||
| 286 | 292 | ||
| 287 | argc--; | 293 | argc--; |
| 288 | argv++; | 294 | argv++; |
| 289 | } | 295 | } |
| 290 | 296 | ||
| 291 | if (perform == 0) perform=3; | 297 | if (perform == 0) |
| 298 | perform = 3; | ||
| 292 | 299 | ||
| 293 | if(badop) { | 300 | if (badop) { |
| 294 | bad: | 301 | bad: |
| 295 | s_time_usage(); | 302 | s_time_usage(); |
| 296 | return -1; | 303 | return -1; |
| 297 | } | 304 | } |
| 298 | 305 | return 0; /* Valid args */ | |
| 299 | return 0; /* Valid args */ | ||
| 300 | } | 306 | } |
| 301 | 307 | ||
| 302 | /*********************************************************************** | 308 | /*********************************************************************** |
| @@ -305,10 +311,11 @@ bad: | |||
| 305 | #define START 0 | 311 | #define START 0 |
| 306 | #define STOP 1 | 312 | #define STOP 1 |
| 307 | 313 | ||
| 308 | static double tm_Time_F(int s) | 314 | static double |
| 309 | { | 315 | tm_Time_F(int s) |
| 310 | return app_tminterval(s,1); | 316 | { |
| 311 | } | 317 | return app_tminterval(s, 1); |
| 318 | } | ||
| 312 | 319 | ||
| 313 | /*********************************************************************** | 320 | /*********************************************************************** |
| 314 | * MAIN - main processing area for client | 321 | * MAIN - main processing area for client |
| @@ -316,88 +323,90 @@ static double tm_Time_F(int s) | |||
| 316 | */ | 323 | */ |
| 317 | int MAIN(int, char **); | 324 | int MAIN(int, char **); |
| 318 | 325 | ||
| 319 | int MAIN(int argc, char **argv) | 326 | int |
| 320 | { | 327 | MAIN(int argc, char **argv) |
| 328 | { | ||
| 321 | double totalTime = 0.0; | 329 | double totalTime = 0.0; |
| 322 | int nConn = 0; | 330 | int nConn = 0; |
| 323 | SSL *scon=NULL; | 331 | SSL *scon = NULL; |
| 324 | long finishtime=0; | 332 | long finishtime = 0; |
| 325 | int ret=1,i; | 333 | int ret = 1, i; |
| 326 | char buf[1024*8]; | 334 | char buf[1024 * 8]; |
| 327 | int ver; | 335 | int ver; |
| 328 | 336 | ||
| 329 | apps_startup(); | 337 | apps_startup(); |
| 330 | s_time_init(); | 338 | s_time_init(); |
| 331 | 339 | ||
| 332 | if (bio_err == NULL) | 340 | if (bio_err == NULL) |
| 333 | bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); | 341 | bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); |
| 334 | 342 | ||
| 335 | s_time_meth=SSLv23_client_method(); | 343 | s_time_meth = SSLv23_client_method(); |
| 336 | 344 | ||
| 337 | /* parse the command line arguments */ | 345 | /* parse the command line arguments */ |
| 338 | if( parseArgs( argc, argv ) < 0 ) | 346 | if (parseArgs(argc, argv) < 0) |
| 339 | goto end; | 347 | goto end; |
| 340 | 348 | ||
| 341 | OpenSSL_add_ssl_algorithms(); | 349 | OpenSSL_add_ssl_algorithms(); |
| 342 | if ((tm_ctx=SSL_CTX_new(s_time_meth)) == NULL) return(1); | 350 | if ((tm_ctx = SSL_CTX_new(s_time_meth)) == NULL) |
| 351 | return (1); | ||
| 343 | 352 | ||
| 344 | SSL_CTX_set_quiet_shutdown(tm_ctx,1); | 353 | SSL_CTX_set_quiet_shutdown(tm_ctx, 1); |
| 345 | 354 | ||
| 346 | if (st_bugs) SSL_CTX_set_options(tm_ctx,SSL_OP_ALL); | 355 | if (st_bugs) |
| 347 | SSL_CTX_set_cipher_list(tm_ctx,tm_cipher); | 356 | SSL_CTX_set_options(tm_ctx, SSL_OP_ALL); |
| 348 | if(!set_cert_stuff(tm_ctx,t_cert_file,t_key_file)) | 357 | SSL_CTX_set_cipher_list(tm_ctx, tm_cipher); |
| 358 | if (!set_cert_stuff(tm_ctx, t_cert_file, t_key_file)) | ||
| 349 | goto end; | 359 | goto end; |
| 350 | 360 | ||
| 351 | SSL_load_error_strings(); | 361 | SSL_load_error_strings(); |
| 352 | 362 | ||
| 353 | if ((!SSL_CTX_load_verify_locations(tm_ctx,CAfile,CApath)) || | 363 | if ((!SSL_CTX_load_verify_locations(tm_ctx, CAfile, CApath)) || |
| 354 | (!SSL_CTX_set_default_verify_paths(tm_ctx))) | 364 | (!SSL_CTX_set_default_verify_paths(tm_ctx))) { |
| 355 | { | 365 | /* |
| 356 | /* BIO_printf(bio_err,"error setting default verify locations\n"); */ | 366 | * BIO_printf(bio_err,"error setting default verify |
| 367 | * locations\n"); | ||
| 368 | */ | ||
| 357 | ERR_print_errors(bio_err); | 369 | ERR_print_errors(bio_err); |
| 358 | /* goto end; */ | 370 | /* goto end; */ |
| 359 | } | 371 | } |
| 360 | |||
| 361 | if (tm_cipher == NULL) | 372 | if (tm_cipher == NULL) |
| 362 | tm_cipher = getenv("SSL_CIPHER"); | 373 | tm_cipher = getenv("SSL_CIPHER"); |
| 363 | 374 | ||
| 364 | if (tm_cipher == NULL ) { | 375 | if (tm_cipher == NULL) { |
| 365 | fprintf( stderr, "No CIPHER specified\n" ); | 376 | fprintf(stderr, "No CIPHER specified\n"); |
| 366 | } | 377 | } |
| 367 | 378 | if (!(perform & 1)) | |
| 368 | if (!(perform & 1)) goto next; | 379 | goto next; |
| 369 | printf( "Collecting connection statistics for %d seconds\n", maxTime ); | 380 | printf("Collecting connection statistics for %d seconds\n", maxTime); |
| 370 | 381 | ||
| 371 | /* Loop and time how long it takes to make connections */ | 382 | /* Loop and time how long it takes to make connections */ |
| 372 | 383 | ||
| 373 | bytes_read=0; | 384 | bytes_read = 0; |
| 374 | finishtime=(long)time(NULL)+maxTime; | 385 | finishtime = (long) time(NULL) + maxTime; |
| 375 | tm_Time_F(START); | 386 | tm_Time_F(START); |
| 376 | for (;;) | 387 | for (;;) { |
| 377 | { | 388 | if (finishtime < (long) time(NULL)) |
| 378 | if (finishtime < (long)time(NULL)) break; | 389 | break; |
| 379 | #ifdef WIN32_STUFF | 390 | #ifdef WIN32_STUFF |
| 380 | 391 | ||
| 381 | if( flushWinMsgs(0) == -1 ) | 392 | if (flushWinMsgs(0) == -1) |
| 382 | goto end; | 393 | goto end; |
| 383 | 394 | ||
| 384 | if( waitingToDie || exitNow ) /* we're dead */ | 395 | if (waitingToDie || exitNow) /* we're dead */ |
| 385 | goto end; | 396 | goto end; |
| 386 | #endif | 397 | #endif |
| 387 | 398 | ||
| 388 | if( (scon = doConnection( NULL )) == NULL ) | 399 | if ((scon = doConnection(NULL)) == NULL) |
| 389 | goto end; | 400 | goto end; |
| 390 | 401 | ||
| 391 | if (s_www_path != NULL) | 402 | if (s_www_path != NULL) { |
| 392 | { | 403 | (void) snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n", s_www_path); |
| 393 | (void) snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path); | 404 | SSL_write(scon, buf, strlen(buf)); |
| 394 | SSL_write(scon,buf,strlen(buf)); | 405 | while ((i = SSL_read(scon, buf, sizeof(buf))) > 0) |
| 395 | while ((i=SSL_read(scon,buf,sizeof(buf))) > 0) | 406 | bytes_read += i; |
| 396 | bytes_read+=i; | 407 | } |
| 397 | } | ||
| 398 | |||
| 399 | #ifdef NO_SHUTDOWN | 408 | #ifdef NO_SHUTDOWN |
| 400 | SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); | 409 | SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); |
| 401 | #else | 410 | #else |
| 402 | SSL_shutdown(scon); | 411 | SSL_shutdown(scon); |
| 403 | #endif | 412 | #endif |
| @@ -406,53 +415,52 @@ int MAIN(int argc, char **argv) | |||
| 406 | 415 | ||
| 407 | nConn += 1; | 416 | nConn += 1; |
| 408 | if (SSL_session_reused(scon)) | 417 | if (SSL_session_reused(scon)) |
| 409 | ver='r'; | 418 | ver = 'r'; |
| 410 | else | 419 | else { |
| 411 | { | 420 | ver = SSL_version(scon); |
| 412 | ver=SSL_version(scon); | ||
| 413 | if (ver == TLS1_VERSION) | 421 | if (ver == TLS1_VERSION) |
| 414 | ver='t'; | 422 | ver = 't'; |
| 415 | else if (ver == SSL3_VERSION) | 423 | else if (ver == SSL3_VERSION) |
| 416 | ver='3'; | 424 | ver = '3'; |
| 417 | else if (ver == SSL2_VERSION) | 425 | else if (ver == SSL2_VERSION) |
| 418 | ver='2'; | 426 | ver = '2'; |
| 419 | else | 427 | else |
| 420 | ver='*'; | 428 | ver = '*'; |
| 421 | } | 429 | } |
| 422 | fputc(ver,stdout); | 430 | fputc(ver, stdout); |
| 423 | fflush(stdout); | 431 | fflush(stdout); |
| 424 | 432 | ||
| 425 | SSL_free( scon ); | 433 | SSL_free(scon); |
| 426 | scon=NULL; | 434 | scon = NULL; |
| 427 | } | 435 | } |
| 428 | totalTime += tm_Time_F(STOP); /* Add the time for this iteration */ | 436 | totalTime += tm_Time_F(STOP); /* Add the time for this iteration */ |
| 429 | 437 | ||
| 430 | i=(int)((long)time(NULL)-finishtime+maxTime); | 438 | i = (int) ((long) time(NULL) - finishtime + maxTime); |
| 431 | printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read); | 439 | printf("\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double) nConn / totalTime), bytes_read); |
| 432 | printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn); | 440 | printf("%d connections in %ld real seconds, %ld bytes read per connection\n", nConn, (long) time(NULL) - finishtime + maxTime, bytes_read / nConn); |
| 433 | 441 | ||
| 434 | /* Now loop and time connections using the same session id over and over */ | 442 | /* |
| 443 | * Now loop and time connections using the same session id over and | ||
| 444 | * over | ||
| 445 | */ | ||
| 435 | 446 | ||
| 436 | next: | 447 | next: |
| 437 | if (!(perform & 2)) goto end; | 448 | if (!(perform & 2)) |
| 438 | printf( "\n\nNow timing with session id reuse.\n" ); | 449 | goto end; |
| 450 | printf("\n\nNow timing with session id reuse.\n"); | ||
| 439 | 451 | ||
| 440 | /* Get an SSL object so we can reuse the session id */ | 452 | /* Get an SSL object so we can reuse the session id */ |
| 441 | if( (scon = doConnection( NULL )) == NULL ) | 453 | if ((scon = doConnection(NULL)) == NULL) { |
| 442 | { | 454 | fprintf(stderr, "Unable to get connection\n"); |
| 443 | fprintf( stderr, "Unable to get connection\n" ); | ||
| 444 | goto end; | 455 | goto end; |
| 445 | } | 456 | } |
| 446 | 457 | if (s_www_path != NULL) { | |
| 447 | if (s_www_path != NULL) | 458 | (void) snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n", s_www_path); |
| 448 | { | 459 | SSL_write(scon, buf, strlen(buf)); |
| 449 | (void) snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path); | 460 | while (SSL_read(scon, buf, sizeof(buf)) > 0); |
| 450 | SSL_write(scon,buf,strlen(buf)); | 461 | } |
| 451 | while (SSL_read(scon,buf,sizeof(buf)) > 0) | ||
| 452 | ; | ||
| 453 | } | ||
| 454 | #ifdef NO_SHUTDOWN | 462 | #ifdef NO_SHUTDOWN |
| 455 | SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); | 463 | SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); |
| 456 | #else | 464 | #else |
| 457 | SSL_shutdown(scon); | 465 | SSL_shutdown(scon); |
| 458 | #endif | 466 | #endif |
| @@ -462,79 +470,76 @@ next: | |||
| 462 | nConn = 0; | 470 | nConn = 0; |
| 463 | totalTime = 0.0; | 471 | totalTime = 0.0; |
| 464 | 472 | ||
| 465 | finishtime=(long)time(NULL)+maxTime; | 473 | finishtime = (long) time(NULL) + maxTime; |
| 466 | 474 | ||
| 467 | printf( "starting\n" ); | 475 | printf("starting\n"); |
| 468 | bytes_read=0; | 476 | bytes_read = 0; |
| 469 | tm_Time_F(START); | 477 | tm_Time_F(START); |
| 470 | 478 | ||
| 471 | for (;;) | 479 | for (;;) { |
| 472 | { | 480 | if (finishtime < (long) time(NULL)) |
| 473 | if (finishtime < (long)time(NULL)) break; | 481 | break; |
| 474 | 482 | ||
| 475 | #ifdef WIN32_STUFF | 483 | #ifdef WIN32_STUFF |
| 476 | if( flushWinMsgs(0) == -1 ) | 484 | if (flushWinMsgs(0) == -1) |
| 477 | goto end; | 485 | goto end; |
| 478 | 486 | ||
| 479 | if( waitingToDie || exitNow ) /* we're dead */ | 487 | if (waitingToDie || exitNow) /* we're dead */ |
| 480 | goto end; | 488 | goto end; |
| 481 | #endif | 489 | #endif |
| 482 | 490 | ||
| 483 | if( (doConnection( scon )) == NULL ) | 491 | if ((doConnection(scon)) == NULL) |
| 484 | goto end; | 492 | goto end; |
| 485 | 493 | ||
| 486 | if (s_www_path) | 494 | if (s_www_path) { |
| 487 | { | 495 | (void) snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n", s_www_path); |
| 488 | (void) snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path); | 496 | SSL_write(scon, buf, strlen(buf)); |
| 489 | SSL_write(scon,buf,strlen(buf)); | 497 | while ((i = SSL_read(scon, buf, sizeof(buf))) > 0) |
| 490 | while ((i=SSL_read(scon,buf,sizeof(buf))) > 0) | 498 | bytes_read += i; |
| 491 | bytes_read+=i; | 499 | } |
| 492 | } | ||
| 493 | |||
| 494 | #ifdef NO_SHUTDOWN | 500 | #ifdef NO_SHUTDOWN |
| 495 | SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); | 501 | SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); |
| 496 | #else | 502 | #else |
| 497 | SSL_shutdown(scon); | 503 | SSL_shutdown(scon); |
| 498 | #endif | 504 | #endif |
| 499 | shutdown(SSL_get_fd(scon), SHUT_RDWR); | 505 | shutdown(SSL_get_fd(scon), SHUT_RDWR); |
| 500 | close(SSL_get_fd(scon)); | 506 | close(SSL_get_fd(scon)); |
| 501 | 507 | ||
| 502 | nConn += 1; | 508 | nConn += 1; |
| 503 | if (SSL_session_reused(scon)) | 509 | if (SSL_session_reused(scon)) |
| 504 | ver='r'; | 510 | ver = 'r'; |
| 505 | else | 511 | else { |
| 506 | { | 512 | ver = SSL_version(scon); |
| 507 | ver=SSL_version(scon); | ||
| 508 | if (ver == TLS1_VERSION) | 513 | if (ver == TLS1_VERSION) |
| 509 | ver='t'; | 514 | ver = 't'; |
| 510 | else if (ver == SSL3_VERSION) | 515 | else if (ver == SSL3_VERSION) |
| 511 | ver='3'; | 516 | ver = '3'; |
| 512 | else if (ver == SSL2_VERSION) | 517 | else if (ver == SSL2_VERSION) |
| 513 | ver='2'; | 518 | ver = '2'; |
| 514 | else | 519 | else |
| 515 | ver='*'; | 520 | ver = '*'; |
| 516 | } | ||
| 517 | fputc(ver,stdout); | ||
| 518 | fflush(stdout); | ||
| 519 | } | 521 | } |
| 520 | totalTime += tm_Time_F(STOP); /* Add the time for this iteration*/ | 522 | fputc(ver, stdout); |
| 523 | fflush(stdout); | ||
| 524 | } | ||
| 525 | totalTime += tm_Time_F(STOP); /* Add the time for this iteration */ | ||
| 521 | 526 | ||
| 522 | 527 | ||
| 523 | printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read); | 528 | printf("\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double) nConn / totalTime), bytes_read); |
| 524 | printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn); | 529 | printf("%d connections in %ld real seconds, %ld bytes read per connection\n", nConn, (long) time(NULL) - finishtime + maxTime, bytes_read / nConn); |
| 525 | 530 | ||
| 526 | ret=0; | 531 | ret = 0; |
| 527 | end: | 532 | end: |
| 528 | if (scon != NULL) SSL_free(scon); | 533 | if (scon != NULL) |
| 534 | SSL_free(scon); | ||
| 529 | 535 | ||
| 530 | if (tm_ctx != NULL) | 536 | if (tm_ctx != NULL) { |
| 531 | { | ||
| 532 | SSL_CTX_free(tm_ctx); | 537 | SSL_CTX_free(tm_ctx); |
| 533 | tm_ctx=NULL; | 538 | tm_ctx = NULL; |
| 534 | } | ||
| 535 | apps_shutdown(); | ||
| 536 | return(ret); | ||
| 537 | } | 539 | } |
| 540 | apps_shutdown(); | ||
| 541 | return (ret); | ||
| 542 | } | ||
| 538 | 543 | ||
| 539 | /*********************************************************************** | 544 | /*********************************************************************** |
| 540 | * doConnection - make a connection | 545 | * doConnection - make a connection |
| @@ -543,70 +548,66 @@ end: | |||
| 543 | * Returns: | 548 | * Returns: |
| 544 | * SSL * = the connection pointer. | 549 | * SSL * = the connection pointer. |
| 545 | */ | 550 | */ |
| 546 | static SSL *doConnection(SSL *scon) | 551 | static SSL * |
| 547 | { | 552 | doConnection(SSL * scon) |
| 553 | { | ||
| 548 | BIO *conn; | 554 | BIO *conn; |
| 549 | SSL *serverCon; | 555 | SSL *serverCon; |
| 550 | int width, i; | 556 | int width, i; |
| 551 | fd_set readfds; | 557 | fd_set readfds; |
| 552 | 558 | ||
| 553 | if ((conn=BIO_new(BIO_s_connect())) == NULL) | 559 | if ((conn = BIO_new(BIO_s_connect())) == NULL) |
| 554 | return(NULL); | 560 | return (NULL); |
| 555 | 561 | ||
| 556 | /* BIO_set_conn_port(conn,port);*/ | 562 | /* BIO_set_conn_port(conn,port);*/ |
| 557 | BIO_set_conn_hostname(conn,host); | 563 | BIO_set_conn_hostname(conn, host); |
| 558 | 564 | ||
| 559 | if (scon == NULL) | 565 | if (scon == NULL) |
| 560 | serverCon=SSL_new(tm_ctx); | 566 | serverCon = SSL_new(tm_ctx); |
| 561 | else | 567 | else { |
| 562 | { | 568 | serverCon = scon; |
| 563 | serverCon=scon; | ||
| 564 | SSL_set_connect_state(serverCon); | 569 | SSL_set_connect_state(serverCon); |
| 565 | } | 570 | } |
| 566 | 571 | ||
| 567 | SSL_set_bio(serverCon,conn,conn); | 572 | SSL_set_bio(serverCon, conn, conn); |
| 568 | 573 | ||
| 569 | #if 0 | 574 | #if 0 |
| 570 | if( scon != NULL ) | 575 | if (scon != NULL) |
| 571 | SSL_set_session(serverCon,SSL_get_session(scon)); | 576 | SSL_set_session(serverCon, SSL_get_session(scon)); |
| 572 | #endif | 577 | #endif |
| 573 | 578 | ||
| 574 | /* ok, lets connect */ | 579 | /* ok, lets connect */ |
| 575 | for(;;) { | 580 | for (;;) { |
| 576 | i=SSL_connect(serverCon); | 581 | i = SSL_connect(serverCon); |
| 577 | if (BIO_sock_should_retry(i)) | 582 | if (BIO_sock_should_retry(i)) { |
| 578 | { | 583 | BIO_printf(bio_err, "DELAY\n"); |
| 579 | BIO_printf(bio_err,"DELAY\n"); | 584 | |
| 580 | 585 | i = SSL_get_fd(serverCon); | |
| 581 | i=SSL_get_fd(serverCon); | 586 | width = i + 1; |
| 582 | width=i+1; | ||
| 583 | FD_ZERO(&readfds); | 587 | FD_ZERO(&readfds); |
| 584 | openssl_fdset(i,&readfds); | 588 | openssl_fdset(i, &readfds); |
| 585 | /* Note: under VMS with SOCKETSHR the 2nd parameter | 589 | /* |
| 590 | * Note: under VMS with SOCKETSHR the 2nd parameter | ||
| 586 | * is currently of type (int *) whereas under other | 591 | * is currently of type (int *) whereas under other |
| 587 | * systems it is (void *) if you don't have a cast it | 592 | * systems it is (void *) if you don't have a cast it |
| 588 | * will choke the compiler: if you do have a cast then | 593 | * will choke the compiler: if you do have a cast |
| 589 | * you can either go for (int *) or (void *). | 594 | * then you can either go for (int *) or (void *). |
| 590 | */ | 595 | */ |
| 591 | select(width,(void *)&readfds,NULL,NULL,NULL); | 596 | select(width, (void *) &readfds, NULL, NULL, NULL); |
| 592 | continue; | 597 | continue; |
| 593 | } | ||
| 594 | break; | ||
| 595 | } | 598 | } |
| 596 | if(i <= 0) | 599 | break; |
| 597 | { | 600 | } |
| 598 | BIO_printf(bio_err,"ERROR\n"); | 601 | if (i <= 0) { |
| 602 | BIO_printf(bio_err, "ERROR\n"); | ||
| 599 | if (verify_error != X509_V_OK) | 603 | if (verify_error != X509_V_OK) |
| 600 | BIO_printf(bio_err,"verify error:%s\n", | 604 | BIO_printf(bio_err, "verify error:%s\n", |
| 601 | X509_verify_cert_error_string(verify_error)); | 605 | X509_verify_cert_error_string(verify_error)); |
| 602 | else | 606 | else |
| 603 | ERR_print_errors(bio_err); | 607 | ERR_print_errors(bio_err); |
| 604 | if (scon == NULL) | 608 | if (scon == NULL) |
| 605 | SSL_free(serverCon); | 609 | SSL_free(serverCon); |
| 606 | return NULL; | 610 | return NULL; |
| 607 | } | ||
| 608 | |||
| 609 | return serverCon; | ||
| 610 | } | 611 | } |
| 611 | 612 | return serverCon; | |
| 612 | 613 | } | |
diff --git a/src/lib/libssl/src/apps/sess_id.c b/src/lib/libssl/src/apps/sess_id.c index 5ad1bddedb..b9750ab356 100644 --- a/src/lib/libssl/src/apps/sess_id.c +++ b/src/lib/libssl/src/apps/sess_id.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written |
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). |
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. |
| 8 | * | 8 | * |
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as |
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions |
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, |
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation |
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms |
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). |
| 15 | * | 15 | * |
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in |
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. |
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution |
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. |
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or |
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. |
| 22 | * | 22 | * |
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without |
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions |
| 25 | * are met: | 25 | * are met: |
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" |
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library |
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). |
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from |
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: |
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" |
| 40 | * | 40 | * |
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. |
| 52 | * | 52 | * |
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or |
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be |
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence |
| @@ -69,248 +69,222 @@ | |||
| 69 | #undef PROG | 69 | #undef PROG |
| 70 | #define PROG sess_id_main | 70 | #define PROG sess_id_main |
| 71 | 71 | ||
| 72 | static const char *sess_id_usage[]={ | 72 | static const char *sess_id_usage[] = { |
| 73 | "usage: sess_id args\n", | 73 | "usage: sess_id args\n", |
| 74 | "\n", | 74 | "\n", |
| 75 | " -inform arg - input format - default PEM (DER or PEM)\n", | 75 | " -inform arg - input format - default PEM (DER or PEM)\n", |
| 76 | " -outform arg - output format - default PEM\n", | 76 | " -outform arg - output format - default PEM\n", |
| 77 | " -in arg - input file - default stdin\n", | 77 | " -in arg - input file - default stdin\n", |
| 78 | " -out arg - output file - default stdout\n", | 78 | " -out arg - output file - default stdout\n", |
| 79 | " -text - print ssl session id details\n", | 79 | " -text - print ssl session id details\n", |
| 80 | " -cert - output certificate \n", | 80 | " -cert - output certificate \n", |
| 81 | " -noout - no CRL output\n", | 81 | " -noout - no CRL output\n", |
| 82 | " -context arg - set the session ID context\n", | 82 | " -context arg - set the session ID context\n", |
| 83 | NULL | 83 | NULL |
| 84 | }; | 84 | }; |
| 85 | 85 | ||
| 86 | static SSL_SESSION *load_sess_id(char *file, int format); | 86 | static SSL_SESSION *load_sess_id(char *file, int format); |
| 87 | 87 | ||
| 88 | int MAIN(int, char **); | 88 | int MAIN(int, char **); |
| 89 | 89 | ||
| 90 | int MAIN(int argc, char **argv) | 90 | int |
| 91 | { | 91 | MAIN(int argc, char **argv) |
| 92 | SSL_SESSION *x=NULL; | 92 | { |
| 93 | SSL_SESSION *x = NULL; | ||
| 93 | X509 *peer = NULL; | 94 | X509 *peer = NULL; |
| 94 | int ret=1,i,num,badops=0; | 95 | int ret = 1, i, num, badops = 0; |
| 95 | BIO *out=NULL; | 96 | BIO *out = NULL; |
| 96 | int informat,outformat; | 97 | int informat, outformat; |
| 97 | char *infile=NULL,*outfile=NULL,*context=NULL; | 98 | char *infile = NULL, *outfile = NULL, *context = NULL; |
| 98 | int cert=0,noout=0,text=0; | 99 | int cert = 0, noout = 0, text = 0; |
| 99 | const char **pp; | 100 | const char **pp; |
| 100 | 101 | ||
| 101 | apps_startup(); | 102 | apps_startup(); |
| 102 | 103 | ||
| 103 | if (bio_err == NULL) | 104 | if (bio_err == NULL) |
| 104 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) | 105 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 105 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); | 106 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 106 | 107 | ||
| 107 | informat=FORMAT_PEM; | 108 | informat = FORMAT_PEM; |
| 108 | outformat=FORMAT_PEM; | 109 | outformat = FORMAT_PEM; |
| 109 | 110 | ||
| 110 | argc--; | 111 | argc--; |
| 111 | argv++; | 112 | argv++; |
| 112 | num=0; | 113 | num = 0; |
| 113 | while (argc >= 1) | 114 | while (argc >= 1) { |
| 114 | { | 115 | if (strcmp(*argv, "-inform") == 0) { |
| 115 | if (strcmp(*argv,"-inform") == 0) | 116 | if (--argc < 1) |
| 116 | { | 117 | goto bad; |
| 117 | if (--argc < 1) goto bad; | 118 | informat = str2fmt(*(++argv)); |
| 118 | informat=str2fmt(*(++argv)); | 119 | } else if (strcmp(*argv, "-outform") == 0) { |
| 119 | } | 120 | if (--argc < 1) |
| 120 | else if (strcmp(*argv,"-outform") == 0) | 121 | goto bad; |
| 121 | { | 122 | outformat = str2fmt(*(++argv)); |
| 122 | if (--argc < 1) goto bad; | 123 | } else if (strcmp(*argv, "-in") == 0) { |
| 123 | outformat=str2fmt(*(++argv)); | 124 | if (--argc < 1) |
| 124 | } | 125 | goto bad; |
| 125 | else if (strcmp(*argv,"-in") == 0) | 126 | infile = *(++argv); |
| 126 | { | 127 | } else if (strcmp(*argv, "-out") == 0) { |
| 127 | if (--argc < 1) goto bad; | 128 | if (--argc < 1) |
| 128 | infile= *(++argv); | 129 | goto bad; |
| 129 | } | 130 | outfile = *(++argv); |
| 130 | else if (strcmp(*argv,"-out") == 0) | 131 | } else if (strcmp(*argv, "-text") == 0) |
| 131 | { | 132 | text = ++num; |
| 132 | if (--argc < 1) goto bad; | 133 | else if (strcmp(*argv, "-cert") == 0) |
| 133 | outfile= *(++argv); | 134 | cert = ++num; |
| 134 | } | 135 | else if (strcmp(*argv, "-noout") == 0) |
| 135 | else if (strcmp(*argv,"-text") == 0) | 136 | noout = ++num; |
| 136 | text= ++num; | 137 | else if (strcmp(*argv, "-context") == 0) { |
| 137 | else if (strcmp(*argv,"-cert") == 0) | 138 | if (--argc < 1) |
| 138 | cert= ++num; | 139 | goto bad; |
| 139 | else if (strcmp(*argv,"-noout") == 0) | 140 | context = *++argv; |
| 140 | noout= ++num; | 141 | } else { |
| 141 | else if (strcmp(*argv,"-context") == 0) | 142 | BIO_printf(bio_err, "unknown option %s\n", *argv); |
| 142 | { | 143 | badops = 1; |
| 143 | if(--argc < 1) goto bad; | ||
| 144 | context=*++argv; | ||
| 145 | } | ||
| 146 | else | ||
| 147 | { | ||
| 148 | BIO_printf(bio_err,"unknown option %s\n",*argv); | ||
| 149 | badops=1; | ||
| 150 | break; | 144 | break; |
| 151 | } | 145 | } |
| 152 | argc--; | 146 | argc--; |
| 153 | argv++; | 147 | argv++; |
| 154 | } | 148 | } |
| 155 | 149 | ||
| 156 | if (badops) | 150 | if (badops) { |
| 157 | { | ||
| 158 | bad: | 151 | bad: |
| 159 | for (pp=sess_id_usage; (*pp != NULL); pp++) | 152 | for (pp = sess_id_usage; (*pp != NULL); pp++) |
| 160 | BIO_printf(bio_err,"%s",*pp); | 153 | BIO_printf(bio_err, "%s", *pp); |
| 161 | goto end; | 154 | goto end; |
| 162 | } | 155 | } |
| 163 | |||
| 164 | ERR_load_crypto_strings(); | 156 | ERR_load_crypto_strings(); |
| 165 | x=load_sess_id(infile,informat); | 157 | x = load_sess_id(infile, informat); |
| 166 | if (x == NULL) { goto end; } | 158 | if (x == NULL) { |
| 159 | goto end; | ||
| 160 | } | ||
| 167 | peer = SSL_SESSION_get0_peer(x); | 161 | peer = SSL_SESSION_get0_peer(x); |
| 168 | 162 | ||
| 169 | if(context) | 163 | if (context) { |
| 170 | { | 164 | size_t ctx_len = strlen(context); |
| 171 | size_t ctx_len = strlen(context); | 165 | if (ctx_len > SSL_MAX_SID_CTX_LENGTH) { |
| 172 | if(ctx_len > SSL_MAX_SID_CTX_LENGTH) | 166 | BIO_printf(bio_err, "Context too long\n"); |
| 173 | { | 167 | goto end; |
| 174 | BIO_printf(bio_err,"Context too long\n"); | ||
| 175 | goto end; | ||
| 176 | } | 168 | } |
| 177 | SSL_SESSION_set1_id_context(x, (unsigned char *)context, ctx_len); | 169 | SSL_SESSION_set1_id_context(x, (unsigned char *) context, ctx_len); |
| 178 | } | 170 | } |
| 179 | |||
| 180 | #ifdef undef | 171 | #ifdef undef |
| 181 | /* just testing for memory leaks :-) */ | 172 | /* just testing for memory leaks :-) */ |
| 182 | { | 173 | { |
| 183 | SSL_SESSION *s; | 174 | SSL_SESSION *s; |
| 184 | char buf[1024*10],*p; | 175 | char buf[1024 * 10], *p; |
| 185 | int i; | 176 | int i; |
| 186 | 177 | ||
| 187 | s=SSL_SESSION_new(); | 178 | s = SSL_SESSION_new(); |
| 188 | 179 | ||
| 189 | p= &buf; | 180 | p = &buf; |
| 190 | i=i2d_SSL_SESSION(x,&p); | 181 | i = i2d_SSL_SESSION(x, &p); |
| 191 | p= &buf; | 182 | p = &buf; |
| 192 | d2i_SSL_SESSION(&s,&p,(long)i); | 183 | d2i_SSL_SESSION(&s, &p, (long) i); |
| 193 | p= &buf; | 184 | p = &buf; |
| 194 | d2i_SSL_SESSION(&s,&p,(long)i); | 185 | d2i_SSL_SESSION(&s, &p, (long) i); |
| 195 | p= &buf; | 186 | p = &buf; |
| 196 | d2i_SSL_SESSION(&s,&p,(long)i); | 187 | d2i_SSL_SESSION(&s, &p, (long) i); |
| 197 | SSL_SESSION_free(s); | 188 | SSL_SESSION_free(s); |
| 198 | } | 189 | } |
| 199 | #endif | 190 | #endif |
| 200 | 191 | ||
| 201 | if (!noout || text) | 192 | if (!noout || text) { |
| 202 | { | 193 | out = BIO_new(BIO_s_file()); |
| 203 | out=BIO_new(BIO_s_file()); | 194 | if (out == NULL) { |
| 204 | if (out == NULL) | ||
| 205 | { | ||
| 206 | ERR_print_errors(bio_err); | 195 | ERR_print_errors(bio_err); |
| 207 | goto end; | 196 | goto end; |
| 208 | } | 197 | } |
| 209 | 198 | if (outfile == NULL) { | |
| 210 | if (outfile == NULL) | 199 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 211 | { | 200 | } else { |
| 212 | BIO_set_fp(out,stdout,BIO_NOCLOSE); | 201 | if (BIO_write_filename(out, outfile) <= 0) { |
| 213 | } | ||
| 214 | else | ||
| 215 | { | ||
| 216 | if (BIO_write_filename(out,outfile) <= 0) | ||
| 217 | { | ||
| 218 | perror(outfile); | 202 | perror(outfile); |
| 219 | goto end; | 203 | goto end; |
| 220 | } | ||
| 221 | } | 204 | } |
| 222 | } | 205 | } |
| 206 | } | ||
| 207 | if (text) { | ||
| 208 | SSL_SESSION_print(out, x); | ||
| 223 | 209 | ||
| 224 | if (text) | 210 | if (cert) { |
| 225 | { | ||
| 226 | SSL_SESSION_print(out,x); | ||
| 227 | |||
| 228 | if (cert) | ||
| 229 | { | ||
| 230 | if (peer == NULL) | 211 | if (peer == NULL) |
| 231 | BIO_puts(out,"No certificate present\n"); | 212 | BIO_puts(out, "No certificate present\n"); |
| 232 | else | 213 | else |
| 233 | X509_print(out,peer); | 214 | X509_print(out, peer); |
| 234 | } | ||
| 235 | } | 215 | } |
| 236 | 216 | } | |
| 237 | if (!noout && !cert) | 217 | if (!noout && !cert) { |
| 238 | { | 218 | if (outformat == FORMAT_ASN1) |
| 239 | if (outformat == FORMAT_ASN1) | 219 | i = i2d_SSL_SESSION_bio(out, x); |
| 240 | i=i2d_SSL_SESSION_bio(out,x); | ||
| 241 | else if (outformat == FORMAT_PEM) | 220 | else if (outformat == FORMAT_PEM) |
| 242 | i=PEM_write_bio_SSL_SESSION(out,x); | 221 | i = PEM_write_bio_SSL_SESSION(out, x); |
| 243 | else { | 222 | else { |
| 244 | BIO_printf(bio_err,"bad output format specified for outfile\n"); | 223 | BIO_printf(bio_err, "bad output format specified for outfile\n"); |
| 245 | goto end; | 224 | goto end; |
| 246 | } | 225 | } |
| 247 | if (!i) { | 226 | if (!i) { |
| 248 | BIO_printf(bio_err,"unable to write SSL_SESSION\n"); | 227 | BIO_printf(bio_err, "unable to write SSL_SESSION\n"); |
| 249 | goto end; | 228 | goto end; |
| 250 | } | ||
| 251 | } | 229 | } |
| 252 | else if (!noout && (peer != NULL)) /* just print the certificate */ | 230 | } else if (!noout && (peer != NULL)) { /* just print the certificate */ |
| 253 | { | 231 | if (outformat == FORMAT_ASN1) |
| 254 | if (outformat == FORMAT_ASN1) | 232 | i = (int) i2d_X509_bio(out, peer); |
| 255 | i=(int)i2d_X509_bio(out,peer); | ||
| 256 | else if (outformat == FORMAT_PEM) | 233 | else if (outformat == FORMAT_PEM) |
| 257 | i=PEM_write_bio_X509(out,peer); | 234 | i = PEM_write_bio_X509(out, peer); |
| 258 | else { | 235 | else { |
| 259 | BIO_printf(bio_err,"bad output format specified for outfile\n"); | 236 | BIO_printf(bio_err, "bad output format specified for outfile\n"); |
| 260 | goto end; | 237 | goto end; |
| 261 | } | 238 | } |
| 262 | if (!i) { | 239 | if (!i) { |
| 263 | BIO_printf(bio_err,"unable to write X509\n"); | 240 | BIO_printf(bio_err, "unable to write X509\n"); |
| 264 | goto end; | 241 | goto end; |
| 265 | } | ||
| 266 | } | 242 | } |
| 267 | ret=0; | 243 | } |
| 244 | ret = 0; | ||
| 268 | end: | 245 | end: |
| 269 | if (out != NULL) BIO_free_all(out); | 246 | if (out != NULL) |
| 270 | if (x != NULL) SSL_SESSION_free(x); | 247 | BIO_free_all(out); |
| 248 | if (x != NULL) | ||
| 249 | SSL_SESSION_free(x); | ||
| 271 | apps_shutdown(); | 250 | apps_shutdown(); |
| 272 | return(ret); | 251 | return (ret); |
| 273 | } | 252 | } |
| 274 | 253 | ||
| 275 | static SSL_SESSION *load_sess_id(char *infile, int format) | 254 | static SSL_SESSION * |
| 276 | { | 255 | load_sess_id(char *infile, int format) |
| 277 | SSL_SESSION *x=NULL; | 256 | { |
| 278 | BIO *in=NULL; | 257 | SSL_SESSION *x = NULL; |
| 258 | BIO *in = NULL; | ||
| 279 | 259 | ||
| 280 | in=BIO_new(BIO_s_file()); | 260 | in = BIO_new(BIO_s_file()); |
| 281 | if (in == NULL) | 261 | if (in == NULL) { |
| 282 | { | ||
| 283 | ERR_print_errors(bio_err); | 262 | ERR_print_errors(bio_err); |
| 284 | goto end; | 263 | goto end; |
| 285 | } | 264 | } |
| 286 | |||
| 287 | if (infile == NULL) | 265 | if (infile == NULL) |
| 288 | BIO_set_fp(in,stdin,BIO_NOCLOSE); | 266 | BIO_set_fp(in, stdin, BIO_NOCLOSE); |
| 289 | else | 267 | else { |
| 290 | { | 268 | if (BIO_read_filename(in, infile) <= 0) { |
| 291 | if (BIO_read_filename(in,infile) <= 0) | ||
| 292 | { | ||
| 293 | perror(infile); | 269 | perror(infile); |
| 294 | goto end; | 270 | goto end; |
| 295 | } | ||
| 296 | } | 271 | } |
| 297 | if (format == FORMAT_ASN1) | 272 | } |
| 298 | x=d2i_SSL_SESSION_bio(in,NULL); | 273 | if (format == FORMAT_ASN1) |
| 274 | x = d2i_SSL_SESSION_bio(in, NULL); | ||
| 299 | else if (format == FORMAT_PEM) | 275 | else if (format == FORMAT_PEM) |
| 300 | x=PEM_read_bio_SSL_SESSION(in,NULL,NULL,NULL); | 276 | x = PEM_read_bio_SSL_SESSION(in, NULL, NULL, NULL); |
| 301 | else { | 277 | else { |
| 302 | BIO_printf(bio_err,"bad input format specified for input crl\n"); | 278 | BIO_printf(bio_err, "bad input format specified for input crl\n"); |
| 303 | goto end; | 279 | goto end; |
| 304 | } | 280 | } |
| 305 | if (x == NULL) | 281 | if (x == NULL) { |
| 306 | { | 282 | BIO_printf(bio_err, "unable to load SSL_SESSION\n"); |
| 307 | BIO_printf(bio_err,"unable to load SSL_SESSION\n"); | ||
| 308 | ERR_print_errors(bio_err); | 283 | ERR_print_errors(bio_err); |
| 309 | goto end; | 284 | goto end; |
| 310 | } | ||
| 311 | |||
| 312 | end: | ||
| 313 | if (in != NULL) BIO_free(in); | ||
| 314 | return(x); | ||
| 315 | } | 285 | } |
| 316 | 286 | end: | |
| 287 | if (in != NULL) | ||
| 288 | BIO_free(in); | ||
| 289 | return (x); | ||
| 290 | } | ||
diff --git a/src/lib/libssl/src/apps/smime.c b/src/lib/libssl/src/apps/smime.c index c4b976fa00..9332ae9095 100644 --- a/src/lib/libssl/src/apps/smime.c +++ b/src/lib/libssl/src/apps/smime.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -69,8 +69,8 @@ | |||
| 69 | 69 | ||
| 70 | #undef PROG | 70 | #undef PROG |
| 71 | #define PROG smime_main | 71 | #define PROG smime_main |
| 72 | static int save_certs(char *signerfile, STACK_OF(X509) *signers); | 72 | static int save_certs(char *signerfile, STACK_OF(X509) * signers); |
| 73 | static int smime_cb(int ok, X509_STORE_CTX *ctx); | 73 | static int smime_cb(int ok, X509_STORE_CTX * ctx); |
| 74 | 74 | ||
| 75 | #define SMIME_OP 0x10 | 75 | #define SMIME_OP 0x10 |
| 76 | #define SMIME_IP 0x20 | 76 | #define SMIME_IP 0x20 |
| @@ -84,8 +84,9 @@ static int smime_cb(int ok, X509_STORE_CTX *ctx); | |||
| 84 | 84 | ||
| 85 | int MAIN(int, char **); | 85 | int MAIN(int, char **); |
| 86 | 86 | ||
| 87 | int MAIN(int argc, char **argv) | 87 | int |
| 88 | { | 88 | MAIN(int argc, char **argv) |
| 89 | { | ||
| 89 | ENGINE *e = NULL; | 90 | ENGINE *e = NULL; |
| 90 | int operation = 0; | 91 | int operation = 0; |
| 91 | int ret = 0; | 92 | int ret = 0; |
| @@ -93,14 +94,14 @@ int MAIN(int argc, char **argv) | |||
| 93 | const char *inmode = "r", *outmode = "w"; | 94 | const char *inmode = "r", *outmode = "w"; |
| 94 | char *infile = NULL, *outfile = NULL; | 95 | char *infile = NULL, *outfile = NULL; |
| 95 | char *signerfile = NULL, *recipfile = NULL; | 96 | char *signerfile = NULL, *recipfile = NULL; |
| 96 | STACK_OF(OPENSSL_STRING) *sksigners = NULL, *skkeys = NULL; | 97 | STACK_OF(OPENSSL_STRING) * sksigners = NULL, *skkeys = NULL; |
| 97 | char *certfile = NULL, *keyfile = NULL, *contfile=NULL; | 98 | char *certfile = NULL, *keyfile = NULL, *contfile = NULL; |
| 98 | const EVP_CIPHER *cipher = NULL; | 99 | const EVP_CIPHER *cipher = NULL; |
| 99 | PKCS7 *p7 = NULL; | 100 | PKCS7 *p7 = NULL; |
| 100 | X509_STORE *store = NULL; | 101 | X509_STORE *store = NULL; |
| 101 | X509 *cert = NULL, *recip = NULL, *signer = NULL; | 102 | X509 *cert = NULL, *recip = NULL, *signer = NULL; |
| 102 | EVP_PKEY *key = NULL; | 103 | EVP_PKEY *key = NULL; |
| 103 | STACK_OF(X509) *encerts = NULL, *other = NULL; | 104 | STACK_OF(X509) * encerts = NULL, *other = NULL; |
| 104 | BIO *in = NULL, *out = NULL, *indata = NULL; | 105 | BIO *in = NULL, *out = NULL, *indata = NULL; |
| 105 | int badarg = 0; | 106 | int badarg = 0; |
| 106 | int flags = PKCS7_DETACHED; | 107 | int flags = PKCS7_DETACHED; |
| @@ -112,9 +113,9 @@ int MAIN(int argc, char **argv) | |||
| 112 | int indef = 0; | 113 | int indef = 0; |
| 113 | const EVP_MD *sign_md = NULL; | 114 | const EVP_MD *sign_md = NULL; |
| 114 | int informat = FORMAT_SMIME, outformat = FORMAT_SMIME; | 115 | int informat = FORMAT_SMIME, outformat = FORMAT_SMIME; |
| 115 | int keyform = FORMAT_PEM; | 116 | int keyform = FORMAT_PEM; |
| 116 | #ifndef OPENSSL_NO_ENGINE | 117 | #ifndef OPENSSL_NO_ENGINE |
| 117 | char *engine=NULL; | 118 | char *engine = NULL; |
| 118 | #endif | 119 | #endif |
| 119 | 120 | ||
| 120 | X509_VERIFY_PARAM *vpm = NULL; | 121 | X509_VERIFY_PARAM *vpm = NULL; |
| @@ -124,141 +125,126 @@ int MAIN(int argc, char **argv) | |||
| 124 | 125 | ||
| 125 | apps_startup(); | 126 | apps_startup(); |
| 126 | 127 | ||
| 127 | if (bio_err == NULL) | 128 | if (bio_err == NULL) { |
| 128 | { | ||
| 129 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) | 129 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 130 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT); | 130 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 131 | } | 131 | } |
| 132 | |||
| 133 | if (!load_config(bio_err, NULL)) | 132 | if (!load_config(bio_err, NULL)) |
| 134 | goto end; | 133 | goto end; |
| 135 | 134 | ||
| 136 | while (!badarg && *args && *args[0] == '-') | 135 | while (!badarg && *args && *args[0] == '-') { |
| 137 | { | 136 | if (!strcmp(*args, "-encrypt")) |
| 138 | if (!strcmp (*args, "-encrypt")) | ||
| 139 | operation = SMIME_ENCRYPT; | 137 | operation = SMIME_ENCRYPT; |
| 140 | else if (!strcmp (*args, "-decrypt")) | 138 | else if (!strcmp(*args, "-decrypt")) |
| 141 | operation = SMIME_DECRYPT; | 139 | operation = SMIME_DECRYPT; |
| 142 | else if (!strcmp (*args, "-sign")) | 140 | else if (!strcmp(*args, "-sign")) |
| 143 | operation = SMIME_SIGN; | 141 | operation = SMIME_SIGN; |
| 144 | else if (!strcmp (*args, "-resign")) | 142 | else if (!strcmp(*args, "-resign")) |
| 145 | operation = SMIME_RESIGN; | 143 | operation = SMIME_RESIGN; |
| 146 | else if (!strcmp (*args, "-verify")) | 144 | else if (!strcmp(*args, "-verify")) |
| 147 | operation = SMIME_VERIFY; | 145 | operation = SMIME_VERIFY; |
| 148 | else if (!strcmp (*args, "-pk7out")) | 146 | else if (!strcmp(*args, "-pk7out")) |
| 149 | operation = SMIME_PK7OUT; | 147 | operation = SMIME_PK7OUT; |
| 150 | #ifndef OPENSSL_NO_DES | 148 | #ifndef OPENSSL_NO_DES |
| 151 | else if (!strcmp (*args, "-des3")) | 149 | else if (!strcmp(*args, "-des3")) |
| 152 | cipher = EVP_des_ede3_cbc(); | 150 | cipher = EVP_des_ede3_cbc(); |
| 153 | else if (!strcmp (*args, "-des")) | 151 | else if (!strcmp(*args, "-des")) |
| 154 | cipher = EVP_des_cbc(); | 152 | cipher = EVP_des_cbc(); |
| 155 | #endif | 153 | #endif |
| 156 | #ifndef OPENSSL_NO_SEED | 154 | #ifndef OPENSSL_NO_SEED |
| 157 | else if (!strcmp (*args, "-seed")) | 155 | else if (!strcmp(*args, "-seed")) |
| 158 | cipher = EVP_seed_cbc(); | 156 | cipher = EVP_seed_cbc(); |
| 159 | #endif | 157 | #endif |
| 160 | #ifndef OPENSSL_NO_RC2 | 158 | #ifndef OPENSSL_NO_RC2 |
| 161 | else if (!strcmp (*args, "-rc2-40")) | 159 | else if (!strcmp(*args, "-rc2-40")) |
| 162 | cipher = EVP_rc2_40_cbc(); | 160 | cipher = EVP_rc2_40_cbc(); |
| 163 | else if (!strcmp (*args, "-rc2-128")) | 161 | else if (!strcmp(*args, "-rc2-128")) |
| 164 | cipher = EVP_rc2_cbc(); | 162 | cipher = EVP_rc2_cbc(); |
| 165 | else if (!strcmp (*args, "-rc2-64")) | 163 | else if (!strcmp(*args, "-rc2-64")) |
| 166 | cipher = EVP_rc2_64_cbc(); | 164 | cipher = EVP_rc2_64_cbc(); |
| 167 | #endif | 165 | #endif |
| 168 | #ifndef OPENSSL_NO_AES | 166 | #ifndef OPENSSL_NO_AES |
| 169 | else if (!strcmp(*args,"-aes128")) | 167 | else if (!strcmp(*args, "-aes128")) |
| 170 | cipher = EVP_aes_128_cbc(); | 168 | cipher = EVP_aes_128_cbc(); |
| 171 | else if (!strcmp(*args,"-aes192")) | 169 | else if (!strcmp(*args, "-aes192")) |
| 172 | cipher = EVP_aes_192_cbc(); | 170 | cipher = EVP_aes_192_cbc(); |
| 173 | else if (!strcmp(*args,"-aes256")) | 171 | else if (!strcmp(*args, "-aes256")) |
| 174 | cipher = EVP_aes_256_cbc(); | 172 | cipher = EVP_aes_256_cbc(); |
| 175 | #endif | 173 | #endif |
| 176 | #ifndef OPENSSL_NO_CAMELLIA | 174 | #ifndef OPENSSL_NO_CAMELLIA |
| 177 | else if (!strcmp(*args,"-camellia128")) | 175 | else if (!strcmp(*args, "-camellia128")) |
| 178 | cipher = EVP_camellia_128_cbc(); | 176 | cipher = EVP_camellia_128_cbc(); |
| 179 | else if (!strcmp(*args,"-camellia192")) | 177 | else if (!strcmp(*args, "-camellia192")) |
| 180 | cipher = EVP_camellia_192_cbc(); | 178 | cipher = EVP_camellia_192_cbc(); |
| 181 | else if (!strcmp(*args,"-camellia256")) | 179 | else if (!strcmp(*args, "-camellia256")) |
| 182 | cipher = EVP_camellia_256_cbc(); | 180 | cipher = EVP_camellia_256_cbc(); |
| 183 | #endif | 181 | #endif |
| 184 | else if (!strcmp (*args, "-text")) | 182 | else if (!strcmp(*args, "-text")) |
| 185 | flags |= PKCS7_TEXT; | 183 | flags |= PKCS7_TEXT; |
| 186 | else if (!strcmp (*args, "-nointern")) | 184 | else if (!strcmp(*args, "-nointern")) |
| 187 | flags |= PKCS7_NOINTERN; | 185 | flags |= PKCS7_NOINTERN; |
| 188 | else if (!strcmp (*args, "-noverify")) | 186 | else if (!strcmp(*args, "-noverify")) |
| 189 | flags |= PKCS7_NOVERIFY; | 187 | flags |= PKCS7_NOVERIFY; |
| 190 | else if (!strcmp (*args, "-nochain")) | 188 | else if (!strcmp(*args, "-nochain")) |
| 191 | flags |= PKCS7_NOCHAIN; | 189 | flags |= PKCS7_NOCHAIN; |
| 192 | else if (!strcmp (*args, "-nocerts")) | 190 | else if (!strcmp(*args, "-nocerts")) |
| 193 | flags |= PKCS7_NOCERTS; | 191 | flags |= PKCS7_NOCERTS; |
| 194 | else if (!strcmp (*args, "-noattr")) | 192 | else if (!strcmp(*args, "-noattr")) |
| 195 | flags |= PKCS7_NOATTR; | 193 | flags |= PKCS7_NOATTR; |
| 196 | else if (!strcmp (*args, "-nodetach")) | 194 | else if (!strcmp(*args, "-nodetach")) |
| 197 | flags &= ~PKCS7_DETACHED; | 195 | flags &= ~PKCS7_DETACHED; |
| 198 | else if (!strcmp (*args, "-nosmimecap")) | 196 | else if (!strcmp(*args, "-nosmimecap")) |
| 199 | flags |= PKCS7_NOSMIMECAP; | 197 | flags |= PKCS7_NOSMIMECAP; |
| 200 | else if (!strcmp (*args, "-binary")) | 198 | else if (!strcmp(*args, "-binary")) |
| 201 | flags |= PKCS7_BINARY; | 199 | flags |= PKCS7_BINARY; |
| 202 | else if (!strcmp (*args, "-nosigs")) | 200 | else if (!strcmp(*args, "-nosigs")) |
| 203 | flags |= PKCS7_NOSIGS; | 201 | flags |= PKCS7_NOSIGS; |
| 204 | else if (!strcmp (*args, "-stream")) | 202 | else if (!strcmp(*args, "-stream")) |
| 205 | indef = 1; | 203 | indef = 1; |
| 206 | else if (!strcmp (*args, "-indef")) | 204 | else if (!strcmp(*args, "-indef")) |
| 207 | indef = 1; | 205 | indef = 1; |
| 208 | else if (!strcmp (*args, "-noindef")) | 206 | else if (!strcmp(*args, "-noindef")) |
| 209 | indef = 0; | 207 | indef = 0; |
| 210 | else if (!strcmp (*args, "-nooldmime")) | 208 | else if (!strcmp(*args, "-nooldmime")) |
| 211 | flags |= PKCS7_NOOLDMIMETYPE; | 209 | flags |= PKCS7_NOOLDMIMETYPE; |
| 212 | else if (!strcmp (*args, "-crlfeol")) | 210 | else if (!strcmp(*args, "-crlfeol")) |
| 213 | flags |= PKCS7_CRLFEOL; | 211 | flags |= PKCS7_CRLFEOL; |
| 214 | else if (!strcmp(*args,"-rand")) | 212 | else if (!strcmp(*args, "-rand")) { |
| 215 | { | ||
| 216 | if (!args[1]) | 213 | if (!args[1]) |
| 217 | goto argerr; | 214 | goto argerr; |
| 218 | args++; | 215 | args++; |
| 219 | inrand = *args; | 216 | inrand = *args; |
| 220 | need_rand = 1; | 217 | need_rand = 1; |
| 221 | } | 218 | } |
| 222 | #ifndef OPENSSL_NO_ENGINE | 219 | #ifndef OPENSSL_NO_ENGINE |
| 223 | else if (!strcmp(*args,"-engine")) | 220 | else if (!strcmp(*args, "-engine")) { |
| 224 | { | ||
| 225 | if (!args[1]) | 221 | if (!args[1]) |
| 226 | goto argerr; | 222 | goto argerr; |
| 227 | engine = *++args; | 223 | engine = *++args; |
| 228 | } | 224 | } |
| 229 | #endif | 225 | #endif |
| 230 | else if (!strcmp(*args,"-passin")) | 226 | else if (!strcmp(*args, "-passin")) { |
| 231 | { | ||
| 232 | if (!args[1]) | 227 | if (!args[1]) |
| 233 | goto argerr; | 228 | goto argerr; |
| 234 | passargin = *++args; | 229 | passargin = *++args; |
| 235 | } | 230 | } else if (!strcmp(*args, "-to")) { |
| 236 | else if (!strcmp (*args, "-to")) | ||
| 237 | { | ||
| 238 | if (!args[1]) | 231 | if (!args[1]) |
| 239 | goto argerr; | 232 | goto argerr; |
| 240 | to = *++args; | 233 | to = *++args; |
| 241 | } | 234 | } else if (!strcmp(*args, "-from")) { |
| 242 | else if (!strcmp (*args, "-from")) | ||
| 243 | { | ||
| 244 | if (!args[1]) | 235 | if (!args[1]) |
| 245 | goto argerr; | 236 | goto argerr; |
| 246 | from = *++args; | 237 | from = *++args; |
| 247 | } | 238 | } else if (!strcmp(*args, "-subject")) { |
| 248 | else if (!strcmp (*args, "-subject")) | ||
| 249 | { | ||
| 250 | if (!args[1]) | 239 | if (!args[1]) |
| 251 | goto argerr; | 240 | goto argerr; |
| 252 | subject = *++args; | 241 | subject = *++args; |
| 253 | } | 242 | } else if (!strcmp(*args, "-signer")) { |
| 254 | else if (!strcmp (*args, "-signer")) | ||
| 255 | { | ||
| 256 | if (!args[1]) | 243 | if (!args[1]) |
| 257 | goto argerr; | 244 | goto argerr; |
| 258 | /* If previous -signer argument add signer to list */ | 245 | /* If previous -signer argument add signer to list */ |
| 259 | 246 | ||
| 260 | if (signerfile) | 247 | if (signerfile) { |
| 261 | { | ||
| 262 | if (!sksigners) | 248 | if (!sksigners) |
| 263 | sksigners = sk_OPENSSL_STRING_new_null(); | 249 | sksigners = sk_OPENSSL_STRING_new_null(); |
| 264 | sk_OPENSSL_STRING_push(sksigners, signerfile); | 250 | sk_OPENSSL_STRING_push(sksigners, signerfile); |
| @@ -268,39 +254,30 @@ int MAIN(int argc, char **argv) | |||
| 268 | skkeys = sk_OPENSSL_STRING_new_null(); | 254 | skkeys = sk_OPENSSL_STRING_new_null(); |
| 269 | sk_OPENSSL_STRING_push(skkeys, keyfile); | 255 | sk_OPENSSL_STRING_push(skkeys, keyfile); |
| 270 | keyfile = NULL; | 256 | keyfile = NULL; |
| 271 | } | ||
| 272 | signerfile = *++args; | ||
| 273 | } | 257 | } |
| 274 | else if (!strcmp (*args, "-recip")) | 258 | signerfile = *++args; |
| 275 | { | 259 | } else if (!strcmp(*args, "-recip")) { |
| 276 | if (!args[1]) | 260 | if (!args[1]) |
| 277 | goto argerr; | 261 | goto argerr; |
| 278 | recipfile = *++args; | 262 | recipfile = *++args; |
| 279 | } | 263 | } else if (!strcmp(*args, "-md")) { |
| 280 | else if (!strcmp (*args, "-md")) | ||
| 281 | { | ||
| 282 | if (!args[1]) | 264 | if (!args[1]) |
| 283 | goto argerr; | 265 | goto argerr; |
| 284 | sign_md = EVP_get_digestbyname(*++args); | 266 | sign_md = EVP_get_digestbyname(*++args); |
| 285 | if (sign_md == NULL) | 267 | if (sign_md == NULL) { |
| 286 | { | ||
| 287 | BIO_printf(bio_err, "Unknown digest %s\n", | 268 | BIO_printf(bio_err, "Unknown digest %s\n", |
| 288 | *args); | 269 | *args); |
| 289 | goto argerr; | 270 | goto argerr; |
| 290 | } | ||
| 291 | } | 271 | } |
| 292 | else if (!strcmp (*args, "-inkey")) | 272 | } else if (!strcmp(*args, "-inkey")) { |
| 293 | { | 273 | if (!args[1]) |
| 294 | if (!args[1]) | ||
| 295 | goto argerr; | 274 | goto argerr; |
| 296 | /* If previous -inkey arument add signer to list */ | 275 | /* If previous -inkey arument add signer to list */ |
| 297 | if (keyfile) | 276 | if (keyfile) { |
| 298 | { | 277 | if (!signerfile) { |
| 299 | if (!signerfile) | ||
| 300 | { | ||
| 301 | BIO_puts(bio_err, "Illegal -inkey without -signer\n"); | 278 | BIO_puts(bio_err, "Illegal -inkey without -signer\n"); |
| 302 | goto argerr; | 279 | goto argerr; |
| 303 | } | 280 | } |
| 304 | if (!sksigners) | 281 | if (!sksigners) |
| 305 | sksigners = sk_OPENSSL_STRING_new_null(); | 282 | sksigners = sk_OPENSSL_STRING_new_null(); |
| 306 | sk_OPENSSL_STRING_push(sksigners, signerfile); | 283 | sk_OPENSSL_STRING_push(sksigners, signerfile); |
| @@ -308,86 +285,62 @@ int MAIN(int argc, char **argv) | |||
| 308 | if (!skkeys) | 285 | if (!skkeys) |
| 309 | skkeys = sk_OPENSSL_STRING_new_null(); | 286 | skkeys = sk_OPENSSL_STRING_new_null(); |
| 310 | sk_OPENSSL_STRING_push(skkeys, keyfile); | 287 | sk_OPENSSL_STRING_push(skkeys, keyfile); |
| 311 | } | ||
| 312 | keyfile = *++args; | ||
| 313 | } | 288 | } |
| 314 | else if (!strcmp (*args, "-keyform")) | 289 | keyfile = *++args; |
| 315 | { | 290 | } else if (!strcmp(*args, "-keyform")) { |
| 316 | if (!args[1]) | 291 | if (!args[1]) |
| 317 | goto argerr; | 292 | goto argerr; |
| 318 | keyform = str2fmt(*++args); | 293 | keyform = str2fmt(*++args); |
| 319 | } | 294 | } else if (!strcmp(*args, "-certfile")) { |
| 320 | else if (!strcmp (*args, "-certfile")) | ||
| 321 | { | ||
| 322 | if (!args[1]) | 295 | if (!args[1]) |
| 323 | goto argerr; | 296 | goto argerr; |
| 324 | certfile = *++args; | 297 | certfile = *++args; |
| 325 | } | 298 | } else if (!strcmp(*args, "-CAfile")) { |
| 326 | else if (!strcmp (*args, "-CAfile")) | ||
| 327 | { | ||
| 328 | if (!args[1]) | 299 | if (!args[1]) |
| 329 | goto argerr; | 300 | goto argerr; |
| 330 | CAfile = *++args; | 301 | CAfile = *++args; |
| 331 | } | 302 | } else if (!strcmp(*args, "-CApath")) { |
| 332 | else if (!strcmp (*args, "-CApath")) | ||
| 333 | { | ||
| 334 | if (!args[1]) | 303 | if (!args[1]) |
| 335 | goto argerr; | 304 | goto argerr; |
| 336 | CApath = *++args; | 305 | CApath = *++args; |
| 337 | } | 306 | } else if (!strcmp(*args, "-in")) { |
| 338 | else if (!strcmp (*args, "-in")) | ||
| 339 | { | ||
| 340 | if (!args[1]) | 307 | if (!args[1]) |
| 341 | goto argerr; | 308 | goto argerr; |
| 342 | infile = *++args; | 309 | infile = *++args; |
| 343 | } | 310 | } else if (!strcmp(*args, "-inform")) { |
| 344 | else if (!strcmp (*args, "-inform")) | ||
| 345 | { | ||
| 346 | if (!args[1]) | 311 | if (!args[1]) |
| 347 | goto argerr; | 312 | goto argerr; |
| 348 | informat = str2fmt(*++args); | 313 | informat = str2fmt(*++args); |
| 349 | } | 314 | } else if (!strcmp(*args, "-outform")) { |
| 350 | else if (!strcmp (*args, "-outform")) | ||
| 351 | { | ||
| 352 | if (!args[1]) | 315 | if (!args[1]) |
| 353 | goto argerr; | 316 | goto argerr; |
| 354 | outformat = str2fmt(*++args); | 317 | outformat = str2fmt(*++args); |
| 355 | } | 318 | } else if (!strcmp(*args, "-out")) { |
| 356 | else if (!strcmp (*args, "-out")) | ||
| 357 | { | ||
| 358 | if (!args[1]) | 319 | if (!args[1]) |
| 359 | goto argerr; | 320 | goto argerr; |
| 360 | outfile = *++args; | 321 | outfile = *++args; |
| 361 | } | 322 | } else if (!strcmp(*args, "-content")) { |
| 362 | else if (!strcmp (*args, "-content")) | ||
| 363 | { | ||
| 364 | if (!args[1]) | 323 | if (!args[1]) |
| 365 | goto argerr; | 324 | goto argerr; |
| 366 | contfile = *++args; | 325 | contfile = *++args; |
| 367 | } | 326 | } else if (args_verify(&args, NULL, &badarg, bio_err, &vpm)) |
| 368 | else if (args_verify(&args, NULL, &badarg, bio_err, &vpm)) | ||
| 369 | continue; | 327 | continue; |
| 370 | else if ((cipher = EVP_get_cipherbyname(*args + 1)) == NULL) | 328 | else if ((cipher = EVP_get_cipherbyname(*args + 1)) == NULL) |
| 371 | badarg = 1; | 329 | badarg = 1; |
| 372 | args++; | 330 | args++; |
| 373 | } | 331 | } |
| 374 | 332 | ||
| 375 | if (!(operation & SMIME_SIGNERS) && (skkeys || sksigners)) | 333 | if (!(operation & SMIME_SIGNERS) && (skkeys || sksigners)) { |
| 376 | { | ||
| 377 | BIO_puts(bio_err, "Multiple signers or keys not allowed\n"); | 334 | BIO_puts(bio_err, "Multiple signers or keys not allowed\n"); |
| 378 | goto argerr; | 335 | goto argerr; |
| 379 | } | 336 | } |
| 380 | 337 | if (operation & SMIME_SIGNERS) { | |
| 381 | if (operation & SMIME_SIGNERS) | ||
| 382 | { | ||
| 383 | /* Check to see if any final signer needs to be appended */ | 338 | /* Check to see if any final signer needs to be appended */ |
| 384 | if (keyfile && !signerfile) | 339 | if (keyfile && !signerfile) { |
| 385 | { | ||
| 386 | BIO_puts(bio_err, "Illegal -inkey without -signer\n"); | 340 | BIO_puts(bio_err, "Illegal -inkey without -signer\n"); |
| 387 | goto argerr; | 341 | goto argerr; |
| 388 | } | 342 | } |
| 389 | if (signerfile) | 343 | if (signerfile) { |
| 390 | { | ||
| 391 | if (!sksigners) | 344 | if (!sksigners) |
| 392 | sksigners = sk_OPENSSL_STRING_new_null(); | 345 | sksigners = sk_OPENSSL_STRING_new_null(); |
| 393 | sk_OPENSSL_STRING_push(sksigners, signerfile); | 346 | sk_OPENSSL_STRING_push(sksigners, signerfile); |
| @@ -396,406 +349,333 @@ int MAIN(int argc, char **argv) | |||
| 396 | if (!keyfile) | 349 | if (!keyfile) |
| 397 | keyfile = signerfile; | 350 | keyfile = signerfile; |
| 398 | sk_OPENSSL_STRING_push(skkeys, keyfile); | 351 | sk_OPENSSL_STRING_push(skkeys, keyfile); |
| 399 | } | 352 | } |
| 400 | if (!sksigners) | 353 | if (!sksigners) { |
| 401 | { | ||
| 402 | BIO_printf(bio_err, "No signer certificate specified\n"); | 354 | BIO_printf(bio_err, "No signer certificate specified\n"); |
| 403 | badarg = 1; | 355 | badarg = 1; |
| 404 | } | 356 | } |
| 405 | signerfile = NULL; | 357 | signerfile = NULL; |
| 406 | keyfile = NULL; | 358 | keyfile = NULL; |
| 407 | need_rand = 1; | 359 | need_rand = 1; |
| 408 | } | 360 | } else if (operation == SMIME_DECRYPT) { |
| 409 | else if (operation == SMIME_DECRYPT) | 361 | if (!recipfile && !keyfile) { |
| 410 | { | ||
| 411 | if (!recipfile && !keyfile) | ||
| 412 | { | ||
| 413 | BIO_printf(bio_err, "No recipient certificate or key specified\n"); | 362 | BIO_printf(bio_err, "No recipient certificate or key specified\n"); |
| 414 | badarg = 1; | 363 | badarg = 1; |
| 415 | } | ||
| 416 | } | 364 | } |
| 417 | else if (operation == SMIME_ENCRYPT) | 365 | } else if (operation == SMIME_ENCRYPT) { |
| 418 | { | 366 | if (!*args) { |
| 419 | if (!*args) | ||
| 420 | { | ||
| 421 | BIO_printf(bio_err, "No recipient(s) certificate(s) specified\n"); | 367 | BIO_printf(bio_err, "No recipient(s) certificate(s) specified\n"); |
| 422 | badarg = 1; | 368 | badarg = 1; |
| 423 | } | ||
| 424 | need_rand = 1; | ||
| 425 | } | 369 | } |
| 426 | else if (!operation) | 370 | need_rand = 1; |
| 371 | } else if (!operation) | ||
| 427 | badarg = 1; | 372 | badarg = 1; |
| 428 | 373 | ||
| 429 | if (badarg) | 374 | if (badarg) { |
| 430 | { | 375 | argerr: |
| 431 | argerr: | 376 | BIO_printf(bio_err, "Usage smime [options] cert.pem ...\n"); |
| 432 | BIO_printf (bio_err, "Usage smime [options] cert.pem ...\n"); | 377 | BIO_printf(bio_err, "where options are\n"); |
| 433 | BIO_printf (bio_err, "where options are\n"); | 378 | BIO_printf(bio_err, "-encrypt encrypt message\n"); |
| 434 | BIO_printf (bio_err, "-encrypt encrypt message\n"); | 379 | BIO_printf(bio_err, "-decrypt decrypt encrypted message\n"); |
| 435 | BIO_printf (bio_err, "-decrypt decrypt encrypted message\n"); | 380 | BIO_printf(bio_err, "-sign sign message\n"); |
| 436 | BIO_printf (bio_err, "-sign sign message\n"); | 381 | BIO_printf(bio_err, "-verify verify signed message\n"); |
| 437 | BIO_printf (bio_err, "-verify verify signed message\n"); | 382 | BIO_printf(bio_err, "-pk7out output PKCS#7 structure\n"); |
| 438 | BIO_printf (bio_err, "-pk7out output PKCS#7 structure\n"); | ||
| 439 | #ifndef OPENSSL_NO_DES | 383 | #ifndef OPENSSL_NO_DES |
| 440 | BIO_printf (bio_err, "-des3 encrypt with triple DES\n"); | 384 | BIO_printf(bio_err, "-des3 encrypt with triple DES\n"); |
| 441 | BIO_printf (bio_err, "-des encrypt with DES\n"); | 385 | BIO_printf(bio_err, "-des encrypt with DES\n"); |
| 442 | #endif | 386 | #endif |
| 443 | #ifndef OPENSSL_NO_SEED | 387 | #ifndef OPENSSL_NO_SEED |
| 444 | BIO_printf (bio_err, "-seed encrypt with SEED\n"); | 388 | BIO_printf(bio_err, "-seed encrypt with SEED\n"); |
| 445 | #endif | 389 | #endif |
| 446 | #ifndef OPENSSL_NO_RC2 | 390 | #ifndef OPENSSL_NO_RC2 |
| 447 | BIO_printf (bio_err, "-rc2-40 encrypt with RC2-40 (default)\n"); | 391 | BIO_printf(bio_err, "-rc2-40 encrypt with RC2-40 (default)\n"); |
| 448 | BIO_printf (bio_err, "-rc2-64 encrypt with RC2-64\n"); | 392 | BIO_printf(bio_err, "-rc2-64 encrypt with RC2-64\n"); |
| 449 | BIO_printf (bio_err, "-rc2-128 encrypt with RC2-128\n"); | 393 | BIO_printf(bio_err, "-rc2-128 encrypt with RC2-128\n"); |
| 450 | #endif | 394 | #endif |
| 451 | #ifndef OPENSSL_NO_AES | 395 | #ifndef OPENSSL_NO_AES |
| 452 | BIO_printf (bio_err, "-aes128, -aes192, -aes256\n"); | 396 | BIO_printf(bio_err, "-aes128, -aes192, -aes256\n"); |
| 453 | BIO_printf (bio_err, " encrypt PEM output with cbc aes\n"); | 397 | BIO_printf(bio_err, " encrypt PEM output with cbc aes\n"); |
| 454 | #endif | 398 | #endif |
| 455 | #ifndef OPENSSL_NO_CAMELLIA | 399 | #ifndef OPENSSL_NO_CAMELLIA |
| 456 | BIO_printf (bio_err, "-camellia128, -camellia192, -camellia256\n"); | 400 | BIO_printf(bio_err, "-camellia128, -camellia192, -camellia256\n"); |
| 457 | BIO_printf (bio_err, " encrypt PEM output with cbc camellia\n"); | 401 | BIO_printf(bio_err, " encrypt PEM output with cbc camellia\n"); |
| 458 | #endif | 402 | #endif |
| 459 | BIO_printf (bio_err, "-nointern don't search certificates in message for signer\n"); | 403 | BIO_printf(bio_err, "-nointern don't search certificates in message for signer\n"); |
| 460 | BIO_printf (bio_err, "-nosigs don't verify message signature\n"); | 404 | BIO_printf(bio_err, "-nosigs don't verify message signature\n"); |
| 461 | BIO_printf (bio_err, "-noverify don't verify signers certificate\n"); | 405 | BIO_printf(bio_err, "-noverify don't verify signers certificate\n"); |
| 462 | BIO_printf (bio_err, "-nocerts don't include signers certificate when signing\n"); | 406 | BIO_printf(bio_err, "-nocerts don't include signers certificate when signing\n"); |
| 463 | BIO_printf (bio_err, "-nodetach use opaque signing\n"); | 407 | BIO_printf(bio_err, "-nodetach use opaque signing\n"); |
| 464 | BIO_printf (bio_err, "-noattr don't include any signed attributes\n"); | 408 | BIO_printf(bio_err, "-noattr don't include any signed attributes\n"); |
| 465 | BIO_printf (bio_err, "-binary don't translate message to text\n"); | 409 | BIO_printf(bio_err, "-binary don't translate message to text\n"); |
| 466 | BIO_printf (bio_err, "-certfile file other certificates file\n"); | 410 | BIO_printf(bio_err, "-certfile file other certificates file\n"); |
| 467 | BIO_printf (bio_err, "-signer file signer certificate file\n"); | 411 | BIO_printf(bio_err, "-signer file signer certificate file\n"); |
| 468 | BIO_printf (bio_err, "-recip file recipient certificate file for decryption\n"); | 412 | BIO_printf(bio_err, "-recip file recipient certificate file for decryption\n"); |
| 469 | BIO_printf (bio_err, "-in file input file\n"); | 413 | BIO_printf(bio_err, "-in file input file\n"); |
| 470 | BIO_printf (bio_err, "-inform arg input format SMIME (default), PEM or DER\n"); | 414 | BIO_printf(bio_err, "-inform arg input format SMIME (default), PEM or DER\n"); |
| 471 | BIO_printf (bio_err, "-inkey file input private key (if not signer or recipient)\n"); | 415 | BIO_printf(bio_err, "-inkey file input private key (if not signer or recipient)\n"); |
| 472 | BIO_printf (bio_err, "-keyform arg input private key format (PEM or ENGINE)\n"); | 416 | BIO_printf(bio_err, "-keyform arg input private key format (PEM or ENGINE)\n"); |
| 473 | BIO_printf (bio_err, "-out file output file\n"); | 417 | BIO_printf(bio_err, "-out file output file\n"); |
| 474 | BIO_printf (bio_err, "-outform arg output format SMIME (default), PEM or DER\n"); | 418 | BIO_printf(bio_err, "-outform arg output format SMIME (default), PEM or DER\n"); |
| 475 | BIO_printf (bio_err, "-content file supply or override content for detached signature\n"); | 419 | BIO_printf(bio_err, "-content file supply or override content for detached signature\n"); |
| 476 | BIO_printf (bio_err, "-to addr to address\n"); | 420 | BIO_printf(bio_err, "-to addr to address\n"); |
| 477 | BIO_printf (bio_err, "-from ad from address\n"); | 421 | BIO_printf(bio_err, "-from ad from address\n"); |
| 478 | BIO_printf (bio_err, "-subject s subject\n"); | 422 | BIO_printf(bio_err, "-subject s subject\n"); |
| 479 | BIO_printf (bio_err, "-text include or delete text MIME headers\n"); | 423 | BIO_printf(bio_err, "-text include or delete text MIME headers\n"); |
| 480 | BIO_printf (bio_err, "-CApath dir trusted certificates directory\n"); | 424 | BIO_printf(bio_err, "-CApath dir trusted certificates directory\n"); |
| 481 | BIO_printf (bio_err, "-CAfile file trusted certificates file\n"); | 425 | BIO_printf(bio_err, "-CAfile file trusted certificates file\n"); |
| 482 | BIO_printf (bio_err, "-crl_check check revocation status of signer's certificate using CRLs\n"); | 426 | BIO_printf(bio_err, "-crl_check check revocation status of signer's certificate using CRLs\n"); |
| 483 | BIO_printf (bio_err, "-crl_check_all check revocation status of signer's certificate chain using CRLs\n"); | 427 | BIO_printf(bio_err, "-crl_check_all check revocation status of signer's certificate chain using CRLs\n"); |
| 484 | #ifndef OPENSSL_NO_ENGINE | 428 | #ifndef OPENSSL_NO_ENGINE |
| 485 | BIO_printf (bio_err, "-engine e use engine e, possibly a hardware device.\n"); | 429 | BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n"); |
| 486 | #endif | 430 | #endif |
| 487 | BIO_printf (bio_err, "-passin arg input file pass phrase source\n"); | 431 | BIO_printf(bio_err, "-passin arg input file pass phrase source\n"); |
| 488 | BIO_printf(bio_err, "-rand file%cfile%c...\n", ':', ':'); | 432 | BIO_printf(bio_err, "-rand file%cfile%c...\n", ':', ':'); |
| 489 | BIO_printf(bio_err, " load the file (or the files in the directory) into\n"); | 433 | BIO_printf(bio_err, " load the file (or the files in the directory) into\n"); |
| 490 | BIO_printf(bio_err, " the random number generator\n"); | 434 | BIO_printf(bio_err, " the random number generator\n"); |
| 491 | BIO_printf (bio_err, "cert.pem recipient certificate(s) for encryption\n"); | 435 | BIO_printf(bio_err, "cert.pem recipient certificate(s) for encryption\n"); |
| 492 | goto end; | 436 | goto end; |
| 493 | } | 437 | } |
| 494 | |||
| 495 | #ifndef OPENSSL_NO_ENGINE | 438 | #ifndef OPENSSL_NO_ENGINE |
| 496 | e = setup_engine(bio_err, engine, 0); | 439 | e = setup_engine(bio_err, engine, 0); |
| 497 | #endif | 440 | #endif |
| 498 | 441 | ||
| 499 | if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) | 442 | if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) { |
| 500 | { | ||
| 501 | BIO_printf(bio_err, "Error getting password\n"); | 443 | BIO_printf(bio_err, "Error getting password\n"); |
| 502 | goto end; | 444 | goto end; |
| 503 | } | 445 | } |
| 504 | 446 | if (need_rand) { | |
| 505 | if (need_rand) | ||
| 506 | { | ||
| 507 | app_RAND_load_file(NULL, bio_err, (inrand != NULL)); | 447 | app_RAND_load_file(NULL, bio_err, (inrand != NULL)); |
| 508 | if (inrand != NULL) | 448 | if (inrand != NULL) |
| 509 | BIO_printf(bio_err,"%ld semi-random bytes loaded\n", | 449 | BIO_printf(bio_err, "%ld semi-random bytes loaded\n", |
| 510 | app_RAND_load_files(inrand)); | 450 | app_RAND_load_files(inrand)); |
| 511 | } | 451 | } |
| 512 | |||
| 513 | ret = 2; | 452 | ret = 2; |
| 514 | 453 | ||
| 515 | if (!(operation & SMIME_SIGNERS)) | 454 | if (!(operation & SMIME_SIGNERS)) |
| 516 | flags &= ~PKCS7_DETACHED; | 455 | flags &= ~PKCS7_DETACHED; |
| 517 | 456 | ||
| 518 | if (operation & SMIME_OP) | 457 | if (operation & SMIME_OP) { |
| 519 | { | ||
| 520 | if (outformat == FORMAT_ASN1) | 458 | if (outformat == FORMAT_ASN1) |
| 521 | outmode = "wb"; | 459 | outmode = "wb"; |
| 522 | } | 460 | } else { |
| 523 | else | ||
| 524 | { | ||
| 525 | if (flags & PKCS7_BINARY) | 461 | if (flags & PKCS7_BINARY) |
| 526 | outmode = "wb"; | 462 | outmode = "wb"; |
| 527 | } | 463 | } |
| 528 | 464 | ||
| 529 | if (operation & SMIME_IP) | 465 | if (operation & SMIME_IP) { |
| 530 | { | ||
| 531 | if (informat == FORMAT_ASN1) | 466 | if (informat == FORMAT_ASN1) |
| 532 | inmode = "rb"; | 467 | inmode = "rb"; |
| 533 | } | 468 | } else { |
| 534 | else | ||
| 535 | { | ||
| 536 | if (flags & PKCS7_BINARY) | 469 | if (flags & PKCS7_BINARY) |
| 537 | inmode = "rb"; | 470 | inmode = "rb"; |
| 538 | } | 471 | } |
| 539 | 472 | ||
| 540 | if (operation == SMIME_ENCRYPT) | 473 | if (operation == SMIME_ENCRYPT) { |
| 541 | { | 474 | if (!cipher) { |
| 542 | if (!cipher) | 475 | #ifndef OPENSSL_NO_RC2 |
| 543 | { | ||
| 544 | #ifndef OPENSSL_NO_RC2 | ||
| 545 | cipher = EVP_rc2_40_cbc(); | 476 | cipher = EVP_rc2_40_cbc(); |
| 546 | #else | 477 | #else |
| 547 | BIO_printf(bio_err, "No cipher selected\n"); | 478 | BIO_printf(bio_err, "No cipher selected\n"); |
| 548 | goto end; | 479 | goto end; |
| 549 | #endif | 480 | #endif |
| 550 | } | 481 | } |
| 551 | encerts = sk_X509_new_null(); | 482 | encerts = sk_X509_new_null(); |
| 552 | while (*args) | 483 | while (*args) { |
| 553 | { | 484 | if (!(cert = load_cert(bio_err, *args, FORMAT_PEM, |
| 554 | if (!(cert = load_cert(bio_err,*args,FORMAT_PEM, | 485 | NULL, e, "recipient certificate file"))) { |
| 555 | NULL, e, "recipient certificate file"))) | ||
| 556 | { | ||
| 557 | #if 0 /* An appropriate message is already printed */ | 486 | #if 0 /* An appropriate message is already printed */ |
| 558 | BIO_printf(bio_err, "Can't read recipient certificate file %s\n", *args); | 487 | BIO_printf(bio_err, "Can't read recipient certificate file %s\n", *args); |
| 559 | #endif | 488 | #endif |
| 560 | goto end; | 489 | goto end; |
| 561 | } | 490 | } |
| 562 | sk_X509_push(encerts, cert); | 491 | sk_X509_push(encerts, cert); |
| 563 | cert = NULL; | 492 | cert = NULL; |
| 564 | args++; | 493 | args++; |
| 565 | } | ||
| 566 | } | 494 | } |
| 567 | 495 | } | |
| 568 | if (certfile) | 496 | if (certfile) { |
| 569 | { | 497 | if (!(other = load_certs(bio_err, certfile, FORMAT_PEM, NULL, |
| 570 | if (!(other = load_certs(bio_err,certfile,FORMAT_PEM, NULL, | 498 | e, "certificate file"))) { |
| 571 | e, "certificate file"))) | ||
| 572 | { | ||
| 573 | ERR_print_errors(bio_err); | 499 | ERR_print_errors(bio_err); |
| 574 | goto end; | 500 | goto end; |
| 575 | } | ||
| 576 | } | 501 | } |
| 577 | 502 | } | |
| 578 | if (recipfile && (operation == SMIME_DECRYPT)) | 503 | if (recipfile && (operation == SMIME_DECRYPT)) { |
| 579 | { | 504 | if (!(recip = load_cert(bio_err, recipfile, FORMAT_PEM, NULL, |
| 580 | if (!(recip = load_cert(bio_err,recipfile,FORMAT_PEM,NULL, | 505 | e, "recipient certificate file"))) { |
| 581 | e, "recipient certificate file"))) | ||
| 582 | { | ||
| 583 | ERR_print_errors(bio_err); | 506 | ERR_print_errors(bio_err); |
| 584 | goto end; | 507 | goto end; |
| 585 | } | ||
| 586 | } | 508 | } |
| 587 | 509 | } | |
| 588 | if (operation == SMIME_DECRYPT) | 510 | if (operation == SMIME_DECRYPT) { |
| 589 | { | ||
| 590 | if (!keyfile) | 511 | if (!keyfile) |
| 591 | keyfile = recipfile; | 512 | keyfile = recipfile; |
| 592 | } | 513 | } else if (operation == SMIME_SIGN) { |
| 593 | else if (operation == SMIME_SIGN) | ||
| 594 | { | ||
| 595 | if (!keyfile) | 514 | if (!keyfile) |
| 596 | keyfile = signerfile; | 515 | keyfile = signerfile; |
| 597 | } | 516 | } else |
| 598 | else keyfile = NULL; | 517 | keyfile = NULL; |
| 599 | 518 | ||
| 600 | if (keyfile) | 519 | if (keyfile) { |
| 601 | { | ||
| 602 | key = load_key(bio_err, keyfile, keyform, 0, passin, e, | 520 | key = load_key(bio_err, keyfile, keyform, 0, passin, e, |
| 603 | "signing key file"); | 521 | "signing key file"); |
| 604 | if (!key) | 522 | if (!key) |
| 605 | goto end; | 523 | goto end; |
| 606 | } | 524 | } |
| 607 | 525 | if (infile) { | |
| 608 | if (infile) | 526 | if (!(in = BIO_new_file(infile, inmode))) { |
| 609 | { | 527 | BIO_printf(bio_err, |
| 610 | if (!(in = BIO_new_file(infile, inmode))) | 528 | "Can't open input file %s\n", infile); |
| 611 | { | ||
| 612 | BIO_printf (bio_err, | ||
| 613 | "Can't open input file %s\n", infile); | ||
| 614 | goto end; | 529 | goto end; |
| 615 | } | ||
| 616 | } | 530 | } |
| 617 | else | 531 | } else |
| 618 | in = BIO_new_fp(stdin, BIO_NOCLOSE); | 532 | in = BIO_new_fp(stdin, BIO_NOCLOSE); |
| 619 | 533 | ||
| 620 | if (operation & SMIME_IP) | 534 | if (operation & SMIME_IP) { |
| 621 | { | 535 | if (informat == FORMAT_SMIME) |
| 622 | if (informat == FORMAT_SMIME) | ||
| 623 | p7 = SMIME_read_PKCS7(in, &indata); | 536 | p7 = SMIME_read_PKCS7(in, &indata); |
| 624 | else if (informat == FORMAT_PEM) | 537 | else if (informat == FORMAT_PEM) |
| 625 | p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL); | 538 | p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL); |
| 626 | else if (informat == FORMAT_ASN1) | 539 | else if (informat == FORMAT_ASN1) |
| 627 | p7 = d2i_PKCS7_bio(in, NULL); | 540 | p7 = d2i_PKCS7_bio(in, NULL); |
| 628 | else | 541 | else { |
| 629 | { | ||
| 630 | BIO_printf(bio_err, "Bad input format for PKCS#7 file\n"); | 542 | BIO_printf(bio_err, "Bad input format for PKCS#7 file\n"); |
| 631 | goto end; | 543 | goto end; |
| 632 | } | 544 | } |
| 633 | 545 | ||
| 634 | if (!p7) | 546 | if (!p7) { |
| 635 | { | ||
| 636 | BIO_printf(bio_err, "Error reading S/MIME message\n"); | 547 | BIO_printf(bio_err, "Error reading S/MIME message\n"); |
| 637 | goto end; | 548 | goto end; |
| 638 | } | 549 | } |
| 639 | if (contfile) | 550 | if (contfile) { |
| 640 | { | ||
| 641 | BIO_free(indata); | 551 | BIO_free(indata); |
| 642 | if (!(indata = BIO_new_file(contfile, "rb"))) | 552 | if (!(indata = BIO_new_file(contfile, "rb"))) { |
| 643 | { | ||
| 644 | BIO_printf(bio_err, "Can't read content file %s\n", contfile); | 553 | BIO_printf(bio_err, "Can't read content file %s\n", contfile); |
| 645 | goto end; | 554 | goto end; |
| 646 | } | ||
| 647 | } | 555 | } |
| 648 | } | 556 | } |
| 649 | 557 | } | |
| 650 | if (outfile) | 558 | if (outfile) { |
| 651 | { | 559 | if (!(out = BIO_new_file(outfile, outmode))) { |
| 652 | if (!(out = BIO_new_file(outfile, outmode))) | 560 | BIO_printf(bio_err, |
| 653 | { | 561 | "Can't open output file %s\n", outfile); |
| 654 | BIO_printf (bio_err, | ||
| 655 | "Can't open output file %s\n", outfile); | ||
| 656 | goto end; | 562 | goto end; |
| 657 | } | ||
| 658 | } | 563 | } |
| 659 | else | 564 | } else { |
| 660 | { | ||
| 661 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | 565 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 662 | } | 566 | } |
| 663 | 567 | ||
| 664 | if (operation == SMIME_VERIFY) | 568 | if (operation == SMIME_VERIFY) { |
| 665 | { | ||
| 666 | if (!(store = setup_verify(bio_err, CAfile, CApath))) | 569 | if (!(store = setup_verify(bio_err, CAfile, CApath))) |
| 667 | goto end; | 570 | goto end; |
| 668 | X509_STORE_set_verify_cb(store, smime_cb); | 571 | X509_STORE_set_verify_cb(store, smime_cb); |
| 669 | if (vpm) | 572 | if (vpm) |
| 670 | X509_STORE_set1_param(store, vpm); | 573 | X509_STORE_set1_param(store, vpm); |
| 671 | } | 574 | } |
| 672 | |||
| 673 | |||
| 674 | ret = 3; | 575 | ret = 3; |
| 675 | 576 | ||
| 676 | if (operation == SMIME_ENCRYPT) | 577 | if (operation == SMIME_ENCRYPT) { |
| 677 | { | ||
| 678 | if (indef) | 578 | if (indef) |
| 679 | flags |= PKCS7_STREAM; | 579 | flags |= PKCS7_STREAM; |
| 680 | p7 = PKCS7_encrypt(encerts, in, cipher, flags); | 580 | p7 = PKCS7_encrypt(encerts, in, cipher, flags); |
| 681 | } | 581 | } else if (operation & SMIME_SIGNERS) { |
| 682 | else if (operation & SMIME_SIGNERS) | ||
| 683 | { | ||
| 684 | int i; | 582 | int i; |
| 685 | /* If detached data content we only enable streaming if | 583 | /* |
| 584 | * If detached data content we only enable streaming if | ||
| 686 | * S/MIME output format. | 585 | * S/MIME output format. |
| 687 | */ | 586 | */ |
| 688 | if (operation == SMIME_SIGN) | 587 | if (operation == SMIME_SIGN) { |
| 689 | { | 588 | if (flags & PKCS7_DETACHED) { |
| 690 | if (flags & PKCS7_DETACHED) | ||
| 691 | { | ||
| 692 | if (outformat == FORMAT_SMIME) | 589 | if (outformat == FORMAT_SMIME) |
| 693 | flags |= PKCS7_STREAM; | 590 | flags |= PKCS7_STREAM; |
| 694 | } | 591 | } else if (indef) |
| 695 | else if (indef) | ||
| 696 | flags |= PKCS7_STREAM; | 592 | flags |= PKCS7_STREAM; |
| 697 | flags |= PKCS7_PARTIAL; | 593 | flags |= PKCS7_PARTIAL; |
| 698 | p7 = PKCS7_sign(NULL, NULL, other, in, flags); | 594 | p7 = PKCS7_sign(NULL, NULL, other, in, flags); |
| 699 | if (!p7) | 595 | if (!p7) |
| 700 | goto end; | 596 | goto end; |
| 701 | } | 597 | } else |
| 702 | else | ||
| 703 | flags |= PKCS7_REUSE_DIGEST; | 598 | flags |= PKCS7_REUSE_DIGEST; |
| 704 | for (i = 0; i < sk_OPENSSL_STRING_num(sksigners); i++) | 599 | for (i = 0; i < sk_OPENSSL_STRING_num(sksigners); i++) { |
| 705 | { | ||
| 706 | signerfile = sk_OPENSSL_STRING_value(sksigners, i); | 600 | signerfile = sk_OPENSSL_STRING_value(sksigners, i); |
| 707 | keyfile = sk_OPENSSL_STRING_value(skkeys, i); | 601 | keyfile = sk_OPENSSL_STRING_value(skkeys, i); |
| 708 | signer = load_cert(bio_err, signerfile,FORMAT_PEM, NULL, | 602 | signer = load_cert(bio_err, signerfile, FORMAT_PEM, NULL, |
| 709 | e, "signer certificate"); | 603 | e, "signer certificate"); |
| 710 | if (!signer) | 604 | if (!signer) |
| 711 | goto end; | 605 | goto end; |
| 712 | key = load_key(bio_err, keyfile, keyform, 0, passin, e, | 606 | key = load_key(bio_err, keyfile, keyform, 0, passin, e, |
| 713 | "signing key file"); | 607 | "signing key file"); |
| 714 | if (!key) | 608 | if (!key) |
| 715 | goto end; | 609 | goto end; |
| 716 | if (!PKCS7_sign_add_signer(p7, signer, key, | 610 | if (!PKCS7_sign_add_signer(p7, signer, key, |
| 717 | sign_md, flags)) | 611 | sign_md, flags)) |
| 718 | goto end; | 612 | goto end; |
| 719 | X509_free(signer); | 613 | X509_free(signer); |
| 720 | signer = NULL; | 614 | signer = NULL; |
| 721 | EVP_PKEY_free(key); | 615 | EVP_PKEY_free(key); |
| 722 | key = NULL; | 616 | key = NULL; |
| 723 | } | 617 | } |
| 724 | /* If not streaming or resigning finalize structure */ | 618 | /* If not streaming or resigning finalize structure */ |
| 725 | if ((operation == SMIME_SIGN) && !(flags & PKCS7_STREAM)) | 619 | if ((operation == SMIME_SIGN) && !(flags & PKCS7_STREAM)) { |
| 726 | { | ||
| 727 | if (!PKCS7_final(p7, in, flags)) | 620 | if (!PKCS7_final(p7, in, flags)) |
| 728 | goto end; | 621 | goto end; |
| 729 | } | ||
| 730 | } | 622 | } |
| 731 | 623 | } | |
| 732 | if (!p7) | 624 | if (!p7) { |
| 733 | { | ||
| 734 | BIO_printf(bio_err, "Error creating PKCS#7 structure\n"); | 625 | BIO_printf(bio_err, "Error creating PKCS#7 structure\n"); |
| 735 | goto end; | 626 | goto end; |
| 736 | } | 627 | } |
| 737 | |||
| 738 | ret = 4; | 628 | ret = 4; |
| 739 | if (operation == SMIME_DECRYPT) | 629 | if (operation == SMIME_DECRYPT) { |
| 740 | { | 630 | if (!PKCS7_decrypt(p7, key, recip, out, flags)) { |
| 741 | if (!PKCS7_decrypt(p7, key, recip, out, flags)) | ||
| 742 | { | ||
| 743 | BIO_printf(bio_err, "Error decrypting PKCS#7 structure\n"); | 631 | BIO_printf(bio_err, "Error decrypting PKCS#7 structure\n"); |
| 744 | goto end; | 632 | goto end; |
| 745 | } | ||
| 746 | } | 633 | } |
| 747 | else if (operation == SMIME_VERIFY) | 634 | } else if (operation == SMIME_VERIFY) { |
| 748 | { | 635 | STACK_OF(X509) * signers; |
| 749 | STACK_OF(X509) *signers; | ||
| 750 | if (PKCS7_verify(p7, other, store, indata, out, flags)) | 636 | if (PKCS7_verify(p7, other, store, indata, out, flags)) |
| 751 | BIO_printf(bio_err, "Verification successful\n"); | 637 | BIO_printf(bio_err, "Verification successful\n"); |
| 752 | else | 638 | else { |
| 753 | { | ||
| 754 | BIO_printf(bio_err, "Verification failure\n"); | 639 | BIO_printf(bio_err, "Verification failure\n"); |
| 755 | goto end; | 640 | goto end; |
| 756 | } | 641 | } |
| 757 | signers = PKCS7_get0_signers(p7, other, flags); | 642 | signers = PKCS7_get0_signers(p7, other, flags); |
| 758 | if (!save_certs(signerfile, signers)) | 643 | if (!save_certs(signerfile, signers)) { |
| 759 | { | ||
| 760 | BIO_printf(bio_err, "Error writing signers to %s\n", | 644 | BIO_printf(bio_err, "Error writing signers to %s\n", |
| 761 | signerfile); | 645 | signerfile); |
| 762 | ret = 5; | 646 | ret = 5; |
| 763 | goto end; | 647 | goto end; |
| 764 | } | ||
| 765 | sk_X509_free(signers); | ||
| 766 | } | 648 | } |
| 767 | else if (operation == SMIME_PK7OUT) | 649 | sk_X509_free(signers); |
| 650 | } else if (operation == SMIME_PK7OUT) | ||
| 768 | PEM_write_bio_PKCS7(out, p7); | 651 | PEM_write_bio_PKCS7(out, p7); |
| 769 | else | 652 | else { |
| 770 | { | ||
| 771 | if (to) | 653 | if (to) |
| 772 | BIO_printf(out, "To: %s\n", to); | 654 | BIO_printf(out, "To: %s\n", to); |
| 773 | if (from) | 655 | if (from) |
| 774 | BIO_printf(out, "From: %s\n", from); | 656 | BIO_printf(out, "From: %s\n", from); |
| 775 | if (subject) | 657 | if (subject) |
| 776 | BIO_printf(out, "Subject: %s\n", subject); | 658 | BIO_printf(out, "Subject: %s\n", subject); |
| 777 | if (outformat == FORMAT_SMIME) | 659 | if (outformat == FORMAT_SMIME) { |
| 778 | { | ||
| 779 | if (operation == SMIME_RESIGN) | 660 | if (operation == SMIME_RESIGN) |
| 780 | SMIME_write_PKCS7(out, p7, indata, flags); | 661 | SMIME_write_PKCS7(out, p7, indata, flags); |
| 781 | else | 662 | else |
| 782 | SMIME_write_PKCS7(out, p7, in, flags); | 663 | SMIME_write_PKCS7(out, p7, in, flags); |
| 783 | } | 664 | } else if (outformat == FORMAT_PEM) |
| 784 | else if (outformat == FORMAT_PEM) | ||
| 785 | PEM_write_bio_PKCS7_stream(out, p7, in, flags); | 665 | PEM_write_bio_PKCS7_stream(out, p7, in, flags); |
| 786 | else if (outformat == FORMAT_ASN1) | 666 | else if (outformat == FORMAT_ASN1) |
| 787 | i2d_PKCS7_bio_stream(out,p7, in, flags); | 667 | i2d_PKCS7_bio_stream(out, p7, in, flags); |
| 788 | else | 668 | else { |
| 789 | { | ||
| 790 | BIO_printf(bio_err, "Bad output format for PKCS#7 file\n"); | 669 | BIO_printf(bio_err, "Bad output format for PKCS#7 file\n"); |
| 791 | goto end; | 670 | goto end; |
| 792 | } | ||
| 793 | } | 671 | } |
| 672 | } | ||
| 794 | ret = 0; | 673 | ret = 0; |
| 795 | end: | 674 | end: |
| 796 | if (need_rand) | 675 | if (need_rand) |
| 797 | app_RAND_write_file(NULL, bio_err); | 676 | app_RAND_write_file(NULL, bio_err); |
| 798 | if (ret) ERR_print_errors(bio_err); | 677 | if (ret) |
| 678 | ERR_print_errors(bio_err); | ||
| 799 | sk_X509_pop_free(encerts, X509_free); | 679 | sk_X509_pop_free(encerts, X509_free); |
| 800 | sk_X509_pop_free(other, X509_free); | 680 | sk_X509_pop_free(other, X509_free); |
| 801 | if (vpm) | 681 | if (vpm) |
| @@ -813,39 +693,43 @@ end: | |||
| 813 | BIO_free(in); | 693 | BIO_free(in); |
| 814 | BIO_free(indata); | 694 | BIO_free(indata); |
| 815 | BIO_free_all(out); | 695 | BIO_free_all(out); |
| 816 | if (passin) free(passin); | 696 | if (passin) |
| 697 | free(passin); | ||
| 817 | return (ret); | 698 | return (ret); |
| 818 | } | 699 | } |
| 819 | 700 | ||
| 820 | static int save_certs(char *signerfile, STACK_OF(X509) *signers) | 701 | static int |
| 821 | { | 702 | save_certs(char *signerfile, STACK_OF(X509) * signers) |
| 703 | { | ||
| 822 | int i; | 704 | int i; |
| 823 | BIO *tmp; | 705 | BIO *tmp; |
| 824 | if (!signerfile) | 706 | if (!signerfile) |
| 825 | return 1; | 707 | return 1; |
| 826 | tmp = BIO_new_file(signerfile, "w"); | 708 | tmp = BIO_new_file(signerfile, "w"); |
| 827 | if (!tmp) return 0; | 709 | if (!tmp) |
| 828 | for(i = 0; i < sk_X509_num(signers); i++) | 710 | return 0; |
| 711 | for (i = 0; i < sk_X509_num(signers); i++) | ||
| 829 | PEM_write_bio_X509(tmp, sk_X509_value(signers, i)); | 712 | PEM_write_bio_X509(tmp, sk_X509_value(signers, i)); |
| 830 | BIO_free(tmp); | 713 | BIO_free(tmp); |
| 831 | return 1; | 714 | return 1; |
| 832 | } | 715 | } |
| 833 | 716 | ||
| 834 | 717 | ||
| 835 | /* Minimal callback just to output policy info (if any) */ | 718 | /* Minimal callback just to output policy info (if any) */ |
| 836 | 719 | ||
| 837 | static int smime_cb(int ok, X509_STORE_CTX *ctx) | 720 | static int |
| 838 | { | 721 | smime_cb(int ok, X509_STORE_CTX * ctx) |
| 722 | { | ||
| 839 | int error; | 723 | int error; |
| 840 | 724 | ||
| 841 | error = X509_STORE_CTX_get_error(ctx); | 725 | error = X509_STORE_CTX_get_error(ctx); |
| 842 | 726 | ||
| 843 | if ((error != X509_V_ERR_NO_EXPLICIT_POLICY) | 727 | if ((error != X509_V_ERR_NO_EXPLICIT_POLICY) |
| 844 | && ((error != X509_V_OK) || (ok != 2))) | 728 | && ((error != X509_V_OK) || (ok != 2))) |
| 845 | return ok; | 729 | return ok; |
| 846 | 730 | ||
| 847 | policies_print(NULL, ctx); | 731 | policies_print(NULL, ctx); |
| 848 | 732 | ||
| 849 | return ok; | 733 | return ok; |
| 850 | 734 | ||
| 851 | } | 735 | } |
diff --git a/src/lib/libssl/src/apps/speed.c b/src/lib/libssl/src/apps/speed.c index 0806327c38..6b8610aa70 100644 --- a/src/lib/libssl/src/apps/speed.c +++ b/src/lib/libssl/src/apps/speed.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written |
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). |
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. |
| 8 | * | 8 | * |
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as |
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions |
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, |
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation |
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms |
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). |
| 15 | * | 15 | * |
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in |
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. |
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution |
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. |
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or |
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. |
| 22 | * | 22 | * |
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without |
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions |
| 25 | * are met: | 25 | * are met: |
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" |
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library |
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). |
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from |
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: |
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" |
| 40 | * | 40 | * |
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. |
| 52 | * | 52 | * |
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or |
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be |
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence |
| @@ -58,13 +58,13 @@ | |||
| 58 | /* ==================================================================== | 58 | /* ==================================================================== |
| 59 | * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. | 59 | * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. |
| 60 | * | 60 | * |
| 61 | * Portions of the attached software ("Contribution") are developed by | 61 | * Portions of the attached software ("Contribution") are developed by |
| 62 | * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. | 62 | * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. |
| 63 | * | 63 | * |
| 64 | * The Contribution is licensed pursuant to the OpenSSL open source | 64 | * The Contribution is licensed pursuant to the OpenSSL open source |
| 65 | * license provided above. | 65 | * license provided above. |
| 66 | * | 66 | * |
| 67 | * The ECDH and ECDSA speed test software is originally written by | 67 | * The ECDH and ECDSA speed test software is originally written by |
| 68 | * Sumit Gupta of Sun Microsystems Laboratories. | 68 | * Sumit Gupta of Sun Microsystems Laboratories. |
| 69 | * | 69 | * |
| 70 | */ | 70 | */ |
| @@ -74,7 +74,7 @@ | |||
| 74 | #ifndef OPENSSL_NO_SPEED | 74 | #ifndef OPENSSL_NO_SPEED |
| 75 | 75 | ||
| 76 | #undef SECONDS | 76 | #undef SECONDS |
| 77 | #define SECONDS 3 | 77 | #define SECONDS 3 |
| 78 | #define RSA_SECONDS 10 | 78 | #define RSA_SECONDS 10 |
| 79 | #define DSA_SECONDS 10 | 79 | #define DSA_SECONDS 10 |
| 80 | #define ECDSA_SECONDS 10 | 80 | #define ECDSA_SECONDS 10 |
| @@ -106,12 +106,14 @@ | |||
| 106 | 106 | ||
| 107 | #if defined(_WIN32) || defined(__CYGWIN__) | 107 | #if defined(_WIN32) || defined(__CYGWIN__) |
| 108 | #include <windows.h> | 108 | #include <windows.h> |
| 109 | # if defined(__CYGWIN__) && !defined(_WIN32) | 109 | #if defined(__CYGWIN__) && !defined(_WIN32) |
| 110 | /* <windows.h> should define _WIN32, which normally is mutually | 110 | /* |
| 111 | * exclusive with __CYGWIN__, but if it didn't... */ | 111 | * <windows.h> should define _WIN32, which normally is mutually exclusive |
| 112 | # define _WIN32 | 112 | * with __CYGWIN__, but if it didn't... |
| 113 | /* this is done because Cygwin alarm() fails sometimes. */ | 113 | */ |
| 114 | # endif | 114 | #define _WIN32 |
| 115 | /* this is done because Cygwin alarm() fails sometimes. */ | ||
| 116 | #endif | ||
| 115 | #endif | 117 | #endif |
| 116 | 118 | ||
| 117 | #include <openssl/bn.h> | 119 | #include <openssl/bn.h> |
| @@ -189,7 +191,7 @@ | |||
| 189 | 191 | ||
| 190 | 192 | ||
| 191 | #ifndef HAVE_FORK | 193 | #ifndef HAVE_FORK |
| 192 | # define HAVE_FORK 1 | 194 | #define HAVE_FORK 1 |
| 193 | #endif | 195 | #endif |
| 194 | 196 | ||
| 195 | #if HAVE_FORK | 197 | #if HAVE_FORK |
| @@ -200,16 +202,17 @@ | |||
| 200 | 202 | ||
| 201 | #undef BUFSIZE | 203 | #undef BUFSIZE |
| 202 | #define BUFSIZE ((long)1024*8+1) | 204 | #define BUFSIZE ((long)1024*8+1) |
| 203 | int run=0; | 205 | int run = 0; |
| 204 | 206 | ||
| 205 | static int mr=0; | 207 | static int mr = 0; |
| 206 | static int usertime=1; | 208 | static int usertime = 1; |
| 207 | 209 | ||
| 208 | static double Time_F(int s); | 210 | static double Time_F(int s); |
| 209 | static void print_message(const char *s,long num,int length); | 211 | static void print_message(const char *s, long num, int length); |
| 210 | static void pkey_print_message(const char *str, const char *str2, | 212 | static void |
| 211 | long num, int bits, int sec); | 213 | pkey_print_message(const char *str, const char *str2, |
| 212 | static void print_result(int alg,int run_no,int count,double time_used); | 214 | long num, int bits, int sec); |
| 215 | static void print_result(int alg, int run_no, int count, double time_used); | ||
| 213 | #ifndef NO_FORK | 216 | #ifndef NO_FORK |
| 214 | static int do_multi(int multi); | 217 | static int do_multi(int multi); |
| 215 | #endif | 218 | #endif |
| @@ -222,16 +225,16 @@ static int do_multi(int multi); | |||
| 222 | #define EC_NUM 16 | 225 | #define EC_NUM 16 |
| 223 | #define MAX_ECDH_SIZE 256 | 226 | #define MAX_ECDH_SIZE 256 |
| 224 | 227 | ||
| 225 | static const char *names[ALGOR_NUM]={ | 228 | static const char *names[ALGOR_NUM] = { |
| 226 | "md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4", | 229 | "md2", "mdc2", "md4", "md5", "hmac(md5)", "sha1", "rmd160", "rc4", |
| 227 | "des cbc","des ede3","idea cbc","seed cbc", | 230 | "des cbc", "des ede3", "idea cbc", "seed cbc", |
| 228 | "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc", | 231 | "rc2 cbc", "rc5-32/12 cbc", "blowfish cbc", "cast cbc", |
| 229 | "aes-128 cbc","aes-192 cbc","aes-256 cbc", | 232 | "aes-128 cbc", "aes-192 cbc", "aes-256 cbc", |
| 230 | "camellia-128 cbc","camellia-192 cbc","camellia-256 cbc", | 233 | "camellia-128 cbc", "camellia-192 cbc", "camellia-256 cbc", |
| 231 | "evp","sha256","sha512","whirlpool", | 234 | "evp", "sha256", "sha512", "whirlpool", |
| 232 | "aes-128 ige","aes-192 ige","aes-256 ige","ghash" }; | 235 | "aes-128 ige", "aes-192 ige", "aes-256 ige", "ghash"}; |
| 233 | static double results[ALGOR_NUM][SIZE_NUM]; | 236 | static double results[ALGOR_NUM][SIZE_NUM]; |
| 234 | static int lengths[SIZE_NUM]={16,64,256,1024,8*1024}; | 237 | static int lengths[SIZE_NUM] = {16, 64, 256, 1024, 8 * 1024}; |
| 235 | #ifndef OPENSSL_NO_RSA | 238 | #ifndef OPENSSL_NO_RSA |
| 236 | static double rsa_results[RSA_NUM][2]; | 239 | static double rsa_results[RSA_NUM][2]; |
| 237 | #endif | 240 | #endif |
| @@ -255,33 +258,36 @@ static int rnd_fake = 0; | |||
| 255 | #define SIGRETTYPE void | 258 | #define SIGRETTYPE void |
| 256 | #else | 259 | #else |
| 257 | #define SIGRETTYPE int | 260 | #define SIGRETTYPE int |
| 258 | #endif | 261 | #endif |
| 259 | 262 | ||
| 260 | static SIGRETTYPE sig_done(int sig); | 263 | static SIGRETTYPE sig_done(int sig); |
| 261 | static SIGRETTYPE sig_done(int sig) | 264 | static SIGRETTYPE |
| 262 | { | 265 | sig_done(int sig) |
| 263 | signal(SIGALRM,sig_done); | 266 | { |
| 264 | run=0; | 267 | signal(SIGALRM, sig_done); |
| 268 | run = 0; | ||
| 265 | #ifdef LINT | 269 | #ifdef LINT |
| 266 | sig=sig; | 270 | sig = sig; |
| 267 | #endif | 271 | #endif |
| 268 | } | 272 | } |
| 269 | #endif | 273 | #endif |
| 270 | 274 | ||
| 271 | #define START 0 | 275 | #define START 0 |
| 272 | #define STOP 1 | 276 | #define STOP 1 |
| 273 | 277 | ||
| 274 | 278 | ||
| 275 | static double Time_F(int s) | 279 | static double |
| 276 | { | 280 | Time_F(int s) |
| 277 | return app_tminterval(s,usertime); | 281 | { |
| 278 | } | 282 | return app_tminterval(s, usertime); |
| 283 | } | ||
| 279 | 284 | ||
| 280 | 285 | ||
| 281 | #ifndef OPENSSL_NO_ECDH | 286 | #ifndef OPENSSL_NO_ECDH |
| 282 | static const int KDF1_SHA1_len = 20; | 287 | static const int KDF1_SHA1_len = 20; |
| 283 | static void *KDF1_SHA1(const void *in, size_t inlen, void *out, size_t *outlen) | 288 | static void * |
| 284 | { | 289 | KDF1_SHA1(const void *in, size_t inlen, void *out, size_t * outlen) |
| 290 | { | ||
| 285 | #ifndef OPENSSL_NO_SHA | 291 | #ifndef OPENSSL_NO_SHA |
| 286 | if (*outlen < SHA_DIGEST_LENGTH) | 292 | if (*outlen < SHA_DIGEST_LENGTH) |
| 287 | return NULL; | 293 | return NULL; |
| @@ -290,19 +296,20 @@ static void *KDF1_SHA1(const void *in, size_t inlen, void *out, size_t *outlen) | |||
| 290 | return SHA1(in, inlen, out); | 296 | return SHA1(in, inlen, out); |
| 291 | #else | 297 | #else |
| 292 | return NULL; | 298 | return NULL; |
| 293 | #endif /* OPENSSL_NO_SHA */ | 299 | #endif /* OPENSSL_NO_SHA */ |
| 294 | } | 300 | } |
| 295 | #endif /* OPENSSL_NO_ECDH */ | 301 | #endif /* OPENSSL_NO_ECDH */ |
| 296 | 302 | ||
| 297 | 303 | ||
| 298 | int MAIN(int, char **); | 304 | int MAIN(int, char **); |
| 299 | 305 | ||
| 300 | int MAIN(int argc, char **argv) | 306 | int |
| 301 | { | 307 | MAIN(int argc, char **argv) |
| 302 | unsigned char *buf=NULL,*buf2=NULL; | 308 | { |
| 303 | int mret=1; | 309 | unsigned char *buf = NULL, *buf2 = NULL; |
| 304 | long count=0,save_count=0; | 310 | int mret = 1; |
| 305 | int i,j,k; | 311 | long count = 0, save_count = 0; |
| 312 | int i, j, k; | ||
| 306 | #if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA) | 313 | #if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA) |
| 307 | long rsa_count; | 314 | long rsa_count; |
| 308 | #endif | 315 | #endif |
| @@ -359,30 +366,30 @@ int MAIN(int argc, char **argv) | |||
| 359 | #ifndef OPENSSL_NO_CAST | 366 | #ifndef OPENSSL_NO_CAST |
| 360 | CAST_KEY cast_ks; | 367 | CAST_KEY cast_ks; |
| 361 | #endif | 368 | #endif |
| 362 | static const unsigned char key16[16]= | 369 | static const unsigned char key16[16] = |
| 363 | {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0, | 370 | {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, |
| 364 | 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12}; | 371 | 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12}; |
| 365 | #ifndef OPENSSL_NO_AES | 372 | #ifndef OPENSSL_NO_AES |
| 366 | static const unsigned char key24[24]= | 373 | static const unsigned char key24[24] = |
| 367 | {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0, | 374 | {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, |
| 368 | 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12, | 375 | 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, |
| 369 | 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34}; | 376 | 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34}; |
| 370 | static const unsigned char key32[32]= | 377 | static const unsigned char key32[32] = |
| 371 | {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0, | 378 | {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, |
| 372 | 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12, | 379 | 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, |
| 373 | 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34, | 380 | 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34, |
| 374 | 0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56}; | 381 | 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34, 0x56}; |
| 375 | #endif | 382 | #endif |
| 376 | #ifndef OPENSSL_NO_CAMELLIA | 383 | #ifndef OPENSSL_NO_CAMELLIA |
| 377 | static const unsigned char ckey24[24]= | 384 | static const unsigned char ckey24[24] = |
| 378 | {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0, | 385 | {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, |
| 379 | 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12, | 386 | 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, |
| 380 | 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34}; | 387 | 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34}; |
| 381 | static const unsigned char ckey32[32]= | 388 | static const unsigned char ckey32[32] = |
| 382 | {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0, | 389 | {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, |
| 383 | 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12, | 390 | 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, |
| 384 | 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34, | 391 | 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34, |
| 385 | 0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56}; | 392 | 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34, 0x56}; |
| 386 | #endif | 393 | #endif |
| 387 | #ifndef OPENSSL_NO_AES | 394 | #ifndef OPENSSL_NO_AES |
| 388 | #define MAX_BLOCK_SIZE 128 | 395 | #define MAX_BLOCK_SIZE 128 |
| @@ -390,11 +397,11 @@ int MAIN(int argc, char **argv) | |||
| 390 | #define MAX_BLOCK_SIZE 64 | 397 | #define MAX_BLOCK_SIZE 64 |
| 391 | #endif | 398 | #endif |
| 392 | unsigned char DES_iv[8]; | 399 | unsigned char DES_iv[8]; |
| 393 | unsigned char iv[2*MAX_BLOCK_SIZE/8]; | 400 | unsigned char iv[2 * MAX_BLOCK_SIZE / 8]; |
| 394 | #ifndef OPENSSL_NO_DES | 401 | #ifndef OPENSSL_NO_DES |
| 395 | static DES_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0}; | 402 | static DES_cblock key = {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0}; |
| 396 | static DES_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12}; | 403 | static DES_cblock key2 = {0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12}; |
| 397 | static DES_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34}; | 404 | static DES_cblock key3 = {0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34}; |
| 398 | DES_key_schedule sch; | 405 | DES_key_schedule sch; |
| 399 | DES_key_schedule sch2; | 406 | DES_key_schedule sch2; |
| 400 | DES_key_schedule sch3; | 407 | DES_key_schedule sch3; |
| @@ -424,18 +431,18 @@ int MAIN(int argc, char **argv) | |||
| 424 | #define D_CBC_128_AES 16 | 431 | #define D_CBC_128_AES 16 |
| 425 | #define D_CBC_192_AES 17 | 432 | #define D_CBC_192_AES 17 |
| 426 | #define D_CBC_256_AES 18 | 433 | #define D_CBC_256_AES 18 |
| 427 | #define D_CBC_128_CML 19 | 434 | #define D_CBC_128_CML 19 |
| 428 | #define D_CBC_192_CML 20 | 435 | #define D_CBC_192_CML 20 |
| 429 | #define D_CBC_256_CML 21 | 436 | #define D_CBC_256_CML 21 |
| 430 | #define D_EVP 22 | 437 | #define D_EVP 22 |
| 431 | #define D_SHA256 23 | 438 | #define D_SHA256 23 |
| 432 | #define D_SHA512 24 | 439 | #define D_SHA512 24 |
| 433 | #define D_WHIRLPOOL 25 | 440 | #define D_WHIRLPOOL 25 |
| 434 | #define D_IGE_128_AES 26 | 441 | #define D_IGE_128_AES 26 |
| 435 | #define D_IGE_192_AES 27 | 442 | #define D_IGE_192_AES 27 |
| 436 | #define D_IGE_256_AES 28 | 443 | #define D_IGE_256_AES 28 |
| 437 | #define D_GHASH 29 | 444 | #define D_GHASH 29 |
| 438 | double d=0.0; | 445 | double d = 0.0; |
| 439 | long c[ALGOR_NUM][SIZE_NUM]; | 446 | long c[ALGOR_NUM][SIZE_NUM]; |
| 440 | #define R_DSA_512 0 | 447 | #define R_DSA_512 0 |
| 441 | #define R_DSA_1024 1 | 448 | #define R_DSA_1024 1 |
| @@ -446,7 +453,7 @@ int MAIN(int argc, char **argv) | |||
| 446 | #define R_RSA_4096 3 | 453 | #define R_RSA_4096 3 |
| 447 | 454 | ||
| 448 | #define R_EC_P160 0 | 455 | #define R_EC_P160 0 |
| 449 | #define R_EC_P192 1 | 456 | #define R_EC_P192 1 |
| 450 | #define R_EC_P224 2 | 457 | #define R_EC_P224 2 |
| 451 | #define R_EC_P256 3 | 458 | #define R_EC_P256 3 |
| 452 | #define R_EC_P384 4 | 459 | #define R_EC_P384 4 |
| @@ -465,72 +472,73 @@ int MAIN(int argc, char **argv) | |||
| 465 | #ifndef OPENSSL_NO_RSA | 472 | #ifndef OPENSSL_NO_RSA |
| 466 | RSA *rsa_key[RSA_NUM]; | 473 | RSA *rsa_key[RSA_NUM]; |
| 467 | long rsa_c[RSA_NUM][2]; | 474 | long rsa_c[RSA_NUM][2]; |
| 468 | static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096}; | 475 | static unsigned int rsa_bits[RSA_NUM] = {512, 1024, 2048, 4096}; |
| 469 | static unsigned char *rsa_data[RSA_NUM]= | 476 | static unsigned char *rsa_data[RSA_NUM] = |
| 470 | {test512,test1024,test2048,test4096}; | 477 | {test512, test1024, test2048, test4096}; |
| 471 | static int rsa_data_length[RSA_NUM]={ | 478 | static int rsa_data_length[RSA_NUM] = { |
| 472 | sizeof(test512),sizeof(test1024), | 479 | sizeof(test512), sizeof(test1024), |
| 473 | sizeof(test2048),sizeof(test4096)}; | 480 | sizeof(test2048), sizeof(test4096)}; |
| 474 | #endif | 481 | #endif |
| 475 | #ifndef OPENSSL_NO_DSA | 482 | #ifndef OPENSSL_NO_DSA |
| 476 | DSA *dsa_key[DSA_NUM]; | 483 | DSA *dsa_key[DSA_NUM]; |
| 477 | long dsa_c[DSA_NUM][2]; | 484 | long dsa_c[DSA_NUM][2]; |
| 478 | static unsigned int dsa_bits[DSA_NUM]={512,1024,2048}; | 485 | static unsigned int dsa_bits[DSA_NUM] = {512, 1024, 2048}; |
| 479 | #endif | 486 | #endif |
| 480 | #ifndef OPENSSL_NO_EC | 487 | #ifndef OPENSSL_NO_EC |
| 481 | /* We only test over the following curves as they are representative, | 488 | /* |
| 482 | * To add tests over more curves, simply add the curve NID | 489 | * We only test over the following curves as they are representative, |
| 483 | * and curve name to the following arrays and increase the | 490 | * To add tests over more curves, simply add the curve NID and curve |
| 484 | * EC_NUM value accordingly. | 491 | * name to the following arrays and increase the EC_NUM value |
| 492 | * accordingly. | ||
| 485 | */ | 493 | */ |
| 486 | static unsigned int test_curves[EC_NUM] = | 494 | static unsigned int test_curves[EC_NUM] = |
| 487 | { | 495 | { |
| 488 | /* Prime Curves */ | 496 | /* Prime Curves */ |
| 489 | NID_secp160r1, | 497 | NID_secp160r1, |
| 490 | NID_X9_62_prime192v1, | 498 | NID_X9_62_prime192v1, |
| 491 | NID_secp224r1, | 499 | NID_secp224r1, |
| 492 | NID_X9_62_prime256v1, | 500 | NID_X9_62_prime256v1, |
| 493 | NID_secp384r1, | 501 | NID_secp384r1, |
| 494 | NID_secp521r1, | 502 | NID_secp521r1, |
| 495 | /* Binary Curves */ | 503 | /* Binary Curves */ |
| 496 | NID_sect163k1, | 504 | NID_sect163k1, |
| 497 | NID_sect233k1, | 505 | NID_sect233k1, |
| 498 | NID_sect283k1, | 506 | NID_sect283k1, |
| 499 | NID_sect409k1, | 507 | NID_sect409k1, |
| 500 | NID_sect571k1, | 508 | NID_sect571k1, |
| 501 | NID_sect163r2, | 509 | NID_sect163r2, |
| 502 | NID_sect233r1, | 510 | NID_sect233r1, |
| 503 | NID_sect283r1, | 511 | NID_sect283r1, |
| 504 | NID_sect409r1, | 512 | NID_sect409r1, |
| 505 | NID_sect571r1 | 513 | NID_sect571r1 |
| 506 | }; | 514 | }; |
| 507 | static const char * test_curves_names[EC_NUM] = | 515 | static const char *test_curves_names[EC_NUM] = |
| 508 | { | 516 | { |
| 509 | /* Prime Curves */ | 517 | /* Prime Curves */ |
| 510 | "secp160r1", | 518 | "secp160r1", |
| 511 | "nistp192", | 519 | "nistp192", |
| 512 | "nistp224", | 520 | "nistp224", |
| 513 | "nistp256", | 521 | "nistp256", |
| 514 | "nistp384", | 522 | "nistp384", |
| 515 | "nistp521", | 523 | "nistp521", |
| 516 | /* Binary Curves */ | 524 | /* Binary Curves */ |
| 517 | "nistk163", | 525 | "nistk163", |
| 518 | "nistk233", | 526 | "nistk233", |
| 519 | "nistk283", | 527 | "nistk283", |
| 520 | "nistk409", | 528 | "nistk409", |
| 521 | "nistk571", | 529 | "nistk571", |
| 522 | "nistb163", | 530 | "nistb163", |
| 523 | "nistb233", | 531 | "nistb233", |
| 524 | "nistb283", | 532 | "nistb283", |
| 525 | "nistb409", | 533 | "nistb409", |
| 526 | "nistb571" | 534 | "nistb571" |
| 527 | }; | 535 | }; |
| 528 | static int test_curves_bits[EC_NUM] = | 536 | static int test_curves_bits[EC_NUM] = |
| 529 | { | 537 | { |
| 530 | 160, 192, 224, 256, 384, 521, | 538 | 160, 192, 224, 256, 384, 521, |
| 531 | 163, 233, 283, 409, 571, | 539 | 163, 233, 283, 409, 571, |
| 532 | 163, 233, 283, 409, 571 | 540 | 163, 233, 283, 409, 571 |
| 533 | }; | 541 | }; |
| 534 | 542 | ||
| 535 | #endif | 543 | #endif |
| 536 | 544 | ||
| @@ -556,1947 +564,1831 @@ int MAIN(int argc, char **argv) | |||
| 556 | int ecdsa_doit[EC_NUM]; | 564 | int ecdsa_doit[EC_NUM]; |
| 557 | #endif | 565 | #endif |
| 558 | #ifndef OPENSSL_NO_ECDH | 566 | #ifndef OPENSSL_NO_ECDH |
| 559 | int ecdh_doit[EC_NUM]; | 567 | int ecdh_doit[EC_NUM]; |
| 560 | #endif | 568 | #endif |
| 561 | int doit[ALGOR_NUM]; | 569 | int doit[ALGOR_NUM]; |
| 562 | int pr_header=0; | 570 | int pr_header = 0; |
| 563 | const EVP_CIPHER *evp_cipher=NULL; | 571 | const EVP_CIPHER *evp_cipher = NULL; |
| 564 | const EVP_MD *evp_md=NULL; | 572 | const EVP_MD *evp_md = NULL; |
| 565 | int decrypt=0; | 573 | int decrypt = 0; |
| 566 | #ifndef NO_FORK | 574 | #ifndef NO_FORK |
| 567 | int multi=0; | 575 | int multi = 0; |
| 568 | #endif | 576 | #endif |
| 569 | 577 | ||
| 570 | #ifndef TIMES | 578 | #ifndef TIMES |
| 571 | usertime=-1; | 579 | usertime = -1; |
| 572 | #endif | 580 | #endif |
| 573 | 581 | ||
| 574 | apps_startup(); | 582 | apps_startup(); |
| 575 | memset(results, 0, sizeof(results)); | 583 | memset(results, 0, sizeof(results)); |
| 576 | #ifndef OPENSSL_NO_DSA | 584 | #ifndef OPENSSL_NO_DSA |
| 577 | memset(dsa_key,0,sizeof(dsa_key)); | 585 | memset(dsa_key, 0, sizeof(dsa_key)); |
| 578 | #endif | 586 | #endif |
| 579 | #ifndef OPENSSL_NO_ECDSA | 587 | #ifndef OPENSSL_NO_ECDSA |
| 580 | for (i=0; i<EC_NUM; i++) ecdsa[i] = NULL; | 588 | for (i = 0; i < EC_NUM; i++) |
| 589 | ecdsa[i] = NULL; | ||
| 581 | #endif | 590 | #endif |
| 582 | #ifndef OPENSSL_NO_ECDH | 591 | #ifndef OPENSSL_NO_ECDH |
| 583 | for (i=0; i<EC_NUM; i++) | 592 | for (i = 0; i < EC_NUM; i++) { |
| 584 | { | ||
| 585 | ecdh_a[i] = NULL; | 593 | ecdh_a[i] = NULL; |
| 586 | ecdh_b[i] = NULL; | 594 | ecdh_b[i] = NULL; |
| 587 | } | 595 | } |
| 588 | #endif | 596 | #endif |
| 589 | 597 | ||
| 590 | 598 | ||
| 591 | if (bio_err == NULL) | 599 | if (bio_err == NULL) |
| 592 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) | 600 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 593 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); | 601 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 594 | 602 | ||
| 595 | if (!load_config(bio_err, NULL)) | 603 | if (!load_config(bio_err, NULL)) |
| 596 | goto end; | 604 | goto end; |
| 597 | 605 | ||
| 598 | #ifndef OPENSSL_NO_RSA | 606 | #ifndef OPENSSL_NO_RSA |
| 599 | memset(rsa_key,0,sizeof(rsa_key)); | 607 | memset(rsa_key, 0, sizeof(rsa_key)); |
| 600 | for (i=0; i<RSA_NUM; i++) | 608 | for (i = 0; i < RSA_NUM; i++) |
| 601 | rsa_key[i]=NULL; | 609 | rsa_key[i] = NULL; |
| 602 | #endif | 610 | #endif |
| 603 | 611 | ||
| 604 | if ((buf=(unsigned char *)malloc((int)BUFSIZE)) == NULL) | 612 | if ((buf = (unsigned char *) malloc((int) BUFSIZE)) == NULL) { |
| 605 | { | 613 | BIO_printf(bio_err, "out of memory\n"); |
| 606 | BIO_printf(bio_err,"out of memory\n"); | ||
| 607 | goto end; | 614 | goto end; |
| 608 | } | 615 | } |
| 609 | if ((buf2=(unsigned char *)malloc((int)BUFSIZE)) == NULL) | 616 | if ((buf2 = (unsigned char *) malloc((int) BUFSIZE)) == NULL) { |
| 610 | { | 617 | BIO_printf(bio_err, "out of memory\n"); |
| 611 | BIO_printf(bio_err,"out of memory\n"); | ||
| 612 | goto end; | 618 | goto end; |
| 613 | } | 619 | } |
| 614 | 620 | memset(c, 0, sizeof(c)); | |
| 615 | memset(c,0,sizeof(c)); | 621 | memset(DES_iv, 0, sizeof(DES_iv)); |
| 616 | memset(DES_iv,0,sizeof(DES_iv)); | 622 | memset(iv, 0, sizeof(iv)); |
| 617 | memset(iv,0,sizeof(iv)); | 623 | |
| 618 | 624 | for (i = 0; i < ALGOR_NUM; i++) | |
| 619 | for (i=0; i<ALGOR_NUM; i++) | 625 | doit[i] = 0; |
| 620 | doit[i]=0; | 626 | for (i = 0; i < RSA_NUM; i++) |
| 621 | for (i=0; i<RSA_NUM; i++) | 627 | rsa_doit[i] = 0; |
| 622 | rsa_doit[i]=0; | 628 | for (i = 0; i < DSA_NUM; i++) |
| 623 | for (i=0; i<DSA_NUM; i++) | 629 | dsa_doit[i] = 0; |
| 624 | dsa_doit[i]=0; | ||
| 625 | #ifndef OPENSSL_NO_ECDSA | 630 | #ifndef OPENSSL_NO_ECDSA |
| 626 | for (i=0; i<EC_NUM; i++) | 631 | for (i = 0; i < EC_NUM; i++) |
| 627 | ecdsa_doit[i]=0; | 632 | ecdsa_doit[i] = 0; |
| 628 | #endif | 633 | #endif |
| 629 | #ifndef OPENSSL_NO_ECDH | 634 | #ifndef OPENSSL_NO_ECDH |
| 630 | for (i=0; i<EC_NUM; i++) | 635 | for (i = 0; i < EC_NUM; i++) |
| 631 | ecdh_doit[i]=0; | 636 | ecdh_doit[i] = 0; |
| 632 | #endif | 637 | #endif |
| 633 | 638 | ||
| 634 | 639 | ||
| 635 | j=0; | 640 | j = 0; |
| 636 | argc--; | 641 | argc--; |
| 637 | argv++; | 642 | argv++; |
| 638 | while (argc) | 643 | while (argc) { |
| 639 | { | 644 | if ((argc > 0) && (strcmp(*argv, "-elapsed") == 0)) { |
| 640 | if ((argc > 0) && (strcmp(*argv,"-elapsed") == 0)) | ||
| 641 | { | ||
| 642 | usertime = 0; | 645 | usertime = 0; |
| 643 | j--; /* Otherwise, -elapsed gets confused with | 646 | j--; /* Otherwise, -elapsed gets confused with an |
| 644 | an algorithm. */ | 647 | * algorithm. */ |
| 645 | } | 648 | } else if ((argc > 0) && (strcmp(*argv, "-evp") == 0)) { |
| 646 | else if ((argc > 0) && (strcmp(*argv,"-evp") == 0)) | ||
| 647 | { | ||
| 648 | argc--; | 649 | argc--; |
| 649 | argv++; | 650 | argv++; |
| 650 | if(argc == 0) | 651 | if (argc == 0) { |
| 651 | { | 652 | BIO_printf(bio_err, "no EVP given\n"); |
| 652 | BIO_printf(bio_err,"no EVP given\n"); | ||
| 653 | goto end; | ||
| 654 | } | ||
| 655 | evp_cipher=EVP_get_cipherbyname(*argv); | ||
| 656 | if(!evp_cipher) | ||
| 657 | { | ||
| 658 | evp_md=EVP_get_digestbyname(*argv); | ||
| 659 | } | ||
| 660 | if(!evp_cipher && !evp_md) | ||
| 661 | { | ||
| 662 | BIO_printf(bio_err,"%s is an unknown cipher or digest\n",*argv); | ||
| 663 | goto end; | 653 | goto end; |
| 664 | } | ||
| 665 | doit[D_EVP]=1; | ||
| 666 | } | 654 | } |
| 667 | else if (argc > 0 && !strcmp(*argv,"-decrypt")) | 655 | evp_cipher = EVP_get_cipherbyname(*argv); |
| 668 | { | 656 | if (!evp_cipher) { |
| 669 | decrypt=1; | 657 | evp_md = EVP_get_digestbyname(*argv); |
| 670 | j--; /* Otherwise, -elapsed gets confused with | 658 | } |
| 671 | an algorithm. */ | 659 | if (!evp_cipher && !evp_md) { |
| 660 | BIO_printf(bio_err, "%s is an unknown cipher or digest\n", *argv); | ||
| 661 | goto end; | ||
| 672 | } | 662 | } |
| 663 | doit[D_EVP] = 1; | ||
| 664 | } else if (argc > 0 && !strcmp(*argv, "-decrypt")) { | ||
| 665 | decrypt = 1; | ||
| 666 | j--; /* Otherwise, -elapsed gets confused with an | ||
| 667 | * algorithm. */ | ||
| 668 | } | ||
| 673 | #ifndef OPENSSL_NO_ENGINE | 669 | #ifndef OPENSSL_NO_ENGINE |
| 674 | else if ((argc > 0) && (strcmp(*argv,"-engine") == 0)) | 670 | else if ((argc > 0) && (strcmp(*argv, "-engine") == 0)) { |
| 675 | { | ||
| 676 | argc--; | 671 | argc--; |
| 677 | argv++; | 672 | argv++; |
| 678 | if(argc == 0) | 673 | if (argc == 0) { |
| 679 | { | 674 | BIO_printf(bio_err, "no engine given\n"); |
| 680 | BIO_printf(bio_err,"no engine given\n"); | ||
| 681 | goto end; | 675 | goto end; |
| 682 | } | ||
| 683 | setup_engine(bio_err, *argv, 0); | ||
| 684 | /* j will be increased again further down. We just | ||
| 685 | don't want speed to confuse an engine with an | ||
| 686 | algorithm, especially when none is given (which | ||
| 687 | means all of them should be run) */ | ||
| 688 | j--; | ||
| 689 | } | 676 | } |
| 677 | setup_engine(bio_err, *argv, 0); | ||
| 678 | /* | ||
| 679 | * j will be increased again further down. We just | ||
| 680 | * don't want speed to confuse an engine with an | ||
| 681 | * algorithm, especially when none is given (which | ||
| 682 | * means all of them should be run) | ||
| 683 | */ | ||
| 684 | j--; | ||
| 685 | } | ||
| 690 | #endif | 686 | #endif |
| 691 | #ifndef NO_FORK | 687 | #ifndef NO_FORK |
| 692 | else if ((argc > 0) && (strcmp(*argv,"-multi") == 0)) | 688 | else if ((argc > 0) && (strcmp(*argv, "-multi") == 0)) { |
| 693 | { | ||
| 694 | argc--; | 689 | argc--; |
| 695 | argv++; | 690 | argv++; |
| 696 | if(argc == 0) | 691 | if (argc == 0) { |
| 697 | { | 692 | BIO_printf(bio_err, "no multi count given\n"); |
| 698 | BIO_printf(bio_err,"no multi count given\n"); | ||
| 699 | goto end; | 693 | goto end; |
| 700 | } | 694 | } |
| 701 | multi=atoi(argv[0]); | 695 | multi = atoi(argv[0]); |
| 702 | if(multi <= 0) | 696 | if (multi <= 0) { |
| 703 | { | 697 | BIO_printf(bio_err, "bad multi count\n"); |
| 704 | BIO_printf(bio_err,"bad multi count\n"); | ||
| 705 | goto end; | 698 | goto end; |
| 706 | } | ||
| 707 | j--; /* Otherwise, -mr gets confused with | ||
| 708 | an algorithm. */ | ||
| 709 | } | 699 | } |
| 700 | j--; /* Otherwise, -mr gets confused with an | ||
| 701 | * algorithm. */ | ||
| 702 | } | ||
| 710 | #endif | 703 | #endif |
| 711 | else if (argc > 0 && !strcmp(*argv,"-mr")) | 704 | else if (argc > 0 && !strcmp(*argv, "-mr")) { |
| 712 | { | 705 | mr = 1; |
| 713 | mr=1; | 706 | j--; /* Otherwise, -mr gets confused with an |
| 714 | j--; /* Otherwise, -mr gets confused with | 707 | * algorithm. */ |
| 715 | an algorithm. */ | 708 | } else |
| 716 | } | ||
| 717 | else | ||
| 718 | #ifndef OPENSSL_NO_MD2 | 709 | #ifndef OPENSSL_NO_MD2 |
| 719 | if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1; | 710 | if (strcmp(*argv, "md2") == 0) |
| 711 | doit[D_MD2] = 1; | ||
| 720 | else | 712 | else |
| 721 | #endif | 713 | #endif |
| 722 | #ifndef OPENSSL_NO_MDC2 | 714 | #ifndef OPENSSL_NO_MDC2 |
| 723 | if (strcmp(*argv,"mdc2") == 0) doit[D_MDC2]=1; | 715 | if (strcmp(*argv, "mdc2") == 0) |
| 716 | doit[D_MDC2] = 1; | ||
| 724 | else | 717 | else |
| 725 | #endif | 718 | #endif |
| 726 | #ifndef OPENSSL_NO_MD4 | 719 | #ifndef OPENSSL_NO_MD4 |
| 727 | if (strcmp(*argv,"md4") == 0) doit[D_MD4]=1; | 720 | if (strcmp(*argv, "md4") == 0) |
| 721 | doit[D_MD4] = 1; | ||
| 728 | else | 722 | else |
| 729 | #endif | 723 | #endif |
| 730 | #ifndef OPENSSL_NO_MD5 | 724 | #ifndef OPENSSL_NO_MD5 |
| 731 | if (strcmp(*argv,"md5") == 0) doit[D_MD5]=1; | 725 | if (strcmp(*argv, "md5") == 0) |
| 726 | doit[D_MD5] = 1; | ||
| 732 | else | 727 | else |
| 733 | #endif | 728 | #endif |
| 734 | #ifndef OPENSSL_NO_MD5 | 729 | #ifndef OPENSSL_NO_MD5 |
| 735 | if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1; | 730 | if (strcmp(*argv, "hmac") == 0) |
| 731 | doit[D_HMAC] = 1; | ||
| 736 | else | 732 | else |
| 737 | #endif | 733 | #endif |
| 738 | #ifndef OPENSSL_NO_SHA | 734 | #ifndef OPENSSL_NO_SHA |
| 739 | if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1; | 735 | if (strcmp(*argv, "sha1") == 0) |
| 740 | else | 736 | doit[D_SHA1] = 1; |
| 741 | if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1, | 737 | else if (strcmp(*argv, "sha") == 0) |
| 742 | doit[D_SHA256]=1, | 738 | doit[D_SHA1] = 1, |
| 743 | doit[D_SHA512]=1; | 739 | doit[D_SHA256] = 1, |
| 740 | doit[D_SHA512] = 1; | ||
| 744 | else | 741 | else |
| 745 | #ifndef OPENSSL_NO_SHA256 | 742 | #ifndef OPENSSL_NO_SHA256 |
| 746 | if (strcmp(*argv,"sha256") == 0) doit[D_SHA256]=1; | 743 | if (strcmp(*argv, "sha256") == 0) |
| 744 | doit[D_SHA256] = 1; | ||
| 747 | else | 745 | else |
| 748 | #endif | 746 | #endif |
| 749 | #ifndef OPENSSL_NO_SHA512 | 747 | #ifndef OPENSSL_NO_SHA512 |
| 750 | if (strcmp(*argv,"sha512") == 0) doit[D_SHA512]=1; | 748 | if (strcmp(*argv, "sha512") == 0) |
| 749 | doit[D_SHA512] = 1; | ||
| 751 | else | 750 | else |
| 752 | #endif | 751 | #endif |
| 753 | #endif | 752 | #endif |
| 754 | #ifndef OPENSSL_NO_WHIRLPOOL | 753 | #ifndef OPENSSL_NO_WHIRLPOOL |
| 755 | if (strcmp(*argv,"whirlpool") == 0) doit[D_WHIRLPOOL]=1; | 754 | if (strcmp(*argv, "whirlpool") == 0) |
| 755 | doit[D_WHIRLPOOL] = 1; | ||
| 756 | else | 756 | else |
| 757 | #endif | 757 | #endif |
| 758 | #ifndef OPENSSL_NO_RIPEMD | 758 | #ifndef OPENSSL_NO_RIPEMD |
| 759 | if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1; | 759 | if (strcmp(*argv, "ripemd") == 0) |
| 760 | else | 760 | doit[D_RMD160] = 1; |
| 761 | if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1; | 761 | else if (strcmp(*argv, "rmd160") == 0) |
| 762 | else | 762 | doit[D_RMD160] = 1; |
| 763 | if (strcmp(*argv,"ripemd160") == 0) doit[D_RMD160]=1; | 763 | else if (strcmp(*argv, "ripemd160") == 0) |
| 764 | doit[D_RMD160] = 1; | ||
| 764 | else | 765 | else |
| 765 | #endif | 766 | #endif |
| 766 | #ifndef OPENSSL_NO_RC4 | 767 | #ifndef OPENSSL_NO_RC4 |
| 767 | if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1; | 768 | if (strcmp(*argv, "rc4") == 0) |
| 768 | else | 769 | doit[D_RC4] = 1; |
| 770 | else | ||
| 769 | #endif | 771 | #endif |
| 770 | #ifndef OPENSSL_NO_DES | 772 | #ifndef OPENSSL_NO_DES |
| 771 | if (strcmp(*argv,"des-cbc") == 0) doit[D_CBC_DES]=1; | 773 | if (strcmp(*argv, "des-cbc") == 0) |
| 772 | else if (strcmp(*argv,"des-ede3") == 0) doit[D_EDE3_DES]=1; | 774 | doit[D_CBC_DES] = 1; |
| 775 | else if (strcmp(*argv, "des-ede3") == 0) | ||
| 776 | doit[D_EDE3_DES] = 1; | ||
| 773 | else | 777 | else |
| 774 | #endif | 778 | #endif |
| 775 | #ifndef OPENSSL_NO_AES | 779 | #ifndef OPENSSL_NO_AES |
| 776 | if (strcmp(*argv,"aes-128-cbc") == 0) doit[D_CBC_128_AES]=1; | 780 | if (strcmp(*argv, "aes-128-cbc") == 0) |
| 777 | else if (strcmp(*argv,"aes-192-cbc") == 0) doit[D_CBC_192_AES]=1; | 781 | doit[D_CBC_128_AES] = 1; |
| 778 | else if (strcmp(*argv,"aes-256-cbc") == 0) doit[D_CBC_256_AES]=1; | 782 | else if (strcmp(*argv, "aes-192-cbc") == 0) |
| 779 | else if (strcmp(*argv,"aes-128-ige") == 0) doit[D_IGE_128_AES]=1; | 783 | doit[D_CBC_192_AES] = 1; |
| 780 | else if (strcmp(*argv,"aes-192-ige") == 0) doit[D_IGE_192_AES]=1; | 784 | else if (strcmp(*argv, "aes-256-cbc") == 0) |
| 781 | else if (strcmp(*argv,"aes-256-ige") == 0) doit[D_IGE_256_AES]=1; | 785 | doit[D_CBC_256_AES] = 1; |
| 782 | else | 786 | else if (strcmp(*argv, "aes-128-ige") == 0) |
| 787 | doit[D_IGE_128_AES] = 1; | ||
| 788 | else if (strcmp(*argv, "aes-192-ige") == 0) | ||
| 789 | doit[D_IGE_192_AES] = 1; | ||
| 790 | else if (strcmp(*argv, "aes-256-ige") == 0) | ||
| 791 | doit[D_IGE_256_AES] = 1; | ||
| 792 | else | ||
| 783 | #endif | 793 | #endif |
| 784 | #ifndef OPENSSL_NO_CAMELLIA | 794 | #ifndef OPENSSL_NO_CAMELLIA |
| 785 | if (strcmp(*argv,"camellia-128-cbc") == 0) doit[D_CBC_128_CML]=1; | 795 | if (strcmp(*argv, "camellia-128-cbc") == 0) |
| 786 | else if (strcmp(*argv,"camellia-192-cbc") == 0) doit[D_CBC_192_CML]=1; | 796 | doit[D_CBC_128_CML] = 1; |
| 787 | else if (strcmp(*argv,"camellia-256-cbc") == 0) doit[D_CBC_256_CML]=1; | 797 | else if (strcmp(*argv, "camellia-192-cbc") == 0) |
| 798 | doit[D_CBC_192_CML] = 1; | ||
| 799 | else if (strcmp(*argv, "camellia-256-cbc") == 0) | ||
| 800 | doit[D_CBC_256_CML] = 1; | ||
| 788 | else | 801 | else |
| 789 | #endif | 802 | #endif |
| 790 | #ifndef OPENSSL_NO_RSA | 803 | #ifndef OPENSSL_NO_RSA |
| 791 | #if 0 /* was: #ifdef RSAref */ | 804 | #if 0 /* was: #ifdef RSAref */ |
| 792 | if (strcmp(*argv,"rsaref") == 0) | 805 | if (strcmp(*argv, "rsaref") == 0) { |
| 793 | { | ||
| 794 | RSA_set_default_openssl_method(RSA_PKCS1_RSAref()); | 806 | RSA_set_default_openssl_method(RSA_PKCS1_RSAref()); |
| 795 | j--; | 807 | j--; |
| 796 | } | 808 | } else |
| 797 | else | ||
| 798 | #endif | 809 | #endif |
| 799 | #ifndef RSA_NULL | 810 | #ifndef RSA_NULL |
| 800 | if (strcmp(*argv,"openssl") == 0) | 811 | if (strcmp(*argv, "openssl") == 0) { |
| 801 | { | ||
| 802 | RSA_set_default_method(RSA_PKCS1_SSLeay()); | 812 | RSA_set_default_method(RSA_PKCS1_SSLeay()); |
| 803 | j--; | 813 | j--; |
| 804 | } | 814 | } else |
| 805 | else | 815 | #endif |
| 806 | #endif | 816 | #endif /* !OPENSSL_NO_RSA */ |
| 807 | #endif /* !OPENSSL_NO_RSA */ | 817 | if (strcmp(*argv, "dsa512") == 0) |
| 808 | if (strcmp(*argv,"dsa512") == 0) dsa_doit[R_DSA_512]=2; | 818 | dsa_doit[R_DSA_512] = 2; |
| 809 | else if (strcmp(*argv,"dsa1024") == 0) dsa_doit[R_DSA_1024]=2; | 819 | else if (strcmp(*argv, "dsa1024") == 0) |
| 810 | else if (strcmp(*argv,"dsa2048") == 0) dsa_doit[R_DSA_2048]=2; | 820 | dsa_doit[R_DSA_1024] = 2; |
| 811 | else if (strcmp(*argv,"rsa512") == 0) rsa_doit[R_RSA_512]=2; | 821 | else if (strcmp(*argv, "dsa2048") == 0) |
| 812 | else if (strcmp(*argv,"rsa1024") == 0) rsa_doit[R_RSA_1024]=2; | 822 | dsa_doit[R_DSA_2048] = 2; |
| 813 | else if (strcmp(*argv,"rsa2048") == 0) rsa_doit[R_RSA_2048]=2; | 823 | else if (strcmp(*argv, "rsa512") == 0) |
| 814 | else if (strcmp(*argv,"rsa4096") == 0) rsa_doit[R_RSA_4096]=2; | 824 | rsa_doit[R_RSA_512] = 2; |
| 825 | else if (strcmp(*argv, "rsa1024") == 0) | ||
| 826 | rsa_doit[R_RSA_1024] = 2; | ||
| 827 | else if (strcmp(*argv, "rsa2048") == 0) | ||
| 828 | rsa_doit[R_RSA_2048] = 2; | ||
| 829 | else if (strcmp(*argv, "rsa4096") == 0) | ||
| 830 | rsa_doit[R_RSA_4096] = 2; | ||
| 815 | else | 831 | else |
| 816 | #ifndef OPENSSL_NO_RC2 | 832 | #ifndef OPENSSL_NO_RC2 |
| 817 | if (strcmp(*argv,"rc2-cbc") == 0) doit[D_CBC_RC2]=1; | 833 | if (strcmp(*argv, "rc2-cbc") == 0) |
| 818 | else if (strcmp(*argv,"rc2") == 0) doit[D_CBC_RC2]=1; | 834 | doit[D_CBC_RC2] = 1; |
| 835 | else if (strcmp(*argv, "rc2") == 0) | ||
| 836 | doit[D_CBC_RC2] = 1; | ||
| 819 | else | 837 | else |
| 820 | #endif | 838 | #endif |
| 821 | #ifndef OPENSSL_NO_RC5 | 839 | #ifndef OPENSSL_NO_RC5 |
| 822 | if (strcmp(*argv,"rc5-cbc") == 0) doit[D_CBC_RC5]=1; | 840 | if (strcmp(*argv, "rc5-cbc") == 0) |
| 823 | else if (strcmp(*argv,"rc5") == 0) doit[D_CBC_RC5]=1; | 841 | doit[D_CBC_RC5] = 1; |
| 842 | else if (strcmp(*argv, "rc5") == 0) | ||
| 843 | doit[D_CBC_RC5] = 1; | ||
| 824 | else | 844 | else |
| 825 | #endif | 845 | #endif |
| 826 | #ifndef OPENSSL_NO_IDEA | 846 | #ifndef OPENSSL_NO_IDEA |
| 827 | if (strcmp(*argv,"idea-cbc") == 0) doit[D_CBC_IDEA]=1; | 847 | if (strcmp(*argv, "idea-cbc") == 0) |
| 828 | else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1; | 848 | doit[D_CBC_IDEA] = 1; |
| 849 | else if (strcmp(*argv, "idea") == 0) | ||
| 850 | doit[D_CBC_IDEA] = 1; | ||
| 829 | else | 851 | else |
| 830 | #endif | 852 | #endif |
| 831 | #ifndef OPENSSL_NO_SEED | 853 | #ifndef OPENSSL_NO_SEED |
| 832 | if (strcmp(*argv,"seed-cbc") == 0) doit[D_CBC_SEED]=1; | 854 | if (strcmp(*argv, "seed-cbc") == 0) |
| 833 | else if (strcmp(*argv,"seed") == 0) doit[D_CBC_SEED]=1; | 855 | doit[D_CBC_SEED] = 1; |
| 856 | else if (strcmp(*argv, "seed") == 0) | ||
| 857 | doit[D_CBC_SEED] = 1; | ||
| 834 | else | 858 | else |
| 835 | #endif | 859 | #endif |
| 836 | #ifndef OPENSSL_NO_BF | 860 | #ifndef OPENSSL_NO_BF |
| 837 | if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1; | 861 | if (strcmp(*argv, "bf-cbc") == 0) |
| 838 | else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1; | 862 | doit[D_CBC_BF] = 1; |
| 839 | else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1; | 863 | else if (strcmp(*argv, "blowfish") == 0) |
| 864 | doit[D_CBC_BF] = 1; | ||
| 865 | else if (strcmp(*argv, "bf") == 0) | ||
| 866 | doit[D_CBC_BF] = 1; | ||
| 840 | else | 867 | else |
| 841 | #endif | 868 | #endif |
| 842 | #ifndef OPENSSL_NO_CAST | 869 | #ifndef OPENSSL_NO_CAST |
| 843 | if (strcmp(*argv,"cast-cbc") == 0) doit[D_CBC_CAST]=1; | 870 | if (strcmp(*argv, "cast-cbc") == 0) |
| 844 | else if (strcmp(*argv,"cast") == 0) doit[D_CBC_CAST]=1; | 871 | doit[D_CBC_CAST] = 1; |
| 845 | else if (strcmp(*argv,"cast5") == 0) doit[D_CBC_CAST]=1; | 872 | else if (strcmp(*argv, "cast") == 0) |
| 873 | doit[D_CBC_CAST] = 1; | ||
| 874 | else if (strcmp(*argv, "cast5") == 0) | ||
| 875 | doit[D_CBC_CAST] = 1; | ||
| 846 | else | 876 | else |
| 847 | #endif | 877 | #endif |
| 848 | #ifndef OPENSSL_NO_DES | 878 | #ifndef OPENSSL_NO_DES |
| 849 | if (strcmp(*argv,"des") == 0) | 879 | if (strcmp(*argv, "des") == 0) { |
| 850 | { | 880 | doit[D_CBC_DES] = 1; |
| 851 | doit[D_CBC_DES]=1; | 881 | doit[D_EDE3_DES] = 1; |
| 852 | doit[D_EDE3_DES]=1; | 882 | } else |
| 853 | } | ||
| 854 | else | ||
| 855 | #endif | 883 | #endif |
| 856 | #ifndef OPENSSL_NO_AES | 884 | #ifndef OPENSSL_NO_AES |
| 857 | if (strcmp(*argv,"aes") == 0) | 885 | if (strcmp(*argv, "aes") == 0) { |
| 858 | { | 886 | doit[D_CBC_128_AES] = 1; |
| 859 | doit[D_CBC_128_AES]=1; | 887 | doit[D_CBC_192_AES] = 1; |
| 860 | doit[D_CBC_192_AES]=1; | 888 | doit[D_CBC_256_AES] = 1; |
| 861 | doit[D_CBC_256_AES]=1; | 889 | } else if (strcmp(*argv, "ghash") == 0) { |
| 862 | } | 890 | doit[D_GHASH] = 1; |
| 863 | else if (strcmp(*argv,"ghash") == 0) | 891 | } else |
| 864 | { | ||
| 865 | doit[D_GHASH]=1; | ||
| 866 | } | ||
| 867 | else | ||
| 868 | #endif | 892 | #endif |
| 869 | #ifndef OPENSSL_NO_CAMELLIA | 893 | #ifndef OPENSSL_NO_CAMELLIA |
| 870 | if (strcmp(*argv,"camellia") == 0) | 894 | if (strcmp(*argv, "camellia") == 0) { |
| 871 | { | 895 | doit[D_CBC_128_CML] = 1; |
| 872 | doit[D_CBC_128_CML]=1; | 896 | doit[D_CBC_192_CML] = 1; |
| 873 | doit[D_CBC_192_CML]=1; | 897 | doit[D_CBC_256_CML] = 1; |
| 874 | doit[D_CBC_256_CML]=1; | 898 | } else |
| 875 | } | ||
| 876 | else | ||
| 877 | #endif | 899 | #endif |
| 878 | #ifndef OPENSSL_NO_RSA | 900 | #ifndef OPENSSL_NO_RSA |
| 879 | if (strcmp(*argv,"rsa") == 0) | 901 | if (strcmp(*argv, "rsa") == 0) { |
| 880 | { | 902 | rsa_doit[R_RSA_512] = 1; |
| 881 | rsa_doit[R_RSA_512]=1; | 903 | rsa_doit[R_RSA_1024] = 1; |
| 882 | rsa_doit[R_RSA_1024]=1; | 904 | rsa_doit[R_RSA_2048] = 1; |
| 883 | rsa_doit[R_RSA_2048]=1; | 905 | rsa_doit[R_RSA_4096] = 1; |
| 884 | rsa_doit[R_RSA_4096]=1; | 906 | } else |
| 885 | } | ||
| 886 | else | ||
| 887 | #endif | 907 | #endif |
| 888 | #ifndef OPENSSL_NO_DSA | 908 | #ifndef OPENSSL_NO_DSA |
| 889 | if (strcmp(*argv,"dsa") == 0) | 909 | if (strcmp(*argv, "dsa") == 0) { |
| 890 | { | 910 | dsa_doit[R_DSA_512] = 1; |
| 891 | dsa_doit[R_DSA_512]=1; | 911 | dsa_doit[R_DSA_1024] = 1; |
| 892 | dsa_doit[R_DSA_1024]=1; | 912 | dsa_doit[R_DSA_2048] = 1; |
| 893 | dsa_doit[R_DSA_2048]=1; | 913 | } else |
| 894 | } | ||
| 895 | else | ||
| 896 | #endif | 914 | #endif |
| 897 | #ifndef OPENSSL_NO_ECDSA | 915 | #ifndef OPENSSL_NO_ECDSA |
| 898 | if (strcmp(*argv,"ecdsap160") == 0) ecdsa_doit[R_EC_P160]=2; | 916 | if (strcmp(*argv, "ecdsap160") == 0) |
| 899 | else if (strcmp(*argv,"ecdsap192") == 0) ecdsa_doit[R_EC_P192]=2; | 917 | ecdsa_doit[R_EC_P160] = 2; |
| 900 | else if (strcmp(*argv,"ecdsap224") == 0) ecdsa_doit[R_EC_P224]=2; | 918 | else if (strcmp(*argv, "ecdsap192") == 0) |
| 901 | else if (strcmp(*argv,"ecdsap256") == 0) ecdsa_doit[R_EC_P256]=2; | 919 | ecdsa_doit[R_EC_P192] = 2; |
| 902 | else if (strcmp(*argv,"ecdsap384") == 0) ecdsa_doit[R_EC_P384]=2; | 920 | else if (strcmp(*argv, "ecdsap224") == 0) |
| 903 | else if (strcmp(*argv,"ecdsap521") == 0) ecdsa_doit[R_EC_P521]=2; | 921 | ecdsa_doit[R_EC_P224] = 2; |
| 904 | else if (strcmp(*argv,"ecdsak163") == 0) ecdsa_doit[R_EC_K163]=2; | 922 | else if (strcmp(*argv, "ecdsap256") == 0) |
| 905 | else if (strcmp(*argv,"ecdsak233") == 0) ecdsa_doit[R_EC_K233]=2; | 923 | ecdsa_doit[R_EC_P256] = 2; |
| 906 | else if (strcmp(*argv,"ecdsak283") == 0) ecdsa_doit[R_EC_K283]=2; | 924 | else if (strcmp(*argv, "ecdsap384") == 0) |
| 907 | else if (strcmp(*argv,"ecdsak409") == 0) ecdsa_doit[R_EC_K409]=2; | 925 | ecdsa_doit[R_EC_P384] = 2; |
| 908 | else if (strcmp(*argv,"ecdsak571") == 0) ecdsa_doit[R_EC_K571]=2; | 926 | else if (strcmp(*argv, "ecdsap521") == 0) |
| 909 | else if (strcmp(*argv,"ecdsab163") == 0) ecdsa_doit[R_EC_B163]=2; | 927 | ecdsa_doit[R_EC_P521] = 2; |
| 910 | else if (strcmp(*argv,"ecdsab233") == 0) ecdsa_doit[R_EC_B233]=2; | 928 | else if (strcmp(*argv, "ecdsak163") == 0) |
| 911 | else if (strcmp(*argv,"ecdsab283") == 0) ecdsa_doit[R_EC_B283]=2; | 929 | ecdsa_doit[R_EC_K163] = 2; |
| 912 | else if (strcmp(*argv,"ecdsab409") == 0) ecdsa_doit[R_EC_B409]=2; | 930 | else if (strcmp(*argv, "ecdsak233") == 0) |
| 913 | else if (strcmp(*argv,"ecdsab571") == 0) ecdsa_doit[R_EC_B571]=2; | 931 | ecdsa_doit[R_EC_K233] = 2; |
| 914 | else if (strcmp(*argv,"ecdsa") == 0) | 932 | else if (strcmp(*argv, "ecdsak283") == 0) |
| 915 | { | 933 | ecdsa_doit[R_EC_K283] = 2; |
| 916 | for (i=0; i < EC_NUM; i++) | 934 | else if (strcmp(*argv, "ecdsak409") == 0) |
| 917 | ecdsa_doit[i]=1; | 935 | ecdsa_doit[R_EC_K409] = 2; |
| 918 | } | 936 | else if (strcmp(*argv, "ecdsak571") == 0) |
| 919 | else | 937 | ecdsa_doit[R_EC_K571] = 2; |
| 938 | else if (strcmp(*argv, "ecdsab163") == 0) | ||
| 939 | ecdsa_doit[R_EC_B163] = 2; | ||
| 940 | else if (strcmp(*argv, "ecdsab233") == 0) | ||
| 941 | ecdsa_doit[R_EC_B233] = 2; | ||
| 942 | else if (strcmp(*argv, "ecdsab283") == 0) | ||
| 943 | ecdsa_doit[R_EC_B283] = 2; | ||
| 944 | else if (strcmp(*argv, "ecdsab409") == 0) | ||
| 945 | ecdsa_doit[R_EC_B409] = 2; | ||
| 946 | else if (strcmp(*argv, "ecdsab571") == 0) | ||
| 947 | ecdsa_doit[R_EC_B571] = 2; | ||
| 948 | else if (strcmp(*argv, "ecdsa") == 0) { | ||
| 949 | for (i = 0; i < EC_NUM; i++) | ||
| 950 | ecdsa_doit[i] = 1; | ||
| 951 | } else | ||
| 920 | #endif | 952 | #endif |
| 921 | #ifndef OPENSSL_NO_ECDH | 953 | #ifndef OPENSSL_NO_ECDH |
| 922 | if (strcmp(*argv,"ecdhp160") == 0) ecdh_doit[R_EC_P160]=2; | 954 | if (strcmp(*argv, "ecdhp160") == 0) |
| 923 | else if (strcmp(*argv,"ecdhp192") == 0) ecdh_doit[R_EC_P192]=2; | 955 | ecdh_doit[R_EC_P160] = 2; |
| 924 | else if (strcmp(*argv,"ecdhp224") == 0) ecdh_doit[R_EC_P224]=2; | 956 | else if (strcmp(*argv, "ecdhp192") == 0) |
| 925 | else if (strcmp(*argv,"ecdhp256") == 0) ecdh_doit[R_EC_P256]=2; | 957 | ecdh_doit[R_EC_P192] = 2; |
| 926 | else if (strcmp(*argv,"ecdhp384") == 0) ecdh_doit[R_EC_P384]=2; | 958 | else if (strcmp(*argv, "ecdhp224") == 0) |
| 927 | else if (strcmp(*argv,"ecdhp521") == 0) ecdh_doit[R_EC_P521]=2; | 959 | ecdh_doit[R_EC_P224] = 2; |
| 928 | else if (strcmp(*argv,"ecdhk163") == 0) ecdh_doit[R_EC_K163]=2; | 960 | else if (strcmp(*argv, "ecdhp256") == 0) |
| 929 | else if (strcmp(*argv,"ecdhk233") == 0) ecdh_doit[R_EC_K233]=2; | 961 | ecdh_doit[R_EC_P256] = 2; |
| 930 | else if (strcmp(*argv,"ecdhk283") == 0) ecdh_doit[R_EC_K283]=2; | 962 | else if (strcmp(*argv, "ecdhp384") == 0) |
| 931 | else if (strcmp(*argv,"ecdhk409") == 0) ecdh_doit[R_EC_K409]=2; | 963 | ecdh_doit[R_EC_P384] = 2; |
| 932 | else if (strcmp(*argv,"ecdhk571") == 0) ecdh_doit[R_EC_K571]=2; | 964 | else if (strcmp(*argv, "ecdhp521") == 0) |
| 933 | else if (strcmp(*argv,"ecdhb163") == 0) ecdh_doit[R_EC_B163]=2; | 965 | ecdh_doit[R_EC_P521] = 2; |
| 934 | else if (strcmp(*argv,"ecdhb233") == 0) ecdh_doit[R_EC_B233]=2; | 966 | else if (strcmp(*argv, "ecdhk163") == 0) |
| 935 | else if (strcmp(*argv,"ecdhb283") == 0) ecdh_doit[R_EC_B283]=2; | 967 | ecdh_doit[R_EC_K163] = 2; |
| 936 | else if (strcmp(*argv,"ecdhb409") == 0) ecdh_doit[R_EC_B409]=2; | 968 | else if (strcmp(*argv, "ecdhk233") == 0) |
| 937 | else if (strcmp(*argv,"ecdhb571") == 0) ecdh_doit[R_EC_B571]=2; | 969 | ecdh_doit[R_EC_K233] = 2; |
| 938 | else if (strcmp(*argv,"ecdh") == 0) | 970 | else if (strcmp(*argv, "ecdhk283") == 0) |
| 939 | { | 971 | ecdh_doit[R_EC_K283] = 2; |
| 940 | for (i=0; i < EC_NUM; i++) | 972 | else if (strcmp(*argv, "ecdhk409") == 0) |
| 941 | ecdh_doit[i]=1; | 973 | ecdh_doit[R_EC_K409] = 2; |
| 942 | } | 974 | else if (strcmp(*argv, "ecdhk571") == 0) |
| 943 | else | 975 | ecdh_doit[R_EC_K571] = 2; |
| 976 | else if (strcmp(*argv, "ecdhb163") == 0) | ||
| 977 | ecdh_doit[R_EC_B163] = 2; | ||
| 978 | else if (strcmp(*argv, "ecdhb233") == 0) | ||
| 979 | ecdh_doit[R_EC_B233] = 2; | ||
| 980 | else if (strcmp(*argv, "ecdhb283") == 0) | ||
| 981 | ecdh_doit[R_EC_B283] = 2; | ||
| 982 | else if (strcmp(*argv, "ecdhb409") == 0) | ||
| 983 | ecdh_doit[R_EC_B409] = 2; | ||
| 984 | else if (strcmp(*argv, "ecdhb571") == 0) | ||
| 985 | ecdh_doit[R_EC_B571] = 2; | ||
| 986 | else if (strcmp(*argv, "ecdh") == 0) { | ||
| 987 | for (i = 0; i < EC_NUM; i++) | ||
| 988 | ecdh_doit[i] = 1; | ||
| 989 | } else | ||
| 944 | #endif | 990 | #endif |
| 945 | { | 991 | { |
| 946 | BIO_printf(bio_err,"Error: bad option or value\n"); | 992 | BIO_printf(bio_err, "Error: bad option or value\n"); |
| 947 | BIO_printf(bio_err,"\n"); | 993 | BIO_printf(bio_err, "\n"); |
| 948 | BIO_printf(bio_err,"Available values:\n"); | 994 | BIO_printf(bio_err, "Available values:\n"); |
| 949 | #ifndef OPENSSL_NO_MD2 | 995 | #ifndef OPENSSL_NO_MD2 |
| 950 | BIO_printf(bio_err,"md2 "); | 996 | BIO_printf(bio_err, "md2 "); |
| 951 | #endif | 997 | #endif |
| 952 | #ifndef OPENSSL_NO_MDC2 | 998 | #ifndef OPENSSL_NO_MDC2 |
| 953 | BIO_printf(bio_err,"mdc2 "); | 999 | BIO_printf(bio_err, "mdc2 "); |
| 954 | #endif | 1000 | #endif |
| 955 | #ifndef OPENSSL_NO_MD4 | 1001 | #ifndef OPENSSL_NO_MD4 |
| 956 | BIO_printf(bio_err,"md4 "); | 1002 | BIO_printf(bio_err, "md4 "); |
| 957 | #endif | 1003 | #endif |
| 958 | #ifndef OPENSSL_NO_MD5 | 1004 | #ifndef OPENSSL_NO_MD5 |
| 959 | BIO_printf(bio_err,"md5 "); | 1005 | BIO_printf(bio_err, "md5 "); |
| 960 | #ifndef OPENSSL_NO_HMAC | 1006 | #ifndef OPENSSL_NO_HMAC |
| 961 | BIO_printf(bio_err,"hmac "); | 1007 | BIO_printf(bio_err, "hmac "); |
| 962 | #endif | 1008 | #endif |
| 963 | #endif | 1009 | #endif |
| 964 | #ifndef OPENSSL_NO_SHA1 | 1010 | #ifndef OPENSSL_NO_SHA1 |
| 965 | BIO_printf(bio_err,"sha1 "); | 1011 | BIO_printf(bio_err, "sha1 "); |
| 966 | #endif | 1012 | #endif |
| 967 | #ifndef OPENSSL_NO_SHA256 | 1013 | #ifndef OPENSSL_NO_SHA256 |
| 968 | BIO_printf(bio_err,"sha256 "); | 1014 | BIO_printf(bio_err, "sha256 "); |
| 969 | #endif | 1015 | #endif |
| 970 | #ifndef OPENSSL_NO_SHA512 | 1016 | #ifndef OPENSSL_NO_SHA512 |
| 971 | BIO_printf(bio_err,"sha512 "); | 1017 | BIO_printf(bio_err, "sha512 "); |
| 972 | #endif | 1018 | #endif |
| 973 | #ifndef OPENSSL_NO_WHIRLPOOL | 1019 | #ifndef OPENSSL_NO_WHIRLPOOL |
| 974 | BIO_printf(bio_err,"whirlpool"); | 1020 | BIO_printf(bio_err, "whirlpool"); |
| 975 | #endif | 1021 | #endif |
| 976 | #ifndef OPENSSL_NO_RIPEMD160 | 1022 | #ifndef OPENSSL_NO_RIPEMD160 |
| 977 | BIO_printf(bio_err,"rmd160"); | 1023 | BIO_printf(bio_err, "rmd160"); |
| 978 | #endif | 1024 | #endif |
| 979 | #if !defined(OPENSSL_NO_MD2) || !defined(OPENSSL_NO_MDC2) || \ | 1025 | #if !defined(OPENSSL_NO_MD2) || !defined(OPENSSL_NO_MDC2) || \ |
| 980 | !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \ | 1026 | !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \ |
| 981 | !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160) || \ | 1027 | !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160) || \ |
| 982 | !defined(OPENSSL_NO_WHIRLPOOL) | 1028 | !defined(OPENSSL_NO_WHIRLPOOL) |
| 983 | BIO_printf(bio_err,"\n"); | 1029 | BIO_printf(bio_err, "\n"); |
| 984 | #endif | 1030 | #endif |
| 985 | 1031 | ||
| 986 | #ifndef OPENSSL_NO_IDEA | 1032 | #ifndef OPENSSL_NO_IDEA |
| 987 | BIO_printf(bio_err,"idea-cbc "); | 1033 | BIO_printf(bio_err, "idea-cbc "); |
| 988 | #endif | 1034 | #endif |
| 989 | #ifndef OPENSSL_NO_SEED | 1035 | #ifndef OPENSSL_NO_SEED |
| 990 | BIO_printf(bio_err,"seed-cbc "); | 1036 | BIO_printf(bio_err, "seed-cbc "); |
| 991 | #endif | 1037 | #endif |
| 992 | #ifndef OPENSSL_NO_RC2 | 1038 | #ifndef OPENSSL_NO_RC2 |
| 993 | BIO_printf(bio_err,"rc2-cbc "); | 1039 | BIO_printf(bio_err, "rc2-cbc "); |
| 994 | #endif | 1040 | #endif |
| 995 | #ifndef OPENSSL_NO_RC5 | 1041 | #ifndef OPENSSL_NO_RC5 |
| 996 | BIO_printf(bio_err,"rc5-cbc "); | 1042 | BIO_printf(bio_err, "rc5-cbc "); |
| 997 | #endif | 1043 | #endif |
| 998 | #ifndef OPENSSL_NO_BF | 1044 | #ifndef OPENSSL_NO_BF |
| 999 | BIO_printf(bio_err,"bf-cbc"); | 1045 | BIO_printf(bio_err, "bf-cbc"); |
| 1000 | #endif | 1046 | #endif |
| 1001 | #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || !defined(OPENSSL_NO_RC2) || \ | 1047 | #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || !defined(OPENSSL_NO_RC2) || \ |
| 1002 | !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5) | 1048 | !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5) |
| 1003 | BIO_printf(bio_err,"\n"); | 1049 | BIO_printf(bio_err, "\n"); |
| 1004 | #endif | 1050 | #endif |
| 1005 | #ifndef OPENSSL_NO_DES | 1051 | #ifndef OPENSSL_NO_DES |
| 1006 | BIO_printf(bio_err,"des-cbc des-ede3 "); | 1052 | BIO_printf(bio_err, "des-cbc des-ede3 "); |
| 1007 | #endif | 1053 | #endif |
| 1008 | #ifndef OPENSSL_NO_AES | 1054 | #ifndef OPENSSL_NO_AES |
| 1009 | BIO_printf(bio_err,"aes-128-cbc aes-192-cbc aes-256-cbc "); | 1055 | BIO_printf(bio_err, "aes-128-cbc aes-192-cbc aes-256-cbc "); |
| 1010 | BIO_printf(bio_err,"aes-128-ige aes-192-ige aes-256-ige "); | 1056 | BIO_printf(bio_err, "aes-128-ige aes-192-ige aes-256-ige "); |
| 1011 | #endif | 1057 | #endif |
| 1012 | #ifndef OPENSSL_NO_CAMELLIA | 1058 | #ifndef OPENSSL_NO_CAMELLIA |
| 1013 | BIO_printf(bio_err,"\n"); | 1059 | BIO_printf(bio_err, "\n"); |
| 1014 | BIO_printf(bio_err,"camellia-128-cbc camellia-192-cbc camellia-256-cbc "); | 1060 | BIO_printf(bio_err, "camellia-128-cbc camellia-192-cbc camellia-256-cbc "); |
| 1015 | #endif | 1061 | #endif |
| 1016 | #ifndef OPENSSL_NO_RC4 | 1062 | #ifndef OPENSSL_NO_RC4 |
| 1017 | BIO_printf(bio_err,"rc4"); | 1063 | BIO_printf(bio_err, "rc4"); |
| 1018 | #endif | 1064 | #endif |
| 1019 | BIO_printf(bio_err,"\n"); | 1065 | BIO_printf(bio_err, "\n"); |
| 1020 | 1066 | ||
| 1021 | #ifndef OPENSSL_NO_RSA | 1067 | #ifndef OPENSSL_NO_RSA |
| 1022 | BIO_printf(bio_err,"rsa512 rsa1024 rsa2048 rsa4096\n"); | 1068 | BIO_printf(bio_err, "rsa512 rsa1024 rsa2048 rsa4096\n"); |
| 1023 | #endif | 1069 | #endif |
| 1024 | 1070 | ||
| 1025 | #ifndef OPENSSL_NO_DSA | 1071 | #ifndef OPENSSL_NO_DSA |
| 1026 | BIO_printf(bio_err,"dsa512 dsa1024 dsa2048\n"); | 1072 | BIO_printf(bio_err, "dsa512 dsa1024 dsa2048\n"); |
| 1027 | #endif | 1073 | #endif |
| 1028 | #ifndef OPENSSL_NO_ECDSA | 1074 | #ifndef OPENSSL_NO_ECDSA |
| 1029 | BIO_printf(bio_err,"ecdsap160 ecdsap192 ecdsap224 ecdsap256 ecdsap384 ecdsap521\n"); | 1075 | BIO_printf(bio_err, "ecdsap160 ecdsap192 ecdsap224 ecdsap256 ecdsap384 ecdsap521\n"); |
| 1030 | BIO_printf(bio_err,"ecdsak163 ecdsak233 ecdsak283 ecdsak409 ecdsak571\n"); | 1076 | BIO_printf(bio_err, "ecdsak163 ecdsak233 ecdsak283 ecdsak409 ecdsak571\n"); |
| 1031 | BIO_printf(bio_err,"ecdsab163 ecdsab233 ecdsab283 ecdsab409 ecdsab571\n"); | 1077 | BIO_printf(bio_err, "ecdsab163 ecdsab233 ecdsab283 ecdsab409 ecdsab571\n"); |
| 1032 | BIO_printf(bio_err,"ecdsa\n"); | 1078 | BIO_printf(bio_err, "ecdsa\n"); |
| 1033 | #endif | 1079 | #endif |
| 1034 | #ifndef OPENSSL_NO_ECDH | 1080 | #ifndef OPENSSL_NO_ECDH |
| 1035 | BIO_printf(bio_err,"ecdhp160 ecdhp192 ecdhp224 ecdhp256 ecdhp384 ecdhp521\n"); | 1081 | BIO_printf(bio_err, "ecdhp160 ecdhp192 ecdhp224 ecdhp256 ecdhp384 ecdhp521\n"); |
| 1036 | BIO_printf(bio_err,"ecdhk163 ecdhk233 ecdhk283 ecdhk409 ecdhk571\n"); | 1082 | BIO_printf(bio_err, "ecdhk163 ecdhk233 ecdhk283 ecdhk409 ecdhk571\n"); |
| 1037 | BIO_printf(bio_err,"ecdhb163 ecdhb233 ecdhb283 ecdhb409 ecdhb571\n"); | 1083 | BIO_printf(bio_err, "ecdhb163 ecdhb233 ecdhb283 ecdhb409 ecdhb571\n"); |
| 1038 | BIO_printf(bio_err,"ecdh\n"); | 1084 | BIO_printf(bio_err, "ecdh\n"); |
| 1039 | #endif | 1085 | #endif |
| 1040 | 1086 | ||
| 1041 | #ifndef OPENSSL_NO_IDEA | 1087 | #ifndef OPENSSL_NO_IDEA |
| 1042 | BIO_printf(bio_err,"idea "); | 1088 | BIO_printf(bio_err, "idea "); |
| 1043 | #endif | 1089 | #endif |
| 1044 | #ifndef OPENSSL_NO_SEED | 1090 | #ifndef OPENSSL_NO_SEED |
| 1045 | BIO_printf(bio_err,"seed "); | 1091 | BIO_printf(bio_err, "seed "); |
| 1046 | #endif | 1092 | #endif |
| 1047 | #ifndef OPENSSL_NO_RC2 | 1093 | #ifndef OPENSSL_NO_RC2 |
| 1048 | BIO_printf(bio_err,"rc2 "); | 1094 | BIO_printf(bio_err, "rc2 "); |
| 1049 | #endif | 1095 | #endif |
| 1050 | #ifndef OPENSSL_NO_DES | 1096 | #ifndef OPENSSL_NO_DES |
| 1051 | BIO_printf(bio_err,"des "); | 1097 | BIO_printf(bio_err, "des "); |
| 1052 | #endif | 1098 | #endif |
| 1053 | #ifndef OPENSSL_NO_AES | 1099 | #ifndef OPENSSL_NO_AES |
| 1054 | BIO_printf(bio_err,"aes "); | 1100 | BIO_printf(bio_err, "aes "); |
| 1055 | #endif | 1101 | #endif |
| 1056 | #ifndef OPENSSL_NO_CAMELLIA | 1102 | #ifndef OPENSSL_NO_CAMELLIA |
| 1057 | BIO_printf(bio_err,"camellia "); | 1103 | BIO_printf(bio_err, "camellia "); |
| 1058 | #endif | 1104 | #endif |
| 1059 | #ifndef OPENSSL_NO_RSA | 1105 | #ifndef OPENSSL_NO_RSA |
| 1060 | BIO_printf(bio_err,"rsa "); | 1106 | BIO_printf(bio_err, "rsa "); |
| 1061 | #endif | 1107 | #endif |
| 1062 | #ifndef OPENSSL_NO_BF | 1108 | #ifndef OPENSSL_NO_BF |
| 1063 | BIO_printf(bio_err,"blowfish"); | 1109 | BIO_printf(bio_err, "blowfish"); |
| 1064 | #endif | 1110 | #endif |
| 1065 | #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || \ | 1111 | #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || \ |
| 1066 | !defined(OPENSSL_NO_RC2) || !defined(OPENSSL_NO_DES) || \ | 1112 | !defined(OPENSSL_NO_RC2) || !defined(OPENSSL_NO_DES) || \ |
| 1067 | !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_BF) || \ | 1113 | !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_BF) || \ |
| 1068 | !defined(OPENSSL_NO_AES) || !defined(OPENSSL_NO_CAMELLIA) | 1114 | !defined(OPENSSL_NO_AES) || !defined(OPENSSL_NO_CAMELLIA) |
| 1069 | BIO_printf(bio_err,"\n"); | 1115 | BIO_printf(bio_err, "\n"); |
| 1070 | #endif | 1116 | #endif |
| 1071 | 1117 | ||
| 1072 | BIO_printf(bio_err,"\n"); | 1118 | BIO_printf(bio_err, "\n"); |
| 1073 | BIO_printf(bio_err,"Available options:\n"); | 1119 | BIO_printf(bio_err, "Available options:\n"); |
| 1074 | #if defined(TIMES) || defined(USE_TOD) | 1120 | #if defined(TIMES) || defined(USE_TOD) |
| 1075 | BIO_printf(bio_err,"-elapsed measure time in real time instead of CPU user time.\n"); | 1121 | BIO_printf(bio_err, "-elapsed measure time in real time instead of CPU user time.\n"); |
| 1076 | #endif | 1122 | #endif |
| 1077 | #ifndef OPENSSL_NO_ENGINE | 1123 | #ifndef OPENSSL_NO_ENGINE |
| 1078 | BIO_printf(bio_err,"-engine e use engine e, possibly a hardware device.\n"); | 1124 | BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n"); |
| 1079 | #endif | 1125 | #endif |
| 1080 | BIO_printf(bio_err,"-evp e use EVP e.\n"); | 1126 | BIO_printf(bio_err, "-evp e use EVP e.\n"); |
| 1081 | BIO_printf(bio_err,"-decrypt time decryption instead of encryption (only EVP).\n"); | 1127 | BIO_printf(bio_err, "-decrypt time decryption instead of encryption (only EVP).\n"); |
| 1082 | BIO_printf(bio_err,"-mr produce machine readable output.\n"); | 1128 | BIO_printf(bio_err, "-mr produce machine readable output.\n"); |
| 1083 | #ifndef NO_FORK | 1129 | #ifndef NO_FORK |
| 1084 | BIO_printf(bio_err,"-multi n run n benchmarks in parallel.\n"); | 1130 | BIO_printf(bio_err, "-multi n run n benchmarks in parallel.\n"); |
| 1085 | #endif | 1131 | #endif |
| 1086 | goto end; | 1132 | goto end; |
| 1087 | } | 1133 | } |
| 1088 | argc--; | 1134 | argc--; |
| 1089 | argv++; | 1135 | argv++; |
| 1090 | j++; | 1136 | j++; |
| 1091 | } | 1137 | } |
| 1092 | 1138 | ||
| 1093 | #ifndef NO_FORK | 1139 | #ifndef NO_FORK |
| 1094 | if(multi && do_multi(multi)) | 1140 | if (multi && do_multi(multi)) |
| 1095 | goto show_res; | 1141 | goto show_res; |
| 1096 | #endif | 1142 | #endif |
| 1097 | 1143 | ||
| 1098 | if (j == 0) | 1144 | if (j == 0) { |
| 1099 | { | 1145 | for (i = 0; i < ALGOR_NUM; i++) { |
| 1100 | for (i=0; i<ALGOR_NUM; i++) | ||
| 1101 | { | ||
| 1102 | if (i != D_EVP) | 1146 | if (i != D_EVP) |
| 1103 | doit[i]=1; | 1147 | doit[i] = 1; |
| 1104 | } | 1148 | } |
| 1105 | for (i=0; i<RSA_NUM; i++) | 1149 | for (i = 0; i < RSA_NUM; i++) |
| 1106 | rsa_doit[i]=1; | 1150 | rsa_doit[i] = 1; |
| 1107 | for (i=0; i<DSA_NUM; i++) | 1151 | for (i = 0; i < DSA_NUM; i++) |
| 1108 | dsa_doit[i]=1; | 1152 | dsa_doit[i] = 1; |
| 1109 | #ifndef OPENSSL_NO_ECDSA | 1153 | #ifndef OPENSSL_NO_ECDSA |
| 1110 | for (i=0; i<EC_NUM; i++) | 1154 | for (i = 0; i < EC_NUM; i++) |
| 1111 | ecdsa_doit[i]=1; | 1155 | ecdsa_doit[i] = 1; |
| 1112 | #endif | 1156 | #endif |
| 1113 | #ifndef OPENSSL_NO_ECDH | 1157 | #ifndef OPENSSL_NO_ECDH |
| 1114 | for (i=0; i<EC_NUM; i++) | 1158 | for (i = 0; i < EC_NUM; i++) |
| 1115 | ecdh_doit[i]=1; | 1159 | ecdh_doit[i] = 1; |
| 1116 | #endif | 1160 | #endif |
| 1117 | } | 1161 | } |
| 1118 | for (i=0; i<ALGOR_NUM; i++) | 1162 | for (i = 0; i < ALGOR_NUM; i++) |
| 1119 | if (doit[i]) pr_header++; | 1163 | if (doit[i]) |
| 1164 | pr_header++; | ||
| 1120 | 1165 | ||
| 1121 | if (usertime == 0 && !mr) | 1166 | if (usertime == 0 && !mr) |
| 1122 | BIO_printf(bio_err,"You have chosen to measure elapsed time instead of user CPU time.\n"); | 1167 | BIO_printf(bio_err, "You have chosen to measure elapsed time instead of user CPU time.\n"); |
| 1123 | 1168 | ||
| 1124 | #ifndef OPENSSL_NO_RSA | 1169 | #ifndef OPENSSL_NO_RSA |
| 1125 | for (i=0; i<RSA_NUM; i++) | 1170 | for (i = 0; i < RSA_NUM; i++) { |
| 1126 | { | ||
| 1127 | const unsigned char *p; | 1171 | const unsigned char *p; |
| 1128 | 1172 | ||
| 1129 | p=rsa_data[i]; | 1173 | p = rsa_data[i]; |
| 1130 | rsa_key[i]=d2i_RSAPrivateKey(NULL,&p,rsa_data_length[i]); | 1174 | rsa_key[i] = d2i_RSAPrivateKey(NULL, &p, rsa_data_length[i]); |
| 1131 | if (rsa_key[i] == NULL) | 1175 | if (rsa_key[i] == NULL) { |
| 1132 | { | 1176 | BIO_printf(bio_err, "internal error loading RSA key number %d\n", i); |
| 1133 | BIO_printf(bio_err,"internal error loading RSA key number %d\n",i); | ||
| 1134 | goto end; | 1177 | goto end; |
| 1135 | } | 1178 | } |
| 1136 | #if 0 | 1179 | #if 0 |
| 1137 | else | 1180 | else { |
| 1138 | { | 1181 | BIO_printf(bio_err, mr ? "+RK:%d:" |
| 1139 | BIO_printf(bio_err,mr ? "+RK:%d:" | 1182 | : "Loaded RSA key, %d bit modulus and e= 0x", |
| 1140 | : "Loaded RSA key, %d bit modulus and e= 0x", | 1183 | BN_num_bits(rsa_key[i]->n)); |
| 1141 | BN_num_bits(rsa_key[i]->n)); | 1184 | BN_print(bio_err, rsa_key[i]->e); |
| 1142 | BN_print(bio_err,rsa_key[i]->e); | 1185 | BIO_printf(bio_err, "\n"); |
| 1143 | BIO_printf(bio_err,"\n"); | ||
| 1144 | } | ||
| 1145 | #endif | ||
| 1146 | } | 1186 | } |
| 1147 | #endif | 1187 | #endif |
| 1188 | } | ||
| 1189 | #endif | ||
| 1148 | 1190 | ||
| 1149 | #ifndef OPENSSL_NO_DSA | 1191 | #ifndef OPENSSL_NO_DSA |
| 1150 | dsa_key[0]=get_dsa512(); | 1192 | dsa_key[0] = get_dsa512(); |
| 1151 | dsa_key[1]=get_dsa1024(); | 1193 | dsa_key[1] = get_dsa1024(); |
| 1152 | dsa_key[2]=get_dsa2048(); | 1194 | dsa_key[2] = get_dsa2048(); |
| 1153 | #endif | 1195 | #endif |
| 1154 | 1196 | ||
| 1155 | #ifndef OPENSSL_NO_DES | 1197 | #ifndef OPENSSL_NO_DES |
| 1156 | DES_set_key_unchecked(&key,&sch); | 1198 | DES_set_key_unchecked(&key, &sch); |
| 1157 | DES_set_key_unchecked(&key2,&sch2); | 1199 | DES_set_key_unchecked(&key2, &sch2); |
| 1158 | DES_set_key_unchecked(&key3,&sch3); | 1200 | DES_set_key_unchecked(&key3, &sch3); |
| 1159 | #endif | 1201 | #endif |
| 1160 | #ifndef OPENSSL_NO_AES | 1202 | #ifndef OPENSSL_NO_AES |
| 1161 | AES_set_encrypt_key(key16,128,&aes_ks1); | 1203 | AES_set_encrypt_key(key16, 128, &aes_ks1); |
| 1162 | AES_set_encrypt_key(key24,192,&aes_ks2); | 1204 | AES_set_encrypt_key(key24, 192, &aes_ks2); |
| 1163 | AES_set_encrypt_key(key32,256,&aes_ks3); | 1205 | AES_set_encrypt_key(key32, 256, &aes_ks3); |
| 1164 | #endif | 1206 | #endif |
| 1165 | #ifndef OPENSSL_NO_CAMELLIA | 1207 | #ifndef OPENSSL_NO_CAMELLIA |
| 1166 | Camellia_set_key(key16,128,&camellia_ks1); | 1208 | Camellia_set_key(key16, 128, &camellia_ks1); |
| 1167 | Camellia_set_key(ckey24,192,&camellia_ks2); | 1209 | Camellia_set_key(ckey24, 192, &camellia_ks2); |
| 1168 | Camellia_set_key(ckey32,256,&camellia_ks3); | 1210 | Camellia_set_key(ckey32, 256, &camellia_ks3); |
| 1169 | #endif | 1211 | #endif |
| 1170 | #ifndef OPENSSL_NO_IDEA | 1212 | #ifndef OPENSSL_NO_IDEA |
| 1171 | idea_set_encrypt_key(key16,&idea_ks); | 1213 | idea_set_encrypt_key(key16, &idea_ks); |
| 1172 | #endif | 1214 | #endif |
| 1173 | #ifndef OPENSSL_NO_SEED | 1215 | #ifndef OPENSSL_NO_SEED |
| 1174 | SEED_set_key(key16,&seed_ks); | 1216 | SEED_set_key(key16, &seed_ks); |
| 1175 | #endif | 1217 | #endif |
| 1176 | #ifndef OPENSSL_NO_RC4 | 1218 | #ifndef OPENSSL_NO_RC4 |
| 1177 | RC4_set_key(&rc4_ks,16,key16); | 1219 | RC4_set_key(&rc4_ks, 16, key16); |
| 1178 | #endif | 1220 | #endif |
| 1179 | #ifndef OPENSSL_NO_RC2 | 1221 | #ifndef OPENSSL_NO_RC2 |
| 1180 | RC2_set_key(&rc2_ks,16,key16,128); | 1222 | RC2_set_key(&rc2_ks, 16, key16, 128); |
| 1181 | #endif | 1223 | #endif |
| 1182 | #ifndef OPENSSL_NO_RC5 | 1224 | #ifndef OPENSSL_NO_RC5 |
| 1183 | RC5_32_set_key(&rc5_ks,16,key16,12); | 1225 | RC5_32_set_key(&rc5_ks, 16, key16, 12); |
| 1184 | #endif | 1226 | #endif |
| 1185 | #ifndef OPENSSL_NO_BF | 1227 | #ifndef OPENSSL_NO_BF |
| 1186 | BF_set_key(&bf_ks,16,key16); | 1228 | BF_set_key(&bf_ks, 16, key16); |
| 1187 | #endif | 1229 | #endif |
| 1188 | #ifndef OPENSSL_NO_CAST | 1230 | #ifndef OPENSSL_NO_CAST |
| 1189 | CAST_set_key(&cast_ks,16,key16); | 1231 | CAST_set_key(&cast_ks, 16, key16); |
| 1190 | #endif | 1232 | #endif |
| 1191 | #ifndef OPENSSL_NO_RSA | 1233 | #ifndef OPENSSL_NO_RSA |
| 1192 | memset(rsa_c,0,sizeof(rsa_c)); | 1234 | memset(rsa_c, 0, sizeof(rsa_c)); |
| 1193 | #endif | 1235 | #endif |
| 1194 | #ifndef SIGALRM | 1236 | #ifndef SIGALRM |
| 1195 | #ifndef OPENSSL_NO_DES | 1237 | #ifndef OPENSSL_NO_DES |
| 1196 | BIO_printf(bio_err,"First we calculate the approximate speed ...\n"); | 1238 | BIO_printf(bio_err, "First we calculate the approximate speed ...\n"); |
| 1197 | count=10; | 1239 | count = 10; |
| 1198 | do { | 1240 | do { |
| 1199 | long it; | 1241 | long it; |
| 1200 | count*=2; | 1242 | count *= 2; |
| 1201 | Time_F(START); | 1243 | Time_F(START); |
| 1202 | for (it=count; it; it--) | 1244 | for (it = count; it; it--) |
| 1203 | DES_ecb_encrypt((DES_cblock *)buf, | 1245 | DES_ecb_encrypt((DES_cblock *) buf, |
| 1204 | (DES_cblock *)buf, | 1246 | (DES_cblock *) buf, |
| 1205 | &sch,DES_ENCRYPT); | 1247 | &sch, DES_ENCRYPT); |
| 1206 | d=Time_F(STOP); | 1248 | d = Time_F(STOP); |
| 1207 | } while (d <3); | 1249 | } while (d < 3); |
| 1208 | save_count=count; | 1250 | save_count = count; |
| 1209 | c[D_MD2][0]=count/10; | 1251 | c[D_MD2][0] = count / 10; |
| 1210 | c[D_MDC2][0]=count/10; | 1252 | c[D_MDC2][0] = count / 10; |
| 1211 | c[D_MD4][0]=count; | 1253 | c[D_MD4][0] = count; |
| 1212 | c[D_MD5][0]=count; | 1254 | c[D_MD5][0] = count; |
| 1213 | c[D_HMAC][0]=count; | 1255 | c[D_HMAC][0] = count; |
| 1214 | c[D_SHA1][0]=count; | 1256 | c[D_SHA1][0] = count; |
| 1215 | c[D_RMD160][0]=count; | 1257 | c[D_RMD160][0] = count; |
| 1216 | c[D_RC4][0]=count*5; | 1258 | c[D_RC4][0] = count * 5; |
| 1217 | c[D_CBC_DES][0]=count; | 1259 | c[D_CBC_DES][0] = count; |
| 1218 | c[D_EDE3_DES][0]=count/3; | 1260 | c[D_EDE3_DES][0] = count / 3; |
| 1219 | c[D_CBC_IDEA][0]=count; | 1261 | c[D_CBC_IDEA][0] = count; |
| 1220 | c[D_CBC_SEED][0]=count; | 1262 | c[D_CBC_SEED][0] = count; |
| 1221 | c[D_CBC_RC2][0]=count; | 1263 | c[D_CBC_RC2][0] = count; |
| 1222 | c[D_CBC_RC5][0]=count; | 1264 | c[D_CBC_RC5][0] = count; |
| 1223 | c[D_CBC_BF][0]=count; | 1265 | c[D_CBC_BF][0] = count; |
| 1224 | c[D_CBC_CAST][0]=count; | 1266 | c[D_CBC_CAST][0] = count; |
| 1225 | c[D_CBC_128_AES][0]=count; | 1267 | c[D_CBC_128_AES][0] = count; |
| 1226 | c[D_CBC_192_AES][0]=count; | 1268 | c[D_CBC_192_AES][0] = count; |
| 1227 | c[D_CBC_256_AES][0]=count; | 1269 | c[D_CBC_256_AES][0] = count; |
| 1228 | c[D_CBC_128_CML][0]=count; | 1270 | c[D_CBC_128_CML][0] = count; |
| 1229 | c[D_CBC_192_CML][0]=count; | 1271 | c[D_CBC_192_CML][0] = count; |
| 1230 | c[D_CBC_256_CML][0]=count; | 1272 | c[D_CBC_256_CML][0] = count; |
| 1231 | c[D_SHA256][0]=count; | 1273 | c[D_SHA256][0] = count; |
| 1232 | c[D_SHA512][0]=count; | 1274 | c[D_SHA512][0] = count; |
| 1233 | c[D_WHIRLPOOL][0]=count; | 1275 | c[D_WHIRLPOOL][0] = count; |
| 1234 | c[D_IGE_128_AES][0]=count; | 1276 | c[D_IGE_128_AES][0] = count; |
| 1235 | c[D_IGE_192_AES][0]=count; | 1277 | c[D_IGE_192_AES][0] = count; |
| 1236 | c[D_IGE_256_AES][0]=count; | 1278 | c[D_IGE_256_AES][0] = count; |
| 1237 | c[D_GHASH][0]=count; | 1279 | c[D_GHASH][0] = count; |
| 1238 | 1280 | ||
| 1239 | for (i=1; i<SIZE_NUM; i++) | 1281 | for (i = 1; i < SIZE_NUM; i++) { |
| 1240 | { | 1282 | c[D_MD2][i] = c[D_MD2][0] * 4 * lengths[0] / lengths[i]; |
| 1241 | c[D_MD2][i]=c[D_MD2][0]*4*lengths[0]/lengths[i]; | 1283 | c[D_MDC2][i] = c[D_MDC2][0] * 4 * lengths[0] / lengths[i]; |
| 1242 | c[D_MDC2][i]=c[D_MDC2][0]*4*lengths[0]/lengths[i]; | 1284 | c[D_MD4][i] = c[D_MD4][0] * 4 * lengths[0] / lengths[i]; |
| 1243 | c[D_MD4][i]=c[D_MD4][0]*4*lengths[0]/lengths[i]; | 1285 | c[D_MD5][i] = c[D_MD5][0] * 4 * lengths[0] / lengths[i]; |
| 1244 | c[D_MD5][i]=c[D_MD5][0]*4*lengths[0]/lengths[i]; | 1286 | c[D_HMAC][i] = c[D_HMAC][0] * 4 * lengths[0] / lengths[i]; |
| 1245 | c[D_HMAC][i]=c[D_HMAC][0]*4*lengths[0]/lengths[i]; | 1287 | c[D_SHA1][i] = c[D_SHA1][0] * 4 * lengths[0] / lengths[i]; |
| 1246 | c[D_SHA1][i]=c[D_SHA1][0]*4*lengths[0]/lengths[i]; | 1288 | c[D_RMD160][i] = c[D_RMD160][0] * 4 * lengths[0] / lengths[i]; |
| 1247 | c[D_RMD160][i]=c[D_RMD160][0]*4*lengths[0]/lengths[i]; | 1289 | c[D_SHA256][i] = c[D_SHA256][0] * 4 * lengths[0] / lengths[i]; |
| 1248 | c[D_SHA256][i]=c[D_SHA256][0]*4*lengths[0]/lengths[i]; | 1290 | c[D_SHA512][i] = c[D_SHA512][0] * 4 * lengths[0] / lengths[i]; |
| 1249 | c[D_SHA512][i]=c[D_SHA512][0]*4*lengths[0]/lengths[i]; | 1291 | c[D_WHIRLPOOL][i] = c[D_WHIRLPOOL][0] * 4 * lengths[0] / lengths[i]; |
| 1250 | c[D_WHIRLPOOL][i]=c[D_WHIRLPOOL][0]*4*lengths[0]/lengths[i]; | 1292 | } |
| 1251 | } | 1293 | for (i = 1; i < SIZE_NUM; i++) { |
| 1252 | for (i=1; i<SIZE_NUM; i++) | 1294 | long l0, l1; |
| 1253 | { | 1295 | |
| 1254 | long l0,l1; | 1296 | l0 = (long) lengths[i - 1]; |
| 1255 | 1297 | l1 = (long) lengths[i]; | |
| 1256 | l0=(long)lengths[i-1]; | 1298 | c[D_RC4][i] = c[D_RC4][i - 1] * l0 / l1; |
| 1257 | l1=(long)lengths[i]; | 1299 | c[D_CBC_DES][i] = c[D_CBC_DES][i - 1] * l0 / l1; |
| 1258 | c[D_RC4][i]=c[D_RC4][i-1]*l0/l1; | 1300 | c[D_EDE3_DES][i] = c[D_EDE3_DES][i - 1] * l0 / l1; |
| 1259 | c[D_CBC_DES][i]=c[D_CBC_DES][i-1]*l0/l1; | 1301 | c[D_CBC_IDEA][i] = c[D_CBC_IDEA][i - 1] * l0 / l1; |
| 1260 | c[D_EDE3_DES][i]=c[D_EDE3_DES][i-1]*l0/l1; | 1302 | c[D_CBC_SEED][i] = c[D_CBC_SEED][i - 1] * l0 / l1; |
| 1261 | c[D_CBC_IDEA][i]=c[D_CBC_IDEA][i-1]*l0/l1; | 1303 | c[D_CBC_RC2][i] = c[D_CBC_RC2][i - 1] * l0 / l1; |
| 1262 | c[D_CBC_SEED][i]=c[D_CBC_SEED][i-1]*l0/l1; | 1304 | c[D_CBC_RC5][i] = c[D_CBC_RC5][i - 1] * l0 / l1; |
| 1263 | c[D_CBC_RC2][i]=c[D_CBC_RC2][i-1]*l0/l1; | 1305 | c[D_CBC_BF][i] = c[D_CBC_BF][i - 1] * l0 / l1; |
| 1264 | c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1; | 1306 | c[D_CBC_CAST][i] = c[D_CBC_CAST][i - 1] * l0 / l1; |
| 1265 | c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1; | 1307 | c[D_CBC_128_AES][i] = c[D_CBC_128_AES][i - 1] * l0 / l1; |
| 1266 | c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1; | 1308 | c[D_CBC_192_AES][i] = c[D_CBC_192_AES][i - 1] * l0 / l1; |
| 1267 | c[D_CBC_128_AES][i]=c[D_CBC_128_AES][i-1]*l0/l1; | 1309 | c[D_CBC_256_AES][i] = c[D_CBC_256_AES][i - 1] * l0 / l1; |
| 1268 | c[D_CBC_192_AES][i]=c[D_CBC_192_AES][i-1]*l0/l1; | 1310 | c[D_CBC_128_CML][i] = c[D_CBC_128_CML][i - 1] * l0 / l1; |
| 1269 | c[D_CBC_256_AES][i]=c[D_CBC_256_AES][i-1]*l0/l1; | 1311 | c[D_CBC_192_CML][i] = c[D_CBC_192_CML][i - 1] * l0 / l1; |
| 1270 | c[D_CBC_128_CML][i]=c[D_CBC_128_CML][i-1]*l0/l1; | 1312 | c[D_CBC_256_CML][i] = c[D_CBC_256_CML][i - 1] * l0 / l1; |
| 1271 | c[D_CBC_192_CML][i]=c[D_CBC_192_CML][i-1]*l0/l1; | 1313 | c[D_IGE_128_AES][i] = c[D_IGE_128_AES][i - 1] * l0 / l1; |
| 1272 | c[D_CBC_256_CML][i]=c[D_CBC_256_CML][i-1]*l0/l1; | 1314 | c[D_IGE_192_AES][i] = c[D_IGE_192_AES][i - 1] * l0 / l1; |
| 1273 | c[D_IGE_128_AES][i]=c[D_IGE_128_AES][i-1]*l0/l1; | 1315 | c[D_IGE_256_AES][i] = c[D_IGE_256_AES][i - 1] * l0 / l1; |
| 1274 | c[D_IGE_192_AES][i]=c[D_IGE_192_AES][i-1]*l0/l1; | 1316 | } |
| 1275 | c[D_IGE_256_AES][i]=c[D_IGE_256_AES][i-1]*l0/l1; | ||
| 1276 | } | ||
| 1277 | #ifndef OPENSSL_NO_RSA | 1317 | #ifndef OPENSSL_NO_RSA |
| 1278 | rsa_c[R_RSA_512][0]=count/2000; | 1318 | rsa_c[R_RSA_512][0] = count / 2000; |
| 1279 | rsa_c[R_RSA_512][1]=count/400; | 1319 | rsa_c[R_RSA_512][1] = count / 400; |
| 1280 | for (i=1; i<RSA_NUM; i++) | 1320 | for (i = 1; i < RSA_NUM; i++) { |
| 1281 | { | 1321 | rsa_c[i][0] = rsa_c[i - 1][0] / 8; |
| 1282 | rsa_c[i][0]=rsa_c[i-1][0]/8; | 1322 | rsa_c[i][1] = rsa_c[i - 1][1] / 4; |
| 1283 | rsa_c[i][1]=rsa_c[i-1][1]/4; | ||
| 1284 | if ((rsa_doit[i] <= 1) && (rsa_c[i][0] == 0)) | 1323 | if ((rsa_doit[i] <= 1) && (rsa_c[i][0] == 0)) |
| 1285 | rsa_doit[i]=0; | 1324 | rsa_doit[i] = 0; |
| 1286 | else | 1325 | else { |
| 1287 | { | 1326 | if (rsa_c[i][0] == 0) { |
| 1288 | if (rsa_c[i][0] == 0) | 1327 | rsa_c[i][0] = 1; |
| 1289 | { | 1328 | rsa_c[i][1] = 20; |
| 1290 | rsa_c[i][0]=1; | 1329 | } |
| 1291 | rsa_c[i][1]=20; | ||
| 1292 | } | ||
| 1293 | } | ||
| 1294 | } | 1330 | } |
| 1331 | } | ||
| 1295 | #endif | 1332 | #endif |
| 1296 | 1333 | ||
| 1297 | #ifndef OPENSSL_NO_DSA | 1334 | #ifndef OPENSSL_NO_DSA |
| 1298 | dsa_c[R_DSA_512][0]=count/1000; | 1335 | dsa_c[R_DSA_512][0] = count / 1000; |
| 1299 | dsa_c[R_DSA_512][1]=count/1000/2; | 1336 | dsa_c[R_DSA_512][1] = count / 1000 / 2; |
| 1300 | for (i=1; i<DSA_NUM; i++) | 1337 | for (i = 1; i < DSA_NUM; i++) { |
| 1301 | { | 1338 | dsa_c[i][0] = dsa_c[i - 1][0] / 4; |
| 1302 | dsa_c[i][0]=dsa_c[i-1][0]/4; | 1339 | dsa_c[i][1] = dsa_c[i - 1][1] / 4; |
| 1303 | dsa_c[i][1]=dsa_c[i-1][1]/4; | ||
| 1304 | if ((dsa_doit[i] <= 1) && (dsa_c[i][0] == 0)) | 1340 | if ((dsa_doit[i] <= 1) && (dsa_c[i][0] == 0)) |
| 1305 | dsa_doit[i]=0; | 1341 | dsa_doit[i] = 0; |
| 1306 | else | 1342 | else { |
| 1307 | { | 1343 | if (dsa_c[i] == 0) { |
| 1308 | if (dsa_c[i] == 0) | 1344 | dsa_c[i][0] = 1; |
| 1309 | { | 1345 | dsa_c[i][1] = 1; |
| 1310 | dsa_c[i][0]=1; | 1346 | } |
| 1311 | dsa_c[i][1]=1; | ||
| 1312 | } | ||
| 1313 | } | ||
| 1314 | } | 1347 | } |
| 1348 | } | ||
| 1315 | #endif | 1349 | #endif |
| 1316 | 1350 | ||
| 1317 | #ifndef OPENSSL_NO_ECDSA | 1351 | #ifndef OPENSSL_NO_ECDSA |
| 1318 | ecdsa_c[R_EC_P160][0]=count/1000; | 1352 | ecdsa_c[R_EC_P160][0] = count / 1000; |
| 1319 | ecdsa_c[R_EC_P160][1]=count/1000/2; | 1353 | ecdsa_c[R_EC_P160][1] = count / 1000 / 2; |
| 1320 | for (i=R_EC_P192; i<=R_EC_P521; i++) | 1354 | for (i = R_EC_P192; i <= R_EC_P521; i++) { |
| 1321 | { | 1355 | ecdsa_c[i][0] = ecdsa_c[i - 1][0] / 2; |
| 1322 | ecdsa_c[i][0]=ecdsa_c[i-1][0]/2; | 1356 | ecdsa_c[i][1] = ecdsa_c[i - 1][1] / 2; |
| 1323 | ecdsa_c[i][1]=ecdsa_c[i-1][1]/2; | ||
| 1324 | if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0)) | 1357 | if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0)) |
| 1325 | ecdsa_doit[i]=0; | 1358 | ecdsa_doit[i] = 0; |
| 1326 | else | 1359 | else { |
| 1327 | { | 1360 | if (ecdsa_c[i] == 0) { |
| 1328 | if (ecdsa_c[i] == 0) | 1361 | ecdsa_c[i][0] = 1; |
| 1329 | { | 1362 | ecdsa_c[i][1] = 1; |
| 1330 | ecdsa_c[i][0]=1; | ||
| 1331 | ecdsa_c[i][1]=1; | ||
| 1332 | } | ||
| 1333 | } | 1363 | } |
| 1334 | } | 1364 | } |
| 1335 | ecdsa_c[R_EC_K163][0]=count/1000; | 1365 | } |
| 1336 | ecdsa_c[R_EC_K163][1]=count/1000/2; | 1366 | ecdsa_c[R_EC_K163][0] = count / 1000; |
| 1337 | for (i=R_EC_K233; i<=R_EC_K571; i++) | 1367 | ecdsa_c[R_EC_K163][1] = count / 1000 / 2; |
| 1338 | { | 1368 | for (i = R_EC_K233; i <= R_EC_K571; i++) { |
| 1339 | ecdsa_c[i][0]=ecdsa_c[i-1][0]/2; | 1369 | ecdsa_c[i][0] = ecdsa_c[i - 1][0] / 2; |
| 1340 | ecdsa_c[i][1]=ecdsa_c[i-1][1]/2; | 1370 | ecdsa_c[i][1] = ecdsa_c[i - 1][1] / 2; |
| 1341 | if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0)) | 1371 | if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0)) |
| 1342 | ecdsa_doit[i]=0; | 1372 | ecdsa_doit[i] = 0; |
| 1343 | else | 1373 | else { |
| 1344 | { | 1374 | if (ecdsa_c[i] == 0) { |
| 1345 | if (ecdsa_c[i] == 0) | 1375 | ecdsa_c[i][0] = 1; |
| 1346 | { | 1376 | ecdsa_c[i][1] = 1; |
| 1347 | ecdsa_c[i][0]=1; | ||
| 1348 | ecdsa_c[i][1]=1; | ||
| 1349 | } | ||
| 1350 | } | 1377 | } |
| 1351 | } | 1378 | } |
| 1352 | ecdsa_c[R_EC_B163][0]=count/1000; | 1379 | } |
| 1353 | ecdsa_c[R_EC_B163][1]=count/1000/2; | 1380 | ecdsa_c[R_EC_B163][0] = count / 1000; |
| 1354 | for (i=R_EC_B233; i<=R_EC_B571; i++) | 1381 | ecdsa_c[R_EC_B163][1] = count / 1000 / 2; |
| 1355 | { | 1382 | for (i = R_EC_B233; i <= R_EC_B571; i++) { |
| 1356 | ecdsa_c[i][0]=ecdsa_c[i-1][0]/2; | 1383 | ecdsa_c[i][0] = ecdsa_c[i - 1][0] / 2; |
| 1357 | ecdsa_c[i][1]=ecdsa_c[i-1][1]/2; | 1384 | ecdsa_c[i][1] = ecdsa_c[i - 1][1] / 2; |
| 1358 | if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0)) | 1385 | if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0)) |
| 1359 | ecdsa_doit[i]=0; | 1386 | ecdsa_doit[i] = 0; |
| 1360 | else | 1387 | else { |
| 1361 | { | 1388 | if (ecdsa_c[i] == 0) { |
| 1362 | if (ecdsa_c[i] == 0) | 1389 | ecdsa_c[i][0] = 1; |
| 1363 | { | 1390 | ecdsa_c[i][1] = 1; |
| 1364 | ecdsa_c[i][0]=1; | ||
| 1365 | ecdsa_c[i][1]=1; | ||
| 1366 | } | ||
| 1367 | } | 1391 | } |
| 1368 | } | 1392 | } |
| 1393 | } | ||
| 1369 | #endif | 1394 | #endif |
| 1370 | 1395 | ||
| 1371 | #ifndef OPENSSL_NO_ECDH | 1396 | #ifndef OPENSSL_NO_ECDH |
| 1372 | ecdh_c[R_EC_P160][0]=count/1000; | 1397 | ecdh_c[R_EC_P160][0] = count / 1000; |
| 1373 | ecdh_c[R_EC_P160][1]=count/1000; | 1398 | ecdh_c[R_EC_P160][1] = count / 1000; |
| 1374 | for (i=R_EC_P192; i<=R_EC_P521; i++) | 1399 | for (i = R_EC_P192; i <= R_EC_P521; i++) { |
| 1375 | { | 1400 | ecdh_c[i][0] = ecdh_c[i - 1][0] / 2; |
| 1376 | ecdh_c[i][0]=ecdh_c[i-1][0]/2; | 1401 | ecdh_c[i][1] = ecdh_c[i - 1][1] / 2; |
| 1377 | ecdh_c[i][1]=ecdh_c[i-1][1]/2; | ||
| 1378 | if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0)) | 1402 | if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0)) |
| 1379 | ecdh_doit[i]=0; | 1403 | ecdh_doit[i] = 0; |
| 1380 | else | 1404 | else { |
| 1381 | { | 1405 | if (ecdh_c[i] == 0) { |
| 1382 | if (ecdh_c[i] == 0) | 1406 | ecdh_c[i][0] = 1; |
| 1383 | { | 1407 | ecdh_c[i][1] = 1; |
| 1384 | ecdh_c[i][0]=1; | ||
| 1385 | ecdh_c[i][1]=1; | ||
| 1386 | } | ||
| 1387 | } | 1408 | } |
| 1388 | } | 1409 | } |
| 1389 | ecdh_c[R_EC_K163][0]=count/1000; | 1410 | } |
| 1390 | ecdh_c[R_EC_K163][1]=count/1000; | 1411 | ecdh_c[R_EC_K163][0] = count / 1000; |
| 1391 | for (i=R_EC_K233; i<=R_EC_K571; i++) | 1412 | ecdh_c[R_EC_K163][1] = count / 1000; |
| 1392 | { | 1413 | for (i = R_EC_K233; i <= R_EC_K571; i++) { |
| 1393 | ecdh_c[i][0]=ecdh_c[i-1][0]/2; | 1414 | ecdh_c[i][0] = ecdh_c[i - 1][0] / 2; |
| 1394 | ecdh_c[i][1]=ecdh_c[i-1][1]/2; | 1415 | ecdh_c[i][1] = ecdh_c[i - 1][1] / 2; |
| 1395 | if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0)) | 1416 | if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0)) |
| 1396 | ecdh_doit[i]=0; | 1417 | ecdh_doit[i] = 0; |
| 1397 | else | 1418 | else { |
| 1398 | { | 1419 | if (ecdh_c[i] == 0) { |
| 1399 | if (ecdh_c[i] == 0) | 1420 | ecdh_c[i][0] = 1; |
| 1400 | { | 1421 | ecdh_c[i][1] = 1; |
| 1401 | ecdh_c[i][0]=1; | ||
| 1402 | ecdh_c[i][1]=1; | ||
| 1403 | } | ||
| 1404 | } | 1422 | } |
| 1405 | } | 1423 | } |
| 1406 | ecdh_c[R_EC_B163][0]=count/1000; | 1424 | } |
| 1407 | ecdh_c[R_EC_B163][1]=count/1000; | 1425 | ecdh_c[R_EC_B163][0] = count / 1000; |
| 1408 | for (i=R_EC_B233; i<=R_EC_B571; i++) | 1426 | ecdh_c[R_EC_B163][1] = count / 1000; |
| 1409 | { | 1427 | for (i = R_EC_B233; i <= R_EC_B571; i++) { |
| 1410 | ecdh_c[i][0]=ecdh_c[i-1][0]/2; | 1428 | ecdh_c[i][0] = ecdh_c[i - 1][0] / 2; |
| 1411 | ecdh_c[i][1]=ecdh_c[i-1][1]/2; | 1429 | ecdh_c[i][1] = ecdh_c[i - 1][1] / 2; |
| 1412 | if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0)) | 1430 | if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0)) |
| 1413 | ecdh_doit[i]=0; | 1431 | ecdh_doit[i] = 0; |
| 1414 | else | 1432 | else { |
| 1415 | { | 1433 | if (ecdh_c[i] == 0) { |
| 1416 | if (ecdh_c[i] == 0) | 1434 | ecdh_c[i][0] = 1; |
| 1417 | { | 1435 | ecdh_c[i][1] = 1; |
| 1418 | ecdh_c[i][0]=1; | ||
| 1419 | ecdh_c[i][1]=1; | ||
| 1420 | } | ||
| 1421 | } | 1436 | } |
| 1422 | } | 1437 | } |
| 1438 | } | ||
| 1423 | #endif | 1439 | #endif |
| 1424 | 1440 | ||
| 1425 | #define COND(d) (count < (d)) | 1441 | #define COND(d) (count < (d)) |
| 1426 | #define COUNT(d) (d) | 1442 | #define COUNT(d) (d) |
| 1427 | #else | 1443 | #else |
| 1428 | /* not worth fixing */ | 1444 | /* not worth fixing */ |
| 1429 | # error "You cannot disable DES on systems without SIGALRM." | 1445 | #error "You cannot disable DES on systems without SIGALRM." |
| 1430 | #endif /* OPENSSL_NO_DES */ | 1446 | #endif /* OPENSSL_NO_DES */ |
| 1431 | #else | 1447 | #else |
| 1432 | #define COND(c) (run && count<0x7fffffff) | 1448 | #define COND(c) (run && count<0x7fffffff) |
| 1433 | #define COUNT(d) (count) | 1449 | #define COUNT(d) (count) |
| 1434 | signal(SIGALRM,sig_done); | 1450 | signal(SIGALRM, sig_done); |
| 1435 | #endif /* SIGALRM */ | 1451 | #endif /* SIGALRM */ |
| 1436 | 1452 | ||
| 1437 | #ifndef OPENSSL_NO_MD2 | 1453 | #ifndef OPENSSL_NO_MD2 |
| 1438 | if (doit[D_MD2]) | 1454 | if (doit[D_MD2]) { |
| 1439 | { | 1455 | for (j = 0; j < SIZE_NUM; j++) { |
| 1440 | for (j=0; j<SIZE_NUM; j++) | 1456 | print_message(names[D_MD2], c[D_MD2][j], lengths[j]); |
| 1441 | { | ||
| 1442 | print_message(names[D_MD2],c[D_MD2][j],lengths[j]); | ||
| 1443 | Time_F(START); | 1457 | Time_F(START); |
| 1444 | for (count=0,run=1; COND(c[D_MD2][j]); count++) | 1458 | for (count = 0, run = 1; COND(c[D_MD2][j]); count++) |
| 1445 | EVP_Digest(buf,(unsigned long)lengths[j],&(md2[0]),NULL,EVP_md2(),NULL); | 1459 | EVP_Digest(buf, (unsigned long) lengths[j], &(md2[0]), NULL, EVP_md2(), NULL); |
| 1446 | d=Time_F(STOP); | 1460 | d = Time_F(STOP); |
| 1447 | print_result(D_MD2,j,count,d); | 1461 | print_result(D_MD2, j, count, d); |
| 1448 | } | ||
| 1449 | } | 1462 | } |
| 1463 | } | ||
| 1450 | #endif | 1464 | #endif |
| 1451 | #ifndef OPENSSL_NO_MDC2 | 1465 | #ifndef OPENSSL_NO_MDC2 |
| 1452 | if (doit[D_MDC2]) | 1466 | if (doit[D_MDC2]) { |
| 1453 | { | 1467 | for (j = 0; j < SIZE_NUM; j++) { |
| 1454 | for (j=0; j<SIZE_NUM; j++) | 1468 | print_message(names[D_MDC2], c[D_MDC2][j], lengths[j]); |
| 1455 | { | ||
| 1456 | print_message(names[D_MDC2],c[D_MDC2][j],lengths[j]); | ||
| 1457 | Time_F(START); | 1469 | Time_F(START); |
| 1458 | for (count=0,run=1; COND(c[D_MDC2][j]); count++) | 1470 | for (count = 0, run = 1; COND(c[D_MDC2][j]); count++) |
| 1459 | EVP_Digest(buf,(unsigned long)lengths[j],&(mdc2[0]),NULL,EVP_mdc2(),NULL); | 1471 | EVP_Digest(buf, (unsigned long) lengths[j], &(mdc2[0]), NULL, EVP_mdc2(), NULL); |
| 1460 | d=Time_F(STOP); | 1472 | d = Time_F(STOP); |
| 1461 | print_result(D_MDC2,j,count,d); | 1473 | print_result(D_MDC2, j, count, d); |
| 1462 | } | ||
| 1463 | } | 1474 | } |
| 1475 | } | ||
| 1464 | #endif | 1476 | #endif |
| 1465 | 1477 | ||
| 1466 | #ifndef OPENSSL_NO_MD4 | 1478 | #ifndef OPENSSL_NO_MD4 |
| 1467 | if (doit[D_MD4]) | 1479 | if (doit[D_MD4]) { |
| 1468 | { | 1480 | for (j = 0; j < SIZE_NUM; j++) { |
| 1469 | for (j=0; j<SIZE_NUM; j++) | 1481 | print_message(names[D_MD4], c[D_MD4][j], lengths[j]); |
| 1470 | { | ||
| 1471 | print_message(names[D_MD4],c[D_MD4][j],lengths[j]); | ||
| 1472 | Time_F(START); | 1482 | Time_F(START); |
| 1473 | for (count=0,run=1; COND(c[D_MD4][j]); count++) | 1483 | for (count = 0, run = 1; COND(c[D_MD4][j]); count++) |
| 1474 | EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md4[0]),NULL,EVP_md4(),NULL); | 1484 | EVP_Digest(&(buf[0]), (unsigned long) lengths[j], &(md4[0]), NULL, EVP_md4(), NULL); |
| 1475 | d=Time_F(STOP); | 1485 | d = Time_F(STOP); |
| 1476 | print_result(D_MD4,j,count,d); | 1486 | print_result(D_MD4, j, count, d); |
| 1477 | } | ||
| 1478 | } | 1487 | } |
| 1488 | } | ||
| 1479 | #endif | 1489 | #endif |
| 1480 | 1490 | ||
| 1481 | #ifndef OPENSSL_NO_MD5 | 1491 | #ifndef OPENSSL_NO_MD5 |
| 1482 | if (doit[D_MD5]) | 1492 | if (doit[D_MD5]) { |
| 1483 | { | 1493 | for (j = 0; j < SIZE_NUM; j++) { |
| 1484 | for (j=0; j<SIZE_NUM; j++) | 1494 | print_message(names[D_MD5], c[D_MD5][j], lengths[j]); |
| 1485 | { | ||
| 1486 | print_message(names[D_MD5],c[D_MD5][j],lengths[j]); | ||
| 1487 | Time_F(START); | 1495 | Time_F(START); |
| 1488 | for (count=0,run=1; COND(c[D_MD5][j]); count++) | 1496 | for (count = 0, run = 1; COND(c[D_MD5][j]); count++) |
| 1489 | EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md5[0]),NULL,EVP_get_digestbyname("md5"),NULL); | 1497 | EVP_Digest(&(buf[0]), (unsigned long) lengths[j], &(md5[0]), NULL, EVP_get_digestbyname("md5"), NULL); |
| 1490 | d=Time_F(STOP); | 1498 | d = Time_F(STOP); |
| 1491 | print_result(D_MD5,j,count,d); | 1499 | print_result(D_MD5, j, count, d); |
| 1492 | } | ||
| 1493 | } | 1500 | } |
| 1501 | } | ||
| 1494 | #endif | 1502 | #endif |
| 1495 | 1503 | ||
| 1496 | #if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC) | 1504 | #if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC) |
| 1497 | if (doit[D_HMAC]) | 1505 | if (doit[D_HMAC]) { |
| 1498 | { | ||
| 1499 | HMAC_CTX hctx; | 1506 | HMAC_CTX hctx; |
| 1500 | 1507 | ||
| 1501 | HMAC_CTX_init(&hctx); | 1508 | HMAC_CTX_init(&hctx); |
| 1502 | HMAC_Init_ex(&hctx,(unsigned char *)"This is a key...", | 1509 | HMAC_Init_ex(&hctx, (unsigned char *) "This is a key...", |
| 1503 | 16,EVP_md5(), NULL); | 1510 | 16, EVP_md5(), NULL); |
| 1504 | 1511 | ||
| 1505 | for (j=0; j<SIZE_NUM; j++) | 1512 | for (j = 0; j < SIZE_NUM; j++) { |
| 1506 | { | 1513 | print_message(names[D_HMAC], c[D_HMAC][j], lengths[j]); |
| 1507 | print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]); | ||
| 1508 | Time_F(START); | 1514 | Time_F(START); |
| 1509 | for (count=0,run=1; COND(c[D_HMAC][j]); count++) | 1515 | for (count = 0, run = 1; COND(c[D_HMAC][j]); count++) { |
| 1510 | { | 1516 | HMAC_Init_ex(&hctx, NULL, 0, NULL, NULL); |
| 1511 | HMAC_Init_ex(&hctx,NULL,0,NULL,NULL); | 1517 | HMAC_Update(&hctx, buf, lengths[j]); |
| 1512 | HMAC_Update(&hctx,buf,lengths[j]); | 1518 | HMAC_Final(&hctx, &(hmac[0]), NULL); |
| 1513 | HMAC_Final(&hctx,&(hmac[0]),NULL); | ||
| 1514 | } | ||
| 1515 | d=Time_F(STOP); | ||
| 1516 | print_result(D_HMAC,j,count,d); | ||
| 1517 | } | 1519 | } |
| 1518 | HMAC_CTX_cleanup(&hctx); | 1520 | d = Time_F(STOP); |
| 1521 | print_result(D_HMAC, j, count, d); | ||
| 1519 | } | 1522 | } |
| 1523 | HMAC_CTX_cleanup(&hctx); | ||
| 1524 | } | ||
| 1520 | #endif | 1525 | #endif |
| 1521 | #ifndef OPENSSL_NO_SHA | 1526 | #ifndef OPENSSL_NO_SHA |
| 1522 | if (doit[D_SHA1]) | 1527 | if (doit[D_SHA1]) { |
| 1523 | { | 1528 | for (j = 0; j < SIZE_NUM; j++) { |
| 1524 | for (j=0; j<SIZE_NUM; j++) | 1529 | print_message(names[D_SHA1], c[D_SHA1][j], lengths[j]); |
| 1525 | { | ||
| 1526 | print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]); | ||
| 1527 | Time_F(START); | 1530 | Time_F(START); |
| 1528 | for (count=0,run=1; COND(c[D_SHA1][j]); count++) | 1531 | for (count = 0, run = 1; COND(c[D_SHA1][j]); count++) |
| 1529 | EVP_Digest(buf,(unsigned long)lengths[j],&(sha[0]),NULL,EVP_sha1(),NULL); | 1532 | EVP_Digest(buf, (unsigned long) lengths[j], &(sha[0]), NULL, EVP_sha1(), NULL); |
| 1530 | d=Time_F(STOP); | 1533 | d = Time_F(STOP); |
| 1531 | print_result(D_SHA1,j,count,d); | 1534 | print_result(D_SHA1, j, count, d); |
| 1532 | } | ||
| 1533 | } | 1535 | } |
| 1534 | 1536 | } | |
| 1535 | #ifndef OPENSSL_NO_SHA256 | 1537 | #ifndef OPENSSL_NO_SHA256 |
| 1536 | if (doit[D_SHA256]) | 1538 | if (doit[D_SHA256]) { |
| 1537 | { | 1539 | for (j = 0; j < SIZE_NUM; j++) { |
| 1538 | for (j=0; j<SIZE_NUM; j++) | 1540 | print_message(names[D_SHA256], c[D_SHA256][j], lengths[j]); |
| 1539 | { | ||
| 1540 | print_message(names[D_SHA256],c[D_SHA256][j],lengths[j]); | ||
| 1541 | Time_F(START); | 1541 | Time_F(START); |
| 1542 | for (count=0,run=1; COND(c[D_SHA256][j]); count++) | 1542 | for (count = 0, run = 1; COND(c[D_SHA256][j]); count++) |
| 1543 | SHA256(buf,lengths[j],sha256); | 1543 | SHA256(buf, lengths[j], sha256); |
| 1544 | d=Time_F(STOP); | 1544 | d = Time_F(STOP); |
| 1545 | print_result(D_SHA256,j,count,d); | 1545 | print_result(D_SHA256, j, count, d); |
| 1546 | } | ||
| 1547 | } | 1546 | } |
| 1547 | } | ||
| 1548 | #endif | 1548 | #endif |
| 1549 | 1549 | ||
| 1550 | #ifndef OPENSSL_NO_SHA512 | 1550 | #ifndef OPENSSL_NO_SHA512 |
| 1551 | if (doit[D_SHA512]) | 1551 | if (doit[D_SHA512]) { |
| 1552 | { | 1552 | for (j = 0; j < SIZE_NUM; j++) { |
| 1553 | for (j=0; j<SIZE_NUM; j++) | 1553 | print_message(names[D_SHA512], c[D_SHA512][j], lengths[j]); |
| 1554 | { | ||
| 1555 | print_message(names[D_SHA512],c[D_SHA512][j],lengths[j]); | ||
| 1556 | Time_F(START); | 1554 | Time_F(START); |
| 1557 | for (count=0,run=1; COND(c[D_SHA512][j]); count++) | 1555 | for (count = 0, run = 1; COND(c[D_SHA512][j]); count++) |
| 1558 | SHA512(buf,lengths[j],sha512); | 1556 | SHA512(buf, lengths[j], sha512); |
| 1559 | d=Time_F(STOP); | 1557 | d = Time_F(STOP); |
| 1560 | print_result(D_SHA512,j,count,d); | 1558 | print_result(D_SHA512, j, count, d); |
| 1561 | } | ||
| 1562 | } | 1559 | } |
| 1560 | } | ||
| 1563 | #endif | 1561 | #endif |
| 1564 | #endif | 1562 | #endif |
| 1565 | 1563 | ||
| 1566 | #ifndef OPENSSL_NO_WHIRLPOOL | 1564 | #ifndef OPENSSL_NO_WHIRLPOOL |
| 1567 | if (doit[D_WHIRLPOOL]) | 1565 | if (doit[D_WHIRLPOOL]) { |
| 1568 | { | 1566 | for (j = 0; j < SIZE_NUM; j++) { |
| 1569 | for (j=0; j<SIZE_NUM; j++) | 1567 | print_message(names[D_WHIRLPOOL], c[D_WHIRLPOOL][j], lengths[j]); |
| 1570 | { | ||
| 1571 | print_message(names[D_WHIRLPOOL],c[D_WHIRLPOOL][j],lengths[j]); | ||
| 1572 | Time_F(START); | 1568 | Time_F(START); |
| 1573 | for (count=0,run=1; COND(c[D_WHIRLPOOL][j]); count++) | 1569 | for (count = 0, run = 1; COND(c[D_WHIRLPOOL][j]); count++) |
| 1574 | WHIRLPOOL(buf,lengths[j],whirlpool); | 1570 | WHIRLPOOL(buf, lengths[j], whirlpool); |
| 1575 | d=Time_F(STOP); | 1571 | d = Time_F(STOP); |
| 1576 | print_result(D_WHIRLPOOL,j,count,d); | 1572 | print_result(D_WHIRLPOOL, j, count, d); |
| 1577 | } | ||
| 1578 | } | 1573 | } |
| 1574 | } | ||
| 1579 | #endif | 1575 | #endif |
| 1580 | 1576 | ||
| 1581 | #ifndef OPENSSL_NO_RIPEMD | 1577 | #ifndef OPENSSL_NO_RIPEMD |
| 1582 | if (doit[D_RMD160]) | 1578 | if (doit[D_RMD160]) { |
| 1583 | { | 1579 | for (j = 0; j < SIZE_NUM; j++) { |
| 1584 | for (j=0; j<SIZE_NUM; j++) | 1580 | print_message(names[D_RMD160], c[D_RMD160][j], lengths[j]); |
| 1585 | { | ||
| 1586 | print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]); | ||
| 1587 | Time_F(START); | 1581 | Time_F(START); |
| 1588 | for (count=0,run=1; COND(c[D_RMD160][j]); count++) | 1582 | for (count = 0, run = 1; COND(c[D_RMD160][j]); count++) |
| 1589 | EVP_Digest(buf,(unsigned long)lengths[j],&(rmd160[0]),NULL,EVP_ripemd160(),NULL); | 1583 | EVP_Digest(buf, (unsigned long) lengths[j], &(rmd160[0]), NULL, EVP_ripemd160(), NULL); |
| 1590 | d=Time_F(STOP); | 1584 | d = Time_F(STOP); |
| 1591 | print_result(D_RMD160,j,count,d); | 1585 | print_result(D_RMD160, j, count, d); |
| 1592 | } | ||
| 1593 | } | 1586 | } |
| 1587 | } | ||
| 1594 | #endif | 1588 | #endif |
| 1595 | #ifndef OPENSSL_NO_RC4 | 1589 | #ifndef OPENSSL_NO_RC4 |
| 1596 | if (doit[D_RC4]) | 1590 | if (doit[D_RC4]) { |
| 1597 | { | 1591 | for (j = 0; j < SIZE_NUM; j++) { |
| 1598 | for (j=0; j<SIZE_NUM; j++) | 1592 | print_message(names[D_RC4], c[D_RC4][j], lengths[j]); |
| 1599 | { | ||
| 1600 | print_message(names[D_RC4],c[D_RC4][j],lengths[j]); | ||
| 1601 | Time_F(START); | 1593 | Time_F(START); |
| 1602 | for (count=0,run=1; COND(c[D_RC4][j]); count++) | 1594 | for (count = 0, run = 1; COND(c[D_RC4][j]); count++) |
| 1603 | RC4(&rc4_ks,(unsigned int)lengths[j], | 1595 | RC4(&rc4_ks, (unsigned int) lengths[j], |
| 1604 | buf,buf); | 1596 | buf, buf); |
| 1605 | d=Time_F(STOP); | 1597 | d = Time_F(STOP); |
| 1606 | print_result(D_RC4,j,count,d); | 1598 | print_result(D_RC4, j, count, d); |
| 1607 | } | ||
| 1608 | } | 1599 | } |
| 1600 | } | ||
| 1609 | #endif | 1601 | #endif |
| 1610 | #ifndef OPENSSL_NO_DES | 1602 | #ifndef OPENSSL_NO_DES |
| 1611 | if (doit[D_CBC_DES]) | 1603 | if (doit[D_CBC_DES]) { |
| 1612 | { | 1604 | for (j = 0; j < SIZE_NUM; j++) { |
| 1613 | for (j=0; j<SIZE_NUM; j++) | 1605 | print_message(names[D_CBC_DES], c[D_CBC_DES][j], lengths[j]); |
| 1614 | { | ||
| 1615 | print_message(names[D_CBC_DES],c[D_CBC_DES][j],lengths[j]); | ||
| 1616 | Time_F(START); | 1606 | Time_F(START); |
| 1617 | for (count=0,run=1; COND(c[D_CBC_DES][j]); count++) | 1607 | for (count = 0, run = 1; COND(c[D_CBC_DES][j]); count++) |
| 1618 | DES_ncbc_encrypt(buf,buf,lengths[j],&sch, | 1608 | DES_ncbc_encrypt(buf, buf, lengths[j], &sch, |
| 1619 | &DES_iv,DES_ENCRYPT); | 1609 | &DES_iv, DES_ENCRYPT); |
| 1620 | d=Time_F(STOP); | 1610 | d = Time_F(STOP); |
| 1621 | print_result(D_CBC_DES,j,count,d); | 1611 | print_result(D_CBC_DES, j, count, d); |
| 1622 | } | ||
| 1623 | } | 1612 | } |
| 1624 | 1613 | } | |
| 1625 | if (doit[D_EDE3_DES]) | 1614 | if (doit[D_EDE3_DES]) { |
| 1626 | { | 1615 | for (j = 0; j < SIZE_NUM; j++) { |
| 1627 | for (j=0; j<SIZE_NUM; j++) | 1616 | print_message(names[D_EDE3_DES], c[D_EDE3_DES][j], lengths[j]); |
| 1628 | { | ||
| 1629 | print_message(names[D_EDE3_DES],c[D_EDE3_DES][j],lengths[j]); | ||
| 1630 | Time_F(START); | 1617 | Time_F(START); |
| 1631 | for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++) | 1618 | for (count = 0, run = 1; COND(c[D_EDE3_DES][j]); count++) |
| 1632 | DES_ede3_cbc_encrypt(buf,buf,lengths[j], | 1619 | DES_ede3_cbc_encrypt(buf, buf, lengths[j], |
| 1633 | &sch,&sch2,&sch3, | 1620 | &sch, &sch2, &sch3, |
| 1634 | &DES_iv,DES_ENCRYPT); | 1621 | &DES_iv, DES_ENCRYPT); |
| 1635 | d=Time_F(STOP); | 1622 | d = Time_F(STOP); |
| 1636 | print_result(D_EDE3_DES,j,count,d); | 1623 | print_result(D_EDE3_DES, j, count, d); |
| 1637 | } | ||
| 1638 | } | 1624 | } |
| 1625 | } | ||
| 1639 | #endif | 1626 | #endif |
| 1640 | #ifndef OPENSSL_NO_AES | 1627 | #ifndef OPENSSL_NO_AES |
| 1641 | if (doit[D_CBC_128_AES]) | 1628 | if (doit[D_CBC_128_AES]) { |
| 1642 | { | 1629 | for (j = 0; j < SIZE_NUM; j++) { |
| 1643 | for (j=0; j<SIZE_NUM; j++) | 1630 | print_message(names[D_CBC_128_AES], c[D_CBC_128_AES][j], lengths[j]); |
| 1644 | { | ||
| 1645 | print_message(names[D_CBC_128_AES],c[D_CBC_128_AES][j],lengths[j]); | ||
| 1646 | Time_F(START); | 1631 | Time_F(START); |
| 1647 | for (count=0,run=1; COND(c[D_CBC_128_AES][j]); count++) | 1632 | for (count = 0, run = 1; COND(c[D_CBC_128_AES][j]); count++) |
| 1648 | AES_cbc_encrypt(buf,buf, | 1633 | AES_cbc_encrypt(buf, buf, |
| 1649 | (unsigned long)lengths[j],&aes_ks1, | 1634 | (unsigned long) lengths[j], &aes_ks1, |
| 1650 | iv,AES_ENCRYPT); | 1635 | iv, AES_ENCRYPT); |
| 1651 | d=Time_F(STOP); | 1636 | d = Time_F(STOP); |
| 1652 | print_result(D_CBC_128_AES,j,count,d); | 1637 | print_result(D_CBC_128_AES, j, count, d); |
| 1653 | } | ||
| 1654 | } | 1638 | } |
| 1655 | if (doit[D_CBC_192_AES]) | 1639 | } |
| 1656 | { | 1640 | if (doit[D_CBC_192_AES]) { |
| 1657 | for (j=0; j<SIZE_NUM; j++) | 1641 | for (j = 0; j < SIZE_NUM; j++) { |
| 1658 | { | 1642 | print_message(names[D_CBC_192_AES], c[D_CBC_192_AES][j], lengths[j]); |
| 1659 | print_message(names[D_CBC_192_AES],c[D_CBC_192_AES][j],lengths[j]); | ||
| 1660 | Time_F(START); | 1643 | Time_F(START); |
| 1661 | for (count=0,run=1; COND(c[D_CBC_192_AES][j]); count++) | 1644 | for (count = 0, run = 1; COND(c[D_CBC_192_AES][j]); count++) |
| 1662 | AES_cbc_encrypt(buf,buf, | 1645 | AES_cbc_encrypt(buf, buf, |
| 1663 | (unsigned long)lengths[j],&aes_ks2, | 1646 | (unsigned long) lengths[j], &aes_ks2, |
| 1664 | iv,AES_ENCRYPT); | 1647 | iv, AES_ENCRYPT); |
| 1665 | d=Time_F(STOP); | 1648 | d = Time_F(STOP); |
| 1666 | print_result(D_CBC_192_AES,j,count,d); | 1649 | print_result(D_CBC_192_AES, j, count, d); |
| 1667 | } | ||
| 1668 | } | 1650 | } |
| 1669 | if (doit[D_CBC_256_AES]) | 1651 | } |
| 1670 | { | 1652 | if (doit[D_CBC_256_AES]) { |
| 1671 | for (j=0; j<SIZE_NUM; j++) | 1653 | for (j = 0; j < SIZE_NUM; j++) { |
| 1672 | { | 1654 | print_message(names[D_CBC_256_AES], c[D_CBC_256_AES][j], lengths[j]); |
| 1673 | print_message(names[D_CBC_256_AES],c[D_CBC_256_AES][j],lengths[j]); | ||
| 1674 | Time_F(START); | 1655 | Time_F(START); |
| 1675 | for (count=0,run=1; COND(c[D_CBC_256_AES][j]); count++) | 1656 | for (count = 0, run = 1; COND(c[D_CBC_256_AES][j]); count++) |
| 1676 | AES_cbc_encrypt(buf,buf, | 1657 | AES_cbc_encrypt(buf, buf, |
| 1677 | (unsigned long)lengths[j],&aes_ks3, | 1658 | (unsigned long) lengths[j], &aes_ks3, |
| 1678 | iv,AES_ENCRYPT); | 1659 | iv, AES_ENCRYPT); |
| 1679 | d=Time_F(STOP); | 1660 | d = Time_F(STOP); |
| 1680 | print_result(D_CBC_256_AES,j,count,d); | 1661 | print_result(D_CBC_256_AES, j, count, d); |
| 1681 | } | ||
| 1682 | } | 1662 | } |
| 1683 | 1663 | } | |
| 1684 | if (doit[D_IGE_128_AES]) | 1664 | if (doit[D_IGE_128_AES]) { |
| 1685 | { | 1665 | for (j = 0; j < SIZE_NUM; j++) { |
| 1686 | for (j=0; j<SIZE_NUM; j++) | 1666 | print_message(names[D_IGE_128_AES], c[D_IGE_128_AES][j], lengths[j]); |
| 1687 | { | ||
| 1688 | print_message(names[D_IGE_128_AES],c[D_IGE_128_AES][j],lengths[j]); | ||
| 1689 | Time_F(START); | 1667 | Time_F(START); |
| 1690 | for (count=0,run=1; COND(c[D_IGE_128_AES][j]); count++) | 1668 | for (count = 0, run = 1; COND(c[D_IGE_128_AES][j]); count++) |
| 1691 | AES_ige_encrypt(buf,buf2, | 1669 | AES_ige_encrypt(buf, buf2, |
| 1692 | (unsigned long)lengths[j],&aes_ks1, | 1670 | (unsigned long) lengths[j], &aes_ks1, |
| 1693 | iv,AES_ENCRYPT); | 1671 | iv, AES_ENCRYPT); |
| 1694 | d=Time_F(STOP); | 1672 | d = Time_F(STOP); |
| 1695 | print_result(D_IGE_128_AES,j,count,d); | 1673 | print_result(D_IGE_128_AES, j, count, d); |
| 1696 | } | ||
| 1697 | } | 1674 | } |
| 1698 | if (doit[D_IGE_192_AES]) | 1675 | } |
| 1699 | { | 1676 | if (doit[D_IGE_192_AES]) { |
| 1700 | for (j=0; j<SIZE_NUM; j++) | 1677 | for (j = 0; j < SIZE_NUM; j++) { |
| 1701 | { | 1678 | print_message(names[D_IGE_192_AES], c[D_IGE_192_AES][j], lengths[j]); |
| 1702 | print_message(names[D_IGE_192_AES],c[D_IGE_192_AES][j],lengths[j]); | ||
| 1703 | Time_F(START); | 1679 | Time_F(START); |
| 1704 | for (count=0,run=1; COND(c[D_IGE_192_AES][j]); count++) | 1680 | for (count = 0, run = 1; COND(c[D_IGE_192_AES][j]); count++) |
| 1705 | AES_ige_encrypt(buf,buf2, | 1681 | AES_ige_encrypt(buf, buf2, |
| 1706 | (unsigned long)lengths[j],&aes_ks2, | 1682 | (unsigned long) lengths[j], &aes_ks2, |
| 1707 | iv,AES_ENCRYPT); | 1683 | iv, AES_ENCRYPT); |
| 1708 | d=Time_F(STOP); | 1684 | d = Time_F(STOP); |
| 1709 | print_result(D_IGE_192_AES,j,count,d); | 1685 | print_result(D_IGE_192_AES, j, count, d); |
| 1710 | } | ||
| 1711 | } | 1686 | } |
| 1712 | if (doit[D_IGE_256_AES]) | 1687 | } |
| 1713 | { | 1688 | if (doit[D_IGE_256_AES]) { |
| 1714 | for (j=0; j<SIZE_NUM; j++) | 1689 | for (j = 0; j < SIZE_NUM; j++) { |
| 1715 | { | 1690 | print_message(names[D_IGE_256_AES], c[D_IGE_256_AES][j], lengths[j]); |
| 1716 | print_message(names[D_IGE_256_AES],c[D_IGE_256_AES][j],lengths[j]); | ||
| 1717 | Time_F(START); | 1691 | Time_F(START); |
| 1718 | for (count=0,run=1; COND(c[D_IGE_256_AES][j]); count++) | 1692 | for (count = 0, run = 1; COND(c[D_IGE_256_AES][j]); count++) |
| 1719 | AES_ige_encrypt(buf,buf2, | 1693 | AES_ige_encrypt(buf, buf2, |
| 1720 | (unsigned long)lengths[j],&aes_ks3, | 1694 | (unsigned long) lengths[j], &aes_ks3, |
| 1721 | iv,AES_ENCRYPT); | 1695 | iv, AES_ENCRYPT); |
| 1722 | d=Time_F(STOP); | 1696 | d = Time_F(STOP); |
| 1723 | print_result(D_IGE_256_AES,j,count,d); | 1697 | print_result(D_IGE_256_AES, j, count, d); |
| 1724 | } | ||
| 1725 | } | 1698 | } |
| 1726 | if (doit[D_GHASH]) | 1699 | } |
| 1727 | { | 1700 | if (doit[D_GHASH]) { |
| 1728 | GCM128_CONTEXT *ctx = CRYPTO_gcm128_new(&aes_ks1,(block128_f)AES_encrypt); | 1701 | GCM128_CONTEXT *ctx = CRYPTO_gcm128_new(&aes_ks1, (block128_f) AES_encrypt); |
| 1729 | CRYPTO_gcm128_setiv (ctx,(unsigned char *)"0123456789ab",12); | 1702 | CRYPTO_gcm128_setiv(ctx, (unsigned char *) "0123456789ab", 12); |
| 1730 | 1703 | ||
| 1731 | for (j=0; j<SIZE_NUM; j++) | 1704 | for (j = 0; j < SIZE_NUM; j++) { |
| 1732 | { | 1705 | print_message(names[D_GHASH], c[D_GHASH][j], lengths[j]); |
| 1733 | print_message(names[D_GHASH],c[D_GHASH][j],lengths[j]); | ||
| 1734 | Time_F(START); | 1706 | Time_F(START); |
| 1735 | for (count=0,run=1; COND(c[D_GHASH][j]); count++) | 1707 | for (count = 0, run = 1; COND(c[D_GHASH][j]); count++) |
| 1736 | CRYPTO_gcm128_aad(ctx,buf,lengths[j]); | 1708 | CRYPTO_gcm128_aad(ctx, buf, lengths[j]); |
| 1737 | d=Time_F(STOP); | 1709 | d = Time_F(STOP); |
| 1738 | print_result(D_GHASH,j,count,d); | 1710 | print_result(D_GHASH, j, count, d); |
| 1739 | } | ||
| 1740 | CRYPTO_gcm128_release(ctx); | ||
| 1741 | } | 1711 | } |
| 1742 | 1712 | CRYPTO_gcm128_release(ctx); | |
| 1713 | } | ||
| 1743 | #endif | 1714 | #endif |
| 1744 | #ifndef OPENSSL_NO_CAMELLIA | 1715 | #ifndef OPENSSL_NO_CAMELLIA |
| 1745 | if (doit[D_CBC_128_CML]) | 1716 | if (doit[D_CBC_128_CML]) { |
| 1746 | { | 1717 | for (j = 0; j < SIZE_NUM; j++) { |
| 1747 | for (j=0; j<SIZE_NUM; j++) | 1718 | print_message(names[D_CBC_128_CML], c[D_CBC_128_CML][j], lengths[j]); |
| 1748 | { | ||
| 1749 | print_message(names[D_CBC_128_CML],c[D_CBC_128_CML][j],lengths[j]); | ||
| 1750 | Time_F(START); | 1719 | Time_F(START); |
| 1751 | for (count=0,run=1; COND(c[D_CBC_128_CML][j]); count++) | 1720 | for (count = 0, run = 1; COND(c[D_CBC_128_CML][j]); count++) |
| 1752 | Camellia_cbc_encrypt(buf,buf, | 1721 | Camellia_cbc_encrypt(buf, buf, |
| 1753 | (unsigned long)lengths[j],&camellia_ks1, | 1722 | (unsigned long) lengths[j], &camellia_ks1, |
| 1754 | iv,CAMELLIA_ENCRYPT); | 1723 | iv, CAMELLIA_ENCRYPT); |
| 1755 | d=Time_F(STOP); | 1724 | d = Time_F(STOP); |
| 1756 | print_result(D_CBC_128_CML,j,count,d); | 1725 | print_result(D_CBC_128_CML, j, count, d); |
| 1757 | } | ||
| 1758 | } | 1726 | } |
| 1759 | if (doit[D_CBC_192_CML]) | 1727 | } |
| 1760 | { | 1728 | if (doit[D_CBC_192_CML]) { |
| 1761 | for (j=0; j<SIZE_NUM; j++) | 1729 | for (j = 0; j < SIZE_NUM; j++) { |
| 1762 | { | 1730 | print_message(names[D_CBC_192_CML], c[D_CBC_192_CML][j], lengths[j]); |
| 1763 | print_message(names[D_CBC_192_CML],c[D_CBC_192_CML][j],lengths[j]); | ||
| 1764 | Time_F(START); | 1731 | Time_F(START); |
| 1765 | for (count=0,run=1; COND(c[D_CBC_192_CML][j]); count++) | 1732 | for (count = 0, run = 1; COND(c[D_CBC_192_CML][j]); count++) |
| 1766 | Camellia_cbc_encrypt(buf,buf, | 1733 | Camellia_cbc_encrypt(buf, buf, |
| 1767 | (unsigned long)lengths[j],&camellia_ks2, | 1734 | (unsigned long) lengths[j], &camellia_ks2, |
| 1768 | iv,CAMELLIA_ENCRYPT); | 1735 | iv, CAMELLIA_ENCRYPT); |
| 1769 | d=Time_F(STOP); | 1736 | d = Time_F(STOP); |
| 1770 | print_result(D_CBC_192_CML,j,count,d); | 1737 | print_result(D_CBC_192_CML, j, count, d); |
| 1771 | } | ||
| 1772 | } | 1738 | } |
| 1773 | if (doit[D_CBC_256_CML]) | 1739 | } |
| 1774 | { | 1740 | if (doit[D_CBC_256_CML]) { |
| 1775 | for (j=0; j<SIZE_NUM; j++) | 1741 | for (j = 0; j < SIZE_NUM; j++) { |
| 1776 | { | 1742 | print_message(names[D_CBC_256_CML], c[D_CBC_256_CML][j], lengths[j]); |
| 1777 | print_message(names[D_CBC_256_CML],c[D_CBC_256_CML][j],lengths[j]); | ||
| 1778 | Time_F(START); | 1743 | Time_F(START); |
| 1779 | for (count=0,run=1; COND(c[D_CBC_256_CML][j]); count++) | 1744 | for (count = 0, run = 1; COND(c[D_CBC_256_CML][j]); count++) |
| 1780 | Camellia_cbc_encrypt(buf,buf, | 1745 | Camellia_cbc_encrypt(buf, buf, |
| 1781 | (unsigned long)lengths[j],&camellia_ks3, | 1746 | (unsigned long) lengths[j], &camellia_ks3, |
| 1782 | iv,CAMELLIA_ENCRYPT); | 1747 | iv, CAMELLIA_ENCRYPT); |
| 1783 | d=Time_F(STOP); | 1748 | d = Time_F(STOP); |
| 1784 | print_result(D_CBC_256_CML,j,count,d); | 1749 | print_result(D_CBC_256_CML, j, count, d); |
| 1785 | } | ||
| 1786 | } | 1750 | } |
| 1787 | 1751 | } | |
| 1788 | #endif | 1752 | #endif |
| 1789 | #ifndef OPENSSL_NO_IDEA | 1753 | #ifndef OPENSSL_NO_IDEA |
| 1790 | if (doit[D_CBC_IDEA]) | 1754 | if (doit[D_CBC_IDEA]) { |
| 1791 | { | 1755 | for (j = 0; j < SIZE_NUM; j++) { |
| 1792 | for (j=0; j<SIZE_NUM; j++) | 1756 | print_message(names[D_CBC_IDEA], c[D_CBC_IDEA][j], lengths[j]); |
| 1793 | { | ||
| 1794 | print_message(names[D_CBC_IDEA],c[D_CBC_IDEA][j],lengths[j]); | ||
| 1795 | Time_F(START); | 1757 | Time_F(START); |
| 1796 | for (count=0,run=1; COND(c[D_CBC_IDEA][j]); count++) | 1758 | for (count = 0, run = 1; COND(c[D_CBC_IDEA][j]); count++) |
| 1797 | idea_cbc_encrypt(buf,buf, | 1759 | idea_cbc_encrypt(buf, buf, |
| 1798 | (unsigned long)lengths[j],&idea_ks, | 1760 | (unsigned long) lengths[j], &idea_ks, |
| 1799 | iv,IDEA_ENCRYPT); | 1761 | iv, IDEA_ENCRYPT); |
| 1800 | d=Time_F(STOP); | 1762 | d = Time_F(STOP); |
| 1801 | print_result(D_CBC_IDEA,j,count,d); | 1763 | print_result(D_CBC_IDEA, j, count, d); |
| 1802 | } | ||
| 1803 | } | 1764 | } |
| 1765 | } | ||
| 1804 | #endif | 1766 | #endif |
| 1805 | #ifndef OPENSSL_NO_SEED | 1767 | #ifndef OPENSSL_NO_SEED |
| 1806 | if (doit[D_CBC_SEED]) | 1768 | if (doit[D_CBC_SEED]) { |
| 1807 | { | 1769 | for (j = 0; j < SIZE_NUM; j++) { |
| 1808 | for (j=0; j<SIZE_NUM; j++) | 1770 | print_message(names[D_CBC_SEED], c[D_CBC_SEED][j], lengths[j]); |
| 1809 | { | ||
| 1810 | print_message(names[D_CBC_SEED],c[D_CBC_SEED][j],lengths[j]); | ||
| 1811 | Time_F(START); | 1771 | Time_F(START); |
| 1812 | for (count=0,run=1; COND(c[D_CBC_SEED][j]); count++) | 1772 | for (count = 0, run = 1; COND(c[D_CBC_SEED][j]); count++) |
| 1813 | SEED_cbc_encrypt(buf,buf, | 1773 | SEED_cbc_encrypt(buf, buf, |
| 1814 | (unsigned long)lengths[j],&seed_ks,iv,1); | 1774 | (unsigned long) lengths[j], &seed_ks, iv, 1); |
| 1815 | d=Time_F(STOP); | 1775 | d = Time_F(STOP); |
| 1816 | print_result(D_CBC_SEED,j,count,d); | 1776 | print_result(D_CBC_SEED, j, count, d); |
| 1817 | } | ||
| 1818 | } | 1777 | } |
| 1778 | } | ||
| 1819 | #endif | 1779 | #endif |
| 1820 | #ifndef OPENSSL_NO_RC2 | 1780 | #ifndef OPENSSL_NO_RC2 |
| 1821 | if (doit[D_CBC_RC2]) | 1781 | if (doit[D_CBC_RC2]) { |
| 1822 | { | 1782 | for (j = 0; j < SIZE_NUM; j++) { |
| 1823 | for (j=0; j<SIZE_NUM; j++) | 1783 | print_message(names[D_CBC_RC2], c[D_CBC_RC2][j], lengths[j]); |
| 1824 | { | ||
| 1825 | print_message(names[D_CBC_RC2],c[D_CBC_RC2][j],lengths[j]); | ||
| 1826 | Time_F(START); | 1784 | Time_F(START); |
| 1827 | for (count=0,run=1; COND(c[D_CBC_RC2][j]); count++) | 1785 | for (count = 0, run = 1; COND(c[D_CBC_RC2][j]); count++) |
| 1828 | RC2_cbc_encrypt(buf,buf, | 1786 | RC2_cbc_encrypt(buf, buf, |
| 1829 | (unsigned long)lengths[j],&rc2_ks, | 1787 | (unsigned long) lengths[j], &rc2_ks, |
| 1830 | iv,RC2_ENCRYPT); | 1788 | iv, RC2_ENCRYPT); |
| 1831 | d=Time_F(STOP); | 1789 | d = Time_F(STOP); |
| 1832 | print_result(D_CBC_RC2,j,count,d); | 1790 | print_result(D_CBC_RC2, j, count, d); |
| 1833 | } | ||
| 1834 | } | 1791 | } |
| 1792 | } | ||
| 1835 | #endif | 1793 | #endif |
| 1836 | #ifndef OPENSSL_NO_RC5 | 1794 | #ifndef OPENSSL_NO_RC5 |
| 1837 | if (doit[D_CBC_RC5]) | 1795 | if (doit[D_CBC_RC5]) { |
| 1838 | { | 1796 | for (j = 0; j < SIZE_NUM; j++) { |
| 1839 | for (j=0; j<SIZE_NUM; j++) | 1797 | print_message(names[D_CBC_RC5], c[D_CBC_RC5][j], lengths[j]); |
| 1840 | { | ||
| 1841 | print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]); | ||
| 1842 | Time_F(START); | 1798 | Time_F(START); |
| 1843 | for (count=0,run=1; COND(c[D_CBC_RC5][j]); count++) | 1799 | for (count = 0, run = 1; COND(c[D_CBC_RC5][j]); count++) |
| 1844 | RC5_32_cbc_encrypt(buf,buf, | 1800 | RC5_32_cbc_encrypt(buf, buf, |
| 1845 | (unsigned long)lengths[j],&rc5_ks, | 1801 | (unsigned long) lengths[j], &rc5_ks, |
| 1846 | iv,RC5_ENCRYPT); | 1802 | iv, RC5_ENCRYPT); |
| 1847 | d=Time_F(STOP); | 1803 | d = Time_F(STOP); |
| 1848 | print_result(D_CBC_RC5,j,count,d); | 1804 | print_result(D_CBC_RC5, j, count, d); |
| 1849 | } | ||
| 1850 | } | 1805 | } |
| 1806 | } | ||
| 1851 | #endif | 1807 | #endif |
| 1852 | #ifndef OPENSSL_NO_BF | 1808 | #ifndef OPENSSL_NO_BF |
| 1853 | if (doit[D_CBC_BF]) | 1809 | if (doit[D_CBC_BF]) { |
| 1854 | { | 1810 | for (j = 0; j < SIZE_NUM; j++) { |
| 1855 | for (j=0; j<SIZE_NUM; j++) | 1811 | print_message(names[D_CBC_BF], c[D_CBC_BF][j], lengths[j]); |
| 1856 | { | ||
| 1857 | print_message(names[D_CBC_BF],c[D_CBC_BF][j],lengths[j]); | ||
| 1858 | Time_F(START); | 1812 | Time_F(START); |
| 1859 | for (count=0,run=1; COND(c[D_CBC_BF][j]); count++) | 1813 | for (count = 0, run = 1; COND(c[D_CBC_BF][j]); count++) |
| 1860 | BF_cbc_encrypt(buf,buf, | 1814 | BF_cbc_encrypt(buf, buf, |
| 1861 | (unsigned long)lengths[j],&bf_ks, | 1815 | (unsigned long) lengths[j], &bf_ks, |
| 1862 | iv,BF_ENCRYPT); | 1816 | iv, BF_ENCRYPT); |
| 1863 | d=Time_F(STOP); | 1817 | d = Time_F(STOP); |
| 1864 | print_result(D_CBC_BF,j,count,d); | 1818 | print_result(D_CBC_BF, j, count, d); |
| 1865 | } | ||
| 1866 | } | 1819 | } |
| 1820 | } | ||
| 1867 | #endif | 1821 | #endif |
| 1868 | #ifndef OPENSSL_NO_CAST | 1822 | #ifndef OPENSSL_NO_CAST |
| 1869 | if (doit[D_CBC_CAST]) | 1823 | if (doit[D_CBC_CAST]) { |
| 1870 | { | 1824 | for (j = 0; j < SIZE_NUM; j++) { |
| 1871 | for (j=0; j<SIZE_NUM; j++) | 1825 | print_message(names[D_CBC_CAST], c[D_CBC_CAST][j], lengths[j]); |
| 1872 | { | ||
| 1873 | print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]); | ||
| 1874 | Time_F(START); | 1826 | Time_F(START); |
| 1875 | for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++) | 1827 | for (count = 0, run = 1; COND(c[D_CBC_CAST][j]); count++) |
| 1876 | CAST_cbc_encrypt(buf,buf, | 1828 | CAST_cbc_encrypt(buf, buf, |
| 1877 | (unsigned long)lengths[j],&cast_ks, | 1829 | (unsigned long) lengths[j], &cast_ks, |
| 1878 | iv,CAST_ENCRYPT); | 1830 | iv, CAST_ENCRYPT); |
| 1879 | d=Time_F(STOP); | 1831 | d = Time_F(STOP); |
| 1880 | print_result(D_CBC_CAST,j,count,d); | 1832 | print_result(D_CBC_CAST, j, count, d); |
| 1881 | } | ||
| 1882 | } | 1833 | } |
| 1834 | } | ||
| 1883 | #endif | 1835 | #endif |
| 1884 | 1836 | ||
| 1885 | if (doit[D_EVP]) | 1837 | if (doit[D_EVP]) { |
| 1886 | { | 1838 | for (j = 0; j < SIZE_NUM; j++) { |
| 1887 | for (j=0; j<SIZE_NUM; j++) | 1839 | if (evp_cipher) { |
| 1888 | { | ||
| 1889 | if (evp_cipher) | ||
| 1890 | { | ||
| 1891 | EVP_CIPHER_CTX ctx; | 1840 | EVP_CIPHER_CTX ctx; |
| 1892 | int outl; | 1841 | int outl; |
| 1893 | 1842 | ||
| 1894 | names[D_EVP]=OBJ_nid2ln(evp_cipher->nid); | 1843 | names[D_EVP] = OBJ_nid2ln(evp_cipher->nid); |
| 1895 | /* -O3 -fschedule-insns messes up an | 1844 | /* |
| 1896 | * optimization here! names[D_EVP] | 1845 | * -O3 -fschedule-insns messes up an |
| 1897 | * somehow becomes NULL */ | 1846 | * optimization here! names[D_EVP] somehow |
| 1898 | print_message(names[D_EVP],save_count, | 1847 | * becomes NULL |
| 1899 | lengths[j]); | 1848 | */ |
| 1849 | print_message(names[D_EVP], save_count, | ||
| 1850 | lengths[j]); | ||
| 1900 | 1851 | ||
| 1901 | EVP_CIPHER_CTX_init(&ctx); | 1852 | EVP_CIPHER_CTX_init(&ctx); |
| 1902 | if(decrypt) | 1853 | if (decrypt) |
| 1903 | EVP_DecryptInit_ex(&ctx,evp_cipher,NULL,key16,iv); | 1854 | EVP_DecryptInit_ex(&ctx, evp_cipher, NULL, key16, iv); |
| 1904 | else | 1855 | else |
| 1905 | EVP_EncryptInit_ex(&ctx,evp_cipher,NULL,key16,iv); | 1856 | EVP_EncryptInit_ex(&ctx, evp_cipher, NULL, key16, iv); |
| 1906 | EVP_CIPHER_CTX_set_padding(&ctx, 0); | 1857 | EVP_CIPHER_CTX_set_padding(&ctx, 0); |
| 1907 | 1858 | ||
| 1908 | Time_F(START); | 1859 | Time_F(START); |
| 1909 | if(decrypt) | 1860 | if (decrypt) |
| 1910 | for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++) | 1861 | for (count = 0, run = 1; COND(save_count * 4 * lengths[0] / lengths[j]); count++) |
| 1911 | EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]); | 1862 | EVP_DecryptUpdate(&ctx, buf, &outl, buf, lengths[j]); |
| 1912 | else | 1863 | else |
| 1913 | for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++) | 1864 | for (count = 0, run = 1; COND(save_count * 4 * lengths[0] / lengths[j]); count++) |
| 1914 | EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]); | 1865 | EVP_EncryptUpdate(&ctx, buf, &outl, buf, lengths[j]); |
| 1915 | if(decrypt) | 1866 | if (decrypt) |
| 1916 | EVP_DecryptFinal_ex(&ctx,buf,&outl); | 1867 | EVP_DecryptFinal_ex(&ctx, buf, &outl); |
| 1917 | else | 1868 | else |
| 1918 | EVP_EncryptFinal_ex(&ctx,buf,&outl); | 1869 | EVP_EncryptFinal_ex(&ctx, buf, &outl); |
| 1919 | d=Time_F(STOP); | 1870 | d = Time_F(STOP); |
| 1920 | EVP_CIPHER_CTX_cleanup(&ctx); | 1871 | EVP_CIPHER_CTX_cleanup(&ctx); |
| 1921 | } | 1872 | } |
| 1922 | if (evp_md) | 1873 | if (evp_md) { |
| 1923 | { | 1874 | names[D_EVP] = OBJ_nid2ln(evp_md->type); |
| 1924 | names[D_EVP]=OBJ_nid2ln(evp_md->type); | 1875 | print_message(names[D_EVP], save_count, |
| 1925 | print_message(names[D_EVP],save_count, | 1876 | lengths[j]); |
| 1926 | lengths[j]); | ||
| 1927 | 1877 | ||
| 1928 | Time_F(START); | 1878 | Time_F(START); |
| 1929 | for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++) | 1879 | for (count = 0, run = 1; COND(save_count * 4 * lengths[0] / lengths[j]); count++) |
| 1930 | EVP_Digest(buf,lengths[j],&(md[0]),NULL,evp_md,NULL); | 1880 | EVP_Digest(buf, lengths[j], &(md[0]), NULL, evp_md, NULL); |
| 1931 | 1881 | ||
| 1932 | d=Time_F(STOP); | 1882 | d = Time_F(STOP); |
| 1933 | } | ||
| 1934 | print_result(D_EVP,j,count,d); | ||
| 1935 | } | 1883 | } |
| 1884 | print_result(D_EVP, j, count, d); | ||
| 1936 | } | 1885 | } |
| 1937 | 1886 | } | |
| 1938 | RAND_pseudo_bytes(buf,36); | 1887 | RAND_pseudo_bytes(buf, 36); |
| 1939 | #ifndef OPENSSL_NO_RSA | 1888 | #ifndef OPENSSL_NO_RSA |
| 1940 | for (j=0; j<RSA_NUM; j++) | 1889 | for (j = 0; j < RSA_NUM; j++) { |
| 1941 | { | ||
| 1942 | int ret; | 1890 | int ret; |
| 1943 | if (!rsa_doit[j]) continue; | 1891 | if (!rsa_doit[j]) |
| 1944 | ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]); | 1892 | continue; |
| 1945 | if (ret == 0) | 1893 | ret = RSA_sign(NID_md5_sha1, buf, 36, buf2, &rsa_num, rsa_key[j]); |
| 1946 | { | 1894 | if (ret == 0) { |
| 1947 | BIO_printf(bio_err,"RSA sign failure. No RSA sign will be done.\n"); | 1895 | BIO_printf(bio_err, "RSA sign failure. No RSA sign will be done.\n"); |
| 1948 | ERR_print_errors(bio_err); | 1896 | ERR_print_errors(bio_err); |
| 1949 | rsa_count=1; | 1897 | rsa_count = 1; |
| 1950 | } | 1898 | } else { |
| 1951 | else | 1899 | pkey_print_message("private", "rsa", |
| 1952 | { | 1900 | rsa_c[j][0], rsa_bits[j], |
| 1953 | pkey_print_message("private","rsa", | 1901 | RSA_SECONDS); |
| 1954 | rsa_c[j][0],rsa_bits[j], | ||
| 1955 | RSA_SECONDS); | ||
| 1956 | /* RSA_blinding_on(rsa_key[j],NULL); */ | 1902 | /* RSA_blinding_on(rsa_key[j],NULL); */ |
| 1957 | Time_F(START); | 1903 | Time_F(START); |
| 1958 | for (count=0,run=1; COND(rsa_c[j][0]); count++) | 1904 | for (count = 0, run = 1; COND(rsa_c[j][0]); count++) { |
| 1959 | { | 1905 | ret = RSA_sign(NID_md5_sha1, buf, 36, buf2, |
| 1960 | ret=RSA_sign(NID_md5_sha1, buf,36, buf2, | 1906 | &rsa_num, rsa_key[j]); |
| 1961 | &rsa_num, rsa_key[j]); | 1907 | if (ret == 0) { |
| 1962 | if (ret == 0) | ||
| 1963 | { | ||
| 1964 | BIO_printf(bio_err, | 1908 | BIO_printf(bio_err, |
| 1965 | "RSA sign failure\n"); | 1909 | "RSA sign failure\n"); |
| 1966 | ERR_print_errors(bio_err); | 1910 | ERR_print_errors(bio_err); |
| 1967 | count=1; | 1911 | count = 1; |
| 1968 | break; | 1912 | break; |
| 1969 | } | ||
| 1970 | } | 1913 | } |
| 1971 | d=Time_F(STOP); | ||
| 1972 | BIO_printf(bio_err,mr ? "+R1:%ld:%d:%.2f\n" | ||
| 1973 | : "%ld %d bit private RSA's in %.2fs\n", | ||
| 1974 | count,rsa_bits[j],d); | ||
| 1975 | rsa_results[j][0]=d/(double)count; | ||
| 1976 | rsa_count=count; | ||
| 1977 | } | 1914 | } |
| 1915 | d = Time_F(STOP); | ||
| 1916 | BIO_printf(bio_err, mr ? "+R1:%ld:%d:%.2f\n" | ||
| 1917 | : "%ld %d bit private RSA's in %.2fs\n", | ||
| 1918 | count, rsa_bits[j], d); | ||
| 1919 | rsa_results[j][0] = d / (double) count; | ||
| 1920 | rsa_count = count; | ||
| 1921 | } | ||
| 1978 | 1922 | ||
| 1979 | #if 1 | 1923 | #if 1 |
| 1980 | ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]); | 1924 | ret = RSA_verify(NID_md5_sha1, buf, 36, buf2, rsa_num, rsa_key[j]); |
| 1981 | if (ret <= 0) | 1925 | if (ret <= 0) { |
| 1982 | { | 1926 | BIO_printf(bio_err, "RSA verify failure. No RSA verify will be done.\n"); |
| 1983 | BIO_printf(bio_err,"RSA verify failure. No RSA verify will be done.\n"); | ||
| 1984 | ERR_print_errors(bio_err); | 1927 | ERR_print_errors(bio_err); |
| 1985 | rsa_doit[j] = 0; | 1928 | rsa_doit[j] = 0; |
| 1986 | } | 1929 | } else { |
| 1987 | else | 1930 | pkey_print_message("public", "rsa", |
| 1988 | { | 1931 | rsa_c[j][1], rsa_bits[j], |
| 1989 | pkey_print_message("public","rsa", | 1932 | RSA_SECONDS); |
| 1990 | rsa_c[j][1],rsa_bits[j], | ||
| 1991 | RSA_SECONDS); | ||
| 1992 | Time_F(START); | 1933 | Time_F(START); |
| 1993 | for (count=0,run=1; COND(rsa_c[j][1]); count++) | 1934 | for (count = 0, run = 1; COND(rsa_c[j][1]); count++) { |
| 1994 | { | 1935 | ret = RSA_verify(NID_md5_sha1, buf, 36, buf2, |
| 1995 | ret=RSA_verify(NID_md5_sha1, buf,36, buf2, | 1936 | rsa_num, rsa_key[j]); |
| 1996 | rsa_num, rsa_key[j]); | 1937 | if (ret <= 0) { |
| 1997 | if (ret <= 0) | ||
| 1998 | { | ||
| 1999 | BIO_printf(bio_err, | 1938 | BIO_printf(bio_err, |
| 2000 | "RSA verify failure\n"); | 1939 | "RSA verify failure\n"); |
| 2001 | ERR_print_errors(bio_err); | 1940 | ERR_print_errors(bio_err); |
| 2002 | count=1; | 1941 | count = 1; |
| 2003 | break; | 1942 | break; |
| 2004 | } | ||
| 2005 | } | 1943 | } |
| 2006 | d=Time_F(STOP); | ||
| 2007 | BIO_printf(bio_err,mr ? "+R2:%ld:%d:%.2f\n" | ||
| 2008 | : "%ld %d bit public RSA's in %.2fs\n", | ||
| 2009 | count,rsa_bits[j],d); | ||
| 2010 | rsa_results[j][1]=d/(double)count; | ||
| 2011 | } | 1944 | } |
| 1945 | d = Time_F(STOP); | ||
| 1946 | BIO_printf(bio_err, mr ? "+R2:%ld:%d:%.2f\n" | ||
| 1947 | : "%ld %d bit public RSA's in %.2fs\n", | ||
| 1948 | count, rsa_bits[j], d); | ||
| 1949 | rsa_results[j][1] = d / (double) count; | ||
| 1950 | } | ||
| 2012 | #endif | 1951 | #endif |
| 2013 | 1952 | ||
| 2014 | if (rsa_count <= 1) | 1953 | if (rsa_count <= 1) { |
| 2015 | { | ||
| 2016 | /* if longer than 10s, don't do any more */ | 1954 | /* if longer than 10s, don't do any more */ |
| 2017 | for (j++; j<RSA_NUM; j++) | 1955 | for (j++; j < RSA_NUM; j++) |
| 2018 | rsa_doit[j]=0; | 1956 | rsa_doit[j] = 0; |
| 2019 | } | ||
| 2020 | } | 1957 | } |
| 1958 | } | ||
| 2021 | #endif | 1959 | #endif |
| 2022 | 1960 | ||
| 2023 | RAND_pseudo_bytes(buf,20); | 1961 | RAND_pseudo_bytes(buf, 20); |
| 2024 | #ifndef OPENSSL_NO_DSA | 1962 | #ifndef OPENSSL_NO_DSA |
| 2025 | if (RAND_status() != 1) | 1963 | if (RAND_status() != 1) { |
| 2026 | { | ||
| 2027 | RAND_seed(rnd_seed, sizeof rnd_seed); | 1964 | RAND_seed(rnd_seed, sizeof rnd_seed); |
| 2028 | rnd_fake = 1; | 1965 | rnd_fake = 1; |
| 2029 | } | 1966 | } |
| 2030 | for (j=0; j<DSA_NUM; j++) | 1967 | for (j = 0; j < DSA_NUM; j++) { |
| 2031 | { | ||
| 2032 | unsigned int kk; | 1968 | unsigned int kk; |
| 2033 | int ret; | 1969 | int ret; |
| 2034 | 1970 | ||
| 2035 | if (!dsa_doit[j]) continue; | 1971 | if (!dsa_doit[j]) |
| 1972 | continue; | ||
| 2036 | /* DSA_generate_key(dsa_key[j]); */ | 1973 | /* DSA_generate_key(dsa_key[j]); */ |
| 2037 | /* DSA_sign_setup(dsa_key[j],NULL); */ | 1974 | /* DSA_sign_setup(dsa_key[j],NULL); */ |
| 2038 | ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2, | 1975 | ret = DSA_sign(EVP_PKEY_DSA, buf, 20, buf2, |
| 2039 | &kk,dsa_key[j]); | 1976 | &kk, dsa_key[j]); |
| 2040 | if (ret == 0) | 1977 | if (ret == 0) { |
| 2041 | { | 1978 | BIO_printf(bio_err, "DSA sign failure. No DSA sign will be done.\n"); |
| 2042 | BIO_printf(bio_err,"DSA sign failure. No DSA sign will be done.\n"); | ||
| 2043 | ERR_print_errors(bio_err); | 1979 | ERR_print_errors(bio_err); |
| 2044 | rsa_count=1; | 1980 | rsa_count = 1; |
| 2045 | } | 1981 | } else { |
| 2046 | else | 1982 | pkey_print_message("sign", "dsa", |
| 2047 | { | 1983 | dsa_c[j][0], dsa_bits[j], |
| 2048 | pkey_print_message("sign","dsa", | 1984 | DSA_SECONDS); |
| 2049 | dsa_c[j][0],dsa_bits[j], | ||
| 2050 | DSA_SECONDS); | ||
| 2051 | Time_F(START); | 1985 | Time_F(START); |
| 2052 | for (count=0,run=1; COND(dsa_c[j][0]); count++) | 1986 | for (count = 0, run = 1; COND(dsa_c[j][0]); count++) { |
| 2053 | { | 1987 | ret = DSA_sign(EVP_PKEY_DSA, buf, 20, buf2, |
| 2054 | ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2, | 1988 | &kk, dsa_key[j]); |
| 2055 | &kk,dsa_key[j]); | 1989 | if (ret == 0) { |
| 2056 | if (ret == 0) | ||
| 2057 | { | ||
| 2058 | BIO_printf(bio_err, | 1990 | BIO_printf(bio_err, |
| 2059 | "DSA sign failure\n"); | 1991 | "DSA sign failure\n"); |
| 2060 | ERR_print_errors(bio_err); | 1992 | ERR_print_errors(bio_err); |
| 2061 | count=1; | 1993 | count = 1; |
| 2062 | break; | 1994 | break; |
| 2063 | } | ||
| 2064 | } | 1995 | } |
| 2065 | d=Time_F(STOP); | ||
| 2066 | BIO_printf(bio_err,mr ? "+R3:%ld:%d:%.2f\n" | ||
| 2067 | : "%ld %d bit DSA signs in %.2fs\n", | ||
| 2068 | count,dsa_bits[j],d); | ||
| 2069 | dsa_results[j][0]=d/(double)count; | ||
| 2070 | rsa_count=count; | ||
| 2071 | } | 1996 | } |
| 1997 | d = Time_F(STOP); | ||
| 1998 | BIO_printf(bio_err, mr ? "+R3:%ld:%d:%.2f\n" | ||
| 1999 | : "%ld %d bit DSA signs in %.2fs\n", | ||
| 2000 | count, dsa_bits[j], d); | ||
| 2001 | dsa_results[j][0] = d / (double) count; | ||
| 2002 | rsa_count = count; | ||
| 2003 | } | ||
| 2072 | 2004 | ||
| 2073 | ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2, | 2005 | ret = DSA_verify(EVP_PKEY_DSA, buf, 20, buf2, |
| 2074 | kk,dsa_key[j]); | 2006 | kk, dsa_key[j]); |
| 2075 | if (ret <= 0) | 2007 | if (ret <= 0) { |
| 2076 | { | 2008 | BIO_printf(bio_err, "DSA verify failure. No DSA verify will be done.\n"); |
| 2077 | BIO_printf(bio_err,"DSA verify failure. No DSA verify will be done.\n"); | ||
| 2078 | ERR_print_errors(bio_err); | 2009 | ERR_print_errors(bio_err); |
| 2079 | dsa_doit[j] = 0; | 2010 | dsa_doit[j] = 0; |
| 2080 | } | 2011 | } else { |
| 2081 | else | 2012 | pkey_print_message("verify", "dsa", |
| 2082 | { | 2013 | dsa_c[j][1], dsa_bits[j], |
| 2083 | pkey_print_message("verify","dsa", | 2014 | DSA_SECONDS); |
| 2084 | dsa_c[j][1],dsa_bits[j], | ||
| 2085 | DSA_SECONDS); | ||
| 2086 | Time_F(START); | 2015 | Time_F(START); |
| 2087 | for (count=0,run=1; COND(dsa_c[j][1]); count++) | 2016 | for (count = 0, run = 1; COND(dsa_c[j][1]); count++) { |
| 2088 | { | 2017 | ret = DSA_verify(EVP_PKEY_DSA, buf, 20, buf2, |
| 2089 | ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2, | 2018 | kk, dsa_key[j]); |
| 2090 | kk,dsa_key[j]); | 2019 | if (ret <= 0) { |
| 2091 | if (ret <= 0) | ||
| 2092 | { | ||
| 2093 | BIO_printf(bio_err, | 2020 | BIO_printf(bio_err, |
| 2094 | "DSA verify failure\n"); | 2021 | "DSA verify failure\n"); |
| 2095 | ERR_print_errors(bio_err); | 2022 | ERR_print_errors(bio_err); |
| 2096 | count=1; | 2023 | count = 1; |
| 2097 | break; | 2024 | break; |
| 2098 | } | ||
| 2099 | } | 2025 | } |
| 2100 | d=Time_F(STOP); | ||
| 2101 | BIO_printf(bio_err,mr ? "+R4:%ld:%d:%.2f\n" | ||
| 2102 | : "%ld %d bit DSA verify in %.2fs\n", | ||
| 2103 | count,dsa_bits[j],d); | ||
| 2104 | dsa_results[j][1]=d/(double)count; | ||
| 2105 | } | 2026 | } |
| 2027 | d = Time_F(STOP); | ||
| 2028 | BIO_printf(bio_err, mr ? "+R4:%ld:%d:%.2f\n" | ||
| 2029 | : "%ld %d bit DSA verify in %.2fs\n", | ||
| 2030 | count, dsa_bits[j], d); | ||
| 2031 | dsa_results[j][1] = d / (double) count; | ||
| 2032 | } | ||
| 2106 | 2033 | ||
| 2107 | if (rsa_count <= 1) | 2034 | if (rsa_count <= 1) { |
| 2108 | { | ||
| 2109 | /* if longer than 10s, don't do any more */ | 2035 | /* if longer than 10s, don't do any more */ |
| 2110 | for (j++; j<DSA_NUM; j++) | 2036 | for (j++; j < DSA_NUM; j++) |
| 2111 | dsa_doit[j]=0; | 2037 | dsa_doit[j] = 0; |
| 2112 | } | ||
| 2113 | } | 2038 | } |
| 2114 | if (rnd_fake) RAND_cleanup(); | 2039 | } |
| 2040 | if (rnd_fake) | ||
| 2041 | RAND_cleanup(); | ||
| 2115 | #endif | 2042 | #endif |
| 2116 | 2043 | ||
| 2117 | #ifndef OPENSSL_NO_ECDSA | 2044 | #ifndef OPENSSL_NO_ECDSA |
| 2118 | if (RAND_status() != 1) | 2045 | if (RAND_status() != 1) { |
| 2119 | { | ||
| 2120 | RAND_seed(rnd_seed, sizeof rnd_seed); | 2046 | RAND_seed(rnd_seed, sizeof rnd_seed); |
| 2121 | rnd_fake = 1; | 2047 | rnd_fake = 1; |
| 2122 | } | 2048 | } |
| 2123 | for (j=0; j<EC_NUM; j++) | 2049 | for (j = 0; j < EC_NUM; j++) { |
| 2124 | { | ||
| 2125 | int ret; | 2050 | int ret; |
| 2126 | 2051 | ||
| 2127 | if (!ecdsa_doit[j]) continue; /* Ignore Curve */ | 2052 | if (!ecdsa_doit[j]) |
| 2053 | continue; /* Ignore Curve */ | ||
| 2128 | ecdsa[j] = EC_KEY_new_by_curve_name(test_curves[j]); | 2054 | ecdsa[j] = EC_KEY_new_by_curve_name(test_curves[j]); |
| 2129 | if (ecdsa[j] == NULL) | 2055 | if (ecdsa[j] == NULL) { |
| 2130 | { | 2056 | BIO_printf(bio_err, "ECDSA failure.\n"); |
| 2131 | BIO_printf(bio_err,"ECDSA failure.\n"); | ||
| 2132 | ERR_print_errors(bio_err); | 2057 | ERR_print_errors(bio_err); |
| 2133 | rsa_count=1; | 2058 | rsa_count = 1; |
| 2134 | } | 2059 | } else { |
| 2135 | else | ||
| 2136 | { | ||
| 2137 | #if 1 | 2060 | #if 1 |
| 2138 | EC_KEY_precompute_mult(ecdsa[j], NULL); | 2061 | EC_KEY_precompute_mult(ecdsa[j], NULL); |
| 2139 | #endif | 2062 | #endif |
| 2140 | /* Perform ECDSA signature test */ | 2063 | /* Perform ECDSA signature test */ |
| 2141 | EC_KEY_generate_key(ecdsa[j]); | 2064 | EC_KEY_generate_key(ecdsa[j]); |
| 2142 | ret = ECDSA_sign(0, buf, 20, ecdsasig, | 2065 | ret = ECDSA_sign(0, buf, 20, ecdsasig, |
| 2143 | &ecdsasiglen, ecdsa[j]); | 2066 | &ecdsasiglen, ecdsa[j]); |
| 2144 | if (ret == 0) | 2067 | if (ret == 0) { |
| 2145 | { | 2068 | BIO_printf(bio_err, "ECDSA sign failure. No ECDSA sign will be done.\n"); |
| 2146 | BIO_printf(bio_err,"ECDSA sign failure. No ECDSA sign will be done.\n"); | ||
| 2147 | ERR_print_errors(bio_err); | 2069 | ERR_print_errors(bio_err); |
| 2148 | rsa_count=1; | 2070 | rsa_count = 1; |
| 2149 | } | 2071 | } else { |
| 2150 | else | 2072 | pkey_print_message("sign", "ecdsa", |
| 2151 | { | 2073 | ecdsa_c[j][0], |
| 2152 | pkey_print_message("sign","ecdsa", | 2074 | test_curves_bits[j], |
| 2153 | ecdsa_c[j][0], | 2075 | ECDSA_SECONDS); |
| 2154 | test_curves_bits[j], | ||
| 2155 | ECDSA_SECONDS); | ||
| 2156 | 2076 | ||
| 2157 | Time_F(START); | 2077 | Time_F(START); |
| 2158 | for (count=0,run=1; COND(ecdsa_c[j][0]); | 2078 | for (count = 0, run = 1; COND(ecdsa_c[j][0]); |
| 2159 | count++) | 2079 | count++) { |
| 2160 | { | 2080 | ret = ECDSA_sign(0, buf, 20, |
| 2161 | ret=ECDSA_sign(0, buf, 20, | 2081 | ecdsasig, &ecdsasiglen, |
| 2162 | ecdsasig, &ecdsasiglen, | 2082 | ecdsa[j]); |
| 2163 | ecdsa[j]); | 2083 | if (ret == 0) { |
| 2164 | if (ret == 0) | ||
| 2165 | { | ||
| 2166 | BIO_printf(bio_err, "ECDSA sign failure\n"); | 2084 | BIO_printf(bio_err, "ECDSA sign failure\n"); |
| 2167 | ERR_print_errors(bio_err); | 2085 | ERR_print_errors(bio_err); |
| 2168 | count=1; | 2086 | count = 1; |
| 2169 | break; | 2087 | break; |
| 2170 | } | ||
| 2171 | } | 2088 | } |
| 2172 | d=Time_F(STOP); | 2089 | } |
| 2090 | d = Time_F(STOP); | ||
| 2173 | 2091 | ||
| 2174 | BIO_printf(bio_err, mr ? "+R5:%ld:%d:%.2f\n" : | 2092 | BIO_printf(bio_err, mr ? "+R5:%ld:%d:%.2f\n" : |
| 2175 | "%ld %d bit ECDSA signs in %.2fs \n", | 2093 | "%ld %d bit ECDSA signs in %.2fs \n", |
| 2176 | count, test_curves_bits[j], d); | 2094 | count, test_curves_bits[j], d); |
| 2177 | ecdsa_results[j][0]=d/(double)count; | 2095 | ecdsa_results[j][0] = d / (double) count; |
| 2178 | rsa_count=count; | 2096 | rsa_count = count; |
| 2179 | } | 2097 | } |
| 2180 | 2098 | ||
| 2181 | /* Perform ECDSA verification test */ | 2099 | /* Perform ECDSA verification test */ |
| 2182 | ret=ECDSA_verify(0, buf, 20, ecdsasig, | 2100 | ret = ECDSA_verify(0, buf, 20, ecdsasig, |
| 2183 | ecdsasiglen, ecdsa[j]); | 2101 | ecdsasiglen, ecdsa[j]); |
| 2184 | if (ret != 1) | 2102 | if (ret != 1) { |
| 2185 | { | 2103 | BIO_printf(bio_err, "ECDSA verify failure. No ECDSA verify will be done.\n"); |
| 2186 | BIO_printf(bio_err,"ECDSA verify failure. No ECDSA verify will be done.\n"); | ||
| 2187 | ERR_print_errors(bio_err); | 2104 | ERR_print_errors(bio_err); |
| 2188 | ecdsa_doit[j] = 0; | 2105 | ecdsa_doit[j] = 0; |
| 2189 | } | 2106 | } else { |
| 2190 | else | 2107 | pkey_print_message("verify", "ecdsa", |
| 2191 | { | 2108 | ecdsa_c[j][1], |
| 2192 | pkey_print_message("verify","ecdsa", | 2109 | test_curves_bits[j], |
| 2193 | ecdsa_c[j][1], | 2110 | ECDSA_SECONDS); |
| 2194 | test_curves_bits[j], | ||
| 2195 | ECDSA_SECONDS); | ||
| 2196 | Time_F(START); | 2111 | Time_F(START); |
| 2197 | for (count=0,run=1; COND(ecdsa_c[j][1]); count++) | 2112 | for (count = 0, run = 1; COND(ecdsa_c[j][1]); count++) { |
| 2198 | { | 2113 | ret = ECDSA_verify(0, buf, 20, ecdsasig, ecdsasiglen, ecdsa[j]); |
| 2199 | ret=ECDSA_verify(0, buf, 20, ecdsasig, ecdsasiglen, ecdsa[j]); | 2114 | if (ret != 1) { |
| 2200 | if (ret != 1) | ||
| 2201 | { | ||
| 2202 | BIO_printf(bio_err, "ECDSA verify failure\n"); | 2115 | BIO_printf(bio_err, "ECDSA verify failure\n"); |
| 2203 | ERR_print_errors(bio_err); | 2116 | ERR_print_errors(bio_err); |
| 2204 | count=1; | 2117 | count = 1; |
| 2205 | break; | 2118 | break; |
| 2206 | } | ||
| 2207 | } | 2119 | } |
| 2208 | d=Time_F(STOP); | ||
| 2209 | BIO_printf(bio_err, mr? "+R6:%ld:%d:%.2f\n" | ||
| 2210 | : "%ld %d bit ECDSA verify in %.2fs\n", | ||
| 2211 | count, test_curves_bits[j], d); | ||
| 2212 | ecdsa_results[j][1]=d/(double)count; | ||
| 2213 | } | 2120 | } |
| 2121 | d = Time_F(STOP); | ||
| 2122 | BIO_printf(bio_err, mr ? "+R6:%ld:%d:%.2f\n" | ||
| 2123 | : "%ld %d bit ECDSA verify in %.2fs\n", | ||
| 2124 | count, test_curves_bits[j], d); | ||
| 2125 | ecdsa_results[j][1] = d / (double) count; | ||
| 2126 | } | ||
| 2214 | 2127 | ||
| 2215 | if (rsa_count <= 1) | 2128 | if (rsa_count <= 1) { |
| 2216 | { | ||
| 2217 | /* if longer than 10s, don't do any more */ | 2129 | /* if longer than 10s, don't do any more */ |
| 2218 | for (j++; j<EC_NUM; j++) | 2130 | for (j++; j < EC_NUM; j++) |
| 2219 | ecdsa_doit[j]=0; | 2131 | ecdsa_doit[j] = 0; |
| 2220 | } | ||
| 2221 | } | 2132 | } |
| 2222 | } | 2133 | } |
| 2223 | if (rnd_fake) RAND_cleanup(); | 2134 | } |
| 2135 | if (rnd_fake) | ||
| 2136 | RAND_cleanup(); | ||
| 2224 | #endif | 2137 | #endif |
| 2225 | 2138 | ||
| 2226 | #ifndef OPENSSL_NO_ECDH | 2139 | #ifndef OPENSSL_NO_ECDH |
| 2227 | if (RAND_status() != 1) | 2140 | if (RAND_status() != 1) { |
| 2228 | { | ||
| 2229 | RAND_seed(rnd_seed, sizeof rnd_seed); | 2141 | RAND_seed(rnd_seed, sizeof rnd_seed); |
| 2230 | rnd_fake = 1; | 2142 | rnd_fake = 1; |
| 2231 | } | 2143 | } |
| 2232 | for (j=0; j<EC_NUM; j++) | 2144 | for (j = 0; j < EC_NUM; j++) { |
| 2233 | { | 2145 | if (!ecdh_doit[j]) |
| 2234 | if (!ecdh_doit[j]) continue; | 2146 | continue; |
| 2235 | ecdh_a[j] = EC_KEY_new_by_curve_name(test_curves[j]); | 2147 | ecdh_a[j] = EC_KEY_new_by_curve_name(test_curves[j]); |
| 2236 | ecdh_b[j] = EC_KEY_new_by_curve_name(test_curves[j]); | 2148 | ecdh_b[j] = EC_KEY_new_by_curve_name(test_curves[j]); |
| 2237 | if ((ecdh_a[j] == NULL) || (ecdh_b[j] == NULL)) | 2149 | if ((ecdh_a[j] == NULL) || (ecdh_b[j] == NULL)) { |
| 2238 | { | 2150 | BIO_printf(bio_err, "ECDH failure.\n"); |
| 2239 | BIO_printf(bio_err,"ECDH failure.\n"); | ||
| 2240 | ERR_print_errors(bio_err); | 2151 | ERR_print_errors(bio_err); |
| 2241 | rsa_count=1; | 2152 | rsa_count = 1; |
| 2242 | } | 2153 | } else { |
| 2243 | else | ||
| 2244 | { | ||
| 2245 | /* generate two ECDH key pairs */ | 2154 | /* generate two ECDH key pairs */ |
| 2246 | if (!EC_KEY_generate_key(ecdh_a[j]) || | 2155 | if (!EC_KEY_generate_key(ecdh_a[j]) || |
| 2247 | !EC_KEY_generate_key(ecdh_b[j])) | 2156 | !EC_KEY_generate_key(ecdh_b[j])) { |
| 2248 | { | 2157 | BIO_printf(bio_err, "ECDH key generation failure.\n"); |
| 2249 | BIO_printf(bio_err,"ECDH key generation failure.\n"); | ||
| 2250 | ERR_print_errors(bio_err); | 2158 | ERR_print_errors(bio_err); |
| 2251 | rsa_count=1; | 2159 | rsa_count = 1; |
| 2252 | } | 2160 | } else { |
| 2253 | else | 2161 | /* |
| 2254 | { | 2162 | * If field size is not more than 24 octets, |
| 2255 | /* If field size is not more than 24 octets, then use SHA-1 hash of result; | 2163 | * then use SHA-1 hash of result; otherwise, |
| 2256 | * otherwise, use result (see section 4.8 of draft-ietf-tls-ecc-03.txt). | 2164 | * use result (see section 4.8 of |
| 2165 | * draft-ietf-tls-ecc-03.txt). | ||
| 2257 | */ | 2166 | */ |
| 2258 | int field_size, outlen; | 2167 | int field_size, outlen; |
| 2259 | void *(*kdf)(const void *in, size_t inlen, void *out, size_t *xoutlen); | 2168 | void *(*kdf) (const void *in, size_t inlen, void *out, size_t * xoutlen); |
| 2260 | field_size = EC_GROUP_get_degree(EC_KEY_get0_group(ecdh_a[j])); | 2169 | field_size = EC_GROUP_get_degree(EC_KEY_get0_group(ecdh_a[j])); |
| 2261 | if (field_size <= 24 * 8) | 2170 | if (field_size <= 24 * 8) { |
| 2262 | { | ||
| 2263 | outlen = KDF1_SHA1_len; | 2171 | outlen = KDF1_SHA1_len; |
| 2264 | kdf = KDF1_SHA1; | 2172 | kdf = KDF1_SHA1; |
| 2265 | } | 2173 | } else { |
| 2266 | else | 2174 | outlen = (field_size + 7) / 8; |
| 2267 | { | ||
| 2268 | outlen = (field_size+7)/8; | ||
| 2269 | kdf = NULL; | 2175 | kdf = NULL; |
| 2270 | } | 2176 | } |
| 2271 | secret_size_a = ECDH_compute_key(secret_a, outlen, | 2177 | secret_size_a = ECDH_compute_key(secret_a, outlen, |
| 2272 | EC_KEY_get0_public_key(ecdh_b[j]), | 2178 | EC_KEY_get0_public_key(ecdh_b[j]), |
| 2273 | ecdh_a[j], kdf); | 2179 | ecdh_a[j], kdf); |
| 2274 | secret_size_b = ECDH_compute_key(secret_b, outlen, | 2180 | secret_size_b = ECDH_compute_key(secret_b, outlen, |
| 2275 | EC_KEY_get0_public_key(ecdh_a[j]), | 2181 | EC_KEY_get0_public_key(ecdh_a[j]), |
| 2276 | ecdh_b[j], kdf); | 2182 | ecdh_b[j], kdf); |
| 2277 | if (secret_size_a != secret_size_b) | 2183 | if (secret_size_a != secret_size_b) |
| 2278 | ecdh_checks = 0; | 2184 | ecdh_checks = 0; |
| 2279 | else | 2185 | else |
| 2280 | ecdh_checks = 1; | 2186 | ecdh_checks = 1; |
| 2281 | 2187 | ||
| 2282 | for (secret_idx = 0; | 2188 | for (secret_idx = 0; |
| 2283 | (secret_idx < secret_size_a) | 2189 | (secret_idx < secret_size_a) |
| 2284 | && (ecdh_checks == 1); | 2190 | && (ecdh_checks == 1); |
| 2285 | secret_idx++) | 2191 | secret_idx++) { |
| 2286 | { | ||
| 2287 | if (secret_a[secret_idx] != secret_b[secret_idx]) | 2192 | if (secret_a[secret_idx] != secret_b[secret_idx]) |
| 2288 | ecdh_checks = 0; | 2193 | ecdh_checks = 0; |
| 2289 | } | 2194 | } |
| 2290 | 2195 | ||
| 2291 | if (ecdh_checks == 0) | 2196 | if (ecdh_checks == 0) { |
| 2292 | { | 2197 | BIO_printf(bio_err, "ECDH computations don't match.\n"); |
| 2293 | BIO_printf(bio_err,"ECDH computations don't match.\n"); | ||
| 2294 | ERR_print_errors(bio_err); | 2198 | ERR_print_errors(bio_err); |
| 2295 | rsa_count=1; | 2199 | rsa_count = 1; |
| 2296 | } | 2200 | } |
| 2297 | 2201 | pkey_print_message("", "ecdh", | |
| 2298 | pkey_print_message("","ecdh", | 2202 | ecdh_c[j][0], |
| 2299 | ecdh_c[j][0], | 2203 | test_curves_bits[j], |
| 2300 | test_curves_bits[j], | 2204 | ECDH_SECONDS); |
| 2301 | ECDH_SECONDS); | ||
| 2302 | Time_F(START); | 2205 | Time_F(START); |
| 2303 | for (count=0,run=1; COND(ecdh_c[j][0]); count++) | 2206 | for (count = 0, run = 1; COND(ecdh_c[j][0]); count++) { |
| 2304 | { | ||
| 2305 | ECDH_compute_key(secret_a, outlen, | 2207 | ECDH_compute_key(secret_a, outlen, |
| 2306 | EC_KEY_get0_public_key(ecdh_b[j]), | 2208 | EC_KEY_get0_public_key(ecdh_b[j]), |
| 2307 | ecdh_a[j], kdf); | 2209 | ecdh_a[j], kdf); |
| 2308 | } | ||
| 2309 | d=Time_F(STOP); | ||
| 2310 | BIO_printf(bio_err, mr ? "+R7:%ld:%d:%.2f\n" :"%ld %d-bit ECDH ops in %.2fs\n", | ||
| 2311 | count, test_curves_bits[j], d); | ||
| 2312 | ecdh_results[j][0]=d/(double)count; | ||
| 2313 | rsa_count=count; | ||
| 2314 | } | 2210 | } |
| 2211 | d = Time_F(STOP); | ||
| 2212 | BIO_printf(bio_err, mr ? "+R7:%ld:%d:%.2f\n" : "%ld %d-bit ECDH ops in %.2fs\n", | ||
| 2213 | count, test_curves_bits[j], d); | ||
| 2214 | ecdh_results[j][0] = d / (double) count; | ||
| 2215 | rsa_count = count; | ||
| 2315 | } | 2216 | } |
| 2217 | } | ||
| 2316 | 2218 | ||
| 2317 | 2219 | ||
| 2318 | if (rsa_count <= 1) | 2220 | if (rsa_count <= 1) { |
| 2319 | { | ||
| 2320 | /* if longer than 10s, don't do any more */ | 2221 | /* if longer than 10s, don't do any more */ |
| 2321 | for (j++; j<EC_NUM; j++) | 2222 | for (j++; j < EC_NUM; j++) |
| 2322 | ecdh_doit[j]=0; | 2223 | ecdh_doit[j] = 0; |
| 2323 | } | ||
| 2324 | } | 2224 | } |
| 2325 | if (rnd_fake) RAND_cleanup(); | 2225 | } |
| 2226 | if (rnd_fake) | ||
| 2227 | RAND_cleanup(); | ||
| 2326 | #endif | 2228 | #endif |
| 2327 | #ifndef NO_FORK | 2229 | #ifndef NO_FORK |
| 2328 | show_res: | 2230 | show_res: |
| 2329 | #endif | 2231 | #endif |
| 2330 | if(!mr) | 2232 | if (!mr) { |
| 2331 | { | 2233 | fprintf(stdout, "%s\n", SSLeay_version(SSLEAY_VERSION)); |
| 2332 | fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION)); | 2234 | fprintf(stdout, "%s\n", SSLeay_version(SSLEAY_BUILT_ON)); |
| 2333 | fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON)); | ||
| 2334 | printf("options:"); | 2235 | printf("options:"); |
| 2335 | printf("%s ",BN_options()); | 2236 | printf("%s ", BN_options()); |
| 2336 | #ifndef OPENSSL_NO_MD2 | 2237 | #ifndef OPENSSL_NO_MD2 |
| 2337 | printf("%s ",MD2_options()); | 2238 | printf("%s ", MD2_options()); |
| 2338 | #endif | 2239 | #endif |
| 2339 | #ifndef OPENSSL_NO_RC4 | 2240 | #ifndef OPENSSL_NO_RC4 |
| 2340 | printf("%s ",RC4_options()); | 2241 | printf("%s ", RC4_options()); |
| 2341 | #endif | 2242 | #endif |
| 2342 | #ifndef OPENSSL_NO_DES | 2243 | #ifndef OPENSSL_NO_DES |
| 2343 | printf("%s ",DES_options()); | 2244 | printf("%s ", DES_options()); |
| 2344 | #endif | 2245 | #endif |
| 2345 | #ifndef OPENSSL_NO_AES | 2246 | #ifndef OPENSSL_NO_AES |
| 2346 | printf("%s ",AES_options()); | 2247 | printf("%s ", AES_options()); |
| 2347 | #endif | 2248 | #endif |
| 2348 | #ifndef OPENSSL_NO_IDEA | 2249 | #ifndef OPENSSL_NO_IDEA |
| 2349 | printf("%s ",idea_options()); | 2250 | printf("%s ", idea_options()); |
| 2350 | #endif | 2251 | #endif |
| 2351 | #ifndef OPENSSL_NO_BF | 2252 | #ifndef OPENSSL_NO_BF |
| 2352 | printf("%s ",BF_options()); | 2253 | printf("%s ", BF_options()); |
| 2353 | #endif | 2254 | #endif |
| 2354 | fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS)); | 2255 | fprintf(stdout, "\n%s\n", SSLeay_version(SSLEAY_CFLAGS)); |
| 2355 | } | 2256 | } |
| 2356 | 2257 | if (pr_header) { | |
| 2357 | if (pr_header) | 2258 | if (mr) |
| 2358 | { | 2259 | fprintf(stdout, "+H"); |
| 2359 | if(mr) | 2260 | else { |
| 2360 | fprintf(stdout,"+H"); | 2261 | fprintf(stdout, "The 'numbers' are in 1000s of bytes per second processed.\n"); |
| 2361 | else | 2262 | fprintf(stdout, "type "); |
| 2362 | { | ||
| 2363 | fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n"); | ||
| 2364 | fprintf(stdout,"type "); | ||
| 2365 | } | ||
| 2366 | for (j=0; j<SIZE_NUM; j++) | ||
| 2367 | fprintf(stdout,mr ? ":%d" : "%7d bytes",lengths[j]); | ||
| 2368 | fprintf(stdout,"\n"); | ||
| 2369 | } | 2263 | } |
| 2370 | 2264 | for (j = 0; j < SIZE_NUM; j++) | |
| 2371 | for (k=0; k<ALGOR_NUM; k++) | 2265 | fprintf(stdout, mr ? ":%d" : "%7d bytes", lengths[j]); |
| 2372 | { | 2266 | fprintf(stdout, "\n"); |
| 2373 | if (!doit[k]) continue; | 2267 | } |
| 2374 | if(mr) | 2268 | for (k = 0; k < ALGOR_NUM; k++) { |
| 2375 | fprintf(stdout,"+F:%d:%s",k,names[k]); | 2269 | if (!doit[k]) |
| 2270 | continue; | ||
| 2271 | if (mr) | ||
| 2272 | fprintf(stdout, "+F:%d:%s", k, names[k]); | ||
| 2376 | else | 2273 | else |
| 2377 | fprintf(stdout,"%-13s",names[k]); | 2274 | fprintf(stdout, "%-13s", names[k]); |
| 2378 | for (j=0; j<SIZE_NUM; j++) | 2275 | for (j = 0; j < SIZE_NUM; j++) { |
| 2379 | { | ||
| 2380 | if (results[k][j] > 10000 && !mr) | 2276 | if (results[k][j] > 10000 && !mr) |
| 2381 | fprintf(stdout," %11.2fk",results[k][j]/1e3); | 2277 | fprintf(stdout, " %11.2fk", results[k][j] / 1e3); |
| 2382 | else | 2278 | else |
| 2383 | fprintf(stdout,mr ? ":%.2f" : " %11.2f ",results[k][j]); | 2279 | fprintf(stdout, mr ? ":%.2f" : " %11.2f ", results[k][j]); |
| 2384 | } | ||
| 2385 | fprintf(stdout,"\n"); | ||
| 2386 | } | 2280 | } |
| 2281 | fprintf(stdout, "\n"); | ||
| 2282 | } | ||
| 2387 | #ifndef OPENSSL_NO_RSA | 2283 | #ifndef OPENSSL_NO_RSA |
| 2388 | j=1; | 2284 | j = 1; |
| 2389 | for (k=0; k<RSA_NUM; k++) | 2285 | for (k = 0; k < RSA_NUM; k++) { |
| 2390 | { | 2286 | if (!rsa_doit[k]) |
| 2391 | if (!rsa_doit[k]) continue; | 2287 | continue; |
| 2392 | if (j && !mr) | 2288 | if (j && !mr) { |
| 2393 | { | 2289 | printf("%18ssign verify sign/s verify/s\n", " "); |
| 2394 | printf("%18ssign verify sign/s verify/s\n"," "); | 2290 | j = 0; |
| 2395 | j=0; | ||
| 2396 | } | ||
| 2397 | if(mr) | ||
| 2398 | fprintf(stdout,"+F2:%u:%u:%f:%f\n", | ||
| 2399 | k,rsa_bits[k],rsa_results[k][0], | ||
| 2400 | rsa_results[k][1]); | ||
| 2401 | else | ||
| 2402 | fprintf(stdout,"rsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n", | ||
| 2403 | rsa_bits[k],rsa_results[k][0],rsa_results[k][1], | ||
| 2404 | 1.0/rsa_results[k][0],1.0/rsa_results[k][1]); | ||
| 2405 | } | 2291 | } |
| 2292 | if (mr) | ||
| 2293 | fprintf(stdout, "+F2:%u:%u:%f:%f\n", | ||
| 2294 | k, rsa_bits[k], rsa_results[k][0], | ||
| 2295 | rsa_results[k][1]); | ||
| 2296 | else | ||
| 2297 | fprintf(stdout, "rsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n", | ||
| 2298 | rsa_bits[k], rsa_results[k][0], rsa_results[k][1], | ||
| 2299 | 1.0 / rsa_results[k][0], 1.0 / rsa_results[k][1]); | ||
| 2300 | } | ||
| 2406 | #endif | 2301 | #endif |
| 2407 | #ifndef OPENSSL_NO_DSA | 2302 | #ifndef OPENSSL_NO_DSA |
| 2408 | j=1; | 2303 | j = 1; |
| 2409 | for (k=0; k<DSA_NUM; k++) | 2304 | for (k = 0; k < DSA_NUM; k++) { |
| 2410 | { | 2305 | if (!dsa_doit[k]) |
| 2411 | if (!dsa_doit[k]) continue; | 2306 | continue; |
| 2412 | if (j && !mr) | 2307 | if (j && !mr) { |
| 2413 | { | 2308 | printf("%18ssign verify sign/s verify/s\n", " "); |
| 2414 | printf("%18ssign verify sign/s verify/s\n"," "); | 2309 | j = 0; |
| 2415 | j=0; | ||
| 2416 | } | ||
| 2417 | if(mr) | ||
| 2418 | fprintf(stdout,"+F3:%u:%u:%f:%f\n", | ||
| 2419 | k,dsa_bits[k],dsa_results[k][0],dsa_results[k][1]); | ||
| 2420 | else | ||
| 2421 | fprintf(stdout,"dsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n", | ||
| 2422 | dsa_bits[k],dsa_results[k][0],dsa_results[k][1], | ||
| 2423 | 1.0/dsa_results[k][0],1.0/dsa_results[k][1]); | ||
| 2424 | } | 2310 | } |
| 2311 | if (mr) | ||
| 2312 | fprintf(stdout, "+F3:%u:%u:%f:%f\n", | ||
| 2313 | k, dsa_bits[k], dsa_results[k][0], dsa_results[k][1]); | ||
| 2314 | else | ||
| 2315 | fprintf(stdout, "dsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n", | ||
| 2316 | dsa_bits[k], dsa_results[k][0], dsa_results[k][1], | ||
| 2317 | 1.0 / dsa_results[k][0], 1.0 / dsa_results[k][1]); | ||
| 2318 | } | ||
| 2425 | #endif | 2319 | #endif |
| 2426 | #ifndef OPENSSL_NO_ECDSA | 2320 | #ifndef OPENSSL_NO_ECDSA |
| 2427 | j=1; | 2321 | j = 1; |
| 2428 | for (k=0; k<EC_NUM; k++) | 2322 | for (k = 0; k < EC_NUM; k++) { |
| 2429 | { | 2323 | if (!ecdsa_doit[k]) |
| 2430 | if (!ecdsa_doit[k]) continue; | 2324 | continue; |
| 2431 | if (j && !mr) | 2325 | if (j && !mr) { |
| 2432 | { | 2326 | printf("%30ssign verify sign/s verify/s\n", " "); |
| 2433 | printf("%30ssign verify sign/s verify/s\n"," "); | 2327 | j = 0; |
| 2434 | j=0; | 2328 | } |
| 2435 | } | ||
| 2436 | |||
| 2437 | if (mr) | 2329 | if (mr) |
| 2438 | fprintf(stdout,"+F4:%u:%u:%f:%f\n", | 2330 | fprintf(stdout, "+F4:%u:%u:%f:%f\n", |
| 2439 | k, test_curves_bits[k], | 2331 | k, test_curves_bits[k], |
| 2440 | ecdsa_results[k][0],ecdsa_results[k][1]); | 2332 | ecdsa_results[k][0], ecdsa_results[k][1]); |
| 2441 | else | 2333 | else |
| 2442 | fprintf(stdout, | 2334 | fprintf(stdout, |
| 2443 | "%4u bit ecdsa (%s) %8.4fs %8.4fs %8.1f %8.1f\n", | 2335 | "%4u bit ecdsa (%s) %8.4fs %8.4fs %8.1f %8.1f\n", |
| 2444 | test_curves_bits[k], | 2336 | test_curves_bits[k], |
| 2445 | test_curves_names[k], | 2337 | test_curves_names[k], |
| 2446 | ecdsa_results[k][0],ecdsa_results[k][1], | 2338 | ecdsa_results[k][0], ecdsa_results[k][1], |
| 2447 | 1.0/ecdsa_results[k][0],1.0/ecdsa_results[k][1]); | 2339 | 1.0 / ecdsa_results[k][0], 1.0 / ecdsa_results[k][1]); |
| 2448 | } | 2340 | } |
| 2449 | #endif | 2341 | #endif |
| 2450 | 2342 | ||
| 2451 | 2343 | ||
| 2452 | #ifndef OPENSSL_NO_ECDH | 2344 | #ifndef OPENSSL_NO_ECDH |
| 2453 | j=1; | 2345 | j = 1; |
| 2454 | for (k=0; k<EC_NUM; k++) | 2346 | for (k = 0; k < EC_NUM; k++) { |
| 2455 | { | 2347 | if (!ecdh_doit[k]) |
| 2456 | if (!ecdh_doit[k]) continue; | 2348 | continue; |
| 2457 | if (j && !mr) | 2349 | if (j && !mr) { |
| 2458 | { | 2350 | printf("%30sop op/s\n", " "); |
| 2459 | printf("%30sop op/s\n"," "); | 2351 | j = 0; |
| 2460 | j=0; | 2352 | } |
| 2461 | } | ||
| 2462 | if (mr) | 2353 | if (mr) |
| 2463 | fprintf(stdout,"+F5:%u:%u:%f:%f\n", | 2354 | fprintf(stdout, "+F5:%u:%u:%f:%f\n", |
| 2464 | k, test_curves_bits[k], | 2355 | k, test_curves_bits[k], |
| 2465 | ecdh_results[k][0], 1.0/ecdh_results[k][0]); | 2356 | ecdh_results[k][0], 1.0 / ecdh_results[k][0]); |
| 2466 | 2357 | ||
| 2467 | else | 2358 | else |
| 2468 | fprintf(stdout,"%4u bit ecdh (%s) %8.4fs %8.1f\n", | 2359 | fprintf(stdout, "%4u bit ecdh (%s) %8.4fs %8.1f\n", |
| 2469 | test_curves_bits[k], | 2360 | test_curves_bits[k], |
| 2470 | test_curves_names[k], | 2361 | test_curves_names[k], |
| 2471 | ecdh_results[k][0], 1.0/ecdh_results[k][0]); | 2362 | ecdh_results[k][0], 1.0 / ecdh_results[k][0]); |
| 2472 | } | 2363 | } |
| 2473 | #endif | 2364 | #endif |
| 2474 | 2365 | ||
| 2475 | mret=0; | 2366 | mret = 0; |
| 2476 | 2367 | ||
| 2477 | end: | 2368 | end: |
| 2478 | ERR_print_errors(bio_err); | 2369 | ERR_print_errors(bio_err); |
| 2479 | if (buf != NULL) free(buf); | 2370 | if (buf != NULL) |
| 2480 | if (buf2 != NULL) free(buf2); | 2371 | free(buf); |
| 2372 | if (buf2 != NULL) | ||
| 2373 | free(buf2); | ||
| 2481 | #ifndef OPENSSL_NO_RSA | 2374 | #ifndef OPENSSL_NO_RSA |
| 2482 | for (i=0; i<RSA_NUM; i++) | 2375 | for (i = 0; i < RSA_NUM; i++) |
| 2483 | if (rsa_key[i] != NULL) | 2376 | if (rsa_key[i] != NULL) |
| 2484 | RSA_free(rsa_key[i]); | 2377 | RSA_free(rsa_key[i]); |
| 2485 | #endif | 2378 | #endif |
| 2486 | #ifndef OPENSSL_NO_DSA | 2379 | #ifndef OPENSSL_NO_DSA |
| 2487 | for (i=0; i<DSA_NUM; i++) | 2380 | for (i = 0; i < DSA_NUM; i++) |
| 2488 | if (dsa_key[i] != NULL) | 2381 | if (dsa_key[i] != NULL) |
| 2489 | DSA_free(dsa_key[i]); | 2382 | DSA_free(dsa_key[i]); |
| 2490 | #endif | 2383 | #endif |
| 2491 | 2384 | ||
| 2492 | #ifndef OPENSSL_NO_ECDSA | 2385 | #ifndef OPENSSL_NO_ECDSA |
| 2493 | for (i=0; i<EC_NUM; i++) | 2386 | for (i = 0; i < EC_NUM; i++) |
| 2494 | if (ecdsa[i] != NULL) | 2387 | if (ecdsa[i] != NULL) |
| 2495 | EC_KEY_free(ecdsa[i]); | 2388 | EC_KEY_free(ecdsa[i]); |
| 2496 | #endif | 2389 | #endif |
| 2497 | #ifndef OPENSSL_NO_ECDH | 2390 | #ifndef OPENSSL_NO_ECDH |
| 2498 | for (i=0; i<EC_NUM; i++) | 2391 | for (i = 0; i < EC_NUM; i++) { |
| 2499 | { | ||
| 2500 | if (ecdh_a[i] != NULL) | 2392 | if (ecdh_a[i] != NULL) |
| 2501 | EC_KEY_free(ecdh_a[i]); | 2393 | EC_KEY_free(ecdh_a[i]); |
| 2502 | if (ecdh_b[i] != NULL) | 2394 | if (ecdh_b[i] != NULL) |
| @@ -2505,273 +2397,255 @@ end: | |||
| 2505 | #endif | 2397 | #endif |
| 2506 | 2398 | ||
| 2507 | apps_shutdown(); | 2399 | apps_shutdown(); |
| 2508 | return(mret); | 2400 | return (mret); |
| 2509 | } | 2401 | } |
| 2510 | 2402 | ||
| 2511 | static void print_message(const char *s, long num, int length) | 2403 | static void |
| 2512 | { | 2404 | print_message(const char *s, long num, int length) |
| 2405 | { | ||
| 2513 | #ifdef SIGALRM | 2406 | #ifdef SIGALRM |
| 2514 | BIO_printf(bio_err,mr ? "+DT:%s:%d:%d\n" | 2407 | BIO_printf(bio_err, mr ? "+DT:%s:%d:%d\n" |
| 2515 | : "Doing %s for %ds on %d size blocks: ",s,SECONDS,length); | 2408 | : "Doing %s for %ds on %d size blocks: ", s, SECONDS, length); |
| 2516 | (void)BIO_flush(bio_err); | 2409 | (void) BIO_flush(bio_err); |
| 2517 | alarm(SECONDS); | 2410 | alarm(SECONDS); |
| 2518 | #else | 2411 | #else |
| 2519 | BIO_printf(bio_err,mr ? "+DN:%s:%ld:%d\n" | 2412 | BIO_printf(bio_err, mr ? "+DN:%s:%ld:%d\n" |
| 2520 | : "Doing %s %ld times on %d size blocks: ",s,num,length); | 2413 | : "Doing %s %ld times on %d size blocks: ", s, num, length); |
| 2521 | (void)BIO_flush(bio_err); | 2414 | (void) BIO_flush(bio_err); |
| 2522 | #endif | 2415 | #endif |
| 2523 | #ifdef LINT | 2416 | #ifdef LINT |
| 2524 | num=num; | 2417 | num = num; |
| 2525 | #endif | 2418 | #endif |
| 2526 | } | 2419 | } |
| 2527 | 2420 | ||
| 2528 | static void pkey_print_message(const char *str, const char *str2, long num, | 2421 | static void |
| 2529 | int bits, int tm) | 2422 | pkey_print_message(const char *str, const char *str2, long num, |
| 2530 | { | 2423 | int bits, int tm) |
| 2424 | { | ||
| 2531 | #ifdef SIGALRM | 2425 | #ifdef SIGALRM |
| 2532 | BIO_printf(bio_err,mr ? "+DTP:%d:%s:%s:%d\n" | 2426 | BIO_printf(bio_err, mr ? "+DTP:%d:%s:%s:%d\n" |
| 2533 | : "Doing %d bit %s %s's for %ds: ",bits,str,str2,tm); | 2427 | : "Doing %d bit %s %s's for %ds: ", bits, str, str2, tm); |
| 2534 | (void)BIO_flush(bio_err); | 2428 | (void) BIO_flush(bio_err); |
| 2535 | alarm(tm); | 2429 | alarm(tm); |
| 2536 | #else | 2430 | #else |
| 2537 | BIO_printf(bio_err,mr ? "+DNP:%ld:%d:%s:%s\n" | 2431 | BIO_printf(bio_err, mr ? "+DNP:%ld:%d:%s:%s\n" |
| 2538 | : "Doing %ld %d bit %s %s's: ",num,bits,str,str2); | 2432 | : "Doing %ld %d bit %s %s's: ", num, bits, str, str2); |
| 2539 | (void)BIO_flush(bio_err); | 2433 | (void) BIO_flush(bio_err); |
| 2540 | #endif | 2434 | #endif |
| 2541 | #ifdef LINT | 2435 | #ifdef LINT |
| 2542 | num=num; | 2436 | num = num; |
| 2543 | #endif | 2437 | #endif |
| 2438 | } | ||
| 2439 | |||
| 2440 | static void | ||
| 2441 | print_result(int alg, int run_no, int count, double time_used) | ||
| 2442 | { | ||
| 2443 | BIO_printf(bio_err, mr ? "+R:%d:%s:%f\n" | ||
| 2444 | : "%d %s's in %.2fs\n", count, names[alg], time_used); | ||
| 2445 | results[alg][run_no] = ((double) count) / time_used * lengths[run_no]; | ||
| 2446 | } | ||
| 2447 | |||
| 2448 | #ifndef NO_FORK | ||
| 2449 | static char * | ||
| 2450 | sstrsep(char **string, const char *delim) | ||
| 2451 | { | ||
| 2452 | char isdelim[256]; | ||
| 2453 | char *token = *string; | ||
| 2454 | |||
| 2455 | if (**string == 0) | ||
| 2456 | return NULL; | ||
| 2457 | |||
| 2458 | memset(isdelim, 0, sizeof isdelim); | ||
| 2459 | isdelim[0] = 1; | ||
| 2460 | |||
| 2461 | while (*delim) { | ||
| 2462 | isdelim[(unsigned char) (*delim)] = 1; | ||
| 2463 | delim++; | ||
| 2544 | } | 2464 | } |
| 2545 | 2465 | ||
| 2546 | static void print_result(int alg,int run_no,int count,double time_used) | 2466 | while (!isdelim[(unsigned char) (**string)]) { |
| 2547 | { | 2467 | (*string)++; |
| 2548 | BIO_printf(bio_err,mr ? "+R:%d:%s:%f\n" | ||
| 2549 | : "%d %s's in %.2fs\n",count,names[alg],time_used); | ||
| 2550 | results[alg][run_no]=((double)count)/time_used*lengths[run_no]; | ||
| 2551 | } | 2468 | } |
| 2552 | 2469 | ||
| 2553 | #ifndef NO_FORK | 2470 | if (**string) { |
| 2554 | static char *sstrsep(char **string, const char *delim) | 2471 | **string = 0; |
| 2555 | { | 2472 | (*string)++; |
| 2556 | char isdelim[256]; | 2473 | } |
| 2557 | char *token = *string; | 2474 | return token; |
| 2558 | 2475 | } | |
| 2559 | if (**string == 0) | 2476 | |
| 2560 | return NULL; | 2477 | static int |
| 2561 | 2478 | do_multi(int multi) | |
| 2562 | memset(isdelim, 0, sizeof isdelim); | 2479 | { |
| 2563 | isdelim[0] = 1; | ||
| 2564 | |||
| 2565 | while (*delim) | ||
| 2566 | { | ||
| 2567 | isdelim[(unsigned char)(*delim)] = 1; | ||
| 2568 | delim++; | ||
| 2569 | } | ||
| 2570 | |||
| 2571 | while (!isdelim[(unsigned char)(**string)]) | ||
| 2572 | { | ||
| 2573 | (*string)++; | ||
| 2574 | } | ||
| 2575 | |||
| 2576 | if (**string) | ||
| 2577 | { | ||
| 2578 | **string = 0; | ||
| 2579 | (*string)++; | ||
| 2580 | } | ||
| 2581 | |||
| 2582 | return token; | ||
| 2583 | } | ||
| 2584 | |||
| 2585 | static int do_multi(int multi) | ||
| 2586 | { | ||
| 2587 | int n; | 2480 | int n; |
| 2588 | int fd[2]; | 2481 | int fd[2]; |
| 2589 | int *fds; | 2482 | int *fds; |
| 2590 | static char sep[]=":"; | 2483 | static char sep[] = ":"; |
| 2591 | 2484 | ||
| 2592 | fds=malloc(multi*sizeof *fds); | 2485 | fds = malloc(multi * sizeof *fds); |
| 2593 | for(n=0 ; n < multi ; ++n) | 2486 | for (n = 0; n < multi; ++n) { |
| 2594 | { | 2487 | if (pipe(fd) == -1) { |
| 2595 | if (pipe(fd) == -1) | ||
| 2596 | { | ||
| 2597 | fprintf(stderr, "pipe failure\n"); | 2488 | fprintf(stderr, "pipe failure\n"); |
| 2598 | exit(1); | 2489 | exit(1); |
| 2599 | } | 2490 | } |
| 2600 | fflush(stdout); | 2491 | fflush(stdout); |
| 2601 | fflush(stderr); | 2492 | fflush(stderr); |
| 2602 | if(fork()) | 2493 | if (fork()) { |
| 2603 | { | ||
| 2604 | close(fd[1]); | 2494 | close(fd[1]); |
| 2605 | fds[n]=fd[0]; | 2495 | fds[n] = fd[0]; |
| 2606 | } | 2496 | } else { |
| 2607 | else | ||
| 2608 | { | ||
| 2609 | close(fd[0]); | 2497 | close(fd[0]); |
| 2610 | close(1); | 2498 | close(1); |
| 2611 | if (dup(fd[1]) == -1) | 2499 | if (dup(fd[1]) == -1) { |
| 2612 | { | ||
| 2613 | fprintf(stderr, "dup failed\n"); | 2500 | fprintf(stderr, "dup failed\n"); |
| 2614 | exit(1); | 2501 | exit(1); |
| 2615 | } | 2502 | } |
| 2616 | close(fd[1]); | 2503 | close(fd[1]); |
| 2617 | mr=1; | 2504 | mr = 1; |
| 2618 | usertime=0; | 2505 | usertime = 0; |
| 2619 | free(fds); | 2506 | free(fds); |
| 2620 | return 0; | 2507 | return 0; |
| 2621 | } | ||
| 2622 | printf("Forked child %d\n",n); | ||
| 2623 | } | 2508 | } |
| 2509 | printf("Forked child %d\n", n); | ||
| 2510 | } | ||
| 2624 | 2511 | ||
| 2625 | /* for now, assume the pipe is long enough to take all the output */ | 2512 | /* for now, assume the pipe is long enough to take all the output */ |
| 2626 | for(n=0 ; n < multi ; ++n) | 2513 | for (n = 0; n < multi; ++n) { |
| 2627 | { | ||
| 2628 | FILE *f; | 2514 | FILE *f; |
| 2629 | char buf[1024]; | 2515 | char buf[1024]; |
| 2630 | char *p; | 2516 | char *p; |
| 2631 | 2517 | ||
| 2632 | f=fdopen(fds[n],"r"); | 2518 | f = fdopen(fds[n], "r"); |
| 2633 | while(fgets(buf,sizeof buf,f)) | 2519 | while (fgets(buf, sizeof buf, f)) { |
| 2634 | { | 2520 | p = strchr(buf, '\n'); |
| 2635 | p=strchr(buf,'\n'); | 2521 | if (p) |
| 2636 | if(p) | 2522 | *p = '\0'; |
| 2637 | *p='\0'; | 2523 | if (buf[0] != '+') { |
| 2638 | if(buf[0] != '+') | 2524 | fprintf(stderr, "Don't understand line '%s' from child %d\n", |
| 2639 | { | 2525 | buf, n); |
| 2640 | fprintf(stderr,"Don't understand line '%s' from child %d\n", | ||
| 2641 | buf,n); | ||
| 2642 | continue; | 2526 | continue; |
| 2643 | } | 2527 | } |
| 2644 | printf("Got: %s from %d\n",buf,n); | 2528 | printf("Got: %s from %d\n", buf, n); |
| 2645 | if(!strncmp(buf,"+F:",3)) | 2529 | if (!strncmp(buf, "+F:", 3)) { |
| 2646 | { | ||
| 2647 | int alg; | 2530 | int alg; |
| 2648 | int j; | 2531 | int j; |
| 2649 | 2532 | ||
| 2650 | p=buf+3; | 2533 | p = buf + 3; |
| 2651 | alg=atoi(sstrsep(&p,sep)); | 2534 | alg = atoi(sstrsep(&p, sep)); |
| 2652 | sstrsep(&p,sep); | 2535 | sstrsep(&p, sep); |
| 2653 | for(j=0 ; j < SIZE_NUM ; ++j) | 2536 | for (j = 0; j < SIZE_NUM; ++j) |
| 2654 | results[alg][j]+=atof(sstrsep(&p,sep)); | 2537 | results[alg][j] += atof(sstrsep(&p, sep)); |
| 2655 | } | 2538 | } else if (!strncmp(buf, "+F2:", 4)) { |
| 2656 | else if(!strncmp(buf,"+F2:",4)) | ||
| 2657 | { | ||
| 2658 | int k; | 2539 | int k; |
| 2659 | double d; | 2540 | double d; |
| 2660 | 2541 | ||
| 2661 | p=buf+4; | 2542 | p = buf + 4; |
| 2662 | k=atoi(sstrsep(&p,sep)); | 2543 | k = atoi(sstrsep(&p, sep)); |
| 2663 | sstrsep(&p,sep); | 2544 | sstrsep(&p, sep); |
| 2664 | 2545 | ||
| 2665 | d=atof(sstrsep(&p,sep)); | 2546 | d = atof(sstrsep(&p, sep)); |
| 2666 | if(n) | 2547 | if (n) |
| 2667 | rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d); | 2548 | rsa_results[k][0] = 1 / (1 / rsa_results[k][0] + 1 / d); |
| 2668 | else | 2549 | else |
| 2669 | rsa_results[k][0]=d; | 2550 | rsa_results[k][0] = d; |
| 2670 | 2551 | ||
| 2671 | d=atof(sstrsep(&p,sep)); | 2552 | d = atof(sstrsep(&p, sep)); |
| 2672 | if(n) | 2553 | if (n) |
| 2673 | rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d); | 2554 | rsa_results[k][1] = 1 / (1 / rsa_results[k][1] + 1 / d); |
| 2674 | else | 2555 | else |
| 2675 | rsa_results[k][1]=d; | 2556 | rsa_results[k][1] = d; |
| 2676 | } | 2557 | } else if (!strncmp(buf, "+F2:", 4)) { |
| 2677 | else if(!strncmp(buf,"+F2:",4)) | ||
| 2678 | { | ||
| 2679 | int k; | 2558 | int k; |
| 2680 | double d; | 2559 | double d; |
| 2681 | 2560 | ||
| 2682 | p=buf+4; | 2561 | p = buf + 4; |
| 2683 | k=atoi(sstrsep(&p,sep)); | 2562 | k = atoi(sstrsep(&p, sep)); |
| 2684 | sstrsep(&p,sep); | 2563 | sstrsep(&p, sep); |
| 2685 | 2564 | ||
| 2686 | d=atof(sstrsep(&p,sep)); | 2565 | d = atof(sstrsep(&p, sep)); |
| 2687 | if(n) | 2566 | if (n) |
| 2688 | rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d); | 2567 | rsa_results[k][0] = 1 / (1 / rsa_results[k][0] + 1 / d); |
| 2689 | else | 2568 | else |
| 2690 | rsa_results[k][0]=d; | 2569 | rsa_results[k][0] = d; |
| 2691 | 2570 | ||
| 2692 | d=atof(sstrsep(&p,sep)); | 2571 | d = atof(sstrsep(&p, sep)); |
| 2693 | if(n) | 2572 | if (n) |
| 2694 | rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d); | 2573 | rsa_results[k][1] = 1 / (1 / rsa_results[k][1] + 1 / d); |
| 2695 | else | 2574 | else |
| 2696 | rsa_results[k][1]=d; | 2575 | rsa_results[k][1] = d; |
| 2697 | } | 2576 | } |
| 2698 | #ifndef OPENSSL_NO_DSA | 2577 | #ifndef OPENSSL_NO_DSA |
| 2699 | else if(!strncmp(buf,"+F3:",4)) | 2578 | else if (!strncmp(buf, "+F3:", 4)) { |
| 2700 | { | ||
| 2701 | int k; | 2579 | int k; |
| 2702 | double d; | 2580 | double d; |
| 2703 | 2581 | ||
| 2704 | p=buf+4; | 2582 | p = buf + 4; |
| 2705 | k=atoi(sstrsep(&p,sep)); | 2583 | k = atoi(sstrsep(&p, sep)); |
| 2706 | sstrsep(&p,sep); | 2584 | sstrsep(&p, sep); |
| 2707 | 2585 | ||
| 2708 | d=atof(sstrsep(&p,sep)); | 2586 | d = atof(sstrsep(&p, sep)); |
| 2709 | if(n) | 2587 | if (n) |
| 2710 | dsa_results[k][0]=1/(1/dsa_results[k][0]+1/d); | 2588 | dsa_results[k][0] = 1 / (1 / dsa_results[k][0] + 1 / d); |
| 2711 | else | 2589 | else |
| 2712 | dsa_results[k][0]=d; | 2590 | dsa_results[k][0] = d; |
| 2713 | 2591 | ||
| 2714 | d=atof(sstrsep(&p,sep)); | 2592 | d = atof(sstrsep(&p, sep)); |
| 2715 | if(n) | 2593 | if (n) |
| 2716 | dsa_results[k][1]=1/(1/dsa_results[k][1]+1/d); | 2594 | dsa_results[k][1] = 1 / (1 / dsa_results[k][1] + 1 / d); |
| 2717 | else | 2595 | else |
| 2718 | dsa_results[k][1]=d; | 2596 | dsa_results[k][1] = d; |
| 2719 | } | 2597 | } |
| 2720 | #endif | 2598 | #endif |
| 2721 | #ifndef OPENSSL_NO_ECDSA | 2599 | #ifndef OPENSSL_NO_ECDSA |
| 2722 | else if(!strncmp(buf,"+F4:",4)) | 2600 | else if (!strncmp(buf, "+F4:", 4)) { |
| 2723 | { | ||
| 2724 | int k; | 2601 | int k; |
| 2725 | double d; | 2602 | double d; |
| 2726 | 2603 | ||
| 2727 | p=buf+4; | 2604 | p = buf + 4; |
| 2728 | k=atoi(sstrsep(&p,sep)); | 2605 | k = atoi(sstrsep(&p, sep)); |
| 2729 | sstrsep(&p,sep); | 2606 | sstrsep(&p, sep); |
| 2730 | 2607 | ||
| 2731 | d=atof(sstrsep(&p,sep)); | 2608 | d = atof(sstrsep(&p, sep)); |
| 2732 | if(n) | 2609 | if (n) |
| 2733 | ecdsa_results[k][0]=1/(1/ecdsa_results[k][0]+1/d); | 2610 | ecdsa_results[k][0] = 1 / (1 / ecdsa_results[k][0] + 1 / d); |
| 2734 | else | 2611 | else |
| 2735 | ecdsa_results[k][0]=d; | 2612 | ecdsa_results[k][0] = d; |
| 2736 | 2613 | ||
| 2737 | d=atof(sstrsep(&p,sep)); | 2614 | d = atof(sstrsep(&p, sep)); |
| 2738 | if(n) | 2615 | if (n) |
| 2739 | ecdsa_results[k][1]=1/(1/ecdsa_results[k][1]+1/d); | 2616 | ecdsa_results[k][1] = 1 / (1 / ecdsa_results[k][1] + 1 / d); |
| 2740 | else | 2617 | else |
| 2741 | ecdsa_results[k][1]=d; | 2618 | ecdsa_results[k][1] = d; |
| 2742 | } | 2619 | } |
| 2743 | #endif | 2620 | #endif |
| 2744 | 2621 | ||
| 2745 | #ifndef OPENSSL_NO_ECDH | 2622 | #ifndef OPENSSL_NO_ECDH |
| 2746 | else if(!strncmp(buf,"+F5:",4)) | 2623 | else if (!strncmp(buf, "+F5:", 4)) { |
| 2747 | { | ||
| 2748 | int k; | 2624 | int k; |
| 2749 | double d; | 2625 | double d; |
| 2750 | 2626 | ||
| 2751 | p=buf+4; | 2627 | p = buf + 4; |
| 2752 | k=atoi(sstrsep(&p,sep)); | 2628 | k = atoi(sstrsep(&p, sep)); |
| 2753 | sstrsep(&p,sep); | 2629 | sstrsep(&p, sep); |
| 2754 | 2630 | ||
| 2755 | d=atof(sstrsep(&p,sep)); | 2631 | d = atof(sstrsep(&p, sep)); |
| 2756 | if(n) | 2632 | if (n) |
| 2757 | ecdh_results[k][0]=1/(1/ecdh_results[k][0]+1/d); | 2633 | ecdh_results[k][0] = 1 / (1 / ecdh_results[k][0] + 1 / d); |
| 2758 | else | 2634 | else |
| 2759 | ecdh_results[k][0]=d; | 2635 | ecdh_results[k][0] = d; |
| 2760 | 2636 | ||
| 2761 | } | 2637 | } |
| 2762 | #endif | 2638 | #endif |
| 2763 | 2639 | ||
| 2764 | else if(!strncmp(buf,"+H:",3)) | 2640 | else if (!strncmp(buf, "+H:", 3)) { |
| 2765 | { | 2641 | } else |
| 2766 | } | 2642 | fprintf(stderr, "Unknown type '%s' from child %d\n", buf, n); |
| 2767 | else | 2643 | } |
| 2768 | fprintf(stderr,"Unknown type '%s' from child %d\n",buf,n); | ||
| 2769 | } | ||
| 2770 | 2644 | ||
| 2771 | fclose(f); | 2645 | fclose(f); |
| 2772 | } | 2646 | } |
| 2773 | free(fds); | 2647 | free(fds); |
| 2774 | return 1; | 2648 | return 1; |
| 2775 | } | 2649 | } |
| 2776 | #endif | 2650 | #endif |
| 2777 | #endif | 2651 | #endif |
diff --git a/src/lib/libssl/src/apps/spkac.c b/src/lib/libssl/src/apps/spkac.c index 3caf5c04bd..33ca993361 100644 --- a/src/lib/libssl/src/apps/spkac.c +++ b/src/lib/libssl/src/apps/spkac.c | |||
| @@ -12,7 +12,7 @@ | |||
| 12 | * are met: | 12 | * are met: |
| 13 | * | 13 | * |
| 14 | * 1. Redistributions of source code must retain the above copyright | 14 | * 1. Redistributions of source code must retain the above copyright |
| 15 | * notice, this list of conditions and the following disclaimer. | 15 | * notice, this list of conditions and the following disclaimer. |
| 16 | * | 16 | * |
| 17 | * 2. Redistributions in binary form must reproduce the above copyright | 17 | * 2. Redistributions in binary form must reproduce the above copyright |
| 18 | * notice, this list of conditions and the following disclaimer in | 18 | * notice, this list of conditions and the following disclaimer in |
| @@ -79,13 +79,14 @@ | |||
| 79 | 79 | ||
| 80 | int MAIN(int, char **); | 80 | int MAIN(int, char **); |
| 81 | 81 | ||
| 82 | int MAIN(int argc, char **argv) | 82 | int |
| 83 | { | 83 | MAIN(int argc, char **argv) |
| 84 | { | ||
| 84 | ENGINE *e = NULL; | 85 | ENGINE *e = NULL; |
| 85 | int i,badops=0, ret = 1; | 86 | int i, badops = 0, ret = 1; |
| 86 | BIO *in = NULL,*out = NULL; | 87 | BIO *in = NULL, *out = NULL; |
| 87 | int verify=0,noout=0,pubkey=0; | 88 | int verify = 0, noout = 0, pubkey = 0; |
| 88 | char *infile = NULL,*outfile = NULL,*prog; | 89 | char *infile = NULL, *outfile = NULL, *prog; |
| 89 | char *passargin = NULL, *passin = NULL; | 90 | char *passargin = NULL, *passin = NULL; |
| 90 | const char *spkac = "SPKAC", *spksect = "default"; | 91 | const char *spkac = "SPKAC", *spksect = "default"; |
| 91 | char *spkstr = NULL; | 92 | char *spkstr = NULL; |
| @@ -94,124 +95,118 @@ int MAIN(int argc, char **argv) | |||
| 94 | NETSCAPE_SPKI *spki = NULL; | 95 | NETSCAPE_SPKI *spki = NULL; |
| 95 | EVP_PKEY *pkey = NULL; | 96 | EVP_PKEY *pkey = NULL; |
| 96 | #ifndef OPENSSL_NO_ENGINE | 97 | #ifndef OPENSSL_NO_ENGINE |
| 97 | char *engine=NULL; | 98 | char *engine = NULL; |
| 98 | #endif | 99 | #endif |
| 99 | 100 | ||
| 100 | apps_startup(); | 101 | apps_startup(); |
| 101 | 102 | ||
| 102 | if (!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); | 103 | if (!bio_err) |
| 104 | bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); | ||
| 103 | 105 | ||
| 104 | if (!load_config(bio_err, NULL)) | 106 | if (!load_config(bio_err, NULL)) |
| 105 | goto end; | 107 | goto end; |
| 106 | 108 | ||
| 107 | prog=argv[0]; | 109 | prog = argv[0]; |
| 108 | argc--; | 110 | argc--; |
| 109 | argv++; | 111 | argv++; |
| 110 | while (argc >= 1) | 112 | while (argc >= 1) { |
| 111 | { | 113 | if (strcmp(*argv, "-in") == 0) { |
| 112 | if (strcmp(*argv,"-in") == 0) | 114 | if (--argc < 1) |
| 113 | { | 115 | goto bad; |
| 114 | if (--argc < 1) goto bad; | 116 | infile = *(++argv); |
| 115 | infile= *(++argv); | 117 | } else if (strcmp(*argv, "-out") == 0) { |
| 116 | } | 118 | if (--argc < 1) |
| 117 | else if (strcmp(*argv,"-out") == 0) | 119 | goto bad; |
| 118 | { | 120 | outfile = *(++argv); |
| 119 | if (--argc < 1) goto bad; | 121 | } else if (strcmp(*argv, "-passin") == 0) { |
| 120 | outfile= *(++argv); | 122 | if (--argc < 1) |
| 121 | } | 123 | goto bad; |
| 122 | else if (strcmp(*argv,"-passin") == 0) | 124 | passargin = *(++argv); |
| 123 | { | 125 | } else if (strcmp(*argv, "-key") == 0) { |
| 124 | if (--argc < 1) goto bad; | 126 | if (--argc < 1) |
| 125 | passargin= *(++argv); | 127 | goto bad; |
| 126 | } | 128 | keyfile = *(++argv); |
| 127 | else if (strcmp(*argv,"-key") == 0) | 129 | } else if (strcmp(*argv, "-challenge") == 0) { |
| 128 | { | 130 | if (--argc < 1) |
| 129 | if (--argc < 1) goto bad; | 131 | goto bad; |
| 130 | keyfile= *(++argv); | 132 | challenge = *(++argv); |
| 131 | } | 133 | } else if (strcmp(*argv, "-spkac") == 0) { |
| 132 | else if (strcmp(*argv,"-challenge") == 0) | 134 | if (--argc < 1) |
| 133 | { | 135 | goto bad; |
| 134 | if (--argc < 1) goto bad; | 136 | spkac = *(++argv); |
| 135 | challenge= *(++argv); | 137 | } else if (strcmp(*argv, "-spksect") == 0) { |
| 136 | } | 138 | if (--argc < 1) |
| 137 | else if (strcmp(*argv,"-spkac") == 0) | 139 | goto bad; |
| 138 | { | 140 | spksect = *(++argv); |
| 139 | if (--argc < 1) goto bad; | 141 | } |
| 140 | spkac= *(++argv); | ||
| 141 | } | ||
| 142 | else if (strcmp(*argv,"-spksect") == 0) | ||
| 143 | { | ||
| 144 | if (--argc < 1) goto bad; | ||
| 145 | spksect= *(++argv); | ||
| 146 | } | ||
| 147 | #ifndef OPENSSL_NO_ENGINE | 142 | #ifndef OPENSSL_NO_ENGINE |
| 148 | else if (strcmp(*argv,"-engine") == 0) | 143 | else if (strcmp(*argv, "-engine") == 0) { |
| 149 | { | 144 | if (--argc < 1) |
| 150 | if (--argc < 1) goto bad; | 145 | goto bad; |
| 151 | engine= *(++argv); | 146 | engine = *(++argv); |
| 152 | } | 147 | } |
| 153 | #endif | 148 | #endif |
| 154 | else if (strcmp(*argv,"-noout") == 0) | 149 | else if (strcmp(*argv, "-noout") == 0) |
| 155 | noout=1; | 150 | noout = 1; |
| 156 | else if (strcmp(*argv,"-pubkey") == 0) | 151 | else if (strcmp(*argv, "-pubkey") == 0) |
| 157 | pubkey=1; | 152 | pubkey = 1; |
| 158 | else if (strcmp(*argv,"-verify") == 0) | 153 | else if (strcmp(*argv, "-verify") == 0) |
| 159 | verify=1; | 154 | verify = 1; |
| 160 | else badops = 1; | 155 | else |
| 156 | badops = 1; | ||
| 161 | argc--; | 157 | argc--; |
| 162 | argv++; | 158 | argv++; |
| 163 | } | 159 | } |
| 164 | 160 | ||
| 165 | if (badops) | 161 | if (badops) { |
| 166 | { | ||
| 167 | bad: | 162 | bad: |
| 168 | BIO_printf(bio_err,"%s [options]\n",prog); | 163 | BIO_printf(bio_err, "%s [options]\n", prog); |
| 169 | BIO_printf(bio_err,"where options are\n"); | 164 | BIO_printf(bio_err, "where options are\n"); |
| 170 | BIO_printf(bio_err," -in arg input file\n"); | 165 | BIO_printf(bio_err, " -in arg input file\n"); |
| 171 | BIO_printf(bio_err," -out arg output file\n"); | 166 | BIO_printf(bio_err, " -out arg output file\n"); |
| 172 | BIO_printf(bio_err," -key arg create SPKAC using private key\n"); | 167 | BIO_printf(bio_err, " -key arg create SPKAC using private key\n"); |
| 173 | BIO_printf(bio_err," -passin arg input file pass phrase source\n"); | 168 | BIO_printf(bio_err, " -passin arg input file pass phrase source\n"); |
| 174 | BIO_printf(bio_err," -challenge arg challenge string\n"); | 169 | BIO_printf(bio_err, " -challenge arg challenge string\n"); |
| 175 | BIO_printf(bio_err," -spkac arg alternative SPKAC name\n"); | 170 | BIO_printf(bio_err, " -spkac arg alternative SPKAC name\n"); |
| 176 | BIO_printf(bio_err," -noout don't print SPKAC\n"); | 171 | BIO_printf(bio_err, " -noout don't print SPKAC\n"); |
| 177 | BIO_printf(bio_err," -pubkey output public key\n"); | 172 | BIO_printf(bio_err, " -pubkey output public key\n"); |
| 178 | BIO_printf(bio_err," -verify verify SPKAC signature\n"); | 173 | BIO_printf(bio_err, " -verify verify SPKAC signature\n"); |
| 179 | #ifndef OPENSSL_NO_ENGINE | 174 | #ifndef OPENSSL_NO_ENGINE |
| 180 | BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n"); | 175 | BIO_printf(bio_err, " -engine e use engine e, possibly a hardware device.\n"); |
| 181 | #endif | 176 | #endif |
| 182 | goto end; | 177 | goto end; |
| 183 | } | 178 | } |
| 184 | |||
| 185 | ERR_load_crypto_strings(); | 179 | ERR_load_crypto_strings(); |
| 186 | if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) { | 180 | if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) { |
| 187 | BIO_printf(bio_err, "Error getting password\n"); | 181 | BIO_printf(bio_err, "Error getting password\n"); |
| 188 | goto end; | 182 | goto end; |
| 189 | } | 183 | } |
| 190 | |||
| 191 | #ifndef OPENSSL_NO_ENGINE | 184 | #ifndef OPENSSL_NO_ENGINE |
| 192 | e = setup_engine(bio_err, engine, 0); | 185 | e = setup_engine(bio_err, engine, 0); |
| 193 | #endif | 186 | #endif |
| 194 | 187 | ||
| 195 | if(keyfile) { | 188 | if (keyfile) { |
| 196 | pkey = load_key(bio_err, | 189 | pkey = load_key(bio_err, |
| 197 | strcmp(keyfile, "-") ? keyfile : NULL, | 190 | strcmp(keyfile, "-") ? keyfile : NULL, |
| 198 | FORMAT_PEM, 1, passin, e, "private key"); | 191 | FORMAT_PEM, 1, passin, e, "private key"); |
| 199 | if(!pkey) { | 192 | if (!pkey) { |
| 200 | goto end; | 193 | goto end; |
| 201 | } | 194 | } |
| 202 | spki = NETSCAPE_SPKI_new(); | 195 | spki = NETSCAPE_SPKI_new(); |
| 203 | if(challenge) ASN1_STRING_set(spki->spkac->challenge, | 196 | if (challenge) |
| 204 | challenge, (int)strlen(challenge)); | 197 | ASN1_STRING_set(spki->spkac->challenge, |
| 198 | challenge, (int) strlen(challenge)); | ||
| 205 | NETSCAPE_SPKI_set_pubkey(spki, pkey); | 199 | NETSCAPE_SPKI_set_pubkey(spki, pkey); |
| 206 | NETSCAPE_SPKI_sign(spki, pkey, EVP_md5()); | 200 | NETSCAPE_SPKI_sign(spki, pkey, EVP_md5()); |
| 207 | spkstr = NETSCAPE_SPKI_b64_encode(spki); | 201 | spkstr = NETSCAPE_SPKI_b64_encode(spki); |
| 208 | 202 | ||
| 209 | if (outfile) out = BIO_new_file(outfile, "w"); | 203 | if (outfile) |
| 204 | out = BIO_new_file(outfile, "w"); | ||
| 210 | else { | 205 | else { |
| 211 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | 206 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 212 | } | 207 | } |
| 213 | 208 | ||
| 214 | if(!out) { | 209 | if (!out) { |
| 215 | BIO_printf(bio_err, "Error opening output file\n"); | 210 | BIO_printf(bio_err, "Error opening output file\n"); |
| 216 | ERR_print_errors(bio_err); | 211 | ERR_print_errors(bio_err); |
| 217 | goto end; | 212 | goto end; |
| @@ -221,66 +216,64 @@ bad: | |||
| 221 | ret = 0; | 216 | ret = 0; |
| 222 | goto end; | 217 | goto end; |
| 223 | } | 218 | } |
| 219 | if (infile) | ||
| 220 | in = BIO_new_file(infile, "r"); | ||
| 221 | else | ||
| 222 | in = BIO_new_fp(stdin, BIO_NOCLOSE); | ||
| 224 | 223 | ||
| 225 | 224 | if (!in) { | |
| 226 | |||
| 227 | if (infile) in = BIO_new_file(infile, "r"); | ||
| 228 | else in = BIO_new_fp(stdin, BIO_NOCLOSE); | ||
| 229 | |||
| 230 | if(!in) { | ||
| 231 | BIO_printf(bio_err, "Error opening input file\n"); | 225 | BIO_printf(bio_err, "Error opening input file\n"); |
| 232 | ERR_print_errors(bio_err); | 226 | ERR_print_errors(bio_err); |
| 233 | goto end; | 227 | goto end; |
| 234 | } | 228 | } |
| 235 | |||
| 236 | conf = NCONF_new(NULL); | 229 | conf = NCONF_new(NULL); |
| 237 | i = NCONF_load_bio(conf, in, NULL); | 230 | i = NCONF_load_bio(conf, in, NULL); |
| 238 | 231 | ||
| 239 | if(!i) { | 232 | if (!i) { |
| 240 | BIO_printf(bio_err, "Error parsing config file\n"); | 233 | BIO_printf(bio_err, "Error parsing config file\n"); |
| 241 | ERR_print_errors(bio_err); | 234 | ERR_print_errors(bio_err); |
| 242 | goto end; | 235 | goto end; |
| 243 | } | 236 | } |
| 244 | |||
| 245 | spkstr = NCONF_get_string(conf, spksect, spkac); | 237 | spkstr = NCONF_get_string(conf, spksect, spkac); |
| 246 | 238 | ||
| 247 | if(!spkstr) { | 239 | if (!spkstr) { |
| 248 | BIO_printf(bio_err, "Can't find SPKAC called \"%s\"\n", spkac); | 240 | BIO_printf(bio_err, "Can't find SPKAC called \"%s\"\n", spkac); |
| 249 | ERR_print_errors(bio_err); | 241 | ERR_print_errors(bio_err); |
| 250 | goto end; | 242 | goto end; |
| 251 | } | 243 | } |
| 252 | |||
| 253 | spki = NETSCAPE_SPKI_b64_decode(spkstr, -1); | 244 | spki = NETSCAPE_SPKI_b64_decode(spkstr, -1); |
| 254 | 245 | ||
| 255 | if(!spki) { | 246 | if (!spki) { |
| 256 | BIO_printf(bio_err, "Error loading SPKAC\n"); | 247 | BIO_printf(bio_err, "Error loading SPKAC\n"); |
| 257 | ERR_print_errors(bio_err); | 248 | ERR_print_errors(bio_err); |
| 258 | goto end; | 249 | goto end; |
| 259 | } | 250 | } |
| 260 | 251 | if (outfile) | |
| 261 | if (outfile) out = BIO_new_file(outfile, "w"); | 252 | out = BIO_new_file(outfile, "w"); |
| 262 | else { | 253 | else { |
| 263 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | 254 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 264 | } | 255 | } |
| 265 | 256 | ||
| 266 | if(!out) { | 257 | if (!out) { |
| 267 | BIO_printf(bio_err, "Error opening output file\n"); | 258 | BIO_printf(bio_err, "Error opening output file\n"); |
| 268 | ERR_print_errors(bio_err); | 259 | ERR_print_errors(bio_err); |
| 269 | goto end; | 260 | goto end; |
| 270 | } | 261 | } |
| 271 | 262 | if (!noout) | |
| 272 | if(!noout) NETSCAPE_SPKI_print(out, spki); | 263 | NETSCAPE_SPKI_print(out, spki); |
| 273 | pkey = NETSCAPE_SPKI_get_pubkey(spki); | 264 | pkey = NETSCAPE_SPKI_get_pubkey(spki); |
| 274 | if(verify) { | 265 | if (verify) { |
| 275 | i = NETSCAPE_SPKI_verify(spki, pkey); | 266 | i = NETSCAPE_SPKI_verify(spki, pkey); |
| 276 | if (i > 0) BIO_printf(bio_err, "Signature OK\n"); | 267 | if (i > 0) |
| 268 | BIO_printf(bio_err, "Signature OK\n"); | ||
| 277 | else { | 269 | else { |
| 278 | BIO_printf(bio_err, "Signature Failure\n"); | 270 | BIO_printf(bio_err, "Signature Failure\n"); |
| 279 | ERR_print_errors(bio_err); | 271 | ERR_print_errors(bio_err); |
| 280 | goto end; | 272 | goto end; |
| 281 | } | 273 | } |
| 282 | } | 274 | } |
| 283 | if(pubkey) PEM_write_bio_PUBKEY(out, pkey); | 275 | if (pubkey) |
| 276 | PEM_write_bio_PUBKEY(out, pkey); | ||
| 284 | 277 | ||
| 285 | ret = 0; | 278 | ret = 0; |
| 286 | 279 | ||
| @@ -290,7 +283,8 @@ end: | |||
| 290 | BIO_free(in); | 283 | BIO_free(in); |
| 291 | BIO_free_all(out); | 284 | BIO_free_all(out); |
| 292 | EVP_PKEY_free(pkey); | 285 | EVP_PKEY_free(pkey); |
| 293 | if(passin) free(passin); | 286 | if (passin) |
| 287 | free(passin); | ||
| 294 | apps_shutdown(); | 288 | apps_shutdown(); |
| 295 | return(ret); | 289 | return (ret); |
| 296 | } | 290 | } |
diff --git a/src/lib/libssl/src/apps/srp.c b/src/lib/libssl/src/apps/srp.c index 2ce1d40831..1a874fbd6c 100644 --- a/src/lib/libssl/src/apps/srp.c +++ b/src/lib/libssl/src/apps/srp.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* apps/srp.c */ | 1 | /* apps/srp.c */ |
| 2 | /* Written by Peter Sylvester (peter.sylvester@edelweb.fr) | 2 | /* Written by Peter Sylvester (peter.sylvester@edelweb.fr) |
| 3 | * for the EdelKey project and contributed to the OpenSSL project 2004. | 3 | * for the EdelKey project and contributed to the OpenSSL project 2004. |
| 4 | */ | 4 | */ |
| 5 | /* ==================================================================== | 5 | /* ==================================================================== |
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -81,25 +81,25 @@ | |||
| 81 | #define ENV_DATABASE "srpvfile" | 81 | #define ENV_DATABASE "srpvfile" |
| 82 | #define ENV_DEFAULT_SRP "default_srp" | 82 | #define ENV_DEFAULT_SRP "default_srp" |
| 83 | 83 | ||
| 84 | static char *srp_usage[]={ | 84 | static char *srp_usage[] = { |
| 85 | "usage: srp [args] [user] \n", | 85 | "usage: srp [args] [user] \n", |
| 86 | "\n", | 86 | "\n", |
| 87 | " -verbose Talk alot while doing things\n", | 87 | " -verbose Talk alot while doing things\n", |
| 88 | " -config file A config file\n", | 88 | " -config file A config file\n", |
| 89 | " -name arg The particular srp definition to use\n", | 89 | " -name arg The particular srp definition to use\n", |
| 90 | " -srpvfile arg The srp verifier file name\n", | 90 | " -srpvfile arg The srp verifier file name\n", |
| 91 | " -add add an user and srp verifier\n", | 91 | " -add add an user and srp verifier\n", |
| 92 | " -modify modify the srp verifier of an existing user\n", | 92 | " -modify modify the srp verifier of an existing user\n", |
| 93 | " -delete delete user from verifier file\n", | 93 | " -delete delete user from verifier file\n", |
| 94 | " -list list user\n", | 94 | " -list list user\n", |
| 95 | " -gn arg g and N values to be used for new verifier\n", | 95 | " -gn arg g and N values to be used for new verifier\n", |
| 96 | " -userinfo arg additional info to be set for user\n", | 96 | " -userinfo arg additional info to be set for user\n", |
| 97 | " -passin arg input file pass phrase source\n", | 97 | " -passin arg input file pass phrase source\n", |
| 98 | " -passout arg output file pass phrase source\n", | 98 | " -passout arg output file pass phrase source\n", |
| 99 | #ifndef OPENSSL_NO_ENGINE | 99 | #ifndef OPENSSL_NO_ENGINE |
| 100 | " -engine e - use engine e, possibly a hardware device.\n", | 100 | " -engine e - use engine e, possibly a hardware device.\n", |
| 101 | #endif | 101 | #endif |
| 102 | NULL | 102 | NULL |
| 103 | }; | 103 | }; |
| 104 | 104 | ||
| 105 | #ifdef EFENCE | 105 | #ifdef EFENCE |
| @@ -108,110 +108,108 @@ extern int EF_PROTECT_BELOW; | |||
| 108 | extern int EF_ALIGNMENT; | 108 | extern int EF_ALIGNMENT; |
| 109 | #endif | 109 | #endif |
| 110 | 110 | ||
| 111 | static CONF *conf=NULL; | 111 | static CONF *conf = NULL; |
| 112 | static char *section=NULL; | 112 | static char *section = NULL; |
| 113 | 113 | ||
| 114 | #define VERBOSE if (verbose) | 114 | #define VERBOSE if (verbose) |
| 115 | #define VVERBOSE if (verbose>1) | 115 | #define VVERBOSE if (verbose>1) |
| 116 | 116 | ||
| 117 | 117 | ||
| 118 | int MAIN(int, char **); | 118 | int MAIN(int, char **); |
| 119 | 119 | ||
| 120 | static int get_index(CA_DB *db, char* id, char type) | 120 | static int |
| 121 | { | 121 | get_index(CA_DB * db, char *id, char type) |
| 122 | char ** pp; | 122 | { |
| 123 | char **pp; | ||
| 123 | int i; | 124 | int i; |
| 124 | if (id == NULL) return -1; | 125 | if (id == NULL) |
| 125 | if (type == DB_SRP_INDEX) | 126 | return -1; |
| 126 | for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) | 127 | if (type == DB_SRP_INDEX) |
| 127 | { | 128 | for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) { |
| 128 | pp = sk_OPENSSL_PSTRING_value(db->db->data,i); | 129 | pp = sk_OPENSSL_PSTRING_value(db->db->data, i); |
| 129 | if (pp[DB_srptype][0] == DB_SRP_INDEX && !strcmp(id,pp[DB_srpid])) | 130 | if (pp[DB_srptype][0] == DB_SRP_INDEX && !strcmp(id, pp[DB_srpid])) |
| 130 | return i; | 131 | return i; |
| 131 | } | 132 | } |
| 132 | else for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) | 133 | else |
| 133 | { | 134 | for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) { |
| 134 | pp = sk_OPENSSL_PSTRING_value(db->db->data,i); | 135 | pp = sk_OPENSSL_PSTRING_value(db->db->data, i); |
| 135 | 136 | ||
| 136 | if (pp[DB_srptype][0] != DB_SRP_INDEX && !strcmp(id,pp[DB_srpid])) | 137 | if (pp[DB_srptype][0] != DB_SRP_INDEX && !strcmp(id, pp[DB_srpid])) |
| 137 | return i; | 138 | return i; |
| 138 | } | 139 | } |
| 139 | 140 | ||
| 140 | return -1 ; | 141 | return -1; |
| 141 | } | 142 | } |
| 142 | 143 | ||
| 143 | static void print_entry(CA_DB *db, BIO *bio, int indx, int verbose, char *s) | 144 | static void |
| 144 | { | 145 | print_entry(CA_DB * db, BIO * bio, int indx, int verbose, char *s) |
| 145 | if (indx >= 0 && verbose) | 146 | { |
| 146 | { | 147 | if (indx >= 0 && verbose) { |
| 147 | int j; | 148 | int j; |
| 148 | char **pp = sk_OPENSSL_PSTRING_value(db->db->data, indx); | 149 | char **pp = sk_OPENSSL_PSTRING_value(db->db->data, indx); |
| 149 | BIO_printf(bio, "%s \"%s\"\n", s, pp[DB_srpid]); | 150 | BIO_printf(bio, "%s \"%s\"\n", s, pp[DB_srpid]); |
| 150 | for (j = 0; j < DB_NUMBER; j++) | 151 | for (j = 0; j < DB_NUMBER; j++) { |
| 151 | { | 152 | BIO_printf(bio_err, " %d = \"%s\"\n", j, pp[j]); |
| 152 | BIO_printf(bio_err," %d = \"%s\"\n", j, pp[j]); | ||
| 153 | } | ||
| 154 | } | 153 | } |
| 155 | } | 154 | } |
| 155 | } | ||
| 156 | 156 | ||
| 157 | static void print_index(CA_DB *db, BIO *bio, int indexindex, int verbose) | 157 | static void |
| 158 | { | 158 | print_index(CA_DB * db, BIO * bio, int indexindex, int verbose) |
| 159 | print_entry(db, bio, indexindex, verbose, "g N entry") ; | 159 | { |
| 160 | } | 160 | print_entry(db, bio, indexindex, verbose, "g N entry"); |
| 161 | } | ||
| 161 | 162 | ||
| 162 | static void print_user(CA_DB *db, BIO *bio, int userindex, int verbose) | 163 | static void |
| 163 | { | 164 | print_user(CA_DB * db, BIO * bio, int userindex, int verbose) |
| 164 | if (verbose > 0) | 165 | { |
| 165 | { | 166 | if (verbose > 0) { |
| 166 | char **pp = sk_OPENSSL_PSTRING_value(db->db->data,userindex); | 167 | char **pp = sk_OPENSSL_PSTRING_value(db->db->data, userindex); |
| 167 | 168 | ||
| 168 | if (pp[DB_srptype][0] != 'I') | 169 | if (pp[DB_srptype][0] != 'I') { |
| 169 | { | ||
| 170 | print_entry(db, bio, userindex, verbose, "User entry"); | 170 | print_entry(db, bio, userindex, verbose, "User entry"); |
| 171 | print_entry(db, bio, get_index(db, pp[DB_srpgN], 'I'), verbose, "g N entry"); | 171 | print_entry(db, bio, get_index(db, pp[DB_srpgN], 'I'), verbose, "g N entry"); |
| 172 | } | ||
| 173 | |||
| 174 | } | 172 | } |
| 175 | } | 173 | } |
| 174 | } | ||
| 176 | 175 | ||
| 177 | static int update_index(CA_DB *db, BIO *bio, char **row) | 176 | static int |
| 178 | { | 177 | update_index(CA_DB * db, BIO * bio, char **row) |
| 179 | char ** irow; | 178 | { |
| 179 | char **irow; | ||
| 180 | int i; | 180 | int i; |
| 181 | 181 | ||
| 182 | if ((irow=(char **)malloc(sizeof(char *)*(DB_NUMBER+1))) == NULL) | 182 | if ((irow = (char **) malloc(sizeof(char *) * (DB_NUMBER + 1))) == NULL) { |
| 183 | { | 183 | BIO_printf(bio_err, "Memory allocation failure\n"); |
| 184 | BIO_printf(bio_err,"Memory allocation failure\n"); | ||
| 185 | return 0; | 184 | return 0; |
| 186 | } | 185 | } |
| 187 | 186 | for (i = 0; i < DB_NUMBER; i++) { | |
| 188 | for (i=0; i<DB_NUMBER; i++) | 187 | irow[i] = row[i]; |
| 189 | { | 188 | row[i] = NULL; |
| 190 | irow[i]=row[i]; | 189 | } |
| 191 | row[i]=NULL; | 190 | irow[DB_NUMBER] = NULL; |
| 192 | } | ||
| 193 | irow[DB_NUMBER]=NULL; | ||
| 194 | 191 | ||
| 195 | if (!TXT_DB_insert(db->db,irow)) | 192 | if (!TXT_DB_insert(db->db, irow)) { |
| 196 | { | 193 | BIO_printf(bio, "failed to update srpvfile\n"); |
| 197 | BIO_printf(bio,"failed to update srpvfile\n"); | 194 | BIO_printf(bio, "TXT_DB error number %ld\n", db->db->error); |
| 198 | BIO_printf(bio,"TXT_DB error number %ld\n",db->db->error); | ||
| 199 | free(irow); | 195 | free(irow); |
| 200 | return 0; | 196 | return 0; |
| 201 | } | ||
| 202 | return 1; | ||
| 203 | } | 197 | } |
| 198 | return 1; | ||
| 199 | } | ||
| 204 | 200 | ||
| 205 | static void lookup_fail(const char *name, char *tag) | 201 | static void |
| 206 | { | 202 | lookup_fail(const char *name, char *tag) |
| 207 | BIO_printf(bio_err,"variable lookup failed for %s::%s\n",name,tag); | 203 | { |
| 208 | } | 204 | BIO_printf(bio_err, "variable lookup failed for %s::%s\n", name, tag); |
| 205 | } | ||
| 209 | 206 | ||
| 210 | 207 | ||
| 211 | static char *srp_verify_user(const char *user, const char *srp_verifier, | 208 | static char * |
| 212 | char *srp_usersalt, const char *g, const char *N, | 209 | srp_verify_user(const char *user, const char *srp_verifier, |
| 213 | const char *passin, BIO *bio, int verbose) | 210 | char *srp_usersalt, const char *g, const char *N, |
| 214 | { | 211 | const char *passin, BIO * bio, int verbose) |
| 212 | { | ||
| 215 | char password[1024]; | 213 | char password[1024]; |
| 216 | PW_CB_DATA cb_tmp; | 214 | PW_CB_DATA cb_tmp; |
| 217 | char *verifier = NULL; | 215 | char *verifier = NULL; |
| @@ -220,90 +218,85 @@ static char *srp_verify_user(const char *user, const char *srp_verifier, | |||
| 220 | cb_tmp.prompt_info = user; | 218 | cb_tmp.prompt_info = user; |
| 221 | cb_tmp.password = passin; | 219 | cb_tmp.password = passin; |
| 222 | 220 | ||
| 223 | if (password_callback(password, 1024, 0, &cb_tmp) >0) | 221 | if (password_callback(password, 1024, 0, &cb_tmp) > 0) { |
| 224 | { | 222 | VERBOSE BIO_printf(bio, "Validating\n user=\"%s\"\n srp_verifier=\"%s\"\n srp_usersalt=\"%s\"\n g=\"%s\"\n N=\"%s\"\n", user, srp_verifier, srp_usersalt, g, N); |
| 225 | VERBOSE BIO_printf(bio,"Validating\n user=\"%s\"\n srp_verifier=\"%s\"\n srp_usersalt=\"%s\"\n g=\"%s\"\n N=\"%s\"\n",user,srp_verifier,srp_usersalt, g, N); | ||
| 226 | BIO_printf(bio, "Pass %s\n", password); | 223 | BIO_printf(bio, "Pass %s\n", password); |
| 227 | 224 | ||
| 228 | if (!(gNid=SRP_create_verifier(user, password, &srp_usersalt, &verifier, N, g))) | 225 | if (!(gNid = SRP_create_verifier(user, password, &srp_usersalt, &verifier, N, g))) { |
| 229 | { | ||
| 230 | BIO_printf(bio, "Internal error validating SRP verifier\n"); | 226 | BIO_printf(bio, "Internal error validating SRP verifier\n"); |
| 231 | } | 227 | } else { |
| 232 | else | ||
| 233 | { | ||
| 234 | if (strcmp(verifier, srp_verifier)) | 228 | if (strcmp(verifier, srp_verifier)) |
| 235 | gNid = NULL; | 229 | gNid = NULL; |
| 236 | free(verifier); | 230 | free(verifier); |
| 237 | } | ||
| 238 | } | 231 | } |
| 239 | return gNid; | ||
| 240 | } | 232 | } |
| 233 | return gNid; | ||
| 234 | } | ||
| 241 | 235 | ||
| 242 | static char *srp_create_user(char *user, char **srp_verifier, | 236 | static char * |
| 243 | char **srp_usersalt, char *g, char *N, | 237 | srp_create_user(char *user, char **srp_verifier, |
| 244 | char *passout, BIO *bio, int verbose) | 238 | char **srp_usersalt, char *g, char *N, |
| 245 | { | 239 | char *passout, BIO * bio, int verbose) |
| 246 | char password[1024]; | 240 | { |
| 247 | PW_CB_DATA cb_tmp; | 241 | char password[1024]; |
| 242 | PW_CB_DATA cb_tmp; | ||
| 248 | char *gNid = NULL; | 243 | char *gNid = NULL; |
| 249 | char *salt = NULL; | 244 | char *salt = NULL; |
| 250 | cb_tmp.prompt_info = user; | 245 | cb_tmp.prompt_info = user; |
| 251 | cb_tmp.password = passout; | 246 | cb_tmp.password = passout; |
| 252 | 247 | ||
| 253 | if (password_callback(password,1024,1,&cb_tmp) >0) | 248 | if (password_callback(password, 1024, 1, &cb_tmp) > 0) { |
| 254 | { | 249 | VERBOSE BIO_printf(bio, "Creating\n user=\"%s\"\n g=\"%s\"\n N=\"%s\"\n", user, g, N); |
| 255 | VERBOSE BIO_printf(bio,"Creating\n user=\"%s\"\n g=\"%s\"\n N=\"%s\"\n",user,g,N); | 250 | if (!(gNid = SRP_create_verifier(user, password, &salt, srp_verifier, N, g))) { |
| 256 | if (!(gNid =SRP_create_verifier(user, password, &salt, srp_verifier, N, g))) | 251 | BIO_printf(bio, "Internal error creating SRP verifier\n"); |
| 257 | { | 252 | } else |
| 258 | BIO_printf(bio,"Internal error creating SRP verifier\n"); | ||
| 259 | } | ||
| 260 | else | ||
| 261 | *srp_usersalt = salt; | 253 | *srp_usersalt = salt; |
| 262 | VVERBOSE BIO_printf(bio,"gNid=%s salt =\"%s\"\n verifier =\"%s\"\n", gNid,salt, *srp_verifier); | 254 | VVERBOSE BIO_printf(bio, "gNid=%s salt =\"%s\"\n verifier =\"%s\"\n", gNid, salt, *srp_verifier); |
| 263 | 255 | ||
| 264 | } | ||
| 265 | return gNid; | ||
| 266 | } | 256 | } |
| 257 | return gNid; | ||
| 258 | } | ||
| 267 | 259 | ||
| 268 | int MAIN(int argc, char **argv) | 260 | int |
| 269 | { | 261 | MAIN(int argc, char **argv) |
| 262 | { | ||
| 270 | int add_user = 0; | 263 | int add_user = 0; |
| 271 | int list_user= 0; | 264 | int list_user = 0; |
| 272 | int delete_user= 0; | 265 | int delete_user = 0; |
| 273 | int modify_user= 0; | 266 | int modify_user = 0; |
| 274 | char * user = NULL; | 267 | char *user = NULL; |
| 275 | 268 | ||
| 276 | char *passargin = NULL, *passargout = NULL; | 269 | char *passargin = NULL, *passargout = NULL; |
| 277 | char *passin = NULL, *passout = NULL; | 270 | char *passin = NULL, *passout = NULL; |
| 278 | char * gN = NULL; | 271 | char *gN = NULL; |
| 279 | int gNindex = -1; | 272 | int gNindex = -1; |
| 280 | char ** gNrow = NULL; | 273 | char **gNrow = NULL; |
| 281 | int maxgN = -1; | 274 | int maxgN = -1; |
| 282 | 275 | ||
| 283 | char * userinfo = NULL; | 276 | char *userinfo = NULL; |
| 284 | 277 | ||
| 285 | int badops=0; | 278 | int badops = 0; |
| 286 | int ret=1; | 279 | int ret = 1; |
| 287 | int errors=0; | 280 | int errors = 0; |
| 288 | int verbose=0; | 281 | int verbose = 0; |
| 289 | int doupdatedb=0; | 282 | int doupdatedb = 0; |
| 290 | char *configfile=NULL; | 283 | char *configfile = NULL; |
| 291 | char *dbfile=NULL; | 284 | char *dbfile = NULL; |
| 292 | CA_DB *db=NULL; | 285 | CA_DB *db = NULL; |
| 293 | char **pp ; | 286 | char **pp; |
| 294 | int i; | 287 | int i; |
| 295 | long errorline = -1; | 288 | long errorline = -1; |
| 296 | char *randfile=NULL; | 289 | char *randfile = NULL; |
| 297 | #ifndef OPENSSL_NO_ENGINE | 290 | #ifndef OPENSSL_NO_ENGINE |
| 298 | char *engine = NULL; | 291 | char *engine = NULL; |
| 299 | #endif | 292 | #endif |
| 300 | char *tofree=NULL; | 293 | char *tofree = NULL; |
| 301 | DB_ATTR db_attr; | 294 | DB_ATTR db_attr; |
| 302 | 295 | ||
| 303 | #ifdef EFENCE | 296 | #ifdef EFENCE |
| 304 | EF_PROTECT_FREE=1; | 297 | EF_PROTECT_FREE = 1; |
| 305 | EF_PROTECT_BELOW=1; | 298 | EF_PROTECT_BELOW = 1; |
| 306 | EF_ALIGNMENT=0; | 299 | EF_ALIGNMENT = 0; |
| 307 | #endif | 300 | #endif |
| 308 | 301 | ||
| 309 | apps_startup(); | 302 | apps_startup(); |
| @@ -312,439 +305,381 @@ EF_ALIGNMENT=0; | |||
| 312 | section = NULL; | 305 | section = NULL; |
| 313 | 306 | ||
| 314 | if (bio_err == NULL) | 307 | if (bio_err == NULL) |
| 315 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) | 308 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 316 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); | 309 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 317 | 310 | ||
| 318 | argc--; | 311 | argc--; |
| 319 | argv++; | 312 | argv++; |
| 320 | while (argc >= 1 && badops == 0) | 313 | while (argc >= 1 && badops == 0) { |
| 321 | { | 314 | if (strcmp(*argv, "-verbose") == 0) |
| 322 | if (strcmp(*argv,"-verbose") == 0) | ||
| 323 | verbose++; | 315 | verbose++; |
| 324 | else if (strcmp(*argv,"-config") == 0) | 316 | else if (strcmp(*argv, "-config") == 0) { |
| 325 | { | 317 | if (--argc < 1) |
| 326 | if (--argc < 1) goto bad; | 318 | goto bad; |
| 327 | configfile= *(++argv); | 319 | configfile = *(++argv); |
| 328 | } | 320 | } else if (strcmp(*argv, "-name") == 0) { |
| 329 | else if (strcmp(*argv,"-name") == 0) | 321 | if (--argc < 1) |
| 330 | { | 322 | goto bad; |
| 331 | if (--argc < 1) goto bad; | 323 | section = *(++argv); |
| 332 | section= *(++argv); | 324 | } else if (strcmp(*argv, "-srpvfile") == 0) { |
| 333 | } | 325 | if (--argc < 1) |
| 334 | else if (strcmp(*argv,"-srpvfile") == 0) | 326 | goto bad; |
| 335 | { | 327 | dbfile = *(++argv); |
| 336 | if (--argc < 1) goto bad; | 328 | } else if (strcmp(*argv, "-add") == 0) |
| 337 | dbfile= *(++argv); | 329 | add_user = 1; |
| 338 | } | 330 | else if (strcmp(*argv, "-delete") == 0) |
| 339 | else if (strcmp(*argv,"-add") == 0) | 331 | delete_user = 1; |
| 340 | add_user=1; | 332 | else if (strcmp(*argv, "-modify") == 0) |
| 341 | else if (strcmp(*argv,"-delete") == 0) | 333 | modify_user = 1; |
| 342 | delete_user=1; | 334 | else if (strcmp(*argv, "-list") == 0) |
| 343 | else if (strcmp(*argv,"-modify") == 0) | 335 | list_user = 1; |
| 344 | modify_user=1; | 336 | else if (strcmp(*argv, "-gn") == 0) { |
| 345 | else if (strcmp(*argv,"-list") == 0) | 337 | if (--argc < 1) |
| 346 | list_user=1; | 338 | goto bad; |
| 347 | else if (strcmp(*argv,"-gn") == 0) | 339 | gN = *(++argv); |
| 348 | { | 340 | } else if (strcmp(*argv, "-userinfo") == 0) { |
| 349 | if (--argc < 1) goto bad; | 341 | if (--argc < 1) |
| 350 | gN= *(++argv); | 342 | goto bad; |
| 351 | } | 343 | userinfo = *(++argv); |
| 352 | else if (strcmp(*argv,"-userinfo") == 0) | 344 | } else if (strcmp(*argv, "-passin") == 0) { |
| 353 | { | 345 | if (--argc < 1) |
| 354 | if (--argc < 1) goto bad; | 346 | goto bad; |
| 355 | userinfo= *(++argv); | 347 | passargin = *(++argv); |
| 356 | } | 348 | } else if (strcmp(*argv, "-passout") == 0) { |
| 357 | else if (strcmp(*argv,"-passin") == 0) | 349 | if (--argc < 1) |
| 358 | { | 350 | goto bad; |
| 359 | if (--argc < 1) goto bad; | 351 | passargout = *(++argv); |
| 360 | passargin= *(++argv); | 352 | } |
| 361 | } | ||
| 362 | else if (strcmp(*argv,"-passout") == 0) | ||
| 363 | { | ||
| 364 | if (--argc < 1) goto bad; | ||
| 365 | passargout= *(++argv); | ||
| 366 | } | ||
| 367 | #ifndef OPENSSL_NO_ENGINE | 353 | #ifndef OPENSSL_NO_ENGINE |
| 368 | else if (strcmp(*argv,"-engine") == 0) | 354 | else if (strcmp(*argv, "-engine") == 0) { |
| 369 | { | 355 | if (--argc < 1) |
| 370 | if (--argc < 1) goto bad; | 356 | goto bad; |
| 371 | engine= *(++argv); | 357 | engine = *(++argv); |
| 372 | } | 358 | } |
| 373 | #endif | 359 | #endif |
| 374 | 360 | ||
| 375 | else if (**argv == '-') | 361 | else if (**argv == '-') { |
| 376 | { | 362 | bad: |
| 377 | bad: | 363 | BIO_printf(bio_err, "unknown option %s\n", *argv); |
| 378 | BIO_printf(bio_err,"unknown option %s\n",*argv); | 364 | badops = 1; |
| 379 | badops=1; | ||
| 380 | break; | 365 | break; |
| 381 | } | 366 | } else |
| 382 | else | ||
| 383 | break; | 367 | break; |
| 384 | 368 | ||
| 385 | argc--; | 369 | argc--; |
| 386 | argv++; | 370 | argv++; |
| 387 | } | 371 | } |
| 388 | 372 | ||
| 389 | if (dbfile && configfile) | 373 | if (dbfile && configfile) { |
| 390 | { | 374 | BIO_printf(bio_err, "-dbfile and -configfile cannot be specified together.\n"); |
| 391 | BIO_printf(bio_err,"-dbfile and -configfile cannot be specified together.\n"); | ||
| 392 | badops = 1; | 375 | badops = 1; |
| 393 | } | 376 | } |
| 394 | if (add_user+delete_user+modify_user+list_user != 1) | 377 | if (add_user + delete_user + modify_user + list_user != 1) { |
| 395 | { | 378 | BIO_printf(bio_err, "Exactly one of the options -add, -delete, -modify -list must be specified.\n"); |
| 396 | BIO_printf(bio_err,"Exactly one of the options -add, -delete, -modify -list must be specified.\n"); | ||
| 397 | badops = 1; | 379 | badops = 1; |
| 398 | } | 380 | } |
| 399 | if (delete_user+modify_user+delete_user== 1 && argc <= 0) | 381 | if (delete_user + modify_user + delete_user == 1 && argc <= 0) { |
| 400 | { | 382 | BIO_printf(bio_err, "Need at least one user for options -add, -delete, -modify. \n"); |
| 401 | BIO_printf(bio_err,"Need at least one user for options -add, -delete, -modify. \n"); | ||
| 402 | badops = 1; | 383 | badops = 1; |
| 403 | } | 384 | } |
| 404 | if ((passin || passout) && argc != 1 ) | 385 | if ((passin || passout) && argc != 1) { |
| 405 | { | 386 | BIO_printf(bio_err, "-passin, -passout arguments only valid with one user.\n"); |
| 406 | BIO_printf(bio_err,"-passin, -passout arguments only valid with one user.\n"); | ||
| 407 | badops = 1; | 387 | badops = 1; |
| 408 | } | 388 | } |
| 409 | 389 | if (badops) { | |
| 410 | if (badops) | 390 | for (pp = srp_usage; (*pp != NULL); pp++) |
| 411 | { | 391 | BIO_printf(bio_err, "%s", *pp); |
| 412 | for (pp=srp_usage; (*pp != NULL); pp++) | ||
| 413 | BIO_printf(bio_err,"%s",*pp); | ||
| 414 | 392 | ||
| 415 | BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); | 393 | BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); |
| 416 | BIO_printf(bio_err," load the file (or the files in the directory) into\n"); | 394 | BIO_printf(bio_err, " load the file (or the files in the directory) into\n"); |
| 417 | BIO_printf(bio_err," the random number generator\n"); | 395 | BIO_printf(bio_err, " the random number generator\n"); |
| 418 | goto err; | 396 | goto err; |
| 419 | } | 397 | } |
| 420 | |||
| 421 | ERR_load_crypto_strings(); | 398 | ERR_load_crypto_strings(); |
| 422 | 399 | ||
| 423 | #ifndef OPENSSL_NO_ENGINE | 400 | #ifndef OPENSSL_NO_ENGINE |
| 424 | setup_engine(bio_err, engine, 0); | 401 | setup_engine(bio_err, engine, 0); |
| 425 | #endif | 402 | #endif |
| 426 | 403 | ||
| 427 | if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) | 404 | if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { |
| 428 | { | ||
| 429 | BIO_printf(bio_err, "Error getting passwords\n"); | 405 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 430 | goto err; | 406 | goto err; |
| 431 | } | 407 | } |
| 432 | 408 | if (!dbfile) { | |
| 433 | if (!dbfile) | ||
| 434 | { | ||
| 435 | 409 | ||
| 436 | 410 | ||
| 437 | /*****************************************************************/ | 411 | /*****************************************************************/ |
| 438 | tofree=NULL; | 412 | tofree = NULL; |
| 439 | if (configfile == NULL) configfile = getenv("OPENSSL_CONF"); | 413 | if (configfile == NULL) |
| 440 | if (configfile == NULL) configfile = getenv("SSLEAY_CONF"); | 414 | configfile = getenv("OPENSSL_CONF"); |
| 441 | if (configfile == NULL) | 415 | if (configfile == NULL) |
| 442 | { | 416 | configfile = getenv("SSLEAY_CONF"); |
| 443 | const char *s=X509_get_default_cert_area(); | 417 | if (configfile == NULL) { |
| 418 | const char *s = X509_get_default_cert_area(); | ||
| 444 | size_t len; | 419 | size_t len; |
| 445 | 420 | ||
| 446 | len = strlen(s)+sizeof(CONFIG_FILE)+1; | 421 | len = strlen(s) + sizeof(CONFIG_FILE) + 1; |
| 447 | tofree=malloc(len); | 422 | tofree = malloc(len); |
| 448 | BUF_strlcpy(tofree,s,len); | 423 | BUF_strlcpy(tofree, s, len); |
| 449 | BUF_strlcat(tofree,"/",len); | 424 | BUF_strlcat(tofree, "/", len); |
| 450 | BUF_strlcat(tofree,CONFIG_FILE,len); | 425 | BUF_strlcat(tofree, CONFIG_FILE, len); |
| 451 | configfile=tofree; | 426 | configfile = tofree; |
| 452 | } | 427 | } |
| 453 | 428 | VERBOSE BIO_printf(bio_err, "Using configuration from %s\n", configfile); | |
| 454 | VERBOSE BIO_printf(bio_err,"Using configuration from %s\n",configfile); | ||
| 455 | conf = NCONF_new(NULL); | 429 | conf = NCONF_new(NULL); |
| 456 | if (NCONF_load(conf,configfile,&errorline) <= 0) | 430 | if (NCONF_load(conf, configfile, &errorline) <= 0) { |
| 457 | { | ||
| 458 | if (errorline <= 0) | 431 | if (errorline <= 0) |
| 459 | BIO_printf(bio_err,"error loading the config file '%s'\n", | 432 | BIO_printf(bio_err, "error loading the config file '%s'\n", |
| 460 | configfile); | 433 | configfile); |
| 461 | else | 434 | else |
| 462 | BIO_printf(bio_err,"error on line %ld of config file '%s'\n" | 435 | BIO_printf(bio_err, "error on line %ld of config file '%s'\n" |
| 463 | ,errorline,configfile); | 436 | ,errorline, configfile); |
| 464 | goto err; | 437 | goto err; |
| 465 | } | 438 | } |
| 466 | if(tofree) | 439 | if (tofree) { |
| 467 | { | ||
| 468 | free(tofree); | 440 | free(tofree); |
| 469 | tofree = NULL; | 441 | tofree = NULL; |
| 470 | } | 442 | } |
| 471 | |||
| 472 | if (!load_config(bio_err, conf)) | 443 | if (!load_config(bio_err, conf)) |
| 473 | goto err; | 444 | goto err; |
| 474 | 445 | ||
| 475 | /* Lets get the config section we are using */ | 446 | /* Lets get the config section we are using */ |
| 476 | if (section == NULL) | 447 | if (section == NULL) { |
| 477 | { | 448 | VERBOSE BIO_printf(bio_err, "trying to read " ENV_DEFAULT_SRP " in \" BASE_SECTION \"\n"); |
| 478 | VERBOSE BIO_printf(bio_err,"trying to read " ENV_DEFAULT_SRP " in \" BASE_SECTION \"\n"); | ||
| 479 | 449 | ||
| 480 | section=NCONF_get_string(conf,BASE_SECTION,ENV_DEFAULT_SRP); | 450 | section = NCONF_get_string(conf, BASE_SECTION, ENV_DEFAULT_SRP); |
| 481 | if (section == NULL) | 451 | if (section == NULL) { |
| 482 | { | 452 | lookup_fail(BASE_SECTION, ENV_DEFAULT_SRP); |
| 483 | lookup_fail(BASE_SECTION,ENV_DEFAULT_SRP); | ||
| 484 | goto err; | 453 | goto err; |
| 485 | } | ||
| 486 | } | 454 | } |
| 487 | 455 | } | |
| 488 | if (randfile == NULL && conf) | 456 | if (randfile == NULL && conf) |
| 489 | randfile = NCONF_get_string(conf, BASE_SECTION, "RANDFILE"); | 457 | randfile = NCONF_get_string(conf, BASE_SECTION, "RANDFILE"); |
| 490 | 458 | ||
| 491 | |||
| 492 | VERBOSE BIO_printf(bio_err,"trying to read " ENV_DATABASE " in section \"%s\"\n",section); | ||
| 493 | 459 | ||
| 494 | if ((dbfile=NCONF_get_string(conf,section,ENV_DATABASE)) == NULL) | 460 | VERBOSE BIO_printf(bio_err, "trying to read " ENV_DATABASE " in section \"%s\"\n", section); |
| 495 | { | ||
| 496 | lookup_fail(section,ENV_DATABASE); | ||
| 497 | goto err; | ||
| 498 | } | ||
| 499 | 461 | ||
| 500 | } | 462 | if ((dbfile = NCONF_get_string(conf, section, ENV_DATABASE)) == NULL) { |
| 463 | lookup_fail(section, ENV_DATABASE); | ||
| 464 | goto err; | ||
| 465 | } | ||
| 466 | } | ||
| 501 | if (randfile == NULL) | 467 | if (randfile == NULL) |
| 502 | ERR_clear_error(); | 468 | ERR_clear_error(); |
| 503 | else | 469 | else |
| 504 | app_RAND_load_file(randfile, bio_err, 0); | 470 | app_RAND_load_file(randfile, bio_err, 0); |
| 505 | 471 | ||
| 506 | VERBOSE BIO_printf(bio_err,"Trying to read SRP verifier file \"%s\"\n",dbfile); | 472 | VERBOSE BIO_printf(bio_err, "Trying to read SRP verifier file \"%s\"\n", dbfile); |
| 507 | 473 | ||
| 508 | db = load_index(dbfile, &db_attr); | 474 | db = load_index(dbfile, &db_attr); |
| 509 | if (db == NULL) goto err; | 475 | if (db == NULL) |
| 476 | goto err; | ||
| 510 | 477 | ||
| 511 | /* Lets check some fields */ | 478 | /* Lets check some fields */ |
| 512 | for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) | 479 | for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) { |
| 513 | { | ||
| 514 | pp = sk_OPENSSL_PSTRING_value(db->db->data, i); | 480 | pp = sk_OPENSSL_PSTRING_value(db->db->data, i); |
| 515 | 481 | ||
| 516 | if (pp[DB_srptype][0] == DB_SRP_INDEX) | 482 | if (pp[DB_srptype][0] == DB_SRP_INDEX) { |
| 517 | { | ||
| 518 | maxgN = i; | 483 | maxgN = i; |
| 519 | if (gNindex < 0 && gN != NULL && !strcmp(gN, pp[DB_srpid])) | 484 | if (gNindex < 0 && gN != NULL && !strcmp(gN, pp[DB_srpid])) |
| 520 | gNindex = i; | 485 | gNindex = i; |
| 521 | 486 | ||
| 522 | print_index(db, bio_err, i, verbose > 1); | 487 | print_index(db, bio_err, i, verbose > 1); |
| 523 | } | ||
| 524 | } | 488 | } |
| 525 | 489 | } | |
| 490 | |||
| 526 | VERBOSE BIO_printf(bio_err, "Database initialised\n"); | 491 | VERBOSE BIO_printf(bio_err, "Database initialised\n"); |
| 527 | 492 | ||
| 528 | if (gNindex >= 0) | 493 | if (gNindex >= 0) { |
| 529 | { | 494 | gNrow = sk_OPENSSL_PSTRING_value(db->db->data, gNindex); |
| 530 | gNrow = sk_OPENSSL_PSTRING_value(db->db->data,gNindex); | ||
| 531 | print_entry(db, bio_err, gNindex, verbose > 1, "Default g and N"); | 495 | print_entry(db, bio_err, gNindex, verbose > 1, "Default g and N"); |
| 532 | } | 496 | } else if (maxgN > 0 && !SRP_get_default_gN(gN)) { |
| 533 | else if (maxgN > 0 && !SRP_get_default_gN(gN)) | ||
| 534 | { | ||
| 535 | BIO_printf(bio_err, "No g and N value for index \"%s\"\n", gN); | 497 | BIO_printf(bio_err, "No g and N value for index \"%s\"\n", gN); |
| 536 | goto err; | 498 | goto err; |
| 537 | } | 499 | } else { |
| 538 | else | ||
| 539 | { | ||
| 540 | VERBOSE BIO_printf(bio_err, "Database has no g N information.\n"); | 500 | VERBOSE BIO_printf(bio_err, "Database has no g N information.\n"); |
| 541 | gNrow = NULL; | 501 | gNrow = NULL; |
| 542 | } | 502 | } |
| 543 | 503 | ||
| 544 | 504 | ||
| 545 | VVERBOSE BIO_printf(bio_err,"Starting user processing\n"); | 505 | VVERBOSE BIO_printf(bio_err, "Starting user processing\n"); |
| 546 | 506 | ||
| 547 | if (argc > 0) | 507 | if (argc > 0) |
| 548 | user = *(argv++) ; | 508 | user = *(argv++); |
| 549 | 509 | ||
| 550 | while (list_user || user) | 510 | while (list_user || user) { |
| 551 | { | ||
| 552 | int userindex = -1; | 511 | int userindex = -1; |
| 553 | if (user) | 512 | if (user) |
| 554 | VVERBOSE BIO_printf(bio_err, "Processing user \"%s\"\n", user); | 513 | VVERBOSE BIO_printf(bio_err, "Processing user \"%s\"\n", user); |
| 555 | if ((userindex = get_index(db, user, 'U')) >= 0) | 514 | if ((userindex = get_index(db, user, 'U')) >= 0) { |
| 556 | { | ||
| 557 | print_user(db, bio_err, userindex, (verbose > 0) || list_user); | 515 | print_user(db, bio_err, userindex, (verbose > 0) || list_user); |
| 558 | } | 516 | } |
| 559 | 517 | if (list_user) { | |
| 560 | if (list_user) | 518 | if (user == NULL) { |
| 561 | { | 519 | BIO_printf(bio_err, "List all users\n"); |
| 562 | if (user == NULL) | 520 | |
| 563 | { | 521 | for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) { |
| 564 | BIO_printf(bio_err,"List all users\n"); | 522 | print_user(db, bio_err, i, 1); |
| 565 | |||
| 566 | for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) | ||
| 567 | { | ||
| 568 | print_user(db,bio_err, i, 1); | ||
| 569 | } | ||
| 570 | list_user = 0; | ||
| 571 | } | 523 | } |
| 572 | else if (userindex < 0) | 524 | list_user = 0; |
| 573 | { | 525 | } else if (userindex < 0) { |
| 574 | BIO_printf(bio_err, "user \"%s\" does not exist, ignored. t\n", | 526 | BIO_printf(bio_err, "user \"%s\" does not exist, ignored. t\n", |
| 575 | user); | 527 | user); |
| 576 | errors++; | 528 | errors++; |
| 577 | } | ||
| 578 | } | 529 | } |
| 579 | else if (add_user) | 530 | } else if (add_user) { |
| 580 | { | 531 | if (userindex >= 0) { |
| 581 | if (userindex >= 0) | ||
| 582 | { | ||
| 583 | /* reactivation of a new user */ | 532 | /* reactivation of a new user */ |
| 584 | char **row = sk_OPENSSL_PSTRING_value(db->db->data, userindex); | 533 | char **row = sk_OPENSSL_PSTRING_value(db->db->data, userindex); |
| 585 | BIO_printf(bio_err, "user \"%s\" reactivated.\n", user); | 534 | BIO_printf(bio_err, "user \"%s\" reactivated.\n", user); |
| 586 | row[DB_srptype][0] = 'V'; | 535 | row[DB_srptype][0] = 'V'; |
| 587 | 536 | ||
| 588 | doupdatedb = 1; | 537 | doupdatedb = 1; |
| 589 | } | 538 | } else { |
| 590 | else | 539 | char *row[DB_NUMBER]; |
| 591 | { | 540 | char *gNid; |
| 592 | char *row[DB_NUMBER] ; char *gNid; | ||
| 593 | row[DB_srpverifier] = NULL; | 541 | row[DB_srpverifier] = NULL; |
| 594 | row[DB_srpsalt] = NULL; | 542 | row[DB_srpsalt] = NULL; |
| 595 | row[DB_srpinfo] = NULL; | 543 | row[DB_srpinfo] = NULL; |
| 596 | if (!(gNid = srp_create_user(user,&(row[DB_srpverifier]), &(row[DB_srpsalt]),gNrow?gNrow[DB_srpsalt]:gN,gNrow?gNrow[DB_srpverifier]:NULL, passout, bio_err,verbose))) | 544 | if (!(gNid = srp_create_user(user, &(row[DB_srpverifier]), &(row[DB_srpsalt]), gNrow ? gNrow[DB_srpsalt] : gN, gNrow ? gNrow[DB_srpverifier] : NULL, passout, bio_err, verbose))) { |
| 597 | { | 545 | BIO_printf(bio_err, "Cannot create srp verifier for user \"%s\", operation abandoned .\n", user); |
| 598 | BIO_printf(bio_err, "Cannot create srp verifier for user \"%s\", operation abandoned .\n", user); | 546 | errors++; |
| 599 | errors++; | 547 | goto err; |
| 600 | goto err; | 548 | } |
| 601 | } | ||
| 602 | row[DB_srpid] = BUF_strdup(user); | 549 | row[DB_srpid] = BUF_strdup(user); |
| 603 | row[DB_srptype] = BUF_strdup("v"); | 550 | row[DB_srptype] = BUF_strdup("v"); |
| 604 | row[DB_srpgN] = BUF_strdup(gNid); | 551 | row[DB_srpgN] = BUF_strdup(gNid); |
| 605 | 552 | ||
| 606 | if (!row[DB_srpid] || !row[DB_srpgN] || !row[DB_srptype] || !row[DB_srpverifier] || !row[DB_srpsalt] || | 553 | if (!row[DB_srpid] || !row[DB_srpgN] || !row[DB_srptype] || !row[DB_srpverifier] || !row[DB_srpsalt] || |
| 607 | (userinfo && (!(row[DB_srpinfo] = BUF_strdup(userinfo)))) || | 554 | (userinfo && (!(row[DB_srpinfo] = BUF_strdup(userinfo)))) || |
| 608 | !update_index(db, bio_err, row)) | 555 | !update_index(db, bio_err, row)) { |
| 609 | { | 556 | if (row[DB_srpid]) |
| 610 | if (row[DB_srpid]) free(row[DB_srpid]); | 557 | free(row[DB_srpid]); |
| 611 | if (row[DB_srpgN]) free(row[DB_srpgN]); | 558 | if (row[DB_srpgN]) |
| 612 | if (row[DB_srpinfo]) free(row[DB_srpinfo]); | 559 | free(row[DB_srpgN]); |
| 613 | if (row[DB_srptype]) free(row[DB_srptype]); | 560 | if (row[DB_srpinfo]) |
| 614 | if (row[DB_srpverifier]) free(row[DB_srpverifier]); | 561 | free(row[DB_srpinfo]); |
| 615 | if (row[DB_srpsalt]) free(row[DB_srpsalt]); | 562 | if (row[DB_srptype]) |
| 563 | free(row[DB_srptype]); | ||
| 564 | if (row[DB_srpverifier]) | ||
| 565 | free(row[DB_srpverifier]); | ||
| 566 | if (row[DB_srpsalt]) | ||
| 567 | free(row[DB_srpsalt]); | ||
| 616 | goto err; | 568 | goto err; |
| 617 | } | ||
| 618 | doupdatedb = 1; | ||
| 619 | } | 569 | } |
| 570 | doupdatedb = 1; | ||
| 620 | } | 571 | } |
| 621 | else if (modify_user) | 572 | } else if (modify_user) { |
| 622 | { | 573 | if (userindex < 0) { |
| 623 | if (userindex < 0) | 574 | BIO_printf(bio_err, "user \"%s\" does not exist, operation ignored.\n", user); |
| 624 | { | ||
| 625 | BIO_printf(bio_err,"user \"%s\" does not exist, operation ignored.\n",user); | ||
| 626 | errors++; | 575 | errors++; |
| 627 | } | 576 | } else { |
| 628 | else | ||
| 629 | { | ||
| 630 | 577 | ||
| 631 | char **row = sk_OPENSSL_PSTRING_value(db->db->data, userindex); | 578 | char **row = sk_OPENSSL_PSTRING_value(db->db->data, userindex); |
| 632 | char type = row[DB_srptype][0]; | 579 | char type = row[DB_srptype][0]; |
| 633 | if (type == 'v') | 580 | if (type == 'v') { |
| 634 | { | 581 | BIO_printf(bio_err, "user \"%s\" already updated, operation ignored.\n", user); |
| 635 | BIO_printf(bio_err,"user \"%s\" already updated, operation ignored.\n",user); | ||
| 636 | errors++; | 582 | errors++; |
| 637 | } | 583 | } else { |
| 638 | else | ||
| 639 | { | ||
| 640 | char *gNid; | 584 | char *gNid; |
| 641 | 585 | ||
| 642 | if (row[DB_srptype][0] == 'V') | 586 | if (row[DB_srptype][0] == 'V') { |
| 643 | { | ||
| 644 | int user_gN; | 587 | int user_gN; |
| 645 | char **irow = NULL; | 588 | char **irow = NULL; |
| 646 | VERBOSE BIO_printf(bio_err,"Verifying password for user \"%s\"\n",user); | 589 | VERBOSE BIO_printf(bio_err, "Verifying password for user \"%s\"\n", user); |
| 647 | if ( (user_gN = get_index(db, row[DB_srpgN], DB_SRP_INDEX)) >= 0) | 590 | if ((user_gN = get_index(db, row[DB_srpgN], DB_SRP_INDEX)) >= 0) |
| 648 | irow = (char **)sk_OPENSSL_PSTRING_value(db->db->data, userindex); | 591 | irow = (char **) sk_OPENSSL_PSTRING_value(db->db->data, userindex); |
| 649 | 592 | ||
| 650 | if (!srp_verify_user(user, row[DB_srpverifier], row[DB_srpsalt], irow ? irow[DB_srpsalt] : row[DB_srpgN], irow ? irow[DB_srpverifier] : NULL, passin, bio_err, verbose)) | 593 | if (!srp_verify_user(user, row[DB_srpverifier], row[DB_srpsalt], irow ? irow[DB_srpsalt] : row[DB_srpgN], irow ? irow[DB_srpverifier] : NULL, passin, bio_err, verbose)) { |
| 651 | { | ||
| 652 | BIO_printf(bio_err, "Invalid password for user \"%s\", operation abandoned.\n", user); | 594 | BIO_printf(bio_err, "Invalid password for user \"%s\", operation abandoned.\n", user); |
| 653 | errors++; | 595 | errors++; |
| 654 | goto err; | 596 | goto err; |
| 655 | } | 597 | } |
| 656 | } | 598 | } |
| 657 | VERBOSE BIO_printf(bio_err,"Password for user \"%s\" ok.\n",user); | 599 | VERBOSE BIO_printf(bio_err, "Password for user \"%s\" ok.\n", user); |
| 658 | 600 | ||
| 659 | if (!(gNid=srp_create_user(user,&(row[DB_srpverifier]), &(row[DB_srpsalt]),gNrow?gNrow[DB_srpsalt]:NULL, gNrow?gNrow[DB_srpverifier]:NULL, passout, bio_err,verbose))) | 601 | if (!(gNid = srp_create_user(user, &(row[DB_srpverifier]), &(row[DB_srpsalt]), gNrow ? gNrow[DB_srpsalt] : NULL, gNrow ? gNrow[DB_srpverifier] : NULL, passout, bio_err, verbose))) { |
| 660 | { | ||
| 661 | BIO_printf(bio_err, "Cannot create srp verifier for user \"%s\", operation abandoned.\n", user); | 602 | BIO_printf(bio_err, "Cannot create srp verifier for user \"%s\", operation abandoned.\n", user); |
| 662 | errors++; | 603 | errors++; |
| 663 | goto err; | 604 | goto err; |
| 664 | } | 605 | } |
| 665 | |||
| 666 | row[DB_srptype][0] = 'v'; | 606 | row[DB_srptype][0] = 'v'; |
| 667 | row[DB_srpgN] = BUF_strdup(gNid); | 607 | row[DB_srpgN] = BUF_strdup(gNid); |
| 668 | 608 | ||
| 669 | if (!row[DB_srpid] || !row[DB_srpgN] || !row[DB_srptype] || !row[DB_srpverifier] || !row[DB_srpsalt] || | 609 | if (!row[DB_srpid] || !row[DB_srpgN] || !row[DB_srptype] || !row[DB_srpverifier] || !row[DB_srpsalt] || |
| 670 | (userinfo && (!(row[DB_srpinfo] = BUF_strdup(userinfo))))) | 610 | (userinfo && (!(row[DB_srpinfo] = BUF_strdup(userinfo))))) |
| 671 | goto err; | 611 | goto err; |
| 672 | 612 | ||
| 673 | doupdatedb = 1; | 613 | doupdatedb = 1; |
| 674 | } | ||
| 675 | } | 614 | } |
| 676 | } | 615 | } |
| 677 | else if (delete_user) | 616 | } else if (delete_user) { |
| 678 | { | 617 | if (userindex < 0) { |
| 679 | if (userindex < 0) | ||
| 680 | { | ||
| 681 | BIO_printf(bio_err, "user \"%s\" does not exist, operation ignored. t\n", user); | 618 | BIO_printf(bio_err, "user \"%s\" does not exist, operation ignored. t\n", user); |
| 682 | errors++; | 619 | errors++; |
| 683 | } | 620 | } else { |
| 684 | else | 621 | char **xpp = sk_OPENSSL_PSTRING_value(db->db->data, userindex); |
| 685 | { | ||
| 686 | char **xpp = sk_OPENSSL_PSTRING_value(db->db->data,userindex); | ||
| 687 | BIO_printf(bio_err, "user \"%s\" revoked. t\n", user); | 622 | BIO_printf(bio_err, "user \"%s\" revoked. t\n", user); |
| 688 | 623 | ||
| 689 | xpp[DB_srptype][0] = 'R'; | 624 | xpp[DB_srptype][0] = 'R'; |
| 690 | 625 | ||
| 691 | doupdatedb = 1; | 626 | doupdatedb = 1; |
| 692 | } | ||
| 693 | } | 627 | } |
| 628 | } | ||
| 694 | if (--argc > 0) | 629 | if (--argc > 0) |
| 695 | user = *(argv++) ; | 630 | user = *(argv++); |
| 696 | else | 631 | else { |
| 697 | { | ||
| 698 | user = NULL; | 632 | user = NULL; |
| 699 | list_user = 0; | 633 | list_user = 0; |
| 700 | } | ||
| 701 | } | 634 | } |
| 635 | } | ||
| 702 | 636 | ||
| 703 | VERBOSE BIO_printf(bio_err,"User procession done.\n"); | 637 | VERBOSE BIO_printf(bio_err, "User procession done.\n"); |
| 704 | 638 | ||
| 705 | 639 | ||
| 706 | if (doupdatedb) | 640 | if (doupdatedb) { |
| 707 | { | ||
| 708 | /* Lets check some fields */ | 641 | /* Lets check some fields */ |
| 709 | for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) | 642 | for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) { |
| 710 | { | 643 | pp = sk_OPENSSL_PSTRING_value(db->db->data, i); |
| 711 | pp = sk_OPENSSL_PSTRING_value(db->db->data,i); | 644 | |
| 712 | 645 | if (pp[DB_srptype][0] == 'v') { | |
| 713 | if (pp[DB_srptype][0] == 'v') | ||
| 714 | { | ||
| 715 | pp[DB_srptype][0] = 'V'; | 646 | pp[DB_srptype][0] = 'V'; |
| 716 | print_user(db, bio_err, i, verbose); | 647 | print_user(db, bio_err, i, verbose); |
| 717 | } | ||
| 718 | } | 648 | } |
| 649 | } | ||
| 719 | 650 | ||
| 720 | VERBOSE BIO_printf(bio_err, "Trying to update srpvfile.\n"); | 651 | VERBOSE BIO_printf(bio_err, "Trying to update srpvfile.\n"); |
| 721 | if (!save_index(dbfile, "new", db)) goto err; | 652 | if (!save_index(dbfile, "new", db)) |
| 722 | 653 | goto err; | |
| 654 | |||
| 723 | VERBOSE BIO_printf(bio_err, "Temporary srpvfile created.\n"); | 655 | VERBOSE BIO_printf(bio_err, "Temporary srpvfile created.\n"); |
| 724 | if (!rotate_index(dbfile, "new", "old")) goto err; | 656 | if (!rotate_index(dbfile, "new", "old")) |
| 657 | goto err; | ||
| 725 | 658 | ||
| 726 | VERBOSE BIO_printf(bio_err, "srpvfile updated.\n"); | 659 | VERBOSE BIO_printf(bio_err, "srpvfile updated.\n"); |
| 727 | } | 660 | } |
| 728 | |||
| 729 | ret = (errors != 0); | 661 | ret = (errors != 0); |
| 730 | err: | 662 | err: |
| 731 | if (errors != 0) | 663 | if (errors != 0) |
| 732 | VERBOSE BIO_printf(bio_err,"User errors %d.\n",errors); | 664 | VERBOSE BIO_printf(bio_err, "User errors %d.\n", errors); |
| 733 | 665 | ||
| 734 | VERBOSE BIO_printf(bio_err,"SRP terminating with code %d.\n",ret); | 666 | VERBOSE BIO_printf(bio_err, "SRP terminating with code %d.\n", ret); |
| 735 | if(tofree) | 667 | if (tofree) |
| 736 | free(tofree); | 668 | free(tofree); |
| 737 | if (ret) ERR_print_errors(bio_err); | 669 | if (ret) |
| 738 | if (randfile) app_RAND_write_file(randfile, bio_err); | 670 | ERR_print_errors(bio_err); |
| 739 | if (conf) NCONF_free(conf); | 671 | if (randfile) |
| 740 | if (db) free_index(db); | 672 | app_RAND_write_file(randfile, bio_err); |
| 673 | if (conf) | ||
| 674 | NCONF_free(conf); | ||
| 675 | if (db) | ||
| 676 | free_index(db); | ||
| 741 | 677 | ||
| 742 | OBJ_cleanup(); | 678 | OBJ_cleanup(); |
| 743 | apps_shutdown(); | 679 | apps_shutdown(); |
| 744 | return(ret); | 680 | return (ret); |
| 745 | } | 681 | } |
| 746 | 682 | ||
| 747 | 683 | ||
| 748 | 684 | ||
| 749 | #endif | 685 | #endif |
| 750 | |||
diff --git a/src/lib/libssl/src/apps/ts.c b/src/lib/libssl/src/apps/ts.c index 799c5b3532..627e37549d 100644 --- a/src/lib/libssl/src/apps/ts.c +++ b/src/lib/libssl/src/apps/ts.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: |
| 11 | * | 11 | * |
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. |
| 14 | * | 14 | * |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in |
| @@ -82,53 +82,62 @@ static ASN1_OBJECT *txt2obj(const char *oid); | |||
| 82 | static CONF *load_config_file(const char *configfile); | 82 | static CONF *load_config_file(const char *configfile); |
| 83 | 83 | ||
| 84 | /* Query related functions. */ | 84 | /* Query related functions. */ |
| 85 | static int query_command(const char *data, char *digest, | 85 | static int |
| 86 | const EVP_MD *md, const char *policy, int no_nonce, | 86 | query_command(const char *data, char *digest, |
| 87 | int cert, const char *in, const char *out, int text); | 87 | const EVP_MD * md, const char *policy, int no_nonce, |
| 88 | static BIO *BIO_open_with_default(const char *file, const char *mode, | 88 | int cert, const char *in, const char *out, int text); |
| 89 | FILE *default_fp); | 89 | static BIO * |
| 90 | static TS_REQ *create_query(BIO *data_bio, char *digest, const EVP_MD *md, | 90 | BIO_open_with_default(const char *file, const char *mode, |
| 91 | const char *policy, int no_nonce, int cert); | 91 | FILE * default_fp); |
| 92 | static int create_digest(BIO *input, char *digest, | 92 | static TS_REQ * |
| 93 | const EVP_MD *md, unsigned char **md_value); | 93 | create_query(BIO * data_bio, char *digest, const EVP_MD * md, |
| 94 | const char *policy, int no_nonce, int cert); | ||
| 95 | static int | ||
| 96 | create_digest(BIO * input, char *digest, | ||
| 97 | const EVP_MD * md, unsigned char **md_value); | ||
| 94 | static ASN1_INTEGER *create_nonce(int bits); | 98 | static ASN1_INTEGER *create_nonce(int bits); |
| 95 | 99 | ||
| 96 | /* Reply related functions. */ | 100 | /* Reply related functions. */ |
| 97 | static int reply_command(CONF *conf, char *section, char *engine, | 101 | static int |
| 98 | char *queryfile, char *passin, char *inkey, | 102 | reply_command(CONF * conf, char *section, char *engine, |
| 99 | char *signer, char *chain, const char *policy, | 103 | char *queryfile, char *passin, char *inkey, |
| 100 | char *in, int token_in, char *out, int token_out, | 104 | char *signer, char *chain, const char *policy, |
| 101 | int text); | 105 | char *in, int token_in, char *out, int token_out, |
| 102 | static TS_RESP *read_PKCS7(BIO *in_bio); | 106 | int text); |
| 103 | static TS_RESP *create_response(CONF *conf, const char *section, char *engine, | 107 | static TS_RESP *read_PKCS7(BIO * in_bio); |
| 104 | char *queryfile, char *passin, char *inkey, | 108 | static TS_RESP * |
| 105 | char *signer, char *chain, const char *policy); | 109 | create_response(CONF * conf, const char *section, char *engine, |
| 106 | static ASN1_INTEGER * serial_cb(TS_RESP_CTX *ctx, void *data); | 110 | char *queryfile, char *passin, char *inkey, |
| 111 | char *signer, char *chain, const char *policy); | ||
| 112 | static ASN1_INTEGER *serial_cb(TS_RESP_CTX * ctx, void *data); | ||
| 107 | static ASN1_INTEGER *next_serial(const char *serialfile); | 113 | static ASN1_INTEGER *next_serial(const char *serialfile); |
| 108 | static int save_ts_serial(const char *serialfile, ASN1_INTEGER *serial); | 114 | static int save_ts_serial(const char *serialfile, ASN1_INTEGER * serial); |
| 109 | 115 | ||
| 110 | /* Verify related functions. */ | 116 | /* Verify related functions. */ |
| 111 | static int verify_command(char *data, char *digest, char *queryfile, | 117 | static int |
| 112 | char *in, int token_in, | 118 | verify_command(char *data, char *digest, char *queryfile, |
| 113 | char *ca_path, char *ca_file, char *untrusted); | 119 | char *in, int token_in, |
| 114 | static TS_VERIFY_CTX *create_verify_ctx(char *data, char *digest, | 120 | char *ca_path, char *ca_file, char *untrusted); |
| 115 | char *queryfile, | 121 | static TS_VERIFY_CTX * |
| 116 | char *ca_path, char *ca_file, | 122 | create_verify_ctx(char *data, char *digest, |
| 117 | char *untrusted); | 123 | char *queryfile, |
| 124 | char *ca_path, char *ca_file, | ||
| 125 | char *untrusted); | ||
| 118 | static X509_STORE *create_cert_store(char *ca_path, char *ca_file); | 126 | static X509_STORE *create_cert_store(char *ca_path, char *ca_file); |
| 119 | static int verify_cb(int ok, X509_STORE_CTX *ctx); | 127 | static int verify_cb(int ok, X509_STORE_CTX * ctx); |
| 120 | 128 | ||
| 121 | /* Main function definition. */ | 129 | /* Main function definition. */ |
| 122 | int MAIN(int, char **); | 130 | int MAIN(int, char **); |
| 123 | 131 | ||
| 124 | int MAIN(int argc, char **argv) | 132 | int |
| 125 | { | 133 | MAIN(int argc, char **argv) |
| 134 | { | ||
| 126 | int ret = 1; | 135 | int ret = 1; |
| 127 | char *configfile = NULL; | 136 | char *configfile = NULL; |
| 128 | char *section = NULL; | 137 | char *section = NULL; |
| 129 | CONF *conf = NULL; | 138 | CONF *conf = NULL; |
| 130 | enum mode { | 139 | enum mode { |
| 131 | CMD_NONE, CMD_QUERY, CMD_REPLY, CMD_VERIFY | 140 | CMD_NONE, CMD_QUERY, CMD_REPLY, CMD_VERIFY |
| 132 | } mode = CMD_NONE; | 141 | } mode = CMD_NONE; |
| 133 | char *data = NULL; | 142 | char *data = NULL; |
| 134 | char *digest = NULL; | 143 | char *digest = NULL; |
| @@ -142,7 +151,7 @@ int MAIN(int argc, char **argv) | |||
| 142 | int text = 0; | 151 | int text = 0; |
| 143 | char *queryfile = NULL; | 152 | char *queryfile = NULL; |
| 144 | char *passin = NULL; /* Password source. */ | 153 | char *passin = NULL; /* Password source. */ |
| 145 | char *password =NULL; /* Password itself. */ | 154 | char *password = NULL; /* Password itself. */ |
| 146 | char *inkey = NULL; | 155 | char *inkey = NULL; |
| 147 | char *signer = NULL; | 156 | char *signer = NULL; |
| 148 | char *chain = NULL; | 157 | char *chain = NULL; |
| @@ -151,7 +160,7 @@ int MAIN(int argc, char **argv) | |||
| 151 | char *untrusted = NULL; | 160 | char *untrusted = NULL; |
| 152 | char *engine = NULL; | 161 | char *engine = NULL; |
| 153 | /* Input is ContentInfo instead of TimeStampResp. */ | 162 | /* Input is ContentInfo instead of TimeStampResp. */ |
| 154 | int token_in = 0; | 163 | int token_in = 0; |
| 155 | /* Output is ContentInfo instead of TimeStampResp. */ | 164 | /* Output is ContentInfo instead of TimeStampResp. */ |
| 156 | int token_out = 0; | 165 | int token_out = 0; |
| 157 | int free_bio_err = 0; | 166 | int free_bio_err = 0; |
| @@ -159,314 +168,276 @@ int MAIN(int argc, char **argv) | |||
| 159 | ERR_load_crypto_strings(); | 168 | ERR_load_crypto_strings(); |
| 160 | apps_startup(); | 169 | apps_startup(); |
| 161 | 170 | ||
| 162 | if (bio_err == NULL && (bio_err = BIO_new(BIO_s_file())) != NULL) | 171 | if (bio_err == NULL && (bio_err = BIO_new(BIO_s_file())) != NULL) { |
| 163 | { | ||
| 164 | free_bio_err = 1; | 172 | free_bio_err = 1; |
| 165 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); | 173 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 166 | } | 174 | } |
| 167 | |||
| 168 | if (!load_config(bio_err, NULL)) | 175 | if (!load_config(bio_err, NULL)) |
| 169 | goto cleanup; | 176 | goto cleanup; |
| 170 | 177 | ||
| 171 | for (argc--, argv++; argc > 0; argc--, argv++) | 178 | for (argc--, argv++; argc > 0; argc--, argv++) { |
| 172 | { | 179 | if (strcmp(*argv, "-config") == 0) { |
| 173 | if (strcmp(*argv, "-config") == 0) | 180 | if (argc-- < 1) |
| 174 | { | 181 | goto usage; |
| 175 | if (argc-- < 1) goto usage; | ||
| 176 | configfile = *++argv; | 182 | configfile = *++argv; |
| 177 | } | 183 | } else if (strcmp(*argv, "-section") == 0) { |
| 178 | else if (strcmp(*argv, "-section") == 0) | 184 | if (argc-- < 1) |
| 179 | { | 185 | goto usage; |
| 180 | if (argc-- < 1) goto usage; | ||
| 181 | section = *++argv; | 186 | section = *++argv; |
| 182 | } | 187 | } else if (strcmp(*argv, "-query") == 0) { |
| 183 | else if (strcmp(*argv, "-query") == 0) | 188 | if (mode != CMD_NONE) |
| 184 | { | 189 | goto usage; |
| 185 | if (mode != CMD_NONE) goto usage; | ||
| 186 | mode = CMD_QUERY; | 190 | mode = CMD_QUERY; |
| 187 | } | 191 | } else if (strcmp(*argv, "-data") == 0) { |
| 188 | else if (strcmp(*argv, "-data") == 0) | 192 | if (argc-- < 1) |
| 189 | { | 193 | goto usage; |
| 190 | if (argc-- < 1) goto usage; | ||
| 191 | data = *++argv; | 194 | data = *++argv; |
| 192 | } | 195 | } else if (strcmp(*argv, "-digest") == 0) { |
| 193 | else if (strcmp(*argv, "-digest") == 0) | 196 | if (argc-- < 1) |
| 194 | { | 197 | goto usage; |
| 195 | if (argc-- < 1) goto usage; | ||
| 196 | digest = *++argv; | 198 | digest = *++argv; |
| 197 | } | 199 | } else if (strcmp(*argv, "-rand") == 0) { |
| 198 | else if (strcmp(*argv, "-rand") == 0) | 200 | if (argc-- < 1) |
| 199 | { | 201 | goto usage; |
| 200 | if (argc-- < 1) goto usage; | ||
| 201 | rnd = *++argv; | 202 | rnd = *++argv; |
| 202 | } | 203 | } else if (strcmp(*argv, "-policy") == 0) { |
| 203 | else if (strcmp(*argv, "-policy") == 0) | 204 | if (argc-- < 1) |
| 204 | { | 205 | goto usage; |
| 205 | if (argc-- < 1) goto usage; | ||
| 206 | policy = *++argv; | 206 | policy = *++argv; |
| 207 | } | 207 | } else if (strcmp(*argv, "-no_nonce") == 0) { |
| 208 | else if (strcmp(*argv, "-no_nonce") == 0) | ||
| 209 | { | ||
| 210 | no_nonce = 1; | 208 | no_nonce = 1; |
| 211 | } | 209 | } else if (strcmp(*argv, "-cert") == 0) { |
| 212 | else if (strcmp(*argv, "-cert") == 0) | ||
| 213 | { | ||
| 214 | cert = 1; | 210 | cert = 1; |
| 215 | } | 211 | } else if (strcmp(*argv, "-in") == 0) { |
| 216 | else if (strcmp(*argv, "-in") == 0) | 212 | if (argc-- < 1) |
| 217 | { | 213 | goto usage; |
| 218 | if (argc-- < 1) goto usage; | ||
| 219 | in = *++argv; | 214 | in = *++argv; |
| 220 | } | 215 | } else if (strcmp(*argv, "-token_in") == 0) { |
| 221 | else if (strcmp(*argv, "-token_in") == 0) | ||
| 222 | { | ||
| 223 | token_in = 1; | 216 | token_in = 1; |
| 224 | } | 217 | } else if (strcmp(*argv, "-out") == 0) { |
| 225 | else if (strcmp(*argv, "-out") == 0) | 218 | if (argc-- < 1) |
| 226 | { | 219 | goto usage; |
| 227 | if (argc-- < 1) goto usage; | ||
| 228 | out = *++argv; | 220 | out = *++argv; |
| 229 | } | 221 | } else if (strcmp(*argv, "-token_out") == 0) { |
| 230 | else if (strcmp(*argv, "-token_out") == 0) | ||
| 231 | { | ||
| 232 | token_out = 1; | 222 | token_out = 1; |
| 233 | } | 223 | } else if (strcmp(*argv, "-text") == 0) { |
| 234 | else if (strcmp(*argv, "-text") == 0) | ||
| 235 | { | ||
| 236 | text = 1; | 224 | text = 1; |
| 237 | } | 225 | } else if (strcmp(*argv, "-reply") == 0) { |
| 238 | else if (strcmp(*argv, "-reply") == 0) | 226 | if (mode != CMD_NONE) |
| 239 | { | 227 | goto usage; |
| 240 | if (mode != CMD_NONE) goto usage; | ||
| 241 | mode = CMD_REPLY; | 228 | mode = CMD_REPLY; |
| 242 | } | 229 | } else if (strcmp(*argv, "-queryfile") == 0) { |
| 243 | else if (strcmp(*argv, "-queryfile") == 0) | 230 | if (argc-- < 1) |
| 244 | { | 231 | goto usage; |
| 245 | if (argc-- < 1) goto usage; | ||
| 246 | queryfile = *++argv; | 232 | queryfile = *++argv; |
| 247 | } | 233 | } else if (strcmp(*argv, "-passin") == 0) { |
| 248 | else if (strcmp(*argv, "-passin") == 0) | 234 | if (argc-- < 1) |
| 249 | { | 235 | goto usage; |
| 250 | if (argc-- < 1) goto usage; | ||
| 251 | passin = *++argv; | 236 | passin = *++argv; |
| 252 | } | 237 | } else if (strcmp(*argv, "-inkey") == 0) { |
| 253 | else if (strcmp(*argv, "-inkey") == 0) | 238 | if (argc-- < 1) |
| 254 | { | 239 | goto usage; |
| 255 | if (argc-- < 1) goto usage; | ||
| 256 | inkey = *++argv; | 240 | inkey = *++argv; |
| 257 | } | 241 | } else if (strcmp(*argv, "-signer") == 0) { |
| 258 | else if (strcmp(*argv, "-signer") == 0) | 242 | if (argc-- < 1) |
| 259 | { | 243 | goto usage; |
| 260 | if (argc-- < 1) goto usage; | ||
| 261 | signer = *++argv; | 244 | signer = *++argv; |
| 262 | } | 245 | } else if (strcmp(*argv, "-chain") == 0) { |
| 263 | else if (strcmp(*argv, "-chain") == 0) | 246 | if (argc-- < 1) |
| 264 | { | 247 | goto usage; |
| 265 | if (argc-- < 1) goto usage; | ||
| 266 | chain = *++argv; | 248 | chain = *++argv; |
| 267 | } | 249 | } else if (strcmp(*argv, "-verify") == 0) { |
| 268 | else if (strcmp(*argv, "-verify") == 0) | 250 | if (mode != CMD_NONE) |
| 269 | { | 251 | goto usage; |
| 270 | if (mode != CMD_NONE) goto usage; | ||
| 271 | mode = CMD_VERIFY; | 252 | mode = CMD_VERIFY; |
| 272 | } | 253 | } else if (strcmp(*argv, "-CApath") == 0) { |
| 273 | else if (strcmp(*argv, "-CApath") == 0) | 254 | if (argc-- < 1) |
| 274 | { | 255 | goto usage; |
| 275 | if (argc-- < 1) goto usage; | ||
| 276 | ca_path = *++argv; | 256 | ca_path = *++argv; |
| 277 | } | 257 | } else if (strcmp(*argv, "-CAfile") == 0) { |
| 278 | else if (strcmp(*argv, "-CAfile") == 0) | 258 | if (argc-- < 1) |
| 279 | { | 259 | goto usage; |
| 280 | if (argc-- < 1) goto usage; | ||
| 281 | ca_file = *++argv; | 260 | ca_file = *++argv; |
| 282 | } | 261 | } else if (strcmp(*argv, "-untrusted") == 0) { |
| 283 | else if (strcmp(*argv, "-untrusted") == 0) | 262 | if (argc-- < 1) |
| 284 | { | 263 | goto usage; |
| 285 | if (argc-- < 1) goto usage; | ||
| 286 | untrusted = *++argv; | 264 | untrusted = *++argv; |
| 287 | } | 265 | } else if (strcmp(*argv, "-engine") == 0) { |
| 288 | else if (strcmp(*argv, "-engine") == 0) | 266 | if (argc-- < 1) |
| 289 | { | 267 | goto usage; |
| 290 | if (argc-- < 1) goto usage; | ||
| 291 | engine = *++argv; | 268 | engine = *++argv; |
| 292 | } | 269 | } else if ((md = EVP_get_digestbyname(*argv + 1)) != NULL) { |
| 293 | else if ((md = EVP_get_digestbyname(*argv + 1)) != NULL) | ||
| 294 | { | ||
| 295 | /* empty. */ | 270 | /* empty. */ |
| 296 | } | 271 | } else |
| 297 | else | ||
| 298 | goto usage; | 272 | goto usage; |
| 299 | } | 273 | } |
| 300 | 274 | ||
| 301 | /* Seed the random number generator if it is going to be used. */ | 275 | /* Seed the random number generator if it is going to be used. */ |
| 302 | if (mode == CMD_QUERY && !no_nonce) | 276 | if (mode == CMD_QUERY && !no_nonce) { |
| 303 | { | ||
| 304 | if (!app_RAND_load_file(NULL, bio_err, 1) && rnd == NULL) | 277 | if (!app_RAND_load_file(NULL, bio_err, 1) && rnd == NULL) |
| 305 | BIO_printf(bio_err, "warning, not much extra random " | 278 | BIO_printf(bio_err, "warning, not much extra random " |
| 306 | "data, consider using the -rand option\n"); | 279 | "data, consider using the -rand option\n"); |
| 307 | if (rnd != NULL) | 280 | if (rnd != NULL) |
| 308 | BIO_printf(bio_err,"%ld semi-random bytes loaded\n", | 281 | BIO_printf(bio_err, "%ld semi-random bytes loaded\n", |
| 309 | app_RAND_load_files(rnd)); | 282 | app_RAND_load_files(rnd)); |
| 310 | } | 283 | } |
| 311 | |||
| 312 | /* Get the password if required. */ | 284 | /* Get the password if required. */ |
| 313 | if(mode == CMD_REPLY && passin && | 285 | if (mode == CMD_REPLY && passin && |
| 314 | !app_passwd(bio_err, passin, NULL, &password, NULL)) | 286 | !app_passwd(bio_err, passin, NULL, &password, NULL)) { |
| 315 | { | 287 | BIO_printf(bio_err, "Error getting password.\n"); |
| 316 | BIO_printf(bio_err,"Error getting password.\n"); | ||
| 317 | goto cleanup; | 288 | goto cleanup; |
| 318 | } | 289 | } |
| 319 | 290 | /* | |
| 320 | /* Check consistency of parameters and execute | 291 | * Check consistency of parameters and execute the appropriate |
| 321 | the appropriate function. */ | 292 | * function. |
| 322 | switch (mode) | 293 | */ |
| 323 | { | 294 | switch (mode) { |
| 324 | case CMD_NONE: | 295 | case CMD_NONE: |
| 325 | goto usage; | 296 | goto usage; |
| 326 | case CMD_QUERY: | 297 | case CMD_QUERY: |
| 327 | /* Data file and message imprint cannot be specified | 298 | /* |
| 328 | at the same time. */ | 299 | * Data file and message imprint cannot be specified at the |
| 300 | * same time. | ||
| 301 | */ | ||
| 329 | ret = data != NULL && digest != NULL; | 302 | ret = data != NULL && digest != NULL; |
| 330 | if (ret) goto usage; | 303 | if (ret) |
| 304 | goto usage; | ||
| 331 | /* Load the config file for possible policy OIDs. */ | 305 | /* Load the config file for possible policy OIDs. */ |
| 332 | conf = load_config_file(configfile); | 306 | conf = load_config_file(configfile); |
| 333 | ret = !query_command(data, digest, md, policy, no_nonce, cert, | 307 | ret = !query_command(data, digest, md, policy, no_nonce, cert, |
| 334 | in, out, text); | 308 | in, out, text); |
| 335 | break; | 309 | break; |
| 336 | case CMD_REPLY: | 310 | case CMD_REPLY: |
| 337 | conf = load_config_file(configfile); | 311 | conf = load_config_file(configfile); |
| 338 | if (in == NULL) | 312 | if (in == NULL) { |
| 339 | { | ||
| 340 | ret = !(queryfile != NULL && conf != NULL && !token_in); | 313 | ret = !(queryfile != NULL && conf != NULL && !token_in); |
| 341 | if (ret) goto usage; | 314 | if (ret) |
| 342 | } | 315 | goto usage; |
| 343 | else | 316 | } else { |
| 344 | { | ||
| 345 | /* 'in' and 'queryfile' are exclusive. */ | 317 | /* 'in' and 'queryfile' are exclusive. */ |
| 346 | ret = !(queryfile == NULL); | 318 | ret = !(queryfile == NULL); |
| 347 | if (ret) goto usage; | 319 | if (ret) |
| 348 | } | 320 | goto usage; |
| 321 | } | ||
| 349 | 322 | ||
| 350 | ret = !reply_command(conf, section, engine, queryfile, | 323 | ret = !reply_command(conf, section, engine, queryfile, |
| 351 | password, inkey, signer, chain, policy, | 324 | password, inkey, signer, chain, policy, |
| 352 | in, token_in, out, token_out, text); | 325 | in, token_in, out, token_out, text); |
| 353 | break; | 326 | break; |
| 354 | case CMD_VERIFY: | 327 | case CMD_VERIFY: |
| 355 | ret = !(((queryfile && !data && !digest) | 328 | ret = !(((queryfile && !data && !digest) |
| 356 | || (!queryfile && data && !digest) | 329 | || (!queryfile && data && !digest) |
| 357 | || (!queryfile && !data && digest)) | 330 | || (!queryfile && !data && digest)) |
| 358 | && in != NULL); | 331 | && in != NULL); |
| 359 | if (ret) goto usage; | 332 | if (ret) |
| 333 | goto usage; | ||
| 360 | 334 | ||
| 361 | ret = !verify_command(data, digest, queryfile, in, token_in, | 335 | ret = !verify_command(data, digest, queryfile, in, token_in, |
| 362 | ca_path, ca_file, untrusted); | 336 | ca_path, ca_file, untrusted); |
| 363 | } | 337 | } |
| 364 | 338 | ||
| 365 | goto cleanup; | 339 | goto cleanup; |
| 366 | 340 | ||
| 367 | usage: | 341 | usage: |
| 368 | BIO_printf(bio_err, "usage:\n" | 342 | BIO_printf(bio_err, "usage:\n" |
| 369 | "ts -query [-rand file%cfile%c...] [-config configfile] " | 343 | "ts -query [-rand file%cfile%c...] [-config configfile] " |
| 370 | "[-data file_to_hash] [-digest digest_bytes]" | 344 | "[-data file_to_hash] [-digest digest_bytes]" |
| 371 | "[-md2|-md4|-md5|-sha|-sha1|-mdc2|-ripemd160] " | 345 | "[-md2|-md4|-md5|-sha|-sha1|-mdc2|-ripemd160] " |
| 372 | "[-policy object_id] [-no_nonce] [-cert] " | 346 | "[-policy object_id] [-no_nonce] [-cert] " |
| 373 | "[-in request.tsq] [-out request.tsq] [-text]\n", | 347 | "[-in request.tsq] [-out request.tsq] [-text]\n", |
| 374 | ':', ':'); | 348 | ':', ':'); |
| 375 | BIO_printf(bio_err, "or\n" | 349 | BIO_printf(bio_err, "or\n" |
| 376 | "ts -reply [-config configfile] [-section tsa_section] " | 350 | "ts -reply [-config configfile] [-section tsa_section] " |
| 377 | "[-queryfile request.tsq] [-passin password] " | 351 | "[-queryfile request.tsq] [-passin password] " |
| 378 | "[-signer tsa_cert.pem] [-inkey private_key.pem] " | 352 | "[-signer tsa_cert.pem] [-inkey private_key.pem] " |
| 379 | "[-chain certs_file.pem] [-policy object_id] " | 353 | "[-chain certs_file.pem] [-policy object_id] " |
| 380 | "[-in response.tsr] [-token_in] " | 354 | "[-in response.tsr] [-token_in] " |
| 381 | "[-out response.tsr] [-token_out] [-text] [-engine id]\n"); | 355 | "[-out response.tsr] [-token_out] [-text] [-engine id]\n"); |
| 382 | BIO_printf(bio_err, "or\n" | 356 | BIO_printf(bio_err, "or\n" |
| 383 | "ts -verify [-data file_to_hash] [-digest digest_bytes] " | 357 | "ts -verify [-data file_to_hash] [-digest digest_bytes] " |
| 384 | "[-queryfile request.tsq] " | 358 | "[-queryfile request.tsq] " |
| 385 | "-in response.tsr [-token_in] " | 359 | "-in response.tsr [-token_in] " |
| 386 | "-CApath ca_path -CAfile ca_file.pem " | 360 | "-CApath ca_path -CAfile ca_file.pem " |
| 387 | "-untrusted cert_file.pem\n"); | 361 | "-untrusted cert_file.pem\n"); |
| 388 | cleanup: | 362 | cleanup: |
| 389 | /* Clean up. */ | 363 | /* Clean up. */ |
| 390 | app_RAND_write_file(NULL, bio_err); | 364 | app_RAND_write_file(NULL, bio_err); |
| 391 | NCONF_free(conf); | 365 | NCONF_free(conf); |
| 392 | free(password); | 366 | free(password); |
| 393 | OBJ_cleanup(); | 367 | OBJ_cleanup(); |
| 394 | if (free_bio_err) | 368 | if (free_bio_err) { |
| 395 | { | ||
| 396 | BIO_free_all(bio_err); | 369 | BIO_free_all(bio_err); |
| 397 | bio_err = NULL; | 370 | bio_err = NULL; |
| 398 | } | ||
| 399 | |||
| 400 | return(ret); | ||
| 401 | } | 371 | } |
| 372 | return (ret); | ||
| 373 | } | ||
| 402 | 374 | ||
| 403 | /* | 375 | /* |
| 404 | * Configuration file-related function definitions. | 376 | * Configuration file-related function definitions. |
| 405 | */ | 377 | */ |
| 406 | 378 | ||
| 407 | static ASN1_OBJECT *txt2obj(const char *oid) | 379 | static ASN1_OBJECT * |
| 408 | { | 380 | txt2obj(const char *oid) |
| 381 | { | ||
| 409 | ASN1_OBJECT *oid_obj = NULL; | 382 | ASN1_OBJECT *oid_obj = NULL; |
| 410 | 383 | ||
| 411 | if (!(oid_obj = OBJ_txt2obj(oid, 0))) | 384 | if (!(oid_obj = OBJ_txt2obj(oid, 0))) |
| 412 | BIO_printf(bio_err, "cannot convert %s to OID\n", oid); | 385 | BIO_printf(bio_err, "cannot convert %s to OID\n", oid); |
| 413 | 386 | ||
| 414 | return oid_obj; | 387 | return oid_obj; |
| 415 | } | 388 | } |
| 416 | 389 | ||
| 417 | static CONF *load_config_file(const char *configfile) | 390 | static CONF * |
| 418 | { | 391 | load_config_file(const char *configfile) |
| 392 | { | ||
| 419 | CONF *conf = NULL; | 393 | CONF *conf = NULL; |
| 420 | long errorline = -1; | 394 | long errorline = -1; |
| 421 | 395 | ||
| 422 | if (!configfile) configfile = getenv("OPENSSL_CONF"); | 396 | if (!configfile) |
| 423 | if (!configfile) configfile = getenv("SSLEAY_CONF"); | 397 | configfile = getenv("OPENSSL_CONF"); |
| 398 | if (!configfile) | ||
| 399 | configfile = getenv("SSLEAY_CONF"); | ||
| 424 | 400 | ||
| 425 | if (configfile && | 401 | if (configfile && |
| 426 | (!(conf = NCONF_new(NULL)) || | 402 | (!(conf = NCONF_new(NULL)) || |
| 427 | NCONF_load(conf, configfile, &errorline) <= 0)) | 403 | NCONF_load(conf, configfile, &errorline) <= 0)) { |
| 428 | { | ||
| 429 | if (errorline <= 0) | 404 | if (errorline <= 0) |
| 430 | BIO_printf(bio_err, "error loading the config file " | 405 | BIO_printf(bio_err, "error loading the config file " |
| 431 | "'%s'\n", configfile); | 406 | "'%s'\n", configfile); |
| 432 | else | 407 | else |
| 433 | BIO_printf(bio_err, "error on line %ld of config file " | 408 | BIO_printf(bio_err, "error on line %ld of config file " |
| 434 | "'%s'\n", errorline, configfile); | 409 | "'%s'\n", errorline, configfile); |
| 435 | } | 410 | } |
| 436 | 411 | if (conf != NULL) { | |
| 437 | if (conf != NULL) | ||
| 438 | { | ||
| 439 | const char *p; | 412 | const char *p; |
| 440 | 413 | ||
| 441 | BIO_printf(bio_err,"Using configuration from %s\n", configfile); | 414 | BIO_printf(bio_err, "Using configuration from %s\n", configfile); |
| 442 | p = NCONF_get_string(conf, NULL, ENV_OID_FILE); | 415 | p = NCONF_get_string(conf, NULL, ENV_OID_FILE); |
| 443 | if (p != NULL) | 416 | if (p != NULL) { |
| 444 | { | ||
| 445 | BIO *oid_bio = BIO_new_file(p, "r"); | 417 | BIO *oid_bio = BIO_new_file(p, "r"); |
| 446 | if (!oid_bio) | 418 | if (!oid_bio) |
| 447 | ERR_print_errors(bio_err); | 419 | ERR_print_errors(bio_err); |
| 448 | else | 420 | else { |
| 449 | { | ||
| 450 | OBJ_create_objects(oid_bio); | 421 | OBJ_create_objects(oid_bio); |
| 451 | BIO_free_all(oid_bio); | 422 | BIO_free_all(oid_bio); |
| 452 | } | ||
| 453 | } | 423 | } |
| 454 | else | 424 | } else |
| 455 | ERR_clear_error(); | 425 | ERR_clear_error(); |
| 456 | if(!add_oid_section(bio_err, conf)) | 426 | if (!add_oid_section(bio_err, conf)) |
| 457 | ERR_print_errors(bio_err); | 427 | ERR_print_errors(bio_err); |
| 458 | } | ||
| 459 | return conf; | ||
| 460 | } | 428 | } |
| 429 | return conf; | ||
| 430 | } | ||
| 461 | 431 | ||
| 462 | /* | 432 | /* |
| 463 | * Query-related method definitions. | 433 | * Query-related method definitions. |
| 464 | */ | 434 | */ |
| 465 | 435 | ||
| 466 | static int query_command(const char *data, char *digest, const EVP_MD *md, | 436 | static int |
| 467 | const char *policy, int no_nonce, | 437 | query_command(const char *data, char *digest, const EVP_MD * md, |
| 468 | int cert, const char *in, const char *out, int text) | 438 | const char *policy, int no_nonce, |
| 469 | { | 439 | int cert, const char *in, const char *out, int text) |
| 440 | { | ||
| 470 | int ret = 0; | 441 | int ret = 0; |
| 471 | TS_REQ *query = NULL; | 442 | TS_REQ *query = NULL; |
| 472 | BIO *in_bio = NULL; | 443 | BIO *in_bio = NULL; |
| @@ -474,43 +445,39 @@ static int query_command(const char *data, char *digest, const EVP_MD *md, | |||
| 474 | BIO *out_bio = NULL; | 445 | BIO *out_bio = NULL; |
| 475 | 446 | ||
| 476 | /* Build query object either from file or from scratch. */ | 447 | /* Build query object either from file or from scratch. */ |
| 477 | if (in != NULL) | 448 | if (in != NULL) { |
| 478 | { | 449 | if ((in_bio = BIO_new_file(in, "rb")) == NULL) |
| 479 | if ((in_bio = BIO_new_file(in, "rb")) == NULL) goto end; | 450 | goto end; |
| 480 | query = d2i_TS_REQ_bio(in_bio, NULL); | 451 | query = d2i_TS_REQ_bio(in_bio, NULL); |
| 481 | } | 452 | } else { |
| 482 | else | ||
| 483 | { | ||
| 484 | /* Open the file if no explicit digest bytes were specified. */ | 453 | /* Open the file if no explicit digest bytes were specified. */ |
| 485 | if (!digest | 454 | if (!digest |
| 486 | && !(data_bio = BIO_open_with_default(data, "rb", stdin))) | 455 | && !(data_bio = BIO_open_with_default(data, "rb", stdin))) |
| 487 | goto end; | 456 | goto end; |
| 488 | /* Creating the query object. */ | 457 | /* Creating the query object. */ |
| 489 | query = create_query(data_bio, digest, md, | 458 | query = create_query(data_bio, digest, md, |
| 490 | policy, no_nonce, cert); | 459 | policy, no_nonce, cert); |
| 491 | /* Saving the random number generator state. */ | 460 | /* Saving the random number generator state. */ |
| 492 | } | 461 | } |
| 493 | if (query == NULL) goto end; | 462 | if (query == NULL) |
| 463 | goto end; | ||
| 494 | 464 | ||
| 495 | /* Write query either in ASN.1 or in text format. */ | 465 | /* Write query either in ASN.1 or in text format. */ |
| 496 | if ((out_bio = BIO_open_with_default(out, "wb", stdout)) == NULL) | 466 | if ((out_bio = BIO_open_with_default(out, "wb", stdout)) == NULL) |
| 497 | goto end; | 467 | goto end; |
| 498 | if (text) | 468 | if (text) { |
| 499 | { | ||
| 500 | /* Text output. */ | 469 | /* Text output. */ |
| 501 | if (!TS_REQ_print_bio(out_bio, query)) | 470 | if (!TS_REQ_print_bio(out_bio, query)) |
| 502 | goto end; | 471 | goto end; |
| 503 | } | 472 | } else { |
| 504 | else | ||
| 505 | { | ||
| 506 | /* ASN.1 output. */ | 473 | /* ASN.1 output. */ |
| 507 | if (!i2d_TS_REQ_bio(out_bio, query)) | 474 | if (!i2d_TS_REQ_bio(out_bio, query)) |
| 508 | goto end; | 475 | goto end; |
| 509 | } | 476 | } |
| 510 | 477 | ||
| 511 | ret = 1; | 478 | ret = 1; |
| 512 | 479 | ||
| 513 | end: | 480 | end: |
| 514 | ERR_print_errors(bio_err); | 481 | ERR_print_errors(bio_err); |
| 515 | 482 | ||
| 516 | /* Clean up. */ | 483 | /* Clean up. */ |
| @@ -520,19 +487,21 @@ static int query_command(const char *data, char *digest, const EVP_MD *md, | |||
| 520 | TS_REQ_free(query); | 487 | TS_REQ_free(query); |
| 521 | 488 | ||
| 522 | return ret; | 489 | return ret; |
| 523 | } | 490 | } |
| 524 | 491 | ||
| 525 | static BIO *BIO_open_with_default(const char *file, const char *mode, | 492 | static BIO * |
| 526 | FILE *default_fp) | 493 | BIO_open_with_default(const char *file, const char *mode, |
| 527 | { | 494 | FILE * default_fp) |
| 528 | return file == NULL ? | 495 | { |
| 529 | BIO_new_fp(default_fp, BIO_NOCLOSE) | 496 | return file == NULL ? |
| 530 | : BIO_new_file(file, mode); | 497 | BIO_new_fp(default_fp, BIO_NOCLOSE) |
| 531 | } | 498 | : BIO_new_file(file, mode); |
| 532 | 499 | } | |
| 533 | static TS_REQ *create_query(BIO *data_bio, char *digest, const EVP_MD *md, | 500 | |
| 534 | const char *policy, int no_nonce, int cert) | 501 | static TS_REQ * |
| 535 | { | 502 | create_query(BIO * data_bio, char *digest, const EVP_MD * md, |
| 503 | const char *policy, int no_nonce, int cert) | ||
| 504 | { | ||
| 536 | int ret = 0; | 505 | int ret = 0; |
| 537 | TS_REQ *ts_req = NULL; | 506 | TS_REQ *ts_req = NULL; |
| 538 | int len; | 507 | int len; |
| @@ -543,139 +512,156 @@ static TS_REQ *create_query(BIO *data_bio, char *digest, const EVP_MD *md, | |||
| 543 | ASN1_INTEGER *nonce_asn1 = NULL; | 512 | ASN1_INTEGER *nonce_asn1 = NULL; |
| 544 | 513 | ||
| 545 | /* Setting default message digest. */ | 514 | /* Setting default message digest. */ |
| 546 | if (!md && !(md = EVP_get_digestbyname("sha1"))) goto err; | 515 | if (!md && !(md = EVP_get_digestbyname("sha1"))) |
| 516 | goto err; | ||
| 547 | 517 | ||
| 548 | /* Creating request object. */ | 518 | /* Creating request object. */ |
| 549 | if (!(ts_req = TS_REQ_new())) goto err; | 519 | if (!(ts_req = TS_REQ_new())) |
| 520 | goto err; | ||
| 550 | 521 | ||
| 551 | /* Setting version. */ | 522 | /* Setting version. */ |
| 552 | if (!TS_REQ_set_version(ts_req, 1)) goto err; | 523 | if (!TS_REQ_set_version(ts_req, 1)) |
| 524 | goto err; | ||
| 553 | 525 | ||
| 554 | /* Creating and adding MSG_IMPRINT object. */ | 526 | /* Creating and adding MSG_IMPRINT object. */ |
| 555 | if (!(msg_imprint = TS_MSG_IMPRINT_new())) goto err; | 527 | if (!(msg_imprint = TS_MSG_IMPRINT_new())) |
| 528 | goto err; | ||
| 556 | 529 | ||
| 557 | /* Adding algorithm. */ | 530 | /* Adding algorithm. */ |
| 558 | if (!(algo = X509_ALGOR_new())) goto err; | 531 | if (!(algo = X509_ALGOR_new())) |
| 559 | if (!(algo->algorithm = OBJ_nid2obj(EVP_MD_type(md)))) goto err; | 532 | goto err; |
| 560 | if (!(algo->parameter = ASN1_TYPE_new())) goto err; | 533 | if (!(algo->algorithm = OBJ_nid2obj(EVP_MD_type(md)))) |
| 534 | goto err; | ||
| 535 | if (!(algo->parameter = ASN1_TYPE_new())) | ||
| 536 | goto err; | ||
| 561 | algo->parameter->type = V_ASN1_NULL; | 537 | algo->parameter->type = V_ASN1_NULL; |
| 562 | if (!TS_MSG_IMPRINT_set_algo(msg_imprint, algo)) goto err; | 538 | if (!TS_MSG_IMPRINT_set_algo(msg_imprint, algo)) |
| 539 | goto err; | ||
| 563 | 540 | ||
| 564 | /* Adding message digest. */ | 541 | /* Adding message digest. */ |
| 565 | if ((len = create_digest(data_bio, digest, md, &data)) == 0) | 542 | if ((len = create_digest(data_bio, digest, md, &data)) == 0) |
| 566 | goto err; | 543 | goto err; |
| 567 | if (!TS_MSG_IMPRINT_set_msg(msg_imprint, data, len)) goto err; | 544 | if (!TS_MSG_IMPRINT_set_msg(msg_imprint, data, len)) |
| 545 | goto err; | ||
| 546 | |||
| 547 | if (!TS_REQ_set_msg_imprint(ts_req, msg_imprint)) | ||
| 548 | goto err; | ||
| 568 | 549 | ||
| 569 | if (!TS_REQ_set_msg_imprint(ts_req, msg_imprint)) goto err; | ||
| 570 | |||
| 571 | /* Setting policy if requested. */ | 550 | /* Setting policy if requested. */ |
| 572 | if (policy && !(policy_obj = txt2obj(policy))) goto err; | 551 | if (policy && !(policy_obj = txt2obj(policy))) |
| 573 | if (policy_obj && !TS_REQ_set_policy_id(ts_req, policy_obj)) goto err; | 552 | goto err; |
| 553 | if (policy_obj && !TS_REQ_set_policy_id(ts_req, policy_obj)) | ||
| 554 | goto err; | ||
| 574 | 555 | ||
| 575 | /* Setting nonce if requested. */ | 556 | /* Setting nonce if requested. */ |
| 576 | if (!no_nonce && !(nonce_asn1 = create_nonce(NONCE_LENGTH))) goto err; | 557 | if (!no_nonce && !(nonce_asn1 = create_nonce(NONCE_LENGTH))) |
| 577 | if (nonce_asn1 && !TS_REQ_set_nonce(ts_req, nonce_asn1)) goto err; | 558 | goto err; |
| 559 | if (nonce_asn1 && !TS_REQ_set_nonce(ts_req, nonce_asn1)) | ||
| 560 | goto err; | ||
| 578 | 561 | ||
| 579 | /* Setting certificate request flag if requested. */ | 562 | /* Setting certificate request flag if requested. */ |
| 580 | if (!TS_REQ_set_cert_req(ts_req, cert)) goto err; | 563 | if (!TS_REQ_set_cert_req(ts_req, cert)) |
| 564 | goto err; | ||
| 581 | 565 | ||
| 582 | ret = 1; | 566 | ret = 1; |
| 583 | err: | 567 | err: |
| 584 | if (!ret) | 568 | if (!ret) { |
| 585 | { | ||
| 586 | TS_REQ_free(ts_req); | 569 | TS_REQ_free(ts_req); |
| 587 | ts_req = NULL; | 570 | ts_req = NULL; |
| 588 | BIO_printf(bio_err, "could not create query\n"); | 571 | BIO_printf(bio_err, "could not create query\n"); |
| 589 | } | 572 | } |
| 590 | TS_MSG_IMPRINT_free(msg_imprint); | 573 | TS_MSG_IMPRINT_free(msg_imprint); |
| 591 | X509_ALGOR_free(algo); | 574 | X509_ALGOR_free(algo); |
| 592 | free(data); | 575 | free(data); |
| 593 | ASN1_OBJECT_free(policy_obj); | 576 | ASN1_OBJECT_free(policy_obj); |
| 594 | ASN1_INTEGER_free(nonce_asn1); | 577 | ASN1_INTEGER_free(nonce_asn1); |
| 595 | return ts_req; | 578 | return ts_req; |
| 596 | } | 579 | } |
| 597 | 580 | ||
| 598 | static int create_digest(BIO *input, char *digest, const EVP_MD *md, | 581 | static int |
| 599 | unsigned char **md_value) | 582 | create_digest(BIO * input, char *digest, const EVP_MD * md, |
| 600 | { | 583 | unsigned char **md_value) |
| 584 | { | ||
| 601 | int md_value_len; | 585 | int md_value_len; |
| 602 | 586 | ||
| 603 | md_value_len = EVP_MD_size(md); | 587 | md_value_len = EVP_MD_size(md); |
| 604 | if (md_value_len < 0) | 588 | if (md_value_len < 0) |
| 605 | goto err; | 589 | goto err; |
| 606 | if (input) | 590 | if (input) { |
| 607 | { | ||
| 608 | /* Digest must be computed from an input file. */ | 591 | /* Digest must be computed from an input file. */ |
| 609 | EVP_MD_CTX md_ctx; | 592 | EVP_MD_CTX md_ctx; |
| 610 | unsigned char buffer[4096]; | 593 | unsigned char buffer[4096]; |
| 611 | int length; | 594 | int length; |
| 612 | 595 | ||
| 613 | *md_value = malloc(md_value_len); | 596 | *md_value = malloc(md_value_len); |
| 614 | if (*md_value == 0) goto err; | 597 | if (*md_value == 0) |
| 598 | goto err; | ||
| 615 | 599 | ||
| 616 | EVP_DigestInit(&md_ctx, md); | 600 | EVP_DigestInit(&md_ctx, md); |
| 617 | while ((length = BIO_read(input, buffer, sizeof(buffer))) > 0) | 601 | while ((length = BIO_read(input, buffer, sizeof(buffer))) > 0) { |
| 618 | { | ||
| 619 | EVP_DigestUpdate(&md_ctx, buffer, length); | 602 | EVP_DigestUpdate(&md_ctx, buffer, length); |
| 620 | } | ||
| 621 | EVP_DigestFinal(&md_ctx, *md_value, NULL); | ||
| 622 | } | 603 | } |
| 623 | else | 604 | EVP_DigestFinal(&md_ctx, *md_value, NULL); |
| 624 | { | 605 | } else { |
| 625 | /* Digest bytes are specified with digest. */ | 606 | /* Digest bytes are specified with digest. */ |
| 626 | long digest_len; | 607 | long digest_len; |
| 627 | *md_value = string_to_hex(digest, &digest_len); | 608 | *md_value = string_to_hex(digest, &digest_len); |
| 628 | if (!*md_value || md_value_len != digest_len) | 609 | if (!*md_value || md_value_len != digest_len) { |
| 629 | { | ||
| 630 | free(*md_value); | 610 | free(*md_value); |
| 631 | *md_value = NULL; | 611 | *md_value = NULL; |
| 632 | BIO_printf(bio_err, "bad digest, %d bytes " | 612 | BIO_printf(bio_err, "bad digest, %d bytes " |
| 633 | "must be specified\n", md_value_len); | 613 | "must be specified\n", md_value_len); |
| 634 | goto err; | 614 | goto err; |
| 635 | } | ||
| 636 | } | 615 | } |
| 616 | } | ||
| 637 | 617 | ||
| 638 | return md_value_len; | 618 | return md_value_len; |
| 639 | err: | 619 | err: |
| 640 | return 0; | 620 | return 0; |
| 641 | } | 621 | } |
| 642 | 622 | ||
| 643 | static ASN1_INTEGER *create_nonce(int bits) | 623 | static ASN1_INTEGER * |
| 644 | { | 624 | create_nonce(int bits) |
| 625 | { | ||
| 645 | unsigned char buf[20]; | 626 | unsigned char buf[20]; |
| 646 | ASN1_INTEGER *nonce = NULL; | 627 | ASN1_INTEGER *nonce = NULL; |
| 647 | int len = (bits - 1) / 8 + 1; | 628 | int len = (bits - 1) / 8 + 1; |
| 648 | int i; | 629 | int i; |
| 649 | 630 | ||
| 650 | /* Generating random byte sequence. */ | 631 | /* Generating random byte sequence. */ |
| 651 | if (len > (int)sizeof(buf)) goto err; | 632 | if (len > (int) sizeof(buf)) |
| 652 | if (RAND_bytes(buf, len) <= 0) goto err; | 633 | goto err; |
| 634 | if (RAND_bytes(buf, len) <= 0) | ||
| 635 | goto err; | ||
| 653 | 636 | ||
| 654 | /* Find the first non-zero byte and creating ASN1_INTEGER object. */ | 637 | /* Find the first non-zero byte and creating ASN1_INTEGER object. */ |
| 655 | for (i = 0; i < len && !buf[i]; ++i); | 638 | for (i = 0; i < len && !buf[i]; ++i); |
| 656 | if (!(nonce = ASN1_INTEGER_new())) goto err; | 639 | if (!(nonce = ASN1_INTEGER_new())) |
| 640 | goto err; | ||
| 657 | free(nonce->data); | 641 | free(nonce->data); |
| 658 | /* Allocate at least one byte. */ | 642 | /* Allocate at least one byte. */ |
| 659 | nonce->length = len - i; | 643 | nonce->length = len - i; |
| 660 | if (!(nonce->data = malloc(nonce->length + 1))) goto err; | 644 | if (!(nonce->data = malloc(nonce->length + 1))) |
| 645 | goto err; | ||
| 661 | memcpy(nonce->data, buf + i, nonce->length); | 646 | memcpy(nonce->data, buf + i, nonce->length); |
| 662 | 647 | ||
| 663 | return nonce; | 648 | return nonce; |
| 664 | err: | 649 | err: |
| 665 | BIO_printf(bio_err, "could not create nonce\n"); | 650 | BIO_printf(bio_err, "could not create nonce\n"); |
| 666 | ASN1_INTEGER_free(nonce); | 651 | ASN1_INTEGER_free(nonce); |
| 667 | return NULL; | 652 | return NULL; |
| 668 | } | 653 | } |
| 669 | /* | 654 | /* |
| 670 | * Reply-related method definitions. | 655 | * Reply-related method definitions. |
| 671 | */ | 656 | */ |
| 672 | 657 | ||
| 673 | static int reply_command(CONF *conf, char *section, char *engine, | 658 | static int |
| 674 | char *queryfile, char *passin, char *inkey, | 659 | reply_command(CONF * conf, char *section, char *engine, |
| 675 | char *signer, char *chain, const char *policy, | 660 | char *queryfile, char *passin, char *inkey, |
| 676 | char *in, int token_in, | 661 | char *signer, char *chain, const char *policy, |
| 677 | char *out, int token_out, int text) | 662 | char *in, int token_in, |
| 678 | { | 663 | char *out, int token_out, int text) |
| 664 | { | ||
| 679 | int ret = 0; | 665 | int ret = 0; |
| 680 | TS_RESP *response = NULL; | 666 | TS_RESP *response = NULL; |
| 681 | BIO *in_bio = NULL; | 667 | BIO *in_bio = NULL; |
| @@ -685,66 +671,59 @@ static int reply_command(CONF *conf, char *section, char *engine, | |||
| 685 | BIO *out_bio = NULL; | 671 | BIO *out_bio = NULL; |
| 686 | 672 | ||
| 687 | /* Build response object either from response or query. */ | 673 | /* Build response object either from response or query. */ |
| 688 | if (in != NULL) | 674 | if (in != NULL) { |
| 689 | { | 675 | if ((in_bio = BIO_new_file(in, "rb")) == NULL) |
| 690 | if ((in_bio = BIO_new_file(in, "rb")) == NULL) goto end; | 676 | goto end; |
| 691 | if (token_in) | 677 | if (token_in) { |
| 692 | { | 678 | /* |
| 693 | /* We have a ContentInfo (PKCS7) object, add | 679 | * We have a ContentInfo (PKCS7) object, add |
| 694 | 'granted' status info around it. */ | 680 | * 'granted' status info around it. |
| 681 | */ | ||
| 695 | response = read_PKCS7(in_bio); | 682 | response = read_PKCS7(in_bio); |
| 696 | } | 683 | } else { |
| 697 | else | ||
| 698 | { | ||
| 699 | /* We have a ready-made TS_RESP object. */ | 684 | /* We have a ready-made TS_RESP object. */ |
| 700 | response = d2i_TS_RESP_bio(in_bio, NULL); | 685 | response = d2i_TS_RESP_bio(in_bio, NULL); |
| 701 | } | ||
| 702 | } | 686 | } |
| 703 | else | 687 | } else { |
| 704 | { | ||
| 705 | response = create_response(conf, section, engine, queryfile, | 688 | response = create_response(conf, section, engine, queryfile, |
| 706 | passin, inkey, signer, chain, | 689 | passin, inkey, signer, chain, |
| 707 | policy); | 690 | policy); |
| 708 | if (response) | 691 | if (response) |
| 709 | BIO_printf(bio_err, "Response has been generated.\n"); | 692 | BIO_printf(bio_err, "Response has been generated.\n"); |
| 710 | else | 693 | else |
| 711 | BIO_printf(bio_err, "Response is not generated.\n"); | 694 | BIO_printf(bio_err, "Response is not generated.\n"); |
| 712 | } | 695 | } |
| 713 | if (response == NULL) goto end; | 696 | if (response == NULL) |
| 697 | goto end; | ||
| 714 | 698 | ||
| 715 | /* Write response either in ASN.1 or text format. */ | 699 | /* Write response either in ASN.1 or text format. */ |
| 716 | if ((out_bio = BIO_open_with_default(out, "wb", stdout)) == NULL) | 700 | if ((out_bio = BIO_open_with_default(out, "wb", stdout)) == NULL) |
| 717 | goto end; | 701 | goto end; |
| 718 | if (text) | 702 | if (text) { |
| 719 | { | ||
| 720 | /* Text output. */ | 703 | /* Text output. */ |
| 721 | if (token_out) | 704 | if (token_out) { |
| 722 | { | ||
| 723 | TS_TST_INFO *tst_info = TS_RESP_get_tst_info(response); | 705 | TS_TST_INFO *tst_info = TS_RESP_get_tst_info(response); |
| 724 | if (!TS_TST_INFO_print_bio(out_bio, tst_info)) goto end; | 706 | if (!TS_TST_INFO_print_bio(out_bio, tst_info)) |
| 725 | } | 707 | goto end; |
| 726 | else | 708 | } else { |
| 727 | { | 709 | if (!TS_RESP_print_bio(out_bio, response)) |
| 728 | if (!TS_RESP_print_bio(out_bio, response)) goto end; | 710 | goto end; |
| 729 | } | ||
| 730 | } | 711 | } |
| 731 | else | 712 | } else { |
| 732 | { | ||
| 733 | /* ASN.1 DER output. */ | 713 | /* ASN.1 DER output. */ |
| 734 | if (token_out) | 714 | if (token_out) { |
| 735 | { | ||
| 736 | PKCS7 *token = TS_RESP_get_token(response); | 715 | PKCS7 *token = TS_RESP_get_token(response); |
| 737 | if (!i2d_PKCS7_bio(out_bio, token)) goto end; | 716 | if (!i2d_PKCS7_bio(out_bio, token)) |
| 738 | } | 717 | goto end; |
| 739 | else | 718 | } else { |
| 740 | { | 719 | if (!i2d_TS_RESP_bio(out_bio, response)) |
| 741 | if (!i2d_TS_RESP_bio(out_bio, response)) goto end; | 720 | goto end; |
| 742 | } | ||
| 743 | } | 721 | } |
| 722 | } | ||
| 744 | 723 | ||
| 745 | ret = 1; | 724 | ret = 1; |
| 746 | 725 | ||
| 747 | end: | 726 | end: |
| 748 | ERR_print_errors(bio_err); | 727 | ERR_print_errors(bio_err); |
| 749 | 728 | ||
| 750 | /* Clean up. */ | 729 | /* Clean up. */ |
| @@ -756,11 +735,12 @@ static int reply_command(CONF *conf, char *section, char *engine, | |||
| 756 | TS_RESP_free(response); | 735 | TS_RESP_free(response); |
| 757 | 736 | ||
| 758 | return ret; | 737 | return ret; |
| 759 | } | 738 | } |
| 760 | 739 | ||
| 761 | /* Reads a PKCS7 token and adds default 'granted' status info to it. */ | 740 | /* Reads a PKCS7 token and adds default 'granted' status info to it. */ |
| 762 | static TS_RESP *read_PKCS7(BIO *in_bio) | 741 | static TS_RESP * |
| 763 | { | 742 | read_PKCS7(BIO * in_bio) |
| 743 | { | ||
| 764 | int ret = 0; | 744 | int ret = 0; |
| 765 | PKCS7 *token = NULL; | 745 | PKCS7 *token = NULL; |
| 766 | TS_TST_INFO *tst_info = NULL; | 746 | TS_TST_INFO *tst_info = NULL; |
| @@ -768,16 +748,22 @@ static TS_RESP *read_PKCS7(BIO *in_bio) | |||
| 768 | TS_STATUS_INFO *si = NULL; | 748 | TS_STATUS_INFO *si = NULL; |
| 769 | 749 | ||
| 770 | /* Read PKCS7 object and extract the signed time stamp info. */ | 750 | /* Read PKCS7 object and extract the signed time stamp info. */ |
| 771 | if (!(token = d2i_PKCS7_bio(in_bio, NULL))) goto end; | 751 | if (!(token = d2i_PKCS7_bio(in_bio, NULL))) |
| 772 | if (!(tst_info = PKCS7_to_TS_TST_INFO(token))) goto end; | 752 | goto end; |
| 753 | if (!(tst_info = PKCS7_to_TS_TST_INFO(token))) | ||
| 754 | goto end; | ||
| 773 | 755 | ||
| 774 | /* Creating response object. */ | 756 | /* Creating response object. */ |
| 775 | if (!(resp = TS_RESP_new())) goto end; | 757 | if (!(resp = TS_RESP_new())) |
| 758 | goto end; | ||
| 776 | 759 | ||
| 777 | /* Create granted status info. */ | 760 | /* Create granted status info. */ |
| 778 | if (!(si = TS_STATUS_INFO_new())) goto end; | 761 | if (!(si = TS_STATUS_INFO_new())) |
| 779 | if (!(ASN1_INTEGER_set(si->status, TS_STATUS_GRANTED))) goto end; | 762 | goto end; |
| 780 | if (!TS_RESP_set_status_info(resp, si)) goto end; | 763 | if (!(ASN1_INTEGER_set(si->status, TS_STATUS_GRANTED))) |
| 764 | goto end; | ||
| 765 | if (!TS_RESP_set_status_info(resp, si)) | ||
| 766 | goto end; | ||
| 781 | 767 | ||
| 782 | /* Setting encapsulated token. */ | 768 | /* Setting encapsulated token. */ |
| 783 | TS_RESP_set_tst_info(resp, token, tst_info); | 769 | TS_RESP_set_tst_info(resp, token, tst_info); |
| @@ -785,22 +771,22 @@ static TS_RESP *read_PKCS7(BIO *in_bio) | |||
| 785 | tst_info = NULL; /* Ownership is lost. */ | 771 | tst_info = NULL; /* Ownership is lost. */ |
| 786 | 772 | ||
| 787 | ret = 1; | 773 | ret = 1; |
| 788 | end: | 774 | end: |
| 789 | PKCS7_free(token); | 775 | PKCS7_free(token); |
| 790 | TS_TST_INFO_free(tst_info); | 776 | TS_TST_INFO_free(tst_info); |
| 791 | if (!ret) | 777 | if (!ret) { |
| 792 | { | ||
| 793 | TS_RESP_free(resp); | 778 | TS_RESP_free(resp); |
| 794 | resp = NULL; | 779 | resp = NULL; |
| 795 | } | 780 | } |
| 796 | TS_STATUS_INFO_free(si); | 781 | TS_STATUS_INFO_free(si); |
| 797 | return resp; | 782 | return resp; |
| 798 | } | 783 | } |
| 799 | 784 | ||
| 800 | static TS_RESP *create_response(CONF *conf, const char *section, char *engine, | 785 | static TS_RESP * |
| 801 | char *queryfile, char *passin, char *inkey, | 786 | create_response(CONF * conf, const char *section, char *engine, |
| 802 | char *signer, char *chain, const char *policy) | 787 | char *queryfile, char *passin, char *inkey, |
| 803 | { | 788 | char *signer, char *chain, const char *policy) |
| 789 | { | ||
| 804 | int ret = 0; | 790 | int ret = 0; |
| 805 | TS_RESP *response = NULL; | 791 | TS_RESP *response = NULL; |
| 806 | BIO *query_bio = NULL; | 792 | BIO *query_bio = NULL; |
| @@ -814,154 +800,170 @@ static TS_RESP *create_response(CONF *conf, const char *section, char *engine, | |||
| 814 | goto end; | 800 | goto end; |
| 815 | 801 | ||
| 816 | /* Setting up response generation context. */ | 802 | /* Setting up response generation context. */ |
| 817 | if (!(resp_ctx = TS_RESP_CTX_new())) goto end; | 803 | if (!(resp_ctx = TS_RESP_CTX_new())) |
| 804 | goto end; | ||
| 818 | 805 | ||
| 819 | /* Setting serial number provider callback. */ | 806 | /* Setting serial number provider callback. */ |
| 820 | if (!TS_CONF_set_serial(conf, section, serial_cb, resp_ctx)) goto end; | 807 | if (!TS_CONF_set_serial(conf, section, serial_cb, resp_ctx)) |
| 808 | goto end; | ||
| 821 | #ifndef OPENSSL_NO_ENGINE | 809 | #ifndef OPENSSL_NO_ENGINE |
| 822 | /* Setting default OpenSSL engine. */ | 810 | /* Setting default OpenSSL engine. */ |
| 823 | if (!TS_CONF_set_crypto_device(conf, section, engine)) goto end; | 811 | if (!TS_CONF_set_crypto_device(conf, section, engine)) |
| 812 | goto end; | ||
| 824 | #endif | 813 | #endif |
| 825 | 814 | ||
| 826 | /* Setting TSA signer certificate. */ | 815 | /* Setting TSA signer certificate. */ |
| 827 | if (!TS_CONF_set_signer_cert(conf, section, signer, resp_ctx)) goto end; | 816 | if (!TS_CONF_set_signer_cert(conf, section, signer, resp_ctx)) |
| 817 | goto end; | ||
| 828 | 818 | ||
| 829 | /* Setting TSA signer certificate chain. */ | 819 | /* Setting TSA signer certificate chain. */ |
| 830 | if (!TS_CONF_set_certs(conf, section, chain, resp_ctx)) goto end; | 820 | if (!TS_CONF_set_certs(conf, section, chain, resp_ctx)) |
| 821 | goto end; | ||
| 831 | 822 | ||
| 832 | /* Setting TSA signer private key. */ | 823 | /* Setting TSA signer private key. */ |
| 833 | if (!TS_CONF_set_signer_key(conf, section, inkey, passin, resp_ctx)) | 824 | if (!TS_CONF_set_signer_key(conf, section, inkey, passin, resp_ctx)) |
| 834 | goto end; | 825 | goto end; |
| 835 | 826 | ||
| 836 | /* Setting default policy OID. */ | 827 | /* Setting default policy OID. */ |
| 837 | if (!TS_CONF_set_def_policy(conf, section, policy, resp_ctx)) goto end; | 828 | if (!TS_CONF_set_def_policy(conf, section, policy, resp_ctx)) |
| 829 | goto end; | ||
| 838 | 830 | ||
| 839 | /* Setting acceptable policy OIDs. */ | 831 | /* Setting acceptable policy OIDs. */ |
| 840 | if (!TS_CONF_set_policies(conf, section, resp_ctx)) goto end; | 832 | if (!TS_CONF_set_policies(conf, section, resp_ctx)) |
| 833 | goto end; | ||
| 841 | 834 | ||
| 842 | /* Setting the acceptable one-way hash algorithms. */ | 835 | /* Setting the acceptable one-way hash algorithms. */ |
| 843 | if (!TS_CONF_set_digests(conf, section, resp_ctx)) goto end; | 836 | if (!TS_CONF_set_digests(conf, section, resp_ctx)) |
| 837 | goto end; | ||
| 844 | 838 | ||
| 845 | /* Setting guaranteed time stamp accuracy. */ | 839 | /* Setting guaranteed time stamp accuracy. */ |
| 846 | if (!TS_CONF_set_accuracy(conf, section, resp_ctx)) goto end; | 840 | if (!TS_CONF_set_accuracy(conf, section, resp_ctx)) |
| 841 | goto end; | ||
| 847 | 842 | ||
| 848 | /* Setting the precision of the time. */ | 843 | /* Setting the precision of the time. */ |
| 849 | if (!TS_CONF_set_clock_precision_digits(conf, section, resp_ctx)) | 844 | if (!TS_CONF_set_clock_precision_digits(conf, section, resp_ctx)) |
| 850 | goto end; | 845 | goto end; |
| 851 | 846 | ||
| 852 | /* Setting the ordering flaf if requested. */ | 847 | /* Setting the ordering flaf if requested. */ |
| 853 | if (!TS_CONF_set_ordering(conf, section, resp_ctx)) goto end; | 848 | if (!TS_CONF_set_ordering(conf, section, resp_ctx)) |
| 849 | goto end; | ||
| 854 | 850 | ||
| 855 | /* Setting the TSA name required flag if requested. */ | 851 | /* Setting the TSA name required flag if requested. */ |
| 856 | if (!TS_CONF_set_tsa_name(conf, section, resp_ctx)) goto end; | 852 | if (!TS_CONF_set_tsa_name(conf, section, resp_ctx)) |
| 853 | goto end; | ||
| 857 | 854 | ||
| 858 | /* Setting the ESS cert id chain flag if requested. */ | 855 | /* Setting the ESS cert id chain flag if requested. */ |
| 859 | if (!TS_CONF_set_ess_cert_id_chain(conf, section, resp_ctx)) goto end; | 856 | if (!TS_CONF_set_ess_cert_id_chain(conf, section, resp_ctx)) |
| 857 | goto end; | ||
| 860 | 858 | ||
| 861 | /* Creating the response. */ | 859 | /* Creating the response. */ |
| 862 | if (!(response = TS_RESP_create_response(resp_ctx, query_bio))) | 860 | if (!(response = TS_RESP_create_response(resp_ctx, query_bio))) |
| 863 | goto end; | 861 | goto end; |
| 864 | 862 | ||
| 865 | ret = 1; | 863 | ret = 1; |
| 866 | end: | 864 | end: |
| 867 | if (!ret) | 865 | if (!ret) { |
| 868 | { | ||
| 869 | TS_RESP_free(response); | 866 | TS_RESP_free(response); |
| 870 | response = NULL; | 867 | response = NULL; |
| 871 | } | 868 | } |
| 872 | TS_RESP_CTX_free(resp_ctx); | 869 | TS_RESP_CTX_free(resp_ctx); |
| 873 | BIO_free_all(query_bio); | 870 | BIO_free_all(query_bio); |
| 874 | 871 | ||
| 875 | return response; | 872 | return response; |
| 876 | } | 873 | } |
| 877 | 874 | ||
| 878 | static ASN1_INTEGER * serial_cb(TS_RESP_CTX *ctx, void *data) | 875 | static ASN1_INTEGER * |
| 879 | { | 876 | serial_cb(TS_RESP_CTX * ctx, void *data) |
| 877 | { | ||
| 880 | const char *serial_file = (const char *) data; | 878 | const char *serial_file = (const char *) data; |
| 881 | ASN1_INTEGER *serial = next_serial(serial_file); | 879 | ASN1_INTEGER *serial = next_serial(serial_file); |
| 882 | 880 | ||
| 883 | if (!serial) | 881 | if (!serial) { |
| 884 | { | ||
| 885 | TS_RESP_CTX_set_status_info(ctx, TS_STATUS_REJECTION, | 882 | TS_RESP_CTX_set_status_info(ctx, TS_STATUS_REJECTION, |
| 886 | "Error during serial number " | 883 | "Error during serial number " |
| 887 | "generation."); | 884 | "generation."); |
| 888 | TS_RESP_CTX_add_failure_info(ctx, | 885 | TS_RESP_CTX_add_failure_info(ctx, |
| 889 | TS_INFO_ADD_INFO_NOT_AVAILABLE); | 886 | TS_INFO_ADD_INFO_NOT_AVAILABLE); |
| 890 | } | 887 | } else |
| 891 | else | ||
| 892 | save_ts_serial(serial_file, serial); | 888 | save_ts_serial(serial_file, serial); |
| 893 | 889 | ||
| 894 | return serial; | 890 | return serial; |
| 895 | } | 891 | } |
| 896 | 892 | ||
| 897 | static ASN1_INTEGER *next_serial(const char *serialfile) | 893 | static ASN1_INTEGER * |
| 898 | { | 894 | next_serial(const char *serialfile) |
| 895 | { | ||
| 899 | int ret = 0; | 896 | int ret = 0; |
| 900 | BIO *in = NULL; | 897 | BIO *in = NULL; |
| 901 | ASN1_INTEGER *serial = NULL; | 898 | ASN1_INTEGER *serial = NULL; |
| 902 | BIGNUM *bn = NULL; | 899 | BIGNUM *bn = NULL; |
| 903 | 900 | ||
| 904 | if (!(serial = ASN1_INTEGER_new())) goto err; | 901 | if (!(serial = ASN1_INTEGER_new())) |
| 902 | goto err; | ||
| 905 | 903 | ||
| 906 | if (!(in = BIO_new_file(serialfile, "r"))) | 904 | if (!(in = BIO_new_file(serialfile, "r"))) { |
| 907 | { | ||
| 908 | ERR_clear_error(); | 905 | ERR_clear_error(); |
| 909 | BIO_printf(bio_err, "Warning: could not open file %s for " | 906 | BIO_printf(bio_err, "Warning: could not open file %s for " |
| 910 | "reading, using serial number: 1\n", serialfile); | 907 | "reading, using serial number: 1\n", serialfile); |
| 911 | if (!ASN1_INTEGER_set(serial, 1)) goto err; | 908 | if (!ASN1_INTEGER_set(serial, 1)) |
| 912 | } | 909 | goto err; |
| 913 | else | 910 | } else { |
| 914 | { | ||
| 915 | char buf[1024]; | 911 | char buf[1024]; |
| 916 | if (!a2i_ASN1_INTEGER(in, serial, buf, sizeof(buf))) | 912 | if (!a2i_ASN1_INTEGER(in, serial, buf, sizeof(buf))) { |
| 917 | { | ||
| 918 | BIO_printf(bio_err, "unable to load number from %s\n", | 913 | BIO_printf(bio_err, "unable to load number from %s\n", |
| 919 | serialfile); | 914 | serialfile); |
| 915 | goto err; | ||
| 916 | } | ||
| 917 | if (!(bn = ASN1_INTEGER_to_BN(serial, NULL))) | ||
| 920 | goto err; | 918 | goto err; |
| 921 | } | ||
| 922 | if (!(bn = ASN1_INTEGER_to_BN(serial, NULL))) goto err; | ||
| 923 | ASN1_INTEGER_free(serial); | 919 | ASN1_INTEGER_free(serial); |
| 924 | serial = NULL; | 920 | serial = NULL; |
| 925 | if (!BN_add_word(bn, 1)) goto err; | 921 | if (!BN_add_word(bn, 1)) |
| 926 | if (!(serial = BN_to_ASN1_INTEGER(bn, NULL))) goto err; | 922 | goto err; |
| 927 | } | 923 | if (!(serial = BN_to_ASN1_INTEGER(bn, NULL))) |
| 924 | goto err; | ||
| 925 | } | ||
| 928 | ret = 1; | 926 | ret = 1; |
| 929 | err: | 927 | err: |
| 930 | if (!ret) | 928 | if (!ret) { |
| 931 | { | ||
| 932 | ASN1_INTEGER_free(serial); | 929 | ASN1_INTEGER_free(serial); |
| 933 | serial = NULL; | 930 | serial = NULL; |
| 934 | } | 931 | } |
| 935 | BIO_free_all(in); | 932 | BIO_free_all(in); |
| 936 | BN_free(bn); | 933 | BN_free(bn); |
| 937 | return serial; | 934 | return serial; |
| 938 | } | 935 | } |
| 939 | 936 | ||
| 940 | static int save_ts_serial(const char *serialfile, ASN1_INTEGER *serial) | 937 | static int |
| 941 | { | 938 | save_ts_serial(const char *serialfile, ASN1_INTEGER * serial) |
| 939 | { | ||
| 942 | int ret = 0; | 940 | int ret = 0; |
| 943 | BIO *out = NULL; | 941 | BIO *out = NULL; |
| 944 | 942 | ||
| 945 | if (!(out = BIO_new_file(serialfile, "w"))) goto err; | 943 | if (!(out = BIO_new_file(serialfile, "w"))) |
| 946 | if (i2a_ASN1_INTEGER(out, serial) <= 0) goto err; | 944 | goto err; |
| 947 | if (BIO_puts(out, "\n") <= 0) goto err; | 945 | if (i2a_ASN1_INTEGER(out, serial) <= 0) |
| 946 | goto err; | ||
| 947 | if (BIO_puts(out, "\n") <= 0) | ||
| 948 | goto err; | ||
| 948 | ret = 1; | 949 | ret = 1; |
| 949 | err: | 950 | err: |
| 950 | if (!ret) | 951 | if (!ret) |
| 951 | BIO_printf(bio_err, "could not save serial number to %s\n", | 952 | BIO_printf(bio_err, "could not save serial number to %s\n", |
| 952 | serialfile); | 953 | serialfile); |
| 953 | BIO_free_all(out); | 954 | BIO_free_all(out); |
| 954 | return ret; | 955 | return ret; |
| 955 | } | 956 | } |
| 956 | 957 | ||
| 957 | /* | 958 | /* |
| 958 | * Verify-related method definitions. | 959 | * Verify-related method definitions. |
| 959 | */ | 960 | */ |
| 960 | 961 | ||
| 961 | static int verify_command(char *data, char *digest, char *queryfile, | 962 | static int |
| 962 | char *in, int token_in, | 963 | verify_command(char *data, char *digest, char *queryfile, |
| 963 | char *ca_path, char *ca_file, char *untrusted) | 964 | char *in, int token_in, |
| 964 | { | 965 | char *ca_path, char *ca_file, char *untrusted) |
| 966 | { | ||
| 965 | BIO *in_bio = NULL; | 967 | BIO *in_bio = NULL; |
| 966 | PKCS7 *token = NULL; | 968 | PKCS7 *token = NULL; |
| 967 | TS_RESP *response = NULL; | 969 | TS_RESP *response = NULL; |
| @@ -969,112 +971,111 @@ static int verify_command(char *data, char *digest, char *queryfile, | |||
| 969 | int ret = 0; | 971 | int ret = 0; |
| 970 | 972 | ||
| 971 | /* Decode the token (PKCS7) or response (TS_RESP) files. */ | 973 | /* Decode the token (PKCS7) or response (TS_RESP) files. */ |
| 972 | if (!(in_bio = BIO_new_file(in, "rb"))) goto end; | 974 | if (!(in_bio = BIO_new_file(in, "rb"))) |
| 973 | if (token_in) | 975 | goto end; |
| 974 | { | 976 | if (token_in) { |
| 975 | if (!(token = d2i_PKCS7_bio(in_bio, NULL))) goto end; | 977 | if (!(token = d2i_PKCS7_bio(in_bio, NULL))) |
| 976 | } | 978 | goto end; |
| 977 | else | 979 | } else { |
| 978 | { | 980 | if (!(response = d2i_TS_RESP_bio(in_bio, NULL))) |
| 979 | if (!(response = d2i_TS_RESP_bio(in_bio, NULL))) goto end; | 981 | goto end; |
| 980 | } | 982 | } |
| 981 | 983 | ||
| 982 | if (!(verify_ctx = create_verify_ctx(data, digest, queryfile, | 984 | if (!(verify_ctx = create_verify_ctx(data, digest, queryfile, |
| 983 | ca_path, ca_file, untrusted))) | 985 | ca_path, ca_file, untrusted))) |
| 984 | goto end; | 986 | goto end; |
| 985 | 987 | ||
| 986 | /* Checking the token or response against the request. */ | 988 | /* Checking the token or response against the request. */ |
| 987 | ret = token_in ? | 989 | ret = token_in ? |
| 988 | TS_RESP_verify_token(verify_ctx, token) : | 990 | TS_RESP_verify_token(verify_ctx, token) : |
| 989 | TS_RESP_verify_response(verify_ctx, response); | 991 | TS_RESP_verify_response(verify_ctx, response); |
| 990 | 992 | ||
| 991 | end: | 993 | end: |
| 992 | printf("Verification: "); | 994 | printf("Verification: "); |
| 993 | if (ret) | 995 | if (ret) |
| 994 | printf("OK\n"); | 996 | printf("OK\n"); |
| 995 | else | 997 | else { |
| 996 | { | ||
| 997 | printf("FAILED\n"); | 998 | printf("FAILED\n"); |
| 998 | /* Print errors, if there are any. */ | 999 | /* Print errors, if there are any. */ |
| 999 | ERR_print_errors(bio_err); | 1000 | ERR_print_errors(bio_err); |
| 1000 | } | 1001 | } |
| 1001 | 1002 | ||
| 1002 | /* Clean up. */ | 1003 | /* Clean up. */ |
| 1003 | BIO_free_all(in_bio); | 1004 | BIO_free_all(in_bio); |
| 1004 | PKCS7_free(token); | 1005 | PKCS7_free(token); |
| 1005 | TS_RESP_free(response); | 1006 | TS_RESP_free(response); |
| 1006 | TS_VERIFY_CTX_free(verify_ctx); | 1007 | TS_VERIFY_CTX_free(verify_ctx); |
| 1007 | return ret; | 1008 | return ret; |
| 1008 | } | 1009 | } |
| 1009 | 1010 | ||
| 1010 | static TS_VERIFY_CTX *create_verify_ctx(char *data, char *digest, | 1011 | static TS_VERIFY_CTX * |
| 1011 | char *queryfile, | 1012 | create_verify_ctx(char *data, char *digest, |
| 1012 | char *ca_path, char *ca_file, | 1013 | char *queryfile, |
| 1013 | char *untrusted) | 1014 | char *ca_path, char *ca_file, |
| 1014 | { | 1015 | char *untrusted) |
| 1016 | { | ||
| 1015 | TS_VERIFY_CTX *ctx = NULL; | 1017 | TS_VERIFY_CTX *ctx = NULL; |
| 1016 | BIO *input = NULL; | 1018 | BIO *input = NULL; |
| 1017 | TS_REQ *request = NULL; | 1019 | TS_REQ *request = NULL; |
| 1018 | int ret = 0; | 1020 | int ret = 0; |
| 1019 | 1021 | ||
| 1020 | if (data != NULL || digest != NULL) | 1022 | if (data != NULL || digest != NULL) { |
| 1021 | { | 1023 | if (!(ctx = TS_VERIFY_CTX_new())) |
| 1022 | if (!(ctx = TS_VERIFY_CTX_new())) goto err; | 1024 | goto err; |
| 1023 | ctx->flags = TS_VFY_VERSION | TS_VFY_SIGNER; | 1025 | ctx->flags = TS_VFY_VERSION | TS_VFY_SIGNER; |
| 1024 | if (data != NULL) | 1026 | if (data != NULL) { |
| 1025 | { | ||
| 1026 | ctx->flags |= TS_VFY_DATA; | 1027 | ctx->flags |= TS_VFY_DATA; |
| 1027 | if (!(ctx->data = BIO_new_file(data, "rb"))) goto err; | 1028 | if (!(ctx->data = BIO_new_file(data, "rb"))) |
| 1028 | } | 1029 | goto err; |
| 1029 | else if (digest != NULL) | 1030 | } else if (digest != NULL) { |
| 1030 | { | ||
| 1031 | long imprint_len; | 1031 | long imprint_len; |
| 1032 | ctx->flags |= TS_VFY_IMPRINT; | 1032 | ctx->flags |= TS_VFY_IMPRINT; |
| 1033 | if (!(ctx->imprint = string_to_hex(digest, | 1033 | if (!(ctx->imprint = string_to_hex(digest, |
| 1034 | &imprint_len))) | 1034 | &imprint_len))) { |
| 1035 | { | ||
| 1036 | BIO_printf(bio_err, "invalid digest string\n"); | 1035 | BIO_printf(bio_err, "invalid digest string\n"); |
| 1037 | goto err; | 1036 | goto err; |
| 1038 | } | ||
| 1039 | ctx->imprint_len = imprint_len; | ||
| 1040 | } | 1037 | } |
| 1041 | 1038 | ctx->imprint_len = imprint_len; | |
| 1042 | } | ||
| 1043 | else if (queryfile != NULL) | ||
| 1044 | { | ||
| 1045 | /* The request has just to be read, decoded and converted to | ||
| 1046 | a verify context object. */ | ||
| 1047 | if (!(input = BIO_new_file(queryfile, "rb"))) goto err; | ||
| 1048 | if (!(request = d2i_TS_REQ_bio(input, NULL))) goto err; | ||
| 1049 | if (!(ctx = TS_REQ_to_TS_VERIFY_CTX(request, NULL))) goto err; | ||
| 1050 | } | 1039 | } |
| 1051 | else | 1040 | } else if (queryfile != NULL) { |
| 1041 | /* | ||
| 1042 | * The request has just to be read, decoded and converted to | ||
| 1043 | * a verify context object. | ||
| 1044 | */ | ||
| 1045 | if (!(input = BIO_new_file(queryfile, "rb"))) | ||
| 1046 | goto err; | ||
| 1047 | if (!(request = d2i_TS_REQ_bio(input, NULL))) | ||
| 1048 | goto err; | ||
| 1049 | if (!(ctx = TS_REQ_to_TS_VERIFY_CTX(request, NULL))) | ||
| 1050 | goto err; | ||
| 1051 | } else | ||
| 1052 | return NULL; | 1052 | return NULL; |
| 1053 | 1053 | ||
| 1054 | /* Add the signature verification flag and arguments. */ | 1054 | /* Add the signature verification flag and arguments. */ |
| 1055 | ctx->flags |= TS_VFY_SIGNATURE; | 1055 | ctx->flags |= TS_VFY_SIGNATURE; |
| 1056 | 1056 | ||
| 1057 | /* Initialising the X509_STORE object. */ | 1057 | /* Initialising the X509_STORE object. */ |
| 1058 | if (!(ctx->store = create_cert_store(ca_path, ca_file))) goto err; | 1058 | if (!(ctx->store = create_cert_store(ca_path, ca_file))) |
| 1059 | goto err; | ||
| 1059 | 1060 | ||
| 1060 | /* Loading untrusted certificates. */ | 1061 | /* Loading untrusted certificates. */ |
| 1061 | if (untrusted && !(ctx->certs = TS_CONF_load_certs(untrusted))) | 1062 | if (untrusted && !(ctx->certs = TS_CONF_load_certs(untrusted))) |
| 1062 | goto err; | 1063 | goto err; |
| 1063 | 1064 | ||
| 1064 | ret = 1; | 1065 | ret = 1; |
| 1065 | err: | 1066 | err: |
| 1066 | if (!ret) | 1067 | if (!ret) { |
| 1067 | { | ||
| 1068 | TS_VERIFY_CTX_free(ctx); | 1068 | TS_VERIFY_CTX_free(ctx); |
| 1069 | ctx = NULL; | 1069 | ctx = NULL; |
| 1070 | } | 1070 | } |
| 1071 | BIO_free_all(input); | 1071 | BIO_free_all(input); |
| 1072 | TS_REQ_free(request); | 1072 | TS_REQ_free(request); |
| 1073 | return ctx; | 1073 | return ctx; |
| 1074 | } | 1074 | } |
| 1075 | 1075 | ||
| 1076 | static X509_STORE *create_cert_store(char *ca_path, char *ca_file) | 1076 | static X509_STORE * |
| 1077 | { | 1077 | create_cert_store(char *ca_path, char *ca_file) |
| 1078 | { | ||
| 1078 | X509_STORE *cert_ctx = NULL; | 1079 | X509_STORE *cert_ctx = NULL; |
| 1079 | X509_LOOKUP *lookup = NULL; | 1080 | X509_LOOKUP *lookup = NULL; |
| 1080 | int i; | 1081 | int i; |
| @@ -1086,49 +1087,42 @@ static X509_STORE *create_cert_store(char *ca_path, char *ca_file) | |||
| 1086 | X509_STORE_set_verify_cb(cert_ctx, verify_cb); | 1087 | X509_STORE_set_verify_cb(cert_ctx, verify_cb); |
| 1087 | 1088 | ||
| 1088 | /* Adding a trusted certificate directory source. */ | 1089 | /* Adding a trusted certificate directory source. */ |
| 1089 | if (ca_path) | 1090 | if (ca_path) { |
| 1090 | { | ||
| 1091 | lookup = X509_STORE_add_lookup(cert_ctx, | 1091 | lookup = X509_STORE_add_lookup(cert_ctx, |
| 1092 | X509_LOOKUP_hash_dir()); | 1092 | X509_LOOKUP_hash_dir()); |
| 1093 | if (lookup == NULL) | 1093 | if (lookup == NULL) { |
| 1094 | { | ||
| 1095 | BIO_printf(bio_err, "memory allocation failure\n"); | 1094 | BIO_printf(bio_err, "memory allocation failure\n"); |
| 1096 | goto err; | 1095 | goto err; |
| 1097 | } | 1096 | } |
| 1098 | i = X509_LOOKUP_add_dir(lookup, ca_path, X509_FILETYPE_PEM); | 1097 | i = X509_LOOKUP_add_dir(lookup, ca_path, X509_FILETYPE_PEM); |
| 1099 | if (!i) | 1098 | if (!i) { |
| 1100 | { | ||
| 1101 | BIO_printf(bio_err, "Error loading directory %s\n", | 1099 | BIO_printf(bio_err, "Error loading directory %s\n", |
| 1102 | ca_path); | 1100 | ca_path); |
| 1103 | goto err; | 1101 | goto err; |
| 1104 | } | ||
| 1105 | } | 1102 | } |
| 1106 | 1103 | } | |
| 1107 | /* Adding a trusted certificate file source. */ | 1104 | /* Adding a trusted certificate file source. */ |
| 1108 | if (ca_file) | 1105 | if (ca_file) { |
| 1109 | { | ||
| 1110 | lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_file()); | 1106 | lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_file()); |
| 1111 | if (lookup == NULL) | 1107 | if (lookup == NULL) { |
| 1112 | { | ||
| 1113 | BIO_printf(bio_err, "memory allocation failure\n"); | 1108 | BIO_printf(bio_err, "memory allocation failure\n"); |
| 1114 | goto err; | 1109 | goto err; |
| 1115 | } | 1110 | } |
| 1116 | i = X509_LOOKUP_load_file(lookup, ca_file, X509_FILETYPE_PEM); | 1111 | i = X509_LOOKUP_load_file(lookup, ca_file, X509_FILETYPE_PEM); |
| 1117 | if (!i) | 1112 | if (!i) { |
| 1118 | { | ||
| 1119 | BIO_printf(bio_err, "Error loading file %s\n", ca_file); | 1113 | BIO_printf(bio_err, "Error loading file %s\n", ca_file); |
| 1120 | goto err; | 1114 | goto err; |
| 1121 | } | ||
| 1122 | } | 1115 | } |
| 1123 | 1116 | } | |
| 1124 | return cert_ctx; | 1117 | return cert_ctx; |
| 1125 | err: | 1118 | err: |
| 1126 | X509_STORE_free(cert_ctx); | 1119 | X509_STORE_free(cert_ctx); |
| 1127 | return NULL; | 1120 | return NULL; |
| 1128 | } | 1121 | } |
| 1129 | 1122 | ||
| 1130 | static int verify_cb(int ok, X509_STORE_CTX *ctx) | 1123 | static int |
| 1131 | { | 1124 | verify_cb(int ok, X509_STORE_CTX * ctx) |
| 1125 | { | ||
| 1132 | /* | 1126 | /* |
| 1133 | char buf[256]; | 1127 | char buf[256]; |
| 1134 | 1128 | ||
| @@ -1144,4 +1138,4 @@ static int verify_cb(int ok, X509_STORE_CTX *ctx) | |||
| 1144 | */ | 1138 | */ |
| 1145 | 1139 | ||
| 1146 | return ok; | 1140 | return ok; |
| 1147 | } | 1141 | } |
diff --git a/src/lib/libssl/src/apps/verify.c b/src/lib/libssl/src/apps/verify.c index ebd314d7cc..3bb746a25e 100644 --- a/src/lib/libssl/src/apps/verify.c +++ b/src/lib/libssl/src/apps/verify.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written |
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). |
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. |
| 8 | * | 8 | * |
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as |
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions |
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, |
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation |
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms |
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). |
| 15 | * | 15 | * |
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in |
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. |
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution |
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. |
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or |
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. |
| 22 | * | 22 | * |
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without |
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions |
| 25 | * are met: | 25 | * are met: |
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" |
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library |
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). |
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from |
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: |
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" |
| 40 | * | 40 | * |
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. |
| 52 | * | 52 | * |
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or |
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be |
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence |
| @@ -69,294 +69,281 @@ | |||
| 69 | #undef PROG | 69 | #undef PROG |
| 70 | #define PROG verify_main | 70 | #define PROG verify_main |
| 71 | 71 | ||
| 72 | static int cb(int ok, X509_STORE_CTX *ctx); | 72 | static int cb(int ok, X509_STORE_CTX * ctx); |
| 73 | static int check(X509_STORE *ctx, char *file, | 73 | static int |
| 74 | STACK_OF(X509) *uchain, STACK_OF(X509) *tchain, | 74 | check(X509_STORE * ctx, char *file, |
| 75 | STACK_OF(X509_CRL) *crls, ENGINE *e); | 75 | STACK_OF(X509) * uchain, STACK_OF(X509) * tchain, |
| 76 | static int v_verbose=0, vflags = 0; | 76 | STACK_OF(X509_CRL) * crls, ENGINE * e); |
| 77 | static int v_verbose = 0, vflags = 0; | ||
| 77 | 78 | ||
| 78 | int MAIN(int, char **); | 79 | int MAIN(int, char **); |
| 79 | 80 | ||
| 80 | int MAIN(int argc, char **argv) | 81 | int MAIN(int argc, char **argv) |
| 81 | { | 82 | { |
| 82 | ENGINE *e = NULL; | 83 | ENGINE *e = NULL; |
| 83 | int i,ret=1, badarg = 0; | 84 | int i, ret = 1, badarg = 0; |
| 84 | char *CApath=NULL,*CAfile=NULL; | 85 | char *CApath = NULL, *CAfile = NULL; |
| 85 | char *untfile = NULL, *trustfile = NULL, *crlfile = NULL; | 86 | char *untfile = NULL, *trustfile = NULL, *crlfile = NULL; |
| 86 | STACK_OF(X509) *untrusted = NULL, *trusted = NULL; | 87 | STACK_OF(X509) * untrusted = NULL, *trusted = NULL; |
| 87 | STACK_OF(X509_CRL) *crls = NULL; | 88 | STACK_OF(X509_CRL) * crls = NULL; |
| 88 | X509_STORE *cert_ctx=NULL; | 89 | X509_STORE *cert_ctx = NULL; |
| 89 | X509_LOOKUP *lookup=NULL; | 90 | X509_LOOKUP *lookup = NULL; |
| 90 | X509_VERIFY_PARAM *vpm = NULL; | 91 | X509_VERIFY_PARAM *vpm = NULL; |
| 91 | #ifndef OPENSSL_NO_ENGINE | 92 | #ifndef OPENSSL_NO_ENGINE |
| 92 | char *engine=NULL; | 93 | char *engine = NULL; |
| 93 | #endif | 94 | #endif |
| 94 | 95 | ||
| 95 | cert_ctx=X509_STORE_new(); | 96 | cert_ctx = X509_STORE_new(); |
| 96 | if (cert_ctx == NULL) goto end; | 97 | if (cert_ctx == NULL) |
| 97 | X509_STORE_set_verify_cb(cert_ctx,cb); | 98 | goto end; |
| 99 | X509_STORE_set_verify_cb(cert_ctx, cb); | ||
| 98 | 100 | ||
| 99 | ERR_load_crypto_strings(); | 101 | ERR_load_crypto_strings(); |
| 100 | 102 | ||
| 101 | apps_startup(); | 103 | apps_startup(); |
| 102 | 104 | ||
| 103 | if (bio_err == NULL) | 105 | if (bio_err == NULL) |
| 104 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) | 106 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 105 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); | 107 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 106 | 108 | ||
| 107 | if (!load_config(bio_err, NULL)) | 109 | if (!load_config(bio_err, NULL)) |
| 108 | goto end; | 110 | goto end; |
| 109 | 111 | ||
| 110 | argc--; | 112 | argc--; |
| 111 | argv++; | 113 | argv++; |
| 112 | for (;;) | 114 | for (;;) { |
| 113 | { | 115 | if (argc >= 1) { |
| 114 | if (argc >= 1) | 116 | if (strcmp(*argv, "-CApath") == 0) { |
| 115 | { | 117 | if (argc-- < 1) |
| 116 | if (strcmp(*argv,"-CApath") == 0) | 118 | goto end; |
| 117 | { | 119 | CApath = *(++argv); |
| 118 | if (argc-- < 1) goto end; | 120 | } else if (strcmp(*argv, "-CAfile") == 0) { |
| 119 | CApath= *(++argv); | 121 | if (argc-- < 1) |
| 120 | } | 122 | goto end; |
| 121 | else if (strcmp(*argv,"-CAfile") == 0) | 123 | CAfile = *(++argv); |
| 122 | { | 124 | } else if (args_verify(&argv, &argc, &badarg, bio_err, |
| 123 | if (argc-- < 1) goto end; | 125 | &vpm)) { |
| 124 | CAfile= *(++argv); | ||
| 125 | } | ||
| 126 | else if (args_verify(&argv, &argc, &badarg, bio_err, | ||
| 127 | &vpm)) | ||
| 128 | { | ||
| 129 | if (badarg) | 126 | if (badarg) |
| 130 | goto end; | 127 | goto end; |
| 131 | continue; | 128 | continue; |
| 132 | } | 129 | } else if (strcmp(*argv, "-untrusted") == 0) { |
| 133 | else if (strcmp(*argv,"-untrusted") == 0) | 130 | if (argc-- < 1) |
| 134 | { | 131 | goto end; |
| 135 | if (argc-- < 1) goto end; | 132 | untfile = *(++argv); |
| 136 | untfile= *(++argv); | 133 | } else if (strcmp(*argv, "-trusted") == 0) { |
| 137 | } | 134 | if (argc-- < 1) |
| 138 | else if (strcmp(*argv,"-trusted") == 0) | 135 | goto end; |
| 139 | { | 136 | trustfile = *(++argv); |
| 140 | if (argc-- < 1) goto end; | 137 | } else if (strcmp(*argv, "-CRLfile") == 0) { |
| 141 | trustfile= *(++argv); | 138 | if (argc-- < 1) |
| 142 | } | 139 | goto end; |
| 143 | else if (strcmp(*argv,"-CRLfile") == 0) | 140 | crlfile = *(++argv); |
| 144 | { | 141 | } |
| 145 | if (argc-- < 1) goto end; | ||
| 146 | crlfile= *(++argv); | ||
| 147 | } | ||
| 148 | #ifndef OPENSSL_NO_ENGINE | 142 | #ifndef OPENSSL_NO_ENGINE |
| 149 | else if (strcmp(*argv,"-engine") == 0) | 143 | else if (strcmp(*argv, "-engine") == 0) { |
| 150 | { | 144 | if (--argc < 1) |
| 151 | if (--argc < 1) goto end; | 145 | goto end; |
| 152 | engine= *(++argv); | 146 | engine = *(++argv); |
| 153 | } | 147 | } |
| 154 | #endif | 148 | #endif |
| 155 | else if (strcmp(*argv,"-help") == 0) | 149 | else if (strcmp(*argv, "-help") == 0) |
| 156 | goto end; | 150 | goto end; |
| 157 | else if (strcmp(*argv,"-verbose") == 0) | 151 | else if (strcmp(*argv, "-verbose") == 0) |
| 158 | v_verbose=1; | 152 | v_verbose = 1; |
| 159 | else if (argv[0][0] == '-') | 153 | else if (argv[0][0] == '-') |
| 160 | goto end; | 154 | goto end; |
| 161 | else | 155 | else |
| 162 | break; | 156 | break; |
| 163 | argc--; | 157 | argc--; |
| 164 | argv++; | 158 | argv++; |
| 165 | } | 159 | } else |
| 166 | else | ||
| 167 | break; | 160 | break; |
| 168 | } | 161 | } |
| 169 | 162 | ||
| 170 | #ifndef OPENSSL_NO_ENGINE | 163 | #ifndef OPENSSL_NO_ENGINE |
| 171 | e = setup_engine(bio_err, engine, 0); | 164 | e = setup_engine(bio_err, engine, 0); |
| 172 | #endif | 165 | #endif |
| 173 | 166 | ||
| 174 | if (vpm) | 167 | if (vpm) |
| 175 | X509_STORE_set1_param(cert_ctx, vpm); | 168 | X509_STORE_set1_param(cert_ctx, vpm); |
| 176 | 169 | ||
| 177 | lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file()); | 170 | lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_file()); |
| 178 | if (lookup == NULL) abort(); | 171 | if (lookup == NULL) |
| 172 | abort(); | ||
| 179 | if (CAfile) { | 173 | if (CAfile) { |
| 180 | i=X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM); | 174 | i = X509_LOOKUP_load_file(lookup, CAfile, X509_FILETYPE_PEM); |
| 181 | if(!i) { | 175 | if (!i) { |
| 182 | BIO_printf(bio_err, "Error loading file %s\n", CAfile); | 176 | BIO_printf(bio_err, "Error loading file %s\n", CAfile); |
| 183 | ERR_print_errors(bio_err); | 177 | ERR_print_errors(bio_err); |
| 184 | goto end; | 178 | goto end; |
| 185 | } | 179 | } |
| 186 | } else X509_LOOKUP_load_file(lookup,NULL,X509_FILETYPE_DEFAULT); | 180 | } else |
| 187 | 181 | X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT); | |
| 188 | lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_hash_dir()); | 182 | |
| 189 | if (lookup == NULL) abort(); | 183 | lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_hash_dir()); |
| 184 | if (lookup == NULL) | ||
| 185 | abort(); | ||
| 190 | if (CApath) { | 186 | if (CApath) { |
| 191 | i=X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM); | 187 | i = X509_LOOKUP_add_dir(lookup, CApath, X509_FILETYPE_PEM); |
| 192 | if(!i) { | 188 | if (!i) { |
| 193 | BIO_printf(bio_err, "Error loading directory %s\n", CApath); | 189 | BIO_printf(bio_err, "Error loading directory %s\n", CApath); |
| 194 | ERR_print_errors(bio_err); | 190 | ERR_print_errors(bio_err); |
| 195 | goto end; | 191 | goto end; |
| 196 | } | 192 | } |
| 197 | } else X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT); | 193 | } else |
| 194 | X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT); | ||
| 198 | 195 | ||
| 199 | ERR_clear_error(); | 196 | ERR_clear_error(); |
| 200 | 197 | ||
| 201 | if(untfile) | 198 | if (untfile) { |
| 202 | { | ||
| 203 | untrusted = load_certs(bio_err, untfile, FORMAT_PEM, | 199 | untrusted = load_certs(bio_err, untfile, FORMAT_PEM, |
| 204 | NULL, e, "untrusted certificates"); | 200 | NULL, e, "untrusted certificates"); |
| 205 | if(!untrusted) | 201 | if (!untrusted) |
| 206 | goto end; | 202 | goto end; |
| 207 | } | 203 | } |
| 208 | 204 | if (trustfile) { | |
| 209 | if(trustfile) | ||
| 210 | { | ||
| 211 | trusted = load_certs(bio_err, trustfile, FORMAT_PEM, | 205 | trusted = load_certs(bio_err, trustfile, FORMAT_PEM, |
| 212 | NULL, e, "trusted certificates"); | 206 | NULL, e, "trusted certificates"); |
| 213 | if(!trusted) | 207 | if (!trusted) |
| 214 | goto end; | 208 | goto end; |
| 215 | } | 209 | } |
| 216 | 210 | if (crlfile) { | |
| 217 | if(crlfile) | ||
| 218 | { | ||
| 219 | crls = load_crls(bio_err, crlfile, FORMAT_PEM, | 211 | crls = load_crls(bio_err, crlfile, FORMAT_PEM, |
| 220 | NULL, e, "other CRLs"); | 212 | NULL, e, "other CRLs"); |
| 221 | if(!crls) | 213 | if (!crls) |
| 222 | goto end; | 214 | goto end; |
| 223 | } | 215 | } |
| 224 | |||
| 225 | ret = 0; | 216 | ret = 0; |
| 226 | if (argc < 1) | 217 | if (argc < 1) { |
| 227 | { | ||
| 228 | if (1 != check(cert_ctx, NULL, untrusted, trusted, crls, e)) | 218 | if (1 != check(cert_ctx, NULL, untrusted, trusted, crls, e)) |
| 229 | ret = -1; | 219 | ret = -1; |
| 230 | } | 220 | } else { |
| 231 | else | 221 | for (i = 0; i < argc; i++) |
| 232 | { | 222 | if (1 != check(cert_ctx, argv[i], untrusted, trusted, crls, e)) |
| 233 | for (i=0; i<argc; i++) | ||
| 234 | if (1 != check(cert_ctx,argv[i], untrusted, trusted, crls, e)) | ||
| 235 | ret = -1; | 223 | ret = -1; |
| 236 | } | 224 | } |
| 237 | 225 | ||
| 238 | end: | 226 | end: |
| 239 | if (ret == 1) { | 227 | if (ret == 1) { |
| 240 | BIO_printf(bio_err,"usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check]"); | 228 | BIO_printf(bio_err, "usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check]"); |
| 241 | BIO_printf(bio_err," [-attime timestamp]"); | 229 | BIO_printf(bio_err, " [-attime timestamp]"); |
| 242 | #ifndef OPENSSL_NO_ENGINE | 230 | #ifndef OPENSSL_NO_ENGINE |
| 243 | BIO_printf(bio_err," [-engine e]"); | 231 | BIO_printf(bio_err, " [-engine e]"); |
| 244 | #endif | 232 | #endif |
| 245 | BIO_printf(bio_err," cert1 cert2 ...\n"); | 233 | BIO_printf(bio_err, " cert1 cert2 ...\n"); |
| 246 | 234 | ||
| 247 | BIO_printf(bio_err,"recognized usages:\n"); | 235 | BIO_printf(bio_err, "recognized usages:\n"); |
| 248 | for(i = 0; i < X509_PURPOSE_get_count(); i++) | 236 | for (i = 0; i < X509_PURPOSE_get_count(); i++) { |
| 249 | { | ||
| 250 | X509_PURPOSE *ptmp; | 237 | X509_PURPOSE *ptmp; |
| 251 | ptmp = X509_PURPOSE_get0(i); | 238 | ptmp = X509_PURPOSE_get0(i); |
| 252 | BIO_printf(bio_err, "\t%-10s\t%s\n", | 239 | BIO_printf(bio_err, "\t%-10s\t%s\n", |
| 253 | X509_PURPOSE_get0_sname(ptmp), | 240 | X509_PURPOSE_get0_sname(ptmp), |
| 254 | X509_PURPOSE_get0_name(ptmp)); | 241 | X509_PURPOSE_get0_name(ptmp)); |
| 255 | } | 242 | } |
| 256 | } | 243 | } |
| 257 | if (vpm) X509_VERIFY_PARAM_free(vpm); | 244 | if (vpm) |
| 258 | if (cert_ctx != NULL) X509_STORE_free(cert_ctx); | 245 | X509_VERIFY_PARAM_free(vpm); |
| 246 | if (cert_ctx != NULL) | ||
| 247 | X509_STORE_free(cert_ctx); | ||
| 259 | sk_X509_pop_free(untrusted, X509_free); | 248 | sk_X509_pop_free(untrusted, X509_free); |
| 260 | sk_X509_pop_free(trusted, X509_free); | 249 | sk_X509_pop_free(trusted, X509_free); |
| 261 | sk_X509_CRL_pop_free(crls, X509_CRL_free); | 250 | sk_X509_CRL_pop_free(crls, X509_CRL_free); |
| 262 | apps_shutdown(); | 251 | apps_shutdown(); |
| 263 | return(ret < 0 ? 2 : ret); | 252 | return (ret < 0 ? 2 : ret); |
| 264 | } | 253 | } |
| 265 | 254 | ||
| 266 | static int check(X509_STORE *ctx, char *file, | 255 | static int |
| 267 | STACK_OF(X509) *uchain, STACK_OF(X509) *tchain, | 256 | check(X509_STORE * ctx, char *file, |
| 268 | STACK_OF(X509_CRL) *crls, ENGINE *e) | 257 | STACK_OF(X509) * uchain, STACK_OF(X509) * tchain, |
| 269 | { | 258 | STACK_OF(X509_CRL) * crls, ENGINE * e) |
| 270 | X509 *x=NULL; | 259 | { |
| 271 | int i=0,ret=0; | 260 | X509 *x = NULL; |
| 261 | int i = 0, ret = 0; | ||
| 272 | X509_STORE_CTX *csc; | 262 | X509_STORE_CTX *csc; |
| 273 | 263 | ||
| 274 | x = load_cert(bio_err, file, FORMAT_PEM, NULL, e, "certificate file"); | 264 | x = load_cert(bio_err, file, FORMAT_PEM, NULL, e, "certificate file"); |
| 275 | if (x == NULL) | 265 | if (x == NULL) |
| 276 | goto end; | 266 | goto end; |
| 277 | fprintf(stdout,"%s: ",(file == NULL)?"stdin":file); | 267 | fprintf(stdout, "%s: ", (file == NULL) ? "stdin" : file); |
| 278 | 268 | ||
| 279 | csc = X509_STORE_CTX_new(); | 269 | csc = X509_STORE_CTX_new(); |
| 280 | if (csc == NULL) | 270 | if (csc == NULL) { |
| 281 | { | ||
| 282 | ERR_print_errors(bio_err); | 271 | ERR_print_errors(bio_err); |
| 283 | goto end; | 272 | goto end; |
| 284 | } | 273 | } |
| 285 | X509_STORE_set_flags(ctx, vflags); | 274 | X509_STORE_set_flags(ctx, vflags); |
| 286 | if(!X509_STORE_CTX_init(csc,ctx,x,uchain)) | 275 | if (!X509_STORE_CTX_init(csc, ctx, x, uchain)) { |
| 287 | { | ||
| 288 | ERR_print_errors(bio_err); | 276 | ERR_print_errors(bio_err); |
| 289 | goto end; | 277 | goto end; |
| 290 | } | 278 | } |
| 291 | if(tchain) X509_STORE_CTX_trusted_stack(csc, tchain); | 279 | if (tchain) |
| 280 | X509_STORE_CTX_trusted_stack(csc, tchain); | ||
| 292 | if (crls) | 281 | if (crls) |
| 293 | X509_STORE_CTX_set0_crls(csc, crls); | 282 | X509_STORE_CTX_set0_crls(csc, crls); |
| 294 | i=X509_verify_cert(csc); | 283 | i = X509_verify_cert(csc); |
| 295 | X509_STORE_CTX_free(csc); | 284 | X509_STORE_CTX_free(csc); |
| 296 | 285 | ||
| 297 | ret=0; | 286 | ret = 0; |
| 298 | end: | 287 | end: |
| 299 | if (i > 0) | 288 | if (i > 0) { |
| 300 | { | 289 | fprintf(stdout, "OK\n"); |
| 301 | fprintf(stdout,"OK\n"); | 290 | ret = 1; |
| 302 | ret=1; | 291 | } else |
| 303 | } | ||
| 304 | else | ||
| 305 | ERR_print_errors(bio_err); | 292 | ERR_print_errors(bio_err); |
| 306 | if (x != NULL) X509_free(x); | 293 | if (x != NULL) |
| 294 | X509_free(x); | ||
| 307 | 295 | ||
| 308 | return(ret); | 296 | return (ret); |
| 309 | } | 297 | } |
| 310 | 298 | ||
| 311 | static int cb(int ok, X509_STORE_CTX *ctx) | 299 | static int |
| 312 | { | 300 | cb(int ok, X509_STORE_CTX * ctx) |
| 301 | { | ||
| 313 | int cert_error = X509_STORE_CTX_get_error(ctx); | 302 | int cert_error = X509_STORE_CTX_get_error(ctx); |
| 314 | X509 *current_cert = X509_STORE_CTX_get_current_cert(ctx); | 303 | X509 *current_cert = X509_STORE_CTX_get_current_cert(ctx); |
| 315 | 304 | ||
| 316 | if (!ok) | 305 | if (!ok) { |
| 317 | { | 306 | if (current_cert) { |
| 318 | if (current_cert) | ||
| 319 | { | ||
| 320 | X509_NAME_print_ex_fp(stdout, | 307 | X509_NAME_print_ex_fp(stdout, |
| 321 | X509_get_subject_name(current_cert), | 308 | X509_get_subject_name(current_cert), |
| 322 | 0, XN_FLAG_ONELINE); | 309 | 0, XN_FLAG_ONELINE); |
| 323 | printf("\n"); | 310 | printf("\n"); |
| 324 | } | 311 | } |
| 325 | printf("%serror %d at %d depth lookup:%s\n", | 312 | printf("%serror %d at %d depth lookup:%s\n", |
| 326 | X509_STORE_CTX_get0_parent_ctx(ctx) ? "[CRL path]" : "", | 313 | X509_STORE_CTX_get0_parent_ctx(ctx) ? "[CRL path]" : "", |
| 327 | cert_error, | 314 | cert_error, |
| 328 | X509_STORE_CTX_get_error_depth(ctx), | 315 | X509_STORE_CTX_get_error_depth(ctx), |
| 329 | X509_verify_cert_error_string(cert_error)); | 316 | X509_verify_cert_error_string(cert_error)); |
| 330 | switch(cert_error) | 317 | switch (cert_error) { |
| 331 | { | 318 | case X509_V_ERR_NO_EXPLICIT_POLICY: |
| 332 | case X509_V_ERR_NO_EXPLICIT_POLICY: | 319 | policies_print(NULL, ctx); |
| 333 | policies_print(NULL, ctx); | 320 | case X509_V_ERR_CERT_HAS_EXPIRED: |
| 334 | case X509_V_ERR_CERT_HAS_EXPIRED: | 321 | |
| 335 | 322 | /* | |
| 336 | /* since we are just checking the certificates, it is | 323 | * since we are just checking the certificates, it is |
| 337 | * ok if they are self signed. But we should still warn | 324 | * ok if they are self signed. But we should still |
| 338 | * the user. | 325 | * warn the user. |
| 339 | */ | 326 | */ |
| 340 | 327 | ||
| 341 | case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: | 328 | case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: |
| 342 | /* Continue after extension errors too */ | 329 | /* Continue after extension errors too */ |
| 343 | case X509_V_ERR_INVALID_CA: | 330 | case X509_V_ERR_INVALID_CA: |
| 344 | case X509_V_ERR_INVALID_NON_CA: | 331 | case X509_V_ERR_INVALID_NON_CA: |
| 345 | case X509_V_ERR_PATH_LENGTH_EXCEEDED: | 332 | case X509_V_ERR_PATH_LENGTH_EXCEEDED: |
| 346 | case X509_V_ERR_INVALID_PURPOSE: | 333 | case X509_V_ERR_INVALID_PURPOSE: |
| 347 | case X509_V_ERR_CRL_HAS_EXPIRED: | 334 | case X509_V_ERR_CRL_HAS_EXPIRED: |
| 348 | case X509_V_ERR_CRL_NOT_YET_VALID: | 335 | case X509_V_ERR_CRL_NOT_YET_VALID: |
| 349 | case X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION: | 336 | case X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION: |
| 350 | ok = 1; | 337 | ok = 1; |
| 351 | 338 | ||
| 352 | } | 339 | } |
| 353 | 340 | ||
| 354 | return ok; | 341 | return ok; |
| 355 | 342 | ||
| 356 | } | 343 | } |
| 357 | if (cert_error == X509_V_OK && ok == 2) | 344 | if (cert_error == X509_V_OK && ok == 2) |
| 358 | policies_print(NULL, ctx); | 345 | policies_print(NULL, ctx); |
| 359 | if (!v_verbose) | 346 | if (!v_verbose) |
| 360 | ERR_clear_error(); | 347 | ERR_clear_error(); |
| 361 | return(ok); | 348 | return (ok); |
| 362 | } | 349 | } |
diff --git a/src/lib/libssl/src/apps/version.c b/src/lib/libssl/src/apps/version.c index 811ac26fc1..42920fc9f1 100644 --- a/src/lib/libssl/src/apps/version.c +++ b/src/lib/libssl/src/apps/version.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written |
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). |
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. |
| 8 | * | 8 | * |
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as |
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions |
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, |
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation |
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms |
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). |
| 15 | * | 15 | * |
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in |
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. |
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution |
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. |
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or |
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. |
| 22 | * | 22 | * |
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without |
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions |
| 25 | * are met: | 25 | * are met: |
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" |
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library |
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). |
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from |
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: |
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" |
| 40 | * | 40 | * |
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. |
| 52 | * | 52 | * |
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or |
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be |
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence |
| @@ -63,7 +63,7 @@ | |||
| 63 | * are met: | 63 | * are met: |
| 64 | * | 64 | * |
| 65 | * 1. Redistributions of source code must retain the above copyright | 65 | * 1. Redistributions of source code must retain the above copyright |
| 66 | * notice, this list of conditions and the following disclaimer. | 66 | * notice, this list of conditions and the following disclaimer. |
| 67 | * | 67 | * |
| 68 | * 2. Redistributions in binary form must reproduce the above copyright | 68 | * 2. Redistributions in binary form must reproduce the above copyright |
| 69 | * notice, this list of conditions and the following disclaimer in | 69 | * notice, this list of conditions and the following disclaimer in |
| @@ -117,19 +117,19 @@ | |||
| 117 | #include <openssl/crypto.h> | 117 | #include <openssl/crypto.h> |
| 118 | #include <openssl/bn.h> | 118 | #include <openssl/bn.h> |
| 119 | #ifndef OPENSSL_NO_MD2 | 119 | #ifndef OPENSSL_NO_MD2 |
| 120 | # include <openssl/md2.h> | 120 | #include <openssl/md2.h> |
| 121 | #endif | 121 | #endif |
| 122 | #ifndef OPENSSL_NO_RC4 | 122 | #ifndef OPENSSL_NO_RC4 |
| 123 | # include <openssl/rc4.h> | 123 | #include <openssl/rc4.h> |
| 124 | #endif | 124 | #endif |
| 125 | #ifndef OPENSSL_NO_DES | 125 | #ifndef OPENSSL_NO_DES |
| 126 | # include <openssl/des.h> | 126 | #include <openssl/des.h> |
| 127 | #endif | 127 | #endif |
| 128 | #ifndef OPENSSL_NO_IDEA | 128 | #ifndef OPENSSL_NO_IDEA |
| 129 | # include <openssl/idea.h> | 129 | #include <openssl/idea.h> |
| 130 | #endif | 130 | #endif |
| 131 | #ifndef OPENSSL_NO_BF | 131 | #ifndef OPENSSL_NO_BF |
| 132 | # include <openssl/blowfish.h> | 132 | #include <openssl/blowfish.h> |
| 133 | #endif | 133 | #endif |
| 134 | 134 | ||
| 135 | #undef PROG | 135 | #undef PROG |
| @@ -137,81 +137,81 @@ | |||
| 137 | 137 | ||
| 138 | int MAIN(int, char **); | 138 | int MAIN(int, char **); |
| 139 | 139 | ||
| 140 | int MAIN(int argc, char **argv) | 140 | int |
| 141 | { | 141 | MAIN(int argc, char **argv) |
| 142 | int i,ret=0; | 142 | { |
| 143 | int cflags=0,version=0,date=0,options=0,platform=0,dir=0; | 143 | int i, ret = 0; |
| 144 | int cflags = 0, version = 0, date = 0, options = 0, platform = 0, | ||
| 145 | dir = 0; | ||
| 144 | 146 | ||
| 145 | apps_startup(); | 147 | apps_startup(); |
| 146 | 148 | ||
| 147 | if (bio_err == NULL) | 149 | if (bio_err == NULL) |
| 148 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) | 150 | if ((bio_err = BIO_new(BIO_s_file())) != NULL) |
| 149 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); | 151 | BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT); |
| 150 | 152 | ||
| 151 | if (argc == 1) version=1; | 153 | if (argc == 1) |
| 152 | for (i=1; i<argc; i++) | 154 | version = 1; |
| 153 | { | 155 | for (i = 1; i < argc; i++) { |
| 154 | if (strcmp(argv[i],"-v") == 0) | 156 | if (strcmp(argv[i], "-v") == 0) |
| 155 | version=1; | 157 | version = 1; |
| 156 | else if (strcmp(argv[i],"-b") == 0) | 158 | else if (strcmp(argv[i], "-b") == 0) |
| 157 | date=1; | 159 | date = 1; |
| 158 | else if (strcmp(argv[i],"-f") == 0) | 160 | else if (strcmp(argv[i], "-f") == 0) |
| 159 | cflags=1; | 161 | cflags = 1; |
| 160 | else if (strcmp(argv[i],"-o") == 0) | 162 | else if (strcmp(argv[i], "-o") == 0) |
| 161 | options=1; | 163 | options = 1; |
| 162 | else if (strcmp(argv[i],"-p") == 0) | 164 | else if (strcmp(argv[i], "-p") == 0) |
| 163 | platform=1; | 165 | platform = 1; |
| 164 | else if (strcmp(argv[i],"-d") == 0) | 166 | else if (strcmp(argv[i], "-d") == 0) |
| 165 | dir=1; | 167 | dir = 1; |
| 166 | else if (strcmp(argv[i],"-a") == 0) | 168 | else if (strcmp(argv[i], "-a") == 0) |
| 167 | date=version=cflags=options=platform=dir=1; | 169 | date = version = cflags = options = platform = dir = 1; |
| 168 | else | 170 | else { |
| 169 | { | 171 | BIO_printf(bio_err, "usage:version -[avbofpd]\n"); |
| 170 | BIO_printf(bio_err,"usage:version -[avbofpd]\n"); | 172 | ret = 1; |
| 171 | ret=1; | ||
| 172 | goto end; | 173 | goto end; |
| 173 | } | ||
| 174 | } | 174 | } |
| 175 | } | ||
| 175 | 176 | ||
| 176 | if (version) | 177 | if (version) { |
| 177 | { | 178 | if (SSLeay() == SSLEAY_VERSION_NUMBER) { |
| 178 | if (SSLeay() == SSLEAY_VERSION_NUMBER) | 179 | printf("%s\n", SSLeay_version(SSLEAY_VERSION)); |
| 179 | { | 180 | } else { |
| 180 | printf("%s\n",SSLeay_version(SSLEAY_VERSION)); | ||
| 181 | } | ||
| 182 | else | ||
| 183 | { | ||
| 184 | printf("%s (Library: %s)\n", | 181 | printf("%s (Library: %s)\n", |
| 185 | OPENSSL_VERSION_TEXT, | 182 | OPENSSL_VERSION_TEXT, |
| 186 | SSLeay_version(SSLEAY_VERSION)); | 183 | SSLeay_version(SSLEAY_VERSION)); |
| 187 | } | ||
| 188 | } | 184 | } |
| 189 | if (date) printf("%s\n",SSLeay_version(SSLEAY_BUILT_ON)); | 185 | } |
| 190 | if (platform) printf("%s\n",SSLeay_version(SSLEAY_PLATFORM)); | 186 | if (date) |
| 191 | if (options) | 187 | printf("%s\n", SSLeay_version(SSLEAY_BUILT_ON)); |
| 192 | { | 188 | if (platform) |
| 189 | printf("%s\n", SSLeay_version(SSLEAY_PLATFORM)); | ||
| 190 | if (options) { | ||
| 193 | printf("options: "); | 191 | printf("options: "); |
| 194 | printf("%s ",BN_options()); | 192 | printf("%s ", BN_options()); |
| 195 | #ifndef OPENSSL_NO_MD2 | 193 | #ifndef OPENSSL_NO_MD2 |
| 196 | printf("%s ",MD2_options()); | 194 | printf("%s ", MD2_options()); |
| 197 | #endif | 195 | #endif |
| 198 | #ifndef OPENSSL_NO_RC4 | 196 | #ifndef OPENSSL_NO_RC4 |
| 199 | printf("%s ",RC4_options()); | 197 | printf("%s ", RC4_options()); |
| 200 | #endif | 198 | #endif |
| 201 | #ifndef OPENSSL_NO_DES | 199 | #ifndef OPENSSL_NO_DES |
| 202 | printf("%s ",DES_options()); | 200 | printf("%s ", DES_options()); |
| 203 | #endif | 201 | #endif |
| 204 | #ifndef OPENSSL_NO_IDEA | 202 | #ifndef OPENSSL_NO_IDEA |
| 205 | printf("%s ",idea_options()); | 203 | printf("%s ", idea_options()); |
| 206 | #endif | 204 | #endif |
| 207 | #ifndef OPENSSL_NO_BF | 205 | #ifndef OPENSSL_NO_BF |
| 208 | printf("%s ",BF_options()); | 206 | printf("%s ", BF_options()); |
| 209 | #endif | 207 | #endif |
| 210 | printf("\n"); | 208 | printf("\n"); |
| 211 | } | 209 | } |
| 212 | if (cflags) printf("%s\n",SSLeay_version(SSLEAY_CFLAGS)); | 210 | if (cflags) |
| 213 | if (dir) printf("%s\n",SSLeay_version(SSLEAY_DIR)); | 211 | printf("%s\n", SSLeay_version(SSLEAY_CFLAGS)); |
| 212 | if (dir) | ||
| 213 | printf("%s\n", SSLeay_version(SSLEAY_DIR)); | ||
| 214 | end: | 214 | end: |
| 215 | apps_shutdown(); | 215 | apps_shutdown(); |
| 216 | return(ret); | 216 | return (ret); |
| 217 | } | 217 | } |
diff --git a/src/lib/libssl/src/apps/x509.c b/src/lib/libssl/src/apps/x509.c index 0026793a43..cdeff65109 100644 --- a/src/lib/libssl/src/apps/x509.c +++ b/src/lib/libssl/src/apps/x509.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written |
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). |
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. |
| 8 | * | 8 | * |
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as |
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions |
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, |
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation |
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms |
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). |
| 15 | * | 15 | * |
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in |
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. |
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution |
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. |
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or |
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. |
| 22 | * | 22 | * |
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without |
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions |
| 25 | * are met: | 25 | * are met: |
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" |
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library |
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). |
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from |
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: |
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" |
| 40 | * | 40 | * |
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. |
| 52 | * | 52 | * |
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or |
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be |
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence |
| @@ -87,411 +87,384 @@ | |||
| 87 | #define POSTFIX ".srl" | 87 | #define POSTFIX ".srl" |
| 88 | #define DEF_DAYS 30 | 88 | #define DEF_DAYS 30 |
| 89 | 89 | ||
| 90 | static const char *x509_usage[]={ | 90 | static const char *x509_usage[] = { |
| 91 | "usage: x509 args\n", | 91 | "usage: x509 args\n", |
| 92 | " -inform arg - input format - default PEM (one of DER, NET or PEM)\n", | 92 | " -inform arg - input format - default PEM (one of DER, NET or PEM)\n", |
| 93 | " -outform arg - output format - default PEM (one of DER, NET or PEM)\n", | 93 | " -outform arg - output format - default PEM (one of DER, NET or PEM)\n", |
| 94 | " -keyform arg - private key format - default PEM\n", | 94 | " -keyform arg - private key format - default PEM\n", |
| 95 | " -CAform arg - CA format - default PEM\n", | 95 | " -CAform arg - CA format - default PEM\n", |
| 96 | " -CAkeyform arg - CA key format - default PEM\n", | 96 | " -CAkeyform arg - CA key format - default PEM\n", |
| 97 | " -in arg - input file - default stdin\n", | 97 | " -in arg - input file - default stdin\n", |
| 98 | " -out arg - output file - default stdout\n", | 98 | " -out arg - output file - default stdout\n", |
| 99 | " -passin arg - private key password source\n", | 99 | " -passin arg - private key password source\n", |
| 100 | " -serial - print serial number value\n", | 100 | " -serial - print serial number value\n", |
| 101 | " -subject_hash - print subject hash value\n", | 101 | " -subject_hash - print subject hash value\n", |
| 102 | #ifndef OPENSSL_NO_MD5 | 102 | #ifndef OPENSSL_NO_MD5 |
| 103 | " -subject_hash_old - print old-style (MD5) subject hash value\n", | 103 | " -subject_hash_old - print old-style (MD5) subject hash value\n", |
| 104 | #endif | 104 | #endif |
| 105 | " -issuer_hash - print issuer hash value\n", | 105 | " -issuer_hash - print issuer hash value\n", |
| 106 | #ifndef OPENSSL_NO_MD5 | 106 | #ifndef OPENSSL_NO_MD5 |
| 107 | " -issuer_hash_old - print old-style (MD5) issuer hash value\n", | 107 | " -issuer_hash_old - print old-style (MD5) issuer hash value\n", |
| 108 | #endif | 108 | #endif |
| 109 | " -hash - synonym for -subject_hash\n", | 109 | " -hash - synonym for -subject_hash\n", |
| 110 | " -subject - print subject DN\n", | 110 | " -subject - print subject DN\n", |
| 111 | " -issuer - print issuer DN\n", | 111 | " -issuer - print issuer DN\n", |
| 112 | " -email - print email address(es)\n", | 112 | " -email - print email address(es)\n", |
| 113 | " -startdate - notBefore field\n", | 113 | " -startdate - notBefore field\n", |
| 114 | " -enddate - notAfter field\n", | 114 | " -enddate - notAfter field\n", |
| 115 | " -purpose - print out certificate purposes\n", | 115 | " -purpose - print out certificate purposes\n", |
| 116 | " -dates - both Before and After dates\n", | 116 | " -dates - both Before and After dates\n", |
| 117 | " -modulus - print the RSA key modulus\n", | 117 | " -modulus - print the RSA key modulus\n", |
| 118 | " -pubkey - output the public key\n", | 118 | " -pubkey - output the public key\n", |
| 119 | " -fingerprint - print the certificate fingerprint\n", | 119 | " -fingerprint - print the certificate fingerprint\n", |
| 120 | " -alias - output certificate alias\n", | 120 | " -alias - output certificate alias\n", |
| 121 | " -noout - no certificate output\n", | 121 | " -noout - no certificate output\n", |
| 122 | " -ocspid - print OCSP hash values for the subject name and public key\n", | 122 | " -ocspid - print OCSP hash values for the subject name and public key\n", |
| 123 | " -ocsp_uri - print OCSP Responder URL(s)\n", | 123 | " -ocsp_uri - print OCSP Responder URL(s)\n", |
| 124 | " -trustout - output a \"trusted\" certificate\n", | 124 | " -trustout - output a \"trusted\" certificate\n", |
| 125 | " -clrtrust - clear all trusted purposes\n", | 125 | " -clrtrust - clear all trusted purposes\n", |
| 126 | " -clrreject - clear all rejected purposes\n", | 126 | " -clrreject - clear all rejected purposes\n", |
| 127 | " -addtrust arg - trust certificate for a given purpose\n", | 127 | " -addtrust arg - trust certificate for a given purpose\n", |
| 128 | " -addreject arg - reject certificate for a given purpose\n", | 128 | " -addreject arg - reject certificate for a given purpose\n", |
| 129 | " -setalias arg - set certificate alias\n", | 129 | " -setalias arg - set certificate alias\n", |
| 130 | " -days arg - How long till expiry of a signed certificate - def 30 days\n", | 130 | " -days arg - How long till expiry of a signed certificate - def 30 days\n", |
| 131 | " -checkend arg - check whether the cert expires in the next arg seconds\n", | 131 | " -checkend arg - check whether the cert expires in the next arg seconds\n", |
| 132 | " exit 1 if so, 0 if not\n", | 132 | " exit 1 if so, 0 if not\n", |
| 133 | " -signkey arg - self sign cert with arg\n", | 133 | " -signkey arg - self sign cert with arg\n", |
| 134 | " -x509toreq - output a certification request object\n", | 134 | " -x509toreq - output a certification request object\n", |
| 135 | " -req - input is a certificate request, sign and output.\n", | 135 | " -req - input is a certificate request, sign and output.\n", |
| 136 | " -CA arg - set the CA certificate, must be PEM format.\n", | 136 | " -CA arg - set the CA certificate, must be PEM format.\n", |
| 137 | " -CAkey arg - set the CA key, must be PEM format\n", | 137 | " -CAkey arg - set the CA key, must be PEM format\n", |
| 138 | " missing, it is assumed to be in the CA file.\n", | 138 | " missing, it is assumed to be in the CA file.\n", |
| 139 | " -CAcreateserial - create serial number file if it does not exist\n", | 139 | " -CAcreateserial - create serial number file if it does not exist\n", |
| 140 | " -CAserial arg - serial file\n", | 140 | " -CAserial arg - serial file\n", |
| 141 | " -set_serial - serial number to use\n", | 141 | " -set_serial - serial number to use\n", |
| 142 | " -text - print the certificate in text form\n", | 142 | " -text - print the certificate in text form\n", |
| 143 | " -C - print out C code forms\n", | 143 | " -C - print out C code forms\n", |
| 144 | " -md2/-md5/-sha1/-mdc2 - digest to use\n", | 144 | " -md2/-md5/-sha1/-mdc2 - digest to use\n", |
| 145 | " -extfile - configuration file with X509V3 extensions to add\n", | 145 | " -extfile - configuration file with X509V3 extensions to add\n", |
| 146 | " -extensions - section from config file with X509V3 extensions to add\n", | 146 | " -extensions - section from config file with X509V3 extensions to add\n", |
| 147 | " -clrext - delete extensions before signing and input certificate\n", | 147 | " -clrext - delete extensions before signing and input certificate\n", |
| 148 | " -nameopt arg - various certificate name options\n", | 148 | " -nameopt arg - various certificate name options\n", |
| 149 | #ifndef OPENSSL_NO_ENGINE | 149 | #ifndef OPENSSL_NO_ENGINE |
| 150 | " -engine e - use engine e, possibly a hardware device.\n", | 150 | " -engine e - use engine e, possibly a hardware device.\n", |
| 151 | #endif | 151 | #endif |
| 152 | " -certopt arg - various certificate text options\n", | 152 | " -certopt arg - various certificate text options\n", |
| 153 | NULL | 153 | NULL |
| 154 | }; | 154 | }; |
| 155 | 155 | ||
| 156 | static int callb(int ok, X509_STORE_CTX *ctx); | 156 | static int callb(int ok, X509_STORE_CTX * ctx); |
| 157 | static int sign (X509 *x, EVP_PKEY *pkey,int days,int clrext, const EVP_MD *digest, | 157 | static int |
| 158 | CONF *conf, char *section); | 158 | sign(X509 * x, EVP_PKEY * pkey, int days, int clrext, const EVP_MD * digest, |
| 159 | static int x509_certify (X509_STORE *ctx,char *CAfile,const EVP_MD *digest, | 159 | CONF * conf, char *section); |
| 160 | X509 *x,X509 *xca,EVP_PKEY *pkey, | 160 | static int |
| 161 | STACK_OF(OPENSSL_STRING) *sigopts, | 161 | x509_certify(X509_STORE * ctx, char *CAfile, const EVP_MD * digest, |
| 162 | char *serial, int create ,int days, int clrext, | 162 | X509 * x, X509 * xca, EVP_PKEY * pkey, |
| 163 | CONF *conf, char *section, ASN1_INTEGER *sno); | 163 | STACK_OF(OPENSSL_STRING) * sigopts, |
| 164 | static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt); | 164 | char *serial, int create, int days, int clrext, |
| 165 | static int reqfile=0; | 165 | CONF * conf, char *section, ASN1_INTEGER * sno); |
| 166 | 166 | static int purpose_print(BIO * bio, X509 * cert, X509_PURPOSE * pt); | |
| 167 | int MAIN(int, char **); | 167 | static int reqfile = 0; |
| 168 | 168 | ||
| 169 | int MAIN(int argc, char **argv) | 169 | int MAIN(int, char **); |
| 170 | { | 170 | |
| 171 | int MAIN(int argc, char **argv) | ||
| 172 | { | ||
| 171 | ENGINE *e = NULL; | 173 | ENGINE *e = NULL; |
| 172 | int ret=1; | 174 | int ret = 1; |
| 173 | X509_REQ *req=NULL; | 175 | X509_REQ *req = NULL; |
| 174 | X509 *x=NULL,*xca=NULL; | 176 | X509 *x = NULL, *xca = NULL; |
| 175 | ASN1_OBJECT *objtmp; | 177 | ASN1_OBJECT *objtmp; |
| 176 | STACK_OF(OPENSSL_STRING) *sigopts = NULL; | 178 | STACK_OF(OPENSSL_STRING) * sigopts = NULL; |
| 177 | EVP_PKEY *Upkey=NULL,*CApkey=NULL; | 179 | EVP_PKEY *Upkey = NULL, *CApkey = NULL; |
| 178 | ASN1_INTEGER *sno = NULL; | 180 | ASN1_INTEGER *sno = NULL; |
| 179 | int i,num,badops=0; | 181 | int i, num, badops = 0; |
| 180 | BIO *out=NULL; | 182 | BIO *out = NULL; |
| 181 | BIO *STDout=NULL; | 183 | BIO *STDout = NULL; |
| 182 | STACK_OF(ASN1_OBJECT) *trust = NULL, *reject = NULL; | 184 | STACK_OF(ASN1_OBJECT) * trust = NULL, *reject = NULL; |
| 183 | int informat,outformat,keyformat,CAformat,CAkeyformat; | 185 | int informat, outformat, keyformat, CAformat, CAkeyformat; |
| 184 | char *infile=NULL,*outfile=NULL,*keyfile=NULL,*CAfile=NULL; | 186 | char *infile = NULL, *outfile = NULL, *keyfile = NULL, *CAfile = NULL; |
| 185 | char *CAkeyfile=NULL,*CAserial=NULL; | 187 | char *CAkeyfile = NULL, *CAserial = NULL; |
| 186 | char *alias=NULL; | 188 | char *alias = NULL; |
| 187 | int text=0,serial=0,subject=0,issuer=0,startdate=0,enddate=0; | 189 | int text = 0, serial = 0, subject = 0, issuer = 0, startdate = 0, |
| 188 | int next_serial=0; | 190 | enddate = 0; |
| 189 | int subject_hash=0,issuer_hash=0,ocspid=0; | 191 | int next_serial = 0; |
| 192 | int subject_hash = 0, issuer_hash = 0, ocspid = 0; | ||
| 190 | #ifndef OPENSSL_NO_MD5 | 193 | #ifndef OPENSSL_NO_MD5 |
| 191 | int subject_hash_old=0,issuer_hash_old=0; | 194 | int subject_hash_old = 0, issuer_hash_old = 0; |
| 192 | #endif | 195 | #endif |
| 193 | int noout=0,sign_flag=0,CA_flag=0,CA_createserial=0,email=0; | 196 | int noout = 0, sign_flag = 0, CA_flag = 0, CA_createserial = 0, |
| 194 | int ocsp_uri=0; | 197 | email = 0; |
| 195 | int trustout=0,clrtrust=0,clrreject=0,aliasout=0,clrext=0; | 198 | int ocsp_uri = 0; |
| 196 | int C=0; | 199 | int trustout = 0, clrtrust = 0, clrreject = 0, aliasout = 0, clrext = 0; |
| 197 | int x509req=0,days=DEF_DAYS,modulus=0,pubkey=0; | 200 | int C = 0; |
| 201 | int x509req = 0, days = DEF_DAYS, modulus = 0, pubkey = 0; | ||
| 198 | int pprint = 0; | 202 | int pprint = 0; |
| 199 | const char **pp; | 203 | const char **pp; |
| 200 | X509_STORE *ctx=NULL; | 204 | X509_STORE *ctx = NULL; |
| 201 | X509_REQ *rq=NULL; | 205 | X509_REQ *rq = NULL; |
| 202 | int fingerprint=0; | 206 | int fingerprint = 0; |
| 203 | char buf[256]; | 207 | char buf[256]; |
| 204 | const EVP_MD *md_alg,*digest=NULL; | 208 | const EVP_MD *md_alg, *digest = NULL; |
| 205 | CONF *extconf = NULL; | 209 | CONF *extconf = NULL; |
| 206 | char *extsect = NULL, *extfile = NULL, *passin = NULL, *passargin = NULL; | 210 | char *extsect = NULL, *extfile = NULL, *passin = NULL, *passargin = NULL; |
| 207 | int need_rand = 0; | 211 | int need_rand = 0; |
| 208 | int checkend=0,checkoffset=0; | 212 | int checkend = 0, checkoffset = 0; |
| 209 | unsigned long nmflag = 0, certflag = 0; | 213 | unsigned long nmflag = 0, certflag = 0; |
| 210 | #ifndef OPENSSL_NO_ENGINE | 214 | #ifndef OPENSSL_NO_ENGINE |
| 211 | char *engine=NULL; | 215 | char *engine = NULL; |
| 212 | #endif | 216 | #endif |
| 213 | 217 | ||
| 214 | reqfile=0; | 218 | reqfile = 0; |
| 215 | 219 | ||
| 216 | apps_startup(); | 220 | apps_startup(); |
| 217 | 221 | ||
| 218 | if (bio_err == NULL) | 222 | if (bio_err == NULL) |
| 219 | bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); | 223 | bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); |
| 220 | 224 | ||
| 221 | if (!load_config(bio_err, NULL)) | 225 | if (!load_config(bio_err, NULL)) |
| 222 | goto end; | 226 | goto end; |
| 223 | STDout=BIO_new_fp(stdout,BIO_NOCLOSE); | 227 | STDout = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 224 | 228 | ||
| 225 | informat=FORMAT_PEM; | 229 | informat = FORMAT_PEM; |
| 226 | outformat=FORMAT_PEM; | 230 | outformat = FORMAT_PEM; |
| 227 | keyformat=FORMAT_PEM; | 231 | keyformat = FORMAT_PEM; |
| 228 | CAformat=FORMAT_PEM; | 232 | CAformat = FORMAT_PEM; |
| 229 | CAkeyformat=FORMAT_PEM; | 233 | CAkeyformat = FORMAT_PEM; |
| 230 | 234 | ||
| 231 | ctx=X509_STORE_new(); | 235 | ctx = X509_STORE_new(); |
| 232 | if (ctx == NULL) goto end; | 236 | if (ctx == NULL) |
| 233 | X509_STORE_set_verify_cb(ctx,callb); | 237 | goto end; |
| 238 | X509_STORE_set_verify_cb(ctx, callb); | ||
| 234 | 239 | ||
| 235 | argc--; | 240 | argc--; |
| 236 | argv++; | 241 | argv++; |
| 237 | num=0; | 242 | num = 0; |
| 238 | while (argc >= 1) | 243 | while (argc >= 1) { |
| 239 | { | 244 | if (strcmp(*argv, "-inform") == 0) { |
| 240 | if (strcmp(*argv,"-inform") == 0) | 245 | if (--argc < 1) |
| 241 | { | 246 | goto bad; |
| 242 | if (--argc < 1) goto bad; | 247 | informat = str2fmt(*(++argv)); |
| 243 | informat=str2fmt(*(++argv)); | 248 | } else if (strcmp(*argv, "-outform") == 0) { |
| 244 | } | 249 | if (--argc < 1) |
| 245 | else if (strcmp(*argv,"-outform") == 0) | 250 | goto bad; |
| 246 | { | 251 | outformat = str2fmt(*(++argv)); |
| 247 | if (--argc < 1) goto bad; | 252 | } else if (strcmp(*argv, "-keyform") == 0) { |
| 248 | outformat=str2fmt(*(++argv)); | 253 | if (--argc < 1) |
| 249 | } | 254 | goto bad; |
| 250 | else if (strcmp(*argv,"-keyform") == 0) | 255 | keyformat = str2fmt(*(++argv)); |
| 251 | { | 256 | } else if (strcmp(*argv, "-req") == 0) { |
| 252 | if (--argc < 1) goto bad; | 257 | reqfile = 1; |
| 253 | keyformat=str2fmt(*(++argv)); | ||
| 254 | } | ||
| 255 | else if (strcmp(*argv,"-req") == 0) | ||
| 256 | { | ||
| 257 | reqfile=1; | ||
| 258 | need_rand = 1; | 258 | need_rand = 1; |
| 259 | } | 259 | } else if (strcmp(*argv, "-CAform") == 0) { |
| 260 | else if (strcmp(*argv,"-CAform") == 0) | 260 | if (--argc < 1) |
| 261 | { | 261 | goto bad; |
| 262 | if (--argc < 1) goto bad; | 262 | CAformat = str2fmt(*(++argv)); |
| 263 | CAformat=str2fmt(*(++argv)); | 263 | } else if (strcmp(*argv, "-CAkeyform") == 0) { |
| 264 | } | 264 | if (--argc < 1) |
| 265 | else if (strcmp(*argv,"-CAkeyform") == 0) | 265 | goto bad; |
| 266 | { | 266 | CAkeyformat = str2fmt(*(++argv)); |
| 267 | if (--argc < 1) goto bad; | 267 | } else if (strcmp(*argv, "-sigopt") == 0) { |
| 268 | CAkeyformat=str2fmt(*(++argv)); | ||
| 269 | } | ||
| 270 | else if (strcmp(*argv,"-sigopt") == 0) | ||
| 271 | { | ||
| 272 | if (--argc < 1) | 268 | if (--argc < 1) |
| 273 | goto bad; | 269 | goto bad; |
| 274 | if (!sigopts) | 270 | if (!sigopts) |
| 275 | sigopts = sk_OPENSSL_STRING_new_null(); | 271 | sigopts = sk_OPENSSL_STRING_new_null(); |
| 276 | if (!sigopts || !sk_OPENSSL_STRING_push(sigopts, *(++argv))) | 272 | if (!sigopts || !sk_OPENSSL_STRING_push(sigopts, *(++argv))) |
| 277 | goto bad; | 273 | goto bad; |
| 278 | } | 274 | } else if (strcmp(*argv, "-days") == 0) { |
| 279 | else if (strcmp(*argv,"-days") == 0) | 275 | if (--argc < 1) |
| 280 | { | 276 | goto bad; |
| 281 | if (--argc < 1) goto bad; | 277 | days = atoi(*(++argv)); |
| 282 | days=atoi(*(++argv)); | 278 | if (days == 0) { |
| 283 | if (days == 0) | 279 | BIO_printf(bio_err, "bad number of days\n"); |
| 284 | { | ||
| 285 | BIO_printf(bio_err,"bad number of days\n"); | ||
| 286 | goto bad; | 280 | goto bad; |
| 287 | } | ||
| 288 | } | ||
| 289 | else if (strcmp(*argv,"-passin") == 0) | ||
| 290 | { | ||
| 291 | if (--argc < 1) goto bad; | ||
| 292 | passargin= *(++argv); | ||
| 293 | } | ||
| 294 | else if (strcmp(*argv,"-extfile") == 0) | ||
| 295 | { | ||
| 296 | if (--argc < 1) goto bad; | ||
| 297 | extfile= *(++argv); | ||
| 298 | } | ||
| 299 | else if (strcmp(*argv,"-extensions") == 0) | ||
| 300 | { | ||
| 301 | if (--argc < 1) goto bad; | ||
| 302 | extsect= *(++argv); | ||
| 303 | } | ||
| 304 | else if (strcmp(*argv,"-in") == 0) | ||
| 305 | { | ||
| 306 | if (--argc < 1) goto bad; | ||
| 307 | infile= *(++argv); | ||
| 308 | } | ||
| 309 | else if (strcmp(*argv,"-out") == 0) | ||
| 310 | { | ||
| 311 | if (--argc < 1) goto bad; | ||
| 312 | outfile= *(++argv); | ||
| 313 | } | 281 | } |
| 314 | else if (strcmp(*argv,"-signkey") == 0) | 282 | } else if (strcmp(*argv, "-passin") == 0) { |
| 315 | { | 283 | if (--argc < 1) |
| 316 | if (--argc < 1) goto bad; | 284 | goto bad; |
| 317 | keyfile= *(++argv); | 285 | passargin = *(++argv); |
| 318 | sign_flag= ++num; | 286 | } else if (strcmp(*argv, "-extfile") == 0) { |
| 287 | if (--argc < 1) | ||
| 288 | goto bad; | ||
| 289 | extfile = *(++argv); | ||
| 290 | } else if (strcmp(*argv, "-extensions") == 0) { | ||
| 291 | if (--argc < 1) | ||
| 292 | goto bad; | ||
| 293 | extsect = *(++argv); | ||
| 294 | } else if (strcmp(*argv, "-in") == 0) { | ||
| 295 | if (--argc < 1) | ||
| 296 | goto bad; | ||
| 297 | infile = *(++argv); | ||
| 298 | } else if (strcmp(*argv, "-out") == 0) { | ||
| 299 | if (--argc < 1) | ||
| 300 | goto bad; | ||
| 301 | outfile = *(++argv); | ||
| 302 | } else if (strcmp(*argv, "-signkey") == 0) { | ||
| 303 | if (--argc < 1) | ||
| 304 | goto bad; | ||
| 305 | keyfile = *(++argv); | ||
| 306 | sign_flag = ++num; | ||
| 319 | need_rand = 1; | 307 | need_rand = 1; |
| 320 | } | 308 | } else if (strcmp(*argv, "-CA") == 0) { |
| 321 | else if (strcmp(*argv,"-CA") == 0) | 309 | if (--argc < 1) |
| 322 | { | 310 | goto bad; |
| 323 | if (--argc < 1) goto bad; | 311 | CAfile = *(++argv); |
| 324 | CAfile= *(++argv); | 312 | CA_flag = ++num; |
| 325 | CA_flag= ++num; | ||
| 326 | need_rand = 1; | 313 | need_rand = 1; |
| 327 | } | 314 | } else if (strcmp(*argv, "-CAkey") == 0) { |
| 328 | else if (strcmp(*argv,"-CAkey") == 0) | 315 | if (--argc < 1) |
| 329 | { | 316 | goto bad; |
| 330 | if (--argc < 1) goto bad; | 317 | CAkeyfile = *(++argv); |
| 331 | CAkeyfile= *(++argv); | 318 | } else if (strcmp(*argv, "-CAserial") == 0) { |
| 332 | } | 319 | if (--argc < 1) |
| 333 | else if (strcmp(*argv,"-CAserial") == 0) | 320 | goto bad; |
| 334 | { | 321 | CAserial = *(++argv); |
| 335 | if (--argc < 1) goto bad; | 322 | } else if (strcmp(*argv, "-set_serial") == 0) { |
| 336 | CAserial= *(++argv); | 323 | if (--argc < 1) |
| 337 | } | 324 | goto bad; |
| 338 | else if (strcmp(*argv,"-set_serial") == 0) | ||
| 339 | { | ||
| 340 | if (--argc < 1) goto bad; | ||
| 341 | if (!(sno = s2i_ASN1_INTEGER(NULL, *(++argv)))) | 325 | if (!(sno = s2i_ASN1_INTEGER(NULL, *(++argv)))) |
| 342 | goto bad; | 326 | goto bad; |
| 343 | } | 327 | } else if (strcmp(*argv, "-addtrust") == 0) { |
| 344 | else if (strcmp(*argv,"-addtrust") == 0) | 328 | if (--argc < 1) |
| 345 | { | 329 | goto bad; |
| 346 | if (--argc < 1) goto bad; | 330 | if (!(objtmp = OBJ_txt2obj(*(++argv), 0))) { |
| 347 | if (!(objtmp = OBJ_txt2obj(*(++argv), 0))) | ||
| 348 | { | ||
| 349 | BIO_printf(bio_err, | 331 | BIO_printf(bio_err, |
| 350 | "Invalid trust object value %s\n", *argv); | 332 | "Invalid trust object value %s\n", *argv); |
| 351 | goto bad; | 333 | goto bad; |
| 352 | } | 334 | } |
| 353 | if (!trust) trust = sk_ASN1_OBJECT_new_null(); | 335 | if (!trust) |
| 336 | trust = sk_ASN1_OBJECT_new_null(); | ||
| 354 | sk_ASN1_OBJECT_push(trust, objtmp); | 337 | sk_ASN1_OBJECT_push(trust, objtmp); |
| 355 | trustout = 1; | 338 | trustout = 1; |
| 356 | } | 339 | } else if (strcmp(*argv, "-addreject") == 0) { |
| 357 | else if (strcmp(*argv,"-addreject") == 0) | 340 | if (--argc < 1) |
| 358 | { | 341 | goto bad; |
| 359 | if (--argc < 1) goto bad; | 342 | if (!(objtmp = OBJ_txt2obj(*(++argv), 0))) { |
| 360 | if (!(objtmp = OBJ_txt2obj(*(++argv), 0))) | ||
| 361 | { | ||
| 362 | BIO_printf(bio_err, | 343 | BIO_printf(bio_err, |
| 363 | "Invalid reject object value %s\n", *argv); | 344 | "Invalid reject object value %s\n", *argv); |
| 364 | goto bad; | 345 | goto bad; |
| 365 | } | 346 | } |
| 366 | if (!reject) reject = sk_ASN1_OBJECT_new_null(); | 347 | if (!reject) |
| 348 | reject = sk_ASN1_OBJECT_new_null(); | ||
| 367 | sk_ASN1_OBJECT_push(reject, objtmp); | 349 | sk_ASN1_OBJECT_push(reject, objtmp); |
| 368 | trustout = 1; | 350 | trustout = 1; |
| 369 | } | 351 | } else if (strcmp(*argv, "-setalias") == 0) { |
| 370 | else if (strcmp(*argv,"-setalias") == 0) | 352 | if (--argc < 1) |
| 371 | { | 353 | goto bad; |
| 372 | if (--argc < 1) goto bad; | 354 | alias = *(++argv); |
| 373 | alias= *(++argv); | ||
| 374 | trustout = 1; | 355 | trustout = 1; |
| 375 | } | 356 | } else if (strcmp(*argv, "-certopt") == 0) { |
| 376 | else if (strcmp(*argv,"-certopt") == 0) | 357 | if (--argc < 1) |
| 377 | { | 358 | goto bad; |
| 378 | if (--argc < 1) goto bad; | 359 | if (!set_cert_ex(&certflag, *(++argv))) |
| 379 | if (!set_cert_ex(&certflag, *(++argv))) goto bad; | 360 | goto bad; |
| 380 | } | 361 | } else if (strcmp(*argv, "-nameopt") == 0) { |
| 381 | else if (strcmp(*argv,"-nameopt") == 0) | 362 | if (--argc < 1) |
| 382 | { | 363 | goto bad; |
| 383 | if (--argc < 1) goto bad; | 364 | if (!set_name_ex(&nmflag, *(++argv))) |
| 384 | if (!set_name_ex(&nmflag, *(++argv))) goto bad; | 365 | goto bad; |
| 385 | } | 366 | } |
| 386 | #ifndef OPENSSL_NO_ENGINE | 367 | #ifndef OPENSSL_NO_ENGINE |
| 387 | else if (strcmp(*argv,"-engine") == 0) | 368 | else if (strcmp(*argv, "-engine") == 0) { |
| 388 | { | 369 | if (--argc < 1) |
| 389 | if (--argc < 1) goto bad; | 370 | goto bad; |
| 390 | engine= *(++argv); | 371 | engine = *(++argv); |
| 391 | } | 372 | } |
| 392 | #endif | 373 | #endif |
| 393 | else if (strcmp(*argv,"-C") == 0) | 374 | else if (strcmp(*argv, "-C") == 0) |
| 394 | C= ++num; | 375 | C = ++num; |
| 395 | else if (strcmp(*argv,"-email") == 0) | 376 | else if (strcmp(*argv, "-email") == 0) |
| 396 | email= ++num; | 377 | email = ++num; |
| 397 | else if (strcmp(*argv,"-ocsp_uri") == 0) | 378 | else if (strcmp(*argv, "-ocsp_uri") == 0) |
| 398 | ocsp_uri= ++num; | 379 | ocsp_uri = ++num; |
| 399 | else if (strcmp(*argv,"-serial") == 0) | 380 | else if (strcmp(*argv, "-serial") == 0) |
| 400 | serial= ++num; | 381 | serial = ++num; |
| 401 | else if (strcmp(*argv,"-next_serial") == 0) | 382 | else if (strcmp(*argv, "-next_serial") == 0) |
| 402 | next_serial= ++num; | 383 | next_serial = ++num; |
| 403 | else if (strcmp(*argv,"-modulus") == 0) | 384 | else if (strcmp(*argv, "-modulus") == 0) |
| 404 | modulus= ++num; | 385 | modulus = ++num; |
| 405 | else if (strcmp(*argv,"-pubkey") == 0) | 386 | else if (strcmp(*argv, "-pubkey") == 0) |
| 406 | pubkey= ++num; | 387 | pubkey = ++num; |
| 407 | else if (strcmp(*argv,"-x509toreq") == 0) | 388 | else if (strcmp(*argv, "-x509toreq") == 0) |
| 408 | x509req= ++num; | 389 | x509req = ++num; |
| 409 | else if (strcmp(*argv,"-text") == 0) | 390 | else if (strcmp(*argv, "-text") == 0) |
| 410 | text= ++num; | 391 | text = ++num; |
| 411 | else if (strcmp(*argv,"-hash") == 0 | 392 | else if (strcmp(*argv, "-hash") == 0 |
| 412 | || strcmp(*argv,"-subject_hash") == 0) | 393 | || strcmp(*argv, "-subject_hash") == 0) |
| 413 | subject_hash= ++num; | 394 | subject_hash = ++num; |
| 414 | #ifndef OPENSSL_NO_MD5 | 395 | #ifndef OPENSSL_NO_MD5 |
| 415 | else if (strcmp(*argv,"-subject_hash_old") == 0) | 396 | else if (strcmp(*argv, "-subject_hash_old") == 0) |
| 416 | subject_hash_old= ++num; | 397 | subject_hash_old = ++num; |
| 417 | #endif | 398 | #endif |
| 418 | else if (strcmp(*argv,"-issuer_hash") == 0) | 399 | else if (strcmp(*argv, "-issuer_hash") == 0) |
| 419 | issuer_hash= ++num; | 400 | issuer_hash = ++num; |
| 420 | #ifndef OPENSSL_NO_MD5 | 401 | #ifndef OPENSSL_NO_MD5 |
| 421 | else if (strcmp(*argv,"-issuer_hash_old") == 0) | 402 | else if (strcmp(*argv, "-issuer_hash_old") == 0) |
| 422 | issuer_hash_old= ++num; | 403 | issuer_hash_old = ++num; |
| 423 | #endif | 404 | #endif |
| 424 | else if (strcmp(*argv,"-subject") == 0) | 405 | else if (strcmp(*argv, "-subject") == 0) |
| 425 | subject= ++num; | 406 | subject = ++num; |
| 426 | else if (strcmp(*argv,"-issuer") == 0) | 407 | else if (strcmp(*argv, "-issuer") == 0) |
| 427 | issuer= ++num; | 408 | issuer = ++num; |
| 428 | else if (strcmp(*argv,"-fingerprint") == 0) | 409 | else if (strcmp(*argv, "-fingerprint") == 0) |
| 429 | fingerprint= ++num; | 410 | fingerprint = ++num; |
| 430 | else if (strcmp(*argv,"-dates") == 0) | 411 | else if (strcmp(*argv, "-dates") == 0) { |
| 431 | { | 412 | startdate = ++num; |
| 432 | startdate= ++num; | 413 | enddate = ++num; |
| 433 | enddate= ++num; | 414 | } else if (strcmp(*argv, "-purpose") == 0) |
| 434 | } | 415 | pprint = ++num; |
| 435 | else if (strcmp(*argv,"-purpose") == 0) | 416 | else if (strcmp(*argv, "-startdate") == 0) |
| 436 | pprint= ++num; | 417 | startdate = ++num; |
| 437 | else if (strcmp(*argv,"-startdate") == 0) | 418 | else if (strcmp(*argv, "-enddate") == 0) |
| 438 | startdate= ++num; | 419 | enddate = ++num; |
| 439 | else if (strcmp(*argv,"-enddate") == 0) | 420 | else if (strcmp(*argv, "-checkend") == 0) { |
| 440 | enddate= ++num; | 421 | if (--argc < 1) |
| 441 | else if (strcmp(*argv,"-checkend") == 0) | 422 | goto bad; |
| 442 | { | 423 | checkoffset = atoi(*(++argv)); |
| 443 | if (--argc < 1) goto bad; | 424 | checkend = 1; |
| 444 | checkoffset=atoi(*(++argv)); | 425 | } else if (strcmp(*argv, "-noout") == 0) |
| 445 | checkend=1; | 426 | noout = ++num; |
| 446 | } | 427 | else if (strcmp(*argv, "-trustout") == 0) |
| 447 | else if (strcmp(*argv,"-noout") == 0) | 428 | trustout = 1; |
| 448 | noout= ++num; | 429 | else if (strcmp(*argv, "-clrtrust") == 0) |
| 449 | else if (strcmp(*argv,"-trustout") == 0) | 430 | clrtrust = ++num; |
| 450 | trustout= 1; | 431 | else if (strcmp(*argv, "-clrreject") == 0) |
| 451 | else if (strcmp(*argv,"-clrtrust") == 0) | 432 | clrreject = ++num; |
| 452 | clrtrust= ++num; | 433 | else if (strcmp(*argv, "-alias") == 0) |
| 453 | else if (strcmp(*argv,"-clrreject") == 0) | 434 | aliasout = ++num; |
| 454 | clrreject= ++num; | 435 | else if (strcmp(*argv, "-CAcreateserial") == 0) |
| 455 | else if (strcmp(*argv,"-alias") == 0) | 436 | CA_createserial = ++num; |
| 456 | aliasout= ++num; | 437 | else if (strcmp(*argv, "-clrext") == 0) |
| 457 | else if (strcmp(*argv,"-CAcreateserial") == 0) | ||
| 458 | CA_createserial= ++num; | ||
| 459 | else if (strcmp(*argv,"-clrext") == 0) | ||
| 460 | clrext = 1; | 438 | clrext = 1; |
| 461 | #if 1 /* stay backwards-compatible with 0.9.5; this should go away soon */ | 439 | #if 1 /* stay backwards-compatible with 0.9.5; this |
| 462 | else if (strcmp(*argv,"-crlext") == 0) | 440 | * should go away soon */ |
| 463 | { | 441 | else if (strcmp(*argv, "-crlext") == 0) { |
| 464 | BIO_printf(bio_err,"use -clrext instead of -crlext\n"); | 442 | BIO_printf(bio_err, "use -clrext instead of -crlext\n"); |
| 465 | clrext = 1; | 443 | clrext = 1; |
| 466 | } | 444 | } |
| 467 | #endif | 445 | #endif |
| 468 | else if (strcmp(*argv,"-ocspid") == 0) | 446 | else if (strcmp(*argv, "-ocspid") == 0) |
| 469 | ocspid= ++num; | 447 | ocspid = ++num; |
| 470 | else if ((md_alg=EVP_get_digestbyname(*argv + 1))) | 448 | else if ((md_alg = EVP_get_digestbyname(*argv + 1))) { |
| 471 | { | ||
| 472 | /* ok */ | 449 | /* ok */ |
| 473 | digest=md_alg; | 450 | digest = md_alg; |
| 474 | } | 451 | } else { |
| 475 | else | 452 | BIO_printf(bio_err, "unknown option %s\n", *argv); |
| 476 | { | 453 | badops = 1; |
| 477 | BIO_printf(bio_err,"unknown option %s\n",*argv); | ||
| 478 | badops=1; | ||
| 479 | break; | 454 | break; |
| 480 | } | 455 | } |
| 481 | argc--; | 456 | argc--; |
| 482 | argv++; | 457 | argv++; |
| 483 | } | 458 | } |
| 484 | 459 | ||
| 485 | if (badops) | 460 | if (badops) { |
| 486 | { | ||
| 487 | bad: | 461 | bad: |
| 488 | for (pp=x509_usage; (*pp != NULL); pp++) | 462 | for (pp = x509_usage; (*pp != NULL); pp++) |
| 489 | BIO_printf(bio_err,"%s",*pp); | 463 | BIO_printf(bio_err, "%s", *pp); |
| 490 | goto end; | 464 | goto end; |
| 491 | } | 465 | } |
| 492 | |||
| 493 | #ifndef OPENSSL_NO_ENGINE | 466 | #ifndef OPENSSL_NO_ENGINE |
| 494 | e = setup_engine(bio_err, engine, 0); | 467 | e = setup_engine(bio_err, engine, 0); |
| 495 | #endif | 468 | #endif |
| 496 | 469 | ||
| 497 | if (need_rand) | 470 | if (need_rand) |
| @@ -499,240 +472,195 @@ bad: | |||
| 499 | 472 | ||
| 500 | ERR_load_crypto_strings(); | 473 | ERR_load_crypto_strings(); |
| 501 | 474 | ||
| 502 | if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) | 475 | if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) { |
| 503 | { | ||
| 504 | BIO_printf(bio_err, "Error getting password\n"); | 476 | BIO_printf(bio_err, "Error getting password\n"); |
| 505 | goto end; | 477 | goto end; |
| 506 | } | 478 | } |
| 507 | 479 | if (!X509_STORE_set_default_paths(ctx)) { | |
| 508 | if (!X509_STORE_set_default_paths(ctx)) | ||
| 509 | { | ||
| 510 | ERR_print_errors(bio_err); | 480 | ERR_print_errors(bio_err); |
| 511 | goto end; | 481 | goto end; |
| 512 | } | 482 | } |
| 513 | 483 | if ((CAkeyfile == NULL) && (CA_flag) && (CAformat == FORMAT_PEM)) { | |
| 514 | if ((CAkeyfile == NULL) && (CA_flag) && (CAformat == FORMAT_PEM)) | 484 | CAkeyfile = CAfile; |
| 515 | { CAkeyfile=CAfile; } | 485 | } else if ((CA_flag) && (CAkeyfile == NULL)) { |
| 516 | else if ((CA_flag) && (CAkeyfile == NULL)) | 486 | BIO_printf(bio_err, "need to specify a CAkey if using the CA command\n"); |
| 517 | { | ||
| 518 | BIO_printf(bio_err,"need to specify a CAkey if using the CA command\n"); | ||
| 519 | goto end; | 487 | goto end; |
| 520 | } | 488 | } |
| 521 | 489 | if (extfile) { | |
| 522 | if (extfile) | ||
| 523 | { | ||
| 524 | long errorline = -1; | 490 | long errorline = -1; |
| 525 | X509V3_CTX ctx2; | 491 | X509V3_CTX ctx2; |
| 526 | extconf = NCONF_new(NULL); | 492 | extconf = NCONF_new(NULL); |
| 527 | if (!NCONF_load(extconf, extfile,&errorline)) | 493 | if (!NCONF_load(extconf, extfile, &errorline)) { |
| 528 | { | ||
| 529 | if (errorline <= 0) | 494 | if (errorline <= 0) |
| 530 | BIO_printf(bio_err, | 495 | BIO_printf(bio_err, |
| 531 | "error loading the config file '%s'\n", | 496 | "error loading the config file '%s'\n", |
| 532 | extfile); | 497 | extfile); |
| 533 | else | 498 | else |
| 534 | BIO_printf(bio_err, | 499 | BIO_printf(bio_err, |
| 535 | "error on line %ld of config file '%s'\n" | 500 | "error on line %ld of config file '%s'\n" |
| 536 | ,errorline,extfile); | 501 | ,errorline, extfile); |
| 537 | goto end; | 502 | goto end; |
| 538 | } | 503 | } |
| 539 | if (!extsect) | 504 | if (!extsect) { |
| 540 | { | ||
| 541 | extsect = NCONF_get_string(extconf, "default", "extensions"); | 505 | extsect = NCONF_get_string(extconf, "default", "extensions"); |
| 542 | if (!extsect) | 506 | if (!extsect) { |
| 543 | { | ||
| 544 | ERR_clear_error(); | 507 | ERR_clear_error(); |
| 545 | extsect = "default"; | 508 | extsect = "default"; |
| 546 | } | ||
| 547 | } | 509 | } |
| 510 | } | ||
| 548 | X509V3_set_ctx_test(&ctx2); | 511 | X509V3_set_ctx_test(&ctx2); |
| 549 | X509V3_set_nconf(&ctx2, extconf); | 512 | X509V3_set_nconf(&ctx2, extconf); |
| 550 | if (!X509V3_EXT_add_nconf(extconf, &ctx2, extsect, NULL)) | 513 | if (!X509V3_EXT_add_nconf(extconf, &ctx2, extsect, NULL)) { |
| 551 | { | ||
| 552 | BIO_printf(bio_err, | 514 | BIO_printf(bio_err, |
| 553 | "Error Loading extension section %s\n", | 515 | "Error Loading extension section %s\n", |
| 554 | extsect); | 516 | extsect); |
| 555 | ERR_print_errors(bio_err); | 517 | ERR_print_errors(bio_err); |
| 556 | goto end; | 518 | goto end; |
| 557 | } | ||
| 558 | } | 519 | } |
| 559 | 520 | } | |
| 560 | 521 | if (reqfile) { | |
| 561 | if (reqfile) | ||
| 562 | { | ||
| 563 | EVP_PKEY *pkey; | 522 | EVP_PKEY *pkey; |
| 564 | BIO *in; | 523 | BIO *in; |
| 565 | 524 | ||
| 566 | if (!sign_flag && !CA_flag) | 525 | if (!sign_flag && !CA_flag) { |
| 567 | { | 526 | BIO_printf(bio_err, "We need a private key to sign with\n"); |
| 568 | BIO_printf(bio_err,"We need a private key to sign with\n"); | ||
| 569 | goto end; | 527 | goto end; |
| 570 | } | 528 | } |
| 571 | in=BIO_new(BIO_s_file()); | 529 | in = BIO_new(BIO_s_file()); |
| 572 | if (in == NULL) | 530 | if (in == NULL) { |
| 573 | { | ||
| 574 | ERR_print_errors(bio_err); | 531 | ERR_print_errors(bio_err); |
| 575 | goto end; | 532 | goto end; |
| 576 | } | 533 | } |
| 577 | |||
| 578 | if (infile == NULL) | 534 | if (infile == NULL) |
| 579 | BIO_set_fp(in,stdin,BIO_NOCLOSE|BIO_FP_TEXT); | 535 | BIO_set_fp(in, stdin, BIO_NOCLOSE | BIO_FP_TEXT); |
| 580 | else | 536 | else { |
| 581 | { | 537 | if (BIO_read_filename(in, infile) <= 0) { |
| 582 | if (BIO_read_filename(in,infile) <= 0) | ||
| 583 | { | ||
| 584 | perror(infile); | 538 | perror(infile); |
| 585 | BIO_free(in); | 539 | BIO_free(in); |
| 586 | goto end; | 540 | goto end; |
| 587 | } | ||
| 588 | } | 541 | } |
| 589 | req=PEM_read_bio_X509_REQ(in,NULL,NULL,NULL); | 542 | } |
| 543 | req = PEM_read_bio_X509_REQ(in, NULL, NULL, NULL); | ||
| 590 | BIO_free(in); | 544 | BIO_free(in); |
| 591 | 545 | ||
| 592 | if (req == NULL) | 546 | if (req == NULL) { |
| 593 | { | ||
| 594 | ERR_print_errors(bio_err); | 547 | ERR_print_errors(bio_err); |
| 595 | goto end; | 548 | goto end; |
| 596 | } | 549 | } |
| 597 | 550 | if ((req->req_info == NULL) || | |
| 598 | if ( (req->req_info == NULL) || | 551 | (req->req_info->pubkey == NULL) || |
| 599 | (req->req_info->pubkey == NULL) || | 552 | (req->req_info->pubkey->public_key == NULL) || |
| 600 | (req->req_info->pubkey->public_key == NULL) || | 553 | (req->req_info->pubkey->public_key->data == NULL)) { |
| 601 | (req->req_info->pubkey->public_key->data == NULL)) | 554 | BIO_printf(bio_err, "The certificate request appears to corrupted\n"); |
| 602 | { | 555 | BIO_printf(bio_err, "It does not contain a public key\n"); |
| 603 | BIO_printf(bio_err,"The certificate request appears to corrupted\n"); | ||
| 604 | BIO_printf(bio_err,"It does not contain a public key\n"); | ||
| 605 | goto end; | 556 | goto end; |
| 606 | } | 557 | } |
| 607 | if ((pkey=X509_REQ_get_pubkey(req)) == NULL) | 558 | if ((pkey = X509_REQ_get_pubkey(req)) == NULL) { |
| 608 | { | 559 | BIO_printf(bio_err, "error unpacking public key\n"); |
| 609 | BIO_printf(bio_err,"error unpacking public key\n"); | 560 | goto end; |
| 610 | goto end; | 561 | } |
| 611 | } | 562 | i = X509_REQ_verify(req, pkey); |
| 612 | i=X509_REQ_verify(req,pkey); | ||
| 613 | EVP_PKEY_free(pkey); | 563 | EVP_PKEY_free(pkey); |
| 614 | if (i < 0) | 564 | if (i < 0) { |
| 615 | { | 565 | BIO_printf(bio_err, "Signature verification error\n"); |
| 616 | BIO_printf(bio_err,"Signature verification error\n"); | ||
| 617 | ERR_print_errors(bio_err); | 566 | ERR_print_errors(bio_err); |
| 618 | goto end; | 567 | goto end; |
| 619 | } | 568 | } |
| 620 | if (i == 0) | 569 | if (i == 0) { |
| 621 | { | 570 | BIO_printf(bio_err, "Signature did not match the certificate request\n"); |
| 622 | BIO_printf(bio_err,"Signature did not match the certificate request\n"); | ||
| 623 | goto end; | 571 | goto end; |
| 624 | } | 572 | } else |
| 625 | else | 573 | BIO_printf(bio_err, "Signature ok\n"); |
| 626 | BIO_printf(bio_err,"Signature ok\n"); | ||
| 627 | 574 | ||
| 628 | print_name(bio_err, "subject=", X509_REQ_get_subject_name(req), nmflag); | 575 | print_name(bio_err, "subject=", X509_REQ_get_subject_name(req), nmflag); |
| 629 | 576 | ||
| 630 | if ((x=X509_new()) == NULL) goto end; | 577 | if ((x = X509_new()) == NULL) |
| 578 | goto end; | ||
| 631 | 579 | ||
| 632 | if (sno == NULL) | 580 | if (sno == NULL) { |
| 633 | { | ||
| 634 | sno = ASN1_INTEGER_new(); | 581 | sno = ASN1_INTEGER_new(); |
| 635 | if (!sno || !rand_serial(NULL, sno)) | 582 | if (!sno || !rand_serial(NULL, sno)) |
| 636 | goto end; | 583 | goto end; |
| 637 | if (!X509_set_serialNumber(x, sno)) | 584 | if (!X509_set_serialNumber(x, sno)) |
| 638 | goto end; | 585 | goto end; |
| 639 | ASN1_INTEGER_free(sno); | 586 | ASN1_INTEGER_free(sno); |
| 640 | sno = NULL; | 587 | sno = NULL; |
| 641 | } | 588 | } else if (!X509_set_serialNumber(x, sno)) |
| 642 | else if (!X509_set_serialNumber(x, sno)) | ||
| 643 | goto end; | 589 | goto end; |
| 644 | 590 | ||
| 645 | if (!X509_set_issuer_name(x,req->req_info->subject)) goto end; | 591 | if (!X509_set_issuer_name(x, req->req_info->subject)) |
| 646 | if (!X509_set_subject_name(x,req->req_info->subject)) goto end; | 592 | goto end; |
| 593 | if (!X509_set_subject_name(x, req->req_info->subject)) | ||
| 594 | goto end; | ||
| 647 | 595 | ||
| 648 | X509_gmtime_adj(X509_get_notBefore(x),0); | 596 | X509_gmtime_adj(X509_get_notBefore(x), 0); |
| 649 | X509_time_adj_ex(X509_get_notAfter(x),days, 0, NULL); | 597 | X509_time_adj_ex(X509_get_notAfter(x), days, 0, NULL); |
| 650 | 598 | ||
| 651 | pkey = X509_REQ_get_pubkey(req); | 599 | pkey = X509_REQ_get_pubkey(req); |
| 652 | X509_set_pubkey(x,pkey); | 600 | X509_set_pubkey(x, pkey); |
| 653 | EVP_PKEY_free(pkey); | 601 | EVP_PKEY_free(pkey); |
| 654 | } | 602 | } else |
| 655 | else | 603 | x = load_cert(bio_err, infile, informat, NULL, e, "Certificate"); |
| 656 | x=load_cert(bio_err,infile,informat,NULL,e,"Certificate"); | ||
| 657 | |||
| 658 | if (x == NULL) goto end; | ||
| 659 | if (CA_flag) | ||
| 660 | { | ||
| 661 | xca=load_cert(bio_err,CAfile,CAformat,NULL,e,"CA Certificate"); | ||
| 662 | if (xca == NULL) goto end; | ||
| 663 | } | ||
| 664 | 604 | ||
| 665 | if (!noout || text || next_serial) | 605 | if (x == NULL) |
| 666 | { | 606 | goto end; |
| 607 | if (CA_flag) { | ||
| 608 | xca = load_cert(bio_err, CAfile, CAformat, NULL, e, "CA Certificate"); | ||
| 609 | if (xca == NULL) | ||
| 610 | goto end; | ||
| 611 | } | ||
| 612 | if (!noout || text || next_serial) { | ||
| 667 | OBJ_create("2.99999.3", | 613 | OBJ_create("2.99999.3", |
| 668 | "SET.ex3","SET x509v3 extension 3"); | 614 | "SET.ex3", "SET x509v3 extension 3"); |
| 669 | 615 | ||
| 670 | out=BIO_new(BIO_s_file()); | 616 | out = BIO_new(BIO_s_file()); |
| 671 | if (out == NULL) | 617 | if (out == NULL) { |
| 672 | { | ||
| 673 | ERR_print_errors(bio_err); | 618 | ERR_print_errors(bio_err); |
| 674 | goto end; | 619 | goto end; |
| 675 | } | 620 | } |
| 676 | if (outfile == NULL) | 621 | if (outfile == NULL) { |
| 677 | { | 622 | BIO_set_fp(out, stdout, BIO_NOCLOSE); |
| 678 | BIO_set_fp(out,stdout,BIO_NOCLOSE); | 623 | } else { |
| 679 | } | 624 | if (BIO_write_filename(out, outfile) <= 0) { |
| 680 | else | ||
| 681 | { | ||
| 682 | if (BIO_write_filename(out,outfile) <= 0) | ||
| 683 | { | ||
| 684 | perror(outfile); | 625 | perror(outfile); |
| 685 | goto end; | 626 | goto end; |
| 686 | } | ||
| 687 | } | 627 | } |
| 688 | } | 628 | } |
| 629 | } | ||
| 630 | if (alias) | ||
| 631 | X509_alias_set1(x, (unsigned char *) alias, -1); | ||
| 689 | 632 | ||
| 690 | if (alias) X509_alias_set1(x, (unsigned char *)alias, -1); | 633 | if (clrtrust) |
| 691 | 634 | X509_trust_clear(x); | |
| 692 | if (clrtrust) X509_trust_clear(x); | 635 | if (clrreject) |
| 693 | if (clrreject) X509_reject_clear(x); | 636 | X509_reject_clear(x); |
| 694 | 637 | ||
| 695 | if (trust) | 638 | if (trust) { |
| 696 | { | 639 | for (i = 0; i < sk_ASN1_OBJECT_num(trust); i++) { |
| 697 | for (i = 0; i < sk_ASN1_OBJECT_num(trust); i++) | ||
| 698 | { | ||
| 699 | objtmp = sk_ASN1_OBJECT_value(trust, i); | 640 | objtmp = sk_ASN1_OBJECT_value(trust, i); |
| 700 | X509_add1_trust_object(x, objtmp); | 641 | X509_add1_trust_object(x, objtmp); |
| 701 | } | ||
| 702 | } | 642 | } |
| 703 | 643 | } | |
| 704 | if (reject) | 644 | if (reject) { |
| 705 | { | 645 | for (i = 0; i < sk_ASN1_OBJECT_num(reject); i++) { |
| 706 | for (i = 0; i < sk_ASN1_OBJECT_num(reject); i++) | ||
| 707 | { | ||
| 708 | objtmp = sk_ASN1_OBJECT_value(reject, i); | 646 | objtmp = sk_ASN1_OBJECT_value(reject, i); |
| 709 | X509_add1_reject_object(x, objtmp); | 647 | X509_add1_reject_object(x, objtmp); |
| 710 | } | ||
| 711 | } | 648 | } |
| 712 | 649 | } | |
| 713 | if (num) | 650 | if (num) { |
| 714 | { | 651 | for (i = 1; i <= num; i++) { |
| 715 | for (i=1; i<=num; i++) | 652 | if (issuer == i) { |
| 716 | { | ||
| 717 | if (issuer == i) | ||
| 718 | { | ||
| 719 | print_name(STDout, "issuer= ", | 653 | print_name(STDout, "issuer= ", |
| 720 | X509_get_issuer_name(x), nmflag); | 654 | X509_get_issuer_name(x), nmflag); |
| 721 | } | 655 | } else if (subject == i) { |
| 722 | else if (subject == i) | ||
| 723 | { | ||
| 724 | print_name(STDout, "subject= ", | 656 | print_name(STDout, "subject= ", |
| 725 | X509_get_subject_name(x), nmflag); | 657 | X509_get_subject_name(x), nmflag); |
| 726 | } | 658 | } else if (serial == i) { |
| 727 | else if (serial == i) | 659 | BIO_printf(STDout, "serial="); |
| 728 | { | ||
| 729 | BIO_printf(STDout,"serial="); | ||
| 730 | i2a_ASN1_INTEGER(STDout, | 660 | i2a_ASN1_INTEGER(STDout, |
| 731 | X509_get_serialNumber(x)); | 661 | X509_get_serialNumber(x)); |
| 732 | BIO_printf(STDout,"\n"); | 662 | BIO_printf(STDout, "\n"); |
| 733 | } | 663 | } else if (next_serial == i) { |
| 734 | else if (next_serial == i) | ||
| 735 | { | ||
| 736 | BIGNUM *bnser; | 664 | BIGNUM *bnser; |
| 737 | ASN1_INTEGER *ser; | 665 | ASN1_INTEGER *ser; |
| 738 | ser = X509_get_serialNumber(x); | 666 | ser = X509_get_serialNumber(x); |
| @@ -748,174 +676,147 @@ bad: | |||
| 748 | i2a_ASN1_INTEGER(out, ser); | 676 | i2a_ASN1_INTEGER(out, ser); |
| 749 | ASN1_INTEGER_free(ser); | 677 | ASN1_INTEGER_free(ser); |
| 750 | BIO_puts(out, "\n"); | 678 | BIO_puts(out, "\n"); |
| 751 | } | 679 | } else if ((email == i) || (ocsp_uri == i)) { |
| 752 | else if ((email == i) || (ocsp_uri == i)) | ||
| 753 | { | ||
| 754 | int j; | 680 | int j; |
| 755 | STACK_OF(OPENSSL_STRING) *emlst; | 681 | STACK_OF(OPENSSL_STRING) * emlst; |
| 756 | if (email == i) | 682 | if (email == i) |
| 757 | emlst = X509_get1_email(x); | 683 | emlst = X509_get1_email(x); |
| 758 | else | 684 | else |
| 759 | emlst = X509_get1_ocsp(x); | 685 | emlst = X509_get1_ocsp(x); |
| 760 | for (j = 0; j < sk_OPENSSL_STRING_num(emlst); j++) | 686 | for (j = 0; j < sk_OPENSSL_STRING_num(emlst); j++) |
| 761 | BIO_printf(STDout, "%s\n", | 687 | BIO_printf(STDout, "%s\n", |
| 762 | sk_OPENSSL_STRING_value(emlst, j)); | 688 | sk_OPENSSL_STRING_value(emlst, j)); |
| 763 | X509_email_free(emlst); | 689 | X509_email_free(emlst); |
| 764 | } | 690 | } else if (aliasout == i) { |
| 765 | else if (aliasout == i) | ||
| 766 | { | ||
| 767 | unsigned char *alstr; | 691 | unsigned char *alstr; |
| 768 | alstr = X509_alias_get0(x, NULL); | 692 | alstr = X509_alias_get0(x, NULL); |
| 769 | if (alstr) BIO_printf(STDout,"%s\n", alstr); | 693 | if (alstr) |
| 770 | else BIO_puts(STDout,"<No Alias>\n"); | 694 | BIO_printf(STDout, "%s\n", alstr); |
| 771 | } | 695 | else |
| 772 | else if (subject_hash == i) | 696 | BIO_puts(STDout, "<No Alias>\n"); |
| 773 | { | 697 | } else if (subject_hash == i) { |
| 774 | BIO_printf(STDout,"%08lx\n",X509_subject_name_hash(x)); | 698 | BIO_printf(STDout, "%08lx\n", X509_subject_name_hash(x)); |
| 775 | } | 699 | } |
| 776 | #ifndef OPENSSL_NO_MD5 | 700 | #ifndef OPENSSL_NO_MD5 |
| 777 | else if (subject_hash_old == i) | 701 | else if (subject_hash_old == i) { |
| 778 | { | 702 | BIO_printf(STDout, "%08lx\n", X509_subject_name_hash_old(x)); |
| 779 | BIO_printf(STDout,"%08lx\n",X509_subject_name_hash_old(x)); | 703 | } |
| 780 | } | ||
| 781 | #endif | 704 | #endif |
| 782 | else if (issuer_hash == i) | 705 | else if (issuer_hash == i) { |
| 783 | { | 706 | BIO_printf(STDout, "%08lx\n", X509_issuer_name_hash(x)); |
| 784 | BIO_printf(STDout,"%08lx\n",X509_issuer_name_hash(x)); | 707 | } |
| 785 | } | ||
| 786 | #ifndef OPENSSL_NO_MD5 | 708 | #ifndef OPENSSL_NO_MD5 |
| 787 | else if (issuer_hash_old == i) | 709 | else if (issuer_hash_old == i) { |
| 788 | { | 710 | BIO_printf(STDout, "%08lx\n", X509_issuer_name_hash_old(x)); |
| 789 | BIO_printf(STDout,"%08lx\n",X509_issuer_name_hash_old(x)); | 711 | } |
| 790 | } | ||
| 791 | #endif | 712 | #endif |
| 792 | else if (pprint == i) | 713 | else if (pprint == i) { |
| 793 | { | ||
| 794 | X509_PURPOSE *ptmp; | 714 | X509_PURPOSE *ptmp; |
| 795 | int j; | 715 | int j; |
| 796 | BIO_printf(STDout, "Certificate purposes:\n"); | 716 | BIO_printf(STDout, "Certificate purposes:\n"); |
| 797 | for (j = 0; j < X509_PURPOSE_get_count(); j++) | 717 | for (j = 0; j < X509_PURPOSE_get_count(); j++) { |
| 798 | { | ||
| 799 | ptmp = X509_PURPOSE_get0(j); | 718 | ptmp = X509_PURPOSE_get0(j); |
| 800 | purpose_print(STDout, x, ptmp); | 719 | purpose_print(STDout, x, ptmp); |
| 801 | } | ||
| 802 | } | 720 | } |
| 803 | else | 721 | } else if (modulus == i) { |
| 804 | if (modulus == i) | ||
| 805 | { | ||
| 806 | EVP_PKEY *pkey; | 722 | EVP_PKEY *pkey; |
| 807 | 723 | ||
| 808 | pkey=X509_get_pubkey(x); | 724 | pkey = X509_get_pubkey(x); |
| 809 | if (pkey == NULL) | 725 | if (pkey == NULL) { |
| 810 | { | 726 | BIO_printf(bio_err, "Modulus=unavailable\n"); |
| 811 | BIO_printf(bio_err,"Modulus=unavailable\n"); | ||
| 812 | ERR_print_errors(bio_err); | 727 | ERR_print_errors(bio_err); |
| 813 | goto end; | 728 | goto end; |
| 814 | } | 729 | } |
| 815 | BIO_printf(STDout,"Modulus="); | 730 | BIO_printf(STDout, "Modulus="); |
| 816 | #ifndef OPENSSL_NO_RSA | 731 | #ifndef OPENSSL_NO_RSA |
| 817 | if (pkey->type == EVP_PKEY_RSA) | 732 | if (pkey->type == EVP_PKEY_RSA) |
| 818 | BN_print(STDout,pkey->pkey.rsa->n); | 733 | BN_print(STDout, pkey->pkey.rsa->n); |
| 819 | else | 734 | else |
| 820 | #endif | 735 | #endif |
| 821 | #ifndef OPENSSL_NO_DSA | 736 | #ifndef OPENSSL_NO_DSA |
| 822 | if (pkey->type == EVP_PKEY_DSA) | 737 | if (pkey->type == EVP_PKEY_DSA) |
| 823 | BN_print(STDout,pkey->pkey.dsa->pub_key); | 738 | BN_print(STDout, pkey->pkey.dsa->pub_key); |
| 824 | else | 739 | else |
| 825 | #endif | 740 | #endif |
| 826 | BIO_printf(STDout,"Wrong Algorithm type"); | 741 | BIO_printf(STDout, "Wrong Algorithm type"); |
| 827 | BIO_printf(STDout,"\n"); | 742 | BIO_printf(STDout, "\n"); |
| 828 | EVP_PKEY_free(pkey); | 743 | EVP_PKEY_free(pkey); |
| 829 | } | 744 | } else if (pubkey == i) { |
| 830 | else | ||
| 831 | if (pubkey == i) | ||
| 832 | { | ||
| 833 | EVP_PKEY *pkey; | 745 | EVP_PKEY *pkey; |
| 834 | 746 | ||
| 835 | pkey=X509_get_pubkey(x); | 747 | pkey = X509_get_pubkey(x); |
| 836 | if (pkey == NULL) | 748 | if (pkey == NULL) { |
| 837 | { | 749 | BIO_printf(bio_err, "Error getting public key\n"); |
| 838 | BIO_printf(bio_err,"Error getting public key\n"); | ||
| 839 | ERR_print_errors(bio_err); | 750 | ERR_print_errors(bio_err); |
| 840 | goto end; | 751 | goto end; |
| 841 | } | 752 | } |
| 842 | PEM_write_bio_PUBKEY(STDout, pkey); | 753 | PEM_write_bio_PUBKEY(STDout, pkey); |
| 843 | EVP_PKEY_free(pkey); | 754 | EVP_PKEY_free(pkey); |
| 844 | } | 755 | } else if (C == i) { |
| 845 | else | ||
| 846 | if (C == i) | ||
| 847 | { | ||
| 848 | unsigned char *d; | 756 | unsigned char *d; |
| 849 | char *m; | 757 | char *m; |
| 850 | int y,z; | 758 | int y, z; |
| 851 | 759 | ||
| 852 | X509_NAME_oneline(X509_get_subject_name(x), | 760 | X509_NAME_oneline(X509_get_subject_name(x), |
| 853 | buf,sizeof buf); | 761 | buf, sizeof buf); |
| 854 | BIO_printf(STDout,"/* subject:%s */\n",buf); | 762 | BIO_printf(STDout, "/* subject:%s */\n", buf); |
| 855 | m=X509_NAME_oneline( | 763 | m = X509_NAME_oneline( |
| 856 | X509_get_issuer_name(x),buf, | 764 | X509_get_issuer_name(x), buf, |
| 857 | sizeof buf); | 765 | sizeof buf); |
| 858 | BIO_printf(STDout,"/* issuer :%s */\n",buf); | 766 | BIO_printf(STDout, "/* issuer :%s */\n", buf); |
| 859 | 767 | ||
| 860 | z=i2d_X509(x,NULL); | 768 | z = i2d_X509(x, NULL); |
| 861 | m=malloc(z); | 769 | m = malloc(z); |
| 862 | 770 | ||
| 863 | d=(unsigned char *)m; | 771 | d = (unsigned char *) m; |
| 864 | z=i2d_X509_NAME(X509_get_subject_name(x),&d); | 772 | z = i2d_X509_NAME(X509_get_subject_name(x), &d); |
| 865 | BIO_printf(STDout,"unsigned char XXX_subject_name[%d]={\n",z); | 773 | BIO_printf(STDout, "unsigned char XXX_subject_name[%d]={\n", z); |
| 866 | d=(unsigned char *)m; | 774 | d = (unsigned char *) m; |
| 867 | for (y=0; y<z; y++) | 775 | for (y = 0; y < z; y++) { |
| 868 | { | 776 | BIO_printf(STDout, "0x%02X,", d[y]); |
| 869 | BIO_printf(STDout,"0x%02X,",d[y]); | ||
| 870 | if ((y & 0x0f) == 0x0f) BIO_printf(STDout,"\n"); | ||
| 871 | } | ||
| 872 | if (y%16 != 0) BIO_printf(STDout,"\n"); | ||
| 873 | BIO_printf(STDout,"};\n"); | ||
| 874 | |||
| 875 | z=i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x),&d); | ||
| 876 | BIO_printf(STDout,"unsigned char XXX_public_key[%d]={\n",z); | ||
| 877 | d=(unsigned char *)m; | ||
| 878 | for (y=0; y<z; y++) | ||
| 879 | { | ||
| 880 | BIO_printf(STDout,"0x%02X,",d[y]); | ||
| 881 | if ((y & 0x0f) == 0x0f) | 777 | if ((y & 0x0f) == 0x0f) |
| 882 | BIO_printf(STDout,"\n"); | 778 | BIO_printf(STDout, "\n"); |
| 883 | } | ||
| 884 | if (y%16 != 0) BIO_printf(STDout,"\n"); | ||
| 885 | BIO_printf(STDout,"};\n"); | ||
| 886 | |||
| 887 | z=i2d_X509(x,&d); | ||
| 888 | BIO_printf(STDout,"unsigned char XXX_certificate[%d]={\n",z); | ||
| 889 | d=(unsigned char *)m; | ||
| 890 | for (y=0; y<z; y++) | ||
| 891 | { | ||
| 892 | BIO_printf(STDout,"0x%02X,",d[y]); | ||
| 893 | if ((y & 0x0f) == 0x0f) | ||
| 894 | BIO_printf(STDout,"\n"); | ||
| 895 | } | ||
| 896 | if (y%16 != 0) BIO_printf(STDout,"\n"); | ||
| 897 | BIO_printf(STDout,"};\n"); | ||
| 898 | |||
| 899 | free(m); | ||
| 900 | } | ||
| 901 | else if (text == i) | ||
| 902 | { | ||
| 903 | X509_print_ex(STDout,x,nmflag, certflag); | ||
| 904 | } | 779 | } |
| 905 | else if (startdate == i) | 780 | if (y % 16 != 0) |
| 906 | { | 781 | BIO_printf(STDout, "\n"); |
| 907 | BIO_puts(STDout,"notBefore="); | 782 | BIO_printf(STDout, "};\n"); |
| 908 | ASN1_TIME_print(STDout,X509_get_notBefore(x)); | 783 | |
| 909 | BIO_puts(STDout,"\n"); | 784 | z = i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &d); |
| 785 | BIO_printf(STDout, "unsigned char XXX_public_key[%d]={\n", z); | ||
| 786 | d = (unsigned char *) m; | ||
| 787 | for (y = 0; y < z; y++) { | ||
| 788 | BIO_printf(STDout, "0x%02X,", d[y]); | ||
| 789 | if ((y & 0x0f) == 0x0f) | ||
| 790 | BIO_printf(STDout, "\n"); | ||
| 910 | } | 791 | } |
| 911 | else if (enddate == i) | 792 | if (y % 16 != 0) |
| 912 | { | 793 | BIO_printf(STDout, "\n"); |
| 913 | BIO_puts(STDout,"notAfter="); | 794 | BIO_printf(STDout, "};\n"); |
| 914 | ASN1_TIME_print(STDout,X509_get_notAfter(x)); | 795 | |
| 915 | BIO_puts(STDout,"\n"); | 796 | z = i2d_X509(x, &d); |
| 797 | BIO_printf(STDout, "unsigned char XXX_certificate[%d]={\n", z); | ||
| 798 | d = (unsigned char *) m; | ||
| 799 | for (y = 0; y < z; y++) { | ||
| 800 | BIO_printf(STDout, "0x%02X,", d[y]); | ||
| 801 | if ((y & 0x0f) == 0x0f) | ||
| 802 | BIO_printf(STDout, "\n"); | ||
| 916 | } | 803 | } |
| 917 | else if (fingerprint == i) | 804 | if (y % 16 != 0) |
| 918 | { | 805 | BIO_printf(STDout, "\n"); |
| 806 | BIO_printf(STDout, "};\n"); | ||
| 807 | |||
| 808 | free(m); | ||
| 809 | } else if (text == i) { | ||
| 810 | X509_print_ex(STDout, x, nmflag, certflag); | ||
| 811 | } else if (startdate == i) { | ||
| 812 | BIO_puts(STDout, "notBefore="); | ||
| 813 | ASN1_TIME_print(STDout, X509_get_notBefore(x)); | ||
| 814 | BIO_puts(STDout, "\n"); | ||
| 815 | } else if (enddate == i) { | ||
| 816 | BIO_puts(STDout, "notAfter="); | ||
| 817 | ASN1_TIME_print(STDout, X509_get_notAfter(x)); | ||
| 818 | BIO_puts(STDout, "\n"); | ||
| 819 | } else if (fingerprint == i) { | ||
| 919 | int j; | 820 | int j; |
| 920 | unsigned int n; | 821 | unsigned int n; |
| 921 | unsigned char md[EVP_MAX_MD_SIZE]; | 822 | unsigned char md[EVP_MAX_MD_SIZE]; |
| @@ -924,150 +825,124 @@ bad: | |||
| 924 | if (!fdig) | 825 | if (!fdig) |
| 925 | fdig = EVP_sha1(); | 826 | fdig = EVP_sha1(); |
| 926 | 827 | ||
| 927 | if (!X509_digest(x,fdig,md,&n)) | 828 | if (!X509_digest(x, fdig, md, &n)) { |
| 928 | { | 829 | BIO_printf(bio_err, "out of memory\n"); |
| 929 | BIO_printf(bio_err,"out of memory\n"); | ||
| 930 | goto end; | 830 | goto end; |
| 931 | } | ||
| 932 | BIO_printf(STDout,"%s Fingerprint=", | ||
| 933 | OBJ_nid2sn(EVP_MD_type(fdig))); | ||
| 934 | for (j=0; j<(int)n; j++) | ||
| 935 | { | ||
| 936 | BIO_printf(STDout,"%02X%c",md[j], | ||
| 937 | (j+1 == (int)n) | ||
| 938 | ?'\n':':'); | ||
| 939 | } | ||
| 940 | } | 831 | } |
| 941 | 832 | BIO_printf(STDout, "%s Fingerprint=", | |
| 833 | OBJ_nid2sn(EVP_MD_type(fdig))); | ||
| 834 | for (j = 0; j < (int) n; j++) { | ||
| 835 | BIO_printf(STDout, "%02X%c", md[j], | ||
| 836 | (j + 1 == (int) n) | ||
| 837 | ? '\n' : ':'); | ||
| 838 | } | ||
| 839 | } | ||
| 942 | /* should be in the library */ | 840 | /* should be in the library */ |
| 943 | else if ((sign_flag == i) && (x509req == 0)) | 841 | else if ((sign_flag == i) && (x509req == 0)) { |
| 944 | { | 842 | BIO_printf(bio_err, "Getting Private key\n"); |
| 945 | BIO_printf(bio_err,"Getting Private key\n"); | 843 | if (Upkey == NULL) { |
| 946 | if (Upkey == NULL) | 844 | Upkey = load_key(bio_err, |
| 947 | { | 845 | keyfile, keyformat, 0, |
| 948 | Upkey=load_key(bio_err, | 846 | passin, e, "Private key"); |
| 949 | keyfile, keyformat, 0, | 847 | if (Upkey == NULL) |
| 950 | passin, e, "Private key"); | 848 | goto end; |
| 951 | if (Upkey == NULL) goto end; | 849 | } |
| 952 | } | ||
| 953 | |||
| 954 | assert(need_rand); | 850 | assert(need_rand); |
| 955 | if (!sign(x,Upkey,days,clrext,digest, | 851 | if (!sign(x, Upkey, days, clrext, digest, |
| 956 | extconf, extsect)) goto end; | 852 | extconf, extsect)) |
| 853 | goto end; | ||
| 854 | } else if (CA_flag == i) { | ||
| 855 | BIO_printf(bio_err, "Getting CA Private Key\n"); | ||
| 856 | if (CAkeyfile != NULL) { | ||
| 857 | CApkey = load_key(bio_err, | ||
| 858 | CAkeyfile, CAkeyformat, | ||
| 859 | 0, passin, e, | ||
| 860 | "CA Private Key"); | ||
| 861 | if (CApkey == NULL) | ||
| 862 | goto end; | ||
| 957 | } | 863 | } |
| 958 | else if (CA_flag == i) | ||
| 959 | { | ||
| 960 | BIO_printf(bio_err,"Getting CA Private Key\n"); | ||
| 961 | if (CAkeyfile != NULL) | ||
| 962 | { | ||
| 963 | CApkey=load_key(bio_err, | ||
| 964 | CAkeyfile, CAkeyformat, | ||
| 965 | 0, passin, e, | ||
| 966 | "CA Private Key"); | ||
| 967 | if (CApkey == NULL) goto end; | ||
| 968 | } | ||
| 969 | |||
| 970 | assert(need_rand); | 864 | assert(need_rand); |
| 971 | if (!x509_certify(ctx,CAfile,digest,x,xca, | 865 | if (!x509_certify(ctx, CAfile, digest, x, xca, |
| 972 | CApkey, sigopts, | 866 | CApkey, sigopts, |
| 973 | CAserial,CA_createserial,days, clrext, | 867 | CAserial, CA_createserial, days, clrext, |
| 974 | extconf, extsect, sno)) | 868 | extconf, extsect, sno)) |
| 975 | goto end; | 869 | goto end; |
| 976 | } | 870 | } else if (x509req == i) { |
| 977 | else if (x509req == i) | ||
| 978 | { | ||
| 979 | EVP_PKEY *pk; | 871 | EVP_PKEY *pk; |
| 980 | 872 | ||
| 981 | BIO_printf(bio_err,"Getting request Private Key\n"); | 873 | BIO_printf(bio_err, "Getting request Private Key\n"); |
| 982 | if (keyfile == NULL) | 874 | if (keyfile == NULL) { |
| 983 | { | 875 | BIO_printf(bio_err, "no request key file specified\n"); |
| 984 | BIO_printf(bio_err,"no request key file specified\n"); | ||
| 985 | goto end; | 876 | goto end; |
| 986 | } | 877 | } else { |
| 987 | else | 878 | pk = load_key(bio_err, |
| 988 | { | 879 | keyfile, keyformat, 0, |
| 989 | pk=load_key(bio_err, | 880 | passin, e, "request key"); |
| 990 | keyfile, keyformat, 0, | 881 | if (pk == NULL) |
| 991 | passin, e, "request key"); | 882 | goto end; |
| 992 | if (pk == NULL) goto end; | 883 | } |
| 993 | } | ||
| 994 | 884 | ||
| 995 | BIO_printf(bio_err,"Generating certificate request\n"); | 885 | BIO_printf(bio_err, "Generating certificate request\n"); |
| 996 | 886 | ||
| 997 | rq=X509_to_X509_REQ(x,pk,digest); | 887 | rq = X509_to_X509_REQ(x, pk, digest); |
| 998 | EVP_PKEY_free(pk); | 888 | EVP_PKEY_free(pk); |
| 999 | if (rq == NULL) | 889 | if (rq == NULL) { |
| 1000 | { | ||
| 1001 | ERR_print_errors(bio_err); | 890 | ERR_print_errors(bio_err); |
| 1002 | goto end; | 891 | goto end; |
| 1003 | } | ||
| 1004 | if (!noout) | ||
| 1005 | { | ||
| 1006 | X509_REQ_print(out,rq); | ||
| 1007 | PEM_write_bio_X509_REQ(out,rq); | ||
| 1008 | } | ||
| 1009 | noout=1; | ||
| 1010 | } | 892 | } |
| 1011 | else if (ocspid == i) | 893 | if (!noout) { |
| 1012 | { | 894 | X509_REQ_print(out, rq); |
| 1013 | X509_ocspid_print(out, x); | 895 | PEM_write_bio_X509_REQ(out, rq); |
| 1014 | } | 896 | } |
| 897 | noout = 1; | ||
| 898 | } else if (ocspid == i) { | ||
| 899 | X509_ocspid_print(out, x); | ||
| 1015 | } | 900 | } |
| 1016 | } | 901 | } |
| 1017 | 902 | } | |
| 1018 | if (checkend) | 903 | if (checkend) { |
| 1019 | { | 904 | time_t tcheck = time(NULL) + checkoffset; |
| 1020 | time_t tcheck=time(NULL) + checkoffset; | 905 | |
| 1021 | 906 | if (X509_cmp_time(X509_get_notAfter(x), &tcheck) < 0) { | |
| 1022 | if (X509_cmp_time(X509_get_notAfter(x), &tcheck) < 0) | 907 | BIO_printf(out, "Certificate will expire\n"); |
| 1023 | { | 908 | ret = 1; |
| 1024 | BIO_printf(out,"Certificate will expire\n"); | 909 | } else { |
| 1025 | ret=1; | 910 | BIO_printf(out, "Certificate will not expire\n"); |
| 1026 | } | 911 | ret = 0; |
| 1027 | else | ||
| 1028 | { | ||
| 1029 | BIO_printf(out,"Certificate will not expire\n"); | ||
| 1030 | ret=0; | ||
| 1031 | } | ||
| 1032 | goto end; | ||
| 1033 | } | 912 | } |
| 1034 | |||
| 1035 | if (noout) | ||
| 1036 | { | ||
| 1037 | ret=0; | ||
| 1038 | goto end; | 913 | goto end; |
| 1039 | } | 914 | } |
| 1040 | 915 | if (noout) { | |
| 1041 | if (outformat == FORMAT_ASN1) | 916 | ret = 0; |
| 1042 | i=i2d_X509_bio(out,x); | 917 | goto end; |
| 1043 | else if (outformat == FORMAT_PEM) | 918 | } |
| 1044 | { | 919 | if (outformat == FORMAT_ASN1) |
| 1045 | if (trustout) i=PEM_write_bio_X509_AUX(out,x); | 920 | i = i2d_X509_bio(out, x); |
| 1046 | else i=PEM_write_bio_X509(out,x); | 921 | else if (outformat == FORMAT_PEM) { |
| 1047 | } | 922 | if (trustout) |
| 1048 | else if (outformat == FORMAT_NETSCAPE) | 923 | i = PEM_write_bio_X509_AUX(out, x); |
| 1049 | { | 924 | else |
| 925 | i = PEM_write_bio_X509(out, x); | ||
| 926 | } else if (outformat == FORMAT_NETSCAPE) { | ||
| 1050 | NETSCAPE_X509 nx; | 927 | NETSCAPE_X509 nx; |
| 1051 | ASN1_OCTET_STRING hdr; | 928 | ASN1_OCTET_STRING hdr; |
| 1052 | 929 | ||
| 1053 | hdr.data=(unsigned char *)NETSCAPE_CERT_HDR; | 930 | hdr.data = (unsigned char *) NETSCAPE_CERT_HDR; |
| 1054 | hdr.length=strlen(NETSCAPE_CERT_HDR); | 931 | hdr.length = strlen(NETSCAPE_CERT_HDR); |
| 1055 | nx.header= &hdr; | 932 | nx.header = &hdr; |
| 1056 | nx.cert=x; | 933 | nx.cert = x; |
| 1057 | 934 | ||
| 1058 | i=ASN1_item_i2d_bio(ASN1_ITEM_rptr(NETSCAPE_X509),out,&nx); | 935 | i = ASN1_item_i2d_bio(ASN1_ITEM_rptr(NETSCAPE_X509), out, &nx); |
| 1059 | } | 936 | } else { |
| 1060 | else { | 937 | BIO_printf(bio_err, "bad output format specified for outfile\n"); |
| 1061 | BIO_printf(bio_err,"bad output format specified for outfile\n"); | ||
| 1062 | goto end; | 938 | goto end; |
| 1063 | } | 939 | } |
| 1064 | if (!i) | 940 | if (!i) { |
| 1065 | { | 941 | BIO_printf(bio_err, "unable to write certificate\n"); |
| 1066 | BIO_printf(bio_err,"unable to write certificate\n"); | ||
| 1067 | ERR_print_errors(bio_err); | 942 | ERR_print_errors(bio_err); |
| 1068 | goto end; | 943 | goto end; |
| 1069 | } | 944 | } |
| 1070 | ret=0; | 945 | ret = 0; |
| 1071 | end: | 946 | end: |
| 1072 | if (need_rand) | 947 | if (need_rand) |
| 1073 | app_RAND_write_file(NULL, bio_err); | 948 | app_RAND_write_file(NULL, bio_err); |
| @@ -1087,212 +962,230 @@ end: | |||
| 1087 | ASN1_INTEGER_free(sno); | 962 | ASN1_INTEGER_free(sno); |
| 1088 | sk_ASN1_OBJECT_pop_free(trust, ASN1_OBJECT_free); | 963 | sk_ASN1_OBJECT_pop_free(trust, ASN1_OBJECT_free); |
| 1089 | sk_ASN1_OBJECT_pop_free(reject, ASN1_OBJECT_free); | 964 | sk_ASN1_OBJECT_pop_free(reject, ASN1_OBJECT_free); |
| 1090 | if (passin) free(passin); | 965 | if (passin) |
| 966 | free(passin); | ||
| 1091 | apps_shutdown(); | 967 | apps_shutdown(); |
| 1092 | return(ret); | 968 | return (ret); |
| 1093 | } | 969 | } |
| 1094 | 970 | ||
| 1095 | static ASN1_INTEGER *x509_load_serial(char *CAfile, char *serialfile, int create) | 971 | static ASN1_INTEGER * |
| 1096 | { | 972 | x509_load_serial(char *CAfile, char *serialfile, int create) |
| 973 | { | ||
| 1097 | char *buf = NULL, *p; | 974 | char *buf = NULL, *p; |
| 1098 | ASN1_INTEGER *bs = NULL; | 975 | ASN1_INTEGER *bs = NULL; |
| 1099 | BIGNUM *serial = NULL; | 976 | BIGNUM *serial = NULL; |
| 1100 | size_t len; | 977 | size_t len; |
| 1101 | 978 | ||
| 1102 | len = ((serialfile == NULL) | 979 | len = ((serialfile == NULL) |
| 1103 | ?(strlen(CAfile)+strlen(POSTFIX)+1) | 980 | ? (strlen(CAfile) + strlen(POSTFIX) + 1) |
| 1104 | :(strlen(serialfile)))+1; | 981 | : (strlen(serialfile))) + 1; |
| 1105 | buf=malloc(len); | 982 | buf = malloc(len); |
| 1106 | if (buf == NULL) { BIO_printf(bio_err,"out of mem\n"); goto end; } | 983 | if (buf == NULL) { |
| 1107 | if (serialfile == NULL) | 984 | BIO_printf(bio_err, "out of mem\n"); |
| 1108 | { | 985 | goto end; |
| 1109 | BUF_strlcpy(buf,CAfile,len); | 986 | } |
| 1110 | for (p=buf; *p; p++) | 987 | if (serialfile == NULL) { |
| 1111 | if (*p == '.') | 988 | BUF_strlcpy(buf, CAfile, len); |
| 1112 | { | 989 | for (p = buf; *p; p++) |
| 1113 | *p='\0'; | 990 | if (*p == '.') { |
| 991 | *p = '\0'; | ||
| 1114 | break; | 992 | break; |
| 1115 | } | 993 | } |
| 1116 | BUF_strlcat(buf,POSTFIX,len); | 994 | BUF_strlcat(buf, POSTFIX, len); |
| 1117 | } | 995 | } else |
| 1118 | else | 996 | BUF_strlcpy(buf, serialfile, len); |
| 1119 | BUF_strlcpy(buf,serialfile,len); | ||
| 1120 | 997 | ||
| 1121 | serial = load_serial(buf, create, NULL); | 998 | serial = load_serial(buf, create, NULL); |
| 1122 | if (serial == NULL) goto end; | 999 | if (serial == NULL) |
| 1123 | 1000 | goto end; | |
| 1124 | if (!BN_add_word(serial,1)) | ||
| 1125 | { BIO_printf(bio_err,"add_word failure\n"); goto end; } | ||
| 1126 | 1001 | ||
| 1127 | if (!save_serial(buf, NULL, serial, &bs)) goto end; | 1002 | if (!BN_add_word(serial, 1)) { |
| 1003 | BIO_printf(bio_err, "add_word failure\n"); | ||
| 1004 | goto end; | ||
| 1005 | } | ||
| 1006 | if (!save_serial(buf, NULL, serial, &bs)) | ||
| 1007 | goto end; | ||
| 1128 | 1008 | ||
| 1129 | end: | 1009 | end: |
| 1130 | if (buf) free(buf); | 1010 | if (buf) |
| 1011 | free(buf); | ||
| 1131 | BN_free(serial); | 1012 | BN_free(serial); |
| 1132 | return bs; | 1013 | return bs; |
| 1133 | } | 1014 | } |
| 1134 | 1015 | ||
| 1135 | static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest, | 1016 | static int |
| 1136 | X509 *x, X509 *xca, EVP_PKEY *pkey, | 1017 | x509_certify(X509_STORE * ctx, char *CAfile, const EVP_MD * digest, |
| 1137 | STACK_OF(OPENSSL_STRING) *sigopts, | 1018 | X509 * x, X509 * xca, EVP_PKEY * pkey, |
| 1138 | char *serialfile, int create, | 1019 | STACK_OF(OPENSSL_STRING) * sigopts, |
| 1139 | int days, int clrext, CONF *conf, char *section, | 1020 | char *serialfile, int create, |
| 1140 | ASN1_INTEGER *sno) | 1021 | int days, int clrext, CONF * conf, char *section, |
| 1141 | { | 1022 | ASN1_INTEGER * sno) |
| 1142 | int ret=0; | 1023 | { |
| 1143 | ASN1_INTEGER *bs=NULL; | 1024 | int ret = 0; |
| 1025 | ASN1_INTEGER *bs = NULL; | ||
| 1144 | X509_STORE_CTX xsc; | 1026 | X509_STORE_CTX xsc; |
| 1145 | EVP_PKEY *upkey; | 1027 | EVP_PKEY *upkey; |
| 1146 | 1028 | ||
| 1147 | upkey = X509_get_pubkey(xca); | 1029 | upkey = X509_get_pubkey(xca); |
| 1148 | EVP_PKEY_copy_parameters(upkey,pkey); | 1030 | EVP_PKEY_copy_parameters(upkey, pkey); |
| 1149 | EVP_PKEY_free(upkey); | 1031 | EVP_PKEY_free(upkey); |
| 1150 | 1032 | ||
| 1151 | if(!X509_STORE_CTX_init(&xsc,ctx,x,NULL)) | 1033 | if (!X509_STORE_CTX_init(&xsc, ctx, x, NULL)) { |
| 1152 | { | 1034 | BIO_printf(bio_err, "Error initialising X509 store\n"); |
| 1153 | BIO_printf(bio_err,"Error initialising X509 store\n"); | ||
| 1154 | goto end; | 1035 | goto end; |
| 1155 | } | 1036 | } |
| 1156 | if (sno) bs = sno; | 1037 | if (sno) |
| 1038 | bs = sno; | ||
| 1157 | else if (!(bs = x509_load_serial(CAfile, serialfile, create))) | 1039 | else if (!(bs = x509_load_serial(CAfile, serialfile, create))) |
| 1158 | goto end; | 1040 | goto end; |
| 1159 | 1041 | ||
| 1160 | /* if (!X509_STORE_add_cert(ctx,x)) goto end;*/ | 1042 | /* if (!X509_STORE_add_cert(ctx,x)) goto end;*/ |
| 1161 | 1043 | ||
| 1162 | /* NOTE: this certificate can/should be self signed, unless it was | 1044 | /* |
| 1163 | * a certificate request in which case it is not. */ | 1045 | * NOTE: this certificate can/should be self signed, unless it was a |
| 1164 | X509_STORE_CTX_set_cert(&xsc,x); | 1046 | * certificate request in which case it is not. |
| 1047 | */ | ||
| 1048 | X509_STORE_CTX_set_cert(&xsc, x); | ||
| 1165 | X509_STORE_CTX_set_flags(&xsc, X509_V_FLAG_CHECK_SS_SIGNATURE); | 1049 | X509_STORE_CTX_set_flags(&xsc, X509_V_FLAG_CHECK_SS_SIGNATURE); |
| 1166 | if (!reqfile && X509_verify_cert(&xsc) <= 0) | 1050 | if (!reqfile && X509_verify_cert(&xsc) <= 0) |
| 1167 | goto end; | 1051 | goto end; |
| 1168 | 1052 | ||
| 1169 | if (!X509_check_private_key(xca,pkey)) | 1053 | if (!X509_check_private_key(xca, pkey)) { |
| 1170 | { | 1054 | BIO_printf(bio_err, "CA certificate and CA private key do not match\n"); |
| 1171 | BIO_printf(bio_err,"CA certificate and CA private key do not match\n"); | 1055 | goto end; |
| 1056 | } | ||
| 1057 | if (!X509_set_issuer_name(x, X509_get_subject_name(xca))) | ||
| 1058 | goto end; | ||
| 1059 | if (!X509_set_serialNumber(x, bs)) | ||
| 1172 | goto end; | 1060 | goto end; |
| 1173 | } | ||
| 1174 | |||
| 1175 | if (!X509_set_issuer_name(x,X509_get_subject_name(xca))) goto end; | ||
| 1176 | if (!X509_set_serialNumber(x,bs)) goto end; | ||
| 1177 | 1061 | ||
| 1178 | if (X509_gmtime_adj(X509_get_notBefore(x),0L) == NULL) | 1062 | if (X509_gmtime_adj(X509_get_notBefore(x), 0L) == NULL) |
| 1179 | goto end; | 1063 | goto end; |
| 1180 | 1064 | ||
| 1181 | /* hardwired expired */ | 1065 | /* hardwired expired */ |
| 1182 | if (X509_time_adj_ex(X509_get_notAfter(x),days, 0, NULL) == NULL) | 1066 | if (X509_time_adj_ex(X509_get_notAfter(x), days, 0, NULL) == NULL) |
| 1183 | goto end; | 1067 | goto end; |
| 1184 | 1068 | ||
| 1185 | if (clrext) | 1069 | if (clrext) { |
| 1186 | { | 1070 | while (X509_get_ext_count(x) > 0) |
| 1187 | while (X509_get_ext_count(x) > 0) X509_delete_ext(x, 0); | 1071 | X509_delete_ext(x, 0); |
| 1188 | } | 1072 | } |
| 1189 | 1073 | if (conf) { | |
| 1190 | if (conf) | ||
| 1191 | { | ||
| 1192 | X509V3_CTX ctx2; | 1074 | X509V3_CTX ctx2; |
| 1193 | X509_set_version(x,2); /* version 3 certificate */ | 1075 | X509_set_version(x, 2); /* version 3 certificate */ |
| 1194 | X509V3_set_ctx(&ctx2, xca, x, NULL, NULL, 0); | 1076 | X509V3_set_ctx(&ctx2, xca, x, NULL, NULL, 0); |
| 1195 | X509V3_set_nconf(&ctx2, conf); | 1077 | X509V3_set_nconf(&ctx2, conf); |
| 1196 | if (!X509V3_EXT_add_nconf(conf, &ctx2, section, x)) goto end; | 1078 | if (!X509V3_EXT_add_nconf(conf, &ctx2, section, x)) |
| 1197 | } | 1079 | goto end; |
| 1198 | 1080 | } | |
| 1199 | if (!do_X509_sign(bio_err, x, pkey, digest, sigopts)) | 1081 | if (!do_X509_sign(bio_err, x, pkey, digest, sigopts)) |
| 1200 | goto end; | 1082 | goto end; |
| 1201 | ret=1; | 1083 | ret = 1; |
| 1202 | end: | 1084 | end: |
| 1203 | X509_STORE_CTX_cleanup(&xsc); | 1085 | X509_STORE_CTX_cleanup(&xsc); |
| 1204 | if (!ret) | 1086 | if (!ret) |
| 1205 | ERR_print_errors(bio_err); | 1087 | ERR_print_errors(bio_err); |
| 1206 | if (!sno) ASN1_INTEGER_free(bs); | 1088 | if (!sno) |
| 1089 | ASN1_INTEGER_free(bs); | ||
| 1207 | return ret; | 1090 | return ret; |
| 1208 | } | 1091 | } |
| 1209 | 1092 | ||
| 1210 | static int callb(int ok, X509_STORE_CTX *ctx) | 1093 | static int |
| 1211 | { | 1094 | callb(int ok, X509_STORE_CTX * ctx) |
| 1095 | { | ||
| 1212 | int err; | 1096 | int err; |
| 1213 | X509 *err_cert; | 1097 | X509 *err_cert; |
| 1214 | 1098 | ||
| 1215 | /* it is ok to use a self signed certificate | 1099 | /* |
| 1216 | * This case will catch both the initial ok == 0 and the | 1100 | * it is ok to use a self signed certificate This case will catch |
| 1217 | * final ok == 1 calls to this function */ | 1101 | * both the initial ok == 0 and the final ok == 1 calls to this |
| 1218 | err=X509_STORE_CTX_get_error(ctx); | 1102 | * function |
| 1103 | */ | ||
| 1104 | err = X509_STORE_CTX_get_error(ctx); | ||
| 1219 | if (err == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) | 1105 | if (err == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) |
| 1220 | return 1; | 1106 | return 1; |
| 1221 | 1107 | ||
| 1222 | /* BAD we should have gotten an error. Normally if everything | 1108 | /* |
| 1223 | * worked X509_STORE_CTX_get_error(ctx) will still be set to | 1109 | * BAD we should have gotten an error. Normally if everything worked |
| 1224 | * DEPTH_ZERO_SELF_.... */ | 1110 | * X509_STORE_CTX_get_error(ctx) will still be set to |
| 1225 | if (ok) | 1111 | * DEPTH_ZERO_SELF_.... |
| 1226 | { | 1112 | */ |
| 1227 | BIO_printf(bio_err,"error with certificate to be certified - should be self signed\n"); | 1113 | if (ok) { |
| 1114 | BIO_printf(bio_err, "error with certificate to be certified - should be self signed\n"); | ||
| 1228 | return 0; | 1115 | return 0; |
| 1229 | } | 1116 | } else { |
| 1230 | else | 1117 | err_cert = X509_STORE_CTX_get_current_cert(ctx); |
| 1231 | { | 1118 | print_name(bio_err, NULL, X509_get_subject_name(err_cert), 0); |
| 1232 | err_cert=X509_STORE_CTX_get_current_cert(ctx); | 1119 | BIO_printf(bio_err, "error with certificate - error %d at depth %d\n%s\n", |
| 1233 | print_name(bio_err, NULL, X509_get_subject_name(err_cert),0); | 1120 | err, X509_STORE_CTX_get_error_depth(ctx), |
| 1234 | BIO_printf(bio_err,"error with certificate - error %d at depth %d\n%s\n", | 1121 | X509_verify_cert_error_string(err)); |
| 1235 | err,X509_STORE_CTX_get_error_depth(ctx), | ||
| 1236 | X509_verify_cert_error_string(err)); | ||
| 1237 | return 1; | 1122 | return 1; |
| 1238 | } | ||
| 1239 | } | 1123 | } |
| 1124 | } | ||
| 1240 | 1125 | ||
| 1241 | /* self sign */ | 1126 | /* self sign */ |
| 1242 | static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext, const EVP_MD *digest, | 1127 | static int |
| 1243 | CONF *conf, char *section) | 1128 | sign(X509 * x, EVP_PKEY * pkey, int days, int clrext, const EVP_MD * digest, |
| 1244 | { | 1129 | CONF * conf, char *section) |
| 1130 | { | ||
| 1245 | 1131 | ||
| 1246 | EVP_PKEY *pktmp; | 1132 | EVP_PKEY *pktmp; |
| 1247 | 1133 | ||
| 1248 | pktmp = X509_get_pubkey(x); | 1134 | pktmp = X509_get_pubkey(x); |
| 1249 | EVP_PKEY_copy_parameters(pktmp,pkey); | 1135 | EVP_PKEY_copy_parameters(pktmp, pkey); |
| 1250 | EVP_PKEY_save_parameters(pktmp,1); | 1136 | EVP_PKEY_save_parameters(pktmp, 1); |
| 1251 | EVP_PKEY_free(pktmp); | 1137 | EVP_PKEY_free(pktmp); |
| 1252 | 1138 | ||
| 1253 | if (!X509_set_issuer_name(x,X509_get_subject_name(x))) goto err; | 1139 | if (!X509_set_issuer_name(x, X509_get_subject_name(x))) |
| 1254 | if (X509_gmtime_adj(X509_get_notBefore(x),0) == NULL) goto err; | 1140 | goto err; |
| 1141 | if (X509_gmtime_adj(X509_get_notBefore(x), 0) == NULL) | ||
| 1142 | goto err; | ||
| 1255 | 1143 | ||
| 1256 | /* Lets just make it 12:00am GMT, Jan 1 1970 */ | 1144 | /* Lets just make it 12:00am GMT, Jan 1 1970 */ |
| 1257 | /* memcpy(x->cert_info->validity->notBefore,"700101120000Z",13); */ | 1145 | /* memcpy(x->cert_info->validity->notBefore,"700101120000Z",13); */ |
| 1258 | /* 28 days to be certified */ | 1146 | /* 28 days to be certified */ |
| 1259 | 1147 | ||
| 1260 | if (X509_gmtime_adj(X509_get_notAfter(x),(long)60*60*24*days) == NULL) | 1148 | if (X509_gmtime_adj(X509_get_notAfter(x), (long) 60 * 60 * 24 * days) == NULL) |
| 1261 | goto err; | 1149 | goto err; |
| 1262 | 1150 | ||
| 1263 | if (!X509_set_pubkey(x,pkey)) goto err; | 1151 | if (!X509_set_pubkey(x, pkey)) |
| 1264 | if (clrext) | 1152 | goto err; |
| 1265 | { | 1153 | if (clrext) { |
| 1266 | while (X509_get_ext_count(x) > 0) X509_delete_ext(x, 0); | 1154 | while (X509_get_ext_count(x) > 0) |
| 1267 | } | 1155 | X509_delete_ext(x, 0); |
| 1268 | if (conf) | 1156 | } |
| 1269 | { | 1157 | if (conf) { |
| 1270 | X509V3_CTX ctx; | 1158 | X509V3_CTX ctx; |
| 1271 | X509_set_version(x,2); /* version 3 certificate */ | 1159 | X509_set_version(x, 2); /* version 3 certificate */ |
| 1272 | X509V3_set_ctx(&ctx, x, x, NULL, NULL, 0); | 1160 | X509V3_set_ctx(&ctx, x, x, NULL, NULL, 0); |
| 1273 | X509V3_set_nconf(&ctx, conf); | 1161 | X509V3_set_nconf(&ctx, conf); |
| 1274 | if (!X509V3_EXT_add_nconf(conf, &ctx, section, x)) goto err; | 1162 | if (!X509V3_EXT_add_nconf(conf, &ctx, section, x)) |
| 1275 | } | 1163 | goto err; |
| 1276 | if (!X509_sign(x,pkey,digest)) goto err; | 1164 | } |
| 1165 | if (!X509_sign(x, pkey, digest)) | ||
| 1166 | goto err; | ||
| 1277 | return 1; | 1167 | return 1; |
| 1278 | err: | 1168 | err: |
| 1279 | ERR_print_errors(bio_err); | 1169 | ERR_print_errors(bio_err); |
| 1280 | return 0; | 1170 | return 0; |
| 1281 | } | 1171 | } |
| 1282 | 1172 | ||
| 1283 | static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt) | 1173 | static int |
| 1174 | purpose_print(BIO * bio, X509 * cert, X509_PURPOSE * pt) | ||
| 1284 | { | 1175 | { |
| 1285 | int id, i, idret; | 1176 | int id, i, idret; |
| 1286 | char *pname; | 1177 | char *pname; |
| 1287 | id = X509_PURPOSE_get_id(pt); | 1178 | id = X509_PURPOSE_get_id(pt); |
| 1288 | pname = X509_PURPOSE_get0_name(pt); | 1179 | pname = X509_PURPOSE_get0_name(pt); |
| 1289 | for (i = 0; i < 2; i++) | 1180 | for (i = 0; i < 2; i++) { |
| 1290 | { | ||
| 1291 | idret = X509_check_purpose(cert, id, i); | 1181 | idret = X509_check_purpose(cert, id, i); |
| 1292 | BIO_printf(bio, "%s%s : ", pname, i ? " CA" : ""); | 1182 | BIO_printf(bio, "%s%s : ", pname, i ? " CA" : ""); |
| 1293 | if (idret == 1) BIO_printf(bio, "Yes\n"); | 1183 | if (idret == 1) |
| 1294 | else if (idret == 0) BIO_printf(bio, "No\n"); | 1184 | BIO_printf(bio, "Yes\n"); |
| 1295 | else BIO_printf(bio, "Yes (WARNING code=%d)\n", idret); | 1185 | else if (idret == 0) |
| 1296 | } | 1186 | BIO_printf(bio, "No\n"); |
| 1187 | else | ||
| 1188 | BIO_printf(bio, "Yes (WARNING code=%d)\n", idret); | ||
| 1189 | } | ||
| 1297 | return 1; | 1190 | return 1; |
| 1298 | } | 1191 | } |
