Skip to content

peer_server

PeerServer(peer_num)

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)