def test_sign_2(): keyset = { "keys": [{ "alg": "RS512", "kty": "RSA", "d": "ckLyXxkbjC4szg8q8G0ERBZV" "-9CszeOxpRtx1KM9BLl0Do3li_Km2vvFvfXJ7MxQpiZ18pBoCcyYQEU262ym8wI22JWMPrZe24HCNxLxqzr_JEuBhpKFxQF6EFTSvJEJD1FkoTuCTvN0zD7YHGaJQG6JzVEuFUY3ewxjH0FYNa_ppTnPP3LC-T9u_GX9Yqyuw1KOYoHSzhWSWQOeAgs4dH9-iAxN1wdZ6eH1jFWAs43svk_rhwdgyJMlihFtV9MAInBlfi_Zu8wRVhVl5urkJrLf0tGFnMbnzb6dYSlUXxEYClpY12W7kXW9aePDqkCwI4oZyxmOmgq4hunKGR1dAQ", "e": "AQAB", "use": "sig", "kid": "af22448d-4c7b-464d-b63a-f5bd90f6d7d1", "n": "o9g8DpUwBW6B1qmcm-TfEh4rNX7n1t38jdo4Gkl_cI3q" "--7n0Blg0kN88LHZvyZjUB2NhBdFYNxMP8ucy0dOXvWGWzaPmGnq3DM__lN8P4WjD1cCTAVEYKawNBAmGKqrFj1SgpPNsSqiqK-ALM1w6mZ-QGimjOgwCyJy3l9lzZh5D8tKnS2t1pZgE0X5P7lZQWHYpHPqp4jKhETzrCpPGfv0Rl6nmmjp7NlRYBkWKf_HEKE333J6M039m2FbKgxrBg3zmYYpmHuMzVgxxb8LSiv5aqyeyJjxM-YDUAgNQBfKNhONqXyu9DqtSprNkw6sqmuxK0QUVrNYl3b03PgS5Q" }] } keys = KEYS() keys.load_dict(keyset) jws = JWS("payload", alg="RS512") jws.sign_compact(keys=keys)
def test_sign_2(): keyset = {"keys": [ {"alg": "RS512", "kty": "RSA", "d": "ckLyXxkbjC4szg8q8G0ERBZV-9CszeOxpRtx1KM9BLl0Do3li_Km2vvFvfXJ7MxQpiZ18pBoCcyYQEU262ym8wI22JWMPrZe24HCNxLxqzr_JEuBhpKFxQF6EFTSvJEJD1FkoTuCTvN0zD7YHGaJQG6JzVEuFUY3ewxjH0FYNa_ppTnPP3LC-T9u_GX9Yqyuw1KOYoHSzhWSWQOeAgs4dH9-iAxN1wdZ6eH1jFWAs43svk_rhwdgyJMlihFtV9MAInBlfi_Zu8wRVhVl5urkJrLf0tGFnMbnzb6dYSlUXxEYClpY12W7kXW9aePDqkCwI4oZyxmOmgq4hunKGR1dAQ", "e": "AQAB", "use": "sig", "kid": "af22448d-4c7b-464d-b63a-f5bd90f6d7d1", "n": "o9g8DpUwBW6B1qmcm-TfEh4rNX7n1t38jdo4Gkl_cI3q--7n0Blg0kN88LHZvyZjUB2NhBdFYNxMP8ucy0dOXvWGWzaPmGnq3DM__lN8P4WjD1cCTAVEYKawNBAmGKqrFj1SgpPNsSqiqK-ALM1w6mZ-QGimjOgwCyJy3l9lzZh5D8tKnS2t1pZgE0X5P7lZQWHYpHPqp4jKhETzrCpPGfv0Rl6nmmjp7NlRYBkWKf_HEKE333J6M039m2FbKgxrBg3zmYYpmHuMzVgxxb8LSiv5aqyeyJjxM-YDUAgNQBfKNhONqXyu9DqtSprNkw6sqmuxK0QUVrNYl3b03PgS5Q" }]} keys = KEYS() keys.load_dict(keyset) jws = JWS("payload", alg="RS512") jws.sign_compact(keys=keys)
def sign(self, alg, **kwargs): http_json = {} hash_size = get_hash_size(alg) for arg, (key, func) in SIMPLE_OPER.items(): try: if func is None: http_json[key] = kwargs[arg] else: http_json[key] = func(kwargs[arg]) except KeyError: pass for arg, (key, format) in PARAM_ARGS.items(): try: http_json[key] = _serialize_params(kwargs[arg], format, hash_size) except KeyError: pass try: http_json['b'] = b64_hash(kwargs['body'], hash_size) except KeyError: pass if not http_json: raise ValueError("No data to sign") jws = JWS(json.dumps(http_json), alg=alg, typ="pop") return jws.sign_compact(keys=[self.key])
def sign(self, alg, **kwargs): http_json = {} hash_size = get_hash_size(alg) for arg, (key, func) in SIMPLE_OPER.items(): try: if func is None: http_json[key] = kwargs[arg] else: http_json[key] = func(kwargs[arg]) except KeyError: pass for arg, (key, format) in PARAM_ARGS.items(): try: http_json[key] = _serialize_params(kwargs[arg], format, hash_size) except KeyError: pass try: http_json["b"] = b64_hash(kwargs["body"], hash_size) except KeyError: pass if not http_json: raise ValueError("No data to sign") jws = JWS(json.dumps(http_json), alg=alg, typ="pop") _jwt = jws.sign_compact(keys=[self.key]) return _jwt
def sign_http_request(key, alg, method="", host="", path="", query_params=None, headers=None, body=None, time_stamp=0): """ Sign an HTTP request as a JWT. :param key: signing key :param alg: signing algorithm :param method: HTTP method :param host: url host :param path: url path :param query_params: query parameters :param headers: HTTP headers :param body: request body :param time_stamp: timestamp :return: signature of the request as a JWS """ http_json = {} hash_size = _get_hash_size(alg) if method: http_json["m"] = method.upper() if host: http_json["u"] = host if path: http_json["p"] = path if query_params: param_keys, param_buffer = _serialize_dict(query_params, QUERY_PARAM_FORMAT) param_hash = urlsafe_b64encode(_hash_value( hash_size, param_buffer)).decode("utf-8") http_json["q"] = [param_keys, param_hash] if headers: header_keys, header_buffer = _serialize_dict(headers, REQUEST_HEADER_FORMAT) header_hash = urlsafe_b64encode(_hash_value( hash_size, header_buffer)).decode("utf-8") http_json["h"] = [header_keys, header_hash] if body: body = urlsafe_b64encode(_hash_value(hash_size, body)).decode("utf-8") http_json["b"] = body if time_stamp: http_json["ts"] = int(time_stamp) if not http_json: raise EmptyHTTPRequestError("No data to sign") jws = JWS(json.dumps(http_json), alg=alg) return jws.sign_compact(keys=[key])
def sign_http_request(key, alg, method="", host="", path="", query_params=None, headers=None, body=None, time_stamp=0): """ Sign an HTTP request as a JWT. :param key: signing key :param alg: signing algorithm :param method: HTTP method :param host: url host :param path: url path :param query_params: query parameters :param headers: HTTP headers :param body: request body :param time_stamp: timestamp :return: signature of the request as a JWS """ http_json = {} hash_size = _get_hash_size(alg) if method: http_json["m"] = method.upper() if host: http_json["u"] = host if path: http_json["p"] = path if query_params: param_keys, param_buffer = _serialize_dict(query_params, QUERY_PARAM_FORMAT) param_hash = urlsafe_b64encode( _hash_value(hash_size, param_buffer)).decode("utf-8") http_json["q"] = [param_keys, param_hash] if headers: header_keys, header_buffer = _serialize_dict(headers, REQUEST_HEADER_FORMAT) header_hash = urlsafe_b64encode( _hash_value(hash_size, header_buffer)).decode("utf-8") http_json["h"] = [header_keys, header_hash] if body: body = urlsafe_b64encode(_hash_value(hash_size, body)).decode("utf-8") http_json["b"] = body if time_stamp: http_json["ts"] = int(time_stamp) if not http_json: raise EmptyHTTPRequestError("No data to sign") jws = JWS(json.dumps(http_json), alg=alg) return jws.sign_compact(keys=[key])