[FFmpeg-devel] [PATCH] Add SHA-2

Kostya kostya.shishkov
Wed Jul 8 17:50:10 CEST 2009


On Wed, Jul 08, 2009 at 05:25:24PM +0200, Michael Niedermayer wrote:
> On Wed, Jul 08, 2009 at 07:44:31AM +0300, Kostya wrote:
> > I intend to at least try pushing RTMP client before continuing work on
> > it, and SHA-2 is used there. That's why this patch is appearing again.
> > 
> > Note: files are renamed to sha.h and sha.c since they will contain code
> > for both SHA-1 and SHA-2. Same for functions inside.
> 
[...]
> > Index: libavutil/avutil.h
> > ===================================================================
> > --- libavutil/avutil.h	(revision 19141)
> > +++ libavutil/avutil.h	(working copy)
> > @@ -35,7 +35,7 @@
> >  #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
> >  
> >  #define LIBAVUTIL_VERSION_MAJOR 50
> > -#define LIBAVUTIL_VERSION_MINOR  3
> > +#define LIBAVUTIL_VERSION_MINOR  4
> >  #define LIBAVUTIL_VERSION_MICRO  0
> >  
> >  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
> 
> you cannot rename public headers (without a major version bump)
> but iam not in favor of bumping now ...

First, this is unused inside FFmpeg (and Google code search shows only two
projects which use it).
Second, I'm pretty sure that there's no good time to bump major version.

Any suggestions on how to get the code in and/or justify major version bump are
welcome.
Also it would be good to me since bumping major version here will allow me
to use av_log() with UrlContext.

> > Index: libavutil/sha.c
> > ===================================================================
> > --- libavutil/sha.c	(revision 19141)
> > +++ libavutil/sha.c	(working copy)
> > @@ -1,6 +1,8 @@
> >  /*
> >   * Copyright (C) 2007 Michael Niedermayer <michaelni at gmx.at>
> > + * Copyright (C) 2009 Konstantin Shishkov
> >   * based on public domain SHA-1 code by Steve Reid <steve at edmweb.com>
> > + * and on BSD-licensed SHA-2 code by Aaron D. Gifford
> >   *
> >   * This file is part of FFmpeg.
> >   *
> > @@ -21,15 +23,19 @@
> >  
> >  #include "common.h"
> >  #include "bswap.h"
> > -#include "sha1.h"
> > +#include "sha.h"
> >  
> > -typedef struct AVSHA1 {
> > -    uint64_t count;
> > -    uint8_t buffer[64];
> > -    uint32_t state[5];
> > -} AVSHA1;
> > +/** hash context */
> > +typedef struct AVSHA {
> > +    uint8_t  digest_len;  ///< digest length in 32-bit words
> > +    uint32_t state[8];    ///< current hash value
> > +    uint8_t  buffer[64];  ///< 512-bit buffer of input values used in hash updating 
> > +    uint64_t count;       ///< number of bytes in buffer
> > +    /** function used to update hash for 512-bit input block */
> > +    void     (*transform)(uint32_t *state, const uint8_t buffer[64]);
> > +} AVSHA;
> 
> renaming non public things to sha without the 1 is ok and can be commited
> adding doxy is ok as well in a seperate patch
> 
> adding the transform field is also ok as a serate patch

ok 
 
> >  
> > -const int av_sha1_size = sizeof(AVSHA1);
> > +const int av_sha_size = sizeof(AVSHA);
> >  
> >  #define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
> >  
> 
> breaks ABI id guess

yes, since it's public
 
> > @@ -43,9 +49,8 @@
> >  #define R3(v,w,x,y,z,i) z += (((w|x)&y)|(w&x)) + blk (i) + 0x8F1BBCDC + rol(v, 5); w = rol(w, 30);
> >  #define R4(v,w,x,y,z,i) z += ( w^x     ^y)     + blk (i) + 0xCA62C1D6 + rol(v, 5); w = rol(w, 30);
> >  
> > -/* Hash a single 512-bit block. This is the core of the algorithm. */
> >  
> 
> 
> > -static void transform(uint32_t state[5], const uint8_t buffer[64])
> > +static void sha1_transform(uint32_t *state, const uint8_t buffer[64])
> >  {
> >      uint32_t block[80];
> >      unsigned int i, a, b, c, d, e;
> 
> probably belongs to the sha/sha1 rename
 
I think this one can be changed any time.
 
> [...]
> -- 
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB



More information about the ffmpeg-devel mailing list