예제 #1
0
    def sendToMerchantFromCustomer(self, request, context):
        data = request.messageData
        d = data.split(",")
        hash_op = d[0]
        key = d[1]

        SendStr = self.merchantMOHelper.RandomSelector()

        with grpc.insecure_channel(self.customer_address) as channel:
            try:
                grpc.channel_ready_future(channel).result(timeout=1)
            except grpc.FutureTimeoutError:
                print("Connection timeout. Unable to connect to port ",
                      self.customer_address)
                return None

            stub = digitalCashService_pb2_grpc.digitalCashServiceStub(channel)
            response = stub.sendToCustomerFromMerchant(
                digitalCashService_pb2.Message(messageData=SendStr))
            message = response.messageData

            mess = message.split(',')
            hash_ip = self.merchantMOHelper.decrpyt_amount(mess[0])

            verify = self.merchantMOHelper.Verify(hash_ip, key, hash_op)

            message = "MO_deposit-*-*- " + message

            if verify == True:
                with grpc.insecure_channel(self.bank_address) as channel:
                    try:
                        grpc.channel_ready_future(channel).result(timeout=1)
                    except grpc.FutureTimeoutError:
                        print("Connection timeout. Unable to connect to port ",
                              self.bank_address)
                        return None

                    bankStub = digitalCashService_pb2_grpc.digitalCashServiceStub(
                        channel)

                    responseFromBank = bankStub.sendToBankFromMerchant(
                        digitalCashService_pb2.Message(messageData=message))

                    if (responseFromBank.messageData == "credit_merchant"):
                        print(
                            "***INFORMATION*** :: Your account has been successfully credited!!"
                        )
                        return digitalCashService_pb2.ack(
                            success=True,
                            message="Successfully credited the Merchant.")
                    else:
                        print(
                            "***CRITICAL WARNING*** :: MO is already used, fraudulent transaction has been detected!!"
                        )
                        return digitalCashService_pb2.ack(
                            success=False, message="Fraud has been detected")

        return digitalCashService_pb2.ack(success=False,
                                          message="Fraud has been detected")
예제 #2
0
def sendMoneyOrderToMerchant(merchant_ip_address, stub, digitalCashServer):

    with open('Unused_MO.txt', 'r') as fh:
        line = fh.readlines()

    if not line:
        print("No MOs to send, please select Mode = 1 next")
        return

    Request = line[0]
    line = line[1:]

    with open('Unused_MO.txt', 'w') as fh:
        for l in line:
            fh.write(l)

    with open('Used_MO.txt', 'a') as fh:
        fh.write(Request)
        fh.write("\n")

    d = Request.split(" ")

    digitalCashServer.MO_Pairs_data = d

    moneyOrderHelper = MoneyOrderHelper(numberOfMoneyOrders,
                                        numberOfSecretPairs, pub_key)

    Message = moneyOrderHelper.decrpyt_amount(d[1])

    key = random.randint(0, 1234)
    #key = "\x00"+os.urandom(4)+"\x00"

    key = str(key)
    #print (BitVector(intVal = int(Message), size = 1024).get_bitvector_in_ascii())

    hash_val = moneyOrderHelper.generate_signature(
        key, Message)  #BitCommit (Message, key)
    Hash_and_key = hash_val + ',' + key

    with grpc.insecure_channel(merchant_ip_address) as channel:
        try:
            grpc.channel_ready_future(channel).result(timeout=1)
        except grpc.FutureTimeoutError:
            print("<--- Connection timeout. Unable to connect to port. --->")
            return None
        else:
            print("** Connected to merchant server. **")

        stub = digitalCashService_pb2_grpc.digitalCashServiceStub(channel)
        response = stub.sendToMerchantFromCustomer(
            digitalCashService_pb2.Message(messageData=Hash_and_key))
        print(response.message)
