Skip to content

Commit 53d175b

Browse files
committed
fix encryption params in header
1 parent d714132 commit 53d175b

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

client_encryption/api_encryption.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def call_api_function(*args, **kwargs):
2525
"""Wrap call_api and add field encryption layer to it."""
2626

2727
in_body = kwargs.get("body", None)
28-
kwargs["body"] = self._encrypt_payload(kwargs.get("header_params", None), in_body) if in_body else in_body
28+
kwargs["body"] = self._encrypt_payload(args[4], in_body) if in_body else in_body
2929
kwargs["_preload_content"] = False
3030

3131
response = func(*args, **kwargs)
@@ -44,13 +44,20 @@ def _encrypt_payload(self, headers, body):
4444
if conf.use_http_headers:
4545
params = SessionKeyParams.generate(conf)
4646

47-
headers[conf.iv_field_name] = params.iv_value
48-
headers[conf.encrypted_key_field_name] = params.encrypted_key_value
49-
headers[conf.encryption_certificate_fingerprint_field_name] = conf.encryption_certificate_fingerprint
50-
headers[conf.encryption_key_fingerprint_field_name] = conf.encryption_key_fingerprint
51-
headers[conf.oaep_padding_digest_algorithm_field_name] = conf.oaep_padding_digest_algorithm
47+
encryption_params = {
48+
conf.iv_field_name: params.iv_value,
49+
conf.encrypted_key_field_name: params.encrypted_key_value
50+
}
51+
if conf.encryption_certificate_fingerprint_field_name:
52+
encryption_params[conf.encryption_certificate_fingerprint_field_name] = \
53+
conf.encryption_certificate_fingerprint
54+
if conf.encryption_key_fingerprint_field_name:
55+
encryption_params[conf.encryption_key_fingerprint_field_name] = conf.encryption_key_fingerprint
56+
if conf.oaep_padding_digest_algorithm_field_name:
57+
encryption_params[conf.oaep_padding_digest_algorithm_field_name] = conf.oaep_padding_digest_algorithm
5258

5359
encrypted_payload = encrypt_payload(body, conf, params)
60+
headers.update(encryption_params)
5461
else:
5562
encrypted_payload = encrypt_payload(body, conf)
5663

@@ -67,10 +74,10 @@ def _decrypt_payload(self, headers, body):
6774
iv = headers.pop(conf.iv_field_name)
6875
encrypted_key = headers.pop(conf.encrypted_key_field_name)
6976
oaep_digest_algo = headers.pop(conf.oaep_padding_digest_algorithm_field_name) \
70-
if conf.oaep_padding_digest_algorithm_field_name in headers else None
71-
if conf.encryption_certificate_fingerprint_field_name in headers:
77+
if _contains_param(conf.oaep_padding_digest_algorithm_field_name, headers) else None
78+
if _contains_param(conf.encryption_certificate_fingerprint_field_name, headers):
7279
del headers[conf.encryption_certificate_fingerprint_field_name]
73-
if conf.encryption_key_fingerprint_field_name in headers:
80+
if _contains_param(conf.encryption_key_fingerprint_field_name, headers):
7481
del headers[conf.encryption_key_fingerprint_field_name]
7582

7683
params = SessionKeyParams(conf, encrypted_key, iv, oaep_digest_algo)
@@ -84,6 +91,9 @@ def _decrypt_payload(self, headers, body):
8491
return payload
8592

8693

94+
def _contains_param(param_name, headers): return param_name and param_name in headers
95+
96+
8797
def add_encryption_layer(api_client, encryption_conf_file):
8898
"""Decorate APIClient.call_api with field level encryption"""
8999

tests/utils/api_encryption_test_utils.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,22 @@ def __init__(self, api_client=None):
2525
self.api_client = api_client
2626

2727
def do_something_get(self, **kwargs):
28-
return self.api_client.call_api("testservice", "GET", header_params=kwargs["headers"])
28+
return self.api_client.call_api("testservice", "GET", None, None, kwargs["headers"])
2929

3030
def do_something_post(self, **kwargs):
31-
return self.api_client.call_api("testservice", "POST", header_params=kwargs["headers"], body=kwargs["body"])
31+
return self.api_client.call_api("testservice", "POST", None, None, kwargs["headers"], body=kwargs["body"])
3232

3333
def do_something_delete(self, **kwargs):
34-
return self.api_client.call_api("testservice", "DELETE", header_params=kwargs["headers"], body=kwargs["body"])
34+
return self.api_client.call_api("testservice", "DELETE", None, None, kwargs["headers"], body=kwargs["body"])
3535

3636
def do_something_get_use_headers(self, **kwargs):
37-
return self.api_client.call_api("testservice/headers", "GET", header_params=kwargs["headers"])
37+
return self.api_client.call_api("testservice/headers", "GET", None, None, kwargs["headers"])
3838

3939
def do_something_post_use_headers(self, **kwargs):
40-
return self.api_client.call_api("testservice/headers", "POST", header_params=kwargs["headers"], body=kwargs["body"])
40+
return self.api_client.call_api("testservice/headers", "POST", None, None, kwargs["headers"], body=kwargs["body"])
4141

4242
def do_something_delete_use_headers(self, **kwargs):
43-
return self.api_client.call_api("testservice/headers", "DELETE", header_params=kwargs["headers"], body=kwargs["body"])
43+
return self.api_client.call_api("testservice/headers", "DELETE", None, None, kwargs["headers"], body=kwargs["body"])
4444

4545

4646
class MockApiClient(object):

0 commit comments

Comments
 (0)