| 1237 | return comparestamps, expiredtoken |
| 1238 | |
| 1239 | def validateToken(jwt): |
| 1240 | try: |
| 1241 | headB64, paylB64, sig = jwt.split(".",3) |
| 1242 | except: |
| 1243 | cprintc("[-] Invalid token:\nNot 3 parts -> header.payload.signature", "red") |
| 1244 | exit(1) |
| 1245 | try: |
| 1246 | sig = base64.urlsafe_b64encode(base64.urlsafe_b64decode(sig + "=" * (-len(sig) % 4))).decode('UTF-8').strip("=") |
| 1247 | except: |
| 1248 | cprintc("[-] Invalid token:\nCould not base64-decode SIGNATURE - incorrect formatting/invalid characters", "red") |
| 1249 | cprintc("----------------", "white") |
| 1250 | cprintc(headB64, "cyan") |
| 1251 | cprintc(paylB64, "cyan") |
| 1252 | cprintc(sig, "red") |
| 1253 | exit(1) |
| 1254 | contents = headB64+"."+paylB64 |
| 1255 | contents = contents.encode() |
| 1256 | try: |
| 1257 | head = base64.urlsafe_b64decode(headB64 + "=" * (-len(headB64) % 4)) |
| 1258 | except: |
| 1259 | cprintc("[-] Invalid token:\nCould not base64-decode HEADER - incorrect formatting/invalid characters", "red") |
| 1260 | cprintc("----------------", "white") |
| 1261 | cprintc(headB64, "red") |
| 1262 | cprintc(paylB64, "cyan") |
| 1263 | cprintc(sig, "cyan") |
| 1264 | exit(1) |
| 1265 | try: |
| 1266 | payl = base64.urlsafe_b64decode(paylB64 + "=" * (-len(paylB64) % 4)) |
| 1267 | except: |
| 1268 | cprintc("[-] Invalid token:\nCould not base64-decode PAYLOAD - incorrect formatting/invalid characters", "red") |
| 1269 | cprintc("----------------", "white") |
| 1270 | cprintc(headB64, "cyan") |
| 1271 | cprintc(paylB64, "red") |
| 1272 | cprintc(sig, "cyan") |
| 1273 | exit(1) |
| 1274 | try: |
| 1275 | headDict = json.loads(head, object_pairs_hook=OrderedDict) |
| 1276 | except: |
| 1277 | cprintc("[-] Invalid token:\nHEADER not valid JSON format", "red") |
| 1278 | |
| 1279 | cprintc(head.decode('UTF-8'), "red") |
| 1280 | exit(1) |
| 1281 | if payl.decode() == "": |
| 1282 | cprintc("Payload is blank", "white") |
| 1283 | paylDict = {} |
| 1284 | else: |
| 1285 | try: |
| 1286 | paylDict = json.loads(payl, object_pairs_hook=OrderedDict) |
| 1287 | except: |
| 1288 | cprintc("[-] Invalid token:\nPAYLOAD not valid JSON format", "red") |
| 1289 | cprintc(payl.decode('UTF-8'), "red") |
| 1290 | exit(1) |
| 1291 | if args.verbose: |
| 1292 | cprintc("Token: "+head.decode()+"."+payl.decode()+"."+sig+"\n", "green") |
| 1293 | return headDict, paylDict, sig, contents |
| 1294 | |
| 1295 | def rejigToken(headDict, paylDict, sig): |
| 1296 | cprintc("=====================\nDecoded Token Values:\n=====================", "white") |