Browse Source

rtmpcrypt: Do the xtea decryption in little endian mode

The XTEA algorithm operates on 32 bit numbers, not on byte sequences.
The XTEA implementation in libavutil is written assuming big endian
numbers, while the rtmpe signature encryption assumes little endian.

This fixes rtmpe communication with rtmpe servers that use signature
type 8 (XTEA), e.g. crunchyroll.

CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
(cherry picked from commit e7728319b9)

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
tags/n2.8.3
Martin Storsjö Michael Niedermayer 10 years ago
parent
commit
1290c85c9d
1 changed files with 6 additions and 1 deletions
  1. +6
    -1
      libavformat/rtmpcrypt.c

+ 6
- 1
libavformat/rtmpcrypt.c View File

@@ -184,9 +184,14 @@ int ff_rtmpe_compute_secret_key(URLContext *h, const uint8_t *serverdata,
static void rtmpe8_sig(const uint8_t *in, uint8_t *out, int key_id)
{
struct AVXTEA ctx;
uint8_t tmpbuf[8];

av_xtea_init(&ctx, rtmpe8_keys[key_id]);
av_xtea_crypt(&ctx, out, in, 1, NULL, 0);
AV_WB32(tmpbuf, AV_RL32(in));
AV_WB32(tmpbuf + 4, AV_RL32(in + 4));
av_xtea_crypt(&ctx, tmpbuf, tmpbuf, 1, NULL, 0);
AV_WL32(out, AV_RB32(tmpbuf));
AV_WL32(out + 4, AV_RB32(tmpbuf + 4));
}

static void rtmpe9_sig(const uint8_t *in, uint8_t *out, int key_id)


Loading…
Cancel
Save