diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-09-30 17:46:37 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-09-30 17:52:45 +0200 |
commit | 48154c25941b77428924d90c609d0a2e7ba4f275 (patch) | |
tree | 1d809c93e6479980826596db2348dc9098c0454a /libavutil/xtea.c | |
parent | a4dcdd04d7dc2fce0a0f683d361d6d4760a152f9 (diff) | |
download | ffmpeg-48154c25941b77428924d90c609d0a2e7ba4f275.tar.gz |
xtea: move iv decrypt handling code into xtea_crypt_ecb()
this simplifies things are avoids a temporary
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavutil/xtea.c')
-rw-r--r-- | libavutil/xtea.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/libavutil/xtea.c b/libavutil/xtea.c index c952042531..36b0ce0dc1 100644 --- a/libavutil/xtea.c +++ b/libavutil/xtea.c @@ -36,7 +36,7 @@ void av_xtea_init(AVXTEA *ctx, const uint8_t key[16]) } static void xtea_crypt_ecb(AVXTEA *ctx, uint8_t *dst, const uint8_t *src, - int decrypt) + int decrypt, uint8_t *iv) { uint32_t v0, v1; uint32_t k0 = ctx->key[0]; @@ -94,6 +94,11 @@ static void xtea_crypt_ecb(AVXTEA *ctx, uint8_t *dst, const uint8_t *src, DSTEP(0xDAA66D2BU, k1, k2); DSTEP(0x3C6EF372U, k2, k1); DSTEP(0x9E3779B9U, k3, k0); + if(iv){ + v0 ^= AV_RB32(iv ); + v1 ^= AV_RB32(iv+4); + memcpy(iv, src, 8); + } #endif } else { #if CONFIG_SMALL @@ -152,23 +157,10 @@ void av_xtea_crypt(AVXTEA *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt) { int i; - uint8_t iv_tmp[8]; if (decrypt) { while (count--) { - if (src == dst) - memcpy(iv_tmp, src, 8); - - xtea_crypt_ecb(ctx, dst, src, decrypt); - - if (iv) { - for (i = 0; i < 8; i++) - dst[i] = dst[i] ^ iv[i]; - if (src == dst) - memcpy(iv, iv_tmp, 8); - else - memcpy(iv, src, 8); - } + xtea_crypt_ecb(ctx, dst, src, decrypt, iv); src += 8; dst += 8; @@ -178,10 +170,10 @@ void av_xtea_crypt(AVXTEA *ctx, uint8_t *dst, const uint8_t *src, int count, if (iv) { for (i = 0; i < 8; i++) dst[i] = src[i] ^ iv[i]; - xtea_crypt_ecb(ctx, dst, dst, decrypt); + xtea_crypt_ecb(ctx, dst, dst, decrypt, NULL); memcpy(iv, dst, 8); } else { - xtea_crypt_ecb(ctx, dst, src, decrypt); + xtea_crypt_ecb(ctx, dst, src, decrypt, NULL); } src += 8; dst += 8; |