Commit Graph

105 Commits

Author SHA1 Message Date
Andreas Rheinhardt f49375f28f avutil/aes: Don't use out-of-bounds index
Up until now, av_aes_init() uses a->round_key[0].u8 + t
as dst of memcpy where it is intended for t to greater
than 16 (u8 is an uint8_t[16]); given that round_key itself
is an array, it is actually intended for the dst to be
in a latter round_key member. To do this properly,
just cast a->round_key to unsigned char*.

This fixes the srtp, aes, aes_ctr, mov-3elist-encrypted,
mov-frag-encrypted and mov-tenc-only-encrypted
FATE-tests with (Clang-)UBSan.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-10-24 16:28:14 +02:00
Andreas Rheinhardt 73930e4f93 avutil/aes: Don't use misaligned pointers
The AES code uses av_aes_block, a union consisting of
uint64_t[2], uint32_t[4], uint8_t[4][4] and uint8_t[16].
subshift() performs byte-wise manipulations of two av_aes_blocks,
but when encrypting, it does so with a shift of two bytes;
more precisely, it uses
"av_aes_block *s1 = (av_aes_block *) (s0[0].u8 - s)"
and lateron uses the uint8_t[16] member to access s0.
Yet av_aes_block requires to be suitably aligned for
the uint64_t[2] member, which s0[0].u8 - 2 is certainly
not. This is in violation of 6.3.2.3 (7) of C11. UBSan
reports this in the aes_ctr, mov-3elist-encrypted,
mov-frag-encrypted, mov-tenc-only-encrypted and srtp
tests.
Furthermore, there is another issue here: The pointer points
outside of s0; this works, because all the accesses lateron
use an index >= 3. (Clang-)UBSan reports this as
"runtime error: index -2 out of bounds for type 'uint8_t[16]'".

This commit fixes both of these issues: The latter issue
is fixed by applying an offset of "+ 3" during the cast
and subtracting this from the indices used lateron.
The former issue is solved by not casting to av_aes_block*
at all; instead simply cast to unsigned char*.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-10-24 16:28:14 +02:00
Andreas Rheinhardt 636631d9db Remove unnecessary libavutil/(avutil|common|internal).h inclusions
Some of these were made possible by moving several common macros to
libavutil/macros.h.

While just at it, also improve the other headers a bit.

Reviewed-by: Martin Storsjö <martin@martin.st>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-02-24 12:56:49 +01:00
Derek Buitenhuis 96d616052b Merge commit 'd12b5b2f135aade4099f4b26b0fe678656158c13'
* commit 'd12b5b2f135aade4099f4b26b0fe678656158c13':
  build: Split test programs off into separate files

Some conversions done by: James Almer <jamrial@gmail.com>
Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2016-05-11 19:13:03 +01:00
Michael Niedermayer a39e3e5e7b avutil/aes: Remove duplicate include
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-04-23 02:05:53 +02:00
Derek Buitenhuis 5f587b1daf Merge commit '3b08d9d932eef09403074d5af31e10d8011e840b'
* commit '3b08d9d932eef09403074d5af31e10d8011e840b':
  testprogs: K&R formatting cosmetics

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2016-04-21 16:50:06 +01:00
Diego Biurrun d12b5b2f13 build: Split test programs off into separate files
This avoids spurious library rebuilds when only the test program
code is changed and simplifies the build system.
2016-04-07 16:14:42 +02:00
Diego Biurrun 3b08d9d932 testprogs: K&R formatting cosmetics 2016-03-24 21:45:07 +01:00
Rodger Combs cceed8389d lavu/aes: test CBC functionality 2015-10-28 09:38:21 -05:00
Rodger Combs 15ff5c7215 lavu/aes: add runtime dispatch for crypt function 2015-10-28 04:23:14 -05:00
Rodger Combs ec588db56f lavu/aes: move AVAES to separate internal header 2015-10-28 04:23:14 -05:00
Ganesh Ajjanagadde 07d4fe3a87 avutil: use EINVAL instead of -1 for the return code of crypto related init functions
These functions return an error typically when the key size is an
incorrect number. AVERROR(EINVAL) is more specific than -1.

