|
14 | 14 | from tlslite.utils.cryptomath import * |
15 | 15 | from tlslite.errors import * |
16 | 16 | from tlslite.utils.keyfactory import parsePEMKey, generateRSAKey |
17 | | -from tlslite.utils.compat import a2b_hex, remove_whitespace, b2a_hex |
| 17 | +from tlslite.utils.compat import a2b_hex, remove_whitespace |
18 | 18 | try: |
19 | 19 | import mock |
20 | 20 | from mock import call |
@@ -3580,6 +3580,337 @@ def test_normal_decrypt(self): |
3580 | 3580 |
|
3581 | 3581 | self.assertEqual(msg, plaintext) |
3582 | 3582 |
|
| 3583 | + def test_valid_empty(self): |
| 3584 | + ciphertext = a2b_hex(remove_whitespace(""" |
| 3585 | +31529676f990b750e8b742babe933346bd77610e7ea74a6b815bb06ee3c91a37 |
| 3586 | +6848a4d8b148c2882d65ca0213e68600354b68b7790110ed744e34786fa5f7b7 |
| 3587 | +03144a12f7f7a4d5402ef048f248fec83dede7f931bcb872054fd25cfe427984 |
| 3588 | +0352f2c495bcb511cf20269d8177baba474e790a2d16b655c4e07b28ad6a61e8 |
| 3589 | +1ce5db3845cb5395aa4affa413e3f1bdecf3fa0aa3073b40d23e9bb0aa7cf359 |
| 3590 | +5bd73d1d38a2661d70a8e4ef525fd446f496ddbe5413657c06d51464977421e0 |
| 3591 | +57387a92a5b9428d02d1a8fb0d50a1623e1b1d0685c371db24b63dd6a4aebf0e |
| 3592 | +31c637997ae26dbd3441b9f7dce164d948a156aee8c9dc4049286244c85178f7 |
| 3593 | +b4f49d3ba0870f7c71f8f546a902a559fd860ed61e550c4143907d118a15f317 |
| 3594 | +e9ccd84ce3893db372fff1d9a9e5182258d9f9d840a6b75b1618ce4999734d14 |
| 3595 | +7f5334763c0b87ca1c8e57c6f923cff9c7107eea45cf5d4fae0ec0b94e892a6f |
| 3596 | +6790b07f9e24bff041620b1fb47bcefb956ba61949fea02db6ec785b4070e84f |
| 3597 | +390234d83d17dbf89819d5c6b52a488f36cd9f8d81e1811bbadbd6756b9ec5fb |
| 3598 | +dcc1d32728efc8ef4318463996c0f829f9064436580f9502af97b1e40c854b0e |
| 3599 | +f0a20da4368e5b94327b62c27a8a1cf6103bc780e06e5ee5232624fe5bee59fe |
| 3600 | +79a3956a7d782380a3398eab6d11f618fc2c698eb28a6029f846c378ecf2d102 |
| 3601 | +""")) |
| 3602 | + self.assertEqual(len(ciphertext), numBytes(self.pub_key.n)) |
| 3603 | + |
| 3604 | + # sanity check that the decrypted ciphertext is valid |
| 3605 | + dec = self.priv_key._raw_private_key_op_bytes(ciphertext) |
| 3606 | + self.assertEqual(dec[0:2], b'\x00\x02') |
| 3607 | + self.assertTrue(all(i != 0 for i in dec[2:-1])) |
| 3608 | + self.assertEqual(dec[-1:], b'\x00') |
| 3609 | + |
| 3610 | + plaintext = b'' |
| 3611 | + |
| 3612 | + msg = self.priv_key.decrypt(ciphertext) |
| 3613 | + |
| 3614 | + self.assertEqual(msg, plaintext) |
| 3615 | + |
| 3616 | + def test_valid_with_zero_padded_ciphertext(self): |
| 3617 | + ciphertext = a2b_hex(remove_whitespace(""" |
| 3618 | +00c40ab6440e544ced2c0bbd3f6db05fd0068eb8e9ed83099cf5843ea3d2cfd6 |
| 3619 | +adf7ede1c61f1974a5696f503205346b51d7b00eca20432f0082abf2a3cd6743 |
| 3620 | +3c5f860b32f1f6fe9985dcec65e7f19949999e142bc76ce5b2dcb80615d379e9 |
| 3621 | +715ac24ef77fbbe3d969131c0f39666b3ad641fac669d53542ae9389d86f6f28 |
| 3622 | +fe63ba272b1f6bd015b4187b6e2014fb74fc32bf4a2e48abfbfc0470956c7379 |
| 3623 | +1c1d81db6c024f4d1cc81ba01be114b41ddb95572a832086c33fcaf90b32358b |
| 3624 | +5b13ef0bea74a6dd01d5c351a231d4e7d15d121cffff023e0c2bdac11c982fb2 |
| 3625 | +419955a495e8dac3d84cbd8d71ac380072a02bb026ed61151f0d202b3133e603 |
| 3626 | +0a2db7560ca926de3927f1ed578522edac441071498b4565fb0c8071886b79fc |
| 3627 | +9e8d8c14bec1d7a6106441c16e9b2bd3090dad1fe82d0e43f40b036f00506cea |
| 3628 | +36af61d5f10aac0d0591c12107ceb8999787e34943974025b9c47d16cb523a58 |
| 3629 | +c5828da975fa74e431ace2dcf934e21613f877f65c67b729ca79ee25f27ea07a |
| 3630 | +74ff38c3b25bcaf22dfe2e9e5d0adecaa01d98d55b5cd0b20f80e672d1bedf4a |
| 3631 | +cda32184db0f5ce89dd64f538f038cbefb625347ef77a16ab9d48dbee9549f1c |
| 3632 | +8d55b5470a5c6693bec146f0190bbca5b93a66667150a661851add729b24dca7 |
| 3633 | +8a1f051093ecd40a0ac43a593101f579597b7638065bdff4191bdc0cae12c052 |
| 3634 | +""")) |
| 3635 | + self.assertEqual(len(ciphertext), numBytes(self.pub_key.n)) |
| 3636 | + |
| 3637 | + # sanity check that the decrypted ciphertext is valid |
| 3638 | + dec = self.priv_key._raw_private_key_op_bytes(ciphertext) |
| 3639 | + self.assertEqual(dec[0:2], b'\x00\x02') |
| 3640 | + self.assertTrue(all(i != 0 for i in dec[2:-12])) |
| 3641 | + self.assertEqual(dec[-12:], b'\x00lorem ipsum') |
| 3642 | + |
| 3643 | + plaintext = b'lorem ipsum' |
| 3644 | + |
| 3645 | + msg = self.priv_key.decrypt(ciphertext) |
| 3646 | + |
| 3647 | + self.assertEqual(msg, plaintext) |
| 3648 | + |
| 3649 | + def test_invalid_decrypting_to_empty(self): |
| 3650 | + ciphertext = a2b_hex(remove_whitespace(""" |
| 3651 | +577d6457be536bf1fac80993f5f76e797607227a42e325deb246bf8bf475e1d1 |
| 3652 | +819c5dfb6d288eb131ead32238b7a8796b76517e78f979b34f5c2272ae4d40e6 |
| 3653 | +0b265ad3c897ecc4d26587c8ac32db431ed8d2996d64edadf7719baa4b4292b3 |
| 3654 | +4e042f26693c90f04addffe8ba0e3c3f1cbabafbfd2e3a6bcd9203e9a1cebb1c |
| 3655 | +968caa73430556ea5743ecfa49edab656bfeadf7c114105f3e222fe60983d55b |
| 3656 | +c48cb738c5a307353281c573be6ffc69630185ae6de695c35fbf8cbc24b5590f |
| 3657 | +5e511adb68a38a37bc6dc74a5052e5063f20c30d2f331dafb07797f9e577cb3d |
| 3658 | +18280f318fe2a6116cef6846b7a8384663a5aaac32693b9b159f506d8812f76a |
| 3659 | +1ee405abb1e5e439a0aee4d1b51f435ea2d043fe4f4ef1a6ccf069201ceb7978 |
| 3660 | +139eed579b01bcb5b4e525cce6b179f72fcb6aabbd916538d580ce3e1ed57a4d |
| 3661 | +3433efd826fffd75d8fdc43de69afab66dc32a4f4f81b14c0650a097709265e2 |
| 3662 | +6b57f233008013b275e7b58817b02f4473a99bb48ec7d9562bc78d1f032340d3 |
| 3663 | +083b762f19fb204be7f26d7ceef6c7ff712479a6cdf18123586b87c2751493f1 |
| 3664 | +bb2585626b1aa486a2ec50a197728cf24d3968e6d9b9bdfedfda91db292abdef |
| 3665 | +fda2334c85fd359e65e7e662193b6feb5df6d70c7727880150c785d809ba3ffc |
| 3666 | +e3b2701aad313da60cd4affe85e85d32c4fe271b0b107e529a22cffbb01871c8 |
| 3667 | +""")) |
| 3668 | + self.assertEqual(len(ciphertext), numBytes(self.pub_key.n)) |
| 3669 | + |
| 3670 | + # sanity check that the decrypted ciphertext is invalid |
| 3671 | + dec = self.priv_key._raw_private_key_op_bytes(ciphertext) |
| 3672 | + self.assertNotEqual(dec[0:1], b'\x00') |
| 3673 | + self.assertNotEqual(dec[1:2], b'\x02') |
| 3674 | + self.assertNotEqual(dec[-1:], b'\x00') |
| 3675 | + |
| 3676 | + plaintext = b'' |
| 3677 | + |
| 3678 | + msg = self.priv_key.decrypt(ciphertext) |
| 3679 | + |
| 3680 | + self.assertEqual(msg, plaintext) |
| 3681 | + |
| 3682 | + def test_invalid_decrypting_to_max_length(self): |
| 3683 | + ciphertext = a2b_hex(remove_whitespace(""" |
| 3684 | +09be60b83b63aa1f2398c6ccd7ba602917dfffbc1a2ee01094221ef7140ba8b3 |
| 3685 | +64b4979b7d068be084d34b70309bc48103d9e7dc76c042d1063ce6d7239d3542 |
| 3686 | +ad511da821c6ad53dcaefdd9e950de889d1d462a5a8bcdda4e2ac579c0dc12ab |
| 3687 | +684a16a3c4075ec5062db79f95e5b436a8927fe7e3a795152cb6407faedf088a |
| 3688 | +e4531cca8482348a3c44267b1ea46fa3bfcb4754be735e434c4ef17b84f6fd6c |
| 3689 | +184e8c4adf91fbf00be6a6ff86351e6fd76c8929ef7fae14113370cbe6ba0181 |
| 3690 | +ef6970855a2cfde5b366a44bf0575e7e5d5354676b5429a6916bb7065c234174 |
| 3691 | +42150f8fa23a1ae284a27008980691eb886b693adb1bf4d38faae5037007900e |
| 3692 | +47124a695c67b51fe9e1e66153cb32fae0e7370151024fe49b2781e50ac5a31d |
| 3693 | +1c7de58923c0360ae61f4a3bcfd7839a104c23d95ddeb76bcaf2b1956f81c355 |
| 3694 | +aeb11a46b48762baf072318727e56d4e682a3b71898d3725b00a334c94cb1adc |
| 3695 | +cea81525b28c2a1c2b82950b93786ea5b893ffe6dc0932a95b064c838d6f04ea |
| 3696 | +a8334f92b0dec8c7bbc1a5900d7e7680c24e66867ec2b837e30be18083c6fb2b |
| 3697 | +fc67ace569989171f05d312ce97307b477379837351e9199528e88671a93e558 |
| 3698 | +68a577fb9eae76a2cbf3cc62c6aaabbee88cf6638012554ba92772e923fbe531 |
| 3699 | +fe8aa2036ee7230954ffa24e802a399f531c8cad0a78262442c92089f06b06c7 |
| 3700 | +""")) |
| 3701 | + self.assertEqual(len(ciphertext), numBytes(self.pub_key.n)) |
| 3702 | + # sanity check that the decrypted ciphertext is invalid |
| 3703 | + dec = self.priv_key._raw_private_key_op_bytes(ciphertext) |
| 3704 | + self.assertEqual( |
| 3705 | + dec[0:4], |
| 3706 | + b'\r\xfe\xa0t') |
| 3707 | + |
| 3708 | + plaintext = a2b_hex(remove_whitespace(""" |
| 3709 | +7a57bf4c557abe6bdd45ed471260ec2749e66710b707ff4e4761738dbe2cdc19 |
| 3710 | +267aec5070d2472f53ba0c86e8b607566c871b6c3de28772aa197e369fad293f |
| 3711 | +8218fd32178ecebe60cc7926e093bbdd629ed6a6a29b4a905eefe443f3621d89 |
| 3712 | +582a41bac7d4f6b77f9c935681e892d17b2261151a4b4244506cfc49ba578b97 |
| 3713 | +5840d88f637321d20c25950640d2b43aa660611cc07d016534324b84bada2244 |
| 3714 | +85488af08a8d54af1698babccd76b87218b074987273dd3746eacd2dee8068d0 |
| 3715 | +c4f5e8f219689d55deea3cccb86e52599cebf3777cab3bfc2da5ae31c9019973 |
| 3716 | +9ba5d5e01816f8f8a21c7f6b6acdada8a2b2ab4f32502d6296a365267a768378 |
| 3717 | +78d204a1b8cc5299708e9eb1b44d9663c75c9b8c17dd8f1a9f04109087e22329 |
| 3718 | +769fcc5fa65506a0f6294d8bf4a362559c497a36b2a5c55ee12213bd9c42a2dc |
| 3719 | +0f6f35176e194641dcfbb334b13924e6883b4f68c88d016ecdc67bafdeff4b2e |
| 3720 | +4122777726e06b0e37642d42090be622288ce11a8af4261b5d186092002e7d71 |
| 3721 | +cb43fc2182e4d341c610e6860904cbc526e74292aa1df81dd08d87b51a953c0b |
| 3722 | +e511346d604aa3a8e87f943db3e951a69cc4dcd1b996d3d8ab595aa9b7ca591a |
| 3723 | +e2e9b49798a9b98aa1c1c233f938937c88ad675e6297f36ba0fb161a8b42e9ee |
| 3724 | +9a98d8b781165ed75d30cc55d88e6df5c688c32390 |
| 3725 | +""")) |
| 3726 | + |
| 3727 | + msg = self.priv_key.decrypt(ciphertext) |
| 3728 | + |
| 3729 | + self.assertEqual(len(msg), numBytes(self.pub_key.n) - 1 - 1 - 8 - 1) |
| 3730 | + |
| 3731 | + self.assertEqual(msg, plaintext) |
| 3732 | + |
| 3733 | + def test_invalid_with_bad_version_byte(self): |
| 3734 | + ciphertext = a2b_hex(remove_whitespace(""" |
| 3735 | +0eb5e0c87c4ffffb760c8fac2a7f5b06f46301ab5b8374a59cc7006aa16e7f38 |
| 3736 | +f27d957a4b475b41975246ffb5f2387ffdb62565411733331a4522a07a70bd40 |
| 3737 | +ffe23f28f457be55a6cd1b6aab8c7127ec4b0c9d653c3d979fbd371854a80727 |
| 3738 | +c0546d9852ccd6220b32a9081f6687fd2262dc806e55964ac799cfba56c0be1a |
| 3739 | +9fb3d4f46161cc5f251ddf3579a87c48c086da786d953829e513a525a87d8896 |
| 3740 | +61606593600109a98159a91b606f138b9da1b2d427418d50647476fbdd17b521 |
| 3741 | +11ca1a2ff9896167277d158d82ade196ad52ea6d381a63748e0068b160331c9c |
| 3742 | +b27c20afbeb696c1db16ea145e96a6e54a825c87c10f85b0d92fc299e254aa7f |
| 3743 | +74c73f17bc704407c31dba9fbda37e31f1231d06744beacb82a0130a9e7d004b |
| 3744 | +ed7e7036e33f1c89bd8ed0833def8e946efb53a9ea4abda91f1e1ed44e884d8e |
| 3745 | +45ea692e8f7e2b0f698024c8ed7ade62b251dcb91b249e937a85f823e6978e01 |
| 3746 | +e8f7e9ed9c53f2f16d99afe58d3b77b3818aba64e139b3fcb0174542f348f9d2 |
| 3747 | +c47dc9d78902a28e1a6613397a0f5938b860a3f6cd44e3b74a37ccdeda248cde |
| 3748 | +ee4a39497d76722e6860127eefdd80f447e69279bf177c1cd6c27ddd3f2f8992 |
| 3749 | +4f21775df4824ece7f2a6f16266772a13669bfc04aa3b998ad03de17bbc27e62 |
| 3750 | +9a495052e3e7f0b7b1c06dd4b429585a663172ba20527ad5186447bb74b5f368 |
| 3751 | +""")) |
| 3752 | + self.assertEqual(len(ciphertext), numBytes(self.pub_key.n)) |
| 3753 | + |
| 3754 | + # sanity check that the decrypted ciphertext is invalid |
| 3755 | + dec = self.priv_key._raw_private_key_op_bytes(ciphertext) |
| 3756 | + self.assertEqual(dec[0:2], b'\x01\x02') |
| 3757 | + self.assertTrue(all(i != 0 for i in dec[2:-11])) |
| 3758 | + self.assertEqual(dec[-11:-10], b'\x00') |
| 3759 | + self.assertNotEqual(dec[-2:], b'\x59\x40') |
| 3760 | + |
| 3761 | + plaintext = a2b_hex(remove_whitespace(""" |
| 3762 | +8bf3b682d8b950055940 |
| 3763 | +""")) |
| 3764 | + self.assertEqual(len(plaintext), 10) |
| 3765 | + |
| 3766 | + msg = self.priv_key.decrypt(ciphertext) |
| 3767 | + |
| 3768 | + self.assertEqual(msg, plaintext) |
| 3769 | + |
| 3770 | + def test_invalid_with_wrong_padding_type(self): |
| 3771 | + ciphertext = a2b_hex(remove_whitespace(""" |
| 3772 | +714102bbe701855ec564853befd91262dc4cfbb3c417113c0c650b49c6878b10 |
| 3773 | +1a76ba4822bde7ca538a2726c6eb9272a3dbda84119ec107d86d2b3a49d82de9 |
| 3774 | +d176824f1c2d9cd9b432064c45dbfc60f1e71ec2772aef2669e756cae67ed757 |
| 3775 | +b528cccc4ac6f1437a2d4bbedefece1bb5c21381eb4aebc1670c5bd65d408a19 |
| 3776 | +c1329b9d9d236939da58a1285357e910edc83d428d1e5315c81cb070aecc24be |
| 3777 | +7fde807ce5d4f50dbe14478334c26be91ed4cb7335c63561b1a8c8c67e40844b |
| 3778 | +465fcf7df6e0df031572682427c62d3cd0c650ec5ef3875fd420516c5cb8089a |
| 3779 | +34757c81360dda37f7fbbd5ea9c8a54ff29f702741a0d496e268a8934b32cd16 |
| 3780 | +bea2aa2628397097df0ba08545b9b23bc103a08077745239de34eec09f63fdcb |
| 3781 | +f3aece33a796adbd8dba0705ee3a1092d51f18f195e896b9c35b1a185752c627 |
| 3782 | +55c4d9bf2069db141fddc6755c6927cae8d2811aef492f8324ca555b51a4eaf7 |
| 3783 | +3001ddf88918798df67138a5475fd881b79a158dbe7dd61f241680039a7ae312 |
| 3784 | +8a7b925ec7577cddbe116940e2f50ffa3ed36aee7e46ed6dc5b26e7c5f1d16cd |
| 3785 | +c199140742d3fe6bb7d2d4b74d0be675a3388c6fd6d09112dfdea93a701486e3 |
| 3786 | +8f28add60fb674ac141b389eb4e09153167596a96d2e6618d98593278d22f560 |
| 3787 | +5041882743ebafbeb18cdae093609ae6852498bedd8fb6b0a18ce358bfc9d6f2 |
| 3788 | +""")) |
| 3789 | + self.assertEqual(len(ciphertext), numBytes(self.pub_key.n)) |
| 3790 | + |
| 3791 | + # sanity check that the decrypted ciphertext is invalid |
| 3792 | + dec = self.priv_key._raw_private_key_op_bytes(ciphertext) |
| 3793 | + self.assertEqual(dec[0:2], b'\x00\x01') |
| 3794 | + self.assertTrue(all(i != 0 for i in dec[2:-11])) |
| 3795 | + self.assertEqual(dec[-11:-10], b'\x00') |
| 3796 | + self.assertNotEqual(dec[-2:], b'\x79\x0d') |
| 3797 | + |
| 3798 | + plaintext = a2b_hex(remove_whitespace(""" |
| 3799 | +630fbcef34c1b72f790d |
| 3800 | +""")) |
| 3801 | + self.assertEqual(len(plaintext), 10) |
| 3802 | + |
| 3803 | + msg = self.priv_key.decrypt(ciphertext) |
| 3804 | + |
| 3805 | + self.assertEqual(msg, plaintext) |
| 3806 | + |
| 3807 | + def test_with_zero_byte_in_first_byte_of_PS(self): |
| 3808 | + ciphertext = a2b_hex(remove_whitespace(""" |
| 3809 | +1dd961276ba110ba4fdaf4f177780cbcb6373d2ae6769417a32c9b02eb00a48b |
| 3810 | +427e7e6edefac562fc42c5e2216c885af0f76bcfaf3da4db54ce9db0e22c498c |
| 3811 | +71e146561c1bbf7ff6246ffc6b0bfcd107830790c07ed9aeda70f2ead9e95799 |
| 3812 | +2e3ed781e054f336e2ab08110f14ca3be11b92d77b0048c334d97d61c8bc4d82 |
| 3813 | +db9c7236973d9ba4da066643440333b5a9e905e799f966c9164907866d9e6af2 |
| 3814 | +d7f83466fe8409f24d5c9b3a06614af620087e838039355e65bde8f3ab7a8e06 |
| 3815 | +943613e00fd143e21ec2684ac07e1dfdef85da32188a97e7585a667f89694111 |
| 3816 | +6250f30e31bc0e2b20e536366e225759b12cdd578df18799dfee20b529189ad4 |
| 3817 | +9789f60ce3649431889d740641df90d1dc372a62b4d77f9f5f9677b4f96770b0 |
| 3818 | +7107ef37afe4e4dd6af4838ae18b61ce953eedcfc95d081951cbe0b097c6c334 |
| 3819 | +489cf46fbba26009d7ebc8ecaa0b155ac60e1f40cc381cd9c85ac7fb25f8458d |
| 3820 | +964bd6e1fc85d6e18bc0fa5491c6995fa7225dcfe43d6a12bde24343d16ce421 |
| 3821 | +46cf26a5ec1fd7fae5d829e1f274819a10445ac106f5a517ab89e62455c02469 |
| 3822 | +271812be18e972af7d5ba3079dc427f1b7ff7eda2d0cba55f28edef280f5d924 |
| 3823 | +3466d1c6f9c4b671777c75c9464e571e7115d97d0d86712781e6346a4472c98d |
| 3824 | +a976032ff1073850e7304b6bb4b60b019a7bd870c8d3fb26b212ddfd889b9fae |
| 3825 | +""")) |
| 3826 | + self.assertEqual(len(ciphertext), numBytes(self.pub_key.n)) |
| 3827 | + |
| 3828 | + # sanity check that the decrypted ciphertext is invalid |
| 3829 | + dec = self.priv_key._raw_private_key_op_bytes(ciphertext) |
| 3830 | + self.assertEqual(dec[0:3], b'\x00\x02\x00') |
| 3831 | + self.assertNotEqual(dec[-2:], b'\x60\xa8') |
| 3832 | + |
| 3833 | + plaintext = a2b_hex(remove_whitespace(""" |
| 3834 | +778f208b90bef0f260a8 |
| 3835 | +""")) |
| 3836 | + self.assertEqual(len(plaintext), 10) |
| 3837 | + |
| 3838 | + msg = self.priv_key.decrypt(ciphertext) |
| 3839 | + |
| 3840 | + self.assertEqual(msg, plaintext) |
| 3841 | + |
| 3842 | + def test_with_zero_byte_in_eight_byte_of_PS(self): |
| 3843 | + ciphertext = a2b_hex(remove_whitespace(""" |
| 3844 | +3d4477615f8b49c9453d31a5d5a228610d6d3e476737c163725106fa386440ff |
| 3845 | +23a9139f57977c09a1e885ddf2f180ddf0f0b0502ef60f0ff53d2ba444f03228 |
| 3846 | +20f11acdd70e48543bd8ddd40d00ad9214d03487b265910cf423dea905af9088 |
| 3847 | +36bf56ef872493b686aa15731714d1f0280e5cddad24ada53374c8aad063184d |
| 3848 | +62bbdc00efd4839b8f06de6c258d26149480b2fad6fcb2fc97cd78fb60305aa2 |
| 3849 | +54cf1186fa134741a2340dc1d5243423c82c442f3afd915241f317607a2e2236 |
| 3850 | +64601932e7b967d6793a7fde2819d475e2b8ab0117e3cc4854063a0c1ff1f5cd |
| 3851 | +9c9dc3e6c993d8861c11ee7155dd0ba2d4f47ff0ffc9c7fc8a891284789e5988 |
| 3852 | +806fe7b5f5ec5783861fef756ef7339380215de11337ec8f2379b293c3cacf2f |
| 3853 | +81691c1ad75c9223a6c8edfb0451373d0b759d9d701f547b3c46d3fe1f3d24d3 |
| 3854 | +3447a52bb55b9dd7050c41d11f3108ddccd5738a072905eb48067350e76a65f0 |
| 3855 | +d274b0f4bde004cb673b715d4ab01dded4b6b7f69e133135ffcad4b1776e3610 |
| 3856 | +830ae55a98d23610256865e305153ad7319ff905c16453297f5ebe64b8857bff |
| 3857 | +69c750d338368f6a55d73ae363a516fa4bf719cd01d46b609c134e3508d9616f |
| 3858 | +495ff2c869db7ad146376b102529c26407d8ffdedbfb005b7b220e0dcb089da3 |
| 3859 | +682c9af7c278472cc19b6523b09661fe6f165bd7b7765ca2524eefa3526397b0 |
| 3860 | +""")) |
| 3861 | + self.assertEqual(len(ciphertext), numBytes(self.pub_key.n)) |
| 3862 | + |
| 3863 | + # sanity check that the decrypted ciphertext is invalid |
| 3864 | + dec = self.priv_key._raw_private_key_op_bytes(ciphertext) |
| 3865 | + self.assertEqual(dec[0:2], b'\x00\x02') |
| 3866 | + self.assertTrue(all(i != 0 for i in dec[2:9])) |
| 3867 | + self.assertEqual(dec[9:10], b'\x00') |
| 3868 | + |
| 3869 | + plaintext = a2b_hex(remove_whitespace(""" |
| 3870 | +364cfecf7e70a0829f28 |
| 3871 | +""")) |
| 3872 | + self.assertEqual(len(plaintext), 10) |
| 3873 | + |
| 3874 | + msg = self.priv_key.decrypt(ciphertext) |
| 3875 | + |
| 3876 | + self.assertEqual(msg, plaintext) |
| 3877 | + |
| 3878 | + def test_invalid_with_no_padding_separator(self): |
| 3879 | + ciphertext = a2b_hex(remove_whitespace(""" |
| 3880 | +44c5b648e960aed2ad38497b6af118577a7978db288c0019cb6f8818578021ca |
| 3881 | +0d782c4e87bd6c3a73ef89e379311f0d449410c336bffdc9d970f995e7b59789 |
| 3882 | +10c230b1ef11c06cc5de6ee79ca2f85f6f14e5c42cbb8269d40c032b91783755 |
| 3883 | +fbfa7b87f16790bfea91933c67d2499a3d815cb70142285449757e606a438752 |
| 3884 | +b803b0928c28dab4fd21125e5b79af04fe912fb444d32039e9e0e10210fbe017 |
| 3885 | +4f43e2833ab862e4370b007025a919cf7b9c11241cf95ab10a9baa44a7ce7fa6 |
| 3886 | +e802c5b8e5c466dba52704fc2325317526f36d25842e130fcdbbc3c631a1e4c6 |
| 3887 | +7d23ffcb2218065863c178526616e8429916dff9101baf71857901bdaf305d26 |
| 3888 | +9c944994f9cf0e02a5499432324b90a62c3c78bd7a7821420a11c43d0a80ee39 |
| 3889 | +68ab8a363d6e6476f5424ae98bd59352aa9842e8f42cb0a34da68eac9dd16cf7 |
| 3890 | +04573007efc4b3fc97161c342c836ff781c331c306f61052d3877ab190e307f4 |
| 3891 | +f8d63c3bc8f6ab9a6920f9d1b9be482d3096b0b02447f53b0f974693e2a49b73 |
| 3892 | +3684d8e33d7dfbb60d3b1aae02c222c395209b1e2647e7fcbf3c44cdee9c7332 |
| 3893 | +9ce9ed255e011847d6d2e119d252d57c72572b2a309472f059cdae1f24e9cf1f |
| 3894 | +fddebc70b8b252229c7c0adfa763bda2243840bc9a553b6a4ea7737c0a002261 |
| 3895 | +b36e198fca4314f659ca1071aceb2668079d663e4ed40e15e10d764aa8cb0c68 |
| 3896 | +""")) |
| 3897 | + self.assertEqual(len(ciphertext), numBytes(self.pub_key.n)) |
| 3898 | + |
| 3899 | + # sanity check that the decrypted ciphertext is invalid |
| 3900 | + dec = self.priv_key._raw_private_key_op_bytes(ciphertext) |
| 3901 | + self.assertEqual(dec[0:2], b'\x00\x02') |
| 3902 | + for val in dec[2:]: |
| 3903 | + self.assertNotEqual(val, 0) |
| 3904 | + |
| 3905 | + plaintext = a2b_hex(remove_whitespace(""" |
| 3906 | +750d91268328712552cd |
| 3907 | +""")) |
| 3908 | + self.assertEqual(len(plaintext), 10) |
| 3909 | + |
| 3910 | + msg = self.priv_key.decrypt(ciphertext) |
| 3911 | + |
| 3912 | + self.assertEqual(msg, plaintext) |
| 3913 | + |
3583 | 3914 | def test_with_no_version_byte(self): |
3584 | 3915 | ciphertext = a2b_hex(remove_whitespace(""" |
3585 | 3916 | 6b11bd1777ac4f1d8f36a3ebd01090a4c2be1e2deb928cef6427c107f8cb1d70 |
|
0 commit comments