def validate_response(response: Response, key: str) -> Response: response.raise_for_status() data = response.json() signature = data.pop("signature") payload = OrderedDict( (k, data[k]) for k in conf.RESPONSE_KEYS if k in data) if not verify(payload, signature, key): raise CsobVerifyError("Cannot verify response") if "dttm" in payload: payload["dttime"] = dttm_decode(payload["dttm"]) response.extensions = [] response.payload = payload # extensions if "extensions" in data: maskclnrp_keys = "extension", "dttm", "maskedCln", "expiration", "longMaskedCln" for one in data["extensions"]: if one["extension"] == "maskClnRP": o = OrderedDict( (k, one[k]) for k in maskclnrp_keys if k in one) if verify(o, one["signature"], key): response.extensions.append(o) else: raise CsobVerifyError( "Cannot verify masked card extension response") return response