Bases: base_server.BaseServer
The server for peer party communication.
Source code in iflearner/communication/peer/peer_server.py
| def __init__(self, peer_num: int) -> None:
super().__init__()
self._parties_secret = dict()
self._parties_random_value = dict()
self._peer_num = peer_num
|
send(request, context)
Send two types of requests to server, including MSG_DH_PUBLIC_KEY and MSG_SMPC_RANDOM_KEY.
Source code in iflearner/communication/peer/peer_server.py
| def send(
self, request: base_pb2.BaseRequest, context: Any
) -> base_pb2.BaseResponse:
"""Send two types of requests to server, including MSG_DH_PUBLIC_KEY and MSG_SMPC_RANDOM_KEY."""
logger.info(f"IN: party: {request.party_name}, message type: {request.type}")
if request.type == message_type.MSG_DH_PUBLIC_KEY:
self._parties_secret[
request.party_name
] = DiffieHellmanInst().generate_secret(request.data)
return base_pb2.BaseResponse(data=DiffieHellmanInst().generate_public_key())
elif request.type == message_type.MSG_SMPC_RANDOM_KEY:
random_float = random.uniform(0.1, 1.0)
logger.info(f"Party: {request.party_name}, Random float: {random_float}")
self._parties_random_value[request.party_name] = -random_float
# return base_pb2.BaseResponse(data=bytearray(struct.pack('f', random_float)))
return base_pb2.BaseResponse(
data=aes.AESCipher(self._parties_secret[request.party_name]).encrypt(
str(random_float)
)
)
|
sum_parties_random_value()
When the values from each party are received, we add all the values together.
Source code in iflearner/communication/peer/peer_server.py
| def sum_parties_random_value(self) -> float:
"""When the values from each party are received, we add all the values together."""
while True:
if self._peer_num == len(self._parties_random_value.values()):
return sum(self._parties_random_value.values())
time.sleep(1)
|