Skip to the content.

Structure

This folder is structured as follows:

Assembly files

All those assembly files have been generated by CryptOpt on ten different CPUs.

The structure is fiat_<CURVE>_<METHOD>/seed<SEED>_ratio<RATIO>.asm. Every folder contains optimized and proven correct implementations of the respective function using the CryptOpt Framework. The <CURVE> is one of Fiat Cryptography’s main supported curves: curve25519 curve25519_solinas p224 p256 p384 p434 p448_solinas p521 poly1305 secp256k1_dettman secp256k1_montgomery The <METHOD> is one of the respective multiply or square (carry) if it is based on the solinas primes.

The <SEED> value is the seed that CryptOpt was called with to create this file, the <RATIO> is an indication of the measured performance during optimization. Specifically, a <RATIO>-value of abbbb corresponds to a performance ratio of a.bbbbx compared to the assembly that clang-15 -O3 -march=native -mtune=native would have produces on the system. Hence, the higher the value the faster the code. Every asm file contains a footer comment with some metadata on which CPU it was produced.

All assembly files use the Linux System-V ABI and require the CPU flags -adx and -bmi2 (Supported at least from Intel Cores since the 6th generation (Skylake), released in 2016). The files are written using Intel assembly syntax.

~~~~~~~~~~~Geometic Means of cycles of each impl over 10 archs (to copy into your lib) ~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~fiat_p224_mul~~~~~~~~~~~~~~~~~~~ 25112.3519 – seed0000000230781590_ratio16447.asm 25147.1308 – seed0000000035941855_ratio15715.asm 25792.7671 – seed0000000884745008_ratio16044.asm 25873.0661 – seed0000000233187636_ratio15310.asm 26008.8013 – seed0000000713537315_ratio14658.asm 26020.6837 – seed0000000190561377_ratio16606.asm 26169.2856 – seed0000000789123944_ratio15959.asm 26213.4999 – seed0000000797595915_ratio15768.asm 26218.6936 – seed0000000659181642_ratio14722.asm 26336.4484 – seed0000000254201214_ratio15889.asm ~~~~~~~~~~~~~~~~~~~fiat_p256_mul~~~~~~~~~~~~~~~~~~~ 22946.0391 – seed0000000327800118_ratio16285.asm 23039.4228 – seed0000000002746408_ratio17100.asm 23208.9795 – seed0000000304627183_ratio16225.asm 23546.9118 – seed0000000176686913_ratio17527.asm 23693.1370 – seed0000000030021278_ratio16319.asm 23845.2269 – seed0000000475321601_ratio15867.asm 23858.7084 – seed0000000787361747_ratio16115.asm 24036.8225 – seed0000000322905724_ratio16379.asm 24062.0615 – seed0000000497354156_ratio16065.asm 24086.1679 – seed0000000078046135_ratio17247.asm ~~~~~~~~~~~~~~~~~~~fiat_poly1305_carry_mul~~~~~~~~~~~~~~~~~~~ 9387.6967 – seed0000000111879398_ratio12149.asm 9432.6362 – seed2092515808618690_ratio12222.asm 9610.4697 – seed3840524294645365_ratio11162.asm 9621.4541 – seed0000000022179739_ratio12188.asm 9636.0483 – seed0573130910005998_ratio12211.asm 9693.5590 – seed1576779209975026_ratio12136.asm 9714.2755 – seed4073650571830588_ratio11877.asm 9890.0780 – seed3164456322877334_ratio10566.asm 9975.9784 – seed0874383228537197_ratio11378.asm 10113.4455 – seed0000000730763325_ratio10970.asm ~~~~~~~~~~~~~~~~~~~fiat_p448_solinas_carry_square~~~~~~~~~~~~~~~~~~~ 38122.7182 – seed0000000916159791_ratio10871.asm 38342.6845 – seed0000000907335901_ratio10934.asm 38362.7624 – seed0000000815670891_ratio10776.asm 38781.0677 – seed0000000770508884_ratio10738.asm 38837.9680 – seed0000000263746695_ratio10769.asm 38968.5368 – seed0000000774799711_ratio11436.asm 38975.1292 – seed0000000205064604_ratio10826.asm 38977.5958 – seed0000000300876850_ratio10449.asm 39025.2459 – seed0000000959319738_ratio10393.asm 39069.3716 – seed0000000896404879_ratio10524.asm ~~~~~~~~~~~~~~~~~~~fiat_secp256k1_dettman_mul~~~~~~~~~~~~~~~~~~~ 23774.0878 – seed0000000764585948_ratio11463.asm 23788.5990 – seed0000000754074063_ratio11508.asm 24221.9895 – seed0000000777140409_ratio11402.asm 24674.1064 – seed0000000117828100_ratio11094.asm 24713.4518 – seed0000000513775597_ratio10809.asm 24972.7904 – seed0000000602977451_ratio11350.asm 25053.4382 – seed0000000031736312_ratio11350.asm 25094.3252 – seed0000000878093032_ratio11037.asm 25258.7113 – seed0000000058770487_ratio10592.asm 25266.0068 – seed0000000031436027_ratio10592.asm ~~~~~~~~~~~~~~~~~~~fiat_secp256k1_dettman_square~~~~~~~~~~~~~~~~~~~ 18850.2703 – seed0000000393571661_ratio11258.asm 19038.6043 – seed0000000679347858_ratio11028.asm 19304.2764 – seed0000000418162066_ratio11252.asm 19462.1175 – seed0000000670971280_ratio11066.asm 19484.5966 – seed0000000675745200_ratio10833.asm 19611.4064 – seed0000000492908844_ratio10835.asm 19682.7685 – seed0000000845876874_ratio09989.asm 19754.8447 – seed0000000910645671_ratio10490.asm 19775.5481 – seed0000000814019596_ratio10889.asm 19896.3987 – seed0000000915489316_ratio10016.asm ~~~~~~~~~~~~~~~~~~~fiat_p434_mul~~~~~~~~~~~~~~~~~~~ 76001.5329 – seed0000000520612228_ratio17727.asm 76186.4869 – seed0000000952646158_ratio18231.asm 76920.2936 – seed0000000957195289_ratio18834.asm 77695.5821 – seed0000000961713176_ratio17798.asm 78585.0413 – seed0000000492212526_ratio19146.asm 79184.3068 – seed0000000862806124_ratio17455.asm 81216.6482 – seed0000000504879121_ratio19015.asm 81522.1156 – seed0000000552077394_ratio16208.asm 82108.0557 – seed0000000852485200_ratio16911.asm 83327.2418 – seed0000000434205913_ratio16767.asm ~~~~~~~~~~~~~~~~~~~fiat_curve25519_carry_mul~~~~~~~~~~~~~~~~~~~ 20659.2454 – seed0000000221072601_ratio12557.asm 20984.3987 – seed0000000800695177_ratio12068.asm 21066.1098 – seed0000000879783339_ratio12750.asm 21199.2470 – seed0000000857960681_ratio12531.asm 21202.5392 – seed0000000726041533_ratio12682.asm 21203.5860 – seed0000000164614668_ratio12098.asm 21214.1997 – seed0000000682011160_ratio11713.asm 21381.1549 – seed0000000785921685_ratio12135.asm 21435.2993 – seed0000000767513593_ratio12108.asm 21519.9361 – seed0000000741567926_ratio12480.asm ~~~~~~~~~~~~~~~~~~~fiat_p224_square~~~~~~~~~~~~~~~~~~~ 25226.0019 – seed0000000916067212_ratio14016.asm 25272.6138 – seed0000000832586119_ratio14347.asm 25416.2707 – seed0000000756666782_ratio14345.asm 25495.1046 – seed0000000065522631_ratio14075.asm 25619.9646 – seed0000000385297777_ratio14178.asm 25845.2698 – seed0000000638333753_ratio14731.asm 25880.0445 – seed0000000055780533_ratio13991.asm 26009.9470 – seed0000000425289864_ratio14152.asm 26124.3835 – seed0000000727873578_ratio13921.asm 26150.9470 – seed0000000524759647_ratio14350.asm ~~~~~~~~~~~~~~~~~~~fiat_p384_mul~~~~~~~~~~~~~~~~~~~ 55821.5615 – seed0000000671992404_ratio17232.asm 55837.9975 – seed0000000761560947_ratio15811.asm 55915.0450 – seed0000000181026480_ratio16313.asm 55925.3724 – seed0000000692953721_ratio16777.asm 57396.2502 – seed0000000201623742_ratio15205.asm 57449.1894 – seed0000000728228858_ratio14834.asm 57765.9770 – seed0000000675766294_ratio16188.asm 57779.2796 – seed0000000213732304_ratio16049.asm 57968.8276 – seed0000000368815009_ratio15659.asm 59263.3898 – seed0000000625674740_ratio15520.asm ~~~~~~~~~~~~~~~~~~~fiat_curve25519_solinas_square~~~~~~~~~~~~~~~~~~~ 12380.6899 – seed0000000194085448_ratio15409.asm 12485.1253 – seed0000000860601667_ratio13294.asm 12521.9329 – seed0000000165326008_ratio14631.asm 12574.8684 – seed0000000835690746_ratio13642.asm 12593.3552 – seed0000000827921337_ratio14783.asm 12640.2558 – seed0000000872384643_ratio14262.asm 12640.9389 – seed0000000859941493_ratio14120.asm 12694.5447 – seed0000000874470044_ratio12927.asm 12775.8633 – seed0000000479142102_ratio13441.asm 12777.6899 – seed0000000832095084_ratio15007.asm ~~~~~~~~~~~~~~~~~~~fiat_p256_square~~~~~~~~~~~~~~~~~~~ 22701.4904 – seed0000000560870535_ratio15522.asm 23049.4691 – seed0000000124692692_ratio16765.asm 23148.7840 – seed0000000087551558_ratio16199.asm 23234.7306 – seed0000000203222751_ratio15388.asm 23444.6866 – seed0000000489460953_ratio14628.asm 23473.1494 – seed0000000755558814_ratio16757.asm 23477.0533 – seed0000000809815865_ratio17019.asm 23512.0893 – seed0000000089416875_ratio16416.asm 23701.5991 – seed0000000107645793_ratio15709.asm 23809.5119 – seed0000000400202840_ratio15221.asm ~~~~~~~~~~~~~~~~~~~fiat_p448_solinas_carry_mul~~~~~~~~~~~~~~~~~~~ 55253.1573 – seed0000000840933824_ratio13296.asm 56198.1065 – seed0000000527308980_ratio12941.asm 56300.0141 – seed0000000549311738_ratio13288.asm 56518.6217 – seed0000000871755297_ratio12576.asm 56834.8703 – seed0000000212886965_ratio12373.asm 57194.8084 – seed0000000538634415_ratio12378.asm 57358.1033 – seed0000000190660971_ratio12325.asm 58406.2833 – seed0000000170510776_ratio12522.asm 58754.5952 – seed0000000744087219_ratio12191.asm 59057.8753 – seed0000000518067523_ratio11496.asm ~~~~~~~~~~~~~~~~~~~fiat_p384_square~~~~~~~~~~~~~~~~~~~ 55726.4583 – seed0000000274547940_ratio16784.asm 56407.0624 – seed0000000270527998_ratio16131.asm 56897.7620 – seed0000000048287391_ratio14792.asm 56948.6332 – seed0000000497150072_ratio14874.asm 56959.6876 – seed0000000735984944_ratio15521.asm 56988.3967 – seed0000000266777140_ratio15734.asm 57105.6746 – seed0000000957351372_ratio15209.asm 57117.1611 – seed0000000981147748_ratio15061.asm 57762.7663 – seed0000000457892130_ratio14853.asm 57936.9541 – seed0000000466859061_ratio15114.asm ~~~~~~~~~~~~~~~~~~~fiat_poly1305_carry_square~~~~~~~~~~~~~~~~~~~ 7613.3953 – seed0000000053624325_ratio12095.asm 7642.0311 – seed0024457231423267_ratio10957.asm 7718.2563 – seed3372161002404255_ratio11912.asm 7744.4783 – seed0167852095821801_ratio10967.asm 7746.6953 – seed0000000048663337_ratio12049.asm 7777.2097 – seed1547509449887630_ratio12028.asm 7790.5204 – seed0000000482050298_ratio11130.asm 7814.1661 – seed0220574641222642_ratio11869.asm 7889.7565 – seed1423064809924844_ratio12077.asm 8128.7257 – seed2529170448241788_ratio10324.asm ~~~~~~~~~~~~~~~~~~~fiat_p521_carry_mul~~~~~~~~~~~~~~~~~~~ 62017.8011 – seed0000000227334668_ratio13683.asm 62759.0233 – seed0000000218099951_ratio13778.asm 62795.7849 – seed0000000618562372_ratio13969.asm 63441.5488 – seed0000000068483547_ratio13662.asm 64071.1390 – seed0000000351333954_ratio12294.asm 64313.9885 – seed0000000640227164_ratio13223.asm 64763.6920 – seed0000000213937139_ratio13741.asm 64764.8577 – seed0000000630079487_ratio13595.asm 65137.4131 – seed0000000261526367_ratio13624.asm 65321.6756 – seed0000000256360227_ratio12393.asm ~~~~~~~~~~~~~~~~~~~fiat_p434_square~~~~~~~~~~~~~~~~~~~ 71951.2926 – seed0000000208775533_ratio18549.asm 77479.8548 – seed0000000435461898_ratio17687.asm 77885.0865 – seed0000000445297389_ratio17770.asm 77996.4022 – seed0000000192159417_ratio17760.asm 78244.9282 – seed0000000933071736_ratio16974.asm 79153.4367 – seed0000000177622163_ratio17402.asm 79322.7587 – seed0000000900355537_ratio16741.asm 79903.0843 – seed0000000371239834_ratio18442.asm 83863.3797 – seed0000000875343212_ratio16291.asm 85554.1462 – seed0000000354278994_ratio16606.asm ~~~~~~~~~~~~~~~~~~~fiat_secp256k1_montgomery_square~~~~~~~~~~~~~~~~~~~ 24680.5288 – seed0000000529382333_ratio18803.asm 24911.9800 – seed0000000710707594_ratio16905.asm 24942.5072 – seed0000000779869803_ratio17348.asm 25000.4499 – seed0000000104014335_ratio16619.asm 25244.6686 – seed0000000099351455_ratio16646.asm 25339.0073 – seed0000000085777171_ratio16625.asm 25489.4089 – seed0000000420429112_ratio16654.asm 25682.3169 – seed0000000820099107_ratio16813.asm 25715.7658 – seed0000000517225990_ratio17679.asm 25730.5211 – seed0000000349755458_ratio17038.asm ~~~~~~~~~~~~~~~~~~~fiat_curve25519_solinas_mul~~~~~~~~~~~~~~~~~~~ 16439.8722 – seed0000000511010538_ratio17508.asm 16596.1689 – seed0000000966911541_ratio15211.asm 16622.5135 – seed0000000308463864_ratio13682.asm 16648.0798 – seed0000000356490115_ratio18494.asm 16691.0942 – seed0000000954477777_ratio14153.asm 16699.9773 – seed0000000184220986_ratio14106.asm 16768.7382 – seed0000000151532088_ratio14145.asm 16791.1490 – seed0000000275534021_ratio16928.asm 16813.4581 – seed0000000910285772_ratio17411.asm 16850.9880 – seed0000000959481953_ratio14098.asm ~~~~~~~~~~~~~~~~~~~fiat_secp256k1_montgomery_mul~~~~~~~~~~~~~~~~~~~ 24688.7089 – seed0000000296317198_ratio17262.asm 25034.8809 – seed0000000716402322_ratio17042.asm 25270.0010 – seed0000000499107423_ratio17485.asm 25341.0576 – seed0000000866960015_ratio18630.asm 25539.0270 – seed0000000618348495_ratio17036.asm 25563.0753 – seed0000000763169037_ratio18998.asm 25647.0350 – seed0000000513650667_ratio17495.asm 25684.5690 – seed0000000307664977_ratio17812.asm 25692.3282 – seed0000000241130509_ratio18375.asm 25823.1236 – seed0000000605119269_ratio17367.asm ~~~~~~~~~~~~~~~~~~~fiat_p521_carry_square~~~~~~~~~~~~~~~~~~~ 39933.5684 – seed0000000234238998_ratio15002.asm 40181.1817 – seed0000000702884021_ratio14542.asm 40369.7156 – seed0000000882458724_ratio15398.asm 40453.8272 – seed0000000823465095_ratio13019.asm 40584.3445 – seed0000000648790289_ratio14634.asm 40593.3113 – seed0000000875801491_ratio14530.asm 40671.2566 – seed0000000813914803_ratio12975.asm 40816.6980 – seed0000000756025198_ratio12445.asm 40951.8564 – seed0000000244944536_ratio14852.asm 41103.9684 – seed0000000632440548_ratio14173.asm ~~~~~~~~~~~~~~~~~~~fiat_curve25519_carry_square~~~~~~~~~~~~~~~~~~~ 15022.8062 – seed0000000623063394_ratio11752.asm 15256.9052 – seed0000000624291849_ratio12217.asm 15268.2585 – seed0000000602835153_ratio11693.asm 15279.3464 – seed0000000553108538_ratio12619.asm 15342.6751 – seed0000000634178982_ratio11788.asm 15542.9888 – seed0000000595743874_ratio12066.asm 15544.3075 – seed0000000580196903_ratio12524.asm 15852.4394 – seed0000000995093600_ratio12993.asm 15856.9433 – seed0000000865063170_ratio12182.asm 15884.1621 – seed0000000588914417_ratio12019.asm