Skip to content

pqov/pqov

Repository files navigation

OV signature

This project contains the reference and optimized implementations of the oil and vinegar (OV) signature system.

Licence

Public Domain (https://creativecommons.org/share-your-work/public-domain/cc0/); or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html) unless stated differently at the top of each file.

Parameters

NIST Sec. Level Parameter (n,m,GF(q)) epk size (bytes) esk size (bytes) cpk size (bytes) csk size (bytes) signature size (bytes)
uov-Ip 1 112,44,GF(256) 278,432 237,896 43,576 32 128
uov-Is 1 160,64,GF(16) 412,160 348,704 66,576 32 96
uov-III 3 184,72,GF(256) 1,225,440 1,044,320 189,232 32 200
uov-V 5 244,96,GF(256) 2,869,440 2,436,704 446,992 32 260

Contents

  • src : Source code.
  • utils : utilities for AES, SHAKE, and PRNGs. The default setting calls openssl library.
  • unit_tests : unit testers.

Generate NIST and SUPERCOP projects

  1. NIST submission:
  • creat basic nist project.
python3 ./create_nist_project.py
  • generate KAT files. (I personally recommend skipping this step for version controls of the source code because the size of KATs are enomerous.)
cd pqov_nist_submission/Optimized_Implementation/avx2/
source ./generate_KAT.sh
mv KAT ../../
cd ../../../
  • generate file descriptions required from NIST.
cd pqov_nist_submission/
ls -alR | python ../generate_filedescriptions_for_nist.py >> README
cd ../
  1. SUPERCOP:
python3 ./create_supercop_project.py

Instructions for testing/benchmarks

Type make

make

for generating 3 executables:

  1. sign_api-test : testing for API functions (crypto_keygen(), crypto_sign(), and crypto_verify()).
  2. sign_api-benchmark: reporting performance numbers for signature API functions.
  3. rec-sign-benchmark: reporting more detailed performance numbers for signature API functions. Number format: ''average /numbers of testing (1st quartile, median, 3rd quartile)''

Options for Parameters:

For compiling different parameters, we use the macros ( _OV256_112_44 / _OV256_184_72 / _OV256_244_96 / _OV16_160_64 ) to control the C source code.
The default setting is _OV256_112_44 defined in src/params.h.

The other option is to use our makefile:

  1. _OV16_160_64 :
make PARAM=1
  1. _OV256_112_44 :
make

or

make PARAM=3
  1. _OV256_184_72 :
make PARAM=4
  1. _OV256_244_96 :
make PARAM=5

Options for Variants:

For compiling different variants, we use the macros ( _OV_CLASSIC / _OV_PKC / _OV_PKC_SKC ) to control the C source code.
We use 4-rounds AES (macro: _4ROUND_AES_ ) as our alternative PRNG functions.
The default setting is _OV_CLASSIC and NO _4ROUND_AES_ defined in src/params.h.

The other option is to use our makefile:

  1. _OV_CLASSIC :
make

or

make VARIANT=1
  1. _OV_PKC :
make VARIANT=2
  1. _OV_PKC_SKC :
make VARIANT=3
  1. _OV_CLASSIC and _4ROUND_AES_ :
make VARIANT=4
  1. _OV_PKC and _4ROUND_AES_ :
make VARIANT=5
  1. _OV_PKC_SKC and _4ROUND_AES_ :
make VARIANT=6
  1. _OV256_244_96 and _OV_PKC :
make VARIANT=2 PARAM=5
  1. _OV256_244_96 and _OV_PKC_SKC and _4ROUND_AES_:
make VARIANT=6 PARAM=5

Optimizations for Architectures:

Reference Version:

The reference uses (1) source code in the directories: src/ , src/ref/, and
(2) directories for utilities of AES, SHAKE, and randombytes() : utils/ .
The default implementation for AES and SHAKE is from openssl library, controlled by the macro _UTILS_OPENSSL_ defined in src/config.h.

Or, use our makefile:

  1. Reference version (_OV256_112_44 and _OV_CLASSIC):
make
  1. Reference version, _OV256_244_96 , and _OV_PKC :
make VARIANT=2 PARAM=5

To turn on the option of 4-round AES, one need to turn on the macro _4ROUND_AES_ defined in src/params.h.

AVX2 Version:

The AVX2 option uses (1) source code in the directories: src/ , src/amd64 , src/ssse3 , src/avx2, and
(2) directories for utilities of AES, SHAKE, and randombytes() : utils/, utils/x86aesni .
(3) One stil need to turn on the macros _BLAS_AVX2_, _MUL_WITH_MULTAB_, _UTILS_AESNI_ defined in src/config.h to enable AVX2 optimization.

Or, use our makefile:

  1. AVX2 version (_OV256_112_44 and _OV_CLASSIC):
make PROJ=avx2
  1. AVX2 version, _OV256_184_72, and _OV_PKC:
make PROJ=avx2 PARAM=4 VARIANT=2

NEON Version:

The NEON option uses (1) source code in the src/ , src/amd64 , src/neon, and
(2) directories for utilities of AES, SHAKE, and randombytes() : utils/, ( utils/neon_aesinst (Armv8 AES instruction) or utils/neon_aes(NEON bitslice AES implemetation) ).
(3) One stil need to turn on the macros _BLAS_NEON_ , _UTILS_NEONAES_ defined in src/config.h to enable NEON optimization.
(4) Depending on the CPUs and parameters, one can choose to define the macro _MUL_WITH_MULTAB_ for GF multiplication with MUL tables. We suggest to turn on it for the _OV16_160_64 parameter.

Or, use our makefile:

  1. NEON version (_OV256_112_44 and _OV_CLASSIC):
make PROJ=neon
  1. Another example: NEON version, _OV16_160_64, and _OV_PKC_SKC:
make PROJ=neon PARAM=1 VARIANT=3

Notes for Apple Mac M1:

  1. We use
uname -s

to detect if running on Mac OS and

uname -m

to detect if is an Arm-based Mac. If uname -s returns Darwin and uname -m returns **arm64, we are running on an Arm-based Mac (e.g., Apple M1). The Makefile will then define the _APPLE_SILICON_ macro for enabling some optimization settings in the source code .
2. The program needs sudo to benchmark on Mac OS correctly.

Benchmarks

  1. AVX2 implementations on Intel(R) Xeon(R) CPU E3-1275 v5 @ 3.60GHz (Skylake), turbo boost off
Parameter Key-generation cycles signing cycles sign-opening cycles
OV(256,112,44)-classic 2931808.600000 /100 (2853642,2857092,2859224) 110277.188000 /1000 (109430,109622,109878) 80635.866000 /1000 (80072,80342,80600)
OV(256,112,44)-pkc 2859078.880000 /100 (2785474,2789330,2791828) 110253.122000 /1000 (109158,109328,109494) 236095.838000 /1000 (234744,235006,235286)
OV(256,112,44)-pkc-skc 2834123.540000 /100 (2760326,2763234,2765846) 1826365.954000 /1000 (1819310,1828230,1831096) 238663.938000 /1000 (237506,237858,238240)
OV(16,160,64)-classic 4921568.580000 /100 (4833306,4836380,4846596) 138213.176000 /1000 (128322,128972,129486) 60999.246000 /1000 (60102,60916,61654)
OV(16,160,64)-pkc 5025540.580000 /100 (4945166,4948572,4955944) 138822.820000 /1000 (130190,130760,131300) 284101.314000 /1000 (282100,282842,283512)
OV(16,160,64)-pkc-skc 4972336.360000 /100 (4890564,4893010,4901314) 2769027.316000 /1000 (2761582,2763582,2764786) 284273.088000 /1000 (282782,283508,284244)
OV(256,184,72)-classic 17559375.060000 /100 (17432816,17438370,17443646) 304260.334000 /1000 (302530,302728,302980) 283376.160000 /1000 (281970,282514,283138)
OV(256,184,72)-pkc 17821861.240000 /100 (17722482,17728338,17735482) 310536.096000 /1000 (308460,308660,308894) 969471.806000 /1000 (963150,963800,973744)
OV(256,184,72)-pkc-skc 16532104.860000 /100 (16388478,16397898,16428270) 10005746.800000 /1000 (9996566,10000580,10004534) 982622.468000 /1000 (978524,979494,988756)
OV(256,244,96)-classic 46898936.560000 /100 (46710814,46725606,46739184) 596184.514000 /1000 (590136,591144,593040) 532432.372000 /1000 (528784,530468,532674)
OV(256,244,96)-pkc 46564984.060000 /100 (46423660,46434404,46441558) 606133.394000 /1000 (601760,603690,606254) 2020072.774000 /1000 (2007396,2017472,2020518)
OV(256,244,96)-pkc-skc 43186383.160000 /100 (42970202,42985134,42989814) 22973040.002000 /1000 (22960476,22963090,22971836) 2052185.842000 /1000 (2045910,2055210,2057068)
  1. With 4RAES macro, AVX2 implementations on Intel(R) Xeon(R) CPU E3-1275 v5 @ 3.60GHz (Skylake), turbo boost off
Parameter Key-generation cycles signing cycles sign-opening cycles
OV(256,112,44)-classic 2788100.020000 /100 (2711106,2714046,2716664) 109323.014000 /1000 (108646,108772,108928) 84414.750000 /1000 (83752,84118,84486)
OV(256,112,44)-pkc 2774511.320000 /100 (2698144,2704742,2707566) 110352.320000 /1000 (109440,109592,109742) 150772.878000 /1000 (149582,149906,150322)
OV(256,112,44)-pkc-skc 2758741.860000 /100 (2677452,2681140,2684274) 1744422.388000 /1000 (1737764,1739984,1749784) 146755.230000 /1000 (145948,146234,146540)
OV(16,160,64)-classic 4898559.360000 /100 (4809900,4817534,4823358) 136764.208000 /1000 (128064,128634,128912) 60954.542000 /1000 (60086,60814,61534)
OV(16,160,64)-pkc 4710802.320000 /100 (4630236,4632826,4639630) 136005.974000 /1000 (127972,128494,128962) 154853.972000 /1000 (152650,153390,154048)
OV(16,160,64)-pkc-skc 4512099.040000 /100 (4429534,4433596,4439338) 2604217.046000 /1000 (2589812,2600024,2601376) 153601.262000 /1000 (152460,153210,153948)
OV(256,184,72)-classic 17449481.060000 /100 (17328874,17333908,17340364) 309767.334000 /1000 (307388,307614,307914) 256106.558000 /1000 (254822,255286,255788)
OV(256,184,72)-pkc 17105099.180000 /100 (17005484,17011172,17014440) 305674.254000 /1000 (303032,303270,303544) 556805.090000 /1000 (552544,553182,553978)
OV(256,184,72)-pkc-skc 16105202.440000 /100 (15978268,15987562,15995332) 9631360.430000 /1000 (9622160,9627218,9631908) 569367.662000 /1000 (566520,567272,568228)
OV(256,244,96)-classic 46285988.660000 /100 (46100288,46108280,46116962) 591777.890000 /1000 (586788,588118,589950) 488728.548000 /1000 (485554,487022,489436)
OV(256,244,96)-pkc 45672241.720000 /100 (45536460,45542444,45549188) 602212.234000 /1000 (597646,599140,601304) 1151503.604000 /1000 (1141012,1142958,1154002)
OV(256,244,96)-pkc-skc 42386976.720000 /100 (42170484,42173848,42177838) 22053399.364000 /1000 (22038466,22040178,22042776) 1109182.766000 /1000 (1102746,1107108,1114892)
  1. AVX2 implementations on Intel(R) Xeon(R) CPU E3-1230L v3 @ 1.80GHz (Haswell), turbo boost off
Parameter Key-generation cycles signing cycles sign-opening cycles
OV(256,112,44)-classic 3315723.800000 /100 (3240176,3242676,3244188) 116320.152000 /1000 (115140,115420,115732) 103265.632000 /1000 (102028,102680,103408)
OV(256,112,44)-pkc 3288035.600000 /100 (3219064,3223128,3225492) 121229.480000 /1000 (120036,120320,120624) 338660.444000 /1000 (333204,335392,341940)
OV(256,112,44)-pkc-skc 3346568.200000 /100 (3274912,3276280,3277736) 2235235.204000 /1000 (2228636,2231296,2239268) 325464.416000 /1000 (318496,321100,327660)
OV(16,160,64)-classic 6008126.120000 /100 (5912144,5917200,5979948) 150161.060000 /1000 (141388,141528,141700) 67395.796000 /1000 (66292,67104,67936)
OV(16,160,64)-pkc 5624280.800000 /100 (5552584,5555436,5558404) 153171.436000 /1000 (143516,143744,144076) 440026.152000 /1000 (432808,437800,443620)
OV(16,160,64)-pkc-skc 5817934.080000 /100 (5730604,5734164,5742728) 3595047.764000 /1000 (3580592,3583860,3592460) 412463.276000 /1000 (401908,406224,413932)
OV(256,184,72)-classic 22617807.480000 /100 (22514168,22520100,22526980) 347406.332000 /1000 (341928,345128,351788) 315812.760000 /1000 (312996,314184,315712)
OV(256,184,72)-pkc 22234811.520000 /100 (22144468,22151812,22159960) 340500.236000 /1000 (331968,336240,345044) 1360317.976000 /1000 (1336848,1346392,1360076)
OV(256,184,72)-pkc-skc 20605407.760000 /100 (20478108,20485784,20514248) 11646567.924000 /1000 (11619520,11634928,11664268) 1359607.536000 /1000 (1336972,1345384,1359676)
OV(256,244,96)-classic 62216904.560000 /100 (61985084,62045248,62092688) 658471.740000 /1000 (644872,656104,664052) 622844.844000 /1000 (617544,619956,629636)
OV(256,244,96)-pkc 60638533.600000 /100 (60498468,60507344,60518788) 682994.108000 /1000 (668836,680128,691604) 2881932.928000 /1000 (2849308,2865736,2887056)
OV(256,244,96)-pkc-skc 53791708.800000 /100 (53532124,53558376,53632068) 27579462.076000 /1000 (27561272,27570816,27580608) 2927626.404000 /1000 (2923780,2927724,2931188)
  1. Wit 4RAES macro, AVX2 implementations on Intel(R) Xeon(R) CPU E3-1230L v3 @ 1.80GHz (Haswell)), turbo boost off
