Skip to content
This repository was archived by the owner on Jan 27, 2022. It is now read-only.

Commit 65853e7

Browse files
manju956rranjan3
authored andcommitted
Fix WPE requester and crypto issues
Signed-off-by: manju956 <[email protected]>
1 parent 38eb3df commit 65853e7

File tree

2 files changed

+33
-26
lines changed

2 files changed

+33
-26
lines changed

common/crypto_utils/avalon_crypto_utils/worker_signing.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import avalon_crypto_utils.crypto_utility as crypto_utility
2222
from utility.hex_utils import hex_to_byte_array
2323
import avalon_crypto_utils.worker_hash as worker_hash
24-
24+
from error_code.error_status import SignatureStatus
2525

2626
logger = logging.getLogger(__name__)
2727
logger.setLevel(logging.DEBUG)
@@ -167,7 +167,7 @@ def _verify_wo_verification_key_signature(self,
167167

168168
concat_string = wo_response["extVerificationKey"] + requester_nonce
169169
v_key_sig = wo_response["extVerificationKeySignature"]
170-
v_key_hash = crypto_utility.compute_message_hash(
170+
v_key_hash = worker_hash.WorkerHash().compute_message_hash(
171171
bytes(concat_string, 'UTF-8'))
172172
decoded_v_key_sig = crypto_utility.base64_to_byte_array(v_key_sig)
173173
return self.verify_signature_from_pubkey(decoded_v_key_sig,
@@ -229,7 +229,7 @@ def verify_update_receipt_signature(self, input_json):
229229
str(input_json_params["updateType"]) + \
230230
input_json_params["updateData"]
231231
concat_hash = bytes(concat_string, 'UTF-8')
232-
final_hash = crypto_utility.compute_message_hash(concat_hash)
232+
final_hash = worker_hash.WorkerHash().compute_message_hash(concat_hash)
233233
signature = input_json_params["updateSignature"]
234234
verification_key = \
235235
input_json_params["receiptVerificationKey"].encode("ascii")
@@ -259,7 +259,8 @@ def verify_create_receipt_signature(self, input_json):
259259
input_json_params["workOrderRequestHash"] + \
260260
input_json_params["requesterGeneratedNonce"]
261261
concat_hash = bytes(concat_string, "UTF-8")
262-
final_hash = bytes(crypto_utility.compute_message_hash(concat_hash))
262+
final_hash = bytes(
263+
worker_hash.WorkerHash().compute_message_hash(concat_hash))
263264
signature = input_json_params["requesterSignature"]
264265
verification_key = \
265266
input_json_params["receiptVerificationKey"].encode("ascii")

enclave_manager/avalon_enclave_manager/wpe/wpe_requester.py

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import utility.logger as plogger
2727
import utility.hex_utils as hex_utils
2828
import avalon_crypto_utils.worker_encryption as worker_encryption
29+
import avalon_crypto_utils.worker_signing as worker_signing
2930
from database import connector
3031
from error_code.error_status import SignatureStatus
3132
from http_client.http_jrpc_client import HttpJrpcClient
@@ -89,7 +90,7 @@ def get_unique_verification_key(self, verification_key_nonce):
8990

9091
# Create session key and iv to sign work order request
9192
worker_encrypt = worker_encryption.WorkerEncrypt()
92-
session_key = worker_encrypt.generate_key()
93+
session_key = worker_encrypt.generate_session_key()
9394
session_iv = worker_encrypt.generate_iv()
9495

9596
wo_req = self._construct_wo_req(
@@ -103,14 +104,8 @@ def get_unique_verification_key(self, verification_key_nonce):
103104
if self._verify_res_signature(wo_response_json,
104105
self._worker.verification_key,
105106
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)
114109
return None
115110
else:
116111
logger.error("Could not get a unique id from the KME : {}"
@@ -144,7 +139,7 @@ def register_wo_processor(self, unique_verification_id,
144139

145140
# Create session key and iv to sign work order request
146141
worker_encrypt = worker_encryption.WorkerEncrypt()
147-
session_key = worker_encrypt.generate_key()
142+
session_key = worker_encrypt.generate_session_key()
148143
session_iv = worker_encrypt.generate_iv()
149144

150145
wo_req = self._construct_wo_req(
@@ -158,12 +153,8 @@ def register_wo_processor(self, unique_verification_id,
158153
if "error" not in wo_response_json and self._verify_res_signature(
159154
wo_response_json, self._worker.verification_key,
160155
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)
167158
return None
168159
else:
169160
logger.error("Could not register this WPE with the KME : {}"
@@ -186,7 +177,7 @@ def preprocess_work_order(self, wo_request, encryption_key):
186177

187178
# Create session key and iv to sign work order request
188179
worker_encrypt = worker_encryption.WorkerEncrypt()
189-
session_key = worker_encrypt.generate_key()
180+
session_key = worker_encrypt.generate_session_key()
190181
session_iv = worker_encrypt.generate_iv()
191182

192183
wo_req = self._construct_wo_req(
@@ -200,17 +191,32 @@ def preprocess_work_order(self, wo_request, encryption_key):
200191
if self._verify_res_signature(wo_response_json,
201192
self._worker.verification_key,
202193
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)
208196
return None
209197
else:
210198
logger.error("Could not preprocess work order at KME : {}"
211199
.format(response))
212200
return response
213201

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+
214220
def _construct_wo_req(self, in_data, workload_id, encryption_key,
215221
session_key, session_iv):
216222
"""

0 commit comments

Comments
 (0)