[FFmpeg-devel] [PATCH 09/10] tools/crypto_bench: add AES-CBC modes

Michael Niedermayer michael at niedermayer.cc
Tue Oct 13 04:17:01 CEST 2015


On Mon, Oct 12, 2015 at 07:33:32PM -0500, Rodger Combs wrote:
> ---
>  tools/crypto_bench.c | 138 +++++++++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 135 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/crypto_bench.c b/tools/crypto_bench.c
> index ad20f95..0b1bfc8 100644
> --- a/tools/crypto_bench.c
> +++ b/tools/crypto_bench.c
> @@ -52,6 +52,7 @@ static const char *enabled_algos;
>  static unsigned specified_runs;
>  
>  static const uint8_t *hardcoded_key = "FFmpeg is the best program ever.";
> +static const uint8_t hardcoded_iv[16] = {0};
>  
>  static void fatal_error(const char *tag)
>  {
> @@ -136,6 +137,39 @@ static void run_lavu_aes256(uint8_t *output, const uint8_t *input, unsigned size
>      av_aes_crypt(aes, output, input, size >> 4, NULL, 0);
>  }
>  
> +static void run_lavu_aes128cbc(uint8_t *output, const uint8_t *input, unsigned size)
> +{
> +    static struct AVAES *aes;
> +    static uint8_t *iv;
> +    if ((!aes && !(aes = av_aes_alloc())) || (!iv && !(iv = av_malloc(16))))
> +        fatal_error("out of memory");
> +    memcpy(iv, hardcoded_iv, 16);
> +    av_aes_init(aes, hardcoded_key, 128, 0);
> +    av_aes_crypt(aes, output, input, size >> 4, iv, 0);
> +}
> +
> +static void run_lavu_aes192cbc(uint8_t *output, const uint8_t *input, unsigned size)
> +{
> +    static struct AVAES *aes;
> +    static uint8_t *iv;
> +    if ((!aes && !(aes = av_aes_alloc())) || (!iv && !(iv = av_malloc(16))))
> +        fatal_error("out of memory");
> +    memcpy(iv, hardcoded_iv, 16);
> +    av_aes_init(aes, hardcoded_key, 192, 0);
> +    av_aes_crypt(aes, output, input, size >> 4, iv, 0);
> +}
> +
> +static void run_lavu_aes256cbc(uint8_t *output, const uint8_t *input, unsigned size)
> +{
> +    static struct AVAES *aes;
> +    static uint8_t *iv;
> +    if ((!aes && !(aes = av_aes_alloc())) || (!iv && !(iv = av_malloc(16))))
> +        fatal_error("out of memory");
> +    memcpy(iv, hardcoded_iv, 16);
> +    av_aes_init(aes, hardcoded_key, 256, 0);
> +    av_aes_crypt(aes, output, input, size >> 4, iv, 0);
> +}
> +
>  static void run_lavu_blowfish(uint8_t *output,
>                                const uint8_t *input, unsigned size)
>  {
> @@ -258,6 +292,42 @@ static void run_crypto_aes256(uint8_t *output, const uint8_t *input, unsigned si
>          AES_encrypt(input + i, output + i, &aes);
>  }
>  
> +static void run_crypto_aes128cbc(uint8_t *output, const uint8_t *input, unsigned size)
> +{
> +    AES_KEY aes;
> +    static uint8_t *iv;
> +    if ((!iv && !(iv = av_malloc(16))))
> +        fatal_error("out of memory");
> +    memcpy(iv, hardcoded_iv, 16);
> +
> +    AES_set_encrypt_key(hardcoded_key, 128, &aes);
> +    AES_cbc_encrypt(input, output, size, &aes, iv, 1);
> +}
> +
> +static void run_crypto_aes192cbc(uint8_t *output, const uint8_t *input, unsigned size)
> +{
> +    AES_KEY aes;
> +    static uint8_t *iv;
> +    if ((!iv && !(iv = av_malloc(16))))
> +        fatal_error("out of memory");
> +    memcpy(iv, hardcoded_iv, 16);
> +
> +    AES_set_encrypt_key(hardcoded_key, 192, &aes);
> +    AES_cbc_encrypt(input, output, size, &aes, iv, 1);
> +}
> +
> +static void run_crypto_aes256cbc(uint8_t *output, const uint8_t *input, unsigned size)
> +{
> +    AES_KEY aes;
> +    static uint8_t *iv;
> +    if ((!iv && !(iv = av_malloc(16))))
> +        fatal_error("out of memory");
> +    memcpy(iv, hardcoded_iv, 16);
> +
> +    AES_set_encrypt_key(hardcoded_key, 256, &aes);
> +    AES_cbc_encrypt(input, output, size, &aes, iv, 1);
> +}
> +
>  static void run_crypto_blowfish(uint8_t *output,
>                                  const uint8_t *input, unsigned size)
>  {
> @@ -355,6 +425,39 @@ static void run_gcrypt_aes256(uint8_t *output, const uint8_t *input, unsigned si
>      gcry_cipher_encrypt(aes, output, size, input, size);
>  }
>  
> +static void run_gcrypt_aes128cbc(uint8_t *output,
> +                              const uint8_t *input, unsigned size)
> +{
> +    static gcry_cipher_hd_t aes;
> +    if (!aes)
> +        gcry_cipher_open(&aes, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, 0);
> +    gcry_cipher_setkey(aes, hardcoded_key, 16);
> +    gcry_cipher_setiv(aes, hardcoded_iv, 16);
> +    gcry_cipher_encrypt(aes, output, size, input, size);
> +}
> +
> +static void run_gcrypt_aes192cbc(uint8_t *output,
> +                              const uint8_t *input, unsigned size)
> +{
> +    static gcry_cipher_hd_t aes;
> +    if (!aes)
> +        gcry_cipher_open(&aes, GCRY_CIPHER_AES192, GCRY_CIPHER_MODE_CBC, 0);
> +    gcry_cipher_setkey(aes, hardcoded_key, 24);
> +    gcry_cipher_setiv(aes, hardcoded_iv, 16);
> +    gcry_cipher_encrypt(aes, output, size, input, size);
> +}
> +
> +static void run_gcrypt_aes256cbc(uint8_t *output,
> +                              const uint8_t *input, unsigned size)
> +{
> +    static gcry_cipher_hd_t aes;
> +    if (!aes)
> +        gcry_cipher_open(&aes, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_CBC, 0);
> +    gcry_cipher_setkey(aes, hardcoded_key, 32);
> +    gcry_cipher_setiv(aes, hardcoded_iv, 16);
> +    gcry_cipher_encrypt(aes, output, size, input, size);
> +}
> +
>  static void run_gcrypt_blowfish(uint8_t *output,
>                                  const uint8_t *input, unsigned size)
>  {
> @@ -459,6 +562,30 @@ static void run_tomcrypt_aes256(uint8_t *output, const uint8_t *input, unsigned
>          aes_ecb_encrypt(input + i, output + i, &aes);
>  }
>  
> +static void run_tomcrypt_aes128cbc(uint8_t *output, const uint8_t *input, unsigned size)
> +{
> +    symmetric_CBC aes;
> +
> +    cbc_start(find_cipher("aes"), hardcoded_iv, hardcoded_key, 16, 0, &aes);
> +    cbc_encrypt(input, output, size, &aes);
> +}
> +
> +static void run_tomcrypt_aes192cbc(uint8_t *output, const uint8_t *input, unsigned size)
> +{
> +    symmetric_CBC aes;
> +
> +    cbc_start(find_cipher("aes"), hardcoded_iv, hardcoded_key, 24, 0, &aes);
> +    cbc_encrypt(input, output, size, &aes);
> +}
> +
> +static void run_tomcrypt_aes256cbc(uint8_t *output, const uint8_t *input, unsigned size)
> +{
> +    symmetric_CBC aes;
> +
> +    cbc_start(find_cipher("aes"), hardcoded_iv, hardcoded_key, 32, 0, &aes);
> +    cbc_encrypt(input, output, size, &aes);
> +}
> +
>  static void run_tomcrypt_blowfish(uint8_t *output,
>                                    const uint8_t *input, unsigned size)
>  {
> @@ -600,9 +727,12 @@ struct hash_impl implementations[] = {
>      IMPL(lavu,     "RIPEMD-128", ripemd128, "9ab8bfba2ddccc5d99c9d4cdfb844a5f")
>      IMPL(tomcrypt, "RIPEMD-128", ripemd128, "9ab8bfba2ddccc5d99c9d4cdfb844a5f")
>      IMPL_ALL("RIPEMD-160", ripemd160, "62a5321e4fc8784903bb43ab7752c75f8b25af00")
> -    IMPL_ALL("AES-128",    aes128,    "crc:ff6bc888")
> -    IMPL_ALL("AES-192",    aes192,    "crc:1022815b")
> -    IMPL_ALL("AES-256",    aes256,    "crc:792e4e8a")
> +    IMPL_ALL("AES-128-ECB",aes128,    "crc:ff6bc888")
> +    IMPL_ALL("AES-192-ECB",aes192,    "crc:1022815b")
> +    IMPL_ALL("AES-256-ECB",aes256,    "crc:792e4e8a")
> +    IMPL_ALL("AES-128-CBC",aes128cbc, "crc:0efebabe")
> +    IMPL_ALL("AES-192-CBC",aes192cbc, "crc:ee2e34e8")
> +    IMPL_ALL("AES-256-CBC",aes256cbc, "crc:0c9b875c")
>      IMPL_ALL("CAMELLIA",   camellia,  "crc:7abb59a7")
>      IMPL_ALL("CAST-128",   cast128,   "crc:456aa584")
>      IMPL_ALL("BLOWFISH",   blowfish,  "crc:33e8aa74")

> @@ -622,6 +752,8 @@ int main(int argc, char **argv)
>      unsigned i, impl, size;
>      int opt;
>  
> +    register_cipher(&aes_desc);

make alltools -j12
CC      tools/crypto_bench.o
tools/crypto_bench.c: In function ‘main’:
tools/crypto_bench.c:790:5: error: implicit declaration of function ‘register_cipher’ [-Werror=implicit-function-declaration]
tools/crypto_bench.c:790:22: error: ‘aes_desc’ undeclared (first use in this function)
tools/crypto_bench.c:790:22: note: each undeclared identifier is reported only once for each function it appears in
cc1: some warnings being treated as errors


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

It is dangerous to be right in matters on which the established authorities
are wrong. -- Voltaire
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20151013/bfa74528/attachment.sig>


More information about the ffmpeg-devel mailing list