On Wed, 20 Apr 2011 16:27:58 +0300, Martin Storsjö <[email protected]> wrote:
> This can later be extended to support other AES bit sizes,
> encryption, other crypto algorithms, reading the key from a URL, etc.
> 
> In order to use it, the key and initialization vector has to be
> passed via AVOptions. Since such options can't be passed to
> protocols from the command line, the protocol is currently
> only for libavformat internal use.
> ---
>  libavformat/Makefile     |    1 +
>  libavformat/allformats.c |    1 +
>  libavformat/crypto.c     |  170 
> ++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 172 insertions(+), 0 deletions(-)
>  create mode 100644 libavformat/crypto.c
> 
> diff --git a/libavformat/Makefile b/libavformat/Makefile
> index 5e029ed..e2e3982 100644
> --- a/libavformat/Makefile
> +++ b/libavformat/Makefile
> @@ -312,6 +312,7 @@ OBJS+= avio.o aviobuf.o
>  
>  OBJS-$(CONFIG_APPLEHTTP_PROTOCOL)        += applehttpproto.o
>  OBJS-$(CONFIG_CONCAT_PROTOCOL)           += concat.o
> +OBJS-$(CONFIG_CRYPTO_PROTOCOL)           += crypto.o
>  OBJS-$(CONFIG_FILE_PROTOCOL)             += file.o
>  OBJS-$(CONFIG_GOPHER_PROTOCOL)           += gopher.o
>  OBJS-$(CONFIG_HTTP_PROTOCOL)             += http.o httpauth.o
> diff --git a/libavformat/allformats.c b/libavformat/allformats.c
> index 931947d..f1c3d3b 100644
> --- a/libavformat/allformats.c
> +++ b/libavformat/allformats.c
> @@ -235,6 +235,7 @@ void av_register_all(void)
>      /* protocols */
>      REGISTER_PROTOCOL (APPLEHTTP, applehttp);
>      REGISTER_PROTOCOL (CONCAT, concat);
> +    REGISTER_PROTOCOL (CRYPTO, crypto);
>      REGISTER_PROTOCOL (FILE, file);
>      REGISTER_PROTOCOL (GOPHER, gopher);
>      REGISTER_PROTOCOL (HTTP, http);
> diff --git a/libavformat/crypto.c b/libavformat/crypto.c
> new file mode 100644
> index 0000000..4157c4d
> --- /dev/null
> +++ b/libavformat/crypto.c
> @@ -0,0 +1,170 @@
> +/*
> + * Decryption protocol handler
> + * Copyright (c) 2011 Martin Storsjo
> + *
> + * This file is part of Libav.
> + *
> + * Libav 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.
> + *
> + * Libav 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 Libav; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 
> USA
> + */
> +
> +#include "avformat.h"
> +#include "libavutil/aes.h"
> +#include "libavutil/avstring.h"
> +#include "libavutil/opt.h"
> +#include "internal.h"
> +#include "url.h"
> +
> +#define MAX_BUFFER_BLOCKS 150
> +#define BLOCKSIZE 16
> +
> +typedef struct {
> +    const AVClass *class;
> +    URLContext *hd;
> +    uint8_t inbuffer [BLOCKSIZE*MAX_BUFFER_BLOCKS],
> +            outbuffer[BLOCKSIZE*MAX_BUFFER_BLOCKS];
> +    uint8_t *outptr;
> +    int indata, indata_used, outdata;
> +    int eof;
> +    uint8_t *key;
> +    int keylen;
> +    uint8_t *iv;
> +    int ivlen;
> +    struct AVAES *aes;
> +} CryptoContext;
> +
> +#define OFFSET(x) offsetof(CryptoContext, x)
> +static const AVOption options[] = {
> +    {"key", "", OFFSET(key), FF_OPT_TYPE_BINARY },
> +    {"iv",  "", OFFSET(iv),  FF_OPT_TYPE_BINARY },

This could use more verbosity, especially if it'll be visible to users
later on.

Otherwise looks fine to me.

-- 
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to