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
