asfcrypt.c File Reference
#include "libavutil/bswap.h"
#include "libavutil/common.h"
#include "libavutil/des.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/rc4.h"
#include "asfcrypt.h"
Include dependency graph for asfcrypt.c:

Go to the source code of this file.

Functions

static uint32_t inverse (uint32_t v)
 find multiplicative inverse modulo 2 ^ 32 More...
 
static void multiswap_init (const uint8_t keybuf[48], uint32_t keys[12])
 read keys from keybuf into keys More...
 
static void multiswap_invert_keys (uint32_t keys[12])
 invert the keys so that encryption become decryption keys and the other way round. More...
 
static uint32_t multiswap_step (const uint32_t keys[12], uint32_t v)
 
static uint32_t multiswap_inv_step (const uint32_t keys[12], uint32_t v)
 
static uint64_t multiswap_enc (const uint32_t keys[12], uint64_t key, uint64_t data)
 "MultiSwap" encryption More...
 
static uint64_t multiswap_dec (const uint32_t keys[12], uint64_t key, uint64_t data)
 "MultiSwap" decryption More...
 
void ff_asfcrypt_dec (const uint8_t key[20], uint8_t *data, int len)
 

Function Documentation

void ff_asfcrypt_dec ( const uint8_t  key[20],
uint8_t data,
int  len 
)

Definition at line 147 of file asfcrypt.c.

Referenced by ff_asf_parse_packet().

static uint32_t inverse ( uint32_t  v)
static

find multiplicative inverse modulo 2 ^ 32

Parameters
vnumber to invert, must be odd!
Returns
number so that result * v = 1 (mod 2^32)

Definition at line 35 of file asfcrypt.c.

Referenced by av_fft_end(), ff_dct_init(), ff_fft_init(), and multiswap_invert_keys().

static uint64_t multiswap_dec ( const uint32_t  keys[12],
uint64_t  key,
uint64_t  data 
)
static

"MultiSwap" decryption

Parameters
keys32 bit numbers in machine endianness, 0-4 and 6-10 must be inverted from encryption
keyanother key, this one must be the same as for the encryption
datadata to decrypt
Returns
decrypted data

Definition at line 131 of file asfcrypt.c.

Referenced by ff_asfcrypt_dec().

static uint64_t multiswap_enc ( const uint32_t  keys[12],
uint64_t  key,
uint64_t  data 
)
static

"MultiSwap" encryption

Parameters
keys32 bit numbers in machine endianness, 0-4 and 6-10 must be inverted from decryption
keyanother key, this one must be the same for the decryption
datadata to encrypt
Returns
encrypted data

Definition at line 107 of file asfcrypt.c.

Referenced by ff_asfcrypt_dec().

static void multiswap_init ( const uint8_t  keybuf[48],
uint32_t  keys[12] 
)
static

read keys from keybuf into keys

Parameters
keybufbuffer containing the keys
keysoutput key array containing the keys for encryption in native endianness

Definition at line 54 of file asfcrypt.c.

Referenced by ff_asfcrypt_dec().

static uint32_t multiswap_inv_step ( const uint32_t  keys[12],
uint32_t  v 
)
static

Definition at line 87 of file asfcrypt.c.

Referenced by multiswap_dec().

static void multiswap_invert_keys ( uint32_t  keys[12])
static

invert the keys so that encryption become decryption keys and the other way round.

Parameters
keyskey array of ints to invert

Definition at line 66 of file asfcrypt.c.

Referenced by ff_asfcrypt_dec().

static uint32_t multiswap_step ( const uint32_t  keys[12],
uint32_t  v 
)
static

Definition at line 75 of file asfcrypt.c.

Referenced by multiswap_enc().