When I started my career, I wanted to work in cybernetic or in cryptography. Unfortunately, the life does not offer always what you really want, and I worked in network and system administration for a long time, and learned to be a back-end developer. Okay, nice introduction, but, who care? Well, at this period I was really facinated by Homorphic Encryption, the graal of cryptography. In 2014 or 2015 I met different people in France who were working on this subject at an INRIA conference. It was really interesting, but I was definitively lost will all the mathematical background. The only thing I remember: it works but it is slow. What is the case today? What kind of homomorphic encryption do we have?

# What does Homorphic Encryption mean?

Well, I am writing on a complex topic, encryption. Actually, Homorphic Encryption is more complex than simple encryption. In traditional encryption, a clear message is converted by a function to an encrypted message. This encrypted message can't be read by anyone, only the one who have the key. Usually, the plain text is decrypted on a safe place and if the receiver need to answer, it will also encrypt it. It means that the encrypted message is decrypted and the plain text available at least somewhere during computation.

                     _________
                    |         |
                    | key     |
                    |_________|
                        _|_
  ____________       ___\_/___      ________________
 |            |     /         |    |                |
 | plain text |--->| function |--->| encrypted text |
 |____________|    |_________/     |________________|

Homomorphic encryption offers an alternative to this classical method by giving the possibility to compute direction on an encrypted text without decrypting it. Yes, even the last actor does not have to decrypt encrypted text to modify it. It's also mean that it can alter something that it does not even know!

# Palisade from source

# Compilation

TIP

Makefile should contain all information

pkg_add cmake autoconf autoconf%2.69 gnumake
git clone https://gitlab.com/palisade/palisade-development.git
cd palisade-development
mkdir build
cd build
AUTOCONF_VERSION=2.69 cmake -DUSE_OpenMP=OFF ..
gmake

If it's a success, different binaries will be created in different sub-directories present in the build one.

# Tests

To execute tests, you can use binaries present in unittest directory.

