2 * Written in 2013 by Gregor Pintar <grpintar@gmail.com>
4 * To the extent possible under law, the author(s) have dedicated
5 * all copyright and related and neighboring rights to this software
6 * to the public domain worldwide.
8 * This software is distributed without any warranty.
10 * You should have received a copy of the CC0 Public Domain Dedication.
11 * If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
14 /* gcc -Wall -Wextra -std=c99 -pedantic perf/block.c -Iinclude lib/libkripto.a -O2 -DPERF_UNIX -D_GNU_SOURCE */
15 /* gcc -Wall -Wextra -std=c99 -pedantic perf/block.c -Iinclude lib/libkripto.a -O2 -DPERF_WINDOWS /lib/w32api/libpowrprof.a */
22 #include <kripto/block.h>
24 #include <kripto/block/3way.h>
25 #include <kripto/block/anubis.h>
26 #include <kripto/block/aria.h>
27 #include <kripto/block/blowfish.h>
28 #include <kripto/block/camellia.h>
29 #include <kripto/block/cast5.h>
30 #include <kripto/block/des.h>
31 #include <kripto/block/gost.h>
32 #include <kripto/block/idea.h>
33 #include <kripto/block/khazad.h>
34 #include <kripto/block/mars.h>
35 #include <kripto/block/noekeon.h>
36 #include <kripto/block/rc2.h>
37 #include <kripto/block/rc5.h>
38 #include <kripto/block/rc5_64.h>
39 #include <kripto/block/rc6.h>
40 #include <kripto/block/rijndael128.h>
41 #include <kripto/block/rijndael256.h>
42 #include <kripto/block/safer.h>
43 #include <kripto/block/safer_sk.h>
44 #include <kripto/block/seed.h>
45 #include <kripto/block/serpent.h>
46 #include <kripto/block/simon32.h>
47 #include <kripto/block/simon64.h>
48 #include <kripto/block/simon128.h>
49 #include <kripto/block/skipjack.h>
50 #include <kripto/block/speck32.h>
51 #include <kripto/block/speck64.h>
52 #include <kripto/block/speck128.h>
53 #include <kripto/block/tea.h>
54 #include <kripto/block/threefish256.h>
55 #include <kripto/block/threefish512.h>
56 #include <kripto/block/threefish1024.h>
57 #include <kripto/block/twofish.h>
58 #include <kripto/block/xtea.h>
69 static void die(const char *str
)
82 const uint8_t k
[MAXKEY
] =
84 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
85 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
86 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
87 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
93 const kripto_block_desc
*desc
;
96 {"3-Way", kripto_block_3way
},
97 {"Anubis", kripto_block_anubis
},
98 {"ARIA", kripto_block_aria
},
99 {"Blowfish", kripto_block_blowfish
},
100 {"Camellia", kripto_block_camellia
},
101 {"CAST5", kripto_block_cast5
},
102 {"DES", kripto_block_des
},
103 {"GOST", kripto_block_gost
},
104 {"IDEA", kripto_block_idea
},
105 {"KHAZAD", kripto_block_khazad
},
106 {"MARS", kripto_block_mars
},
107 {"Noekeon", kripto_block_noekeon
},
108 {"RC2", kripto_block_rc2
},
109 {"RC5", kripto_block_rc5
},
110 {"RC5/64", kripto_block_rc5_64
},
111 {"RC6", kripto_block_rc6
},
112 {"Rijndael-128", kripto_block_rijndael128
},
113 {"Rijndael-256", kripto_block_rijndael256
},
114 {"SAFER", kripto_block_safer
},
115 {"SAFER-SK", kripto_block_safer_sk
},
116 {"SEED", kripto_block_seed
},
117 {"Serpent", kripto_block_serpent
},
118 {"Simon32", kripto_block_simon32
},
119 {"Simon64", kripto_block_simon64
},
120 {"Simon128", kripto_block_simon128
},
121 {"Skipjack", kripto_block_skipjack
},
122 {"Speck32", kripto_block_speck32
},
123 {"Speck64", kripto_block_speck64
},
124 {"Speck128", kripto_block_speck128
},
125 {"TEA", kripto_block_tea
},
126 {"Threefish-256", kripto_block_threefish256
},
127 {"Threefish-512", kripto_block_threefish512
},
128 {"Threefish-1024", kripto_block_threefish1024
},
129 {"Twofish", kripto_block_twofish
},
130 {"XTEA", kripto_block_xtea
}
133 memset(t
, 0, MAXBLOCK
);
137 for(cipher
= 0; cipher
< 35; cipher
++)
139 if(!ciphers
[cipher
].desc
) continue;
141 maxkey
= kripto_block_maxkey(ciphers
[cipher
].desc
);
142 if(maxkey
> MAXKEY
) maxkey
= MAXKEY
;
144 for(n
= KEYSTEP
; n
<= maxkey
; n
+= KEYSTEP
)
146 s
= kripto_block_create(ciphers
[cipher
].desc
, 0, k
, n
);
147 if(!s
) die("kripto_block_create()");
151 s
= kripto_block_recreate(s
, 0, k
, n
);
152 if(!s
) die("kripto_block_recreate()");
155 printf("%s %u-bit setup: %lu cycles\n",
156 ciphers
[cipher
].name
, n
* 8, cycles
);
160 kripto_block_encrypt(s
, t
, t
);
163 printf("%s %u-bit encrypt: %.1f cpb\n",
164 ciphers
[cipher
].name
, n
* 8,
165 cycles
/ (float)kripto_block_size(ciphers
[cipher
].desc
));
169 kripto_block_decrypt(s
, t
, t
);
172 printf("%s %u-bit decrypt: %.1f cpb\n",
173 ciphers
[cipher
].name
, n
* 8,
174 cycles
/ (float)kripto_block_size(ciphers
[cipher
].desc
));
176 kripto_block_destroy(s
);