Parameter Key-generation cycles signing cycles sign-opening cycles
OV(256,112,44)-classic 3197359.000000 /100 (3124800,3131316,3132628) 116444.432000 /1000 (115120,115384,115684) 100373.232000 /1000 (99328,99780,100280)
OV(256,112,44)-pkc 3134087.840000 /100 (3063016,3068424,3070876) 117795.876000 /1000 (116404,116728,117088) 205703.032000 /1000 (203716,204436,205228)
OV(256,112,44)-pkc-skc 3170180.400000 /100 (3100636,3105224,3107224) 2130139.168000 /1000 (2127276,2128032,2129020) 205284.040000 /1000 (203608,204304,205104)
OV(16,160,64)-classic 5521138.800000 /100 (5416848,5420396,5493636) 152597.948000 /1000 (140932,141092,141640) 66991.968000 /1000 (66072,66788,67460)
OV(16,160,64)-pkc 5875809.760000 /100 (5769672,5816588,5842760) 150188.296000 /1000 (141136,141284,141500) 214039.664000 /1000 (211800,212668,213612)
OV(16,160,64)-pkc-skc 5623301.120000 /100 (5547280,5553688,5560652) 3380973.664000 /1000 (3370844,3372588,3374492) 213757.460000 /1000 (212400,213288,214144)
OV(256,184,72)-classic 23236582.440000 /100 (23125476,23131956,23140240) 347469.496000 /1000 (342152,344832,351652) 318673.744000 /1000 (315944,317056,318548)
OV(256,184,72)-pkc 21979432.440000 /100 (21888220,21892612,21901100) 338280.552000 /1000 (331280,334304,342076) 796840.184000 /1000 (790072,792384,801432)
OV(256,184,72)-pkc-skc 20254070.280000 /100 (20126996,20134272,20140860) 11573916.496000 /1000 (11560136,11567888,11576844) 794183.220000 /1000 (789124,791636,799252)
OV(256,244,96)-classic 60128537.640000 /100 (59969524,59983216,60003800) 671851.944000 /1000 (653920,669800,682232) 582400.736000 /1000 (577224,579236,589896)
OV(256,244,96)-pkc 59107686.760000 /100 (58959784,58967004,58978848) 713369.264000 /1000 (696768,711676,731108) 1542857.684000 /1000 (1537872,1540068,1541836)
OV(256,244,96)-pkc-skc 52514123.080000 /100 (52271468,52285484,52326644) 26779378.156000 /1000 (26758440,26766088,26775260) 1539648.676000 /1000 (1538492,1540732,1542304)
  1. neon implementation on Apple M1
