Cryptographic algorithms
-
Anubis
(designed by Vincent Rijmen and Paulo Barreto) is a 128-bit block cipher that
uses keys of length 128 to 320 bits in steps of 32 bits. Anubis was
a NESSIE submission which was not included in the final portfolio. My Pascal
source implements the so called tweaked version with a recursive structured
S-box.
Archive: anubis_2013-01-07.zip
-
Camellia
is a Feistel block cipher developed jointly by NTT (Nippon Telegraph and Telephone) and Mitsubishi. It uses 128-bit input/output data
blocks and 128, 192, or 256 bit keys. Camellia is a recommended block cipher of the
NESSIE portfolio,
included in ISO/IEC 18033-3, and also described in
RFC 3713.
The Feistel code and the S-Boxes are now 32 bit oriented, the encryption / decryption
loops are unrolled, and the speed was increased (factors: 2.4 .. 2.9 for 32 bit and 1.2 .. 1.4 for 16 bit compilers).
Archive: camellia_2015-09-14.zip
-
Serpent
(designed by Ross Anderson, Eli Biham, and Lars Knudsen) was one of
the AES finalists; it is a 128-bit block cipher with key sizes of 128, 192, or 256 bits.
Please note that although my code supports OMAC and EAX,
these modes are not tested against public test vectors (the usual C libraries
do either not implement Serpent or OMAC/EAX).
Archive: serpent_2014-08-25.zip
-
The SEED cipher has been developed by KISA
(Korea Information Security Agency). It uses 128-bit input/output data
blocks and 128-bit keys. SEED is specified in ISO/IEC 18033-3 and
in RFC 4269.
Archive: seed_2013-01-07.zip
-
The 256-bit block cipher SHACAL-2
is based on the compression function of SHA256. It supports keys sizes from 128 to 512 bits. SHACAL-2 is designed by Helena
Handschuh and David Naccache and is the only recommended 256-bit block
cipher of the NESSIE portfolio.
Archive: shacal2_2013-01-07.zip
-
SkipJack
is a compact 64-bit block cipher with 80-bit keys. It was
designed by the NSA as an unbalanced Feistel network with 32 rounds; in
1998 it was declassified and published by NIST (the specification was
clarified in 2002).
Archive: skipjack_2013-01-07.zip
-
XTEA (eXtended TEA) is another compact 64-bit block cipher with
128-bit keys described by David Wheeler and Roger Needham.
Archive: xtea_2013-01-07.zip
-
poly_32x32 uses 32 x 32 -> 64 bit multiplication
and is default for compilers with u/int64 data types (D4+, FPC),
-
poly_16x16 with 16 x 16 -> 32 bit multiplication for all
other compilers without int64.
-
During development I also
translated poly_8x8: it is available as a separate file,
but not actually used (slower for all tested CPUs/compilers).
| © 2016 W.Ehrhardt |
Last update July 04, 2016 |
| Compiler |
Cyc/Bl-F |
MB/s-F |
Cyc/Bl-C |
MB/s-C |
| TP5 |
6302 |
4.6 |
5356 |
5.4 |
| TP55 |
6321 |
4.5 |
6980 |
4.1 |
| TP6 |
1436 |
20.0 |
1762 |
16.3 |
| BP7 |
1493 |
19.2 |
1927 |
14.9 |
| Delphi2 |
365 |
78.6 |
398 |
72.1 |
| Delphi3 |
373 |
76.9 |
398 |
72.1 |
| Delphi4 |
386 |
74.3 |
398 |
72.1 |
| Delphi5 |
375 |
76.5 |
398 |
72.1 |
| Delphi6 |
380 |
75.5 |
398 |
72.1 |
| Delphi7 |
380 |
75.5 |
398 |
72.1 |
| Delphi9 |
381 |
76.3 |
397 |
72.3 |
| Delphi10 |
380 |
75.0 |
398 |
72.1 |
| VPC |
426 |
67.3 |
425 |
67.3 |
| FPC 2.2 -O3 |
416 |
69.0 |
417 |
68.8 |
| FPC 1 GoV2 |
542 |
53.0 |
541 |
53.1 |
| Package/Compiler |
CTR |
CFB |
OFB |
ECB |
CBC |
OMAC |
| LibTom117/VC6 |
13.0 |
16.3 |
16.4 |
12.9 |
13.9 |
15.6 |
| LTC117/GCC4.2.1 |
10.1 |
14.5 |
10.6 |
9.0 |
9.3 |
14.2 |
| dcpcrypt2/D6 |
28.8 |
32.7 |
28.6 |
– |
32.7 |
– |
| DEC5.1/D6 |
– |
13.9 |
10.9 |
10.2 |
11.8 |
– |
| StrSecII/D6 |
9.0 |
11.5 |
9.1 |
7.7 |
9.3 |
– |
| WE/D3 |
9.0 |
8.1 |
8.1 |
7.7 |
9.1 |
9.1 |
| WE/D6 |
9.0 |
8.0 |
8.0 |
7.7 |
8.4 |
9.1 |
| WE/FPC 2.2 -O3 |
9.9 |
9.1 |
9.1 |
9.0 |
11.2 |
9.0 |
| WE/VPC 2.1 |
10.4 |
10.2 |
10.3 |
9.3 |
13.9 |
12.0 |
| WE/BP7 |
47.1 |
41.4 |
41.4 |
34.3 |
51.0 |
45.3 |
| Func/Bit |
ASM |
C++ |
D6 |
VPC |
FPC2 |
BP7 |
| Enc/128 |
295 |
385 |
370 |
425 |
546 |
1490 |
| Dec/128 |
293 |
376 |
382 |
405 |
551 |
1545 |
| Enc/192 |
352 |
439 |
434 |
532 |
648 |
1768 |
| Dec/192 |
346 |
443 |
451 |
476 |
653 |
1723 |
| Enc/256 |
403 |
497 |
498 |
580 |
751 |
1948 |
| Dec/256 |
407 |
507 |
518 |
549 |
755 |
1971 |
| Package/Compiler |
CTR |
CFB |
OFB |
ECB |
CBC |
OMAC |
| LibTom112/VC6 |
11.9 |
14.6 |
14.4 |
10.3 |
11.2 |
14.4 |
| LTC112/GCC4.0.1 |
13.4 |
14.9 |
13.5 |
12.5 |
11.7 |
14.2 |
| dcpcrypt2/D6 |
21.5 |
25.4 |
21.3 |
– |
25.7 |
– |
| DEC5.1/D6 |
– |
31.9 |
28.7 |
27.7 |
29.6 |
– |
| StrSecII/D6 |
13.0 |
14.7 |
13.0 |
10.7 |
12.1 |
– |
| WE/D3 |
14.8 |
14.0 |
13.9 |
13.8 |
16.0 |
16.3 |
| WE/D6 |
15.2 |
14.0 |
13.9 |
13.9 |
15.6 |
15.0 |
| WE/FPC2 |
20.4 |
20.4 |
20.3 |
19.5 |
21.9 |
20.1 |
| WE/VPC |
17.6 |
17.3 |
17.6 |
17.0 |
22.9 |
18.4 |
| WE/BP7 |
72.0 |
68.5 |
67.9 |
61.6 |
76.0 |
72.2 |
| Package/Compiler |
CTR |
CFB |
OFB |
ECB |
CBC |
OMAC |
| LibTom112/VC6 |
12.0 |
14.1 |
13.8 |
11.3 |
15.6 |
16.7 |
| LTC112/GCC4.0.1 |
13.1 |
12.8 |
11.8 |
9.9 |
10.5 |
17.8 |
| dcpcrypt2/D6 |
21.0 |
28.5 |
20.8 |
– |
30.3 |
– |
| DEC5.1/D6 |
– |
13.7 |
12.0 |
12.1 |
13.7 |
– |
| StrSecII/D6 |
14.1 |
15.1 |
14.0 |
10.9 |
13.5 |
– |
| WE/D3 |
14.0 |
12.2 |
10.8 |
10.2 |
12.4 |
11.5 |
| WE/D6 |
14.1 |
12.3 |
10.8 |
10.6 |
12.4 |
11.4 |
| WE/FPC2 |
18.2 |
17.4 |
18.8 |
14.5 |
16.8 |
16.5 |
| WE/VPC |
20.0 |
21.0 |
19.2 |
19.2 |
26.3 |
22.6 |
| WE/BP7 |
64.8 |
57.1 |
57.1 |
40.7 |
72.8 |
58.3 |
| Salsa20 / XSalsa20 / ChaCha |
| Compiler |
k8 |
k12 |
k20 |
e8 |
e12 |
e20 |
Rem. |
| ASM P4 F12 |
– |
– |
– |
2.54 |
3.62 |
5.57 |
(1) |
| GCC 4.3.2 -O3 |
5.71 |
7.36 |
9.50 |
5.44 |
7.03 |
9.12 |
(2) |
| VC6 SP4 /O2 |
6.65 |
8.29 |
11.59 |
6.37 |
8.07 |
11.37 |
(2) |
| Delphi 3 |
3.57 |
4.93 |
7.93 |
6.16 |
7.53 |
10.23 |
– |
| Delphi 6 |
3.57 |
4.94 |
7.94 |
6.25 |
7.62 |
10.32 |
– |
| Delphi 10 |
3.57 |
4.93 |
7.94 |
6.12 |
7.48 |
10.21 |
– |
| VPC 2.1.279 |
4.40 |
5.77 |
8.51 |
6.89 |
8.25 |
10.98 |
– |
| FPC 2.2.4 -O3 |
4.57 |
5.93 |
8.66 |
7.92 |
9.33 |
11.92 |
– |
| BP7 Real |
4.85 |
6.19 |
8.88 |
5.34 |
6.68 |
9.37 |
– |
| Compiler |
k [s] |
k [MB/s] |
e [s] |
e [MB/s] |
| GCC 4.3.2 -O3 |
7.253 |
110.3 |
10.220 |
78.3 |
| VC6 SP4 /O2 |
7.520 |
106.4 |
10.930 |
73.2 |
| Delphi 3 |
3.022 |
264.7 |
6.868 |
116.5 |
| Delphi 6 |
3.013 |
265.5 |
6.897 |
116.0 |
| Delphi 10 |
3.634 |
220.1 |
7.565 |
105.7 |
| VPC 2.1.279 |
4.613 |
173.4 |
8.356 |
95.7 |
| FPC 2.2.4 -O3 |
6.284 |
127.3 |
11.543 |
69.3 |
| BP7 Real |
5.490 |
145.7 |
7.679 |
104.2 |
Before downloading any software from this site please read this
legal notice.Last changes: CBC, CFB128, CFB8, CTR, ECB, OFBOMAC, CMAC, CCM, EAX, GCM, XTSt_gsp128t_aes_wst_gspeedaestmr.cppASMC++compressed tablest_mkctabcache timing attacksaes_conf.incFCA demo programfcaes256Giorgio Tanifca256Giorgio TaniLast changes: FZCA programNote:Last changes: Last changes: Last Salsa changes: t_salwekxexsalsarXSalsa20ChaChaEddyHawkMartokLast changes: t_soseweGCCVC6keLast changes: general Poly1305 algorithmmustmayencfilemayresetresetxorchacha_xkeysetupAESTwofishBlowfishSalsa20/XSalsa20/ChaChaSosemanukother block ciphersAnubisCamelliaSEEDSerpentSHACAL-2SkipJackXTEAaes_2015-09-14.ziphrtimeraes_cmpsrc_2006-07-30.zipLinksPeaZipfca_2016-05-01.zipaes_2015-09-14.ziputil_YYYY-MM-DD.zipcrc_hash_YYYY-MM-DD.zipzlibtf_2013-01-07.ziptf_cmpsrc_2006-06-15.zipbf_2013-12-02.zipbf_cmpsrc_2006-06-15.zipSalsa20eSTREAM Portfoliosalsa_2015-09-14.zipPRNGSosemanukeSTREAM Portfolioarchivesosemanuk_2013-01-07.zipSerpentpoly1305_2016-05-01.zipGithubRFC 7539