GithubHelp home page GithubHelp logo

opensse / opensse-schemes Goto Github PK

View Code? Open in Web Editor NEW
91.0 5.0 26.0 1.1 MB

Implementation of some SSE schemes, including Sophos, Diana and Janus

License: GNU Affero General Public License v3.0

Python 1.15% C++ 92.95% Shell 3.55% CMake 2.35%
searchable-encryption sophos diana janus

opensse-schemes's Introduction

OpenSSE Schemes

License: AGPL v3 build status static analysis Coverage Status Codacy Badge

Implementation of SSE schemes. For now, the repo includes a C++ implementation of the following schemes:

Name Comments Authors Reference
Σoφoς (Sophos) First forward-private SSE scheme. Optimal asymptotic performance, but slow in practice because of its use of RSA. Bost [1]
Diana Very fast (practical) forward-private scheme, using only symetric cryptography. Bost, Minaud and Ohrimenko [2]
Janus First 'practical' backward-private scheme, based on puncturable encryption. In practice, very slow when the number of deletions grows. Bost, Minaud and Ohrimenko [2]
Tethys Static scheme designed for flash storage. Best in class throughput (as of 2021) and small ciphertext expansion, but with building time that can become prohibitively high. Bossuat, Bost, Fouque, Minaud, Reichle [3]
Pluto Practical improvement over Tethys for the setup time, but at the cost of an increased ciphertext expansion. Bossuat, Bost, Fouque, Minaud, Reichle [3]

References

Article Authors
[1] Σoφoς – Forward Secure Searchable Encryption Bost
[2] Forward and Backward Private Searchable Encryption from Constrained Cryptographic Primitives Bost, Minaud and Ohrimenko
[3] SSE and SSD: Page-Efficient Searchable Symmetric Encryption Bossuat, Bost, Fouque, Minaud, Reichle

Pre-requisites

All

OpenSSE's schemes implementation dependencies need a compiler supporting C++14 (although the core codebase doesn't). It has been successfully built and tested on Ubuntu 16.04 LTS using both clang 10 and gcc 5.4.0 and on Mac OS X.10 using clang 12.

The Cryptographic Toolkit

This repository uses a cryptographic toolkit specially designed for searchable encryption applications: crypto-tk. This toolkit is integrated as a git submodule, and will be automatically compiled when building the schemes. However, it has its own set of dependencies, and you should make sure they are available on your computer. Take a look at the build instructions for detailed information.

Linux

[sudo] apt-get install build-essential autoconf libtool yasm openssl cmake libaio-dev

The libaio-dev dependency is optional. However, if you are willing to use the Tethys and/or the Pluto schemes, we strongly advise you to install it, for performance's sake.

Installing gRPC

OpenSSE uses Google's gRPC as its RPC machinery. On Linux, there is, for now, no other way than installing gRPC from source. The procedure is described here. Note that OpenSSE has been tested with gRPC v1.34.

Installing RocksDB

OpenSSE uses Facebook's RocksDB as its storage engine. See the installation guide. Note that the build system currently used by this project does not support static builds of RocksDB. If you see linker errors involving compression libraries (libzstd, libz4, libsnappy, ...), it probably comes from OpenSSE linking against RocksDB's static library.

Mac OS X

[sudo] xcode-select --install

If you still haven't, you should get Homebrew. You can then directly install all the dependencies using Homebrew:

brew install automake autoconf yasm openssl cmake grpc rocksdb

Getting the code

The code is available via git:

git clone https://github.com/OpenSSE/opensse-schemes.git

You will also need to fetch the submodules (this might take a while):

git submodule update --init --recursive

Building

Building is done using CMake. The minimum required version is CMake 3.1.

Then, to build the code itself, just enter in your terminal

mkdir build && cd build
cmake ..
make

Build Configuration and Options

As the library builds using CMake, the configuration is highly configurable. Like other CMake-based projects, options are set by passing -DOPTION_NAME=value to the cmake command. For example, for a debug build, use -DCMAKE_BUILD_TYPE=Debug. Also, you can change the compiler used for the project by setting the CC and CXX environment variables. For example, if you wish to use Clang, you can set the project up with the following command CC=clang CXX=clang++ cmake ...

Options

  • ENABLE_COVERAGE=On|Off: Respectively enables and disables the code coverage functionalities. Disabled by default.
  • SANITIZE_ADDRESS=On|Off: Compiles the library with AddressSanitizer (ASan) when set to On. Great to check for stack/heap buffer overflows, memory leaks, ... Disabled by default.
  • SANITIZE_UNDEFINED=On|Off: When set to On, compiles the library with UndefinedBehaviorSanitizer (UBSan). UBSan detects undefined behavior at runtime in your code. Disabled by default.
  • opensse_ENABLE_WALL=On|Off: Toggles the -Wall compiler option. On by default
  • opensse_ENABLE_WEXTRA=On|Off: Toggles the -Wextra compiler option. On by default
  • opensse_ENABLE_WERROR=On|Off: Toggles the -Werror compiler option to turn all warnings into errors. On by default
  • CMAKE_BUILD_TYPE: Sets the build type. See CMake's documentation for more details. The Debug build type is used by default. Use Release for an optimized build.

To see all the available options, and interactively edit them, you can also use the ccmake tool.

For more information about how to use CMake, take a look at CMake's FAQ, or at the documentation.

In this project, CMake can also be used to configure the cryptographic toolkit. See crypto-tk's documentation for details and configuration points.

Usage