Parameter Key-generation cycles signing cycles sign-opening cycles
OV(256,112,44)-classic 1668551.680000 /100 (1666460,1666693,1666978) 60567.792000 /1000 (60361,60559,60745) 49345.703000 /1000 (49096,49257,49499)
OV(256,112,44)-pkc 1649390.280000 /100 (1646214,1646625,1647951) 60942.065000 /1000 (60345,60551,60741) 112718.061000 /1000 (112358,112557,112831)
OV(256,112,44)-pkc-skc 2006902.560000 /100 (1653965,1658789,1796804) 1063955.268000 /1000 (1060195,1060675,1067752) 114090.243000 /1000 (113184,113434,113877)
OV(16,160,64)-classic 3478392.360000 /100 (3351458,3353769,3357914) 98375.553000 /1000 (92175,92367,92628) 46423.170000 /1000 (45209,46366,47576)
OV(16,160,64)-pkc 3332315.920000 /100 (3327520,3329499,3334999) 98016.814000 /1000 (91947,92166,92412) 138854.858000 /1000 (136579,138842,141183)
OV(16,160,64)-pkc-skc 3352154.510000 /100 (3347101,3349631,3354143) 2104673.377000 /1000 (2095295,2095931,2103887) 139569.418000 /1000 (137326,139558,141779)
OV(256,184,72)-classic 9576229.570000 /100 (9566280,9573288,9580363) 186566.424000 /1000 (185274,185700,186148) 184712.717000 /1000 (184356,184615,184916)
OV(256,184,72)-pkc 9502006.270000 /100 (9497194,9500736,9502886) 192211.036000 /1000 (190080,190540,191046) 458979.041000 /1000 (458615,458891,459239)
OV(256,184,72)-pkc-skc 9518484.000000 /100 (9514398,9515409,9519332) 6257699.486000 /1000 (6251510,6259053,6259744) 459518.283000 /1000 (458296,458693,459306)
OV(256,244,96)-classic 28246451.690000 /100 (28219453,28228123,28243547) 388967.671000 /1000 (380382,393047,395551) 371960.531000 /1000 (371338,371702,372198)
OV(256,244,96)-pkc 27634490.030000 /100 (26751886,28143066,28156421) 398596.867000 /1000 (395068,395827,397742) 1006930.869000 /1000 (1006085,1006448,1006925)
OV(256,244,96)-pkc-skc 26923929.260000 /100 (26662077,26668781,26718313) 16056432.885000 /1000 (16047195,16051661,16055396) 1029977.949000 /1000 (1011654,1034885,1037780)
  1. neon implementation on Apple M1, defining 4RAES macro
