#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 seconds
Results:
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