This repository provides implementations of SSE as a proof of concept, and cannot really be used for real sensitive applications. In particular, the cryptographic toolkit most probably has many implementation flaws.

The building script builds basic test programs for Sophos, Diana and Janus (respectively sophos_debug, diana_debug, and janus_debug), that are of no use per se, and two pairs of client/server programs for Sophos and Diana (sophos_server and sophos_client for Sophos, and diana_server and diana_client for Diana). These are the ones you are looking for.

Client

The clients usage is as follows sophos_client [-b client.db] [-l inverted_index.json] [-p] [-r count] [-q] [keyword1 [... keywordn]]

  • -b client.db : use file as the client database (test.csdb by default)
  • -l file.json : load the reversed index file.json and add it to the database. file.json is a JSON file with the following structure :
{
	"keyword1" : [1,2,3,4],
	"keyword2": [11,22,33,44,55]
}

In the repo, inverted_index.json is an example of such file.

  • -p : print stats about the loaded database (number of keywords)
  • -r count : generate a database with count entries. Look at the aux/db_generator.* files to see how such databases are generated
  • keyword1 … keywordn : search queries with keyword1 … keywordn.

Server

The servers usage is as follows sophos_server [-b server.db] [-s]

  • -b server.db : use file as the server database (test.ssdb by default)
  • -s : use synchronous searches (when searching, the server retrieves all the results before sending them to the client. By default, results are sent once retrieved). In the papers, this option was used for the benchmarks without RPC.

Contributors

Unless otherwise stated, the code has been written by Raphael Bost.

Licensing

OpenSSE Schemes is licensed under the GNU Affero General Public License v3.

AGPL

opensse-schemes's People

Contributors

rbost avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

opensse-schemes's Issues

make issue

Hi

I've followed the instructions to build the library on Ubuntu 18.04 but it seems to get stuck in this step in make.

I've installed rocksdb with the shared library and both my clang and gcc versions support C++17.

