Giter Site home page Giter Site logo

osu-crypto / libote Goto Github PK

View Code? Open in Web Editor NEW
424.0 16.0 106.0 4.03 MB

A fast, portable, and easy to use Oblivious Transfer Library

License: Other

C++ 78.94% C 18.79% CMake 2.23% Python 0.04%
ot-protocols ot-extension delta-ot oblivious-transfer-extension secure-computation oblivious-transfer

libote's Introduction

Build Status

A fast and portable C++20 library for Oblivious Transfer extension (OTe). The primary design goal of this library to obtain high performance while being easy to use. Checkout version 1.6 for the previous version.

Semi-honest OT extension:

Malicious OT extension:

Vole:

Introduction

This library provides several different classes of OT protocols. First is the base OT protocol of [CO15, MR19, MRR21]. These protocol bootstraps all the other OT extension protocols. Within the OT extension protocols, we have 1-out-of-2, 1-out-of-N, and VOLE both in the semi-honest and malicious settings. See The frontend or libOTe_Tests folder for examples.

All implementations are highly optimized using fast SSE instructions and vectorization to obtain optimal performance both in the single and multi-threaded setting.

Networking can be performed using both the sockets provided by the library and external socket classes. The simplest integration can be achieved via the message passing interface where the user is given the protocol messages that need to be sent/received. Users can also integrate their own socket type for maximum performance. See the coproto tutorial for examples.

Build

The library is cross platform and has been tested on Windows, Mac and Linux. There is one mandatory dependency on coproto (networking), and three optional dependencies on libsodium, Relic, or SimplestOT (Unix only) for Base OTs. Boost Asio tcp networking and OpenSSL support can optionally be enabled. CMake 3.15+ is required and the build script assumes python 3.

The library can be built with libsodium, all OT protocols enabled and boost asio TCP networking as

git clone https://github.com/osu-crypto/libOTe.git
cd libOTe
python build.py --all --boost --sodium

The main executable with examples is frontend and is located in the build directory, eg out/build/linux/frontend/frontend, out/build/x64-Release/frontend/frontend.exe depending on the OS.

Build Options

LibOTe can be built with various only the selected protocols enabled. -D ENABLE_ALL_OT=ON will enable all available protocols depending on platform/dependencies. The ON/OFF options include

Malicious base OT:

  • ENABLE_SIMPLESTOT the SimplestOT [CO15] protocol (relic or sodium).
  • ENABLE_SIMPLESTOT_ASM the SimplestOT base OT protocol [CO15] protocol (linux assembly).
  • ENABLE_MRR the McQuoid Rosulek Roy [MRR20] protocol (relic or sodium).
  • ENABLE_MRR_TWIST the McQuoid Rosulek Roy [MRR21] protocol (sodium fork).
  • ENABLE_MR the Masny Rindal [MR19] protocol (relic or sodium).
  • ENABLE_MR_KYBER the Masny Rindal [MR19] protocol (Kyber fork).
  • ENABLE_NP the Naor Pinkas [NP01] base OT (relic or sodium).

1-out-of-2 OT Extension:

  • ENABLE_IKNP the Ishai et al [IKNP03] semi-honest protocol.
  • ENABLE_KOS the Keller et al [KOS15] malicious protocol.
  • ENABLE_DELTA_KOS the Burra et al [BLNNOOSS15],[KOS15] malicious Delta-OT protocol.
  • ENABLE_SOFTSPOKEN_OT the Roy Roy22 semi-honest/malicious protocol.
  • ENABLE_SILENTOT the [BCGIKRS19],[RRT23] semi-honest/malicious protocol.

Vole:

Addition options can be set for cryptoTools. See the cmake output.

Dependencies

Dependencies can be managed by cmake/build.py or installed via an external tool. If an external tool is used install to system location or set -D CMAKE_PREFIX_PATH=path/to/install. By default build.py calls cmake with the command line argument

-D FETCH_AUTO=true

. This tells cmake to first look for dependencies on the system and if not found then it will be downloaded and built automatically. If set to false then the build will fail if not found. Each dependency can downloaded and build for you by explicitly setting it's FETCH_*** variable to true. See blow. The python build.py script by default sets FETCH_AUTO=true and can be set to false by calling it with --noauto.

Enabling/Disabling Relic (for base OTs): The library can be built with Relic as

python build.py --relic

Relic can be disabled by removing --relic from the setup and setting -D ENABLE_RELIC=false. This will always download and build relic. To only enable but not download relic, use python build.py -D ENABLE_RELIC=true.

Enabling/Disabling libsodium (for base OTs): The library can be built with libsodium as

python build.py --sodium

libsodium can be disabled by removing --sodium from the setup and setting -D ENABLE_SODIUM=false. This will always download and build sodium. To only enable but not download relic, use python build.py -D ENABLE_SODIUM=true.

The McQuoid Rosulek Roy 2021 Base OTs uses a twisted curve which additionally require the noclamp option for Montgomery curves and is currently only in a fork of libsodium. If you prefer the stable libsodium, then install it and add -D SODIUM_MONTGOMERY=false as a cmake argument to libOTe.

Enabling/Disabling boost asio (for TCP networking): The library can be built with boost as

python build.py --boost

boost can be disabled by removing --boost from the setup and setting -D ENABLE_BOOST=false. This will always download and build boost. To only enable but not download relic, use python build.py -D ENABLE_BOOST=true.

Enabling/Disabling OpenSSL (for TLS networking): The library can be built with boost as

python build.py --openssl

OpenSSL can be disabled by removing --openssl from the setup and setting -D ENABLE_OPENSSL=false. OpenSSL is never downloaded for you and is always found using your system installs.

Install

libOTe can be installed and linked the same way as other cmake projects. To install the library and all downloaded dependencies, run the following

python build.py --install

Sudo is not used. If installation requires sudo access, then install as root. See python build.py --help for full details.

Linking

libOTe can be linked via cmake as

find_package(libOTe REQUIRED)
target_link_libraries(myProject oc::libOTe)

Other exposed targets are oc::cryptoTools, oc::tests_cryptoTools, oc::libOTe_Tests. In addition, cmake variables libOTe_LIB, libOTe_INC, ENABLE_XXX will be defined, where XXX is one of the libOTe options.

To ensure that cmake can find libOTe, you can either install libOTe or build it locally and set -D CMAKE_PREFIX_PATH=path/to/libOTe or provide its location as a cmake HINTS, i.e. find_package(libOTe HINTS path/to/libOTe).

libOTe can be found with the following components:

find_package(libOTe REQUIRED 
    COMPONENTS
        std_20
        
        Debug
        Release
        RelWithDebInfo

        boost
        relic
        sodium
        bitpolymul
        openssl
        circuits

        sse
        avx
        asan
        pic
        no_sse
        no_avx
        no_asan
        no_pic

        simplestot
        simplestot_asm
        mrr
        mrr_twist
        mr
        mr_kyber
        kos
        iknp
        silentot
        softspoken_ot
        delta_kos
        silent_vole
        oos
        kkrt
)

Help

Contact Peter Rindal [email protected] for any assistance on building or running the library.

Citing

Spread the word!

