diff options
Diffstat (limited to 'tests/test_compressed_jwt.py')
-rw-r--r-- | tests/test_compressed_jwt.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/test_compressed_jwt.py b/tests/test_compressed_jwt.py new file mode 100644 index 0000000..21fac3f --- /dev/null +++ b/tests/test_compressed_jwt.py @@ -0,0 +1,37 @@ +import json +import zlib + +from jwt import PyJWT + + +class CompressedPyJWT(PyJWT): + def _decode_payload(self, decoded): + return json.loads( + # wbits=-15 has zlib not worry about headers of crc's + zlib.decompress(decoded["payload"], wbits=-15).decode("utf-8") + ) + + +def test_decodes_complete_valid_jwt_with_compressed_payload(): + # Test case from https://github.com/jpadilla/pyjwt/pull/753/files + example_payload = {"hello": "world"} + example_secret = "secret" + # payload made with the pako (https://nodeca.github.io/pako/) library in Javascript: + # Buffer.from(pako.deflateRaw('{"hello": "world"}')).toString('base64') + example_jwt = ( + b"eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9" + b".q1bKSM3JyVeyUlAqzy/KSVGqBQA=" + b".08wHYeuh1rJXmcBcMrz6NxmbxAnCQp2rGTKfRNIkxiw=" + ) + decoded = CompressedPyJWT().decode_complete( + example_jwt, example_secret, algorithms=["HS256"] + ) + + assert decoded == { + "header": {"alg": "HS256", "typ": "JWT"}, + "payload": example_payload, + "signature": ( + b"\xd3\xcc\x07a\xeb\xa1\xd6\xb2W\x99\xc0\\2\xbc\xfa7" + b"\x19\x9b\xc4\t\xc2B\x9d\xab\x192\x9fD\xd2$\xc6," + ), + } |