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


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


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...


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

Macro Definition Documentation


#define CORE (   i,
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.


#define CORE2 (   i)
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)


#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 

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]
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]
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.

#define b
Definition: input.c:41
static const uint32_t T[64]
Definition: md5.c:62
Definition: filter_design.txt:179
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
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
#define CORE(i, a, b, c, d)
Definition: md5.c:84
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
@ X
Definition: vf_addroi.c:27
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
Definition: bytestream.h:92
static const uint8_t S[4][4]
Definition: md5.c:55
Definition: ffmpeg_filter.c:424