1212 MissingAlgorithmError ,
1313 UnsupportedAlgorithmError ,
1414 UnsupportedHeaderError ,
15+ ExceededSizeError ,
1516)
17+ from joserfc .util import urlsafe_b64encode , json_b64encode
1618
1719
1820class TestCompact (TestCase ):
21+ key = OctKey .import_key ("secret" )
22+
1923 def test_registry_is_none (self ):
20- key = OctKey .import_key ("secret" )
21- value = serialize_compact ({"alg" : "HS256" }, b"foo" , key )
24+ value = serialize_compact ({"alg" : "HS256" }, b"foo" , self .key )
2225 expected = "eyJhbGciOiJIUzI1NiJ9.Zm9v.0pehoi-RMZM1jl-4TP_C4Y6BJ-bcmsuzfDyQpkpJkh0"
2326 self .assertEqual (value , expected )
2427
25- obj = deserialize_compact (value , key )
28+ obj = deserialize_compact (value , self . key )
2629 self .assertEqual (obj .payload , b"foo" )
2730
2831 def test_bad_signature_error (self ):
@@ -31,28 +34,42 @@ def test_bad_signature_error(self):
3134 self .assertRaises (BadSignatureError , deserialize_compact , value , key )
3235
3336 def test_raise_unsupported_algorithm_error (self ):
34- key = OctKey .import_key ("secret" )
35- self .assertRaises (UnsupportedAlgorithmError , serialize_compact , {"alg" : "HS512" }, b"foo" , key )
36- self .assertRaises (UnsupportedAlgorithmError , serialize_compact , {"alg" : "NOT" }, b"foo" , key )
37+ self .assertRaises (UnsupportedAlgorithmError , serialize_compact , {"alg" : "HS512" }, b"foo" , self .key )
38+ self .assertRaises (UnsupportedAlgorithmError , serialize_compact , {"alg" : "NOT" }, b"foo" , self .key )
3739
3840 def test_invalid_length (self ):
39- key = OctKey .import_key ("secret" )
40- self .assertRaises (DecodeError , deserialize_compact , b"a.b.c.d" , key )
41+ self .assertRaises (DecodeError , deserialize_compact , b"a.b.c.d" , self .key )
4142
4243 def test_no_invalid_header (self ):
4344 # invalid base64
4445 value = b"abc.Zm9v.0pehoi"
45- key = OctKey .import_key ("secret" )
46- self .assertRaises (DecodeError , deserialize_compact , value , key )
46+ self .assertRaises (DecodeError , deserialize_compact , value , self .key )
4747
4848 # no alg value
4949 value = b"eyJhIjoiYiJ9.Zm9v.0pehoi"
50- self .assertRaises (MissingAlgorithmError , deserialize_compact , value , key )
50+ self .assertRaises (MissingAlgorithmError , deserialize_compact , value , self . key )
5151
5252 def test_invalid_payload (self ):
5353 value = b"eyJhbGciOiJIUzI1NiJ9.a$b.0pehoi"
54- key = OctKey .import_key ("secret" )
55- self .assertRaises (DecodeError , deserialize_compact , value , key )
54+ self .assertRaises (DecodeError , deserialize_compact , value , self .key )
55+
56+ def test_header_exceeded_size_error (self ):
57+ exceeded_header = json_b64encode ({f"a{ i } " : f"a{ i } " for i in range (1000 )})
58+ other = urlsafe_b64encode (b"o" )
59+ fake_jws = exceeded_header + b"." + other + b"." + other
60+ self .assertRaises (ExceededSizeError , deserialize_compact , fake_jws , self .key )
61+
62+ def test_payload_exceeded_size_error (self ):
63+ header = json_b64encode ({"alg" : "HS256" })
64+ exceeded_payload = urlsafe_b64encode (("o" * 10000 ).encode ("utf8" ))
65+ fake_jws = header + b"." + exceeded_payload + b"." + urlsafe_b64encode (b"o" )
66+ self .assertRaises (ExceededSizeError , deserialize_compact , fake_jws , self .key )
67+
68+ def test_signature_exceeded_size_error (self ):
69+ header = json_b64encode ({"alg" : "HS256" })
70+ exceeded_signature = urlsafe_b64encode (("o" * 1000 ).encode ("utf8" ))
71+ fake_jws = header + b"." + urlsafe_b64encode (b"o" ) + b"." + exceeded_signature
72+ self .assertRaises (ExceededSizeError , deserialize_compact , fake_jws , self .key )
5673
5774 def test_with_key_set (self ):
5875 keys = KeySet (
@@ -73,20 +90,18 @@ def test_with_key_set(self):
7390
7491 def test_strict_check_header (self ):
7592 header = {"alg" : "HS256" , "custom" : "hi" }
76- key = OctKey .import_key ("secret" )
77- self .assertRaises (UnsupportedHeaderError , serialize_compact , header , b"hi" , key )
93+ self .assertRaises (UnsupportedHeaderError , serialize_compact , header , b"hi" , self .key )
7894
7995 registry = JWSRegistry (strict_check_header = False )
80- serialize_compact (header , b"hi" , key , registry = registry )
96+ serialize_compact (header , b"hi" , self . key , registry = registry )
8197
8298 def test_non_canonical_signature_encoding (self ):
8399 text = "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWRtaW4ifQ.VI29GgHzuh2xfF0bkRYvZIsSuQnbTXSIvuRyt7RDrwo" [:- 1 ] + "p"
84100 self .assertRaises (BadSignatureError , deserialize_compact , text , OctKey .import_key ("secret" ))
85101
86102 def test_detached_content (self ):
87- key = OctKey .import_key ("secret" )
88- value = detach_content (serialize_compact ({"alg" : "HS256" }, b"foo" , key ))
103+ value = detach_content (serialize_compact ({"alg" : "HS256" }, b"foo" , self .key ))
89104 expected = "eyJhbGciOiJIUzI1NiJ9..0pehoi-RMZM1jl-4TP_C4Y6BJ-bcmsuzfDyQpkpJkh0"
90105 self .assertEqual (value , expected )
91- obj = deserialize_compact (value , key , payload = b"foo" )
106+ obj = deserialize_compact (value , self . key , payload = b"foo" )
92107 self .assertEqual (obj .payload , b"foo" )
0 commit comments