###############################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
###############################################################################

##
## Required Properties
##

#action -- required - 'encrypt' or 'decrypt' -- The action performed by the QuerierDriver
querier.action=

#inputFile - required - Fully qualified file containing input
#The input is either:
#(1) For Encryption: A query file - Contains the query selectors, one per line;
#the first line must be the query number
#OR
#(2) For Decryption: A response file - Contains the serialized Response object
querier.inputFile=

#outputFile -- required - Fully qualified file for the result output.
#The output file specifies either:
#(1) For encryption:
#(a) A file to contain the serialized Querier object named: <outputFile>-querier
#AND
#(b) A file to contain the serialized Query object named: <outputFile>-query
#OR
#(2) A file to contain the decryption results where each line is where each line
#corresponds to one hit and is a JSON object with the schema QuerySchema
querier.outputFile=

#numThreads -- required -- Number of threads to use for encryption/decryption
querier.numThreads=

##
## Optional Args
##

#dataSchemas -- optional -- Comma separated list of data schema file names to load
#querier.dataSchemas=

#querySchemas -- optional -- Comma separated list of query schema file names to load
#querier.querySchemas=


## Optional, but required for Encryption (ignored if not encrypting)

#bitset -- required for encryption -- Ensure that this bit position is set in the Paillier
#modulus (will generate Paillier moduli until finding one in which this bit is set)
#querier.bitSet=

#certainty -- required for encryption -- Certainty of prime generation for Paillier
#must be greater than or equal to 128
#querier.certainty=

#dataPartitionBitSize -- required for encryption -- Partition bit size in data partitioning
#querier.dataPartitionBitSize=

#embedSelector - required for encryption -- 'true' or 'false'
#Whether or not to embed the selector in the results to reduce false positives
#Defaults to 'true'
#querier.embedSelector=

#embedQuerySchema - true or false
#Whether or not to embed the QuerySchema in the Query (via QueryInfo)
#Defaults to 'false'
#querier.embedQuerySchema=
 
#hashBitSize - required for encryption-- Bit size of keyed hash
#querier.hashBitSize=

#hashKey -- required for encryption -- String key for the keyed hash functionality
#querier.hashKey=

#useHDFSLookupTable -- required for encryption -- 'true' or 'false'
#Whether or not to generate and use a hdfs modular exponentation lookup table
#Defaults to 'false'
#querier.useHDFSLookupTable=

#memLookupTable -- required for encryption -- 'true' or 'false'
#Whether or not to generate and use an in memory modular exponentation lookup table - only for
#standalone/testing right now...
#Defaults to 'false'
#querier.memLookupTable=

#paillierBitSize -- required for encryption -- Paillier modulus size N
#querier.paillierBitSize=
 
#queryType -- required for encryption
#Type of the query as defined in the 'schemaName' tag of the corresponding query schema file
#querier.queryType=

#secureRandomAlg -- specify the SecureRandom algorithm
#Defaults to NativePRNG
#querier.secureRandomAlg=

#secureRandomProvider -- specify the SecureRandom provider
#Defaults to SUN
#querier.secureRandomProvider=
  
## Optional, but required for Decryption (ignored if not decrypting)

#querierFile -- required for decryption
#Fully qualified file containing the serialized Querier object
#querier.querierFile=
  