diff options
Diffstat (limited to 'tests/hazmat/primitives/test_padding.py')
-rw-r--r-- | tests/hazmat/primitives/test_padding.py | 204 |
1 files changed, 119 insertions, 85 deletions
diff --git a/tests/hazmat/primitives/test_padding.py b/tests/hazmat/primitives/test_padding.py index fb72a794b..b15eb3753 100644 --- a/tests/hazmat/primitives/test_padding.py +++ b/tests/hazmat/primitives/test_padding.py @@ -18,14 +18,17 @@ class TestPKCS7(object): with pytest.raises(ValueError): padding.PKCS7(size) - @pytest.mark.parametrize(("size", "padded"), [ - (128, b"1111"), - (128, b"1111111111111111"), - (128, b"111111111111111\x06"), - (128, b""), - (128, b"\x06" * 6), - (128, b"\x00" * 16), - ]) + @pytest.mark.parametrize( + ("size", "padded"), + [ + (128, b"1111"), + (128, b"1111111111111111"), + (128, b"111111111111111\x06"), + (128, b""), + (128, b"\x06" * 6), + (128, b"\x00" * 16), + ], + ) def test_invalid_padding(self, size, padded): unpadder = padding.PKCS7(size).unpadder() with pytest.raises(ValueError): @@ -40,46 +43,48 @@ class TestPKCS7(object): with pytest.raises(TypeError): unpadder.update(u"abc") - @pytest.mark.parametrize(("size", "unpadded", "padded"), [ - ( - 128, - b"1111111111", - b"1111111111\x06\x06\x06\x06\x06\x06", - ), - ( - 128, - b"111111111111111122222222222222", - b"111111111111111122222222222222\x02\x02", - ), - ( - 128, - b"1" * 16, - b"1" * 16 + b"\x10" * 16, - ), - ( - 128, - b"1" * 17, - b"1" * 17 + b"\x0F" * 15, - ) - ]) + def test_zany_py2_bytes_subclass(self): + class mybytes(bytes): # noqa: N801 + def __str__(self): + return "broken" + + str(mybytes()) + padder = padding.PKCS7(128).padder() + padder.update(mybytes(b"abc")) + unpadder = padding.PKCS7(128).unpadder() + unpadder.update(mybytes(padder.finalize())) + assert unpadder.finalize() == b"abc" + + @pytest.mark.parametrize( + ("size", "unpadded", "padded"), + [ + (128, b"1111111111", b"1111111111\x06\x06\x06\x06\x06\x06"), + ( + 128, + b"111111111111111122222222222222", + b"111111111111111122222222222222\x02\x02", + ), + (128, b"1" * 16, b"1" * 16 + b"\x10" * 16), + (128, b"1" * 17, b"1" * 17 + b"\x0F" * 15), + ], + ) def test_pad(self, size, unpadded, padded): padder = padding.PKCS7(size).padder() result = padder.update(unpadded) result += padder.finalize() assert result == padded - @pytest.mark.parametrize(("size", "unpadded", "padded"), [ - ( - 128, - b"1111111111", - b"1111111111\x06\x06\x06\x06\x06\x06", - ), - ( - 128, - b"111111111111111122222222222222", - b"111111111111111122222222222222\x02\x02", - ), - ]) + @pytest.mark.parametrize( + ("size", "unpadded", "padded"), + [ + (128, b"1111111111", b"1111111111\x06\x06\x06\x06\x06\x06"), + ( + 128, + b"111111111111111122222222222222", + b"111111111111111122222222222222\x02\x02", + ), + ], + ) def test_unpad(self, size, unpadded, padded): unpadder = padding.PKCS7(size).unpadder() result = unpadder.update(padded) @@ -116,6 +121,18 @@ class TestPKCS7(object): assert data == b"" + def test_bytearray(self): + padder = padding.PKCS7(128).padder() + unpadded = bytearray(b"t" * 38) + padded = ( + padder.update(unpadded) + + padder.update(unpadded) + + padder.finalize() + ) + unpadder = padding.PKCS7(128).unpadder() + final = unpadder.update(padded) + unpadder.finalize() + assert final == unpadded + unpadded + class TestANSIX923(object): @pytest.mark.parametrize("size", [127, 4096, -2]) @@ -123,15 +140,18 @@ class TestANSIX923(object): with pytest.raises(ValueError): padding.ANSIX923(size) - @pytest.mark.parametrize(("size", "padded"), [ - (128, b"1111"), - (128, b"1111111111111111"), - (128, b"111111111111111\x06"), - (128, b"1111111111\x06\x06\x06\x06\x06\x06"), - (128, b""), - (128, b"\x06" * 6), - (128, b"\x00" * 16), - ]) + @pytest.mark.parametrize( + ("size", "padded"), + [ + (128, b"1111"), + (128, b"1111111111111111"), + (128, b"111111111111111\x06"), + (128, b"1111111111\x06\x06\x06\x06\x06\x06"), + (128, b""), + (128, b"\x06" * 6), + (128, b"\x00" * 16), + ], + ) def test_invalid_padding(self, size, padded): unpadder = padding.ANSIX923(size).unpadder() with pytest.raises(ValueError): @@ -146,46 +166,48 @@ class TestANSIX923(object): with pytest.raises(TypeError): unpadder.update(u"abc") - @pytest.mark.parametrize(("size", "unpadded", "padded"), [ - ( - 128, - b"1111111111", - b"1111111111\x00\x00\x00\x00\x00\x06", - ), - ( - 128, - b"111111111111111122222222222222", - b"111111111111111122222222222222\x00\x02", - ), - ( - 128, - b"1" * 16, - b"1" * 16 + b"\x00" * 15 + b"\x10", - ), - ( - 128, - b"1" * 17, - b"1" * 17 + b"\x00" * 14 + b"\x0F", - ) - ]) + def test_zany_py2_bytes_subclass(self): + class mybytes(bytes): # noqa: N801 + def __str__(self): + return "broken" + + str(mybytes()) + padder = padding.ANSIX923(128).padder() + padder.update(mybytes(b"abc")) + unpadder = padding.ANSIX923(128).unpadder() + unpadder.update(mybytes(padder.finalize())) + assert unpadder.finalize() == b"abc" + + @pytest.mark.parametrize( + ("size", "unpadded", "padded"), + [ + (128, b"1111111111", b"1111111111\x00\x00\x00\x00\x00\x06"), + ( + 128, + b"111111111111111122222222222222", + b"111111111111111122222222222222\x00\x02", + ), + (128, b"1" * 16, b"1" * 16 + b"\x00" * 15 + b"\x10"), + (128, b"1" * 17, b"1" * 17 + b"\x00" * 14 + b"\x0F"), + ], + ) def test_pad(self, size, unpadded, padded): padder = padding.ANSIX923(size).padder() result = padder.update(unpadded) result += padder.finalize() assert result == padded - @pytest.mark.parametrize(("size", "unpadded", "padded"), [ - ( - 128, - b"1111111111", - b"1111111111\x00\x00\x00\x00\x00\x06", - ), - ( - 128, - b"111111111111111122222222222222", - b"111111111111111122222222222222\x00\x02", - ), - ]) + @pytest.mark.parametrize( + ("size", "unpadded", "padded"), + [ + (128, b"1111111111", b"1111111111\x00\x00\x00\x00\x00\x06"), + ( + 128, + b"111111111111111122222222222222", + b"111111111111111122222222222222\x00\x02", + ), + ], + ) def test_unpad(self, size, unpadded, padded): unpadder = padding.ANSIX923(size).unpadder() result = unpadder.update(padded) @@ -207,3 +229,15 @@ class TestANSIX923(object): unpadder.update(b"") with pytest.raises(AlreadyFinalized): unpadder.finalize() + + def test_bytearray(self): + padder = padding.ANSIX923(128).padder() + unpadded = bytearray(b"t" * 38) + padded = ( + padder.update(unpadded) + + padder.update(unpadded) + + padder.finalize() + ) + unpadder = padding.ANSIX923(128).unpadder() + final = unpadder.update(padded) + unpadder.finalize() + assert final == unpadded + unpadded |