@misc{libOTe,
    author = {Peter Rindal, Lance Roy},
    title = {{libOTe: an efficient, portable, and easy to use Oblivious Transfer Library}},
    howpublished = {\url{https://github.com/osu-crypto/libOTe}},
}

Citation

[NP01] - Moni Naor, Benny Pinkas, Efficient Oblivious Transfer Protocols.

[IKNP03] - Yuval Ishai and Joe Kilian and Kobbi Nissim and Erez Petrank, Extending Oblivious Transfers Efficiently.

[KOS15] - Marcel Keller and Emmanuela Orsini and Peter Scholl, Actively Secure OT Extension with Optimal Overhead. eprint/2015/546

[OOS16] - Michele Orrù and Emmanuela Orsini and Peter Scholl, Actively Secure 1-out-of-N OT Extension with Application to Private Set Intersection. eprint/2016/933

[KKRT16] - Vladimir Kolesnikov and Ranjit Kumaresan and Mike Rosulek and Ni Trieu, Efficient Batched Oblivious PRF with Applications to Private Set Intersection. eprint/2016/799

[RR16] - Peter Rindal and Mike Rosulek, Improved Private Set Intersection against Malicious Adversaries. eprint/2016/746

[BLNNOOSS15] - Sai Sheshank Burra and Enrique Larraia and Jesper Buus Nielsen and Peter Sebastian Nordholt and Claudio Orlandi and Emmanuela Orsini and Peter Scholl and Nigel P. Smart, High Performance Multi-Party Computation for Binary Circuits Based on Oblivious Transfer. eprint/2015/472

[ALSZ15] - Gilad Asharov and Yehuda Lindell and Thomas Schneider and Michael Zohner, More Efficient Oblivious Transfer Extensions with Security for Malicious Adversaries. eprint/2015/061

[CRR21] - Geoffroy Couteau ,Srinivasan Raghuraman and Peter Rindal, Silver: Silent VOLE and Oblivious Transfer from Hardness of Decoding Structured LDPC Codes.

[Roy22] - Lawrence Roy, SoftSpokenOT: Communication--Computation Tradeoffs in OT Extension. eprint/2022/192

[RRT23] - Srinivasan Raghuraman, Peter Rindal and Titouan Tanguy, Expand-Convolute Codes for Pseudorandom Correlation Generators from LPN. eeprint/2023/882

libote's People

Contributors

abhishekshah212 avatar andrew-gan avatar aqua-dream avatar catincosmicspace avatar erik-buchholz avatar ladnir avatar ladnir2 avatar ldr709 avatar lrusso96 avatar lzjluzijie avatar mkskeller avatar oleksandr-tkachenko avatar oreko avatar rahulrachuri avatar rindalvisa avatar sachaservan avatar schoppmp avatar spaceships 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

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

libote's Issues

Build error: Accessing undefined Log

Hi,

The IOService class member mLog is accessed from Channel.cpp (lines 46 and 70) whether ENABLE_NET_LOG was defined or not. Naturally, when ENABLE_NET_LOG is not defined the build fails.

FYI.

PIR COMM

How many servers and clients does a PIR require?

Cannot open file 'frontend_cryptoTools/miracl.lib' and 'frontend/libboost_date_time-vc141-mt-gd-x64-1_69.lib'

image

Is the above intended behaviour? I am using Windows 10 and this is my project.jam configuration

import option ; 
 
using msvc : 14.1 : "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\Hostx86\x64\cl.exe";
 
option.set keep-going : false ; 

Steps to reproduce:

Build Boost

  1. git clone --recursive https://github.com/osu-crypto/libOTe.git
  2. cd libOTe/cryptoTools/thirdparty/win
  3. Download boost 1.69.0 .zip file from https://www.boost.org/users/history/version_1_69_0.html inside this directory and extract
  4. $PWD\bootstrap.bat
  5. .\b2.exe toolset=msvc-14.1 architecture=x86 address-model=64 --with-thread --with-filesystem --with-regex --with-date_time stage link=static variant=debug,release runtime-link=static threading=multi

Enable Relic

  1. git clone https://github.com/ladnir/relic.git
  2. cd relic
  3. cmake . -DMULTI=OPENMP -DCMAKE_INSTALL_PREFIX:PATH=C:\libs -DCMAKE_GENERATOR_PLATFORM=x64 -DRUNTIME=MT
  4. cmake --build .
  5. cmake --install .
  6. Edit the config file libOTe/cryptoTools/cryptoTools/Common/config.h to include #define ENABLE_RELIC.

Enable Miracl

  1. cd libOTe/cryptoTools/thirdparty/win
  2. git clone https://github.com/ladnir/miracl.git
  3. Built Miracl.sln in Visual Studio 2019
  4. Edit the config file libOTe/cryptoTools/cryptoTools/Common/config.h to include #define ENABLE_MIRACL

There were minor bugs and config changes along the way which I had to fix to make it compatible with Visual Studio 2019.

Please let me know if you need any other details to reproduce the error.

linux building issues with Simplest OT

When I try to build on linux (Ubuntu 19.04) with SimplestOT ON I get errors. Any ideas why?
Here is a small repro.

osboxes@osboxes:~/other_tests$ git clone [email protected]:osu-crypto/libOTe.git --recursive
Cloning into 'libOTe'...
remote: Enumerating objects: 472, done.
remote: Counting objects: 100% (472/472), done.
remote: Compressing objects: 100% (295/295), done.
remote: Total 3567 (delta 278), reused 336 (delta 175), pack-reused 3095
Receiving objects: 100% (3567/3567), 2.32 MiB | 12.44 MiB/s, done.
Resolving deltas: 100% (2545/2545), done.
Submodule 'cryptoTools' (https://github.com/ladnir/cryptoTools.git) registered for path 'cryptoTools'
Cloning into '/home/osboxes/other_tests/libOTe/cryptoTools'...
remote: Enumerating objects: 179, done.        
remote: Counting objects: 100% (179/179), done.        
remote: Compressing objects: 100% (117/117), done.        
remote: Total 2847 (delta 117), reused 109 (delta 62), pack-reused 2668        
Receiving objects: 100% (2847/2847), 1.11 MiB | 9.95 MiB/s, done.
Resolving deltas: 100% (2133/2133), done.
Submodule path 'cryptoTools': checked out 'f64289334505a114111c283ba3087e8509e4d7e8'
osboxes@osboxes:~/other_tests$ cd libOTe/cryptoTools/thirdparty/linux/
osboxes@osboxes:~/other_tests/libOTe/cryptoTools/thirdparty/linux$ bash all.get 
 =================== Building Boost ===================
--2019-09-08 13:11:34--  https://dl.bintray.com/boostorg/release/1.69.0/source/boost_1_69_0.tar.bz2
Resolving dl.bintray.com (dl.bintray.com)... 54.201.76.60, 52.35.217.225
Connecting to dl.bintray.com (dl.bintray.com)|54.201.76.60|:443... connected.
HTTP request sent, awaiting response... 302 
Location: https://d29vzk4ow07wi7.cloudfront.net/8f32d4617390d1c2d16f26a27ab60d97807b35440d45891fa340fc2648b04406?response-content-disposition=attachment%3Bfilename%3D%22boost_1_69_0.tar.bz2%22&Policy=eyJTdGF0ZW1lbnQiOiBbeyJSZXNvdXJjZSI6Imh0dHAqOi8vZDI5dnprNG93MDd3aTcuY2xvdWRmcm9udC5uZXQvOGYzMmQ0NjE3MzkwZDFjMmQxNmYyNmEyN2FiNjBkOTc4MDdiMzU0NDBkNDU4OTFmYTM0MGZjMjY0OGIwNDQwNj9yZXNwb25zZS1jb250ZW50LWRpc3Bvc2l0aW9uPWF0dGFjaG1lbnQlM0JmaWxlbmFtZSUzRCUyMmJvb3N0XzFfNjlfMC50YXIuYnoyJTIyIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNTY3OTYzNDE1fSwiSXBBZGRyZXNzIjp7IkFXUzpTb3VyY2VJcCI6IjAuMC4wLjAvMCJ9fX1dfQ__&Signature=etUOtILRFYDjKgvmWqceG8cF4tW8LNMjWL1JixU0E8lqG2Al2W8WWV8CEA9PW2K8DhLAfcl-Em07sJW2RhAS9Qe9ftO0YKddoSLRU68v45GshcOk7qxPL-xS-zcqyKdKQHD0bTbFxcmNZnkNdTXDSunbaUfh4tUceD6C9EuKkkzO51wMPC~Hq69DNoK2meM9~Cfzmb-FuJ-JrO6-i5wpyRp1XS8992v9q~~cu-qGiGEkZlpHmkEKk1ehNhcB1qO1ewPZI4oRQzPLBZU8IYzSXjNgIl~mSTRQuwBW3neCV7rujuWG8pMuqVKNLWEHnB2VmJnJN~cm1cwPOhvzkQ5KYQ__&Key-Pair-Id=APKAIFKFWOMXM2UMTSFA [following]
--2019-09-08 13:11:35--  https://d29vzk4ow07wi7.cloudfront.net/8f32d4617390d1c2d16f26a27ab60d97807b35440d45891fa340fc2648b04406?response-content-disposition=attachment%3Bfilename%3D%22boost_1_69_0.tar.bz2%22&Policy=eyJTdGF0ZW1lbnQiOiBbeyJSZXNvdXJjZSI6Imh0dHAqOi8vZDI5dnprNG93MDd3aTcuY2xvdWRmcm9udC5uZXQvOGYzMmQ0NjE3MzkwZDFjMmQxNmYyNmEyN2FiNjBkOTc4MDdiMzU0NDBkNDU4OTFmYTM0MGZjMjY0OGIwNDQwNj9yZXNwb25zZS1jb250ZW50LWRpc3Bvc2l0aW9uPWF0dGFjaG1lbnQlM0JmaWxlbmFtZSUzRCUyMmJvb3N0XzFfNjlfMC50YXIuYnoyJTIyIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNTY3OTYzNDE1fSwiSXBBZGRyZXNzIjp7IkFXUzpTb3VyY2VJcCI6IjAuMC4wLjAvMCJ9fX1dfQ__&Signature=etUOtILRFYDjKgvmWqceG8cF4tW8LNMjWL1JixU0E8lqG2Al2W8WWV8CEA9PW2K8DhLAfcl-Em07sJW2RhAS9Qe9ftO0YKddoSLRU68v45GshcOk7qxPL-xS-zcqyKdKQHD0bTbFxcmNZnkNdTXDSunbaUfh4tUceD6C9EuKkkzO51wMPC~Hq69DNoK2meM9~Cfzmb-FuJ-JrO6-i5wpyRp1XS8992v9q~~cu-qGiGEkZlpHmkEKk1ehNhcB1qO1ewPZI4oRQzPLBZU8IYzSXjNgIl~mSTRQuwBW3neCV7rujuWG8pMuqVKNLWEHnB2VmJnJN~cm1cwPOhvzkQ5KYQ__&Key-Pair-Id=APKAIFKFWOMXM2UMTSFA
Resolving d29vzk4ow07wi7.cloudfront.net (d29vzk4ow07wi7.cloudfront.net)... 13.33.46.170, 13.33.46.106, 13.33.46.221, ...
Connecting to d29vzk4ow07wi7.cloudfront.net (d29vzk4ow07wi7.cloudfront.net)|13.33.46.170|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 95078138 (91M) [application/x-bzip2]
Saving to: ‘./boost_1_69_0.tar.bz2’

./boost_1_69_0.tar.bz2                             100%[================================================================================================================>]  90.67M   999KB/s    in 63s     

2019-09-08 13:12:39 (1.43 MB/s) - ‘./boost_1_69_0.tar.bz2’ saved [95078138/95078138]

Building Boost.Build engine with toolset gcc... tools/build/src/engine/bin.linuxx86_64/b2
Unicode/ICU support for Boost.Regex?... not found.
Generating Boost.Build configuration in project-config.jam...

Bootstrapping is done. To build, run:

    ./b2
    
To adjust configuration, edit 'project-config.jam'.
Further information:

   - Command line help:
     ./b2 --help
     
   - Getting started guide: 
     http://www.boost.org/more/getting_started/unix-variants.html
     
   - Boost.Build documentation:
     http://www.boost.org/build/doc/html/index.html

Performing configuration checks

    - default address-model    : 64-bit
    - default architecture     : x86
    - lockfree boost::atomic_flag : yes

Component configuration:

    - atomic                   : not building
    - chrono                   : not building
    - container                : not building
    - context                  : not building
    - contract                 : not building
    - coroutine                : not building
    - date_time                : not building
    - exception                : not building
    - fiber                    : not building
    - filesystem               : not building
    - graph                    : not building
    - graph_parallel           : not building
    - iostreams                : not building
    - locale                   : not building
    - log                      : not building
    - math                     : not building
    - mpi                      : not building
    - program_options          : not building
    - python                   : not building
    - random                   : not building
    - regex                    : not building
    - serialization            : not building
    - stacktrace               : not building
    - system                   : building
    - test                     : not building
    - thread                   : building
    - timer                    : not building
    - type_erasure             : not building
    - wave                     : not building

...patience...
...found 1264 targets...
...updating 25 targets...
gcc.compile.c++ bin.v2/libs/system/build/gcc-8.3.0/release/link-static/threading-multi/visibility-hidden/error_code.o
gcc.archive bin.v2/libs/system/build/gcc-8.3.0/release/link-static/threading-multi/visibility-hidden/libboost_system.a
common.copy stage/lib/libboost_system.a
gcc.compile.c++ bin.v2/libs/thread/build/gcc-8.3.0/release/link-static/threadapi-pthread/threading-multi/visibility-hidden/pthread/thread.o
gcc.compile.c++ bin.v2/libs/thread/build/gcc-8.3.0/release/link-static/threadapi-pthread/threading-multi/visibility-hidden/pthread/once.o
gcc.compile.c++ bin.v2/libs/thread/build/gcc-8.3.0/release/link-static/threadapi-pthread/threading-multi/visibility-hidden/future.o
gcc.archive bin.v2/libs/thread/build/gcc-8.3.0/release/link-static/threadapi-pthread/threading-multi/visibility-hidden/libboost_thread.a
common.copy stage/lib/libboost_thread.a
...updated 25 targets...
 =================== Building Miracl ==================
downloading Miracl
Cloning into 'miracl'...
remote: Enumerating objects: 638, done.
remote: Total 638 (delta 0), reused 0 (delta 0), pack-reused 638
Receiving objects: 100% (638/638), 19.70 MiB | 15.71 MiB/s, done.
Resolving deltas: 100% (213/213), done.
building Mircal
rm: cannot remove 'libmiracl.a': No such file or directory
 ====================== all done! =====================
osboxes@osboxes:~/other_tests/libOTe/cryptoTools/thirdparty/linux$ cd ../../../
osboxes@osboxes:~/other_tests/libOTe$ cmake . -DENABLE_SIMPLESTOT=ON
-- The C compiler identification is GNU 8.3.0
-- The CXX compiler identification is GNU 8.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
-- Option: CMAKE_BUILD_TYPE = Release
	Release
	Debug
	RelWithDebInfo
-- Option: ENABLE_SIMPLESTOT = ON
-- Option: ENABLE_KYBEROT    = OFF
-- Option: KOS hashing (current = OTE_DAVIE_MEYER_AES):

--       OTE_KOS_HASH=OTE_RANDOM_ORACLE         use the random oracle (slower)
--       OTE_KOS_HASH=OTE_DAVIE_MEYER_AES       use AES in the Davie Meyer compression function

-- Option: OTE_KOS_FIAT_SHAMIR = OFF
-- Option: ENABLE_SILENTOT   = OFF
-- Option: ENABLE_MIRACL     = OFF
-- Option: ENABLE_RELIC      = OFF
-- Option: ENABLE_CIRCUITS   = OFF
-- Option: ENABLE_CPP_14     = ON
-- Option: ENABLE_NASM       = OFF
-- Option: ENABLE_NET_LOG    = OFF
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - found
-- Found Threads: TRUE  
-- Boost version: 1.69.0
-- Found the following Boost libraries:
--   system
--   thread
-- Boost_include  /home/osboxes/other_tests/libOTe/cryptoTools/thirdparty/linux/boost
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/cc
-- Configuring done
-- Generating done
-- Build files have been written to: /home/osboxes/other_tests/libOTe
osboxes@osboxes:~/other_tests/libOTe$ make 
Scanning dependencies of target sha_asm
[  0%] Built target sha_asm
Scanning dependencies of target cryptoTools
[  1%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Circuit/BetaCircuit.cpp.o
[  2%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Circuit/BetaLibrary.cpp.o
[  3%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Common/BitVector.cpp.o
[  3%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Common/CLP.cpp.o
[  4%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Common/CuckooIndex.cpp.o
[  5%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Common/Defines.cpp.o
[  5%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Common/Log.cpp.o
[  6%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Common/TestCollection.cpp.o
[  7%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Common/Timer.cpp.o
[  7%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Crypto/AES.cpp.o
[  8%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Crypto/Blake2.cpp.o
[  9%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Crypto/Curve.cpp.o
[ 10%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Crypto/PRNG.cpp.o
[ 10%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Crypto/RCurve.cpp.o
[ 11%] Building C object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Crypto/blake2/blake2b.c.o
[ 12%] Building C object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Crypto/blake2/blake2bp.c.o
[ 12%] Building C object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Crypto/blake2/blake2xb.c.o
[ 13%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Crypto/sha1.cpp.o
[ 14%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Network/Channel.cpp.o
[ 14%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Network/IOService.cpp.o
[ 15%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Network/IoBuffer.cpp.o
[ 16%] Building CXX object cryptoTools/cryptoTools/CMakeFiles/cryptoTools.dir/Network/Session.cpp.o
[ 16%] Linking CXX static library ../../lib/libcryptoTools.a
[ 16%] Built target cryptoTools
Scanning dependencies of target tests_cryptoTools
[ 17%] Building CXX object cryptoTools/tests_cryptoTools/CMakeFiles/tests_cryptoTools.dir/AES_Tests.cpp.o
[ 18%] Building CXX object cryptoTools/tests_cryptoTools/CMakeFiles/tests_cryptoTools.dir/BtChannel_Tests.cpp.o
[ 18%] Building CXX object cryptoTools/tests_cryptoTools/CMakeFiles/tests_cryptoTools.dir/Circuit_Tests.cpp.o
[ 19%] Building CXX object cryptoTools/tests_cryptoTools/CMakeFiles/tests_cryptoTools.dir/Circuit_aes_Tests.cpp.o
[ 20%] Building CXX object cryptoTools/tests_cryptoTools/CMakeFiles/tests_cryptoTools.dir/Common.cpp.o
[ 20%] Building CXX object cryptoTools/tests_cryptoTools/CMakeFiles/tests_cryptoTools.dir/Cuckoo_Tests.cpp.o
[ 21%] Building CXX object cryptoTools/tests_cryptoTools/CMakeFiles/tests_cryptoTools.dir/Ecc_Tests.cpp.o
[ 22%] Building CXX object cryptoTools/tests_cryptoTools/CMakeFiles/tests_cryptoTools.dir/Misc_Tests.cpp.o
[ 22%] Building CXX object cryptoTools/tests_cryptoTools/CMakeFiles/tests_cryptoTools.dir/REcc_Tests.cpp.o
[ 23%] Building CXX object cryptoTools/tests_cryptoTools/CMakeFiles/tests_cryptoTools.dir/SimpleCuckoo.cpp.o
[ 24%] Building CXX object cryptoTools/tests_cryptoTools/CMakeFiles/tests_cryptoTools.dir/UnitTests.cpp.o
[ 25%] Linking CXX static library ../../lib/libtests_cryptoTools.a
[ 25%] Built target tests_cryptoTools
Scanning dependencies of target frontend_cryptoTools
[ 26%] Building CXX object cryptoTools/frontend_cryptoTools/CMakeFiles/frontend_cryptoTools.dir/Tutorials/Network.cpp.o
[ 27%] Building CXX object cryptoTools/frontend_cryptoTools/CMakeFiles/frontend_cryptoTools.dir/main.cpp.o
[ 28%] Building CXX object cryptoTools/frontend_cryptoTools/CMakeFiles/frontend_cryptoTools.dir/signalHandle.cpp.o
[ 28%] Linking CXX executable ../../bin/frontend_cryptoTools
[ 28%] Built target frontend_cryptoTools
Scanning dependencies of target SimplestOT
[ 28%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/Keccak-simple.c.o
[ 29%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/consts.s.o
[ 30%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/consts4x.s.o
[ 30%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/cpucycles.c.o
[ 31%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/fe25519_add.c.o
[ 32%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/fe25519_freeze.s.o
[ 32%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/fe25519_getparity.c.o
[ 33%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/fe25519_invert.c.o
[ 34%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/fe25519_iseq_vartime.c.o
[ 34%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/fe25519_mul.s.o
[ 35%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/fe25519_neg.c.o
[ 36%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/fe25519_nsquare.s.o
[ 37%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/fe25519_pack.c.o
[ 37%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/fe25519_pow2523.c.o
[ 38%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/fe25519_setint.c.o
[ 39%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/fe25519_square.s.o
[ 39%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/fe25519_sub.c.o
[ 40%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/fe25519_unpack.c.o
[ 41%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/ge25519_add.c.o
[ 41%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/ge25519_add_p1p1.s.o
[ 42%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/ge25519_dbl_p1p1.s.o
[ 43%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/ge25519_double.c.o
[ 43%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/ge25519_lookup.s.o
[ 44%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/ge25519_lookup_niels.s.o
[ 45%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/ge25519_nielsadd2.s.o
[ 46%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/ge25519_p1p1_to_p2.s.o
[ 46%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/ge25519_p1p1_to_p3.s.o
[ 47%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/ge25519_pack.c.o
[ 48%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/ge25519_scalarmult.c.o
[ 48%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/ge25519_scalarmult_base.c.o
[ 49%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/ge25519_setneutral.c.o
[ 50%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/ge25519_unpack.c.o
[ 50%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/ge4x.c.o
[ 51%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/ge4x_add_p1p1.s.o
[ 52%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/ge4x_double_p1p1.s.o
[ 53%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/ge4x_lookup.s.o
[ 53%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/ge4x_lookup_niels.s.o
[ 54%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/ge4x_niels_add_p1p1.s.o
[ 55%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/ge4x_pack.c.o
[ 55%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/ge4x_unpack_vartime.c.o
[ 56%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/gfe4x.c.o
[ 57%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/gfe4x_add.s.o
[ 57%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/gfe4x_getparity.c.o
[ 58%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/gfe4x_iseq_vartime.c.o
[ 59%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/gfe4x_mul.s.o
[ 59%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/gfe4x_nsquare.c.o
[ 60%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/gfe4x_pow2523.c.o
[ 61%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/gfe4x_square.s.o
[ 62%] Building ASM object SimplestOT/CMakeFiles/SimplestOT.dir/gfe4x_sub.s.o
[ 62%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/network.c.o
[ 63%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/ot_receiver.c.o
[ 64%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/ot_receiver_test.c.o
[ 64%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/ot_sender.c.o
[ 65%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/ot_sender_test.c.o
[ 66%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/randombytes.c.o
[ 66%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/sc25519_from32bytes.c.o
[ 67%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/sc25519_random.c.o
[ 68%] Building C object SimplestOT/CMakeFiles/SimplestOT.dir/sc25519_window4.c.o
[ 68%] Linking CXX static library ../lib/libSimplestOT.a
[ 68%] Built target SimplestOT
Scanning dependencies of target libOTe
[ 69%] Building CXX object libOTe/CMakeFiles/libOTe.dir/Base/MasnyRindal.cpp.o
[ 70%] Building CXX object libOTe/CMakeFiles/libOTe.dir/Base/MasnyRindalKyber.cpp.o
[ 70%] Building CXX object libOTe/CMakeFiles/libOTe.dir/Base/SimplestOT.cpp.o
[ 71%] Building CXX object libOTe/CMakeFiles/libOTe.dir/Base/naor-pinkas.cpp.o
[ 72%] Building CXX object libOTe/CMakeFiles/libOTe.dir/NChooseK/AknOtReceiver.cpp.o
[ 72%] Building CXX object libOTe/CMakeFiles/libOTe.dir/NChooseK/AknOtSender.cpp.o
[ 73%] Building CXX object libOTe/CMakeFiles/libOTe.dir/NChooseOne/Kkrt/KkrtNcoOtReceiver.cpp.o
[ 74%] Building CXX object libOTe/CMakeFiles/libOTe.dir/NChooseOne/Kkrt/KkrtNcoOtSender.cpp.o
[ 75%] Building CXX object libOTe/CMakeFiles/libOTe.dir/NChooseOne/NcoOtExt.cpp.o
[ 75%] Building CXX object libOTe/CMakeFiles/libOTe.dir/NChooseOne/Oos/OosNcoOtReceiver.cpp.o
[ 76%] Building CXX object libOTe/CMakeFiles/libOTe.dir/NChooseOne/Oos/OosNcoOtSender.cpp.o
[ 77%] Building CXX object libOTe/CMakeFiles/libOTe.dir/NChooseOne/RR17/Rr17NcoOtReceiver.cpp.o
[ 77%] Building CXX object libOTe/CMakeFiles/libOTe.dir/NChooseOne/RR17/Rr17NcoOtSender.cpp.o
[ 78%] Building CXX object libOTe/CMakeFiles/libOTe.dir/Tools/LinearCode.cpp.o
[ 79%] Building CXX object libOTe/CMakeFiles/libOTe.dir/Tools/SilentPprf.cpp.o
[ 79%] Building CXX object libOTe/CMakeFiles/libOTe.dir/Tools/Tools.cpp.o
[ 80%] Building CXX object libOTe/CMakeFiles/libOTe.dir/Tools/bitpolymul.cpp.o
[ 81%] Building CXX object libOTe/CMakeFiles/libOTe.dir/Tools/bitpolymul/bc.cpp.o
[ 82%] Building CXX object libOTe/CMakeFiles/libOTe.dir/Tools/bitpolymul/bc_to_lch_gen_code.cpp.o
[ 82%] Building CXX object libOTe/CMakeFiles/libOTe.dir/Tools/bitpolymul/bc_to_mono_gen_code.cpp.o
[ 83%] Building CXX object libOTe/CMakeFiles/libOTe.dir/Tools/bitpolymul/btfy.cpp.o
[ 84%] Building CXX object libOTe/CMakeFiles/libOTe.dir/Tools/bitpolymul/encode.cpp.o
[ 84%] Building CXX object libOTe/CMakeFiles/libOTe.dir/TwoChooseOne/IknpDotExtReceiver.cpp.o
[ 85%] Building CXX object libOTe/CMakeFiles/libOTe.dir/TwoChooseOne/IknpDotExtSender.cpp.o
[ 86%] Building CXX object libOTe/CMakeFiles/libOTe.dir/TwoChooseOne/IknpOtExtReceiver.cpp.o
[ 86%] Building CXX object libOTe/CMakeFiles/libOTe.dir/TwoChooseOne/IknpOtExtSender.cpp.o
[ 87%] Building CXX object libOTe/CMakeFiles/libOTe.dir/TwoChooseOne/KosDotExtReceiver.cpp.o
[ 88%] Building CXX object libOTe/CMakeFiles/libOTe.dir/TwoChooseOne/KosDotExtSender.cpp.o
[ 88%] Building CXX object libOTe/CMakeFiles/libOTe.dir/TwoChooseOne/KosOtExtReceiver.cpp.o
[ 89%] Building CXX object libOTe/CMakeFiles/libOTe.dir/TwoChooseOne/KosOtExtSender.cpp.o
[ 90%] Building CXX object libOTe/CMakeFiles/libOTe.dir/TwoChooseOne/OTExtInterface.cpp.o
[ 91%] Building CXX object libOTe/CMakeFiles/libOTe.dir/TwoChooseOne/SilentOtExtReceiver.cpp.o
[ 91%] Building CXX object libOTe/CMakeFiles/libOTe.dir/TwoChooseOne/SilentOtExtSender.cpp.o
[ 92%] Linking CXX static library ../lib/liblibOTe.a
[ 92%] Built target libOTe
Scanning dependencies of target libOTe_Tests
[ 93%] Building CXX object libOTe_Tests/CMakeFiles/libOTe_Tests.dir/AknOt_Tests.cpp.o
[ 93%] Building CXX object libOTe_Tests/CMakeFiles/libOTe_Tests.dir/BaseOT_Tests.cpp.o
[ 94%] Building CXX object libOTe_Tests/CMakeFiles/libOTe_Tests.dir/Common.cpp.o
[ 95%] Building CXX object libOTe_Tests/CMakeFiles/libOTe_Tests.dir/NcoOT_Tests.cpp.o
[ 95%] Building CXX object libOTe_Tests/CMakeFiles/libOTe_Tests.dir/OT_Tests.cpp.o
[ 96%] Building CXX object libOTe_Tests/CMakeFiles/libOTe_Tests.dir/SilentOT_Tests.cpp.o
[ 97%] Building CXX object libOTe_Tests/CMakeFiles/libOTe_Tests.dir/UnitTests.cpp.o
[ 97%] Building CXX object libOTe_Tests/CMakeFiles/libOTe_Tests.dir/bitpolymul_Tests.cpp.o
[ 98%] Linking CXX static library ../lib/liblibOTe_Tests.a
[ 98%] Built target libOTe_Tests
Scanning dependencies of target frontend_libOTe
[ 99%] Building CXX object frontend/CMakeFiles/frontend_libOTe.dir/main.cpp.o
[100%] Building CXX object frontend/CMakeFiles/frontend_libOTe.dir/util.cpp.o
[100%] Linking CXX executable ../bin/frontend_libOTe
/usr/bin/ld: ../lib/libSimplestOT.a(ge25519_p1p1_to_p3.s.o): relocation R_X86_64_32S against symbol `CONST_REDMASK51' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(ge4x_add_p1p1.s.o): relocation R_X86_64_32S against symbol `Gk' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(ge4x_double_p1p1.s.o): relocation R_X86_64_32S against symbol `scale19' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(ge4x_lookup.s.o): relocation R_X86_64_32S against symbol `_allone' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(ge4x_lookup_niels.s.o): relocation R_X86_64_32S against symbol `_allone' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(ge4x_niels_add_p1p1.s.o): relocation R_X86_64_32S against symbol `scale19' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(gfe4x_mul.s.o): relocation R_X86_64_32S against symbol `scale19' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(gfe4x_square.s.o): relocation R_X86_64_32S against symbol `scale19' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(fe25519_freeze.s.o): relocation R_X86_64_32S against symbol `CONST_REDMASK51' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(fe25519_mul.s.o): relocation R_X86_64_32S against symbol `CONST_REDMASK51' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(fe25519_nsquare.s.o): relocation R_X86_64_32S against symbol `CONST_REDMASK51' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(fe25519_square.s.o): relocation R_X86_64_32S against symbol `CONST_REDMASK51' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(ge25519_add_p1p1.s.o): relocation R_X86_64_32S against symbol `CONST_2P0' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(ge25519_dbl_p1p1.s.o): relocation R_X86_64_32S against symbol `CONST_REDMASK51' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(ge25519_lookup_niels.s.o): relocation R_X86_64_32S against symbol `CONST_2P0' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(ge25519_nielsadd2.s.o): relocation R_X86_64_32S against symbol `CONST_2P0' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../lib/libSimplestOT.a(ge25519_p1p1_to_p2.s.o): relocation R_X86_64_32S against symbol `CONST_REDMASK51' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: final link failed: nonrepresentable section on output
collect2: error: ld returned 1 exit status
make[2]: *** [frontend/CMakeFiles/frontend_libOTe.dir/build.make:106: bin/frontend_libOTe] Error 1
make[1]: *** [CMakeFiles/Makefile2:486: frontend/CMakeFiles/frontend_libOTe.dir/all] Error 2
make: *** [Makefile:130: all] Error 2

Building on MAC

Similar issue from earlier today, after running make:
[ 94%] Linking CXX executable ../bin/frontend_libOTe clang: warning: argument unused during compilation: '-pthread' [-Wunused-command-line-argument] Undefined symbols for architecture x86_64: "_sha1_update_intel", referenced from: sha1_compress(unsigned int*, unsigned char const*) in libcryptoTools.a(sha1.cpp.o) ld: symbol(s) not found for architecture x86_64 clang: fatal error: linker command failed with exit code 1 (use -v to see invocation) make[2]: *** [bin/frontend_libOTe] Error 1 make[1]: *** [frontend/CMakeFiles/frontend_libOTe.dir/all] Error 2 make: *** [all] Error 2
This was on a MAC, and the submodule was updated along with running cmake ..

IknpOtExt features about non-block sized message

@ladnir Hi, It seems that there is no support to reduce or enlarge the message pair size when using IknpOtExt, and currently it supports only block-sized message, what should I do if I want to adapt my non-block sized message pairs?

Inputs and Output in KKRT Protocol

I would like to use KKRT implementation of the libOTe library. For using KKRT protocol, previous issues have been directed to https://github.com/osu-crypto/libOTe/blob/master/libOTe_Tests/NcoOT_Tests.cpp#L32. Here, which method/function should we follow? Further, I am unable to figure out for each N choose 1 OTs which object stores the random inputs of the Sender and the choices and the inputs received corresponding to the choices for the Receiver. Can you direct me to these objects?

"set(ENABLE_SIMPLESTOT_ASM, OFF)" not work

Hi, I'm facing a compile problem when building my project using libOTe as a submodule. In CMakeLists.txt, I wrote:

set(ENABLE_RELIC ON CACHE BOOL "Build relic by default" FORCE)
set(MULTI PTHREAD CACHE STRING "Build relic with multithreading from pthread" FORCE)
set(ARITH easy CACHE STRING "Build relic without gmp" FORCE)
set(WITH "MD;DV;BN;FB;FP;EB;EC;EP" CACHE STRING "Overwrite Relic algorithms in ABY with their superset" FORCE)

# we need to set these compile flags globally to compile libOTe and its dependencies
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -no-pie -pthread -maes -msse2 -msse3 -msse4.1 -mpclmul -mavx -mavx2")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-ignored-attributes")

find_package(libOTe QUIET)
if (libOTe_FOUND)
    message(STATUS "Found libOTe")
elseif (NOT libOTe_FOUND AND NOT TARGET libOTe::libote)
    message("libOTe was not found: add libOTe subdirectory")
    if (NOT EXISTS "${PROJECT_SOURCE_DIR}/extern/libOTe/CMakeLists.txt")
        find_package(Git REQUIRED)
        message("initialize Git submodule: extern/libOTe")
        execute_process(COMMAND git submodule update --init --recursive extern/libOTe
                WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
    endif ()
    add_subdirectory(extern/libOTe)
endif ()
set(ENABLE_SIMPLESTOT ON CACHE BOOL "Enable Simplest OT for Base OTs" FORCE)
set(ENABLE_IKNP ON CACHE BOOL "Enable IKNP for 1-out-of-2 OTs" FORCE)
set(ENABLE_KKRT ON CACHE BOOL "Enable KKRT for OPRFs" FORCE)

And indeed, output shows that ENABLE_SIMPLESTOT_ASM is OFF:

[cmake] -- Base OT protocols
[cmake] =======================================================
[cmake] -- Option: ENABLE_SIMPLESTOT     = ON
[cmake] -- Option: ENABLE_SIMPLESTOT_ASM = OFF
[cmake] -- Option: ENABLE_MR             = OFF
[cmake] -- Option: ENABLE_MR_KYBER       = OFF
[cmake] -- Option: ENABLE_NP             = OFF
[cmake] 
[cmake] 
[cmake] -- 1-out-of-2 OT Extension protocols
[cmake] =======================================================
[cmake] -- Option: ENABLE_KOS            = OFF
[cmake] -- Option: ENABLE_IKNP           = ON
[cmake] -- Option: ENABLE_SILENTOT       = OFF
[cmake] 
[cmake] 
[cmake] -- 1-out-of-2 Delta-OT Extension protocols
[cmake] =======================================================
[cmake] -- Option: ENABLE_DELTA_KOS      = OFF
[cmake] -- Option: ENABLE_DELTA_IKNP     = OFF
[cmake] 
[cmake] 
[cmake] -- 1-out-of-N OT Extension protocols
[cmake] =======================================================
[cmake] -- Option: ENABLE_OOS            = OFF
[cmake] -- Option: ENABLE_KKRT           = ON
[cmake] -- Option: ENABLE_RR             = OFF

However, when compiling my project, it reports the error:

undefined reference to `receiver_procS' in 'extern/libOTe/libOTe/Base/SimplestOT.cpp'
undefined reference to `sender_genS' in 'extern/libOTe/libOTe/Base/SimplestOT.cpp'
...

The reason should be #ifdef ENABLE_SIMPLESTOT_ASM is enabled in SimplestOT.cpp. Why would this happen? I've checked the content in file Debug/extern/libOTe/libOTe/config.h is actually

// build the library with "simplest" Base OT enabled
#define ENABLE_SIMPLESTOT ON

// build the library with the ASM "simplest" Base OT enabled
/* #undef ENABLE_SIMPLESTOT_ASM */

// build the library with Masney Rindal Base OT enabled
/* #undef ENABLE_MR */

// build the library with Masney Rindal Kyber Base OT enabled
/* #undef ENABLE_MR_KYBER */

// build the library with Naor Pinkas Base OT enabled
/* #undef ENABLE_NP */

So maybe this file is not used. (Debug is the building folder)

Any suggestions? Thanks!

Unit Tests Failing with Relic

@ladnir The UnitTest 29 REccpPoint_Test is failing for me. I'm using relic-0.4.
From what I could make out this seems to be a relic related issue. It would be great if you could check this out. Thanks.

29 - REccpPoint_Test                         ga_br != ga_br2
(F793B5C394FBBF90DCC77200BD113B6EEF7A857077BC548852A80F64911446C5 , 9EF8C8A11C3FC805036E09FB5C68AEA2F14020B6999F9B3BDBFCA0DC7C2AF4C6 , 1                                                                )
(F793B5C394FBBF90DCC77200BD113B6EEF7A857077BC548852A80F64911446C5 , 9EF8C8A11C3FC805036E09FB5C68AEA2F14020B6999F9B3BDBFCA0DC7C2AF4C6 , 1                                                                )
(F793B5C394FBBF90DCC77200BD113B6EEF7A857077BC548852A80F64911446C5 , 9EF8C8A11C3FC805036E09FB5C68AEA2F14020B6999F9B3BDBFCA0DC7C2AF4C6 , 1                                                                )
Failed - ga_br != ga_br2   6ms

Compiling KOS

I tried to compile the library on ubuntu.

I ran the commands:

  1. cmake . -DENABLE_MIRACL=ON -DENABLE_KOS=ON
  2. make

And got this error: /home/noa/libOTe/libOTe_Tests/OT_Tests.cpp: In function ‘void tests_libOTe::DotExt_Kos_Test()’:
/home/noa/libOTe/libOTe_Tests/OT_Tests.cpp:551:3: error: ‘KosDotExtSender’ was not declared in this scope
KosDotExtSender sender;

Can you help me to fix it?

Regards,
Noa

How to print the intermediate result to debug?

I solved the installation of libOTe a few days ago, and I have successfully linked KKRT(1-out-of-N OT) into my project.
Now I want to print some intermediate results to debug the program, in which block.h and Matrix.h classes I find that no override the << operators, so how to print this ? Directly cout will report an error.
The important intermediate results such as:

std::vector<block>recvMsgs(numOTs);
Matrix<block>sendMsgs(numOTs, numChosenMsgs);

How to print the data for these classes? Thanks!

Detla-OT

Fix the check at the end, reduce the size of the second transpose

Meeting a "illegal instruction(core dumped)" error.

When I build your libOTe library, I have successfully built the whole project with Relic. But i meet a "illegal instruction(core dumped)" error while running the bin/frontend_libOTe and bin/frontend_cryptotools. I meet this error both on my WSL ubuntu 18.04 on my laptop and a ubuntu dual os on the same laptop. Could you please offer me some help.

Trying to build libOTe on Ubuntu

I got to the final step of the build process, but received this error.

../lib/libcryptoTools.a(sha1.cpp.o): In function sha1_compress(unsigned int*, unsigned char const*)':
sha1.cpp:(.text._Z13sha1_compressPjPKh+0x1): undefined reference to sha1_update_intel' collect2: error: ld returned 1 exit status frontend/CMakeFiles/frontend_libOTe.dir/build.make:180: recipe for target 'bin/frontend_libOTe' failed make[2]: *** [bin/frontend_libOTe] Error 1 CMakeFiles/Makefile2:422: recipe for target 'frontend/CMakeFiles/frontend_libOTe.dir/all' failed make[1]: *** [frontend/CMakeFiles/frontend_libOTe.dir/all] Error 2 Makefile:127: recipe for target 'all' failed make: *** [all] Error 2

I am not sure if this is familiar to anyone here so I decided to post it. I am looking into it now.

class osuCrypto::SparseMtx::Col’ has no member named ‘usize’;

I am compiling this library. But it shows the following error:

/libOTe/libOTe/Tools/LDPC/LdpcEncoder.cpp:774:13: error: ‘class osuCrypto::SparseMtx::Col’ has no member named ‘usize’; did you mean ‘size’?

  774 |     if (col.usize() != expSize)

      |             ^~~~~

      |             size

compilation terminated due to -Wfatal-errors.

make[2]: *** [libOTe/CMakeFiles/libOTe.dir/build.make:264:libOTe/CMakeFiles/libOTe.dir/Tools/LDPC/LdpcEncoder.cpp.o] error 1

make[1]: *** [CMakeFiles/Makefile2:318:libOTe/CMakeFiles/libOTe.dir/all] error 2

make: *** [Makefile:149:all] error 2

IKNPDotExtension for Semi Honest

@ladnir If I need to use the IKNPDotExtension for the semi honest setting what do I do? The code for IKNPDotExtension seems to be doing additional stuff as it caters to the malicious setting.

So I need to use a C-OT for generating multiplication triplets, but couldn't find an appropriate extension to use in libOTe. Any pointers regarding this?

Thanks.

PIR document

Is there BgiPirTests.cpp code description document?

Building on mac with m1(arm64) cpu?

Hi, I'm trying to build this library on my mac (with m1 cpu), but is seems that the library does not support for arm64 when I set the circuits and ot ON? It shows that the third-party library bitpolymul cannot build on arm64, is there any suggestion?

cuckoo stash overflow

@ladnir Hi, when I run the PSI task, the following prompt appears:
libOTe/cryptoTools/cryptoTools/Common/CuckooIndex.cpp:460
Exception info:cuckoo stash overflow

When I re-run, this prompt disappears.
Why does this happen, is there any impact or is there any precautions?
Thanks~

Linking error when used as an external library

I am trying to use libOTe as a library. I got the following error.

/usr/bin/ld: //usr/local/lib/liblibOTe.a(naor-pinkas.cpp.o): undefined reference to symbol 'ep_copy'
/usr/local/lib/librelic.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/test_s.dir/build.make:112: recipe for target 'bin/test_s' failed
make[2]: *** [bin/test_s] Error 1
CMakeFiles/Makefile2:94: recipe for target 'CMakeFiles/test_s.dir/all' failed
make[1]: *** [CMakeFiles/test_s.dir/all] Error 2
Makefile:102: recipe for target 'all' failed
make: *** [all] Error 2

I am writing all the steps I have done so far since I don't know which step may have the problem.

  • First, I ran make install in the libOTe directory. It resulted in linking error similar to the one above. Then I removed the relic build that I installed from github.com/ladnir/relic/ (linked in the README) and reinstalled from the original relic repo github.com/relic-toolkit/relic. This got rid of the linking error.
  • I wrote a minimal code to perform one round of IKNP OT and placed it as a subdirectory inside libOTe. The code compiled and ran without issues.
  • I placed the code in an external directory outside libOTe and created a new cmake project.
  • First problem I faced was with linking Boost library. I edited the boost.get file and added ./b2 install after ./b2. Then I linked the Boost library in cmake and the issue was solved.
  • I had issues with linking Simplest OT (it worked inside libOTe but showed linking error in the external directory). I disabled Simplest OT and ran cmake again inside libOTe and installed.
  • My final cmake linking looks like this target_link_libraries(test_s ${OPENSSL_LIBRARIES} ${Boost_LIBRARIES} ${GMP_LIBRARIES} ${GMPXX_LIBRARIES} ${RELIC_LIBRARY} libOTe cryptoTools KyberOT).
  • Finally it resulted in the linking error above. I cannot disable NPOT since that is the only base OT I enabled.

Sorry for the long report. I would appreciate if you could help me solve this. If possible, a minimal CMakeList.txt example for separate a cmake project would be great.

i have a error when i build

i have a error when i build "python build.py --setup --boost --relic",as follow:

Traceback (most recent call last):
File "build.py", line 3, in
import cryptoTools.build
ModuleNotFoundError: No module named 'cryptoTools.build'

what should i do ?

proof checking in KosOtExtSender sometimes fails and throws runtime error

The check at the end of KosOtExtSender::send() sometimes does not pass and throws a runtime error. This occurs only on very specific terms.

This error can be produced by the tests supplied in libOTe. Repeat it by: bin/frontend_libOTe -kos -n <numOTs> but where numOTs is congruent to 1023 modulo 1024.
This error occurs for all values which are congruent to 1023 modulo 1024, and only for these values.
Also, It seems that this failure occurs only at about (or maybe exactly?) 50% of the times. This means that the test mentioned above might pass. But repeating it is bound to fail finally.

I’ve tried to identify why this problem occurs, but, alas, I do not know how the KOS scheme works and I cannot really understand it from code. The results of the KOS scheme are determined by these values:
the base OTs (as placed by setBaseOts and genBaseOts. In the test they just happen to be simulated and randomized without actually applying a full base OT protocol).
prng given as input to the KosOtExtReceiver (which is the party actually sending stuff to the other party)
the Receiver’s choice vector
Both the prng and the choice vector determine the contents of a vector called choice2, but that’s about all I could follow.

Tried repeating the error by manipulating the data put into the KOS send and receive functions.
It seems that the base OT part has no impact on whether the process fails or not. I.e. by determining the choices vector and the send-message and recv-message of the base, the process either always passes or always fails regardless of the baseRecv baseSend and baseChoice arrays (and also the flipping of the choice bits (by the delta bits) in setBaseOts and genBaseOts.
But determining the output of the base OTs (i.e. setting the baseRecv, baseSend, baseChoice and choice bit flipping) it seems that manipulating either the prng-seed of the KOS-receiver and/or the choice vector of the KOS Receiver, the process might pass or fail with about 50% chance, according to these specific inputs.
I could not manage to squeeze any more valuable info about what’s goes wrong.

The relevant cmake parameters I've used:
ENABLE_SSE=ON
ENABLE_BOOST=ON
OTE_KOS_HASH = OTE_DAVIE_MEYER_AES (but I think I've tried it with OTE_RANDOM_ORACLE as well and it did not help. I am not fully sure by now)
OTE_KOS_FIAT_SHAMIR = ON (Again, I believe I tried it OFF as well, but not sure)

The details of the machine I use are: kabylake-apple-darwin20.2.0 MacOS Big-Sur

PIR

Is function Psi_drrn_FullSet_Test_Impl Can run independently?

libSimplestOT error

use libSimplestOT.a error
libSimplestOT.a(ge25519_p1p1_to_p3.s.o): relocation R_X86_64_32S against symbol `CONST_REDMASK51' can not be used when making a shared object; recompile with -fPIC

SimplestOT CMakeLists.txt include target_compile_options(SimplestOT PUBLIC -fpic)

The code for the naor-pinkas base OT does not fully comply with the NP01 suggestion

The algorithm in the NP01 paper says the random message encryption Mi is the output of H((PKi**r), R, i) where i is the choice bit (or integer).
In the libOTe NaorPinkas class, the random messages are the output of H(i, point, R) where i is the index counter of the OT (so not the same i). Indeed, it seems that adding this i counter is important when applying same R for multiple OTs. But the input of the choice bit i which appears in the paper is actually missing from the libOTe NaorPinkas code. In the code it is marked by variable u at the sender side, and by choice at the receiver side, but they both do not use it as an entry to the random oracle H.

NP01 justifies the need for this additional entry, at the end of the discussion part before section 3.1:
“Note that adding the index sigma [the choice bit] as a suffix […] in the call for H assures that the answers for PK0 and PK1 are independent, even if PK0 is chosen (maliciously) to be equal to PK1 by setting it to be square root of C[choice]”

This can be very easily avoided by adding an additional entry of the choice bit (or variable u, at the sender side) as an entry to the random oracle.

Running Kos with BaseOt's

Hi,

what commands should I append to ./bin/frontend_libOTe - in order to run Kos using BaseOt's and number of threads bigger than 1?

Regards,
Noa

Unable to "make install" (mac)

Main issue:
When I try make install, I run into it being unable to find a "cryptotools-config.cmake" in cryptotools.

[ 96%] Built target libOTe_Tests
[100%] Built target frontend_libOTe
Install the project...
-- Install configuration: "Release"
CMake Error at cryptoTools/cmake_install.cmake:41 (file):
  file INSTALL cannot find
  "/Users/..../libs/libOTe/cryptoTools/cryptotools-config.cmake": No such
  file or directory.
Call Stack (most recent call first):
  cmake_install.cmake:42 (include)


make: *** [install] Error 1

I kinda worked around this by commenting out the line with install(FILES cryptotools-config.cmake DESTINATION cmake/) in the cryptoTools/CmakeList.txt.
But while this does technically get through make install without errors, it feels like the wrong thing to do.


Possibly related issue: Even after doing the above workaround, I am not sure of the right way to include it in my project.

find_package(libOTe REQUIRED) fails, as it can't find "libOTeConfig.cmake" or "libote-config.cmake" anywhere.
Because of the workaround above, using "cryptoTools" as the name fails for similar reasons.

What is the correct package name? Or am I doing this incorrectly?
I couldn't find any "*onfig.cmake" files in this project that would hint at what I should use.


Some context:
On a mac.
I had to update the libOTE minimum cmake version to get cmake to stop having openmp issues.
"make" itself is working, to the extent that ./frontend/frontend_libOTe has output.
I have relic installed, and enabled. I also turned on NP and IKNP just as a baseline.
I ran things out of a "build" folder, i.e. mkdir build; cd build; cmake .. {options}; make.

How to implement the KKRT16 OT Protocol?

I would like to implement the [KKRT16] 1-out-of-N oblivious transfer protocol by using libOTe. However, I don’t know how to invoke the API.

I would like to implement a program in Ubuntu 16.04 with two entities, Alice and Bob. Alice holds N different strings. Bob chooses one of them (maybe the i-th string). Then Alice and Bob invoke the [KKRT16] 1-out-of-N protocol. As a result, Bob knows the i-th string but nothing else.

I would like to fix N to be a small number, less than 1000. Each message will be defined as a symmetric key (for example, a 128-bit key of AES encryption). How to implement this program? Are there any volunteers help me to build this program?

KKRT PROTOCOL

If use KKRT protocol, Does SimplestOT have to must be used libOTe in the java project?
I mean, can I ignore SimplestOT?

Issue when building on linux

.....(similar errors)
/usr/bin/ld: ../lib/libSimplestOT.a(gfe4x_square.s.o): relocation R_X86_64_32S against symbol scale19' can not be used when making a PIE object; recompile with -fPIC /usr/bin/ld: ../lib/libSimplestOT.a(fe25519_nsquare.s.o): relocation R_X86_64_32S against symbol CONST_REDMASK51' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
frontend/CMakeFiles/frontend_libOTe.dir/build.make:128: recipe for target 'bin/frontend_libOTe' failed

cuckoo stash overflow

image
hi, each partie's dataset we used doesn't have duplicate data, and we didn't have cuckoo stash overflow in last year’s commit:
libPSI commit:bc9b405f91936e74394efd47da3b2e3ec4cb77df
libOTE commit:e4943906b900b472d63a0519625b417914e6cf47

the dataset we used are following.
the dataset of party0 , input0.csv:
1
2
3
4
5
6

the dataset of party1, input1.csv:
1
3
5
7
8
9

Issue when building on MAC

libOTe/SimplestOT/fe25519_freeze.s:141:1: error: 32-bit absolute addressing is not supported in 64-bit mode

More information on how to use this?

Hello,
I am trying to use kkrt as an OPRF in a wider protocol. I wanted to have two parties, one with an input, and the other running the PRF. I was wondering if could give any assistance with understanding how to interface with this library in a broader context. From what I can see, frontend.exe is only for benchmarking the code, but I could be mistaken.

Segmentation fault for malicious secure OOS16

When executing OOS16 with maliciousSecure set to true in .configure, a Segmentation Fault is caused after the end of the execution.
This also occurs if I copy NcoOt_Oos_Test from NcoOT_Tests.cpp into my file and execute it.
maliciousSecure set to false does not produce this problem.
The attached cpp file produces the described behaviour and the following output.
minimalExample.txt

Output:

Testing OOS16.------------------------------------------------------
Sender: Configure done.
Receiver: Configure done.
Receiver: genBaseOts done.
Sender: genBaseOts done.
Sender: Finished
Receiver: Result:
0: 0, 0
1: 1, 0
2: 2, 0
3: 3, 0
4: 4, 0
5: 5, 0
6: 6, 0
7: 7, 0
8: 8, 0
9: 9, 0
Segmentation fault (core dumped)

The server runs Ubuntu 18.04.3 LTS.
I compiled libOTe with:

  cmake . -DENABLE_MIRACL=ON -DENABLE_WOLFSSL=ON -DENABLE_SIMPLESTOT=OFF - 
 DENABLE_SILENTOT=OFF \
 -DENABLE_MR_KYBER=OFF \
 -DENABLE_MR=OFF -DENABLE_NP=ON -DENABLE_KOS=ON -DENABLE_IKNP=ON -DENABLE_DELTA_KOS=ON -DENABLE_DELTA_IKNP=ON \
 -DENABLE_OOS=ON -DENABLE_KKRT=ON -DENABLE_RR=ON -DENABLE_AKN=ON

Reason to remove SILVER?

@ladnir , may I know the reason to remove SILVER code? After going through the paper, I want to see the implementation, but it seems that it is removed according to f931e50.

Thanks

Build issue on ubuntu20.04

When I type python3 build.py --setup --boost --relic in terminal, the new issue occured:
image
How to solve that, thanks for helping!

Implement KK13

  • for 1-out-of-N for small N (probably subsumed by your OOS)
  • for 1-out-of-2 for shorter secrets (this works only for semi-honest)

Kyber OT

I'm not 100% sure if this is a bug, but I think that the KyberOT implementation has a bug.
The pack_pk function (

static void pack_pk(unsigned char *r, const polyvec *pk, const unsigned char *seed)
) stripped out the call to polyvec_compress. That function not only compressed the polyvec's, but it also froze them (making sure all coordinates are smaller than q), because internally the implementation allows coordinates larger than q.

How to use the libOTe_Tests

Hello!I‘m a rookie. I want to test KKRT from libOTe_tests. Nevertheless I don't know how to use the libOTe_test's CmakeFiles. Could you please give an example for how to test the OTs? Thank you!!!
image
image

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.