Blender V5.0
hash_md5.cc File Reference
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sys/types.h>
#include "BLI_hash_md5.hh"

Go to the source code of this file.

Classes

struct  md5_ctx

Macros

#define UINT_MAX_32_BITS   0xFFFFFFFF
#define UINT_MAX   UINT_MAX_32_BITS
#define SWAP(n)
#define FF(b, c, d)
#define FG(b, c, d)
#define FH(b, c, d)
#define FI(b, c, d)
#define CYCLIC(w, s)
#define OP(a, b, c, d, s, T)
#define OP(f, a, b, c, d, k, s, T)
#define BLOCKSIZE   4096 /* IMPORTANT: must be a multiple of 64. */

Typedefs

using md5_uint32 = uint

Functions

static void md5_init_ctx (md5_ctx *ctx)
static void md5_process_block (const void *buffer, size_t len, md5_ctx *ctx)
static void * md5_read_ctx (const md5_ctx *ctx, void *resbuf)
int BLI_hash_md5_stream (FILE *stream, void *resblock)
void * BLI_hash_md5_buffer (const char *buffer, size_t len, void *resblock)
char * BLI_hash_md5_to_hexdigest (const void *resblock, char r_hex_digest[33])

Variables

static const uchar fillbuf [64] = {0x80, 0 }

Detailed Description

Functions to compute MD5 message digest of files or memory blocks according to the definition of MD5 in RFC 1321 from April 1992.

Definition in file hash_md5.cc.

Macro Definition Documentation

◆ BLOCKSIZE

#define BLOCKSIZE   4096 /* IMPORTANT: must be a multiple of 64. */

Referenced by BLI_hash_md5_stream().

◆ CYCLIC

#define CYCLIC ( w,
s )
Value:
(w = (w << s) | (w >> (32 - s)))
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119

◆ FF

#define FF ( b,
c,
d )
Value:
(d ^ (b & (c ^ d)))

◆ FG

#define FG ( b,
c,
d )
Value:
FF(d, b, c)
#define FF(b, c, d)

Referenced by md5_process_block().

◆ FH

#define FH ( b,
c,
d )
Value:
(b ^ c ^ d)

Referenced by md5_process_block().

◆ FI

#define FI ( b,
c,
d )
Value:
(c ^ (b | ~d))

Referenced by md5_process_block().

◆ OP [1/2]

#define OP ( a,
b,
c,
d,
s,
T )
Value:
a += FF(b, c, d) + (*cwp++ = SWAP(*words)) + T; \
words++; \
CYCLIC(a, s); \
a += b; \
(void)0
#define SWAP(type, a, b)
#define T

Referenced by md5_process_block().

◆ OP [2/2]

#define OP ( f,
a,
b,
c,
d,
k,
s,
T )
Value:
a += f(b, c, d) + correct_words[k] + T; \
CYCLIC(a, s); \
a += b; \
(void)0

◆ SWAP

#define SWAP ( n)
Value:
(n)

Definition at line 74 of file hash_md5.cc.

Referenced by BLI_hash_md5_buffer(), BLI_hash_md5_stream(), and md5_read_ctx().

◆ UINT_MAX

◆ UINT_MAX_32_BITS

#define UINT_MAX_32_BITS   0xFFFFFFFF

Definition at line 34 of file hash_md5.cc.

Typedef Documentation

◆ md5_uint32

using md5_uint32 = uint

Definition at line 48 of file hash_md5.cc.

Function Documentation

◆ BLI_hash_md5_buffer()

void * BLI_hash_md5_buffer ( const char * buffer,
size_t len,
void * resblock )

Compute MD5 message digest for 'len' bytes beginning at 'buffer'. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest.

Definition at line 343 of file hash_md5.cc.

References fillbuf, len, md5_init_ctx(), md5_process_block(), md5_read_ctx(), pad, and SWAP.

Referenced by IMB_thumb_load_font_get_hash(), render_result_exr_file_cache_path(), and thumbpathname_from_uri().

◆ BLI_hash_md5_stream()

int BLI_hash_md5_stream ( FILE * stream,
void * resblock )

Compute MD5 message digest for bytes read from 'stream'. The resulting message digest number will be written into the 16 bytes beginning at 'resblock'.

Returns
Non-zero if an error occurred.

Definition at line 270 of file hash_md5.cc.

References BLOCKSIZE, fillbuf, len, md5_init_ctx(), md5_process_block(), md5_read_ctx(), pad, sum(), and SWAP.

◆ BLI_hash_md5_to_hexdigest()

char * BLI_hash_md5_to_hexdigest ( const void * resblock,
char r_hex_digest[33] )

◆ md5_init_ctx()

void md5_init_ctx ( md5_ctx * ctx)
static

Initialize structure containing state of computation. (RFC 1321, 3.3: Step 3)

Definition at line 84 of file hash_md5.cc.

References md5_ctx::A, md5_ctx::B, md5_ctx::C, and md5_ctx::D.

Referenced by BLI_hash_md5_buffer(), and BLI_hash_md5_stream().

◆ md5_process_block()

void md5_process_block ( const void * buffer,
size_t len,
md5_ctx * ctx )
static

Starting with the result of former calls of this function (or the initialization), this function updates the 'ctx' context for the next 'len' bytes starting at 'buffer'. It is necessary that 'len' is a multiple of 64!!!

Definition at line 97 of file hash_md5.cc.

References A, md5_ctx::A, B, md5_ctx::B, C, md5_ctx::C, D, md5_ctx::D, FG, FH, FI, len, and OP.

Referenced by BLI_hash_md5_buffer(), and BLI_hash_md5_stream().

◆ md5_read_ctx()

void * md5_read_ctx ( const md5_ctx * ctx,
void * resbuf )
static

Put result from 'ctx' in first 16 bytes of 'resbuf'. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest.

Definition at line 257 of file hash_md5.cc.

References md5_ctx::A, md5_ctx::B, md5_ctx::C, md5_ctx::D, and SWAP.

Referenced by BLI_hash_md5_buffer(), and BLI_hash_md5_stream().

Variable Documentation

◆ fillbuf

const uchar fillbuf[64] = {0x80, 0 }
static

Definition at line 78 of file hash_md5.cc.

Referenced by BLI_hash_md5_buffer(), and BLI_hash_md5_stream().