예제 #3
0
def run_client(serverAddress):
    with grpc.insecure_channel(serverAddress) as channel:
        try:
            grpc.channel_ready_future(channel).result(timeout=1)
        except grpc.FutureTimeoutError:
            print("Connection timeout. Unable to connect to port ")
            #exit()
        else:
            print("Connected")

        stub = digitalCashService_pb2_grpc.digitalCashServiceStub(channel)
        
        response = stub.ping(digitalCashService_pb2.pingMessage(message="Trying to ping you!!"))

        print(response.message)
예제 #4
0
def run_server(bank_ip_address, merchant_ip_address, customer_port):

    # Declare the gRPC server with 10 max_workers
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))

    digitalCashServer = DigitalCashServer()
    # # Add FileService to the server.
    digitalCashService_pb2_grpc.add_digitalCashServiceServicer_to_server(
        digitalCashServer, server)

    # # Start the server on server_port.
    server.add_insecure_port('[::]:{}'.format(customer_port))
    server.start()

    print("******* Customer server has been started on port {} *******".format(
        customer_port))

    with grpc.insecure_channel(bank_ip_address) as channel:
        try:
            grpc.channel_ready_future(channel).result(timeout=1)
        except grpc.FutureTimeoutError:
            print("<--- Connection timeout. Unable to connect to port. --->")
            #exit()
        else:
            print("** Connected to customer server. **")

        stub = digitalCashService_pb2_grpc.digitalCashServiceStub(channel)
        response = stub.ping(
            digitalCashService_pb2.pingMessage(message="Trying to ping you!!"))
        handleUserInputs(merchant_ip_address, stub, digitalCashServer)

    # Keep the server running for '_ONE_DAY_IN_SECONDS' seconds.
    try:
        while True:
            time.sleep(_ONE_DAY_IN_SECONDS)
    except KeyboardInterrupt:
        server.stop(0)
예제 #5
0
    def sendToMerchantFromCustomer(self, request, context):
        print(
            "----------------------Inside sendToMerchantFromCustomer-----------------"
        )
        data = request.messageData
        d = data.split(",")
        hash_op = d[0]
        key = d[1]  #hash output and key recieved
        print(data)
        SendStr = self.merchantMOHelper.RandomSelector()
        print(SendStr)

        with grpc.insecure_channel(self.customer_address) as channel:
            try:
                grpc.channel_ready_future(channel).result(timeout=1)
            except grpc.FutureTimeoutError:
                print("Connection timeout. Unable to connect to port ")
                return None
            else:
                print("Connected")

            stub = digitalCashService_pb2_grpc.digitalCashServiceStub(channel)
            response = stub.sendToCustomerFromMerchant(
                digitalCashService_pb2.Message(messageData=SendStr))
            message = response.messageData

            mess = message.split(',')
            hash_ip = self.merchantMOHelper.decrpyt_amount(mess[0])

            print(hash_ip)
            verify = self.merchantMOHelper.Verify(hash_ip, key, hash_op)

            print("Verification Status: " + str(verify))

            message = "MO_deposit-*-*- " + message
            if verify == True:
                with grpc.insecure_channel(self.bank_address) as channel:
                    try:
                        grpc.channel_ready_future(channel).result(timeout=1)
                    except grpc.FutureTimeoutError:
                        print("Connection timeout. Unable to connect to port ")
                        return None
                    else:
                        print("Connected")

                    bankStub = digitalCashService_pb2_grpc.digitalCashServiceStub(
                        channel)

                    print(
                        "Sending the message to bank----------------------------------"
                    )
                    responseFromBank = bankStub.sendToBankFromMerchant(
                        digitalCashService_pb2.Message(messageData=message))

                    print("Received from Bank: " +
                          responseFromBank.messageData)

                    if (responseFromBank.messageData == "credit_merchant"):
                        return digitalCashService_pb2.ack(
                            success=True,
                            messageData="Successfully credited the Merchant.")
                    else:
                        return digitalCashService_pb2.ack(
                            success=False,
                            messageData="Fraud has been detected")

        return digitalCashService_pb2.Message(
            success=False, messageData="Fraud has been detected")