[ 38%] Built target dbparser
[ 38%] Building CXX object lib/CMakeFiles/schemes.dir/utils/logger.cpp.o
[ 39%] Building CXX object lib/CMakeFiles/schemes.dir/utils/rocksdb_wrapper.cpp.o
In file included from /usr/local/include/rocksdb/iterator.h:23:0,
from /usr/local/include/rocksdb/db.h:20,
from /home/smhan/opensse-schemes/lib/include/sse/schemes/utils/rocksdb_wrapper.hpp:26,
from /home/smhan/opensse-schemes/lib/utils/rocksdb_wrapper.cpp:21:
/usr/local/include/rocksdb/slice.h:46:20: error: ‘string_view’ in namespace ‘std’ does not name a type
Slice(const std::string_view& sv) : data_(sv.data()), size_(sv.size()) {}
^~~~~~~~~~~
/usr/local/include/rocksdb/slice.h:95:8: error: ‘string_view’ in namespace ‘std’ does not name a type
std::string_view ToStringView() const {
^~~~~~~~~~~
/usr/local/include/rocksdb/slice.h: In constructor ‘rocksdb::Slice::Slice(const int&)’:
/usr/local/include/rocksdb/slice.h:46:48: error: request for member ‘data’ in ‘sv’, which is of non-class type ‘const int’
Slice(const std::string_view& sv) : data_(sv.data()), size_(sv.size()) {}
^~~~
/usr/local/include/rocksdb/slice.h:46:66: error: request for member ‘size’ in ‘sv’, which is of non-class type ‘const int’
Slice(const std::string_view& sv) : data_(sv.data()), size_(sv.size()) {}
^~~~
In file included from /home/smhan/opensse-schemes/lib/utils/rocksdb_wrapper.cpp:21:0:
/home/smhan/opensse-schemes/lib/include/sse/schemes/utils/rocksdb_wrapper.hpp: In constructor ‘sse::sophos::RockDBWrapper::RockDBWrapper(const string&)’:
/home/smhan/opensse-schemes/lib/include/sse/schemes/utils/rocksdb_wrapper.hpp:106:13: error: ‘struct rocksdb::Options’ has no member named ‘new_table_reader_for_compaction_inputs’; did you mean ‘disable_auto_compactions’?
options.new_table_reader_for_compaction_inputs = true;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
disable_auto_compactions
/home/smhan/opensse-schemes/lib/include/sse/schemes/utils/rocksdb_wrapper.hpp: In constructor ‘sse::sophos::RockDBListStore<T, Serializer>::RockDBListStore(const string&)’:
/home/smhan/opensse-schemes/lib/include/sse/schemes/utils/rocksdb_wrapper.hpp:387:13: error: ‘struct rocksdb::Options’ has no member named ‘new_table_reader_for_compaction_inputs’; did you mean ‘disable_auto_compactions’?
options.new_table_reader_for_compaction_inputs = true;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
disable_auto_compactions
/home/smhan/opensse-schemes/lib/utils/rocksdb_wrapper.cpp: In constructor ‘sse::sophos::RocksDBCounter::RocksDBCounter(const string&)’:
/home/smhan/opensse-schemes/lib/utils/rocksdb_wrapper.cpp:56:13: error: ‘struct rocksdb::Options’ has no member named ‘new_table_reader_for_compaction_inputs’; did you mean ‘disable_auto_compactions’?
options.new_table_reader_for_compaction_inputs = true;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
disable_auto_compactions
lib/CMakeFiles/schemes.dir/build.make:89: recipe for target 'lib/CMakeFiles/schemes.dir/utils/rocksdb_wrapper.cpp.o' failed

Unable to build C object third_party/crypto/src/CMakeFiles/sse_crypto.dir/aez/aez.c.o

Hi @rbost,

I tried building the code in MacOS 11.6 (Apple M1 chip). The build files were successfully written after 'cmake ..', but I got the following error while trying to 'make' it. This doesn't seem to be an error from your code, but do you by chance know what can be the culprit here? Maybe some header files are not included in the file third_party/crypto/src/CMakeFiles/sse_crypto.dir/aez/aez.c.o

[  8%] Building C object third_party/crypto/src/CMakeFiles/sse_crypto.dir/aez/aez.c.o
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:648:17: error: implicit declaration of function '_mm_set1_epi32' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        frag1 = _mm_set1_epi32(0x00);
                ^
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:648:15: error: assigning to 'uint8x16_t' (vector of 16 'uint8_t' values) from incompatible type 'int'
        frag1 = _mm_set1_epi32(0x00);
              ^ ~~~~~~~~~~~~~~~~~~~~
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:650:17: error: implicit declaration of function '_mm_set1_epi32' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        frag0 = _mm_set1_epi32(0x00);
                ^
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:650:15: error: assigning to 'uint8x16_t' (vector of 16 'uint8_t' values) from incompatible type 'int'
        frag0 = _mm_set1_epi32(0x00);
              ^ ~~~~~~~~~~~~~~~~~~~~
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:651:15: error: assigning to 'uint8x16_t' (vector of 16 'uint8_t' values) from incompatible type 'int'
        frag1 = _mm_set1_epi32(0x00);
              ^ ~~~~~~~~~~~~~~~~~~~~
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:662:31: error: passing 'const uint8x16_t *' to parameter of type 'uint8x16_t *' discards qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
    final1 = vxor(final1, aes((const block*)ctx, final0, ctx->J[d]));
             ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:143:32: note: expanded from macro 'vxor'
#define vxor(x, y) veorq_u8(x, y)
                               ^
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:182:35: note: passing argument to parameter 'key' here
static uint8x16_t aes(uint8x16_t* key, uint8x16_t in, uint8x16_t first_key)
                                  ^
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:664:31: error: passing 'const uint8x16_t *' to parameter of type 'uint8x16_t *' discards qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
    final0 = vxor(final0, aes((const block*)ctx, final1, ctx->J[d ^ 1]));
             ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:143:32: note: expanded from macro 'vxor'
#define vxor(x, y) veorq_u8(x, y)
                               ^
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:182:35: note: passing argument to parameter 'key' here
static uint8x16_t aes(uint8x16_t* key, uint8x16_t in, uint8x16_t first_key)
                                  ^
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:674:33: error: passing 'const uint8x16_t *' to parameter of type 'uint8x16_t *' discards qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
        frag0 = vxor(frag0, aes((const block*)ctx, s, ctx->J[2]));
                ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:143:32: note: expanded from macro 'vxor'
#define vxor(x, y) veorq_u8(x, y)
                               ^
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:182:35: note: passing argument to parameter 'key' here
static uint8x16_t aes(uint8x16_t* key, uint8x16_t in, uint8x16_t first_key)
                                  ^
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:675:33: error: passing 'const uint8x16_t *' to parameter of type 'uint8x16_t *' discards qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
        frag1 = vxor(frag1, aes((const block*)ctx, s, vxor(ctx->J[2], J)));
                ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:143:32: note: expanded from macro 'vxor'
#define vxor(x, y) veorq_u8(x, y)
                               ^
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:182:35: note: passing argument to parameter 'key' here
static uint8x16_t aes(uint8x16_t* key, uint8x16_t in, uint8x16_t first_key)
                                  ^
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:682:33: error: passing 'const uint8x16_t *' to parameter of type 'uint8x16_t *' discards qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
        frag0 = vxor(frag0, aes((const block*)ctx, s, ctx->J[2]));
                ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:143:32: note: expanded from macro 'vxor'
#define vxor(x, y) veorq_u8(x, y)
                               ^
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:182:35: note: passing argument to parameter 'key' here
static uint8x16_t aes(uint8x16_t* key, uint8x16_t in, uint8x16_t first_key)
                                  ^
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:834:17: error: passing 'const uint8x16_t *' to parameter of type 'uint8x16_t *' discards qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
        t = aes((const block*)ctx, t, vxor(ctx->J[0], ctx->J[1]));
                ^~~~~~~~~~~~~~~~~
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:182:35: note: passing argument to parameter 'key' here
static uint8x16_t aes(uint8x16_t* key, uint8x16_t in, uint8x16_t first_key)
                                  ^
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:862:26: error: passing 'const uint8x16_t *' to parameter of type 'uint8x16_t *' discards qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
        t = zero_pad(aes((const block*)ctx, t, vxor(ctx->J[0], ctx->J[1])),
                         ^~~~~~~~~~~~~~~~~
/Users/basanta/Documents/opensse-schemes/third_party/crypto/src/aez/aez.c:182:35: note: passing argument to parameter 'key' here
static uint8x16_t aes(uint8x16_t* key, uint8x16_t in, uint8x16_t first_key)
                                  ^
12 errors generated.
make[2]: *** [third_party/crypto/src/CMakeFiles/sse_crypto.dir/aez/aez.c.o] Error 1
make[1]: *** [third_party/crypto/src/CMakeFiles/sse_crypto.dir/all] Error 2
make: *** [all] Error 2

build on master branch is failing for Ubuntu 18.04

Dear Rbost,
Building seems failing on Ubuntu 18.04.
make
Scanning dependencies of target sse_crypto
[ 1%] Building CXX object third_party/crypto/src/CMakeFiles/sse_crypto.dir/cipher.cpp.o
[ 2%] Building CXX object third_party/crypto/src/CMakeFiles/sse_crypto.dir/key.cpp.o
[ 3%] Building CXX object third_party/crypto/src/CMakeFiles/sse_crypto.dir/prg.cpp.o
[ 4%] Building CXX object third_party/crypto/src/CMakeFiles/sse_crypto.dir/tdp.cpp.o
[ 5%] Building CXX object third_party/crypto/src/CMakeFiles/sse_crypto.dir/prp.cpp.o
[ 6%] Building CXX object third_party/crypto/src/CMakeFiles/sse_crypto.dir/hmac.cpp.o
[ 8%] Building CXX object third_party/crypto/src/CMakeFiles/sse_crypto.dir/prf.cpp.o
[ 9%] Building CXX object third_party/crypto/src/CMakeFiles/sse_crypto.dir/puncturable_enc.cpp.o
In file included from /home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/util.hpp:3:0,
from /home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:11,
from /home/vaibhav/opensse-schemes/third_party/crypto/src/puncturable_enc.cpp:23:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h: In function ‘bool relicxx::operator==(const relicxx::ZR&, const relicxx::ZR&)’:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:218:33: error: ‘CMP_EQ’ was not declared in this scope
if (bn_cmp(x.z, y.z) == CMP_EQ) {
^~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:218:33: note: suggested alternative: ‘M_E’
if (bn_cmp(x.z, y.z) == CMP_EQ) {
^~~~~~
M_E
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h: In function ‘bool relicxx::operator!=(const relicxx::ZR&, const relicxx::ZR&)’:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:243:33: error: ‘CMP_EQ’ was not declared in this scope
if (bn_cmp(x.z, y.z) != CMP_EQ) {
^~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:243:33: note: suggested alternative: ‘M_E’
if (bn_cmp(x.z, y.z) != CMP_EQ) {
^~~~~~
M_E
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h: In function ‘bool relicxx::operator>(const relicxx::ZR&, const relicxx::ZR&)’:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:268:33: error: ‘CMP_GT’ was not declared in this scope
if (bn_cmp(x.z, y.z) == CMP_GT) {
^~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:268:33: note: suggested alternative: ‘EP_OT’
if (bn_cmp(x.z, y.z) == CMP_GT) {
^~~~~~
EP_OT
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h: In function ‘bool relicxx::operator<(const relicxx::ZR&, const relicxx::ZR&)’:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:293:33: error: ‘CMP_LT’ was not declared in this scope
if (bn_cmp(x.z, y.z) == CMP_LT) {
^~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:293:33: note: suggested alternative: ‘EP_OT’
if (bn_cmp(x.z, y.z) == CMP_LT) {
^~~~~~
EP_OT
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h: At global scope:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:324:58: error: ‘FP_BYTES’ was not declared in this scope
constexpr static uint16_t kByteSize = 1 + 2 * FP_BYTES;
^~~~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:324:58: note: suggested alternative: ‘FP_QNRES’
constexpr static uint16_t kByteSize = 1 + 2 * FP_BYTES;
^~~~~~~~
FP_QNRES
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:325:54: error: ‘FP_BYTES’ was not declared in this scope
constexpr static uint16_t kCompactByteSize = 1 + FP_BYTES;
^~~~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:325:54: note: suggested alternative: ‘FP_QNRES’
constexpr static uint16_t kCompactByteSize = 1 + FP_BYTES;
^~~~~~~~
FP_QNRES
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h: In function ‘bool relicxx::operator==(const relicxx::G1&, const relicxx::G1&)’:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:415:36: error: ‘CMP_EQ’ was not declared in this scope
return g1_cmp(x.g, y.g) == CMP_EQ;
^~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:415:36: note: suggested alternative: ‘M_E’
return g1_cmp(x.g, y.g) == CMP_EQ;
^~~~~~
M_E
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h: In function ‘bool relicxx::operator!=(const relicxx::G1&, const relicxx::G1&)’:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:419:36: error: ‘CMP_EQ’ was not declared in this scope
return g1_cmp(x.g, y.g) != CMP_EQ;
^~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:419:36: note: suggested alternative: ‘M_E’
return g1_cmp(x.g, y.g) != CMP_EQ;
^~~~~~
M_E
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h: At global scope:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:426:58: error: ‘FP_BYTES’ was not declared in this scope
constexpr static uint16_t kByteSize = 1 + 4 * FP_BYTES;
^~~~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:426:58: note: suggested alternative: ‘FP_QNRES’
constexpr static uint16_t kByteSize = 1 + 4 * FP_BYTES;
^~~~~~~~
FP_QNRES
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:427:58: error: ‘FP_BYTES’ was not declared in this scope
constexpr static uint16_t kCompactByteSize = 1 + 2 * FP_BYTES;
^~~~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:427:58: note: suggested alternative: ‘FP_QNRES’
constexpr static uint16_t kCompactByteSize = 1 + 2 * FP_BYTES;
^~~~~~~~
FP_QNRES
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h: In function ‘bool relicxx::operator==(const relicxx::G2&, const relicxx::G2&)’:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:514:70: error: ‘CMP_EQ’ was not declared in this scope
return g2_cmp(const_cast<G2&>(x).g, const_cast<G2&>(y).g) == CMP_EQ;
^~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:514:70: note: suggested alternative: ‘M_E’
return g2_cmp(const_cast<G2&>(x).g, const_cast<G2&>(y).g) == CMP_EQ;
^~~~~~
M_E
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h: In function ‘bool relicxx::operator!=(const relicxx::G2&, const relicxx::G2&)’:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:518:70: error: ‘CMP_EQ’ was not declared in this scope
return g2_cmp(const_cast<G2&>(x).g, const_cast<G2&>(y).g) != CMP_EQ;
^~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:518:70: note: suggested alternative: ‘M_E’
return g2_cmp(const_cast<G2&>(x).g, const_cast<G2&>(y).g) != CMP_EQ;
^~~~~~
M_E
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h: At global scope:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:525:55: error: ‘FP_BYTES’ was not declared in this scope
constexpr static uint16_t kByteSize = 12 * FP_BYTES;
^~~~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:525:55: note: suggested alternative: ‘FP_QNRES’
constexpr static uint16_t kByteSize = 12 * FP_BYTES;
^~~~~~~~
FP_QNRES
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:526:54: error: ‘FP_BYTES’ was not declared in this scope
constexpr static uint16_t kCompactByteSize = 8 * FP_BYTES;
^~~~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:526:54: note: suggested alternative: ‘FP_QNRES’
constexpr static uint16_t kCompactByteSize = 8 * FP_BYTES;
^~~~~~~~
FP_QNRES
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h: In function ‘bool relicxx::operator==(const relicxx::GT&, const relicxx::GT&)’:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:613:70: error: ‘CMP_EQ’ was not declared in this scope
return gt_cmp(const_cast<GT&>(x).g, const_cast<GT&>(y).g) == CMP_EQ;
^~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:613:70: note: suggested alternative: ‘M_E’
return gt_cmp(const_cast<GT&>(x).g, const_cast<GT&>(y).g) == CMP_EQ;
^~~~~~
M_E
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h: In function ‘bool relicxx::operator!=(const relicxx::GT&, const relicxx::GT&)’:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:617:70: error: ‘CMP_EQ’ was not declared in this scope
return gt_cmp(const_cast<GT&>(x).g, const_cast<GT&>(y).g) != CMP_EQ;
^~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:617:70: note: suggested alternative: ‘M_E’
return gt_cmp(const_cast<GT&>(x).g, const_cast<GT&>(y).g) != CMP_EQ;
^~~~~~
M_E
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h: At global scope:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:80:29: error: ‘RELIC_BN_BITS’ was not declared in this scope
#define RELIC_BN_BYTES CEIL(RELIC_BN_BITS, 8)
^
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:654:11: note: in expansion of macro ‘RELIC_BN_BYTES’
= RELIC_BN_BYTES + kStatisticalSecurity / 8;
^~~~~~~~~~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:80:29: note: suggested alternative: ‘RLC_BN_BITS’
#define RELIC_BN_BYTES CEIL(RELIC_BN_BITS, 8)
^
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:654:11: note: in expansion of macro ‘RELIC_BN_BYTES’
= RELIC_BN_BYTES + kStatisticalSecurity / 8;
^~~~~~~~~~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:80:24: error: ‘CEIL’ was not declared in this scope
#define RELIC_BN_BYTES CEIL(RELIC_BN_BITS, 8)
^
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:654:11: note: in expansion of macro ‘RELIC_BN_BYTES’
= RELIC_BN_BYTES + kStatisticalSecurity / 8;
^~~~~~~~~~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:80:24: note: suggested alternative: ‘CALL’
#define RELIC_BN_BYTES CEIL(RELIC_BN_BITS, 8)
^
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:654:11: note: in expansion of macro ‘RELIC_BN_BYTES’
= RELIC_BN_BYTES + kStatisticalSecurity / 8;
^~~~~~~~~~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:657:60: error: could not convert template argument ‘relicxx::PairingGroup::kPrfOutputSize’ from ‘const unsigned int’ to ‘short unsigned int’
ZR pseudoRandomZR(const sse::crypto::Prf& prf,
^
In file included from /home/vaibhav/opensse-schemes/third_party/crypto/src/puncturable_enc.cpp:23:0:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:32:61: error: ‘FP_BYTES’ was not declared in this scope
using PPKE_HKDF = sse::crypto::HMac<sse::crypto::Hash, 12 * FP_BYTES>;
^~~~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:32:61: note: suggested alternative: ‘FP_QNRES’
using PPKE_HKDF = sse::crypto::HMac<sse::crypto::Hash, 12 * FP_BYTES>;
^~~~~~~~
FP_QNRES
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:32:69: error: template argument 2 is invalid
using PPKE_HKDF = sse::crypto::HMac<sse::crypto::Hash, 12 * FP_BYTES>;
^
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:307:58: error: could not convert template argument ‘sse::crypto::kPPKEPrfOutputSize’ from ‘const size_t {aka const long unsigned int}’ to ‘short unsigned int’
void keygen(const sse::crypto::Prf& prf,
^
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:312:60: error: could not convert template argument ‘sse::crypto::kPPKEPrfOutputSize’ from ‘const size_t {aka const long unsigned int}’ to ‘short unsigned int’
void paramgen(const sse::crypto::Prf& prf,
^
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:425:50: error: could not convert template argument ‘sse::crypto::kPPKEPrfOutputSize’ from ‘const size_t {aka const long unsigned int}’ to ‘short unsigned int’
const sse::crypto::Prf& prf,
^
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:429:50: error: could not convert template argument ‘sse::crypto::kPPKEPrfOutputSize’ from ‘const size_t {aka const long unsigned int}’ to ‘short unsigned int’
const sse::crypto::Prf& prf,
^
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:451:65: error: could not convert template argument ‘sse::crypto::kPPKEPrfOutputSize’ from ‘const size_t {aka const long unsigned int}’ to ‘short unsigned int’
void keygenPartial(const sse::crypto::Prf& prf,
^
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:458:74: error: could not convert template argument ‘sse::crypto::kPPKEPrfOutputSize’ from ‘const size_t {aka const long unsigned int}’ to ‘short unsigned int’
GmppkePrivateKeyShare skgen(const sse::crypto::Prf& prf,
^
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp: In member function ‘sse::crypto::GmmppkeCT sse::crypto::Gmppke::encrypt(const sse::crypto::GmppkePublicKey&, const T&, const tag_type&) const’:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:342:34: error: ‘FP_BYTES’ was not declared in this scope
std::array<uint8_t, 12 * FP_BYTES> gt_blind_bytes;
^~~~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:342:34: note: suggested alternative: ‘FP_QNRES’
std::array<uint8_t, 12 * FP_BYTES> gt_blind_bytes;
^~~~~~~~
FP_QNRES
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:342:42: error: template argument 2 is invalid
std::array<uint8_t, 12 * FP_BYTES> gt_blind_bytes;
^
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:344:45: error: request for member ‘size’ in ‘gt_blind_bytes’, which is of non-class type ‘int’
.getBytes(false, gt_blind_bytes.size(), gt_blind_bytes.data());
^~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:344:68: error: request for member ‘data’ in ‘gt_blind_bytes’, which is of non-class type ‘int’
.getBytes(false, gt_blind_bytes.size(), gt_blind_bytes.data());
^~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:347:34: error: request for member ‘data’ in ‘gt_blind_bytes’, which is of non-class type ‘int’
hkdf.hmac(gt_blind_bytes.data(),
^~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:348:34: error: request for member ‘size’ in ‘gt_blind_bytes’, which is of non-class type ‘int’
gt_blind_bytes.size(),
^~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp: In member function ‘sse::crypto::GmmppkeCT sse::crypto::Gmppke::encrypt(const sse::crypto::GmppkeSecretParameters&, const T&, const tag_type&) const’:
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:368:34: error: ‘FP_BYTES’ was not declared in this scope
std::array<uint8_t, 12 * FP_BYTES> gt_blind_bytes;
^~~~~~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:368:34: note: suggested alternative: ‘FP_QNRES’
std::array<uint8_t, 12 * FP_BYTES> gt_blind_bytes;
^~~~~~~~
FP_QNRES
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:368:42: error: template argument 2 is invalid
std::array<uint8_t, 12 * FP_BYTES> gt_blind_bytes;
^
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:370:45: error: request for member ‘size’ in ‘gt_blind_bytes’, which is of non-class type ‘int’
.getBytes(false, gt_blind_bytes.size(), gt_blind_bytes.data());
^~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:370:68: error: request for member ‘data’ in ‘gt_blind_bytes’, which is of non-class type ‘int’
.getBytes(false, gt_blind_bytes.size(), gt_blind_bytes.data());
^~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:373:34: error: request for member ‘data’ in ‘gt_blind_bytes’, which is of non-class type ‘int’
hkdf.hmac(gt_blind_bytes.data(),
^~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:374:34: error: request for member ‘size’ in ‘gt_blind_bytes’, which is of non-class type ‘int’
gt_blind_bytes.size(),
^~~~
/home/vaibhav/opensse-schemes/third_party/crypto/src/puncturable_enc.cpp: At global scope:
/home/vaibhav/opensse-schemes/third_party/crypto/src/puncturable_enc.cpp:52:46: error: could not convert template argument ‘sse::crypto::kPPKEPrfOutputSize’ from ‘const size_t {aka const long unsigned int}’ to ‘short unsigned int’
const sse::crypto::Prf master_prf_;
^
/home/vaibhav/opensse-schemes/third_party/crypto/src/puncturable_enc.cpp:55:61: error: could not convert template argument ‘sse::crypto::kPPKEPrfOutputSize’ from ‘const size_t {aka const long unsigned int}’ to ‘short unsigned int’
== sse::crypto::Prf::kKeySize,
^
/home/vaibhav/opensse-schemes/third_party/crypto/src/puncturable_enc.cpp: In constructor ‘sse::crypto::PuncturableEncryption::PEncImpl::PEncImpl(sse::crypto::punct::master_key_type&&)’:
/home/vaibhav/opensse-schemes/third_party/crypto/src/puncturable_enc.cpp:61:33: error: cannot convert ‘std::remove_reference<sse::crypto::Key<32>&>::type {aka sse::crypto::Key<32>}’ to ‘const int’ in initialization
: master_prf_(std::move(key))
^
third_party/crypto/src/CMakeFiles/sse_crypto.dir/build.make:230: recipe for target 'third_party/crypto/src/CMakeFiles/sse_crypto.dir/puncturable_enc.cpp.o' failed
make[2]: *** [third_party/crypto/src/CMakeFiles/sse_crypto.dir/puncturable_enc.cpp.o] Error 1
CMakeFiles/Makefile2:1059: recipe for target 'third_party/crypto/src/CMakeFiles/sse_crypto.dir/all' failed
make[1]: *** [third_party/crypto/src/CMakeFiles/sse_crypto.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2

Does opensse-schemes support centos7?

I try to build opensse-schemes on centos7, but I met some problems, what should I do?
The problems look like this, "In file included from /home/swj/research/build/opensse-schemes/third_party/crypto/src/ppke/util.hpp:3:0,
from /home/swj/research/build/opensse-schemes/third_party/crypto/src/ppke/GMPpke.hpp:11,
from /home/swj/research/build/opensse-schemes/third_party/crypto/src/puncturable_enc.cpp:23:
/home/swj/research/build/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h: In function 'bool relicxx::operator==(const relicxx::ZR&, const relicxx::ZR&)':
/home/swj/research/build/opensse-schemes/third_party/crypto/src/ppke/relic_wrapper/relic_api.h:218:33: error: 'RLC_EQ' was not declared in this scope
if (bn_cmp(x.z, y.z) == RLC_EQ) {"

Use configuration files instead of CLI arguments to configure the client and server apps

The number of CLI arguments, the poor documentation, and the difficult use of these arguments pledge for a change in the way the client and server applications are configured at startup.
A way better way to deal with configuration is to use configuration files, and to pass the configuration file as the only argument to the executables.

This would require to add code to parse this configuration file, but, as we already use rapidjson to parse JSON datasets, if we decide to use JSON as the format of the configuration file, we would not have to add an additional dependency to the code base. On the other hand, YAML or TOML might be better choices than JSON to write configuration files, but it would require to use a new library.

Installation Error

I have following the suggested procedures to install the dependency,
but I have come to the error in opensee-schemes make procedure,

the error is shown as follows,

[ 37%] Built target sse_crypto
[ 41%] Built target dbparser
[ 54%] Built target schemes
[ 68%] Built target runners
[ 70%] Linking CXX executable sophos_client
../lib/librunners.so: undefined reference to `grpc_core::JoinHostPort(absl::lts_2020_02_25::string_view, int)'

Is there any thing wrong with the grpc installation?
But I have successfully installed grpc with cmake and make.
The only reason I suspect is that should I cmake grpc with option shared libraries (.so)?

Cmake Error:Could NOT find Protobuf (missing: Protobuf_PROTOC_EXECUTABLE) (found version "3.13.0.0")

Hi,
When i try to build, i get this error:

cmake ..

CMake Error at /usr/local/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find Protobuf (missing: Protobuf_PROTOC_EXECUTABLE) (found
version "3.13.0.0")
Call Stack (most recent call first):
/usr/local/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
/usr/local/lib/cmake/protobuf/protobuf-module.cmake:162 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
/usr/local/lib/cmake/protobuf/protobuf-config.cmake:149 (include)
cmake/FindGRPC.cmake:80 (find_package)
CMakeLists.txt:87 (find_package)

-- Configuring incomplete, errors occurred!
See also "/home/zhouyou/opensse-schemes/build/CMakeFiles/CMakeOutput.log".
See also "/home/zhouyou/opensse-schemes/build/CMakeFiles/CMakeError.log".

I have installed protobuf :
protoc --version
libprotoc 3.13.0

cmake: Could NOT find RocksDB (missing: ROCKSDB_LIBRARIES ROCKSDB_INCLUDE_DIRS)

Hi,
When I try to build with cmake, I get this error:

-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test COMPILER_OPT_WALL_SUPPORTED
-- Performing Test COMPILER_OPT_WALL_SUPPORTED - Success
-- Performing Test COMPILER_OPT_WEXTRA_SUPPORTED
-- Performing Test COMPILER_OPT_WEXTRA_SUPPORTED - Success
-- Performing Test COMPILER_OPT_WERROR_SUPPORTED
-- Performing Test COMPILER_OPT_WERROR_SUPPORTED - Success
-- Performing Test COMPILER_OPT_ARCH_NATIVE_SUPPORTED
-- Performing Test COMPILER_OPT_ARCH_NATIVE_SUPPORTED - Success
CMake Error at /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
Could NOT find RocksDB (missing: ROCKSDB_LIBRARIES ROCKSDB_INCLUDE_DIRS)
Call Stack (most recent call first):
/usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE)
cmake/FindRocksDB.cmake:35 (find_package_handle_standard_args)
CMakeLists.txt:82 (find_package)

-- Configuring incomplete, errors occurred!

It seems it looks for a directory named lib that doesn't exist in my rocksdb installation

Fail to build out of the box on Mac OS X

I have tried to build on Mac OS X and had to do the following fixes to make it pass:

diff --git a/cmake/FindGRPC.cmake b/cmake/FindGRPC.cmake
index df19edd..8c65838 100644
--- a/cmake/FindGRPC.cmake
+++ b/cmake/FindGRPC.cmake
@@ -77,7 +77,7 @@ endfunction()


 set(protobuf_MODULE_COMPATIBLE TRUE)
-  find_package(Protobuf CONFIG REQUIRED)
+  find_package(Protobuf REQUIRED)
   message(STATUS "Using protobuf ${Protobuf_VERSION}")

   set(PROTOBUF_LIBPROTOBUF protobuf::libprotobuf)

-> there is no Protobuf.Config.cmake file to be found

diff --git a/lib/tethys/tethys_graph.cpp b/lib/tethys/tethys_graph.cpp
index 1fee707..219e5bd 100644
--- a/lib/tethys/tethys_graph.cpp
+++ b/lib/tethys/tethys_graph.cpp
@@ -534,7 +534,7 @@ size_t TethysGraph::get_flow() const
     }

     size_t flow = 0;
-    for (const EdgePtr e_ptr : source.out_edges) {
+    for (const EdgePtr &e_ptr : source.out_edges) {
         // cppcheck-suppress useStlAlgorithm
         flow += edges[e_ptr].flow;
     }

The c++ compiler chokes on the lack of reference operator.

Re-writes the clients as consoles.

The behavior of the clients is very limited today: there is no interaction between the user and the executable. It would be much easier to have a console that could be used to search for keywords, add new entries, load JSON datasets, ...

Running example with diana_client does not work

I have tried to run the example suggested using diana_server and diana_client but the later fails:

% build/src/diana_client -l inverted_index_test.json  whose
[2021-08-05 09:47:27.273] [console] [warning] Client database not specified. Using 'test.dcdb' by default
[2021-08-05 09:47:27.282] [console] [info] Load file inverted_index_test.json
[2021-08-05 09:47:27.294] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.294] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.294] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.294] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.302] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.302] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.302] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.302] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.303] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.303] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.303] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.310] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.311] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.311] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.311] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.311] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.311] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.311] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.312] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.319] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.319] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.319] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.331] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.331] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.331] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.331] [console] [error] Update session stopped: broken stream.
[2021-08-05 09:47:27.331] [console] [info] Loading: 26 keywords processed
[2021-08-05 09:47:27.331] [console] [error] Status not OK at the end of update sessions. Status:
failed to connect to all addresses
Maximum queue size: 18
[2021-08-05 09:47:27.331] [console] [info] Done loading file inverted_index_test.json

Houston we have a problem

I have these errors while compiling and so I can't test this library, someone would help me?

CMake Warning at /usr/share/cmake-3.23/Modules/FindProtobuf.cmake:524 (message):
  Protobuf compiler version 3.12.4 doesn't match library version 3.19.4
Call Stack (most recent call first):
  CMakeLists.txt:86 (find_package)


CMake Error at /usr/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find Protobuf (missing: Protobuf_PROTOC_EXECUTABLE) (found
  version "3.19.4.0")
Call Stack (most recent call first):
  /usr/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
  /usr/lib/cmake/protobuf/protobuf-module.cmake:160 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  /usr/lib/cmake/protobuf/protobuf-config.cmake:151 (include)
  cmake/FindGRPC.cmake:80 (find_package)
  CMakeLists.txt:87 (find_package)


-- Configuring incomplete, errors occurred!
See also "/home/kali/opensse-schemes/build/CMakeFiles/CMakeOutput.log".
See also "/home/kali/opensse-schemes/build/CMakeFiles/CMakeError.log".

CMakeError.log
CMakeOutput.log

Build error on Ubuntu 20.04.3: requires -fPIC

Hello,

I am trying to install OpenSSE on Ubuntu 20.04.3. I have installed all the dependencies needed, I am able to execute 'cmake', but I get the following error while trying to 'make' it.

..
[ 52%] Building CXX object lib/CMakeFiles/schemes.dir/tethys/tethys_allocator.cpp.o
[ 53%] Building CXX object lib/CMakeFiles/schemes.dir/pluto/rocksdb_store.cpp.o
[ 54%] Linking CXX shared library libschemes.so
/usr/bin/ld: /usr/local/lib/librocksdb.a(concurrent_arena.o): relocation R_X86_64_TPOFF32 against symbol `_ZN7rocksdb15ConcurrentArena9tls_cpuidE' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/librocksdb.a(iostats_context.o): relocation R_X86_64_TPOFF32 against symbol `_ZN7rocksdb15iostats_contextE' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/librocksdb.a(perf_context.o): relocation R_X86_64_TPOFF32 against `__tls_guard' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/librocksdb.a(perf_level.o): relocation R_X86_64_TPOFF32 against symbol `_ZN7rocksdb10perf_levelE' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/librocksdb.a(thread_status_updater.o): relocation R_X86_64_TPOFF32 against symbol `_ZN7rocksdb19ThreadStatusUpdater19thread_status_data_E' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/librocksdb.a(thread_status_util.o): relocation R_X86_64_TPOFF32 against symbol `_ZN7rocksdb16ThreadStatusUtil27thread_updater_initialized_E' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/librocksdb.a(random.o): relocation R_X86_64_TPOFF32 against `_ZZN7rocksdb6Random14GetTLSInstanceEvE12tls_instance' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/librocksdb.a(thread_local.o): relocation R_X86_64_TPOFF32 against symbol `_ZN7rocksdb14ThreadLocalPtr10StaticMeta4tls_E' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/librocksdb.a(db_impl_open.o): relocation R_X86_64_PC32 against symbol `_ZN7rocksdb32kPersistentStatsColumnFamilyNameB5cxx11E' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make[2]: *** [lib/CMakeFiles/schemes.dir/build.make:334: lib/libschemes.so] Error 1
make[1]: *** [CMakeFiles/Makefile2:429: lib/CMakeFiles/schemes.dir/all] Error 2
make: *** [Makefile:141: all] Error 2

I tried editing the CMakeLists.txt by adding the missing flag when compiling, but I still get the same error.

set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC" ) 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC" )

Please let me know if any other information is required.

Enable CI

Write a functional .travis.yml file and fix all the encountered problems.

Improve the logging

Today, the logging is done by hand, and the result is not satisfactory. We should instead use a logging library that will provide us with far better-looking and usable results, without hindering the performance (glog might be a good idea as we already use grpc and GoogleTest, but other candidates have to be studied).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.