Reviewed-by: Ronald S. Bultje <rsbultje@gmail.com>
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
2015-10-18 15:17:58 -04:00
Vittorio Giovara 2f9b652e8c lavu: Drop deprecated context size variables
Deprecated in 10/2012.
2015-08-28 16:04:27 +02:00
Michael Niedermayer fdbad24090 avutil/aes: Fix types
Fixes "warning: argument #2 is incompatible with prototype:"

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-06-19 02:25:48 +02:00
Michael Niedermayer 52d1929000 avutil/aes: Add () to protect the ROT() arguments
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-17 00:22:42 +01:00
Michael Niedermayer 0d37ca150c avutil/aes: Rename crypt()
This avoids a potential conflict with the equally named function from XOPEN
It also could reduce confusion in debugger backtraces

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-28 13:12:02 +01:00
Michael Niedermayer 965fa6b0d9 Merge commit 'fb0c9d41d685abb58575c5482ca33b8cd457c5ec'
* commit 'fb0c9d41d685abb58575c5482ca33b8cd457c5ec':
  avutil: remove timer.h include from internal.h

Conflicts:
	libavcodec/ffv1dec.c
	libavutil/internal.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-01-26 01:54:55 +01:00
Janne Grunau fb0c9d41d6 avutil: remove timer.h include from internal.h
Added libavutil/timer.h include to all files with {START,STOP}_TIMER.
2014-01-25 21:50:20 +01:00
Michael Niedermayer ac090fa68c lavu: keep context size variables
They are essential to be able to use the utils without av_malloc()
That is for example use with malloc(), memalign(), some other
private allocation function, on the stack or others.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-10-28 14:33:41 +01:00
Michael Niedermayer f391e405df Merge commit 'e002e3291e6dc7953f843abf56fc14f08f238b21'
* commit 'e002e3291e6dc7953f843abf56fc14f08f238b21':
  Use the new aes/md5/sha/tree allocation functions
  avutil: Add functions for allocating opaque contexts for algorithms
  svq3: fix pointer type warning
  svq3: replace unsafe pointer casting with intreadwrite macros
  parseutils-test: various cleanups

Conflicts:
	doc/APIchanges
	libavcodec/svq3.c
	libavutil/parseutils.c
	libavutil/version.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2012-10-12 14:52:34 +02:00
Martin Storsjö 9a92aea27b avutil: Add functions for allocating opaque contexts for algorithms
The current API where the plain size is exposed is not of much
use - in most cases it is allocated dynamically anyway.

If allocated e.g. on the stack via an uint8_t array, there's no
guarantee that the struct's members are aligned properly (unless
the array is overallocated and the opaque pointer within it
manually aligned to some unspecified alignment).

Signed-off-by: Martin Storsjö <martin@martin.st>
2012-10-11 23:35:27 +03:00
Michael Niedermayer 52c522c720 Merge remote-tracking branch 'qatar/master'
* qatar/master: (27 commits)
  asfdec: add side data to ASFStream packet instead of output packet.
  idroqdec: set AVFMTCTX_NOHEADER and create streams as they occur.
  nellymoserdec: Indicate that the decoder can handle changed parameters
  libavcodec: Apply parameter change side data when decoding audio
  flvdec: Add param change side data if the sample rate or channels have changed
  libavformat: Add a utility function for adding parameter change side data
  libavcodec: Define a side data type for parameter changes
  aacdec: Handle new extradata passed as side data
  flvdec: Export new AAC/H.264 extradata as side data on the next packet
  libavcodec: Define a side data type for new extradata
  flacdec: skip all track indices at once instead of looping.
  mxf: Add PictureEssenceCoding UL for V210.
  mxfdec: consider QuantizationBits between 17 and 24 to be pcm_s24*
  mxfenc: Add support for MPEG-2 MP@HL-14 in mxf container.
  mxf: H.264/MPEG-4 AVC Intra support
  configure: Show whether the safe bitstream reader is enabled
  x86: Tighten register constraints for decode_significance*_x86.
  Replace Subversion revisions in comments by Git hashes.
  h264_cabac: synchronize decode_significance_*_x86 conditionals
  w32threads: wait for the waked thread in pthread_cond_signal.
  ...

