335 lines
16 KiB
HTML
335 lines
16 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
|
<HTML>
|
|
<HEAD>
|
|
<BASE HREF="http://www.eskimo.com.wstub.archive.org/~weidai/benchmarks.html">
|
|
|
|
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
|
<TITLE>Speed Comparison of Popular Crypto Algorithms</TITLE>
|
|
|
|
<BODY>
|
|
<H1><a href="http://www.cryptopp.com">Crypto++</a> 5.2.1 Benchmarks</H1>
|
|
|
|
<P>
|
|
Here are speed benchmarks for some of the most commonly used cryptographic algorithms.
|
|
All were coded in C++, compiled with Microsoft Visual C++ .NET 2003
|
|
(whole program optimization, optimize for speed, P4 code generation), and ran on a Pentium 4
|
|
2.1 GHz processor under Windows XP SP 1. 386 assembly routines were used
|
|
for multiple-precision addition and subtraction. SSE2 intrinsics were used
|
|
for multiple-precision multiplication.
|
|
</P>
|
|
Also available are <a href="amd64-benchmarks.html">benchmarks that ran on an AMD Opteron 1.6 GHz processor under Linux 2.4.21</a>.
|
|
Those were compiled with GCC 3.2.2 using -O2 optimization, and inline assembly was used to access the 64-bit multiplication instruction.
|
|
</P>
|
|
|
|
<TABLE border=1><COLGROUP><COL align=left><COL align=right><COL align=right><COL align=right>
|
|
<THEAD><TR><TH>Algorithm<TH>Megabytes(2^20 bytes) Processed<TH>Time Taken<TH>MB/Second
|
|
<TBODY>
|
|
<TR><TH>CRC-32<TD>2.05e+003<TD>6.399<TD>320.050
|
|
<TR><TH>Adler-32<TD>4.1e+003<TD>3.525<TD>1161.986
|
|
<TR><TH>MD2<TD>16<TD>4.006<TD>3.994
|
|
<TR><TH>MD5<TD>1.02e+003<TD>4.726<TD>216.674
|
|
<TR><TH>SHA-1<TD>256<TD>3.766<TD>67.977
|
|
<TR><TH>SHA-256<TD>256<TD>5.758<TD>44.460
|
|
<TR><TH>SHA-512<TD>64<TD>5.618<TD>11.392
|
|
<TR><TH>HAVAL (pass=3)<TD>512<TD>4.717<TD>108.544
|
|
<TR><TH>HAVAL (pass=4)<TD>256<TD>3.695<TD>69.283
|
|
<TR><TH>HAVAL (pass=5)<TD>256<TD>3.796<TD>67.439
|
|
<TR><TH>Tiger<TD>128<TD>3.364<TD>38.050
|
|
<TR><TH>RIPE-MD160<TD>256<TD>4.867<TD>52.599
|
|
<TR><TH>Panama Hash (little endian)<TD>1.02e+003<TD>3.375<TD>303.407
|
|
<TR><TH>Panama Hash (big endian)<TD>1.02e+003<TD>4.637<TD>220.832
|
|
<TR><TH>Whirlpool<TD>64<TD>5.288<TD>12.103
|
|
<TR><TH>MDC/MD5<TD>256<TD>5.377<TD>47.610
|
|
<TR><TH>Luby-Rackoff/MD5<TD>64<TD>4.307<TD>14.860
|
|
<TR><TH>DES<TD>128<TD>5.998<TD>21.340
|
|
<TR><TH>DES-XEX3<TD>128<TD>6.159<TD>20.783
|
|
<TR><TH>DES-EDE3<TD>64<TD>6.499<TD>9.848
|
|
<TR><TH>IDEA<TD>64<TD>3.375<TD>18.963
|
|
<TR><TH>RC2<TD>64<TD>5.548<TD>11.536
|
|
<TR><TH>RC5 (r=16)<TD>256<TD>4.286<TD>59.729
|
|
<TR><TH>Blowfish<TD>256<TD>3.976<TD>64.386
|
|
<TR><TH>3-WAY<TD>128<TD>3.665<TD>34.789
|
|
<TR><TH>TEA<TD>128<TD>5.378<TD>23.801
|
|
<TR><TH>SAFER (r=8)<TD>128<TD>6.279<TD>20.385
|
|
<TR><TH>GOST<TD>128<TD>3.505<TD>36.519
|
|
<TR><TH>SHARK (r=6)<TD>128<TD>3.826<TD>33.455
|
|
<TR><TH>CAST-128<TD>256<TD>5.988<TD>42.752
|
|
<TR><TH>CAST-256<TD>128<TD>5.889<TD>21.735
|
|
<TR><TH>Square<TD>128<TD>4.176<TD>30.651
|
|
<TR><TH>SKIPJACK<TD>128<TD>6.329<TD>20.224
|
|
<TR><TH>RC6<TD>128<TD>3.385<TD>37.814
|
|
<TR><TH>MARS<TD>128<TD>4.586<TD>27.911
|
|
<TR><TH>Rijndael (128-bit key)<TD>256<TD>4.196<TD>61.010
|
|
<TR><TH>Rijndael (192-bit key)<TD>256<TD>4.817<TD>53.145
|
|
<TR><TH>Rijndael (256-bit key)<TD>256<TD>5.308<TD>48.229
|
|
<TR><TH>Rijndael (128) CTR<TD>256<TD>4.436<TD>57.710
|
|
<TR><TH>Rijndael (128) OFB<TD>256<TD>4.837<TD>52.925
|
|
<TR><TH>Rijndael (128) CFB<TD>256<TD>5.378<TD>47.601
|
|
<TR><TH>Rijndael (128) CBC<TD>256<TD>4.617<TD>55.447
|
|
<TR><TH>Twofish<TD>128<TD>4.075<TD>31.411
|
|
<TR><TH>Serpent<TD>128<TD>6.069<TD>21.091
|
|
<TR><TH>ARC4<TD>512<TD>4.517<TD>113.350
|
|
<TR><TH>SEAL-3.0-BE<TD>1.02e+003<TD>3.485<TD>293.831
|
|
<TR><TH>SEAL-3.0-LE<TD>2.05e+003<TD>4.937<TD>414.827
|
|
<TR><TH>WAKE-CFB-BE<TD>512<TD>5.498<TD>93.125
|
|
<TR><TH>WAKE-CFB-LE<TD>512<TD>3.615<TD>141.632
|
|
<TR><TH>WAKE-OFB-BE<TD>512<TD>3.855<TD>132.815
|
|
<TR><TH>WAKE-OFB-LE<TD>512<TD>3.836<TD>133.472
|
|
<TR><TH>Panama Cipher (little endian)<TD>1.02e+003<TD>4.036<TD>253.717
|
|
<TR><TH>Panama Cipher (big endian)<TD>1.02e+003<TD>5.317<TD>192.590
|
|
<TR><TH>SHACAL-2 (128-bit key)<TD>128<TD>6.279<TD>20.385
|
|
<TR><TH>SHACAL-2 (512-bit key)<TD>128<TD>6.279<TD>20.385
|
|
<TR><TH>Camellia (128-bit key)<TD>64<TD>3.355<TD>19.076
|
|
<TR><TH>Camellia (192-bit key)<TD>64<TD>4.437<TD>14.424
|
|
<TR><TH>Camellia (256-bit key)<TD>64<TD>4.416<TD>14.493
|
|
<TR><TH>MD5-MAC<TD>1.02e+003<TD>5.528<TD>185.239
|
|
<TR><TH>XMACC/MD5<TD>1.02e+003<TD>5.999<TD>170.695
|
|
<TR><TH>HMAC/MD5<TD>1.02e+003<TD>4.726<TD>216.674
|
|
<TR><TH>Two-Track-MAC<TD>256<TD>4.817<TD>53.145
|
|
<TR><TH>CBC-MAC/Rijndael<TD>256<TD>4.447<TD>57.567
|
|
<TR><TH>DMAC/Rijndael<TD>256<TD>4.476<TD>57.194
|
|
<TR><TH>BlumBlumShub 512<TD>0.25<TD>3.585<TD>0.070
|
|
<TR><TH>BlumBlumShub 1024<TD>0.125<TD>4.096<TD>0.031
|
|
<TR><TH>BlumBlumShub 2048<TD>0.0625<TD>5.869<TD>0.011
|
|
</TABLE>
|
|
<TABLE border=1><COLGROUP><COL align=left><COL align=right><COL align=right><COL align=right>
|
|
<THEAD><TR><TH>Operation<TH>Iterations<TH>Total Time<TH>Milliseconds/Operation
|
|
<TBODY style="background: yellow">
|
|
<TR><TH>RSA 1024 Encryption<TD>27607<TD>5.007<TD>0.18
|
|
<TR><TH>RSA 1024 Decryption<TD>1050<TD>5.007<TD>4.77
|
|
<TR><TH>Rabin 1024 Encryption<TD>3008<TD>5.007<TD>1.66
|
|
<TR><TH>Rabin 1024 Decryption<TD>795<TD>5.007<TD>6.30
|
|
<TR><TH>LUC 1024 Encryption<TD>23544<TD>5.008<TD>0.21
|
|
<TR><TH>LUC 1024 Decryption<TD>634<TD>5.007<TD>7.90
|
|
<TR><TH>DLIES 1024 Encryption<TD>1159<TD>5.007<TD>4.32
|
|
<TR><TH>DLIES 1024 Encryption with precomputation<TD>1061<TD>5.007<TD>4.72
|
|
<TR><TH>DLIES 1024 Decryption<TD>350<TD>5.008<TD>14.31
|
|
<TR><TH>LUCELG 512 Encryption<TD>2433<TD>5.007<TD>2.06
|
|
<TR><TH>LUCELG 512 Encryption with precomputation<TD>2402<TD>5.007<TD>2.08
|
|
<TR><TH>LUCELG 512 Decryption<TD>2744<TD>5.007<TD>1.82
|
|
<TBODY style="background: white">
|
|
<TR><TH>RSA 2048 Encryption<TD>11022<TD>5.007<TD>0.45
|
|
<TR><TH>RSA 2048 Decryption<TD>177<TD>5.028<TD>28.41
|
|
<TR><TH>Rabin 2048 Encryption<TD>1254<TD>5.007<TD>3.99
|
|
<TR><TH>Rabin 2048 Decryption<TD>159<TD>5.027<TD>31.62
|
|
<TR><TH>LUC 2048 Encryption<TD>8756<TD>5.007<TD>0.57
|
|
<TR><TH>LUC 2048 Decryption<TD>110<TD>5.037<TD>45.79
|
|
<TR><TH>DLIES 2048 Encryption<TD>260<TD>5.007<TD>19.26
|
|
<TR><TH>DLIES 2048 Encryption with precomputation<TD>269<TD>5.017<TD>18.65
|
|
<TR><TH>DLIES 2048 Decryption<TD>60<TD>5.027<TD>83.78
|
|
<TR><TH>LUCELG 1024 Encryption<TD>532<TD>5.008<TD>9.41
|
|
<TR><TH>LUCELG 1024 Encryption with precomputation<TD>531<TD>5.007<TD>9.43
|
|
<TR><TH>LUCELG 1024 Decryption<TD>772<TD>5.007<TD>6.49
|
|
<TBODY style="background: yellow">
|
|
<TR><TH>RSA 1024 Signature<TD>1053<TD>5.007<TD>4.75
|
|
<TR><TH>RSA 1024 Verification<TD>27406<TD>5.007<TD>0.18
|
|
<TR><TH>Rabin 1024 Signature<TD>816<TD>5.008<TD>6.14
|
|
<TR><TH>Rabin 1024 Verification<TD>3117<TD>5.007<TD>1.61
|
|
<TR><TH>RW 1024 Signature<TD>951<TD>5.007<TD>5.26
|
|
<TR><TH>RW 1024 Verification<TD>55580<TD>5.007<TD>0.09
|
|
<TR><TH>LUC 1024 Signature<TD>644<TD>5.007<TD>7.77
|
|
<TR><TH>LUC 1024 Verification<TD>24321<TD>5.008<TD>0.21
|
|
<TR><TH>NR 1024 Signature<TD>2260<TD>5.007<TD>2.22
|
|
<TR><TH>NR 1024 Signature with precomputation<TD>4376<TD>5.007<TD>1.14
|
|
<TR><TH>NR 1024 Verification<TD>1964<TD>5.007<TD>2.55
|
|
<TR><TH>NR 1024 Verification with precomputation<TD>2738<TD>5.007<TD>1.83
|
|
<TR><TH>DSA 1024 Signature<TD>2301<TD>5.008<TD>2.18
|
|
<TR><TH>DSA 1024 Signature with precomputation<TD>4444<TD>5.007<TD>1.13
|
|
<TR><TH>DSA 1024 Verification<TD>2007<TD>5.007<TD>2.49
|
|
<TR><TH>DSA 1024 Verification with precomputation<TD>2795<TD>5.007<TD>1.79
|
|
<TR><TH>LUC-HMP 512 Signature<TD>2365<TD>5.007<TD>2.12
|
|
<TR><TH>LUC-HMP 512 Signature with precomputation<TD>2401<TD>5.008<TD>2.09
|
|
<TR><TH>LUC-HMP 512 Verification<TD>2312<TD>5.007<TD>2.17
|
|
<TR><TH>LUC-HMP 512 Verification with precomputation<TD>2269<TD>5.007<TD>2.21
|
|
<TR><TH>ESIGN 1023 Signature<TD>9837<TD>5.007<TD>0.51
|
|
<TR><TH>ESIGN 1023 Verification<TD>27679<TD>5.007<TD>0.18
|
|
<TR><TH>ESIGN 1536 Signature<TD>4898<TD>5.008<TD>1.02
|
|
<TR><TH>ESIGN 1536 Verification<TD>11940<TD>5.007<TD>0.42
|
|
<TBODY style="background: white">
|
|
<TR><TH>RSA 2048 Signature<TD>178<TD>5.007<TD>28.13
|
|
<TR><TH>RSA 2048 Verification<TD>11054<TD>5.007<TD>0.45
|
|
<TR><TH>Rabin 2048 Signature<TD>158<TD>5.028<TD>31.82
|
|
<TR><TH>Rabin 2048 Verification<TD>1294<TD>5.007<TD>3.87
|
|
<TR><TH>RW 2048 Signature<TD>176<TD>5.017<TD>28.51
|
|
<TR><TH>RW 2048 Verification<TD>24521<TD>5.007<TD>0.20
|
|
<TR><TH>LUC 2048 Signature<TD>110<TD>5.007<TD>45.52
|
|
<TR><TH>LUC 2048 Verification<TD>9072<TD>5.008<TD>0.55
|
|
<TR><TH>NR 2048 Signature<TD>511<TD>5.007<TD>9.80
|
|
<TR><TH>NR 2048 Signature with precomputation<TD>1530<TD>5.007<TD>3.27
|
|
<TR><TH>NR 2048 Verification<TD>454<TD>5.007<TD>11.03
|
|
<TR><TH>NR 2048 Verification with precomputation<TD>982<TD>5.008<TD>5.10
|
|
<TR><TH>LUC-HMP 1024 Signature<TD>522<TD>5.007<TD>9.59
|
|
<TR><TH>LUC-HMP 1024 Signature with precomputation<TD>527<TD>5.007<TD>9.50
|
|
<TR><TH>LUC-HMP 1024 Verification<TD>520<TD>5.007<TD>9.63
|
|
<TR><TH>LUC-HMP 1024 Verification with precomputation<TD>499<TD>5.007<TD>10.03
|
|
<TR><TH>ESIGN 2046 Signature<TD>4253<TD>5.008<TD>1.18
|
|
<TR><TH>ESIGN 2046 Verification<TD>11024<TD>5.007<TD>0.45
|
|
<TBODY style="background: yellow">
|
|
<TR><TH>XTR-DH 171 Key-Pair Generation<TD>2802<TD>5.007<TD>1.79
|
|
<TR><TH>XTR-DH 171 Key Agreement<TD>1360<TD>5.007<TD>3.68
|
|
<TR><TH>XTR-DH 342 Key-Pair Generation<TD>777<TD>5.007<TD>6.44
|
|
<TR><TH>XTR-DH 342 Key Agreement<TD>404<TD>5.018<TD>12.42
|
|
<TR><TH>DH 1024 Key-Pair Generation<TD>2283<TD>5.007<TD>2.19
|
|
<TR><TH>DH 1024 Key-Pair Generation with precomputation<TD>2072<TD>5.007<TD>2.42
|
|
<TR><TH>DH 1024 Key Agreement<TD>1298<TD>5.007<TD>3.86
|
|
<TR><TH>DH 2048 Key-Pair Generation<TD>512<TD>5.007<TD>9.78
|
|
<TR><TH>DH 2048 Key-Pair Generation with precomputation<TD>524<TD>5.007<TD>9.56
|
|
<TR><TH>DH 2048 Key Agreement<TD>368<TD>5.027<TD>13.66
|
|
<TR><TH>LUCDIF 512 Key-Pair Generation<TD>4688<TD>5.007<TD>1.07
|
|
<TR><TH>LUCDIF 512 Key-Pair Generation with precomputation<TD>4339<TD>5.007<TD>1.15
|
|
<TR><TH>LUCDIF 512 Key Agreement<TD>2880<TD>5.008<TD>1.74
|
|
<TR><TH>LUCDIF 1024 Key-Pair Generation<TD>1057<TD>5.007<TD>4.74
|
|
<TR><TH>LUCDIF 1024 Key-Pair Generation with precomputation<TD>1037<TD>5.007<TD>4.83
|
|
<TR><TH>LUCDIF 1024 Key Agreement<TD>776<TD>5.017<TD>6.47
|
|
<TR><TH>MQV 1024 Key-Pair Generation<TD>2311<TD>5.007<TD>2.17
|
|
<TR><TH>MQV 1024 Key-Pair Generation with precomputation<TD>4595<TD>5.008<TD>1.09
|
|
<TR><TH>MQV 1024 Key Agreement<TD>1224<TD>5.007<TD>4.09
|
|
<TR><TH>MQV 2048 Key-Pair Generation<TD>522<TD>5.007<TD>9.59
|
|
<TR><TH>MQV 2048 Key-Pair Generation with precomputation<TD>1572<TD>5.007<TD>3.19
|
|
<TR><TH>MQV 2048 Key Agreement<TD>282<TD>5.017<TD>17.79
|
|
<TBODY style="background: white">
|
|
<TR><TH>ECIES over GF(p) 168 Encryption<TD>759<TD>5.008<TD>6.60
|
|
<TR><TH>ECIES over GF(p) 168 Encryption with precomputation<TD>1327<TD>5.007<TD>3.77
|
|
<TR><TH>ECIES over GF(p) 168 Decryption<TD>1062<TD>5.007<TD>4.71
|
|
<TR><TH>ECNR over GF(p) 168 Signature<TD>1497<TD>5.007<TD>3.34
|
|
<TR><TH>ECNR over GF(p) 168 Signature with precomputation<TD>2629<TD>5.007<TD>1.90
|
|
<TR><TH>ECNR over GF(p) 168 Verification<TD>794<TD>5.008<TD>6.31
|
|
<TR><TH>ECNR over GF(p) 168 Verification with precomputation<TD>1618<TD>5.007<TD>3.09
|
|
<TR><TH>ECDHC over GF(p) 168 Key-Pair Generation<TD>1536<TD>5.007<TD>3.26
|
|
<TR><TH>ECDHC over GF(p) 168 Key-Pair Generation with precomputation<TD>2576<TD>5.007<TD>1.94
|
|
<TR><TH>ECDHC over GF(p) 168 Key Agreement<TD>1474<TD>5.007<TD>3.40
|
|
<TR><TH>ECMQVC over GF(p) 168 Key-Pair Generation<TD>1529<TD>5.008<TD>3.28
|
|
<TR><TH>ECMQVC over GF(p) 168 Key-Pair Generation with precomputation<TD>2588<TD>5.007<TD>1.93
|
|
<TR><TH>ECMQVC over GF(p) 168 Key Agreement<TD>746<TD>5.007<TD>6.71
|
|
<TBODY style="background: yellow">
|
|
<TR><TH>ECIES over GF(2^n) 155 Encryption<TD>414<TD>5.007<TD>12.09
|
|
<TR><TH>ECIES over GF(2^n) 155 Encryption with precomputation<TD>1071<TD>5.008<TD>4.68
|
|
<TR><TH>ECIES over GF(2^n) 155 Decryption<TD>633<TD>5.007<TD>7.91
|
|
<TR><TH>ECNR over GF(2^n) 155 Signature<TD>827<TD>5.007<TD>6.05
|
|
<TR><TH>ECNR over GF(2^n) 155 Signature with precomputation<TD>2132<TD>5.007<TD>2.35
|
|
<TR><TH>ECNR over GF(2^n) 155 Verification<TD>655<TD>5.007<TD>7.64
|
|
<TR><TH>ECNR over GF(2^n) 155 Verification with precomputation<TD>1232<TD>5.008<TD>4.06
|
|
<TR><TH>ECDHC over GF(2^n) 155 Key-Pair Generation<TD>806<TD>5.007<TD>6.21
|
|
<TR><TH>ECDHC over GF(2^n) 155 Key-Pair Generation with precomputation<TD>2124<TD>5.007<TD>2.36
|
|
<TR><TH>ECDHC over GF(2^n) 155 Key Agreement<TD>780<TD>5.007<TD>6.42
|
|
<TR><TH>ECMQVC over GF(2^n) 155 Key-Pair Generation<TD>816<TD>5.007<TD>6.14
|
|
<TR><TH>ECMQVC over GF(2^n) 155 Key-Pair Generation with precomputation<TD>2116<TD>5.008<TD>2.37
|
|
<TR><TH>ECMQVC over GF(2^n) 155 Key Agreement<TD>660<TD>5.017<TD>7.60
|
|
</TABLE>
|
|
|
|
<H2>Notes</H2>
|
|
<UL>
|
|
<LI>
|
|
Crypto++ 5.2.1 Benchmark Average for this platform: <STRONG>135.54</STRONG>. This number
|
|
is computed by taking the geometric mean of the number of MB/second of each cipher,
|
|
hash function, and MAC, and operations/second of each asymmetric operation listed above.
|
|
<LI>
|
|
RSA and LUC use 17 as the public exponent.
|
|
<LI>
|
|
DH and ElGamal encryption and decryption use short exponents to save time.
|
|
The size of the secret exponents were chosen so that a meet-in-the-middle
|
|
attack would be slower than the general discrete log algorithm (NFS). The
|
|
sizes used were:
|
|
<TABLE>
|
|
<TR><TH>modulus<TH>exponent
|
|
<TR><TD>512 <TD>120
|
|
<TR><TD>1024 <TD>164
|
|
<TR><TD>2048 <TD>226
|
|
</TABLE>
|
|
<LI>
|
|
EC means elliptic curve. Operations in GF(2^n) are implemented using
|
|
trinomial basis. Note that compared to other algorithms listed here,
|
|
Crypto++'s implementation of EC over GF(2^n) is less optimized.
|
|
<LI>
|
|
All tests were done by repeating the crypto operations over small blocks
|
|
of random data. In practice you will likely see slower
|
|
speeds because time is needed to transfer data to and from memory.
|
|
<LI>
|
|
For the ciphers that specify big endian byte order, the timing data
|
|
listed include time needed to convert to and from little endian
|
|
order. For some ciphers (WAKE and SHA) this is a large fraction (up
|
|
to 25%) of the total time.
|
|
<LI>
|
|
The RSA, RW, DH, MQV, and elliptic curve schemes come from the IEEE P1363
|
|
standard. For more info see <A HREF="http://grouper.ieee.org/groups/1363/index.html">
|
|
http://grouper.ieee.org/groups/1363/index.html</A>.
|
|
<LI>
|
|
Precomputation means using a table of 16 precomputed powers of
|
|
each fixed base to speed up exponentiation.
|
|
<LI>
|
|
Tiger, SHARK, SHA-384, and SHA-512 are designed to take advantage of 64-bit
|
|
word operations.
|
|
Their relatives speeds can be expected to be much higher if the benchmarks
|
|
were done on a 64-bit CPU.
|
|
<LI>
|
|
Source code for these benchmarks is available as part of the <a href="http://www.cryptopp.com">Crypto++</a> library.
|
|
</UL>
|
|
|
|
<HR>
|
|
<ADDRESS>Written by: <A HREF="http://www.weidai.com">Wei Dai</A> <<A HREF="mailto:webmaster@weidai.com">webmaster@weidai.com</A>> Last modified: 7/23/2004</ADDRESS>
|
|
|
|
<SCRIPT language="Javascript">
|
|
<!--
|
|
|
|
// FILE ARCHIVED ON 20080423003735 AND RETRIEVED FROM THE
|
|
// INTERNET ARCHIVE ON 20100802114447.
|
|
// JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
|
|
// ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
|
|
// SECTION 108(a)(3)).
|
|
|
|
var sWayBackCGI = "http://web.archive.org/web/20080423003735/";
|
|
|
|
function xResolveUrl(url) {
|
|
var image = new Image();
|
|
image.src = url;
|
|
return image.src;
|
|
}
|
|
function xLateUrl(aCollection, sProp) {
|
|
var i = 0;
|
|
for(i = 0; i < aCollection.length; i++) {
|
|
var url = aCollection[i][sProp]; if (typeof(url) == "string") {
|
|
if (url.indexOf("mailto:") == -1 &&
|
|
url.indexOf("javascript:") == -1
|
|
&& url.length > 0) {
|
|
if(url.indexOf("http") != 0) {
|
|
url = xResolveUrl(url);
|
|
}
|
|
url = url.replace('.wstub.archive.org','');
|
|
aCollection[i][sProp] = sWayBackCGI + url;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
xLateUrl(document.getElementsByTagName("IMG"),"src");
|
|
xLateUrl(document.getElementsByTagName("A"),"href");
|
|
xLateUrl(document.getElementsByTagName("AREA"),"href");
|
|
xLateUrl(document.getElementsByTagName("OBJECT"),"codebase");
|
|
xLateUrl(document.getElementsByTagName("OBJECT"),"data");
|
|
xLateUrl(document.getElementsByTagName("APPLET"),"codebase");
|
|
xLateUrl(document.getElementsByTagName("APPLET"),"archive");
|
|
xLateUrl(document.getElementsByTagName("EMBED"),"src");
|
|
xLateUrl(document.getElementsByTagName("BODY"),"background");
|
|
xLateUrl(document.getElementsByTagName("TD"),"background");
|
|
xLateUrl(document.getElementsByTagName("INPUT"),"src");
|
|
var forms = document.getElementsByTagName("FORM");
|
|
if (forms) {
|
|
var j = 0;
|
|
for (j = 0; j < forms.length; j++) {
|
|
f = forms[j];
|
|
if (typeof(f.action) == "string") {
|
|
if(typeof(f.method) == "string") {
|
|
if(typeof(f.method) != "post") {
|
|
f.action = sWayBackCGI + f.action;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//-->
|
|
</SCRIPT>
|
|
|
|
</HTML>
|