@@ -25,7 +25,7 @@ def call_api_function(*args, **kwargs):
25
25
"""Wrap call_api and add field encryption layer to it."""
26
26
27
27
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
29
29
kwargs ["_preload_content" ] = False
30
30
31
31
response = func (* args , ** kwargs )
@@ -44,13 +44,20 @@ def _encrypt_payload(self, headers, body):
44
44
if conf .use_http_headers :
45
45
params = SessionKeyParams .generate (conf )
46
46
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
52
58
53
59
encrypted_payload = encrypt_payload (body , conf , params )
60
+ headers .update (encryption_params )
54
61
else :
55
62
encrypted_payload = encrypt_payload (body , conf )
56
63
@@ -67,10 +74,10 @@ def _decrypt_payload(self, headers, body):
67
74
iv = headers .pop (conf .iv_field_name )
68
75
encrypted_key = headers .pop (conf .encrypted_key_field_name )
69
76
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 ) :
72
79
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 ) :
74
81
del headers [conf .encryption_key_fingerprint_field_name ]
75
82
76
83
params = SessionKeyParams (conf , encrypted_key , iv , oaep_digest_algo )
@@ -84,6 +91,9 @@ def _decrypt_payload(self, headers, body):
84
91
return payload
85
92
86
93
94
+ def _contains_param (param_name , headers ): return param_name and param_name in headers
95
+
96
+
87
97
def add_encryption_layer (api_client , encryption_conf_file ):
88
98
"""Decorate APIClient.call_api with field level encryption"""
89
99
0 commit comments