Parameter Key-generation cycles signing cycles sign-opening cycles
OV(256,112,44)-classic 1638710.990000 /100 (1636917,1637123,1637301) 60887.892000 /1000 (60433,60626,60788) 49259.339000 /1000 (49008,49162,49416)
OV(256,112,44)-pkc 1617998.490000 /100 (1616221,1616346,1616458) 60938.352000 /1000 (60406,60606,60797) 82672.647000 /1000 (82378,82587,82882)
OV(256,112,44)-pkc-skc 1624572.420000 /100 (1621942,1622300,1622852) 1032452.294000 /1000 (1030104,1030357,1030938) 83443.233000 /1000 (83183,83359,83601)
OV(16,160,64)-classic 3319456.020000 /100 (3314186,3318074,3319959) 97797.817000 /1000 (92028,92240,92467) 46291.899000 /1000 (44979,46205,47461)
OV(16,160,64)-pkc 3292346.000000 /100 (3286803,3290909,3293951) 97779.375000 /1000 (92015,92210,92455) 97954.083000 /1000 (96216,97835,99629)
OV(16,160,64)-pkc-skc 3315055.240000 /100 (3311437,3313696,3316969) 2061408.996000 /1000 (2051077,2051666,2059528) 97945.186000 /1000 (96209,97842,99527)
OV(256,184,72)-classic 9449190.310000 /100 (9444228,9446517,9451209) 187648.202000 /1000 (185977,186408,186826) 184563.681000 /1000 (184198,184468,184781)
OV(256,184,72)-pkc 9379581.140000 /100 (9375090,9376139,9379688) 187703.953000 /1000 (185236,185666,186122) 326970.536000 /1000 (326382,326898,327402)
OV(256,184,72)-pkc-skc 9355994.830000 /100 (9349825,9350857,9355170) 6136271.665000 /1000 (6129152,6136255,6137445) 327715.097000 /1000 (327094,327438,327802)
OV(256,244,96)-classic 28023508.630000 /100 (28011865,28015965,28023282) 390875.404000 /1000 (381760,383246,396969) 371866.895000 /1000 (371325,371685,372115)
OV(256,244,96)-pkc 27723770.550000 /100 (27896749,27900801,27907386) 400366.624000 /1000 (396164,396916,398035) 700296.918000 /1000 (699826,700126,700498)
OV(256,244,96)-pkc-skc 26806866.590000 /100 (26460078,26463880,26810831) 15748054.154000 /1000 (15738043,15739151,15746384) 712198.299000 /1000 (700283,702763,723184)
  1. neon implementation on ARM Cortex-A72(v8) @ 1.8GHz (Raspberry pi 4, aarch64, no aes extension)
