[FFmpeg-devel] [PATCH v1] Add support for TEA (Tiny Encryption Algorithm)

James Almer jamrial at gmail.com
Sun Jul 19 23:32:08 CEST 2015


On 19/07/15 6:08 PM, Vesselin Bontchev wrote:
> diff --git a/libavutil/tea.h b/libavutil/tea.h
> new file mode 100644
> index 0000000..1db6987
> --- /dev/null
> +++ b/libavutil/tea.h
> @@ -0,0 +1,66 @@
> +/*
> + * A 32-bit implementation of the TEA algorithm
> + * Copyright (c) 2015 Vesselin Bontchev
> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> +#ifndef AVUTIL_TEA_H
> +#define AVUTIL_TEA_H
> +
> +#include <stdint.h>
> +
> +/**
> + * @file
> + * @brief Public header for libavutil TEA algorithm
> + * @defgroup lavu_tea TEA
> + * @ingroup lavu_crypto
> + * @{
> + */
> +
> +typedef struct AVTEA {
> +    uint32_t key[16];
> +    int rounds;
> +} AVTEA;

This should be in the c file, and an av_tea_alloc() function and av_camellia_size constant
added.
See how other cyphers do it (AES, Camellia, Cast, etc).

Also, you should add a FATE test that runs the test code (can be done in a separate patch).

> +
> +/**
> + * Initialize an AVTEA context.
> + *
> + * @param ctx an AVTEA context
> + * @param key a key of 16 bytes used for encryption/decryption
> + * @param rounds the number of rounds in TEA (64 is the "standard")
> + */
> +void av_tea_init(struct AVTEA *ctx, const uint8_t key[16], int rounds);
> +
> +/**
> + * Encrypt or decrypt a buffer using a previously initialized context.
> + *
> + * @param ctx an AVTEA context
> + * @param dst destination array, can be equal to src
> + * @param src source array, can be equal to dst
> + * @param count number of 8 byte blocks
> + * @param iv initialization vector for CBC mode, if NULL then ECB will be used
> + * @param decrypt 0 for encryption, 1 for decryption
> + */
> +void av_tea_crypt(struct AVTEA *ctx, uint8_t *dst, const uint8_t *src,
> +                  int count, uint8_t *iv, int decrypt);
> +
> +/**
> + * @}
> + */
> +
> +#endif /* AVUTIL_TEA_H */
> -- 1.7.10.4



More information about the ffmpeg-devel mailing list