ls ./unittest/* | xargs -I%i sh -c "%i"

# Benchmark

To execute benchmarks, you can use ls and xargs.

ls ./bin/benchmark/* | xargs -I%i sh -c "%i"

It will create a full benchmark of palisade and output something like the screenshot below. It was generated on OpenBSD-69-current on AMD Ryzen 7 Pro.

2021-03-24 15:15:27
Running ./bin/benchmark/Encoding
Run on (16 X 1400 MHz CPU s)
Load Average: 1.49, 1.18, 0.98
-----------------------------------------------------------------------------------
Benchmark                                         Time             CPU   Iterations
-----------------------------------------------------------------------------------
BM_encoding_Scalar                           352593 ns       352551 ns         2671
BM_encoding_Integer                          311225 ns       311183 ns         2319
BM_encoding_CoefPacked                       273216 ns       273065 ns         2029
BM_encoding_PackedIntPlaintext                81207 ns        81098 ns        10000
BM_encoding_PackedIntPlaintext_SetParams      11893 ns        11883 ns        58805
BM_Encoding_String                           234885 ns       234877 ns         3065
BM_encoding_PackedCKKSPlaintext               39844 ns        39786 ns        21838
2021-03-24 15:15:34
Running ./bin/benchmark/IntegerMath
Run on (16 X 1700 MHz CPU s)
Load Average: 1.69, 1.22, 0.99
-----------------------------------------------------------------------------------
Benchmark                                         Time             CPU   Iterations
-----------------------------------------------------------------------------------
BM_BigInt_constants<M2Integer>                0.060 us        0.060 us     14646066
BM_BigInt_constants<M4Integer>                0.143 us        0.143 us      5284600
BM_BigInt_constants<NativeInteger>            0.000 us        0.000 us   1000000000
BM_BigInt_small_variables<M2Integer>           1.16 us         1.16 us       708087
BM_BigInt_small_variables<M4Integer>           1.51 us         1.51 us       457722
BM_BigInt_small_variables<NativeInteger>      0.015 us        0.015 us     46274973
BM_BigInt_large_variables<M2Integer>           9.43 us         9.43 us       100000
BM_BigInt_large_variables<M4Integer>           13.6 us         13.6 us        39478
BM_BigInt_Add<M2Integer>/Small:0              0.095 us        0.095 us     10489430
BM_BigInt_Add<M2Integer>/Large:1              0.072 us        0.072 us      9439330
BM_BigInt_Add<M4Integer>/Small:0              0.208 us        0.208 us      4763858
BM_BigInt_Add<M4Integer>/Large:1              0.157 us        0.157 us      4446421
BM_BigInt_Add<NativeInteger>/Small:0          0.000 us        0.000 us   1000000000
BM_BigInt_Addeq<M2Integer>/Small:0            0.773 us        0.771 us      1224475
BM_BigInt_Addeq<M2Integer>/Large:1             2.22 us         2.22 us       314649
BM_BigInt_Addeq<M4Integer>/Small:0             1.95 us         1.95 us       794372
BM_BigInt_Addeq<M4Integer>/Large:1             6.65 us         6.65 us       218818
BM_BigInt_Addeq<NativeInteger>/Small:0        0.008 us        0.008 us     87476880
BM_BigInt_Mult<M2Integer>/Small:0             0.128 us        0.128 us      5467474
BM_BigInt_Mult<M2Integer>/Large:1             0.239 us        0.239 us      3215899
BM_BigInt_Mult<M4Integer>/Small:0             0.387 us        0.387 us      1674497
BM_BigInt_Mult<M4Integer>/Large:1             0.632 us        0.632 us      1098350
BM_BigInt_Mult<NativeInteger>/Small:0         0.000 us        0.000 us   1000000000
BM_BigInt_Multeq<M2Integer>/Small:0           0.729 us        0.728 us       964419
BM_BigInt_Multeq<M2Integer>/Large:1            3.03 us         3.03 us       282981
BM_BigInt_Multeq<M4Integer>/Small:0            1.29 us         1.29 us       545129
BM_BigInt_Multeq<M4Integer>/Large:1            5.85 us         5.85 us       174996
BM_BigInt_Multeq<NativeInteger>/Small:0       0.008 us        0.008 us     85961094
BM_BigInt_ModInverse<M2Integer>                7.46 us         7.45 us       100221
BM_BigInt_ModInverse<M4Integer>                6.70 us         6.70 us       104591
BM_BigInt_ModInverse<NativeInteger>           0.021 us        0.021 us     32829241
BM_BigInt_ModInverseEq<M2Integer>              7.00 us         7.00 us        99861
BM_BigInt_ModInverseEq<M4Integer>              6.73 us         6.73 us       104335
BM_BigInt_ModInverseEq<NativeInteger>         0.033 us        0.033 us     32304161
2021-03-24 15:16:25
Running ./bin/benchmark/Lattice
Run on (16 X 1700 MHz CPU s)
Load Average: 1.47, 1.23, 1.01
-----------------------------------------------------------------------------------------------------
Benchmark                                                           Time             CPU   Iterations
-----------------------------------------------------------------------------------------------------
BM_LATTICE_empty<NativePoly>/parm_16:16                         0.025 us        0.025 us     27552010
BM_LATTICE_empty<NativePoly>/parm_1024:1024                     0.034 us        0.034 us     27681504
BM_LATTICE_empty<NativePoly>/parm_2048:2048                     0.025 us        0.025 us     27838359
BM_LATTICE_empty<M2Poly>/parm_16:16                             0.035 us        0.035 us     27776418
BM_LATTICE_empty<M2Poly>/parm_1024:1024                         0.025 us        0.025 us     27694935
BM_LATTICE_empty<M2Poly>/parm_2048:2048                         0.036 us        0.035 us     27750831
BM_LATTICE_empty<M2Poly>/parm_8192:8192                         0.025 us        0.025 us     24096424
BM_LATTICE_empty<M2Poly>/parm_32768:32768                       0.025 us        0.025 us     27138864
BM_LATTICE_empty<M4Poly>/parm_16:16                             0.025 us        0.025 us     27623495
BM_LATTICE_empty<M4Poly>/parm_1024:1024                         0.025 us        0.025 us     27638800
BM_LATTICE_empty<M4Poly>/parm_2048:2048                         0.028 us        0.028 us     26669805
BM_LATTICE_empty<M4Poly>/parm_8192:8192                         0.025 us        0.025 us     23881767
BM_LATTICE_empty<M4Poly>/parm_32768:32768                       0.030 us        0.030 us     28054817
BM_LATTICE_empty<M2DCRTPoly>/parm_16:16                         0.159 us        0.159 us      4413005
BM_LATTICE_empty<M2DCRTPoly>/parm_1024:1024                     0.244 us        0.243 us      4765719
BM_LATTICE_empty<M2DCRTPoly>/parm_2048:2048                     0.165 us        0.165 us      4351520
BM_LATTICE_empty<M2DCRTPoly>/parm_8192:8192                     0.220 us        0.219 us      3209202
BM_LATTICE_empty<M2DCRTPoly>/parm_32768:32768                   0.525 us        0.525 us      1318055
BM_LATTICE_empty<M4DCRTPoly>/parm_16:16                         0.233 us        0.233 us      4324110
BM_LATTICE_empty<M4DCRTPoly>/parm_1024:1024                     0.152 us        0.152 us      4646948
BM_LATTICE_empty<M4DCRTPoly>/parm_2048:2048                     0.177 us        0.177 us      4205617
BM_LATTICE_empty<M4DCRTPoly>/parm_8192:8192                     0.223 us        0.223 us      3174515
BM_LATTICE_empty<M4DCRTPoly>/parm_32768:32768                   0.639 us        0.639 us      1325737
BM_LATTICE_makevector<NativePoly>/parm_16:16                     1.14 us         1.14 us       615814
BM_LATTICE_makevector<NativePoly>/parm_1024:1024                 30.9 us         30.9 us        22636
BM_LATTICE_makevector<NativePoly>/parm_2048:2048                 63.3 us         63.2 us        12259
BM_LATTICE_makevector<M2Poly>/parm_16:16                         12.8 us         12.8 us       108416
BM_LATTICE_makevector<M2Poly>/parm_1024:1024                      598 us          598 us         1202
BM_LATTICE_makevector<M2Poly>/parm_2048:2048                     1559 us         1557 us          559
BM_LATTICE_makevector<M2Poly>/parm_8192:8192                     8726 us         8718 us           95
BM_LATTICE_makevector<M2Poly>/parm_32768:32768                  47502 us        47502 us           15
BM_LATTICE_makevector<M4Poly>/parm_16:16                         19.5 us         19.5 us        37265
BM_LATTICE_makevector<M4Poly>/parm_1024:1024                      946 us          946 us          726
BM_LATTICE_makevector<M4Poly>/parm_2048:2048                     3188 us         3187 us          262
BM_LATTICE_makevector<M4Poly>/parm_8192:8192                    11294 us        11292 us           62
BM_LATTICE_makevector<M4Poly>/parm_32768:32768                 109928 us       109928 us            6
BM_LATTICE_makevector<M2DCRTPoly>/parm_16:16                     51.0 us         50.9 us        18599
BM_LATTICE_makevector<M2DCRTPoly>/parm_1024:1024                 1266 us         1266 us          432
BM_LATTICE_makevector<M2DCRTPoly>/parm_2048:2048                 4998 us         4993 us          141
BM_LATTICE_makevector<M2DCRTPoly>/parm_8192:8192               140201 us       140122 us            5
BM_LATTICE_makevector<M2DCRTPoly>/parm_32768:32768            7594041 us      7589337 us            1
BM_LATTICE_makevector<M4DCRTPoly>/parm_16:16                     29.1 us         29.1 us        23935
BM_LATTICE_makevector<M4DCRTPoly>/parm_1024:1024                 1546 us         1545 us          621
BM_LATTICE_makevector<M4DCRTPoly>/parm_2048:2048                 3959 us         3953 us          151
BM_LATTICE_makevector<M4DCRTPoly>/parm_8192:8192                35462 us        35427 us           29
BM_LATTICE_makevector<M4DCRTPoly>/parm_32768:32768             255691 us       255692 us            3
BM_add_LATTICE<NativePoly>/parm_16:16                           0.446 us        0.446 us      2099995
BM_add_LATTICE<NativePoly>/parm_1024:1024                        1.31 us         1.31 us       625163
BM_add_LATTICE<NativePoly>/parm_2048:2048                        1.87 us         1.87 us       356434
BM_add_LATTICE<M2Poly>/parm_16:16                                1.69 us         1.69 us       416632
BM_add_LATTICE<M2Poly>/parm_1024:1024                             358 us          358 us         1847
BM_add_LATTICE<M2Poly>/parm_2048:2048                             557 us          557 us         1582
BM_add_LATTICE<M2Poly>/parm_8192:8192                            4022 us         4019 us          351
BM_add_LATTICE<M2Poly>/parm_32768:32768                         10606 us        10597 us           71
BM_add_LATTICE<M4Poly>/parm_16:16                                5.57 us         5.57 us       125030
BM_add_LATTICE<M4Poly>/parm_1024:1024                             509 us          509 us         1000
BM_add_LATTICE<M4Poly>/parm_2048:2048                            1073 us         1072 us          984
BM_add_LATTICE<M4Poly>/parm_8192:8192                            3162 us         3157 us          225
BM_add_LATTICE<M4Poly>/parm_32768:32768                         16667 us        16667 us           41
BM_add_LATTICE<M2DCRTPoly>/parm_16:16                            1.60 us         1.60 us       465246
BM_add_LATTICE<M2DCRTPoly>/parm_1024:1024                        2.02 us         2.02 us       347307
BM_add_LATTICE<M2DCRTPoly>/parm_2048:2048                        7.96 us         7.93 us       100000
BM_add_LATTICE<M2DCRTPoly>/parm_8192:8192                        44.8 us         44.6 us        19668
BM_add_LATTICE<M2DCRTPoly>/parm_32768:32768                      2023 us         2023 us          297
BM_add_LATTICE<M4DCRTPoly>/parm_16:16                            2.27 us         2.27 us       250264
BM_add_LATTICE<M4DCRTPoly>/parm_1024:1024                        4.58 us         4.57 us       151451
BM_add_LATTICE<M4DCRTPoly>/parm_2048:2048                        5.64 us         5.64 us       124770
BM_add_LATTICE<M4DCRTPoly>/parm_8192:8192                        36.4 us         36.3 us        18592
BM_add_LATTICE<M4DCRTPoly>/parm_32768:32768                      1658 us         1658 us          361
BM_addeq_LATTICE<NativePoly>/parm_16:16                         0.063 us        0.063 us     11035293
BM_addeq_LATTICE<NativePoly>/parm_1024:1024                     0.555 us        0.555 us      1260628
BM_addeq_LATTICE<NativePoly>/parm_2048:2048                      1.05 us         1.05 us       665164
BM_addeq_LATTICE<M2Poly>/parm_16:16                             0.845 us        0.843 us       852404
BM_addeq_LATTICE<M2Poly>/parm_1024:1024                          84.7 us         84.6 us        12569
BM_addeq_LATTICE<M2Poly>/parm_2048:2048                           385 us          385 us         2772
BM_addeq_LATTICE<M2Poly>/parm_8192:8192                           600 us          600 us         1165
BM_addeq_LATTICE<M2Poly>/parm_32768:32768                        3077 us         3076 us          225
BM_addeq_LATTICE<M4Poly>/parm_16:16                              3.76 us         3.75 us       148954
BM_addeq_LATTICE<M4Poly>/parm_1024:1024                           264 us          264 us         2906
BM_addeq_LATTICE<M4Poly>/parm_2048:2048                           510 us          510 us         1316
BM_addeq_LATTICE<M4Poly>/parm_8192:8192                          2274 us         2274 us          314
BM_addeq_LATTICE<M4Poly>/parm_32768:32768                        9740 us         9739 us           70
BM_addeq_LATTICE<M2DCRTPoly>/parm_16:16                         0.143 us        0.143 us      5170749
BM_addeq_LATTICE<M2DCRTPoly>/parm_1024:1024                      1.25 us         1.25 us      1237455
BM_addeq_LATTICE<M2DCRTPoly>/parm_2048:2048                      2.16 us         2.16 us       328119
BM_addeq_LATTICE<M2DCRTPoly>/parm_8192:8192                      20.2 us         20.2 us        34709
BM_addeq_LATTICE<M2DCRTPoly>/parm_32768:32768                     333 us          333 us         2504
BM_addeq_LATTICE<M4DCRTPoly>/parm_16:16                         0.135 us        0.135 us      5177422
BM_addeq_LATTICE<M4DCRTPoly>/parm_1024:1024                     0.572 us        0.569 us      1224661
BM_addeq_LATTICE<M4DCRTPoly>/parm_2048:2048                      2.13 us         2.12 us       263297
BM_addeq_LATTICE<M4DCRTPoly>/parm_8192:8192                      25.5 us         25.5 us        34680
BM_addeq_LATTICE<M4DCRTPoly>/parm_32768:32768                     277 us          277 us         2593
BM_mult_LATTICE<NativePoly>/parm_16:16                          0.384 us        0.384 us      1830523
BM_mult_LATTICE<NativePoly>/parm_1024:1024                       2.25 us         2.25 us       311447
BM_mult_LATTICE<NativePoly>/parm_2048:2048                       4.16 us         4.16 us       160903
BM_mult_LATTICE<M2Poly>/parm_16:16                               20.8 us         20.8 us        33487
BM_mult_LATTICE<M2Poly>/parm_1024:1024                            567 us          566 us         1018
BM_mult_LATTICE<M2Poly>/parm_2048:2048                           2224 us         2223 us          586
BM_mult_LATTICE<M2Poly>/parm_8192:8192                           7799 us         7795 us          110
BM_mult_LATTICE<M2Poly>/parm_32768:32768                        56915 us        56833 us           13
BM_mult_LATTICE<M4Poly>/parm_16:16                               15.3 us         15.3 us        45997
BM_mult_LATTICE<M4Poly>/parm_1024:1024                            608 us          608 us         1111
BM_mult_LATTICE<M4Poly>/parm_2048:2048                           1775 us         1774 us          393
BM_mult_LATTICE<M4Poly>/parm_8192:8192                          13618 us        13616 us           43
BM_mult_LATTICE<M4Poly>/parm_32768:32768                       214906 us       214906 us            3
BM_mult_LATTICE<M2DCRTPoly>/parm_16:16                           1.55 us         1.54 us       372952
BM_mult_LATTICE<M2DCRTPoly>/parm_1024:1024                       3.06 us         3.06 us       228972
BM_mult_LATTICE<M2DCRTPoly>/parm_2048:2048                       11.8 us         11.6 us        76406
BM_mult_LATTICE<M2DCRTPoly>/parm_8192:8192                       79.0 us         79.0 us         8859
BM_mult_LATTICE<M2DCRTPoly>/parm_32768:32768                     2467 us         2467 us          288
BM_mult_LATTICE<M4DCRTPoly>/parm_16:16                           2.38 us         2.37 us       293575
BM_mult_LATTICE<M4DCRTPoly>/parm_1024:1024                       3.92 us         3.91 us       181438
BM_mult_LATTICE<M4DCRTPoly>/parm_2048:2048                       9.93 us         9.93 us        70161
BM_mult_LATTICE<M4DCRTPoly>/parm_8192:8192                       79.2 us         79.2 us         8837
BM_mult_LATTICE<M4DCRTPoly>/parm_32768:32768                     3070 us         3067 us          301
BM_multeq_LATTICE<NativePoly>/parm_16:16                        0.234 us        0.234 us      2870913
BM_multeq_LATTICE<NativePoly>/parm_1024:1024                     1.66 us         1.66 us       423157
BM_multeq_LATTICE<NativePoly>/parm_2048:2048                     3.24 us         3.24 us       182590
BM_multeq_LATTICE<M2Poly>/parm_16:16                             19.5 us         19.5 us        35923
BM_multeq_LATTICE<M2Poly>/parm_1024:1024                          503 us          502 us         2523
BM_multeq_LATTICE<M2Poly>/parm_2048:2048                          707 us          706 us          968
BM_multeq_LATTICE<M2Poly>/parm_8192:8192                         9714 us         9714 us          172
BM_multeq_LATTICE<M2Poly>/parm_32768:32768                      49170 us        49170 us           14
BM_multeq_LATTICE<M4Poly>/parm_16:16                             22.7 us         22.7 us        54857
BM_multeq_LATTICE<M4Poly>/parm_1024:1024                          528 us          528 us         1364
BM_multeq_LATTICE<M4Poly>/parm_2048:2048                         1593 us         1592 us          433
BM_multeq_LATTICE<M4Poly>/parm_8192:8192                        12475 us        12475 us           56
BM_multeq_LATTICE<M4Poly>/parm_32768:32768                     450470 us       450014 us            2
BM_multeq_LATTICE<M2DCRTPoly>/parm_16:16                        0.184 us        0.184 us      3734069
BM_multeq_LATTICE<M2DCRTPoly>/parm_1024:1024                     1.64 us         1.63 us       428799
BM_multeq_LATTICE<M2DCRTPoly>/parm_2048:2048                     9.94 us         9.94 us       108265
BM_multeq_LATTICE<M2DCRTPoly>/parm_8192:8192                     63.3 us         63.3 us        11085
BM_multeq_LATTICE<M2DCRTPoly>/parm_32768:32768                   1019 us         1018 us          714
BM_multeq_LATTICE<M4DCRTPoly>/parm_16:16                        0.184 us        0.184 us      3799149
BM_multeq_LATTICE<M4DCRTPoly>/parm_1024:1024                     2.51 us         2.50 us       428833
BM_multeq_LATTICE<M4DCRTPoly>/parm_2048:2048                     13.9 us         13.9 us        39290
BM_multeq_LATTICE<M4DCRTPoly>/parm_8192:8192                     72.5 us         72.4 us        11080
BM_multeq_LATTICE<M4DCRTPoly>/parm_32768:32768                    815 us          815 us          857
BM_switchformat_LATTICE<NativePoly>/parm_16:16                  0.575 us        0.575 us      1209658
BM_switchformat_LATTICE<NativePoly>/parm_1024:1024               7.39 us         7.39 us        95019
BM_switchformat_LATTICE<NativePoly>/parm_2048:2048               22.6 us         22.6 us        45714
BM_switchformat_LATTICE<M2Poly>/parm_16:16                       31.1 us         31.1 us        22533
BM_switchformat_LATTICE<M2Poly>/parm_1024:1024                   3245 us         3245 us          304
BM_switchformat_LATTICE<M2Poly>/parm_2048:2048                   5862 us         5861 us          121
BM_switchformat_LATTICE<M2Poly>/parm_8192:8192                  36620 us        36603 us           19
BM_switchformat_LATTICE<M2Poly>/parm_32768:32768               570473 us       569426 us            1
BM_switchformat_LATTICE<M4Poly>/parm_16:16                       92.0 us         92.0 us        10000
BM_switchformat_LATTICE<M4Poly>/parm_1024:1024                   3922 us         3921 us          179
BM_switchformat_LATTICE<M4Poly>/parm_2048:2048                  12051 us        12050 us           58
BM_switchformat_LATTICE<M4Poly>/parm_8192:8192                  97967 us        97855 us            7
BM_switchformat_LATTICE<M4Poly>/parm_32768:32768              2199928 us      2183548 us            1
BM_switchformat_LATTICE<M2DCRTPoly>/parm_16:16                   1.53 us         1.53 us       510101
BM_switchformat_LATTICE<M2DCRTPoly>/parm_1024:1024               7.73 us         7.73 us        91915
BM_switchformat_LATTICE<M2DCRTPoly>/parm_2048:2048               34.0 us         34.0 us        22717
BM_switchformat_LATTICE<M2DCRTPoly>/parm_8192:8192                338 us          338 us         2068
BM_switchformat_LATTICE<M2DCRTPoly>/parm_32768:32768             6186 us         6183 us          113
BM_switchformat_LATTICE<M4DCRTPoly>/parm_16:16                   2.46 us         2.46 us       515887
BM_switchformat_LATTICE<M4DCRTPoly>/parm_1024:1024               8.54 us         8.54 us        92504
BM_switchformat_LATTICE<M4DCRTPoly>/parm_2048:2048               30.9 us         30.9 us        22785
BM_switchformat_LATTICE<M4DCRTPoly>/parm_8192:8192                336 us          336 us         2081
BM_switchformat_LATTICE<M4DCRTPoly>/parm_32768:32768             6346 us         6346 us           88
BM_doubleswitchformat_LATTICE<NativePoly>/parm_16:16            0.907 us        0.907 us       776815
BM_doubleswitchformat_LATTICE<NativePoly>/parm_1024:1024         13.8 us         13.8 us        50570
BM_doubleswitchformat_LATTICE<NativePoly>/parm_2048:2048         29.1 us         29.0 us        24114
BM_doubleswitchformat_LATTICE<M2Poly>/parm_16:16                 57.8 us         57.7 us        12323
BM_doubleswitchformat_LATTICE<M2Poly>/parm_1024:1024             4697 us         4695 us          175
BM_doubleswitchformat_LATTICE<M2Poly>/parm_2048:2048            10853 us        10848 us           63
BM_doubleswitchformat_LATTICE<M2Poly>/parm_8192:8192            68137 us        68099 us           10
BM_doubleswitchformat_LATTICE<M2Poly>/parm_32768:32768         823201 us       823103 us            1
BM_doubleswitchformat_LATTICE<M4Poly>/parm_16:16                 73.4 us         73.4 us         9519
BM_doubleswitchformat_LATTICE<M4Poly>/parm_1024:1024             7599 us         7587 us           92
BM_doubleswitchformat_LATTICE<M4Poly>/parm_2048:2048            23105 us        23103 us           30
BM_doubleswitchformat_LATTICE<M4Poly>/parm_8192:8192           196000 us       195914 us            4
BM_doubleswitchformat_LATTICE<M4Poly>/parm_32768:32768        4176017 us      4173965 us            1
BM_doubleswitchformat_LATTICE<M2DCRTPoly>/parm_16:16             3.39 us         3.39 us       233719
BM_doubleswitchformat_LATTICE<M2DCRTPoly>/parm_1024:1024         14.0 us         14.0 us        50055
BM_doubleswitchformat_LATTICE<M2DCRTPoly>/parm_2048:2048         98.3 us         98.1 us         6882
BM_doubleswitchformat_LATTICE<M2DCRTPoly>/parm_8192:8192         1713 us         1712 us          445
BM_doubleswitchformat_LATTICE<M2DCRTPoly>/parm_32768:32768      53067 us        53062 us           11
BM_doubleswitchformat_LATTICE<M4DCRTPoly>/parm_16:16             2.02 us         2.02 us       345895
BM_doubleswitchformat_LATTICE<M4DCRTPoly>/parm_1024:1024         15.3 us         15.3 us        50121
BM_doubleswitchformat_LATTICE<M4DCRTPoly>/parm_2048:2048         98.0 us         97.9 us         7067
BM_doubleswitchformat_LATTICE<M4DCRTPoly>/parm_8192:8192         1579 us         1579 us          445
BM_doubleswitchformat_LATTICE<M4DCRTPoly>/parm_32768:32768      24951 us        24927 us           28
2021-03-24 15:19:40
Running ./bin/benchmark/NbTheory
Run on (16 X 1700 MHz CPU s)
Load Average: 2.12, 1.53, 1.17
-----------------------------------------------------
Benchmark           Time             CPU   Iterations
-----------------------------------------------------
BM_GCD1          1892 ns         1891 ns       370365 0
BM_GCD2          4280 ns         4280 ns       272695 4096
BM_MRP1       2266015 ns      2265866 ns          373 1
BM_MRP2       5347716 ns      5347463 ns          131 1
BM_MRP3         17869 ns        17834 ns        39382 0
BM_MRP4        127100 ns       127091 ns        11836 0
BM_FACT1      2826265 ns      2821220 ns          248
BM_PM1        5062875 ns      5062877 ns          138 1073750017
BM_PROU1     26663464 ns     26640544 ns           25 1 8589987840
BM_PROU3   1899684572 ns   1897850924 ns            1 1 140737488486400 134563004490830
2021-03-24 15:19:52
Running ./bin/benchmark/VectorMath
Run on (16 X 1700 MHz CPU s)
Load Average: 1.95, 1.51, 1.17
----------------------------------------------------------------------------------------
Benchmark                                              Time             CPU   Iterations
----------------------------------------------------------------------------------------
BM_BigVec_Add<NativeVector>/parm_16:16             0.154 us        0.154 us      4564316
BM_BigVec_Add<NativeVector>/parm_1024:1024          1.98 us         1.98 us       444352
BM_BigVec_Add<NativeVector>/parm_2048:2048          3.19 us         3.19 us       220759
BM_BigVec_Add<M2Vector>/parm_16:16                  3.32 us         3.31 us       183598
BM_BigVec_Add<M2Vector>/parm_1024:1024               590 us          590 us         1158
BM_BigVec_Add<M2Vector>/parm_2048:2048              1459 us         1459 us          446
BM_BigVec_Add<M2Vector>/parm_8192:8192              5963 us         5955 us          117
BM_BigVec_Add<M2Vector>/parm_32768:32768           21909 us        21905 us           31
BM_BigVec_Add<M4Vector>/parm_16:16                  10.4 us         10.4 us        71714
BM_BigVec_Add<M4Vector>/parm_1024:1024               660 us          660 us         1074
BM_BigVec_Add<M4Vector>/parm_2048:2048              1424 us         1424 us          502
BM_BigVec_Add<M4Vector>/parm_8192:8192              6310 us         6310 us          113
BM_BigVec_Add<M4Vector>/parm_32768:32768           34953 us        34894 us           20
BM_BigVec_Addeq<NativeVector>/parm_16:16           0.025 us        0.025 us     30830659
BM_BigVec_Addeq<NativeVector>/parm_1024:1024        1.06 us         1.06 us       616777
BM_BigVec_Addeq<NativeVector>/parm_2048:2048        2.01 us         2.01 us       345308
BM_BigVec_Addeq<M2Vector>/parm_16:16                1.85 us         1.84 us       396957
BM_BigVec_Addeq<M2Vector>/parm_1024:1024             111 us          111 us         6276
BM_BigVec_Addeq<M2Vector>/parm_2048:2048             302 us          302 us         2368
BM_BigVec_Addeq<M2Vector>/parm_8192:8192            1424 us         1424 us          578
BM_BigVec_Addeq<M2Vector>/parm_32768:32768          6476 us         6476 us          108
BM_BigVec_Addeq<M4Vector>/parm_16:16                7.42 us         7.42 us        89059
BM_BigVec_Addeq<M4Vector>/parm_1024:1024             491 us          491 us         1463
BM_BigVec_Addeq<M4Vector>/parm_2048:2048            1024 us         1024 us          682
BM_BigVec_Addeq<M4Vector>/parm_8192:8192            6486 us         6481 us          100
BM_BigVec_Addeq<M4Vector>/parm_32768:32768         19896 us        19896 us           36
BM_BigVec_Mult<NativeVector>/parm_16:16            0.197 us        0.197 us      3543181
BM_BigVec_Mult<NativeVector>/parm_1024:1024         5.75 us         5.75 us       100000
BM_BigVec_Mult<NativeVector>/parm_2048:2048         7.65 us         7.65 us        91892
BM_BigVec_Mult<M2Vector>/parm_16:16                 25.8 us         25.8 us        27086
BM_BigVec_Mult<M2Vector>/parm_1024:1024             1056 us         1056 us          675
BM_BigVec_Mult<M2Vector>/parm_2048:2048             3353 us         3347 us          297
BM_BigVec_Mult<M2Vector>/parm_8192:8192            15907 us        15902 us           56
BM_BigVec_Mult<M2Vector>/parm_32768:32768         114833 us       114822 us            6
BM_BigVec_Mult<M4Vector>/parm_16:16                 26.9 us         26.9 us        26427
BM_BigVec_Mult<M4Vector>/parm_1024:1024             1208 us         1208 us          579
BM_BigVec_Mult<M4Vector>/parm_2048:2048             3507 us         3503 us          199
BM_BigVec_Mult<M4Vector>/parm_8192:8192            40017 us        40011 us           26
BM_BigVec_Mult<M4Vector>/parm_32768:32768         543250 us       543167 us            2
BM_BigVec_Multeq<NativeVector>/parm_16:16          0.130 us        0.130 us      4071634
BM_BigVec_Multeq<NativeVector>/parm_1024:1024       4.00 us         4.00 us       221207
BM_BigVec_Multeq<NativeVector>/parm_2048:2048       6.89 us         6.88 us       111567
BM_BigVec_Multeq<M2Vector>/parm_16:16               28.0 us         28.0 us        28157
BM_BigVec_Multeq<M2Vector>/parm_1024:1024           1353 us         1353 us          436
BM_BigVec_Multeq<M2Vector>/parm_2048:2048           1428 us         1426 us          494
BM_BigVec_Multeq<M2Vector>/parm_8192:8192           8293 us         8277 us           85
BM_BigVec_Multeq<M2Vector>/parm_32768:32768        98054 us        98049 us            7
BM_BigVec_Multeq<M4Vector>/parm_16:16               23.1 us         23.1 us        29631
BM_BigVec_Multeq<M4Vector>/parm_1024:1024           1344 us         1344 us          710
BM_BigVec_Multeq<M4Vector>/parm_2048:2048           3007 us         3007 us          189
BM_BigVec_Multeq<M4Vector>/parm_8192:8192          24864 us        24854 us           28
BM_BigVec_Multeq<M4Vector>/parm_32768:32768       419367 us       419020 us            2
2021-03-24 15:20:50
Running ./bin/benchmark/basic_test
Run on (16 X 1700 MHz CPU s)
Load Average: 1.82, 1.56, 1.20
-----------------------------------------------------------------------------------------
Benchmark                                               Time             CPU   Iterations
-----------------------------------------------------------------------------------------
BM_empty                                            0.535 ns        0.535 ns   1000000000
BM_empty/threads:16                                 0.064 ns        0.772 ns    873374288
BM_spin_empty/8                                      5.58 ns         5.58 ns    125508905
BM_spin_empty/512                                    1244 ns         1243 ns       710029
BM_spin_empty/8192                                  15668 ns        15668 ns        44689
BM_spin_empty/8/threads:16                          0.830 ns         7.85 ns     91494240
BM_spin_empty/512/threads:16                          103 ns         1208 ns       579840
BM_spin_empty/8192/threads:16                        2039 ns        19645 ns        35984
BM_spin_pause_before/8                               5.54 ns         5.54 ns    126268880
BM_spin_pause_before/512                              987 ns          987 ns       709880
BM_spin_pause_before/8192                           15680 ns        15680 ns        43993
BM_spin_pause_before/8/threads:16                   0.682 ns         7.94 ns     86360560
BM_spin_pause_before/512/threads:16                  97.4 ns         1264 ns       580352
BM_spin_pause_before/8192/threads:16                 1606 ns        19154 ns        37280
BM_spin_pause_during/8                                467 ns          468 ns      2008622
BM_spin_pause_during/512                             1572 ns         1573 ns       530459
BM_spin_pause_during/8192                           16025 ns        16013 ns        40253
BM_spin_pause_during/8/threads:16                    59.0 ns          614 ns      1201664
BM_spin_pause_during/512/threads:16                   178 ns         1787 ns       377376
BM_spin_pause_during/8192/threads:16                 1725 ns        19942 ns        33504
BM_pause_during                                       380 ns          380 ns      1859833
BM_pause_during/threads:16                           54.5 ns          581 ns      1232256
BM_pause_during/real_time                             377 ns          378 ns      2019570
BM_pause_during/real_time/threads:16                 61.2 ns          583 ns     13321424
BM_spin_pause_after/8                                7.78 ns         7.76 ns    107541987
BM_spin_pause_after/512                               219 ns          219 ns      3201417
BM_spin_pause_after/8192                             8478 ns         8472 ns       100000
BM_spin_pause_after/8/threads:16                    0.482 ns         5.71 ns    136528928
BM_spin_pause_after/512/threads:16                   28.5 ns          317 ns      1600000
BM_spin_pause_after/8192/threads:16                   424 ns         4888 ns       155424
BM_spin_pause_before_and_after/8                     7.53 ns         7.53 ns     68501774
BM_spin_pause_before_and_after/512                    600 ns          600 ns      2276802
BM_spin_pause_before_and_after/8192                  3519 ns         3514 ns       180454
BM_spin_pause_before_and_after/8/threads:16         0.540 ns         5.62 ns    137287184
BM_spin_pause_before_and_after/512/threads:16        31.0 ns          315 ns      2244272
BM_spin_pause_before_and_after/8192/threads:16        445 ns         4851 ns       146096
BM_empty_stop_start                                 0.241 ns        0.241 ns   1000000000
BM_empty_stop_start/threads:16                      0.024 ns        0.293 ns   2385364688
2021-03-24 15:21:19
Running ./bin/benchmark/binfhe-ap
Run on (16 X 1700 MHz CPU s)
Load Average: 3.75, 2.04, 1.39
------------------------------------------------------------------------------------
Benchmark                                          Time             CPU   Iterations
------------------------------------------------------------------------------------
FHEW_NOT/MEDIUM                                0.751 us        0.750 us       929208
FHEW_NOT/STD128                                 1.07 us         1.07 us       653913
FHEW_NOT/STD128_AP                              1.27 us         1.27 us       653361
FHEW_BINGATE/MEDIUM_OR/min_time:10.000        321984 us       321706 us           41
FHEW_BINGATE/MEDIUM_AND                       299933 us       299287 us            3
FHEW_BINGATE/MEDIUM_NOR                       347350 us       347052 us            3
FHEW_BINGATE/MEDIUM_NAND                      326543 us       326126 us            3
FHEW_BINGATE/MEDIUM_XOR                       955887 us       953945 us            1
FHEW_BINGATE/MEDIUM_XNOR                      805256 us       805237 us            1
FHEW_BINGATE/MEDIUM_XOR_FAST                  279636 us       279142 us            3
FHEW_BINGATE/MEDIUM_XNOR_FAST                 266258 us       266172 us            3
FHEW_BINGATE/STD128_OR/min_time:10.000        875815 us       875063 us           17
FHEW_BINGATE/STD128_AND                       689719 us       689632 us            1
FHEW_BINGATE/STD128_NOR                       687017 us       685879 us            1
FHEW_BINGATE/STD128_NAND                      676501 us       676275 us            1
FHEW_BINGATE/STD128_XOR                      2930609 us      2929212 us            1
FHEW_BINGATE/STD128_XNOR                     2560646 us      2558751 us            1
FHEW_BINGATE/STD128_XOR_FAST                  683965 us       682668 us            1
FHEW_BINGATE/STD128_XNOR_FAST                 951492 us       950354 us            1
FHEW_BINGATE/STD128_AP_OR/min_time:10.000     676706 us       676356 us           19
FHEW_BINGATE/STD128_AP_AND                    536918 us       536888 us            1
FHEW_BINGATE/STD128_AP_NOR                    536298 us       536123 us            1
FHEW_BINGATE/STD128_AP_NAND                   712972 us       712910 us            1
FHEW_BINGATE/STD128_AP_XOR                   1777041 us      1775252 us            1
FHEW_BINGATE/STD128_AP_XNOR                  2267588 us      2266949 us            1
FHEW_BINGATE/STD128_AP_XOR_FAST               534898 us       534218 us            1
FHEW_BINGATE/STD128_AP_XNOR_FAST              598815 us       598810 us            1
FHEW_KEYSWITCH/MEDIUM/min_time:1.000           17480 us        17452 us          108
FHEW_KEYSWITCH/STD128/min_time:1.000           24326 us        24310 us           58
FHEW_KEYSWITCH/STD128_AP/min_time:1.000        31512 us        31487 us           58
2021-03-24 15:56:17
Running ./bin/benchmark/binfhe-ginx
Run on (16 X 1700 MHz CPU s)
Load Average: 1.45, 1.47, 1.43
---------------------------------------------------------------------------------
Benchmark                                       Time             CPU   Iterations
---------------------------------------------------------------------------------
FHEW_NOT/MEDIUM                              2.18 us         2.18 us       328796
FHEW_NOT/STD128                              1.18 us         1.18 us       637154
FHEW_BINGATE/MEDIUM_OR/min_time:10.000     324520 us       324372 us           42
FHEW_BINGATE/MEDIUM_AND                    283258 us       283214 us            2
FHEW_BINGATE/MEDIUM_NOR                    281847 us       281755 us            2
FHEW_BINGATE/MEDIUM_NAND                   349647 us       349141 us            2
FHEW_BINGATE/MEDIUM_XOR                    846851 us       846118 us            1
FHEW_BINGATE/MEDIUM_XNOR                  1229216 us      1228247 us            1
FHEW_BINGATE/MEDIUM_XOR_FAST               281456 us       281456 us            2
FHEW_BINGATE/MEDIUM_XNOR_FAST              282707 us       282689 us            2
FHEW_BINGATE/STD128_OR/min_time:10.000     773242 us       772717 us           16
FHEW_BINGATE/STD128_AND                    729112 us       729097 us            1
FHEW_BINGATE/STD128_NOR                    734354 us       734273 us            1
FHEW_BINGATE/STD128_NAND                   736111 us       733283 us            1
FHEW_BINGATE/STD128_XOR                   2159074 us      2158896 us            1
FHEW_BINGATE/STD128_XNOR                  2821404 us      2820195 us            1
FHEW_BINGATE/STD128_XOR_FAST               724062 us       723912 us            1
FHEW_BINGATE/STD128_XNOR_FAST              835879 us       834990 us            1
FHEW_KEYSWITCH/MEDIUM/min_time:1.000        19748 us        19725 us          108
FHEW_KEYSWITCH/STD128/min_time:1.000        24136 us        24136 us           58
2021-03-24 16:02:02
Running ./bin/benchmark/compare-bfvrns-vs-bfvrnsB
Run on (16 X 1700 MHz CPU s)
Load Average: 1.32, 1.37, 1.39
----------------------------------------------------------------------------------------------------
Benchmark                                                          Time             CPU   Iterations
----------------------------------------------------------------------------------------------------
BFVrns_EvalMultMany/ptm:2/dcrtbit:30/min_time:10.000          195698 us       195622 us           80
BFVrns_EvalMultMany/ptm:2/dcrtbit:60/min_time:10.000          266804 us       266654 us           58
BFVrns_EvalMultMany/ptm:65537/dcrtbit:30/min_time:10.000      744924 us       744436 us           21
BFVrns_EvalMultMany/ptm:65537/dcrtbit:60/min_time:10.000      407922 us       407532 us           27
BFVrnsB_EvalMultMany/ptm:2/dcrtbit:30/min_time:10.000         180708 us       180629 us           91
BFVrnsB_EvalMultMany/ptm:2/dcrtbit:60/min_time:10.000         286352 us       286205 us           65
BFVrnsB_EvalMultMany/ptm:65537/dcrtbit:30/min_time:10.000     789631 us       789035 us           18
BFVrnsB_EvalMultMany/ptm:65537/dcrtbit:60/min_time:10.000     422386 us       422191 us           37
BFVrns_Decrypt/ptm:2/dcrtbit:30/logn:12                          274 us          274 us         2595
BFVrns_Decrypt/ptm:2/dcrtbit:30/logn:14                         1088 us         1087 us          650
BFVrns_Decrypt/ptm:2/dcrtbit:60/logn:12                          277 us          277 us         2499
BFVrns_Decrypt/ptm:2/dcrtbit:60/logn:14                         1364 us         1364 us          632
BFVrns_Decrypt/ptm:65537/dcrtbit:30/logn:12                      500 us          500 us         1400
BFVrns_Decrypt/ptm:65537/dcrtbit:30/logn:14                     2155 us         2154 us          323
BFVrns_Decrypt/ptm:65537/dcrtbit:60/logn:12                      372 us          371 us         1970
BFVrns_Decrypt/ptm:65537/dcrtbit:60/logn:14                     1578 us         1575 us          455
BFVrnsB_Decrypt/ptm:2/dcrtbit:30/logn:12                         288 us          288 us         2450
BFVrnsB_Decrypt/ptm:2/dcrtbit:30/logn:14                        1150 us         1150 us          602
BFVrnsB_Decrypt/ptm:2/dcrtbit:60/logn:12                         286 us          286 us         2408
BFVrnsB_Decrypt/ptm:2/dcrtbit:60/logn:14                        1143 us         1143 us          611
BFVrnsB_Decrypt/ptm:65537/dcrtbit:30/logn:12                     530 us          529 us         1327
BFVrnsB_Decrypt/ptm:65537/dcrtbit:30/logn:14                    2270 us         2270 us          308
BFVrnsB_Decrypt/ptm:65537/dcrtbit:60/logn:12                     422 us          422 us         2017
BFVrnsB_Decrypt/ptm:65537/dcrtbit:60/logn:14                    1532 us         1529 us          399
2021-03-24 16:04:59
Running ./bin/benchmark/compare-bfvrns-vs-bgvrns
Run on (16 X 1700 MHz CPU s)
Load Average: 1.20, 1.30, 1.35
------------------------------------------------------------------------------------
Benchmark                                          Time             CPU   Iterations
------------------------------------------------------------------------------------
BFVrns_EvalMultManyP2/min_time:10.000         258362 us       258212 us           58
BGVrns_EvalMultManyP2/min_time:10.000         140927 us       140856 us          117
BFVrns_EvalMultManyP65537/min_time:10.000     409268 us       408997 us           33
BGVrns_EvalMultManyP65537/min_time:10.000     139408 us       139324 us           97
2021-03-24 16:06:09
Running ./bin/benchmark/lib-benchmark
Run on (16 X 1700 MHz CPU s)
Load Average: 1.33, 1.33, 1.36
-------------------------------------------------------------------
Benchmark                         Time             CPU   Iterations
-------------------------------------------------------------------
NTTTransform1024               12.7 us         12.7 us        48060
INTTTransform1024              13.2 us         13.2 us        53067
NTTTransform4096                212 us          211 us         3234
INTTTransform4096               161 us          161 us         4613
BFVrns_KeyGen                  3010 us         3008 us          231
BFVrns_MultKeyGen             11034 us        11021 us           77
BFVrns_EvalAtIndexKeyGen       9054 us         9053 us           77
BFVrns_Encryption              3097 us         3096 us          249
BFVrns_Decryption              1190 us         1190 us          578
BFVrns_Add                     31.3 us         31.3 us        22335
BFVrns_MultNoRelin            16152 us        16150 us           49
BFVrns_MultRelin              21636 us        21636 us           24
BFVrns_EvalAtIndex             8458 us         8457 us          105
CKKS_KeyGen                    3091 us         3091 us          226
CKKS_MultKeyGen                6063 us         6062 us          126
CKKS_EvalAtIndexKeyGen         5616 us         5614 us          124
CKKS_Encryption                2660 us         2656 us          262
CKKS_Decryption                1034 us         1034 us         1033
CKKS_Add                       48.1 us         48.1 us        14568
CKKS_MultNoRelin                139 us          139 us         5074
CKKS_MultRelin                 6251 us         6244 us          111
CKKS_Relin                     6201 us         6201 us          112
CKKS_Rescale                   1295 us         1294 us          531
CKKS_EvalAtIndex               8380 us         8373 us          111
BGVrns_KeyGen                  2711 us         2711 us          258
BGVrns_MultKeyGen              4070 us         4065 us          178
BGVrns_EvalAtIndexKeyGen       3998 us         3997 us          175
BGVrns_Encryption              3026 us         3024 us          248
BGVrns_Decryption               240 us          240 us         2926
BGVrns_Add                     48.4 us         48.4 us        14469
BGVrns_MultNoRelin              140 us          140 us         5029
BGVrns_MultRelin               5765 us         5764 us          122
BGVrns_Relin                   6304 us         6300 us          122
BGVrns_EvalAtIndex            13005 us        13002 us           86
Generating polynomials for the benchmark...
Polynomials for the benchmark are generated
2021-03-24 16:09:08
Running ./bin/benchmark/poly-benchmark-16k
Run on (16 X 1700 MHz CPU s)
Load Average: 1.49, 1.52, 1.43
-------------------------------------------------------------
Benchmark                   Time             CPU   Iterations
-------------------------------------------------------------
Native_add               25.9 us         25.9 us        27106
DCRT_add/towers:1        27.9 us         27.9 us        25366
DCRT_add/towers:2        67.8 us         67.7 us        11065
DCRT_add/towers:4         126 us          126 us         3979
DCRT_add/towers:8         275 us          275 us         2511
Native_mul               73.2 us         73.0 us        11124
DCRT_mul/towers:1        64.7 us         64.7 us        11161
DCRT_mul/towers:2         130 us          130 us         5357
DCRT_mul/towers:4         330 us          330 us         2664
DCRT_mul/towers:8         544 us          544 us         1273
Native_ntt               1358 us         1358 us          602
DCRT_ntt/towers:1        1173 us         1173 us          604
DCRT_ntt/towers:2        2331 us         2330 us          301
DCRT_ntt/towers:4        4848 us         4832 us          150
DCRT_ntt/towers:8        9334 us         9318 us           75
Native_intt               486 us          486 us         2287
DCRT_intt/towers:1        302 us          302 us         2319
DCRT_intt/towers:2        608 us          607 us         1140
DCRT_intt/towers:4       1215 us         1215 us          570
DCRT_intt/towers:8       2465 us         2463 us          288
Generating polynomials for the benchmark...
Polynomials for the benchmark are generated
2021-03-24 16:09:35
Running ./bin/benchmark/poly-benchmark-1k
Run on (16 X 1700 MHz CPU s)
Load Average: 1.38, 1.49, 1.42
-------------------------------------------------------------
Benchmark                   Time             CPU   Iterations
-------------------------------------------------------------
Native_add               4.86 us         4.85 us       361289
DCRT_add/towers:1        2.22 us         2.22 us       316507
DCRT_add/towers:2        4.33 us         4.33 us       161816
DCRT_add/towers:4        8.47 us         8.47 us        81890
DCRT_add/towers:8        16.8 us         16.8 us        41343
Native_mul               5.30 us         5.28 us       100000
DCRT_mul/towers:1        4.35 us         4.35 us       160936
DCRT_mul/towers:2        8.75 us         8.74 us        81392
DCRT_mul/towers:4        22.9 us         22.9 us        40496
DCRT_mul/towers:8        35.2 us         35.1 us        20702
Native_ntt               83.9 us         83.8 us        13352
DCRT_ntt/towers:1         124 us          124 us         6137
DCRT_ntt/towers:2         282 us          282 us         2350
DCRT_ntt/towers:4         216 us          216 us         3205
DCRT_ntt/towers:8         776 us          775 us         1000
Native_intt              25.2 us         25.2 us        46854
DCRT_intt/towers:1       15.1 us         15.1 us        46410
DCRT_intt/towers:2       41.7 us         41.7 us        23279
DCRT_intt/towers:4       62.3 us         62.3 us        11661
DCRT_intt/towers:8        121 us          121 us         5753
Generating polynomials for the benchmark...
Polynomials for the benchmark are generated
2021-03-24 16:10:33
Running ./bin/benchmark/poly-benchmark-4k
Run on (16 X 1700 MHz CPU s)
Load Average: 1.35, 1.46, 1.41
-------------------------------------------------------------
Benchmark                   Time             CPU   Iterations
-------------------------------------------------------------
Native_add               14.9 us         14.9 us       104902
DCRT_add/towers:1        10.4 us         10.4 us        62820
DCRT_add/towers:2        18.7 us         18.7 us        41970
DCRT_add/towers:4        28.5 us         28.5 us        24726
DCRT_add/towers:8        63.4 us         63.4 us        11011
Native_mul               15.7 us         15.7 us        44460
DCRT_mul/towers:1        15.9 us         15.9 us        44340
DCRT_mul/towers:2        31.8 us         31.7 us        22149
DCRT_mul/towers:4        63.0 us         63.0 us        11120
DCRT_mul/towers:8         134 us          134 us         5298
Native_ntt                251 us          251 us         2783
DCRT_ntt/towers:1         254 us          254 us         2784
DCRT_ntt/towers:2         531 us          531 us         1391
DCRT_ntt/towers:4        1010 us         1010 us          611
DCRT_ntt/towers:8        2021 us         2021 us          346
Native_intt              71.2 us         71.2 us        10100
DCRT_intt/towers:1        102 us          101 us         6512
DCRT_intt/towers:2        136 us          136 us         5168
DCRT_intt/towers:4        272 us          272 us         2585
DCRT_intt/towers:8        548 us          548 us         1289
Generating polynomials for the benchmark...
Polynomials for the benchmark are generated
2021-03-24 16:20:19
Running ./bin/benchmark/poly-benchmark-64k
Run on (16 X 1700 MHz CPU s)
Load Average: 1.31, 1.38, 1.40
-------------------------------------------------------------
Benchmark                   Time             CPU   Iterations
-------------------------------------------------------------
Native_add                714 us          713 us         1085
DCRT_add/towers:1         631 us          630 us         1065
DCRT_add/towers:2        1320 us         1320 us          508
DCRT_add/towers:4        2686 us         2685 us          212
DCRT_add/towers:8        5385 us         5381 us          136
Native_mul                870 us          867 us          797
DCRT_mul/towers:1        1087 us         1086 us          855
DCRT_mul/towers:2        2096 us         2093 us          363
DCRT_mul/towers:4        3425 us         3425 us          202
DCRT_mul/towers:8        7811 us         7805 us          114
Native_ntt               5870 us         5863 us          120
DCRT_ntt/towers:1        5924 us         5923 us          117
DCRT_ntt/towers:2       18177 us        18163 us           59
DCRT_ntt/towers:4       24460 us        24433 us           29
DCRT_ntt/towers:8       59649 us        59601 us           13
Native_intt              2237 us         2234 us          371
DCRT_intt/towers:1       1896 us         1895 us          346
DCRT_intt/towers:2       4576 us         4569 us          181
DCRT_intt/towers:4       7823 us         7823 us           90
DCRT_intt/towers:8      19555 us        19532 us           47

# Examples

# Packaging Palisade for OpenBSD

# Resources

  • https://en.wikipedia.org/wiki/Homomorphic_encryption#cite_note-SHEEP-47
  • https://en.wikipedia.org/wiki/PALISADE_(software)
  • https://palisade-crypto.org/
  • https://gitlab.com/palisade/palisade-release
  • https://reviews.llvm.org/D34280
  • https://openports.se/devel/llvm
  • https://palisade-crypto.org/publications/
  • https://www.openmp.org/