Parameter Key-generation cycles signing cycles sign-opening cycles
OV(256,112,44)-classic 11447062.010000 /100 (11176918,11184344,11208819) 244077.253000 /1000 (242099,242940,243760) 147341.156000 /1000 (146081,146685,147470)
OV(256,112,44)-pkc 11290613.720000 /100 (11117635,11131516,11146401) 268508.709000 /1000 (260695,264781,268529) 4125319.717000 /1000 (4109388,4126521,4133232)
OV(256,112,44)-pkc-skc 11302040.950000 /100 (11129025,11136554,11146000) 7882870.765000 /1000 (7859526,7862072,7873376) 4109383.312000 /1000 (4098748,4108895,4113446)
OV(16,160,64)-classic 28942157.280000 /100 (28591696,28639886,28690325) 562007.368000 /1000 (527768,532316,539351) 159074.915000 /1000 (153290,157286,162604)
OV(16,160,64)-pkc 28578965.250000 /100 (28353429,28367829,28395352) 701990.586000 /1000 (654270,662720,673771) 5686087.255000 /1000 (5589174,5692720,5801705)
OV(16,160,64)-pkc-skc 26649746.810000 /100 (26417795,26434420,26474485) 16516600.609000 /1000 (16461753,16471394,16492783) 5648442.693000 /1000 (5553974,5655593,5749768)
OV(256,184,72)-classic 71123246.520000 /100 (70429238,70654623,70857391) 1652919.626000 /1000 (1626906,1634516,1647293) 672599.794000 /1000 (658949,663105,679198)
OV(256,184,72)-pkc 71682613.230000 /100 (70733132,71626169,72017098) 1815652.921000 /1000 (1790287,1804480,1820980) 19197873.688000 /1000 (19142028,19179875,19227303)
OV(256,184,72)-pkc-skc 66616709.310000 /100 (66019791,66149624,66303014) 44553190.786000 /1000 (44450846,44498639,44564996) 19306855.111000 /1000 (19261945,19291968,19329401)
OV(256,244,96)-classic 318787586.150000 /100 (316810836,318633305,320124093) 3649125.260000 /1000 (3558106,3625405,3690246) 1466174.201000 /1000 (1443974,1458819,1467210)
OV(256,244,96)-pkc 318508215.390000 /100 (317644827,318012194,318604575) 3755366.045000 /1000 (3674403,3743637,3806855) 44085496.168000 /1000 (43990165,44063727,44137498)
OV(256,244,96)-pkc-skc 325220761.510000 /100 (324439922,324840210,325436696) 113243118.617000 /1000 (113098541,113198818,113320609) 43958579.630000 /1000 (43843916,43930901,44034623)
  1. neon implementation on ARM Cortex-A72(v8) @ 1.8GHz, defining 4RAES macro (Raspberry pi 4, aarch64, no aes extension)
