FFmpeg
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Functions | Variables
des.c File Reference
#include <inttypes.h>
#include "avutil.h"
#include "common.h"
#include "intreadwrite.h"
#include "des.h"

Go to the source code of this file.

Macros

#define T(a, b, c, d, e, f, g, h)   64-a,64-b,64-c,64-d,64-e,64-f,64-g,64-h
 
#define T(a, b, c, d, e, f, g)   64-a,64-b,64-c,64-d,64-e,64-f,64-g
 
#define T(a, b, c, d, e, f)   56-a,56-b,56-c,56-d,56-e,56-f
 

Functions

static uint64_t shuffle (uint64_t in, const uint8_t *shuffle, int shuffle_len)
 
static uint64_t shuffle_inv (uint64_t in, const uint8_t *shuffle, int shuffle_len)
 
static uint32_t f_func (uint32_t r, uint64_t k)
 
static uint64_t key_shift_left (uint64_t CDn)
 rotate the two halves of the expanded 56 bit key each 1 bit left
 
static void gen_roundkeys (uint64_t K[16], uint64_t key)
 
static uint64_t des_encdec (uint64_t in, uint64_t K[16], int decrypt)
 
int av_des_init (AVDES *d, const uint8_t *key, int key_bits, av_unused int decrypt)
 
static void av_des_crypt_mac (AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt, int mac)
 
void av_des_crypt (AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt)
 Encrypts / decrypts using the DES algorithm.
 
void av_des_mac (AVDES *d, uint8_t *dst, const uint8_t *src, int count)
 Calculates CBC-MAC using the DES algorithm.
 

Variables

static const uint8_t IP_shuffle []
 
static const uint8_t PC1_shuffle []
 
static const uint8_t PC2_shuffle []
 
static const uint32_t S_boxes_P_shuffle [8][64]
 This table contains the results of applying both the S-box and P-shuffle.
 

Macro Definition Documentation

#define T (   a,
  b,
  c,
  d,
  e,
  f,
  g,
 
)    64-a,64-b,64-c,64-d,64-e,64-f,64-g,64-h

Definition at line 70 of file des.c.

#define T (   a,
  b,
  c,
  d,
  e,
  f,
  g 
)    64-a,64-b,64-c,64-d,64-e,64-f,64-g

Definition at line 70 of file des.c.

#define T (   a,
  b,
  c,
  d,
  e,
 
)    56-a,56-b,56-c,56-d,56-e,56-f

Definition at line 70 of file des.c.

Function Documentation

static uint64_t shuffle ( uint64_t  in,
const uint8_t shuffle,
int  shuffle_len 
)
static

Definition at line 200 of file des.c.

Referenced by des_encdec(), f_func(), and gen_roundkeys().

static uint64_t shuffle_inv ( uint64_t  in,
const uint8_t shuffle,
int  shuffle_len 
)
static

Definition at line 208 of file des.c.

Referenced by des_encdec().

static uint32_t f_func ( uint32_t  r,
uint64_t  k 
)
static

Definition at line 219 of file des.c.

Referenced by des_encdec().

static uint64_t key_shift_left ( uint64_t  CDn)
static

rotate the two halves of the expanded 56 bit key each 1 bit left

Note: the specification calls this "shift", so I kept it although it is confusing.

Definition at line 250 of file des.c.

Referenced by gen_roundkeys().

static void gen_roundkeys ( uint64_t  K[16],
uint64_t  key 
)
static

Definition at line 258 of file des.c.

Referenced by av_des_init().

static uint64_t des_encdec ( uint64_t  in,
uint64_t  K[16],
int  decrypt 
)
static

Definition at line 271 of file des.c.

Referenced by av_des_crypt_mac().

int av_des_init ( AVDES d,
const uint8_t key,
int  key_bits,
av_unused int  decrypt 
)

Definition at line 289 of file des.c.

Referenced by ff_asfcrypt_dec(), nprobe(), and rprobe().

static void av_des_crypt_mac ( AVDES d,
uint8_t dst,
const uint8_t src,
int  count,
uint8_t iv,
int  decrypt,
int  mac 
)
static

Definition at line 301 of file des.c.

Referenced by av_des_crypt(), and av_des_mac().

void av_des_crypt ( struct AVDES d,
uint8_t dst,
const uint8_t src,
int  count,
uint8_t iv,
int  decrypt 
)

Encrypts / decrypts using the DES algorithm.

Parameters
countnumber of 8 byte blocks
dstdestination array, can be equal to src, must be 8-byte aligned
srcsource array, can be equal to dst, must be 8-byte aligned, may be NULL
ivinitialization vector for CBC mode, if NULL then ECB will be used, must be 8-byte aligned
decrypt0 for encryption, 1 for decryption

Definition at line 331 of file des.c.

Referenced by ff_asfcrypt_dec(), nprobe(), oma_read_packet(), and rprobe().

void av_des_mac ( struct AVDES d,
uint8_t dst,
const uint8_t src,
int  count 
)

Calculates CBC-MAC using the DES algorithm.

Parameters
countnumber of 8 byte blocks
dstdestination array, can be equal to src, must be 8-byte aligned
srcsource array, can be equal to dst, must be 8-byte aligned, may be NULL

Definition at line 335 of file des.c.

Referenced by rprobe().

Variable Documentation

const uint8_t IP_shuffle[]
static
Initial value:
= {
T(58, 50, 42, 34, 26, 18, 10, 2),
T(60, 52, 44, 36, 28, 20, 12, 4),
T(62, 54, 46, 38, 30, 22, 14, 6),
T(64, 56, 48, 40, 32, 24, 16, 8),
T(57, 49, 41, 33, 25, 17, 9, 1),
T(59, 51, 43, 35, 27, 19, 11, 3),
T(61, 53, 45, 37, 29, 21, 13, 5),
}

Definition at line 30 of file des.c.

Referenced by des_encdec().

const uint8_t PC1_shuffle[]
static
Initial value:
= {
T(57, 49, 41, 33, 25, 17, 9),
T( 1, 58, 50, 42, 34, 26, 18),
T(10, 2, 59, 51, 43, 35, 27),
T(19, 11, 3, 60, 52, 44, 36),
T(63, 55, 47, 39, 31, 23, 15),
T( 7, 62, 54, 46, 38, 30, 22),
T(14, 6, 61, 53, 45, 37, 29),
}

Definition at line 58 of file des.c.

Referenced by gen_roundkeys().

const uint8_t PC2_shuffle[]
static
Initial value:
= {
T(14, 17, 11, 24, 1, 5),
T( 3, 28, 15, 6, 21, 10),
T(23, 19, 12, 4, 26, 8),
T(16, 7, 27, 20, 13, 2),
T(41, 52, 31, 37, 47, 55),
T(30, 40, 51, 45, 33, 48),
T(44, 49, 39, 56, 34, 53),
}

Definition at line 71 of file des.c.

Referenced by gen_roundkeys().

const uint32_t S_boxes_P_shuffle[8][64]
static

This table contains the results of applying both the S-box and P-shuffle.

It can be regenerated by compiling this file with -DCONFIG_SMALL -DTEST -DGENTABLES

Definition at line 116 of file des.c.

Referenced by f_func().