/home/dko/projects/mobilec/trunk/src/security/xyssl-0.7/library/md5.c File Reference

#include <string.h>
#include <stdio.h>
#include "xyssl/md5.h"

Go to the source code of this file.

Defines

#define _CRT_SECURE_NO_DEPRECATE   1
#define GET_UINT32_LE(n, b, i)
#define PUT_UINT32_LE(n, b, i)
#define S(x, n)   ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
#define P(a, b, c, d, k, s, t)
#define F(x, y, z)   (z ^ (x & (y ^ z)))
#define F(x, y, z)   (y ^ (z & (x ^ y)))
#define F(x, y, z)   (x ^ y ^ z)
#define F(x, y, z)   (y ^ (x | ~z))

Functions

void md5_starts (md5_context *ctx)
 MD5 context setup.
static void md5_process (md5_context *ctx, unsigned char data[64])
void md5_update (md5_context *ctx, unsigned char *input, int ilen)
 MD5 process buffer.
void md5_finish (md5_context *ctx, unsigned char *output)
 MD5 final digest.
void md5 (unsigned char *input, int ilen, unsigned char *output)
 Output = MD5( input buffer ).
int md5_file (char *path, unsigned char *output)
 Output = MD5( file contents ).
void md5_hmac_starts (md5_context *ctx, unsigned char *key, int keylen)
 MD5 HMAC context setup.
void md5_hmac_update (md5_context *ctx, unsigned char *input, int ilen)
 MD5 HMAC process buffer.
void md5_hmac_finish (md5_context *ctx, unsigned char *output)
 MD5 HMAC final digest.
void md5_hmac (unsigned char *key, int keylen, unsigned char *input, int ilen, unsigned char *output)
 Output = HMAC-MD5( hmac key, input buffer ).
int md5_self_test (int verbose)
 Checkup routine.

Variables

static const unsigned char md5_padding [64]
static const char _md5_src [] = "_md5_src"


Define Documentation

#define _CRT_SECURE_NO_DEPRECATE   1

Definition at line 27 of file md5.c.

#define F ( x,
y,
 )     (y ^ (x | ~z))

#define F ( x,
y,
 )     (x ^ y ^ z)

#define F ( x,
y,
 )     (y ^ (z & (x ^ y)))

#define F ( x,
y,
 )     (z ^ (x & (y ^ z)))

#define GET_UINT32_LE ( n,
b,
 ) 

Value:

{                                                       \
    (n) = ( (unsigned long) (b)[(i)    ]       )        \
        | ( (unsigned long) (b)[(i) + 1] <<  8 )        \
        | ( (unsigned long) (b)[(i) + 2] << 16 )        \
        | ( (unsigned long) (b)[(i) + 3] << 24 );       \
}

Definition at line 39 of file md5.c.

#define P ( a,
b,
c,
d,
k,
s,
 ) 

Value:

{                                                       \
    a += F(b,c,d) + X[k] + t; a = S(a,s) + b;           \
}

#define PUT_UINT32_LE ( n,
b,
 ) 

Value:

{                                                       \
    (b)[(i)    ] = (unsigned char) ( (n)       );       \
    (b)[(i) + 1] = (unsigned char) ( (n) >>  8 );       \
    (b)[(i) + 2] = (unsigned char) ( (n) >> 16 );       \
    (b)[(i) + 3] = (unsigned char) ( (n) >> 24 );       \
}

Definition at line 49 of file md5.c.

#define S ( x,
 )     ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))


Function Documentation

void md5 ( unsigned char *  input,
int  ilen,
unsigned char *  output 
)

Output = MD5( input buffer ).

Parameters:
input buffer holding the data
ilen length of the input data
output MD5 checksum result

Definition at line 278 of file md5.c.

References md5_finish(), md5_starts(), and md5_update().

Referenced by main(), ssl_calc_verify(), ssl_derive_keys(), ssl_mac_md5(), ssl_parse_server_key_exchange(), ssl_write_server_key_exchange(), and x509_hash().

int md5_file ( char *  path,
unsigned char *  output 
)

Output = MD5( file contents ).

Parameters:
path input file name
output MD5 checksum result
Returns:
0 if successful, 1 if fopen failed, or 2 if fread failed

Definition at line 293 of file md5.c.