Parameter Key-generation cycles signing cycles sign-opening cycles
OV(256,112,44)-classic 9175266.770000 /100 (8980668,8995825,9016237) 255004.748000 /1000 (251929,253248,255175) 151370.315000 /1000 (149625,150556,151742)
OV(256,112,44)-pkc 9070667.780000 /100 (8909533,8919141,8929522) 264063.116000 /1000 (257112,260404,267297) 1919274.618000 /1000 (1911401,1913378,1925387)
OV(256,112,44)-pkc-skc 8849272.870000 /100 (8675587,8685240,8696074) 5670543.699000 /1000 (5663482,5668785,5672108) 1909559.255000 /1000 (1904604,1906022,1915039)
OV(16,160,64)-classic 25527561.490000 /100 (25278440,25311746,25343235) 584422.089000 /1000 (542240,548013,559998) 162905.468000 /1000 (158084,160823,164080)
OV(16,160,64)-pkc 25310463.770000 /100 (25100334,25109983,25133808) 630704.279000 /1000 (580735,602733,620719) 2636918.385000 /1000 (2593373,2642800,2688268)
OV(16,160,64)-pkc-skc 23396759.850000 /100 (23188064,23202073,23222361) 13274255.404000 /1000 (13219675,13227111,13241865) 2597749.577000 /1000 (2552563,2599386,2647327)
OV(256,184,72)-classic 58570635.020000 /100 (58142022,58276178,58497620) 1692353.001000 /1000 (1666813,1675403,1688759) 662787.823000 /1000 (649224,651694,670407)
OV(256,184,72)-pkc 61401543.460000 /100 (60754673,60927075,61336584) 1910368.830000 /1000 (1884257,1896182,1931615) 9260012.671000 /1000 (9218039,9242424,9273862)
OV(256,184,72)-pkc-skc 58148223.570000 /100 (57442112,57810441,58113698) 37277120.204000 /1000 (37187430,37228110,37283143) 9621879.815000 /1000 (9598709,9615982,9642439)
OV(256,244,96)-classic 302021507.710000 /100 (301149153,301462055,301956422) 3387819.988000 /1000 (3314815,3374750,3446791) 1459711.739000 /1000 (1440325,1454040,1461334)
OV(256,244,96)-pkc 297718990.680000 /100 (296781542,297219084,297722105) 3611743.901000 /1000 (3541339,3604513,3666962) 21085700.979000 /1000 (20992986,21091068,21156680)
OV(256,244,96)-pkc-skc 302770118.450000 /100 (302179944,302614530,303056537) 91120675.747000 /1000 (91024732,91100712,91171443) 21338963.601000 /1000 (21306637,21347876,21383671)
  1. AVX2 implementation on Intel(R) Xeon(R) Platinum 8488C (Sapphire Rapids), turbo boost off
