|
8 | 8 |
|
9 | 9 | from test.support import hashlib_helper
|
10 | 10 |
|
| 11 | +from _operator import _compare_digest as operator_compare_digest |
| 12 | + |
11 | 13 | try:
|
12 | 14 | from _hashlib import HMAC as C_HMAC
|
13 | 15 | from _hashlib import hmac_new as c_hmac_new
|
| 16 | + from _hashlib import compare_digest as openssl_compare_digest |
14 | 17 | except ImportError:
|
15 | 18 | C_HMAC = None
|
16 | 19 | c_hmac_new = None
|
| 20 | + openssl_compare_digest = None |
17 | 21 |
|
18 | 22 |
|
19 | 23 | def ignore_warning(func):
|
@@ -505,110 +509,124 @@ def test_equality_new(self):
|
505 | 509 |
|
506 | 510 | class CompareDigestTestCase(unittest.TestCase):
|
507 | 511 |
|
508 |
| - def test_compare_digest(self): |
| 512 | + def test_hmac_compare_digest(self): |
| 513 | + self._test_compare_digest(hmac.compare_digest) |
| 514 | + if openssl_compare_digest is not None: |
| 515 | + self.assertIs(hmac.compare_digest, openssl_compare_digest) |
| 516 | + else: |
| 517 | + self.assertIs(hmac.compare_digest, operator_compare_digest) |
| 518 | + |
| 519 | + def test_operator_compare_digest(self): |
| 520 | + self._test_compare_digest(operator_compare_digest) |
| 521 | + |
| 522 | + @unittest.skipIf(openssl_compare_digest is None, "test requires _hashlib") |
| 523 | + def test_openssl_compare_digest(self): |
| 524 | + self._test_compare_digest(openssl_compare_digest) |
| 525 | + |
| 526 | + def _test_compare_digest(self, compare_digest): |
509 | 527 | # Testing input type exception handling
|
510 | 528 | a, b = 100, 200
|
511 |
| - self.assertRaises(TypeError, hmac.compare_digest, a, b) |
| 529 | + self.assertRaises(TypeError, compare_digest, a, b) |
512 | 530 | a, b = 100, b"foobar"
|
513 |
| - self.assertRaises(TypeError, hmac.compare_digest, a, b) |
| 531 | + self.assertRaises(TypeError, compare_digest, a, b) |
514 | 532 | a, b = b"foobar", 200
|
515 |
| - self.assertRaises(TypeError, hmac.compare_digest, a, b) |
| 533 | + self.assertRaises(TypeError, compare_digest, a, b) |
516 | 534 | a, b = "foobar", b"foobar"
|
517 |
| - self.assertRaises(TypeError, hmac.compare_digest, a, b) |
| 535 | + self.assertRaises(TypeError, compare_digest, a, b) |
518 | 536 | a, b = b"foobar", "foobar"
|
519 |
| - self.assertRaises(TypeError, hmac.compare_digest, a, b) |
| 537 | + self.assertRaises(TypeError, compare_digest, a, b) |
520 | 538 |
|
521 | 539 | # Testing bytes of different lengths
|
522 | 540 | a, b = b"foobar", b"foo"
|
523 |
| - self.assertFalse(hmac.compare_digest(a, b)) |
| 541 | + self.assertFalse(compare_digest(a, b)) |
524 | 542 | a, b = b"\xde\xad\xbe\xef", b"\xde\xad"
|
525 |
| - self.assertFalse(hmac.compare_digest(a, b)) |
| 543 | + self.assertFalse(compare_digest(a, b)) |
526 | 544 |
|
527 | 545 | # Testing bytes of same lengths, different values
|
528 | 546 | a, b = b"foobar", b"foobaz"
|
529 |
| - self.assertFalse(hmac.compare_digest(a, b)) |
| 547 | + self.assertFalse(compare_digest(a, b)) |
530 | 548 | a, b = b"\xde\xad\xbe\xef", b"\xab\xad\x1d\xea"
|
531 |
| - self.assertFalse(hmac.compare_digest(a, b)) |
| 549 | + self.assertFalse(compare_digest(a, b)) |
532 | 550 |
|
533 | 551 | # Testing bytes of same lengths, same values
|
534 | 552 | a, b = b"foobar", b"foobar"
|
535 |
| - self.assertTrue(hmac.compare_digest(a, b)) |
| 553 | + self.assertTrue(compare_digest(a, b)) |
536 | 554 | a, b = b"\xde\xad\xbe\xef", b"\xde\xad\xbe\xef"
|
537 |
| - self.assertTrue(hmac.compare_digest(a, b)) |
| 555 | + self.assertTrue(compare_digest(a, b)) |
538 | 556 |
|
539 | 557 | # Testing bytearrays of same lengths, same values
|
540 | 558 | a, b = bytearray(b"foobar"), bytearray(b"foobar")
|
541 |
| - self.assertTrue(hmac.compare_digest(a, b)) |
| 559 | + self.assertTrue(compare_digest(a, b)) |
542 | 560 |
|
543 | 561 | # Testing bytearrays of different lengths
|
544 | 562 | a, b = bytearray(b"foobar"), bytearray(b"foo")
|
545 |
| - self.assertFalse(hmac.compare_digest(a, b)) |
| 563 | + self.assertFalse(compare_digest(a, b)) |
546 | 564 |
|
547 | 565 | # Testing bytearrays of same lengths, different values
|
548 | 566 | a, b = bytearray(b"foobar"), bytearray(b"foobaz")
|
549 |
| - self.assertFalse(hmac.compare_digest(a, b)) |
| 567 | + self.assertFalse(compare_digest(a, b)) |
550 | 568 |
|
551 | 569 | # Testing byte and bytearray of same lengths, same values
|
552 | 570 | a, b = bytearray(b"foobar"), b"foobar"
|
553 |
| - self.assertTrue(hmac.compare_digest(a, b)) |
554 |
| - self.assertTrue(hmac.compare_digest(b, a)) |
| 571 | + self.assertTrue(compare_digest(a, b)) |
| 572 | + self.assertTrue(compare_digest(b, a)) |
555 | 573 |
|
556 | 574 | # Testing byte bytearray of different lengths
|
557 | 575 | a, b = bytearray(b"foobar"), b"foo"
|
558 |
| - self.assertFalse(hmac.compare_digest(a, b)) |
559 |
| - self.assertFalse(hmac.compare_digest(b, a)) |
| 576 | + self.assertFalse(compare_digest(a, b)) |
| 577 | + self.assertFalse(compare_digest(b, a)) |
560 | 578 |
|
561 | 579 | # Testing byte and bytearray of same lengths, different values
|
562 | 580 | a, b = bytearray(b"foobar"), b"foobaz"
|
563 |
| - self.assertFalse(hmac.compare_digest(a, b)) |
564 |
| - self.assertFalse(hmac.compare_digest(b, a)) |
| 581 | + self.assertFalse(compare_digest(a, b)) |
| 582 | + self.assertFalse(compare_digest(b, a)) |
565 | 583 |
|
566 | 584 | # Testing str of same lengths
|
567 | 585 | a, b = "foobar", "foobar"
|
568 |
| - self.assertTrue(hmac.compare_digest(a, b)) |
| 586 | + self.assertTrue(compare_digest(a, b)) |
569 | 587 |
|
570 | 588 | # Testing str of different lengths
|
571 | 589 | a, b = "foo", "foobar"
|
572 |
| - self.assertFalse(hmac.compare_digest(a, b)) |
| 590 | + self.assertFalse(compare_digest(a, b)) |
573 | 591 |
|
574 | 592 | # Testing bytes of same lengths, different values
|
575 | 593 | a, b = "foobar", "foobaz"
|
576 |
| - self.assertFalse(hmac.compare_digest(a, b)) |
| 594 | + self.assertFalse(compare_digest(a, b)) |
577 | 595 |
|
578 | 596 | # Testing error cases
|
579 | 597 | a, b = "foobar", b"foobar"
|
580 |
| - self.assertRaises(TypeError, hmac.compare_digest, a, b) |
| 598 | + self.assertRaises(TypeError, compare_digest, a, b) |
581 | 599 | a, b = b"foobar", "foobar"
|
582 |
| - self.assertRaises(TypeError, hmac.compare_digest, a, b) |
| 600 | + self.assertRaises(TypeError, compare_digest, a, b) |
583 | 601 | a, b = b"foobar", 1
|
584 |
| - self.assertRaises(TypeError, hmac.compare_digest, a, b) |
| 602 | + self.assertRaises(TypeError, compare_digest, a, b) |
585 | 603 | a, b = 100, 200
|
586 |
| - self.assertRaises(TypeError, hmac.compare_digest, a, b) |
| 604 | + self.assertRaises(TypeError, compare_digest, a, b) |
587 | 605 | a, b = "fooä", "fooä"
|
588 |
| - self.assertRaises(TypeError, hmac.compare_digest, a, b) |
| 606 | + self.assertRaises(TypeError, compare_digest, a, b) |
589 | 607 |
|
590 | 608 | # subclasses are supported by ignore __eq__
|
591 | 609 | class mystr(str):
|
592 | 610 | def __eq__(self, other):
|
593 | 611 | return False
|
594 | 612 |
|
595 | 613 | a, b = mystr("foobar"), mystr("foobar")
|
596 |
| - self.assertTrue(hmac.compare_digest(a, b)) |
| 614 | + self.assertTrue(compare_digest(a, b)) |
597 | 615 | a, b = mystr("foobar"), "foobar"
|
598 |
| - self.assertTrue(hmac.compare_digest(a, b)) |
| 616 | + self.assertTrue(compare_digest(a, b)) |
599 | 617 | a, b = mystr("foobar"), mystr("foobaz")
|
600 |
| - self.assertFalse(hmac.compare_digest(a, b)) |
| 618 | + self.assertFalse(compare_digest(a, b)) |
601 | 619 |
|
602 | 620 | class mybytes(bytes):
|
603 | 621 | def __eq__(self, other):
|
604 | 622 | return False
|
605 | 623 |
|
606 | 624 | a, b = mybytes(b"foobar"), mybytes(b"foobar")
|
607 |
| - self.assertTrue(hmac.compare_digest(a, b)) |
| 625 | + self.assertTrue(compare_digest(a, b)) |
608 | 626 | a, b = mybytes(b"foobar"), b"foobar"
|
609 |
| - self.assertTrue(hmac.compare_digest(a, b)) |
| 627 | + self.assertTrue(compare_digest(a, b)) |
610 | 628 | a, b = mybytes(b"foobar"), mybytes(b"foobaz")
|
611 |
| - self.assertFalse(hmac.compare_digest(a, b)) |
| 629 | + self.assertFalse(compare_digest(a, b)) |
612 | 630 |
|
613 | 631 |
|
614 | 632 | if __name__ == "__main__":
|
|
0 commit comments