[FFmpeg-devel] [PATCH] strict-aliasing-safe aes.c

Reimar Döffinger Reimar.Doeffinger
Tue Jun 29 18:07:35 CEST 2010


On Tue, Jun 29, 2010 at 04:58:33PM +0100, M?ns Rullg?rd wrote:
> Reimar D?ffinger <Reimar.Doeffinger at gmx.de> writes:
> 
> > Index: libavutil/aes.h
> > ===================================================================
> > --- libavutil/aes.h	(revision 23881)
> > +++ libavutil/aes.h	(working copy)
> > @@ -27,12 +27,19 @@
> >  
> >  struct AVAES;
> >  
> > +typedef union {
> > +    uint64_t u64[2];
> > +    uint32_t u32[4];
> > +    uint8_t u8x4[4][4];
> > +    uint8_t u8[16];
> > +} av_aes_block;
> > +
> >  /**
> >   * Initializes an AVAES context.
> >   * @param key_bits 128, 192 or 256
> >   * @param decrypt 0 for encryption, 1 for decryption
> >   */
> > -int av_aes_init(struct AVAES *a, const uint8_t *key, int key_bits, int decrypt);
> > +int av_aes_init(struct AVAES *a, const av_aes_block *key, int key_bits, int decrypt);
> >  
> >  /**
> >   * Encrypts / decrypts.
> > @@ -42,6 +49,7 @@
> >   * @param iv initialization vector for CBC mode, if NULL then ECB will be used
> >   * @param decrypt 0 for encryption, 1 for decryption
> >   */
> > -void av_aes_crypt(struct AVAES *a, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt);
> > +void av_aes_crypt(struct AVAES *a, av_aes_block *dst, const av_aes_block *src,
> > +                  int count, av_aes_block *iv, int decrypt);
> >  
> >  #endif /* AVUTIL_AES_H */
> 
> Are these API changes necessary?  Can't the rest of the fixes be done
> without this?

No, they are not necessary, however I am in favour of at least having
av_aes_block available to allow for easy allocation of data
with suitable alignment.
(well, and not doing them would mean adding an additional cast to av_aes_block *
into a local variable I guess).



More information about the ffmpeg-devel mailing list