4
4
from joserfc .registry import HeaderParameter
5
5
from joserfc .errors import (
6
6
BadSignatureError ,
7
+ MissingKeyError ,
7
8
UnsupportedKeyUseError ,
8
9
UnsupportedKeyAlgorithmError ,
9
10
UnsupportedKeyOperationError ,
17
18
18
19
19
20
class TestJWSErrors (TestCase ):
21
+ key = OctKey .import_key ("secret" )
22
+
20
23
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 )
24
28
25
29
def test_none_alg (self ):
26
30
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" ])
30
37
31
38
def test_header_invalid_type (self ):
32
39
# kid should be a string
33
40
header = {"alg" : "HS256" , "kid" : 123 }
34
- key = OctKey .import_key ("secret" )
35
41
self .assertRaises (
36
42
ValueError ,
37
43
jws .serialize_compact ,
38
44
header ,
39
45
"i" ,
40
- key ,
46
+ self . key ,
41
47
)
42
48
43
49
# jwk should be a dict
@@ -47,7 +53,7 @@ def test_header_invalid_type(self):
47
53
jws .serialize_compact ,
48
54
header ,
49
55
"i" ,
50
- key ,
56
+ self . key ,
51
57
)
52
58
53
59
# jku should be a URL
@@ -57,7 +63,7 @@ def test_header_invalid_type(self):
57
63
jws .serialize_compact ,
58
64
header ,
59
65
"i" ,
60
- key ,
66
+ self . key ,
61
67
)
62
68
63
69
# x5c should be a chain of string
@@ -67,50 +73,48 @@ def test_header_invalid_type(self):
67
73
jws .serialize_compact ,
68
74
header ,
69
75
"i" ,
70
- key ,
76
+ self . key ,
71
77
)
72
78
header = {"alg" : "HS256" , "x5c" : [1 , 2 ]}
73
79
self .assertRaises (
74
80
ValueError ,
75
81
jws .serialize_compact ,
76
82
header ,
77
83
"i" ,
78
- key ,
84
+ self . key ,
79
85
)
80
86
81
87
def test_crit_header (self ):
82
88
header = {"alg" : "HS256" , "crit" : ["kid" ]}
83
- key = OctKey .import_key ("secret" )
84
89
# missing kid header
85
90
self .assertRaises (
86
91
MissingCritHeaderError ,
87
92
jws .serialize_compact ,
88
93
header ,
89
94
"i" ,
90
- key ,
95
+ self . key ,
91
96
)
92
97
93
98
header = {"alg" : "HS256" , "kid" : "1" , "crit" : ["kid" ]}
94
- jws .serialize_compact (header , "i" , key )
99
+ jws .serialize_compact (header , "i" , self . key )
95
100
96
101
def test_extra_header (self ):
97
102
header = {"alg" : "HS256" , "extra" : "hi" }
98
- key = OctKey .import_key ("secret" )
99
103
self .assertRaises (
100
104
UnsupportedHeaderError ,
101
105
jws .serialize_compact ,
102
106
header ,
103
107
"i" ,
104
- key ,
108
+ self . key ,
105
109
)
106
110
# bypass extra header
107
111
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 )
109
113
110
114
# or use a header registry
111
115
extra_header = {"extra" : HeaderParameter ("Extra header" , "str" , False )}
112
116
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 )
114
118
115
119
def test_rsa_invalid_signature (self ):
116
120
key1 = RSAKey .generate_key ()
0 commit comments