Parameter Key-generation cycles signing cycles sign-opening cycles
OV(256,112,44)-classic 2544873.160000 /100 (2481716,2487484,2493168) 78330.020000 /1000 (77304,77506,77730) 73855.098000 /1000 (72058,73358,75656)
OV(256,112,44)-pkc 2519331.080000 /100 (2466300,2472242,2474902) 78391.284000 /1000 (77396,77550,77768) 163259.166000 /1000 (158532,160086,162382)
OV(256,112,44)-pkc-skc 2537184.520000 /100 (2477574,2485266,2488612) 1486869.330000 /1000 (1469906,1473552,1478104) 164745.564000 /1000 (162600,163066,163608)
OV(16,160,64)-classic 4471144.220000 /100 (4413036,4415672,4418148) 88969.554000 /1000 (82972,83114,83298) 54974.936000 /1000 (54084,54936,55752)
OV(16,160,64)-pkc 4441178.580000 /100 (4386008,4389066,4392930) 88304.272000 /1000 (83054,83210,83444) 169416.068000 /1000 (167092,167868,168834)
OV(16,160,64)-pkc-skc 4458126.940000 /100 (4403712,4406518,4408460) 2286549.448000 /1000 (2241550,2245916,2319150) 170770.898000 /1000 (169048,169872,170832)
OV(256,184,72)-classic 15114220.460000 /100 (15020588,15035550,15056184) 272469.888000 /1000 (270060,270462,270922) 240144.456000 /1000 (238656,239322,240234)
OV(256,184,72)-pkc 15001645.000000 /100 (14928060,14937048,14953080) 285483.704000 /1000 (275448,276766,286634) 656857.510000 /1000 (646568,647868,653818)
OV(256,184,72)-pkc-skc 13977944.900000 /100 (13877976,13888072,13907250) 8254957.856000 /1000 (8021736,8099638,8474214) 642636.482000 /1000 (636642,640266,643852)
OV(256,244,96)-classic 40004023.940000 /100 (39843178,39891484,39930362) 533760.148000 /1000 (526294,527014,528788) 425266.590000 /1000 (422360,423164,424538)
OV(256,244,96)-pkc 39849783.000000 /100 (39697618,39754340,39804850) 530143.412000 /1000 (526072,526664,531516) 1369255.742000 /1000 (1356742,1362146,1364226)
OV(256,244,96)-pkc-skc 35485029.560000 /100 (35293200,35316226,35356878) 19155934.380000 /1000 (18877278,19198672,19426756) 1411809.260000 /1000 (1403122,1409216,1410954)
  1. GFNI implementation on Intel(R) Xeon(R) Platinum 8488C (Sapphire Rapids), turbo boost off
