*/
/* Optional external libraries; can be enabled using:
- * make VERSUS=crypto+gcrypt+tomcrypt tools/crypto_bench */
+ * make VERSUS=crypto+gcrypt+tomcrypt+mbedcrypto tools/crypto_bench */
#define USE_crypto 0x01 /* OpenSSL's libcrypto */
#define USE_gcrypt 0x02 /* GnuTLS's libgcrypt */
#define USE_tomcrypt 0x04 /* LibTomCrypt */
DEFINE_GCRYPT_WRAPPER(sha512, SHA512)
DEFINE_GCRYPT_WRAPPER(ripemd160, RMD160)
-#define DEFINE_GCRYPT_CYPHER_WRAPPER(suffix, cypher, sz) \
+#define DEFINE_GCRYPT_CYPHER_WRAPPER(suffix, cypher, mode, sz) \
static void run_gcrypt_ ## suffix(uint8_t *output, \
const uint8_t *input, unsigned size) \
{ \
static gcry_cipher_hd_t suffix; \
if (!suffix) \
- gcry_cipher_open(&suffix, GCRY_CIPHER_ ## cypher, GCRY_CIPHER_MODE_ECB, 0); \
+ gcry_cipher_open(&suffix, GCRY_CIPHER_ ## cypher, GCRY_CIPHER_MODE_ ## mode, 0); \
gcry_cipher_setkey(suffix, hardcoded_key, sz); \
gcry_cipher_encrypt(suffix, output, size, input, size); \
}
-DEFINE_GCRYPT_CYPHER_WRAPPER(aes128, AES128, 16)
-DEFINE_GCRYPT_CYPHER_WRAPPER(blowfish, BLOWFISH, 16)
-DEFINE_GCRYPT_CYPHER_WRAPPER(camellia, CAMELLIA128, 16)
-DEFINE_GCRYPT_CYPHER_WRAPPER(cast128, CAST5, 16)
-DEFINE_GCRYPT_CYPHER_WRAPPER(des, DES, 8)
-DEFINE_GCRYPT_CYPHER_WRAPPER(twofish, TWOFISH128, 16)
+DEFINE_GCRYPT_CYPHER_WRAPPER(aes128, AES128, ECB, 16)
+DEFINE_GCRYPT_CYPHER_WRAPPER(blowfish, BLOWFISH, ECB, 16)
+DEFINE_GCRYPT_CYPHER_WRAPPER(camellia, CAMELLIA128, ECB, 16)
+DEFINE_GCRYPT_CYPHER_WRAPPER(cast128, CAST5, ECB, 16)
+DEFINE_GCRYPT_CYPHER_WRAPPER(des, DES, ECB, 8)
+DEFINE_GCRYPT_CYPHER_WRAPPER(twofish, TWOFISH128, ECB, 16)
+DEFINE_GCRYPT_CYPHER_WRAPPER(rc4, ARCFOUR, STREAM, 16)
#define IMPL_USE_gcrypt(...) IMPL_USE(__VA_ARGS__)
#else
des_ecb_encrypt(input + i, output + i, &des);
}
+static void run_tomcrypt_rc4(uint8_t *output,
+ const uint8_t *input, unsigned size)
+{
+ rc4_state rc4;
+
+ rc4_stream_setup(&rc4, hardcoded_key, 16);
+ rc4_stream_crypt(&rc4, input, size, output);
+ rc4_stream_done(&rc4);
+}
+
static void run_tomcrypt_twofish(uint8_t *output,
const uint8_t *input, unsigned size)
{
IMPL(lavu, "TWOFISH", twofish, "crc:9edbd5c1")
IMPL(gcrypt, "TWOFISH", twofish, "crc:9edbd5c1")
IMPL(tomcrypt, "TWOFISH", twofish, "crc:9edbd5c1")
- IMPL(lavu, "RC4", rc4, "crc:538d37b2")
- IMPL(crypto, "RC4", rc4, "crc:538d37b2")
- IMPL(mbedcrypto, "RC4", rc4, "crc:538d37b2")
+ IMPL_ALL("RC4", rc4, "crc:538d37b2")
IMPL(lavu, "XTEA", xtea, "crc:931fc270")
IMPL(mbedcrypto, "XTEA", xtea, "crc:931fc270")
IMPL(tomcrypt, "XTEA", xtea, "crc:931fc270")
int main(int argc, char **argv)
{
- uint8_t *input = av_malloc(MAX_INPUT_SIZE * 2);
- uint8_t *output = input + MAX_INPUT_SIZE;
+ uint8_t *input;
+ uint8_t *output;
unsigned i, impl, size;
int opt;
exit(opt != 'h');
}
}
-
+ input = av_malloc(MAX_INPUT_SIZE * 2);
if (!input)
fatal_error("out of memory");
for (i = 0; i < MAX_INPUT_SIZE; i += 4)
AV_WB32(input + i, i);
+ output = input + MAX_INPUT_SIZE;
+
size = MAX_INPUT_SIZE;
for (impl = 0; impl < FF_ARRAY_ELEMS(implementations); impl++)
run_implementation(input, output, &implementations[impl], size);