Ejemplo n.º 1
0
 public static object ParseRequest(byte[] request)
 {
     if (request.Length < 1)
     {
         Console.Error.WriteLine("Received request with no bytes");
         return(new Common.InvalidRequest());
     }
     if (request[0] == 1)
     {
         return(Common.GetQuoteRequest.ParseRequest(request));
     }
     if (request[0] == 2)
     {
         return(InitializeDBRequest.ParseRequest(request));
     }
     if (request[0] == 3)
     {
         return(AddRowRequest.ParseRequest(request));
     }
     if (request[0] == 4)
     {
         return(QueryRequest.ParseRequest(request));
     }
     Console.Error.WriteLine("Received request with invalid type");
     return(new Common.InvalidRequest());
 }
Ejemplo n.º 2
0
        public byte[] HandleRequest(byte[] requestBytes)
        {
            object request = DiffPrivRequest.ParseRequest(requestBytes);

            if (request is Common.GetQuoteRequest)
            {
                GetQuoteResponse getQuoteResponse = new GetQuoteResponse(0, key_pair);
                return(getQuoteResponse.Encode());
            }
            if (request is InitializeDBRequest)
            {
                InitializeDBRequest r = (InitializeDBRequest)request;
                if (rows_received != 0)
                {
                    Console.Error.WriteLine("Received request to initialize DB after receiving rows");
                    return(DiffPrivSrvResponse.EncodeInitializeDBResponse(18));
                }

                if (r.budget_num < r.budget_den)
                {
                    Console.Error.WriteLine("Received request to initialize DB with budget < 1");
                    return(DiffPrivSrvResponse.EncodeInitializeDBResponse(16));
                }

                budget = new BigRational(r.budget_num, r.budget_den);
                rows.Clear();
                return(DiffPrivSrvResponse.EncodeInitializeDBResponse(0));
            }
            if (request is AddRowRequest)
            {
                byte[] ciphertext = ((AddRowRequest)request).ciphertext;
                byte[] plaintext;
                try
                {
                    plaintext = key_pair.Decrypt(ciphertext, false);
                }
                catch
                {
                    Console.Error.WriteLine("Received undecryptable add-row request");
                    return(DiffPrivSrvResponse.EncodeAddRowResponse());
                }

                HandleAddRowRequest(plaintext);
                return(DiffPrivSrvResponse.EncodeAddRowResponse());
            }
            if (request is QueryRequest)
            {
                QueryRequest r = (QueryRequest)request;
                return(HandleQueryRequest(r));
            }
            return(InvalidResponse.Encode());
        }