diff options
Diffstat (limited to '')
| -rw-r--r-- | src/regress/lib/libcrypto/evp/evp_test.c | 133 |
1 files changed, 132 insertions, 1 deletions
diff --git a/src/regress/lib/libcrypto/evp/evp_test.c b/src/regress/lib/libcrypto/evp/evp_test.c index eff071fa51..88eb978ef3 100644 --- a/src/regress/lib/libcrypto/evp/evp_test.c +++ b/src/regress/lib/libcrypto/evp/evp_test.c | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | /* $OpenBSD: evp_test.c,v 1.7 2023/09/29 06:53:05 tb Exp $ */ | 1 | /* $OpenBSD: evp_test.c,v 1.8 2023/11/27 22:29:51 tb Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2022 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2022 Joel Sing <jsing@openbsd.org> |
| 4 | * Copyright (c) 2023 Theo Buehler <tb@openbsd.org> | ||
| 4 | * | 5 | * |
| 5 | * Permission to use, copy, modify, and distribute this software for any | 6 | * Permission to use, copy, modify, and distribute this software for any |
| 6 | * purpose with or without fee is hereby granted, provided that the above | 7 | * purpose with or without fee is hereby granted, provided that the above |
| @@ -17,6 +18,7 @@ | |||
| 17 | 18 | ||
| 18 | #include <assert.h> | 19 | #include <assert.h> |
| 19 | #include <stdio.h> | 20 | #include <stdio.h> |
| 21 | #include <string.h> | ||
| 20 | 22 | ||
| 21 | #include <openssl/evp.h> | 23 | #include <openssl/evp.h> |
| 22 | #include <openssl/ossl_typ.h> | 24 | #include <openssl/ossl_typ.h> |
| @@ -404,6 +406,133 @@ evp_pkey_iv_len_test(void) | |||
| 404 | return failure; | 406 | return failure; |
| 405 | } | 407 | } |
| 406 | 408 | ||
| 409 | struct do_all_arg { | ||
| 410 | const char *previous; | ||
| 411 | int failure; | ||
| 412 | }; | ||
| 413 | |||
| 414 | static void | ||
| 415 | evp_do_all_cb_common(const char *descr, const void *ptr, const char *from, | ||
| 416 | const char *to, struct do_all_arg *arg) | ||
| 417 | { | ||
| 418 | const char *previous = arg->previous; | ||
| 419 | |||
| 420 | assert(from != NULL); | ||
| 421 | arg->previous = from; | ||
| 422 | |||
| 423 | if (ptr == NULL && to == NULL) { | ||
| 424 | arg->failure |= 1; | ||
| 425 | fprintf(stderr, "FAIL: %s %s: method and alias both NULL\n", | ||
| 426 | descr, from); | ||
| 427 | } | ||
| 428 | if (ptr != NULL && to != NULL) { | ||
| 429 | arg->failure |= 1; | ||
| 430 | fprintf(stderr, "FAIL: %s %s has method and alias \"%s\"\n", | ||
| 431 | descr, from, to); | ||
| 432 | } | ||
| 433 | |||
| 434 | if (previous == NULL) | ||
| 435 | return; | ||
| 436 | |||
| 437 | if (strcmp(previous, from) >= 0) { | ||
| 438 | arg->failure |= 1; | ||
| 439 | fprintf(stderr, "FAIL: %ss %s and %s out of order\n", descr, | ||
| 440 | previous, from); | ||
| 441 | } | ||
| 442 | arg->previous = from; | ||
| 443 | } | ||
| 444 | |||
| 445 | static void | ||
| 446 | evp_cipher_do_all_cb(const EVP_CIPHER *cipher, const char *from, const char *to, | ||
| 447 | void *arg) | ||
| 448 | { | ||
| 449 | evp_do_all_cb_common("cipher", cipher, from, to, arg); | ||
| 450 | } | ||
| 451 | |||
| 452 | static void | ||
| 453 | evp_md_do_all_cb(const EVP_MD *md, const char *from, const char *to, void *arg) | ||
| 454 | { | ||
| 455 | evp_do_all_cb_common("digest", md, from, to, arg); | ||
| 456 | } | ||
| 457 | |||
| 458 | static int | ||
| 459 | evp_do_all_test(void) | ||
| 460 | { | ||
| 461 | struct do_all_arg arg; | ||
| 462 | int failure = 0; | ||
| 463 | |||
| 464 | memset(&arg, 0, sizeof(arg)); | ||
| 465 | /* XXX - replace with EVP_CIPHER_do_all() after next bump. */ | ||
| 466 | EVP_CIPHER_do_all_sorted(evp_cipher_do_all_cb, &arg); | ||
| 467 | failure |= arg.failure; | ||
| 468 | |||
| 469 | memset(&arg, 0, sizeof(arg)); | ||
| 470 | /* XXX - replace with EVP_MD_do_all() after next bump. */ | ||
| 471 | EVP_MD_do_all_sorted(evp_md_do_all_cb, &arg); | ||
| 472 | failure |= arg.failure; | ||
| 473 | |||
| 474 | return failure; | ||
| 475 | } | ||
| 476 | |||
| 477 | static void | ||
| 478 | evp_cipher_aliases_cb(const EVP_CIPHER *cipher, const char *from, const char *to, | ||
| 479 | void *arg) | ||
| 480 | { | ||
| 481 | struct do_all_arg *do_all = arg; | ||
| 482 | const EVP_CIPHER *from_cipher, *to_cipher; | ||
| 483 | |||
| 484 | if (to == NULL) | ||
| 485 | return; | ||
| 486 | |||
| 487 | from_cipher = EVP_get_cipherbyname(from); | ||
| 488 | to_cipher = EVP_get_cipherbyname(to); | ||
| 489 | |||
| 490 | if (from_cipher != NULL && from_cipher == to_cipher) | ||
| 491 | return; | ||
| 492 | |||
| 493 | fprintf(stderr, "FAIL: cipher mismatch from \"%s\" to \"%s\": " | ||
| 494 | "from: %p, to: %p\n", from, to, from_cipher, to_cipher); | ||
| 495 | do_all->failure |= 1; | ||
| 496 | } | ||
| 497 | |||
| 498 | static void | ||
| 499 | evp_digest_aliases_cb(const EVP_MD *digest, const char *from, const char *to, | ||
| 500 | void *arg) | ||
| 501 | { | ||
| 502 | struct do_all_arg *do_all = arg; | ||
| 503 | const EVP_MD *from_digest, *to_digest; | ||
| 504 | |||
| 505 | if (to == NULL) | ||
| 506 | return; | ||
| 507 | |||
| 508 | from_digest = EVP_get_digestbyname(from); | ||
| 509 | to_digest = EVP_get_digestbyname(to); | ||
| 510 | |||
| 511 | if (from_digest != NULL && from_digest == to_digest) | ||
| 512 | return; | ||
| 513 | |||
| 514 | fprintf(stderr, "FAIL: digest mismatch from \"%s\" to \"%s\": " | ||
| 515 | "from: %p, to: %p\n", from, to, from_digest, to_digest); | ||
| 516 | do_all->failure |= 1; | ||
| 517 | } | ||
| 518 | |||
| 519 | static int | ||
| 520 | evp_aliases_test(void) | ||
| 521 | { | ||
| 522 | struct do_all_arg arg; | ||
| 523 | int failure = 0; | ||
| 524 | |||
| 525 | memset(&arg, 0, sizeof(arg)); | ||
| 526 | EVP_CIPHER_do_all(evp_cipher_aliases_cb, &arg); | ||
| 527 | failure |= arg.failure; | ||
| 528 | |||
| 529 | memset(&arg, 0, sizeof(arg)); | ||
| 530 | EVP_MD_do_all(evp_digest_aliases_cb, &arg); | ||
| 531 | failure |= arg.failure; | ||
| 532 | |||
| 533 | return failure; | ||
| 534 | } | ||
| 535 | |||
| 407 | int | 536 | int |
| 408 | main(int argc, char **argv) | 537 | main(int argc, char **argv) |
| 409 | { | 538 | { |
| @@ -412,6 +541,8 @@ main(int argc, char **argv) | |||
| 412 | failed |= evp_asn1_method_test(); | 541 | failed |= evp_asn1_method_test(); |
| 413 | failed |= evp_pkey_method_test(); | 542 | failed |= evp_pkey_method_test(); |
| 414 | failed |= evp_pkey_iv_len_test(); | 543 | failed |= evp_pkey_iv_len_test(); |
| 544 | failed |= evp_do_all_test(); | ||
| 545 | failed |= evp_aliases_test(); | ||
| 415 | 546 | ||
| 416 | OPENSSL_cleanup(); | 547 | OPENSSL_cleanup(); |
| 417 | 548 | ||