References f, md5_finish(), md5_starts(), and md5_update().

Referenced by md5_wrapper().

void md5_finish ( md5_context ctx,
unsigned char *  output 
)

MD5 final digest.

Parameters:
ctx MD5 context
output MD5 checksum result

Definition at line 250 of file md5.c.

References md5_padding, md5_update(), PUT_UINT32_LE, md5_context::state, and md5_context::total.

Referenced by md5(), md5_file(), md5_hmac_finish(), ssl_calc_verify(), ssl_derive_keys(), ssl_mac_md5(), ssl_parse_server_key_exchange(), ssl_write_server_key_exchange(), and x509_des3_decrypt().

void md5_hmac ( unsigned char *  key,
int  keylen,
unsigned char *  input,
int  ilen,
unsigned char *  output 
)

Output = HMAC-MD5( hmac key, input buffer ).

Parameters:
key HMAC secret key
keylen length of the HMAC key
input buffer holding the data
ilen length of the input data
output HMAC-MD5 result

Definition at line 373 of file md5.c.

References md5_hmac_finish(), md5_hmac_starts(), and md5_hmac_update().

Referenced by ssl_decrypt_buf(), ssl_encrypt_buf(), and tls1_prf().

void md5_hmac_finish ( md5_context ctx,
unsigned char *  output 
)

MD5 HMAC final digest.

Parameters:
ctx HMAC context
output MD5 HMAC checksum result

Definition at line 357 of file md5.c.

References md5_finish(), md5_starts(), md5_update(), and md5_context::opad.

Referenced by md5_hmac().

void md5_hmac_starts ( md5_context ctx,
unsigned char *  key,
int  keylen 
)

MD5 HMAC context setup.

Parameters:
ctx HMAC context to be initialized
key HMAC secret key
keylen length of the HMAC key

Definition at line 325 of file md5.c.

References md5_context::ipad, md5_starts(), md5_update(), and md5_context::opad.

Referenced by md5_hmac().

void md5_hmac_update ( md5_context ctx,
unsigned char *  input,
int  ilen 
)

MD5 HMAC process buffer.

Parameters:
ctx HMAC context
input buffer holding the data
ilen length of the input data

Definition at line 348 of file md5.c.

References md5_update().

Referenced by md5_hmac().

static void md5_process ( md5_context ctx,
unsigned char  data[64] 
) [static]

Definition at line 72 of file md5.c.

References GET_UINT32_LE, P, and md5_context::state.

Referenced by md5_update().

int md5_self_test ( int  verbose  ) 

Checkup routine.

Returns:
0 if successful, or 1 if the test failed

Definition at line 454 of file md5.c.

Referenced by main().

void md5_starts ( md5_context ctx  ) 

MD5 context setup.

Parameters:
ctx context to be initialized

Definition at line 61 of file md5.c.

References md5_context::state, and md5_context::total.

Referenced by md5(), md5_file(), md5_hmac_finish(), md5_hmac_starts(), ssl_calc_verify(), ssl_derive_keys(), ssl_mac_md5(), ssl_parse_client_hello(), ssl_parse_server_key_exchange(), ssl_write_client_hello(), ssl_write_server_key_exchange(), and x509_des3_decrypt().

void md5_update ( md5_context ctx,
unsigned char *  input,
int  ilen 
)

MD5 process buffer.

Parameters:
ctx MD5 context
input buffer holding the data
ilen length of the input data

Definition at line 198 of file md5.c.

References md5_context::buffer, md5_process(), and md5_context::total.

Referenced by md5(), md5_file(), md5_finish(), md5_hmac_finish(), md5_hmac_starts(), md5_hmac_update(), ssl_calc_verify(), ssl_derive_keys(), ssl_mac_md5(), ssl_parse_client_hello(), ssl_parse_server_key_exchange(), ssl_write_record(), ssl_write_server_key_exchange(), and x509_des3_decrypt().


Variable Documentation

const char _md5_src[] = "_md5_src" [static]

Definition at line 386 of file md5.c.

const unsigned char md5_padding[64] [static]

Initial value:

{
 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}

Definition at line 239 of file md5.c.

Referenced by md5_finish().


Generated on Fri May 16 14:49:56 2008 for Mobile-C by  doxygen 1.5.4