Parameter Key-generation cycles signing cycles sign-opening cycles
OV(256,112,44)-classic 1430352.760000 /100 (1376736,1379602,1385166) 47937.976000 /1000 (47394,47598,47838) 66574.684000 /1000 (64998,65724,66548)
OV(256,112,44)-pkc 1407633.840000 /100 (1356494,1358874,1362822) 51139.860000 /1000 (50586,50756,50960) 159914.584000 /1000 (158338,159204,160332)
OV(256,112,44)-pkc-skc 1399613.240000 /100 (1346560,1351368,1356672) 1001049.504000 /1000 (994894,997460,1000820) 161422.836000 /1000 (160546,161266,161994)
OV(16,160,64)-classic 2527482.520000 /100 (2468236,2476514,2478996) 73928.714000 /1000 (69052,69288,69736) 53325.744000 /1000 (52414,53240,54098)
OV(16,160,64)-pkc 2481718.780000 /100 (2426816,2430498,2434026) 72746.712000 /1000 (68378,68594,68958) 186813.764000 /1000 (184988,186322,187748)
OV(16,160,64)-pkc-skc 2489545.340000 /100 (2433042,2436932,2443962) 1559088.538000 /1000 (1550204,1552506,1555938) 172026.962000 /1000 (170446,171464,172728)
OV(256,184,72)-classic 7888327.720000 /100 (7806650,7812578,7821122) 171364.298000 /1000 (168784,169746,170792) 213939.618000 /1000 (210830,211558,212808)
OV(256,184,72)-pkc 7758511.620000 /100 (7686588,7695088,7700546) 202006.160000 /1000 (183030,189672,194574) 605569.330000 /1000 (599434,600482,606212)
OV(256,184,72)-pkc-skc 7112874.440000 /100 (7026480,7036138,7042682) 5062597.340000 /1000 (4994656,5025692,5145854) 606889.082000 /1000 (604682,606226,608158)
OV(256,244,96)-classic 18832094.320000 /100 (18715262,18731834,18755816) 407860.700000 /1000 (403654,404746,407478) 428129.034000 /1000 (426006,426768,428006)
OV(256,244,96)-pkc 18438466.020000 /100 (18334488,18352892,18379758) 406308.242000 /1000 (403200,403828,405356) 1331947.328000 /1000 (1322650,1328298,1329880)
OV(256,244,96)-pkc-skc 15527842.120000 /100 (15366546,15396018,15426532) 8455745.432000 /1000 (8183678,8351154,8738324) 1339932.162000 /1000 (1335292,1340416,1342484)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages