FFmpeg
Data Structures | Macros | Functions | Variables
md5.c File Reference
#include <stdint.h>
#include <string.h>
#include "bswap.h"
#include "intreadwrite.h"
#include "macros.h"
#include "mem.h"
#include "md5.h"

Go to the source code of this file.

Data Structures

struct  AVMD5
 

Macros

#define CORE(i, a, b, c, d)
 
#define CORE2(i)
 
#define CORE4(i)   CORE2(i); CORE2((i + 4)); CORE2((i + 8)); CORE2((i + 12))
 

Functions

struct AVMD5av_md5_alloc (void)
 Allocate an AVMD5 context. More...
 
static void body (uint32_t ABCD[4], const uint8_t *src, size_t nblocks)
 
void av_md5_init (AVMD5 *ctx)
 Initialize MD5 hashing. More...
 
void av_md5_update (AVMD5 *ctx, const uint8_t *src, size_t len)
 Update hash value. More...
 
void av_md5_final (AVMD5 *ctx, uint8_t *dst)
 Finish hashing and output digest value. More...
 
void av_md5_sum (uint8_t *dst, const uint8_t *src, size_t len)
 Hash an array of data. More...
 

Variables

const int av_md5_size = sizeof(AVMD5)
 
static const uint8_t S [4][4]
 
static const uint32_t T [64]
 

Macro Definition Documentation

◆ CORE

#define CORE (   i,
  a,
  b,
  c,
 
)
Value:
do { \
t = S[i >> 4][i & 3]; \
a += T[i]; \
if (i < 32) { \
if (i < 16) \
a += (d ^ (b & (c ^ d))) + AV_RL32(X+( i & 15));\
else \
a += ((d & b) | (~d & c)) + AV_RL32(X+((1 + 5*i) & 15));\
} else { \
if (i < 48) \
a += (b ^ c ^ d) + AV_RL32(X+((5 + 3*i) & 15));\
else \
a += (c ^ (b | ~d)) + AV_RL32(X+(( 7*i) & 15));\
} \
a = b + (a << t | a >> (32 - t)); \
} while (0)

Definition at line 84 of file md5.c.

◆ CORE2

#define CORE2 (   i)
Value:
CORE(i, a, b, c, d); CORE((i + 1), d, a, b, c); \
CORE((i + 2), c, d, a, b); CORE((i + 3), b, c, d, a)

◆ CORE4

#define CORE4 (   i)    CORE2(i); CORE2((i + 4)); CORE2((i + 8)); CORE2((i + 12))

Function Documentation

◆ body()

static void body ( uint32_t  ABCD[4],
const uint8_t *  src,
size_t  nblocks 
)
static

Definition at line 103 of file md5.c.

Referenced by av_md5_update(), and http_write_reply().

Variable Documentation

◆ S

const uint8_t S[4][4]
static
Initial value:
= {
{ 7, 12, 17, 22 },
{ 5, 9, 14, 20 },
{ 4, 11, 16, 23 },
{ 6, 10, 15, 21 }
}

Definition at line 55 of file md5.c.

◆ T

const uint32_t T[64]
static
Initial value:
= {
0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,
0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,
0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,
0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,
0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,
0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,
0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a,
0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,
0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,
0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05,
0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,
0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039,
0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,
0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,
0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391,
}

Definition at line 62 of file md5.c.

b
#define b
Definition: input.c:41
T
static const uint32_t T[64]
Definition: md5.c:62
if
if(ret)
Definition: filter_design.txt:179
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
X
@ X
Definition: vf_addroi.c:27
a
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
Definition: undefined.txt:41
CORE
#define CORE(i, a, b, c, d)
Definition: md5.c:84
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
AV_RL32
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
Definition: bytestream.h:92
S
static const uint8_t S[4][4]
Definition: md5.c:55