26
26
import utility .logger as plogger
27
27
import utility .hex_utils as hex_utils
28
28
import avalon_crypto_utils .worker_encryption as worker_encryption
29
+ import avalon_crypto_utils .worker_signing as worker_signing
29
30
from database import connector
30
31
from error_code .error_status import SignatureStatus
31
32
from http_client .http_jrpc_client import HttpJrpcClient
@@ -89,7 +90,7 @@ def get_unique_verification_key(self, verification_key_nonce):
89
90
90
91
# Create session key and iv to sign work order request
91
92
worker_encrypt = worker_encryption .WorkerEncrypt ()
92
- session_key = worker_encrypt .generate_key ()
93
+ session_key = worker_encrypt .generate_session_key ()
93
94
session_iv = worker_encrypt .generate_iv ()
94
95
95
96
wo_req = self ._construct_wo_req (
@@ -103,14 +104,8 @@ def get_unique_verification_key(self, verification_key_nonce):
103
104
if self ._verify_res_signature (wo_response_json ,
104
105
self ._worker .verification_key ,
105
106
wo_req ["params" ]["requesterNonce" ]):
106
- decrypted_res = worker_encrypt .decrypted_response (
107
- wo_response_json , session_key , session_iv )
108
- # Response contains an array of results. In this case, the
109
- # array has single element and the data field is of interest.
110
- # The data contains result,verification_key and
111
- # verification_key_signature delimited by ' '.
112
- # @TODO : Update to use multiple out_data fields.
113
- return decrypted_res [0 ]['data' ]
107
+ return self .decrypt_wo_response (
108
+ wo_response_json , session_key , session_iv , worker_encrypt )
114
109
return None
115
110
else :
116
111
logger .error ("Could not get a unique id from the KME : {}"
@@ -144,7 +139,7 @@ def register_wo_processor(self, unique_verification_id,
144
139
145
140
# Create session key and iv to sign work order request
146
141
worker_encrypt = worker_encryption .WorkerEncrypt ()
147
- session_key = worker_encrypt .generate_key ()
142
+ session_key = worker_encrypt .generate_session_key ()
148
143
session_iv = worker_encrypt .generate_iv ()
149
144
150
145
wo_req = self ._construct_wo_req (
@@ -158,12 +153,8 @@ def register_wo_processor(self, unique_verification_id,
158
153
if "error" not in wo_response_json and self ._verify_res_signature (
159
154
wo_response_json , self ._worker .verification_key ,
160
155
wo_req ["params" ]["requesterNonce" ]):
161
- decrypted_res = worker_encrypt .decrypted_response (
162
- wo_response_json , session_key , session_iv )
163
- # Response contains an array of results. In this case, the
164
- # array has single element and the data field is of interest.
165
- # It is integer with status of registration.
166
- return decrypted_res [0 ]['data' ]
156
+ return self .decrypt_wo_response (
157
+ wo_response_json , session_key , session_iv , worker_encrypt )
167
158
return None
168
159
else :
169
160
logger .error ("Could not register this WPE with the KME : {}"
@@ -186,7 +177,7 @@ def preprocess_work_order(self, wo_request, encryption_key):
186
177
187
178
# Create session key and iv to sign work order request
188
179
worker_encrypt = worker_encryption .WorkerEncrypt ()
189
- session_key = worker_encrypt .generate_key ()
180
+ session_key = worker_encrypt .generate_session_key ()
190
181
session_iv = worker_encrypt .generate_iv ()
191
182
192
183
wo_req = self ._construct_wo_req (
@@ -200,17 +191,32 @@ def preprocess_work_order(self, wo_request, encryption_key):
200
191
if self ._verify_res_signature (wo_response_json ,
201
192
self ._worker .verification_key ,
202
193
wo_req ["params" ]["requesterNonce" ]):
203
- decrypted_res = worker_encrypt .decrypted_response (
204
- wo_response_json , session_key , session_iv )
205
- # Response contains an array of results. In this case, the
206
- # array has single element and the data field is of interest.
207
- return decrypted_res [0 ]['data' ]
194
+ return self .decrypt_wo_response (
195
+ wo_response_json , session_key , session_iv , worker_encrypt )
208
196
return None
209
197
else :
210
198
logger .error ("Could not preprocess work order at KME : {}"
211
199
.format (response ))
212
200
return response
213
201
202
+ def decrypt_wo_response (self , wo_response , session_key ,
203
+ session_iv , worker_encrypt ):
204
+ """
205
+ Decrypt work order response using session key
206
+ Parameters:
207
+ @param wo_response - JSON encoded work order response
208
+ @param session_key - One time symmetric encryption key
209
+ @param session_iv - Initialization vector
210
+ @param worker_encrypt - WorkerEncrypt class object
211
+ Returns:
212
+ decrypted response data in plain
213
+ """
214
+ decrypted_res = worker_encrypt .decrypt_work_order_data_json (
215
+ wo_response ["outData" ], session_key , session_iv )
216
+ # Response contains an array of results. In this case, the
217
+ # array has single element and the data field is of interest.
218
+ return decrypted_res [0 ]['data' ].decode ("utf-8" )
219
+
214
220
def _construct_wo_req (self , in_data , workload_id , encryption_key ,
215
221
session_key , session_iv ):
216
222
"""
0 commit comments