Conflicts:
	libavcodec/avcodec.h
	libavcodec/version.h
	libavformat/flvdec.c
	libavformat/utils.c
	tests/ref/lavfi/pixdesc
	tests/ref/lavfi/pixfmts_copy
	tests/ref/lavfi/pixfmts_null
	tests/ref/lavfi/pixfmts_scale
	tests/ref/lavfi/pixfmts_vflip

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2011-12-22 01:51:53 +01:00
Diego Biurrun c18365402b Replace Subversion revisions in comments by Git hashes. 2011-12-21 09:04:25 +01:00
Reimar Döffinger d086c1203c Add coverage exclusions for test code.
For some of the code e.g. doing timing measurements there is no
real point in running regression testing on it, thus it should
not be counted against coverage.

Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
2011-12-05 20:05:44 +01:00
Michael Niedermayer 6d91045d83 Merge remote-tracking branch 'qatar/master'
* qatar/master: (29 commits)
  doc: update libavfilter documentation
  tls: Use the URLContext as logging context
  aes: Avoid illegal read and don't generate more key than we use.
  mpc7: Fix memset call in mpc7_decode_frame function
  atrac1: use correct context for av_log()
  apedec: consume the whole packet when copying to the decoder buffer.
  apedec: do not needlessly copy s->samples to nblocks.
  apedec: check output buffer size after calculating actual output size
  apedec: remove unneeded entropy decoder normalization.
  truespeech: use memmove() in truespeech_update_filters()
  vorbisdec: remove AVCODEC_MAX_AUDIO_FRAME_SIZE check
  vorbisdec: remove unneeded buf_size==0 check
  vorbisdec: return proper error codes instead of made-up ones
  http: Don't add a Range: bytes=0- header for POST
  sunrast: Check for invalid/corrupted bitstream
  http: Change the chunksize AVOption into chunked_post
  http: Add encoding/decoding flags to the AVOptions
  avconv: remove some codec-specific hacks
  crypto: add decoding flag to options.
  tls: use AVIO_FLAG_NONBLOCK instead of deprecated URL_FLAG_NONBLOCK
  ...

Conflicts:
	doc/libavfilter.texi
	libavcodec/atrac1.c
	libavcodec/sunrast.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2011-11-11 02:50:35 +01:00
Alex Converse c9e5ac3380 aes: Avoid illegal read and don't generate more key than we use. 2011-11-10 10:15:59 -08:00
Michael Niedermayer 5d4fd1d1ad Merge remote-tracking branch 'qatar/master'
* qatar/master: (36 commits)
  ARM: allow unaligned buffer in fixed-point NEON FFT4
  fate: test more FFT etc sizes
  dca: set AVCodecContext frame_size for DTS audio
  YASM: Shut up unused variable compiler warning with --disable-yasm.
  x86_32: Fix build on x86_32 with --disable-yasm.
  iirfilter: add fate test
  doxygen: Add qmul docs.
  ogg: propagate return values and return more meaningful error values
  H.264: fix overreads of qscale_table
  Remove unused static tables and static inline functions.
  eval: clear Parser instances before using
  dct-test: remove 'ref' function pointer from tables
  build: Remove deleted 'check' target from .PHONY list.
  oggdec: Abort Ogg header parsing when encountering a data packet.
  Add LGPL license boilerplate to files lacking it.
  mxfenc: small typo fix
  doxygen: Fix documentation for some VP8 functions.
  sha: use AV_RB32() instead of assuming buffer can be cast to uint32_t*
  des: allow unaligned input and output buffers
  aes: allow unaligned input and output buffers
  ...

Conflicts:
	libavcodec/dct-test.c
	libavcodec/libvpxenc.c
	libavcodec/x86/dsputil_mmx.c
	libavcodec/x86/h264_qpel_mmx.c
	libavfilter/x86/gradfun.c
	libavformat/oggdec.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2011-07-05 02:26:17 +02:00
Mans Rullgard d04d9f24a0 aes: allow unaligned input and output buffers
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-07-04 11:07:15 +01:00
Michael Niedermayer 976a8b2179 Merge remote-tracking branch 'qatar/master'
* qatar/master: (40 commits)
  H.264: template left MB handling
  H.264: faster fill_decode_caches
  H.264: faster write_back_*
  H.264: faster fill_filter_caches
  H.264: make filter_mb_fast support the case of unavailable top mb
  Do not include log.h in avutil.h
  Do not include pixfmt.h in avutil.h
  Do not include rational.h in avutil.h
  Do not include mathematics.h in avutil.h
  Do not include intfloat_readwrite.h in avutil.h
  Remove return statements following infinite loops without break
  RTSP: Doxygen comment cleanup
  doxygen: Escape '\' in Doxygen documentation.
  md5: cosmetics
  md5: use AV_WL32 to write result
  md5: add fate test
  md5: include correct headers
  md5: fix test program
  doxygen: Drop array size declarations from Doxygen parameter names.
  doxygen: Fix parameter names to match the function prototypes.
  ...

Conflicts:
	libavcodec/x86/dsputil_mmx.c
	libavformat/flvenc.c
	libavformat/oggenc.c
	libavformat/wtv.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2011-07-04 00:45:21 +02:00
