[Ffmpeg-devel] [PATCH] OAEP
Michael Niedermayer
michaelni
Thu Mar 15 19:55:15 CET 2007
Hi
On Thu, Mar 15, 2007 at 06:39:26PM +0100, Vladimir Serbinenko wrote:
> Sorry. A fault of attention. I send the new patch
> Ismail D?nmez a ?crit :
> > On Thursday 15 March 2007 19:06:16 Vladimir Serbinenko wrote:
> >
> >> Hello Guys. I wrote a patch for supporting OAEP and I also corrected
> >> SHA1 which din't work when compiled in avutil because of be2me_*. I
> >> replaced them by AV_(R/W)B* I also added AV_WB64 to intreadwrite.h. RSA
the OEAP stuff should be in a seperate patch not in the same which fixes
SHA1 bugs
[...]
> Index: sha1.h
> ===================================================================
> --- sha1.h (r??vision 8386)
> +++ sha1.h (copie de travail)
> @@ -1,10 +1,15 @@
> #ifndef AV_SHA1_H
> #define AV_SHA1_H
>
> -extern const int av_sha1_size;
> +#define AV_SHA1_SIZE 20
>
> -struct AVSHA1;
> +typedef struct AVSHA1 {
> + uint64_t count;
> + uint8_t buffer[64];
> + uint32_t state[5];
> +} AVSHA1;
this breaks the seperation of implementation and interface
which requires a seperate disscussion if you think this has some advantages
>
> +
> void av_sha1_init(struct AVSHA1* context);
cosmetic change
[...]
> Index: intreadwrite.h
> ===================================================================
> --- intreadwrite.h (r??vision 8386)
> +++ intreadwrite.h (copie de travail)
> @@ -69,7 +69,17 @@
> ((uint8_t*)(p))[2] = (d)>>8; \
> ((uint8_t*)(p))[1] = (d)>>16; \
> ((uint8_t*)(p))[0] = (d)>>24; }
> +#define AV_WB64(p, d) { \
> + ((uint8_t*)(p))[7] = (d); \
> + ((uint8_t*)(p))[6] = (d)>>8; \
> + ((uint8_t*)(p))[5] = (d)>>16; \
> + ((uint8_t*)(p))[4] = (d)>>24; \
> + ((uint8_t*)(p))[3] = (d)>>32; \
> + ((uint8_t*)(p))[2] = (d)>>40; \
> + ((uint8_t*)(p))[1] = (d)>>48; \
> + ((uint8_t*)(p))[0] = (d)>>56; }
>
this should be in a seperate patch and should rather look like
#define AV_WB64(p, d) { \
AV_WB32( p , (d)>>32) \
AV_WB32((uint8_t*)(p)+4, d ) }
> +
> #define AV_RL8(x) AV_RB8(x)
cosmetic change
[...]
> +/*
> + We have to calculate:
> + r=o1^LSHA1(o2)
> + o2^LSHA1(r)
> +*/
> +/* WARNING: after RSA deciphering first byte is not a part of OAEP */
> +int
> +av_parse_oaep(uint8_t *inbuf, uint8_t *outbuf, int inlen)
comment is not doxygen compatible, also documentation for exported functions
should be in the header not source
> +{
> + uint8_t *o1, *o2;
> + uint8_t r[AV_SHA1_SIZE*3];
> + uint8_t cd[AV_SHA1_SIZE];
indention in ffmpeg should be 4 spaces
> + uint8_t *tbuf;
> + int i;
> + int outlen;
> + AVSHA1 hashctx;
> +
> + if(inlen<=AV_SHA1_SIZE)
> + return -1;
> + /* Split the message into 2 parts*/
> + o1=inbuf;
> + o2=inbuf+AV_SHA1_SIZE;
> +
> + /* Allocate tbuf*/
> + tbuf=av_malloc(inlen);
id leave the allocation of the temporary buffer to the caller this would
avoid a dependancy on av_malloc*() (less dependancies are good IMHO, makes
using the code outside libavutil easier)
[...]
> +uint8_t *fast_memcpy(uint8_t *a, uint8_t *b, int n)
> +{
> + return memcpy(a,b,n);
> +}
this doesnt belong in here
[...]
> /* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
> -#define blk0(i) (block[i] = be2me_32(((uint32_t*)buffer)[i]))
> +#define blk0(i) (block[i] = AV_RB32(&((uint32_t*)buffer)[i]))
> #define blk(i) (block[i] = rol(block[i-3]^block[i-8]^block[i-14]^block[i-16],1))
>
> #define R0(v,w,x,y,z,i) z+=((w&(x^y))^y) +blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);
> @@ -37,7 +31,7 @@
> #ifdef CONFIG_SMALL
> for(i=0; i<80; i++){
> int t;
> - if(i<16) t= be2me_32(((uint32_t*)buffer)[i]);
> + if(i<16) t= AV_RB32(((uint32_t*)buffer)[i]);
> else t= rol(block[i-3]^block[i-8]^block[i-14]^block[i-16],1);
> block[i]= t;
> t+= e+rol(a,5);
this change requires benchmarks and object size comparissions against a
variant which never passes user arrays directly in av_sha1_update()
> @@ -114,7 +108,8 @@
>
> void av_sha1_final(AVSHA1* ctx, uint8_t digest[20]){
> int i;
> - uint64_t finalcount= be2me_64(ctx->count<<3);
> + uint64_t finalcount;
> + AV_WB64(&finalcount,(ctx->count<<3));
>
> av_sha1_update(ctx, "\200", 1);
> while ((ctx->count & 63) != 56) {
> @@ -122,7 +117,7 @@
> }
> av_sha1_update(ctx, &finalcount, 8); /* Should cause a transform() */
> for(i=0; i<5; i++)
> - ((uint32_t*)digest)[i]= be2me_32(ctx->state[i]);
> + AV_WB32(&((uint32_t*)digest)[i],(ctx->state[i]));
> }
these are is unneeded
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
It is dangerous to be right in matters on which the established authorities
are wrong. -- Voltaire
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20070315/4eaabd25/attachment.pgp>
More information about the ffmpeg-devel
mailing list