#include "openssl/bn.h" main() { BIGNUM *a; BIGNUM *b; BIGNUM *c; BN_CTX *t; t = BN_CTX_new(); BN_CTX_init(t); a = BN_new(); b = BN_new(); c = BN_new(); BN_dec2bn(&a,"317213509"); BN_dec2bn(&b,"990371647"); BN_mul(c,a,b,t); printf("%s\n",BN_bn2dec(c)); }
I compiled OpenSSL 0.9.6c on thoth on 2002.02.23:
lynx -source www.openssl.org/source/openssl-0.9.6c.tar.gz > openssl-0.9.6c.tar.gz gunzip < openssl-0.9.6c.tar.gz | tar -xf - cd openssl-0.9.6c ./config make # about 120 seconds lynx -source cr.yp.to/speed/mult/bn-bench.c > bench.c gcc -O3 -o bench bench.c libcrypto.a ./bench > bench.out # about 340 secondsResults:
1: 5221 254 200 199 200 200 2: 446 212 199 199 186 186 3: 429 186 186 186 186 186 4: 441 186 186 186 186 186 5: 415 186 186 186 186 186 6: 414 186 186 186 186 186 7: 442 186 186 186 186 186 8: 413 186 186 186 186 186 10: 441 212 199 186 186 186 12: 423 212 186 186 186 186 14: 455 199 186 186 186 186 16: 417 199 186 186 186 186 20: 474 193 197 180 193 180 24: 475 193 180 180 180 180 28: 457 193 180 180 180 180 32: 399 180 180 180 180 180 40: 2505 280 244 231 231 231 48: 484 254 231 231 231 231 56: 460 274 264 234 224 224 64: 458 257 224 224 224 224 80: 1170 329 307 284 284 284 96: 561 341 341 278 278 278 112: 1705 398 373 352 352 352 128: 1295 376 360 347 347 347 160: 1357 457 457 447 447 447 192: 1449 535 535 535 535 535 224: 1534 642 642 642 642 642 256: 4753 482 442 442 425 425 320: 2759 1135 1084 1064 1064 1064 384: 2558 1446 1390 1379 1365 1365 448: 9111 1829 1829 1792 1792 1792 512: 10121 1662 1591 1520 1520 1520 640: 13665 4192 4050 3988 3988 3988 768: 6259 4182 4012 4012 4012 4012 896: 6155 5118 5010 4955 4955 4955 1024: 6152 5143 4980 4829 4829 4829 1280: 21651 12182 11891 11868 11852 11852 1536: 13816 12539 12321 12279 12279 12279 1792: 16071 14969 14704 14635 14635 14635 2048: 16760 15629 15379 15349 15349 15349 2560: 63848 35212 34943 34929 34929 34929 3072: 39966 38266 37989 37977 37977 37977 3584: 46966 45471 45264 45243 45243 45243 4096: 49535 48394 48193 48176 48176 48176 5120: 140248 106996 106706 106706 106706 106706 6144: 118584 117216 116988 116988 116988 116988 7168: 140206 138813 138644 138635 138635 138635 8192: 150717 167855 149031 148732 148732 148732 10240: 389231 322882 321973 321973 321973 321973 12288: 356855 354401 354388 354388 354388 354388 14336: 441151 422692 422580 422566 422566 422566 16384: 457563 454635 454539 454519 454519 454519 20480: 1158352 974787 974580 974547 974547 1007564 24576: 1092018 1073016 1072953 1072950 1072950 1072950 28672: 1295385 1277121 1277040 1277040 1277040 1292898 32768: 1376157 1374992 1374977 1392454 1374985 1374973 40960: 3324519 2962170 2977455 2977386 2961078 2989962 49152: 3258969 3289929 3260076 3276942 3273855 3276768 57344: 3903693 3875955 3909669 3876225 3892914 3906396 65536: 4215776 4208691 4189766 4219381 4208178 4201599 81920: 9631193 8968698 8981787 8963238 8958951 8964780 98304: 9870814 9895245 9875676 9891150 9872712 9873546 114688: 11743141 11734887 16601852 11742609 11764606 11735424 131072: 12687962 12670887 12709269 12670650 12667929 12670962 163840: 28554759 27102935 27072885 27069225 27058968 27061590 196608: 29871665 29839643 29928708 29816514 29837655 29836530 229376: 35535980 35572404 35486646 35494260 35485038 35480214 262144: 38461757 38361253 38371160 38325979 38446643 38340728 327680: 85920797 82441654 82319492 82413165 82350547 82332380 393216: 90934011 90805787 90799092 90823891 90732222 90785376 458752: 107965379 107931219 107900223 107875965 107825310 107878413 524288: 116862350 116606376 116551767 116615907 116559792 116532171 655360: 258510629 252581588 252662715 252592866 252351006 252070848 786432: 278182421 278177772 278254692 278111574 278121465 278152875 917504: 331393937 331193658 330951528 330985026 331230474 331251057 1048576: 356645440 356214807 356462475 356281833 356717643 356375827 1310720: 779727790 766478393 766095624 766078596 765622015 765227042 1572864: 842940528 842779434 842332158 843695259 844266458 843699492 1835008: 1004139895 1004105574 1004339234 1004081544 1004230732 1004221781 2097152: 1082431221 1085156820 1081905129 1082271411 1082074941 1082375982 2621440: 2340721122 2313649116 2313807750 2313378786 2313885132 2314466367 3145728: 2551012401 2550746108 2550567198 2554318764 2551554992 2551573638 3670016: 3037254618 3036600038 3036385558 3035681738 3035483270 3036260846 4194304: 3284301273 3280401954 3280293025 3281160638 3280804110 3280877136 5242880: 7041577524 6992734518 6990440328 6987581352 6986730330 6990719220 6291456: 7711623408 7710990222 7706679632 7718467685 7706209937 7705363141 7340032: 9179188840 9174005845 9174374568 9177766976 9177300315 9173816252 8388608: 9898105195 9892386954 9916493895 9893409003 9878862492 9889922178
Older timings of OpenSSL 0.9.3 on a Pentium-II:
1: 1709 221 199 173 173 173 2: 204 173 173 173 173 173 4: 189 173 173 173 178 173 8: 188 173 173 173 173 173 16: 188 173 173 173 173 173 32: 241 169 169 169 169 169 64: 931 255 237 237 220 220 128: 942 398 377 400 377 377 256: 2387 551 501 530 501 501 512: 5425 2038 1945 1970 1934 1934 1024: 9214 6750 6643 6626 6626 6607 2048: 31571 21539 21295 21315 21300 21315 4096: 80817 67946 67668 67615 67615 67634 8192: 231559 210311 210079 210079 210079 210079 16384: 686731 644408 644286 644176 644298 650586 32768: 2053030 1993736 1971903 1977854 1971871 1977038 65536: 6148814 5997568 5979039 5983902 5988009 5988392 131072: 18451390 18125190 18120955 18124625 18128916 18118647 262144: 55321350 54611910 54601617 54610680 54606015 54646073 524288: 166515726 164954703 164927572 164953991 165076395 164969343 1048576: 499865692 496917476 497227680 496965668 496877964 496856052 2097152: 1501506341 1495402173 1495164024 1495725984 1496591580 1495947001 4194304: 4508086985 4496082061 4495497030 4495770108 4497505377 4495974129
Older timings of OpenSSL 0.9.3 on a Pentium:
1: 2582 203 164 164 164 164 2: 382 157 157 157 157 157 4: 383 163 157 157 157 157 8: 381 157 157 157 157 157 16: 381 157 157 157 157 157 32: 447 159 151 148 148 148 64: 879 252 222 216 216 216 128: 1185 494 466 452 452 452 256: 2117 920 893 886 886 886 512: 6409 3391 3341 3293 3291 3297 1024: 14473 10419 10357 10341 10341 10341 2048: 53395 32114 31987 31965 31965 31965 4096: 127599 98336 98143 98123 98123 98123 8192: 349052 308926 305230 305191 305153 308033 16384: 1044194 934956 930814 933789 933798 930822 32768: 3036390 2904676 2941772 2898122 2942490 2898460 65536: 9074094 8762712 8757750 8757446 8761678 8758266 131072: 27285466 26701524 26745194 26745730 26701182 26743878 262144: 81282118 79673920 79250288 79178708 79209816 79172410 524288: 241980958 239327272 239213726 239671800 239274818 239248328 1048576: 731180562 726718024 726726610 726994154 727835040 727163878 2097152: 2180201238 2160878220 2161015476 2167436958 2168630402 2160352964