Mans Rullgard 8f175810be aes: fix for big endian systems
This was missed in 5d20f19 since CONFIG_SMALL was always broken
for big endian.

Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-07-03 13:41:42 +01:00
Mans Rullgard 5d20f19be2 aes: fix invalid array indexing in init code
This makes the code work with clang/x86_32 and removes several warnings.

Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-07-03 03:09:22 +01:00
Mans Rullgard af2ea72495 aes: use direct assignments instead of memcpy() or loops
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-07-03 03:08:52 +01:00
Michael Niedermayer 721be99371 Merge remote-tracking branch 'qatar/master'
* qatar/master:
  cosmetics: fix some then/than typos
  doxygen: Include libavcodec and libavformat examples into the documentation
  avutil: elaborate documentation for av_get_random_seed
  Add support for aac streams in mp4/mov without extradata.
  aes: whitespace cosmetics
  adler32: whitespace cosmetics
  swscale: fix another yuv range conversion overflow in 16bit scaling.
  Fix cpu flags test program
  opt-test: Add missing braces to silence compiler warnings.
  build: Eliminate obsolete test targets.
  udp: Fix a compilation warning
  swscale: Unbreak build with --enable-small
  base64: add fate test
  aes: improve test program and add fate test
  adler32: make test program more useful and add fate test
  swscale: fix yuv range correction when using 16-bit scaling.
  aacenc: Make chan_map const correct

Conflicts:
	Makefile
	doc/examples/muxing-example.c
	libavformat/udp.c
	libavutil/random_seed.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2011-07-01 05:35:26 +02:00
Mans Rullgard 4bfe064460 aes: whitespace cosmetics
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-06-30 16:50:27 +01:00
Mans Rullgard 744765a9c5 aes: improve test program and add fate test
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-06-30 09:47:32 +01:00
Mans Rullgard 2912e87a6c Replace FFmpeg with Libav in licence headers
Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-03-19 13:33:20 +00:00
Måns Rullgård c184bb44db aes: fix array index out of bounds warning
Originally committed as revision 24048 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-07-04 20:38:46 +00:00
Reimar Döffinger 19c039ee3d Make mix function more readable.
Compiler output unchanged with gcc 4.4.

Originally committed as revision 24006 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-07-02 17:33:45 +00:00
Reimar Döffinger dd025f25da Change AES code to be strict-aliasing-safe.
Makes it give correct results with e.g. gcc 4.4.
For unknown reasons the generate asm code also changes
on e.g. gcc 4.3, making the code a bit larger but also
a bit faster.

Originally committed as revision 23896 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-06-30 04:50:35 +00:00
Reimar Döffinger 2ad4a3bc78 Pass subshift an argument of the proper type.
No changes in generated code.

Originally committed as revision 23856 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-06-28 17:19:55 +00:00
Reimar Döffinger 17c78b087a Use a consistent type for multbl array function parameters.
Originally committed as revision 23855 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-06-28 17:11:48 +00:00
Diego Biurrun 64bde1974b cosmetics: Rename prn variable to prng (Pseudo Random Number Generator).
Originally committed as revision 18422 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-04-10 17:23:38 +00:00
Diego Biurrun 294eaa2643 Replace random() usage in test programs by av_lfg_*().
Originally committed as revision 18070 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-03-20 11:48:27 +00:00
Diego Biurrun b56e34c5e9 Make AES test program compile again: Setting the av_log_level variable
needs to be replaced by a call to av_log_set_level().

Originally committed as revision 18055 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-03-20 00:18:46 +00:00
Reimar Döffinger 7b484a7a17 Add "const" to AES function arguments where possible without generating
more warnings.

Originally committed as revision 16847 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-01-28 17:48:26 +00:00
Aurelien Jacobs b250f9c66d Change semantic of CONFIG_*, HAVE_* and ARCH_*.
They are now always defined to either 0 or 1.

Originally committed as revision 16590 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-01-13 23:44:16 +00:00
Diego Biurrun 43bfaa8920 Fix test program compilation, random() needs to be undefined.
Originally committed as revision 11470 to svn://svn.ffmpeg.org/ffmpeg/trunk
2008-01-08 22:40:25 +00:00
Diego Biurrun f8a80fd69d main() --> main(void)
Originally committed as revision 11079 to svn://svn.ffmpeg.org/ffmpeg/trunk
2007-11-23 00:52:56 +00:00
Reimar Döffinger ef0d7a0d4f Document aes init code writing on purpose beyond round_key array into state array.
Originally committed as revision 9734 to svn://svn.ffmpeg.org/ffmpeg/trunk
2007-07-18 12:22:07 +00:00
Diego Biurrun 2eb697a455 Move comment to a slightly better place.
Originally committed as revision 9462 to svn://svn.ffmpeg.org/ffmpeg/trunk
2007-07-02 17:00:51 +00:00