###############################################################################
# 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.dataSchemas=


## 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=
  