44from joserfc .registry import HeaderParameter
55from joserfc .errors import (
66 BadSignatureError ,
7+ MissingKeyError ,
78 UnsupportedKeyUseError ,
89 UnsupportedKeyAlgorithmError ,
910 UnsupportedKeyOperationError ,
1718
1819
1920class TestJWSErrors (TestCase ):
21+ key = OctKey .import_key ("secret" )
22+
2023 def test_without_alg (self ):
21- key = OctKey .import_key ("secret" )
22- # missing alg
23- self .assertRaises (MissingHeaderError , jws .serialize_compact , {"kid" : "123" }, "i" , key )
24+ self .assertRaises (MissingHeaderError , jws .serialize_compact , {"kid" : "123" }, "i" , self .key )
25+
26+ def test_without_key (self ):
27+ self .assertRaises (MissingKeyError , jws .serialize_compact , {"alg" : "HS256" }, "i" , None )
2428
2529 def test_none_alg (self ):
2630 header = {"alg" : "none" }
27- key = OctKey .import_key ("secret" )
28- text = jws .serialize_compact (header , "i" , key , algorithms = ["none" ])
29- self .assertRaises (BadSignatureError , jws .deserialize_compact , text , key , algorithms = ["none" ])
31+ text = jws .serialize_compact (header , "i" , None , algorithms = ["none" ])
32+ obj = jws .deserialize_compact (text , None , algorithms = ["none" ])
33+ self .assertEqual (obj .payload , b"i" )
34+ # none alg has no signature
35+ text += 'aQ'
36+ self .assertRaises (BadSignatureError , jws .deserialize_compact , text , None , algorithms = ["none" ])
3037
3138 def test_header_invalid_type (self ):
3239 # kid should be a string
3340 header = {"alg" : "HS256" , "kid" : 123 }
34- key = OctKey .import_key ("secret" )
3541 self .assertRaises (
3642 ValueError ,
3743 jws .serialize_compact ,
3844 header ,
3945 "i" ,
40- key ,
46+ self . key ,
4147 )
4248
4349 # jwk should be a dict
@@ -47,7 +53,7 @@ def test_header_invalid_type(self):
4753 jws .serialize_compact ,
4854 header ,
4955 "i" ,
50- key ,
56+ self . key ,
5157 )
5258
5359 # jku should be a URL
@@ -57,7 +63,7 @@ def test_header_invalid_type(self):
5763 jws .serialize_compact ,
5864 header ,
5965 "i" ,
60- key ,
66+ self . key ,
6167 )
6268
6369 # x5c should be a chain of string
@@ -67,50 +73,48 @@ def test_header_invalid_type(self):
6773 jws .serialize_compact ,
6874 header ,
6975 "i" ,
70- key ,
76+ self . key ,
7177 )
7278 header = {"alg" : "HS256" , "x5c" : [1 , 2 ]}
7379 self .assertRaises (
7480 ValueError ,
7581 jws .serialize_compact ,
7682 header ,
7783 "i" ,
78- key ,
84+ self . key ,
7985 )
8086
8187 def test_crit_header (self ):
8288 header = {"alg" : "HS256" , "crit" : ["kid" ]}
83- key = OctKey .import_key ("secret" )
8489 # missing kid header
8590 self .assertRaises (
8691 MissingCritHeaderError ,
8792 jws .serialize_compact ,
8893 header ,
8994 "i" ,
90- key ,
95+ self . key ,
9196 )
9297
9398 header = {"alg" : "HS256" , "kid" : "1" , "crit" : ["kid" ]}
94- jws .serialize_compact (header , "i" , key )
99+ jws .serialize_compact (header , "i" , self . key )
95100
96101 def test_extra_header (self ):
97102 header = {"alg" : "HS256" , "extra" : "hi" }
98- key = OctKey .import_key ("secret" )
99103 self .assertRaises (
100104 UnsupportedHeaderError ,
101105 jws .serialize_compact ,
102106 header ,
103107 "i" ,
104- key ,
108+ self . key ,
105109 )
106110 # bypass extra header
107111 registry = jws .JWSRegistry (strict_check_header = False )
108- jws .serialize_compact (header , "i" , key , registry = registry )
112+ jws .serialize_compact (header , "i" , self . key , registry = registry )
109113
110114 # or use a header registry
111115 extra_header = {"extra" : HeaderParameter ("Extra header" , "str" , False )}
112116 registry = jws .JWSRegistry (header_registry = extra_header )
113- jws .serialize_compact (header , "i" , key , registry = registry )
117+ jws .serialize_compact (header , "i" , self . key , registry = registry )
114118
115119 def test_rsa_invalid_signature (self ):
116120 key1 = RSAKey .generate_key ()
0 commit comments