Skip to content

Commit f854f11

Browse files
committed
Added the possibility to add keyword arguments to the verify() call.
Also added information about jws/jwe headers to the Message instance.
1 parent f67a141 commit f854f11

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

src/cryptojwt/jwt.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ class JWT(object):
8686
def __init__(self, own_keys=None, iss='', rec_keys=None, lifetime=0,
8787
sign=True, sign_alg='RS256', encrypt=False,
8888
enc_enc="A128CBC-HS256", enc_alg="RSA1_5", msg_cls=None,
89-
iss2msg_cls=None):
89+
iss2msg_cls=None, skew=15):
9090
self.own_keys = own_keys
9191
self.rec_keys = rec_keys or {}
9292
self.iss = iss
@@ -99,6 +99,7 @@ def __init__(self, own_keys=None, iss='', rec_keys=None, lifetime=0,
9999
self.msg_cls = msg_cls
100100
self.with_jti = False
101101
self.iss2msg_cls = iss2msg_cls or {}
102+
self.skew = skew
102103

103104
def receiver_keys(self, recv):
104105
return self.rec_keys[recv]
@@ -210,9 +211,9 @@ def _decrypt(self, rj, token):
210211
keys = get_jwt_keys(rj.jwt, self.my_keys(), 'enc')
211212
return rj.decrypt(token, keys=keys)
212213

213-
def verify_profile(self, msg_cls, **info):
214-
_msg = self.msg_cls(**info)
215-
if not _msg.verify():
214+
def verify_profile(self, msg_cls, info, **kwargs):
215+
_msg = msg_cls(**info)
216+
if not _msg.verify(**kwargs):
216217
raise VerificationError()
217218
return _msg
218219

@@ -228,12 +229,14 @@ def unpack(self, token):
228229
raise KeyError
229230

230231
_content_type = 'jwt'
232+
_jwe_header = _jws_header = None
231233

232234
# Check if it's an encrypted JWT
233235
_rj = jwe.factory(token)
234236
if _rj:
235237
# Yes, try to decode
236238
_info = self._decrypt(_rj, token)
239+
_jwe_header = _rj.jwt.headers
237240
# Try to find out if the information encrypted was a signed JWT
238241
try:
239242
_content_type = _rj.jwt.headers['cty']
@@ -250,6 +253,7 @@ def unpack(self, token):
250253
_info = self._verify(_rj, _info)
251254
else:
252255
raise Exception()
256+
_jws_header = _rj.jwt.headers
253257
else:
254258
# So, not a signed JWT
255259
try:
@@ -269,6 +273,12 @@ def unpack(self, token):
269273
_msg_cls = None
270274

271275
if _msg_cls:
272-
return self.verify_profile(_msg_cls, **_info)
276+
vp_args = {'skew': self.skew}
277+
if self.iss:
278+
vp_args['aud'] = self.iss
279+
_info = self.verify_profile(_msg_cls, _info, **vp_args)
280+
_info.jwe_header = _jwe_header
281+
_info.jws_header = _jws_header
282+
return _info
273283
else:
274284
return _info

0 commit comments

Comments
 (0)