diff options
| author | jsing <> | 2023-06-21 07:18:10 +0000 |
|---|---|---|
| committer | jsing <> | 2023-06-21 07:18:10 +0000 |
| commit | 49d358ba4102b545829d23eeead5528ff3342df4 (patch) | |
| tree | 2f649e3f5d497090c895685da8ae5b87246da2df | |
| parent | a88d085da8637994f920a65e914fe4811644321e (diff) | |
| download | openbsd-49d358ba4102b545829d23eeead5528ff3342df4.tar.gz openbsd-49d358ba4102b545829d23eeead5528ff3342df4.tar.bz2 openbsd-49d358ba4102b545829d23eeead5528ff3342df4.zip | |
Add tests for BN_sqr() corner cases.
Test BN_sqr() with a newly allocated BN, a BN explicitly set to zero and
small values that fit in a single BN_ULONG.
| -rw-r--r-- | src/regress/lib/libcrypto/bn/bn_mul_div.c | 82 |
1 files changed, 81 insertions, 1 deletions
diff --git a/src/regress/lib/libcrypto/bn/bn_mul_div.c b/src/regress/lib/libcrypto/bn/bn_mul_div.c index 810c7cde19..625d5e318e 100644 --- a/src/regress/lib/libcrypto/bn/bn_mul_div.c +++ b/src/regress/lib/libcrypto/bn/bn_mul_div.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: bn_mul_div.c,v 1.6 2023/04/11 05:53:53 jsing Exp $ */ | 1 | /* $OpenBSD: bn_mul_div.c,v 1.7 2023/06/21 07:18:10 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2023 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2023 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -405,6 +405,84 @@ benchmark_bn_mul_sqr(void) | |||
| 405 | } | 405 | } |
| 406 | } | 406 | } |
| 407 | 407 | ||
| 408 | static int | ||
| 409 | test_bn_sqr(void) | ||
| 410 | { | ||
| 411 | BN_CTX *bn_ctx = NULL; | ||
| 412 | BIGNUM *a, *r; | ||
| 413 | int failed = 1; | ||
| 414 | |||
| 415 | if ((bn_ctx = BN_CTX_new()) == NULL) | ||
| 416 | errx(1, "BN_CTX_new"); | ||
| 417 | |||
| 418 | BN_CTX_start(bn_ctx); | ||
| 419 | |||
| 420 | if ((a = BN_CTX_get(bn_ctx)) == NULL) | ||
| 421 | errx(1, "BN_new"); | ||
| 422 | if ((r = BN_CTX_get(bn_ctx)) == NULL) | ||
| 423 | errx(1, "BN_new"); | ||
| 424 | |||
| 425 | /* Square of a new BN. */ | ||
| 426 | if (!BN_sqr(r, a, bn_ctx)) { | ||
| 427 | fprintf(stderr, "FAIL: BN_sqr() on new BN failed\n"); | ||
| 428 | goto failure; | ||
| 429 | } | ||
| 430 | if (!BN_is_zero(r)) { | ||
| 431 | fprintf(stderr, "FAIL: BN_sqr() on new BN is not zero\n"); | ||
| 432 | goto failure; | ||
| 433 | } | ||
| 434 | |||
| 435 | /* Square of BN that is explicitly set to zero. */ | ||
| 436 | if (!BN_set_word(a, 0)) { | ||
| 437 | fprintf(stderr, "FAIL: BN_set_word(0) failed\n"); | ||
| 438 | goto failure; | ||
| 439 | } | ||
| 440 | if (!BN_sqr(r, a, bn_ctx)) { | ||
| 441 | fprintf(stderr, "FAIL: BN_sqr(0) failed\n"); | ||
| 442 | goto failure; | ||
| 443 | } | ||
| 444 | if (!BN_is_zero(r)) { | ||
| 445 | fprintf(stderr, "FAIL: BN_sqr(0) != 0\n"); | ||
| 446 | goto failure; | ||
| 447 | } | ||
| 448 | |||
| 449 | /* Square of BN with value one. */ | ||
| 450 | if (!BN_set_word(a, 1)) { | ||
| 451 | fprintf(stderr, "FAIL: BN_set_word(1) failed\n"); | ||
| 452 | goto failure; | ||
| 453 | } | ||
| 454 | if (!BN_sqr(r, a, bn_ctx)) { | ||
| 455 | fprintf(stderr, "FAIL: BN_sqr(1) failed\n"); | ||
| 456 | goto failure; | ||
| 457 | } | ||
| 458 | if (BN_get_word(r) != 1) { | ||
| 459 | fprintf(stderr, "FAIL: BN_sqr(1) != 1\n"); | ||
| 460 | goto failure; | ||
| 461 | } | ||
| 462 | |||
| 463 | /* Square of BN with value two. */ | ||
| 464 | if (!BN_set_word(a, 2)) { | ||
| 465 | fprintf(stderr, "FAIL: BN_set_word(2) failed\n"); | ||
| 466 | goto failure; | ||
| 467 | } | ||
| 468 | if (!BN_sqr(r, a, bn_ctx)) { | ||
| 469 | fprintf(stderr, "FAIL: BN_sqr(2) failed\n"); | ||
| 470 | goto failure; | ||
| 471 | } | ||
| 472 | if (BN_get_word(r) != 4) { | ||
| 473 | fprintf(stderr, "FAIL: BN_sqr(2) != 4\n"); | ||
| 474 | goto failure; | ||
| 475 | } | ||
| 476 | |||
| 477 | failed = 0; | ||
| 478 | |||
| 479 | failure: | ||
| 480 | BN_CTX_end(bn_ctx); | ||
| 481 | BN_CTX_free(bn_ctx); | ||
| 482 | |||
| 483 | return failed; | ||
| 484 | } | ||
| 485 | |||
| 408 | int | 486 | int |
| 409 | main(int argc, char **argv) | 487 | main(int argc, char **argv) |
| 410 | { | 488 | { |
| @@ -413,6 +491,8 @@ main(int argc, char **argv) | |||
| 413 | if (argc == 2 && strcmp(argv[1], "--benchmark") == 0) | 491 | if (argc == 2 && strcmp(argv[1], "--benchmark") == 0) |
| 414 | benchmark = 1; | 492 | benchmark = 1; |
| 415 | 493 | ||
| 494 | failed |= test_bn_sqr(); | ||
| 495 | |||
| 416 | if (benchmark && !failed) | 496 | if (benchmark && !failed) |
| 417 | benchmark_bn_mul_sqr(); | 497 | benchmark_bn_mul_sqr(); |
| 418 | 498 | ||
