This project contains the reference and optimized implementations of the oil and vinegar (OV) signature system.
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.
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 |
- src : Source code.
- utils : utilities for AES, SHAKE, and PRNGs. The default setting calls openssl library.
- unit_tests : unit testers.
- 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 ../
- SUPERCOP:
python3 ./create_supercop_project.py
Type make
make
for generating 3 executables:
- sign_api-test : testing for API functions (crypto_keygen(), crypto_sign(), and crypto_verify()).
- sign_api-benchmark: reporting performance numbers for signature API functions.
- rec-sign-benchmark: reporting more detailed performance numbers for signature API functions. Number format: ''average /numbers of testing (1st quartile, median, 3rd quartile)''
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:
- _OV16_160_64 :
make PARAM=1
- _OV256_112_44 :
make
or
make PARAM=3
- _OV256_184_72 :
make PARAM=4
- _OV256_244_96 :
make PARAM=5
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:
- _OV_CLASSIC :
make
or
make VARIANT=1
- _OV_PKC :
make VARIANT=2
- _OV_PKC_SKC :
make VARIANT=3
- _OV_CLASSIC and _4ROUND_AES_ :
make VARIANT=4
- _OV_PKC and _4ROUND_AES_ :
make VARIANT=5
- _OV_PKC_SKC and _4ROUND_AES_ :
make VARIANT=6
- _OV256_244_96 and _OV_PKC :
make VARIANT=2 PARAM=5
- _OV256_244_96 and _OV_PKC_SKC and _4ROUND_AES_:
make VARIANT=6 PARAM=5
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:
- Reference version (_OV256_112_44 and _OV_CLASSIC):
make
- 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.
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:
- AVX2 version (_OV256_112_44 and _OV_CLASSIC):
make PROJ=avx2
- AVX2 version, _OV256_184_72, and _OV_PKC:
make PROJ=avx2 PARAM=4 VARIANT=2
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:
- NEON version (_OV256_112_44 and _OV_CLASSIC):
make PROJ=neon
- Another example: NEON version, _OV16_160_64, and _OV_PKC_SKC:
make PROJ=neon PARAM=1 VARIANT=3
Notes for Apple Mac M1:
- 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.
- 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) |
- 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) |
- 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) |
- 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) |
- 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) |
- 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) |
- 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) |
- 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) |
- 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) |
- 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) |