FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Functions | Variables
cast5.c File Reference
#include "cast5.h"
#include "common.h"
#include "intreadwrite.h"
#include "attributes.h"

Go to the source code of this file.

Data Structures

struct  AVCAST5
 

Macros

#define IA(x)   ((x) >> 24)
 
#define IB(x)   (((x) >> 16) & 0xff)
 
#define IC(x)   (((x) >> 8) & 0xff)
 
#define ID(x)   ((x) & 0xff)
 
#define LR(x, c)   (((x) << (c)) | ((x) >> (32 - (c))))
 
#define F3(l, r, i)
 
#define F2(l, r, i)
 
#define F1(l, r, i)
 
#define COMPUTE_Z
 
#define COMPUTE_X
 

Functions

static void generate_round_keys (int rnds, uint32_t *K, uint32_t *x, uint32_t *z)
 
static void encipher (AVCAST5 *cs, uint8_t *dst, const uint8_t *src)
 
static void decipher (AVCAST5 *cs, uint8_t *dst, const uint8_t *src, uint8_t *iv)
 
struct AVCAST5av_cast5_alloc (void)
 Allocate an AVCAST5 context To free the struct: av_free(ptr)
 
av_cold int av_cast5_init (AVCAST5 *cs, const uint8_t *key, int key_bits)
 Initialize an AVCAST5 context.
 
void av_cast5_crypt2 (AVCAST5 *cs, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt)
 Encrypt or decrypt a buffer using a previously initialized context.
 
void av_cast5_crypt (AVCAST5 *cs, uint8_t *dst, const uint8_t *src, int count, int decrypt)
 Encrypt or decrypt a buffer using a previously initialized context, ECB mode only.
 

Variables

const int av_cast5_size = sizeof(AVCAST5)
 
static const uint32_t S1 [256]
 
static const uint32_t S2 [256]
 
static const uint32_t S3 [256]
 
static const uint32_t S4 [256]
 
static const uint32_t S5 [256]
 
static const uint32_t S6 [256]
 
static const uint32_t S7 [256]
 
static const uint32_t S8 [256]
 

Macro Definition Documentation

#define IA (   x)    ((x) >> 24)

Definition at line 26 of file cast5.c.

Referenced by generate_round_keys().

#define IB (   x)    (((x) >> 16) & 0xff)

Definition at line 27 of file cast5.c.

Referenced by generate_round_keys().

#define IC (   x)    (((x) >> 8) & 0xff)

Definition at line 28 of file cast5.c.

Referenced by generate_round_keys().

#define ID (   x)    ((x) & 0xff)

Definition at line 29 of file cast5.c.

Referenced by generate_round_keys().

#define LR (   x,
  c 
)    (((x) << (c)) | ((x) >> (32 - (c))))

Definition at line 31 of file cast5.c.

#define F3 (   l,
  r,
 
)
Value:
do { \
I = LR(cs->Km[i] - r, cs->Kr[i]); \
f = ((S1[IA(I)] + S2[IB(I)]) ^ S3[IC(I)]) - S4[ID(I)]; \
l = f ^ l; \
} while (0)

Definition at line 33 of file cast5.c.

Referenced by decipher(), and encipher().

#define F2 (   l,
  r,
 
)
Value:
do { \
I = LR(cs->Km[i] ^ r, cs->Kr[i]); \
f = ((S1[IA(I)] - S2[IB(I)]) + S3[IC(I)]) ^ S4[ID(I)]; \
l = f ^ l; \
} while (0)

Definition at line 40 of file cast5.c.

Referenced by decipher(), and encipher().

#define F1 (   l,
  r,
 
)
Value:
do { \
I = LR(cs->Km[i] + r, cs->Kr[i]); \
f = ((S1[IA(I)] ^ S2[IB(I)]) - S3[IC(I)]) + S4[ID(I)]; \
l = f ^ l; \
} while (0)

Definition at line 47 of file cast5.c.

Referenced by decipher(), and encipher().

#define COMPUTE_Z
Value:
do { \
z[0] = x[0] ^ S5[IB(x[3])] ^ S6[ID(x[3])] ^ S7[IA(x[3])] ^ S8[IC(x[3])] ^ S7[IA(x[2])]; \
z[1] = x[2] ^ S5[IA(z[0])] ^ S6[IC(z[0])] ^ S7[IB(z[0])] ^ S8[ID(z[0])] ^ S8[IC(x[2])]; \
z[2] = x[3] ^ S5[ID(z[1])] ^ S6[IC(z[1])] ^ S7[IB(z[1])] ^ S8[IA(z[1])] ^ S5[IB(x[2])]; \
z[3] = x[1] ^ S5[IC(z[2])] ^ S6[IB(z[2])] ^ S7[ID(z[2])] ^ S8[IA(z[2])] ^ S6[ID(x[2])]; \
} while (0)

Definition at line 54 of file cast5.c.

Referenced by generate_round_keys().

#define COMPUTE_X
Value:
do { \
x[0] = z[2] ^ S5[IB(z[1])] ^ S6[ID(z[1])] ^ S7[IA(z[1])] ^ S8[IC(z[1])] ^ S7[IA(z[0])]; \
x[1] = z[0] ^ S5[IA(x[0])] ^ S6[IC(x[0])] ^ S7[IB(x[0])] ^ S8[ID(x[0])] ^ S8[IC(z[0])]; \
x[2] = z[1] ^ S5[ID(x[1])] ^ S6[IC(x[1])] ^ S7[IB(x[1])] ^ S8[IA(x[1])] ^ S5[IB(z[0])]; \
x[3] = z[3] ^ S5[IC(x[2])] ^ S6[IB(x[2])] ^ S7[ID(x[2])] ^ S8[IA(x[2])] ^ S6[ID(z[0])]; \
} while (0)

Definition at line 62 of file cast5.c.

Referenced by generate_round_keys().

Function Documentation

static void generate_round_keys ( int  rnds,
uint32_t *  K,
uint32_t *  x,
uint32_t *  z 
)
static

Definition at line 359 of file cast5.c.

Referenced by av_cast5_init().

static void encipher ( AVCAST5 cs,
uint8_t dst,
const uint8_t src 
)
static

Definition at line 392 of file cast5.c.

Referenced by av_cast5_crypt(), and av_cast5_crypt2().

static void decipher ( AVCAST5 cs,
uint8_t dst,
const uint8_t src,
uint8_t iv 
)
static

Definition at line 419 of file cast5.c.

Referenced by av_cast5_crypt(), and av_cast5_crypt2().

Variable Documentation

const uint32_t S1[256]
static

Definition at line 79 of file cast5.c.

const uint32_t S2[256]
static

Definition at line 114 of file cast5.c.

const uint32_t S3[256]
static

Definition at line 149 of file cast5.c.

const uint32_t S4[256]
static

Definition at line 184 of file cast5.c.

const uint32_t S5[256]
static

Definition at line 219 of file cast5.c.

Referenced by generate_round_keys().

const uint32_t S6[256]
static

Definition at line 254 of file cast5.c.

Referenced by generate_round_keys().

const uint32_t S7[256]
static

Definition at line 289 of file cast5.c.

Referenced by generate_round_keys().

const uint32_t S8[256]
static

Definition at line 324 of file cast5.c.

Referenced by generate_round_keys().