MD5 Algorithm

From http://www.ietf.org/rfc/rfc1321.txt

Network Working Group                                          R. Rivest
Request for Comments: 1321           MIT Laboratory for Computer Science
                                             and RSA Data Security, Inc.
                                                              April 1992

                     The MD5 Message-Digest Algorithm

Status of this Memo

   This memo provides information for the Internet community.  It does
   not specify an Internet standard.  Distribution of this memo is
   unlimited.

Acknowlegements

   We would like to thank Don Coppersmith, Burt Kaliski, Ralph Merkle,
   David Chaum, and Noam Nisan for numerous helpful comments and
   suggestions.

Table of Contents

   1. Executive Summary                                                1
   2. Terminology and Notation                                         2
   3. MD5 Algorithm Description                                        3
   4. Summary                                                          6
   5. Differences Between MD4 and MD5                                  6
   References                                                          7
   APPENDIX A - Reference Implementation                               7
   Security Considerations                                            21
   Author's Address                                                   21

1. Executive Summary

   This document describes the MD5 message-digest algorithm. The
   algorithm takes as input a message of arbitrary length and produces
   as output a 128-bit "fingerprint" or "message digest" of the input.
   It is conjectured that it is computationally infeasible to produce
   two messages having the same message digest, or to produce any
   message having a given prespecified target message digest. The MD5
   algorithm is intended for digital signature applications, where a
   large file must be "compressed" in a secure manner before being
   encrypted with a private (secret) key under a public-key cryptosystem
   such as RSA.

Rivest                                                          [Page 1]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

   The MD5 algorithm is designed to be quite fast on 32-bit machines. In
   addition, the MD5 algorithm does not require any large substitution
   tables; the algorithm can be coded quite compactly.

   The MD5 algorithm is an extension of the MD4 message-digest algorithm
   1,2]. MD5 is slightly slower than MD4, but is more "conservative" in
   design. MD5 was designed because it was felt that MD4 was perhaps
   being adopted for use more quickly than justified by the existing
   critical review; because MD4 was designed to be exceptionally fast,
   it is "at the edge" in terms of risking successful cryptanalytic
   attack. MD5 backs off a bit, giving up a little in speed for a much
   greater likelihood of ultimate security. It incorporates some
   suggestions made by various reviewers, and contains additional
   optimizations. The MD5 algorithm is being placed in the public domain
   for review and possible adoption as a standard.

   For OSI-based applications, MD5's object identifier is

   md5 OBJECT IDENTIFIER ::=
     iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 5}

   In the X.509 type AlgorithmIdentifier [3], the parameters for MD5
   should have type NULL.

2. Terminology and Notation

   In this document a "word" is a 32-bit quantity and a "byte" is an
   eight-bit quantity. A sequence of bits can be interpreted in a
   natural manner as a sequence of bytes, where each consecutive group
   of eight bits is interpreted as a byte with the high-order (most
   significant) bit of each byte listed first. Similarly, a sequence of
   bytes can be interpreted as a sequence of 32-bit words, where each
   consecutive group of four bytes is interpreted as a word with the
   low-order (least significant) byte given first.

   Let x_i denote "x sub i". If the subscript is an expression, we
   surround it in braces, as in x_{i+1}. Similarly, we use ^ for
   superscripts (exponentiation), so that x^i denotes x to the i-th
   power.

   Let the symbol "+" denote addition of words (i.e., modulo-2^32
   addition). Let X <<< s denote the 32-bit value obtained by circularly
   shifting (rotating) X left by s bit positions. Let not(X) denote the
   bit-wise complement of X, and let X v Y denote the bit-wise OR of X
   and Y. Let X xor Y denote the bit-wise XOR of X and Y, and let XY
   denote the bit-wise AND of X and Y.

Rivest                                                          [Page 2]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

3. MD5 Algorithm Description

   We begin by supposing that we have a b-bit message as input, and that
   we wish to find its message digest. Here b is an arbitrary
   nonnegative integer; b may be zero, it need not be a multiple of
   eight, and it may be arbitrarily large. We imagine the bits of the
   message written down as follows:

          m_0 m_1 ... m_{b-1}

   The following five steps are performed to compute the message digest
   of the message.

3.1 Step 1. Append Padding Bits

   The message is "padded" (extended) so that its length (in bits) is
   congruent to 448, modulo 512. That is, the message is extended so
   that it is just 64 bits shy of being a multiple of 512 bits long.
   Padding is always performed, even if the length of the message is
   already congruent to 448, modulo 512.

   Padding is performed as follows: a single "1" bit is appended to the
   message, and then "0" bits are appended so that the length in bits of
   the padded message becomes congruent to 448, modulo 512. In all, at
   least one bit and at most 512 bits are appended.

3.2 Step 2. Append Length

   A 64-bit representation of b (the length of the message before the
   padding bits were added) is appended to the result of the previous
   step. In the unlikely event that b is greater than 2^64, then only
   the low-order 64 bits of b are used. (These bits are appended as two
   32-bit words and appended low-order word first in accordance with the
   previous conventions.)

   At this point the resulting message (after padding with bits and with
   b) has a length that is an exact multiple of 512 bits. Equivalently,
   this message has a length that is an exact multiple of 16 (32-bit)
   words. Let M[0 ... N-1] denote the words of the resulting message,
   where N is a multiple of 16.

3.3 Step 3. Initialize MD Buffer

   A four-word buffer (A,B,C,D) is used to compute the message digest.
   Here each of A, B, C, D is a 32-bit register. These registers are
   initialized to the following values in hexadecimal, low-order bytes
   first):

Rivest                                                          [Page 3]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

          word A: 01 23 45 67
          word B: 89 ab cd ef
          word C: fe dc ba 98
          word D: 76 54 32 10

3.4 Step 4. Process Message in 16-Word Blocks

   We first define four auxiliary functions that each take as input
   three 32-bit words and produce as output one 32-bit word.

          F(X,Y,Z) = XY v not(X) Z
          G(X,Y,Z) = XZ v Y not(Z)
          H(X,Y,Z) = X xor Y xor Z
          I(X,Y,Z) = Y xor (X v not(Z))

   In each bit position F acts as a conditional: if X then Y else Z.
   The function F could have been defined using + instead of v since XY
   and not(X)Z will never have 1's in the same bit position.) It is
   interesting to note that if the bits of X, Y, and Z are independent
   and unbiased, the each bit of F(X,Y,Z) will be independent and
   unbiased.

   The functions G, H, and I are similar to the function F, in that they
   act in "bitwise parallel" to produce their output from the bits of X,
   Y, and Z, in such a manner that if the corresponding bits of X, Y,
   and Z are independent and unbiased, then each bit of G(X,Y,Z),
   H(X,Y,Z), and I(X,Y,Z) will be independent and unbiased. Note that
   the function H is the bit-wise "xor" or "parity" function of its
   inputs.

   This step uses a 64-element table T[1 ... 64] constructed from the
   sine function. Let T[i] denote the i-th element of the table, which
   is equal to the integer part of 4294967296 times abs(sin(i)), where i
   is in radians. The elements of the table are given in the appendix.

   Do the following:

   /* Process each 16-word block. */
   For i = 0 to N/16-1 do

     /* Copy block i into X. */
     For j = 0 to 15 do
       Set X[j] to M[i*16+j].
     end /* of loop on j */

     /* Save A as AA, B as BB, C as CC, and D as DD. */
     AA = A
     BB = B

Rivest                                                          [Page 4]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

     CC = C
     DD = D

     /* Round 1. */
     /* Let [abcd k s i] denote the operation
          a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
     /* Do the following 16 operations. */
     [ABCD  0  7  1]  [DABC  1 12  2]  [CDAB  2 17  3]  [BCDA  3 22  4]
     [ABCD  4  7  5]  [DABC  5 12  6]  [CDAB  6 17  7]  [BCDA  7 22  8]
     [ABCD  8  7  9]  [DABC  9 12 10]  [CDAB 10 17 11]  [BCDA 11 22 12]
     [ABCD 12  7 13]  [DABC 13 12 14]  [CDAB 14 17 15]  [BCDA 15 22 16]

     /* Round 2. */
     /* Let [abcd k s i] denote the operation
          a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
     /* Do the following 16 operations. */
     [ABCD  1  5 17]  [DABC  6  9 18]  [CDAB 11 14 19]  [BCDA  0 20 20]
     [ABCD  5  5 21]  [DABC 10  9 22]  [CDAB 15 14 23]  [BCDA  4 20 24]
     [ABCD  9  5 25]  [DABC 14  9 26]  [CDAB  3 14 27]  [BCDA  8 20 28]
     [ABCD 13  5 29]  [DABC  2  9 30]  [CDAB  7 14 31]  [BCDA 12 20 32]

     /* Round 3. */
     /* Let [abcd k s t] denote the operation
          a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
     /* Do the following 16 operations. */
     [ABCD  5  4 33]  [DABC  8 11 34]  [CDAB 11 16 35]  [BCDA 14 23 36]
     [ABCD  1  4 37]  [DABC  4 11 38]  [CDAB  7 16 39]  [BCDA 10 23 40]
     [ABCD 13  4 41]  [DABC  0 11 42]  [CDAB  3 16 43]  [BCDA  6 23 44]
     [ABCD  9  4 45]  [DABC 12 11 46]  [CDAB 15 16 47]  [BCDA  2 23 48]

     /* Round 4. */
     /* Let [abcd k s t] denote the operation
          a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
     /* Do the following 16 operations. */
     [ABCD  0  6 49]  [DABC  7 10 50]  [CDAB 14 15 51]  [BCDA  5 21 52]
     [ABCD 12  6 53]  [DABC  3 10 54]  [CDAB 10 15 55]  [BCDA  1 21 56]
     [ABCD  8  6 57]  [DABC 15 10 58]  [CDAB  6 15 59]  [BCDA 13 21 60]
     [ABCD  4  6 61]  [DABC 11 10 62]  [CDAB  2 15 63]  [BCDA  9 21 64]

     /* Then perform the following additions. (That is increment each
        of the four registers by the value it had before this block
        was started.) */
     A = A + AA
     B = B + BB
     C = C + CC
     D = D + DD

   end /* of loop on i */

Rivest                                                          [Page 5]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

3.5 Step 5. Output

   The message digest produced as output is A, B, C, D. That is, we
   begin with the low-order byte of A, and end with the high-order byte
   of D.

   This completes the description of MD5. A reference implementation in
   C is given in the appendix.

4. Summary

   The MD5 message-digest algorithm is simple to implement, and provides
   a "fingerprint" or message digest of a message of arbitrary length.
   It is conjectured that the difficulty of coming up with two messages
   having the same message digest is on the order of 2^64 operations,
   and that the difficulty of coming up with any message having a given
   message digest is on the order of 2^128 operations. The MD5 algorithm
   has been carefully scrutinized for weaknesses. It is, however, a
   relatively new algorithm and further security analysis is of course
   justified, as is the case with any new proposal of this sort.

5. Differences Between MD4 and MD5

     The following are the differences between MD4 and MD5:

       1.   A fourth round has been added.

       2.   Each step now has a unique additive constant.

       3.   The function g in round 2 was changed from (XY v XZ v YZ) to
       (XZ v Y not(Z)) to make g less symmetric.

       4.   Each step now adds in the result of the previous step.  This
       promotes a faster "avalanche effect".

       5.   The order in which input words are accessed in rounds 2 and
       3 is changed, to make these patterns less like each other.

       6.   The shift amounts in each round have been approximately
       optimized, to yield a faster "avalanche effect." The shifts in
       different rounds are distinct.

Rivest                                                          [Page 6]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

References

   [1] Rivest, R., "The MD4 Message Digest Algorithm", RFC 1320, MIT and
       RSA Data Security, Inc., April 1992.

   [2] Rivest, R., "The MD4 message digest algorithm", in A.J.  Menezes
       and S.A. Vanstone, editors, Advances in Cryptology - CRYPTO '90
       Proceedings, pages 303-311, Springer-Verlag, 1991.

   [3] CCITT Recommendation X.509 (1988), "The Directory -
       Authentication Framework."

APPENDIX A - Reference Implementation

   This appendix contains the following files taken from RSAREF: A
   Cryptographic Toolkit for Privacy-Enhanced Mail:

     global.h -- global header file

     md5.h -- header file for MD5

     md5c.c -- source code for MD5

   For more information on RSAREF, send email to <rsaref@rsa.com>.

   The appendix also includes the following file:

     mddriver.c -- test driver for MD2, MD4 and MD5

   The driver compiles for MD5 by default but can compile for MD2 or MD4
   if the symbol MD is defined on the C compiler command line as 2 or 4.

   The implementation is portable and should work on many different
   plaforms. However, it is not difficult to optimize the implementation
   on particular platforms, an exercise left to the reader. For example,
   on "little-endian" platforms where the lowest-addressed byte in a 32-
   bit word is the least significant and there are no alignment
   restrictions, the call to Decode in MD5Transform can be replaced with
   a typecast.

A.1 global.h

/* GLOBAL.H - RSAREF types and constants
 */

/* PROTOTYPES should be set to one if and only if the compiler supports
  function argument prototyping.
The following makes PROTOTYPES default to 0 if it has not already

Rivest                                                          [Page 7]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

  been defined with C compiler flags.
 */
#ifndef PROTOTYPES
#define PROTOTYPES 0
#endif

/* POINTER defines a generic pointer type */
typedef unsigned char *POINTER;

/* UINT2 defines a two byte word */
typedef unsigned short int UINT2;

/* UINT4 defines a four byte word */
typedef unsigned long int UINT4;

/* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
  returns an empty list.
 */
#if PROTOTYPES
#define PROTO_LIST(list) list
#else
#define PROTO_LIST(list) ()
#endif

A.2 md5.h

/* MD5.H - header file for MD5C.C
 */

/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.

License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.

License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.

RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.

Rivest                                                          [Page 8]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

These notices must be retained in any copies of any part of this
documentation and/or software.
 */

/* MD5 context. */
typedef struct {
  UINT4 state[4];                                   /* state (ABCD) */
  UINT4 count[2];        /* number of bits, modulo 2^64 (lsb first) */
  unsigned char buffer[64];                         /* input buffer */
} MD5_CTX;

void MD5Init PROTO_LIST ((MD5_CTX *));
void MD5Update PROTO_LIST
  ((MD5_CTX *, unsigned char *, unsigned int));
void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *));

A.3 md5c.c

/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
 */

/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.

License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.

License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.

RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.

These notices must be retained in any copies of any part of this
documentation and/or software.
 */

#include "global.h"
#include "md5.h"

/* Constants for MD5Transform routine.
 */

Rivest                                                          [Page 9]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

#define S11 7
#define S12 12
#define S13 17
#define S14 22
#define S21 5
#define S22 9
#define S23 14
#define S24 20
#define S31 4
#define S32 11
#define S33 16
#define S34 23
#define S41 6
#define S42 10
#define S43 15
#define S44 21

static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64]));
static void Encode PROTO_LIST
  ((unsigned char *, UINT4 *, unsigned int));
static void Decode PROTO_LIST
  ((UINT4 *, unsigned char *, unsigned int));
static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int));
static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int));

static unsigned char PADDING[64] = {
  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
};

/* F, G, H and I are basic MD5 functions.
 */
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z)))

/* ROTATE_LEFT rotates x left n bits.
 */
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))

/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
Rotation is separate from addition to prevent recomputation.
 */
#define FF(a, b, c, d, x, s, ac) {
 (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac);
 (a) = ROTATE_LEFT ((a), (s)); 

Rivest                                                         [Page 10]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

 (a) += (b);
  }
#define GG(a, b, c, d, x, s, ac) {
 (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac);
 (a) = ROTATE_LEFT ((a), (s));
 (a) += (b);
  }
#define HH(a, b, c, d, x, s, ac) {
 (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac);
 (a) = ROTATE_LEFT ((a), (s));
 (a) += (b);
  }
#define II(a, b, c, d, x, s, ac) {
 (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac);
 (a) = ROTATE_LEFT ((a), (s));
 (a) += (b);
  }

/* MD5 initialization. Begins an MD5 operation, writing a new context.
 */
void MD5Init (context)
MD5_CTX *context;                                        /* context */
{
  context->count[0] = context->count[1] = 0;
  /* Load magic initialization constants.
*/
  context->state[0] = 0x67452301;
  context->state[1] = 0xefcdab89;
  context->state[2] = 0x98badcfe;
  context->state[3] = 0x10325476;
}

/* MD5 block update operation. Continues an MD5 message-digest
  operation, processing another message block, and updating the
  context.
 */
void MD5Update (context, input, inputLen)
MD5_CTX *context;                                        /* context */
unsigned char *input;                                /* input block */
unsigned int inputLen;                     /* length of input block */
{
  unsigned int i, index, partLen;

  /* Compute number of bytes mod 64 */
  index = (unsigned int)((context->count[0] >> 3) & 0x3F);

  /* Update number of bits */
  if ((context->count[0] += ((UINT4)inputLen << 3))

Rivest                                                         [Page 11]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

   < ((UINT4)inputLen << 3))
 context->count[1]++;
  context->count[1] += ((UINT4)inputLen >> 29);

  partLen = 64 - index;

  /* Transform as many times as possible.
*/
  if (inputLen >= partLen) {
 MD5_memcpy
   ((POINTER)&context->buffer[index], (POINTER)input, partLen);
 MD5Transform (context->state, context->buffer);

 for (i = partLen; i + 63 < inputLen; i += 64)
   MD5Transform (context->state, &input[i]);

 index = 0;
  }
  else
 i = 0;

  /* Buffer remaining input */
  MD5_memcpy
 ((POINTER)&context->buffer[index], (POINTER)&input[i],
  inputLen-i);
}

/* MD5 finalization. Ends an MD5 message-digest operation, writing the
  the message digest and zeroizing the context.
 */
void MD5Final (digest, context)
unsigned char digest[16];                         /* message digest */
MD5_CTX *context;                                       /* context */
{
  unsigned char bits[8];
  unsigned int index, padLen;

  /* Save number of bits */
  Encode (bits, context->count, 8);

  /* Pad out to 56 mod 64.
*/
  index = (unsigned int)((context->count[0] >> 3) & 0x3f);
  padLen = (index < 56) ? (56 - index) : (120 - index);
  MD5Update (context, PADDING, padLen);

  /* Append length (before padding) */
  MD5Update (context, bits, 8);

Rivest                                                         [Page 12]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

  /* Store state in digest */
  Encode (digest, context->state, 16);

  /* Zeroize sensitive information.
*/
  MD5_memset ((POINTER)context, 0, sizeof (*context));
}

/* MD5 basic transformation. Transforms state based on block.
 */
static void MD5Transform (state, block)
UINT4 state[4];
unsigned char block[64];
{
  UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];

  Decode (x, block, 64);

  /* Round 1 */
  FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
  FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
  FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
  FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
  FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
  FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
  FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
  FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
  FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
  FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
  FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
  FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
  FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
  FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
  FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
  FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */

 /* Round 2 */
  GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
  GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
  GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
  GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
  GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
  GG (d, a, b, c, x[10], S22,  0x2441453); /* 22 */
  GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
  GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
  GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
  GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
  GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */

Rivest                                                         [Page 13]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

  GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
  GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
  GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
  GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
  GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */

  /* Round 3 */
  HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
  HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
  HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
  HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
  HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
  HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
  HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
  HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
  HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
  HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
  HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
  HH (b, c, d, a, x[ 6], S34,  0x4881d05); /* 44 */
  HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
  HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
  HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
  HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */

  /* Round 4 */
  II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
  II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
  II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
  II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
  II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
  II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
  II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
  II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
  II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
  II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
  II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
  II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
  II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
  II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
  II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
  II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */

  state[0] += a;
  state[1] += b;
  state[2] += c;
  state[3] += d;

  /* Zeroize sensitive information.

Rivest                                                         [Page 14]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

*/
  MD5_memset ((POINTER)x, 0, sizeof (x));
}

/* Encodes input (UINT4) into output (unsigned char). Assumes len is
  a multiple of 4.
 */
static void Encode (output, input, len)
unsigned char *output;
UINT4 *input;
unsigned int len;
{
  unsigned int i, j;

  for (i = 0, j = 0; j < len; i++, j += 4) {
 output[j] = (unsigned char)(input[i] & 0xff);
 output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
 output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
 output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
  }
}

/* Decodes input (unsigned char) into output (UINT4). Assumes len is
  a multiple of 4.
 */
static void Decode (output, input, len)
UINT4 *output;
unsigned char *input;
unsigned int len;
{
  unsigned int i, j;

  for (i = 0, j = 0; j < len; i++, j += 4)
 output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
   (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
}

/* Note: Replace "for loop" with standard memcpy if possible.
 */

static void MD5_memcpy (output, input, len)
POINTER output;
POINTER input;
unsigned int len;
{
  unsigned int i;

  for (i = 0; i < len; i++)

Rivest                                                         [Page 15]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

 output[i] = input[i];
}

/* Note: Replace "for loop" with standard memset if possible.
 */
static void MD5_memset (output, value, len)
POINTER output;
int value;
unsigned int len;
{
  unsigned int i;

  for (i = 0; i < len; i++)
 ((char *)output)[i] = (char)value;
}

A.4 mddriver.c

/* MDDRIVER.C - test driver for MD2, MD4 and MD5
 */

/* Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All
rights reserved.

RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.

These notices must be retained in any copies of any part of this
documentation and/or software.
 */

/* The following makes MD default to MD5 if it has not already been
  defined with C compiler flags.
 */
#ifndef MD
#define MD MD5
#endif

#include <stdio.h>
#include <time.h>
#include <string.h>
#include "global.h"
#if MD == 2
#include "md2.h"
#endif
#if MD == 4

Rivest                                                         [Page 16]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

#include "md4.h"
#endif
#if MD == 5
#include "md5.h"
#endif

/* Length of test block, number of test blocks.
 */
#define TEST_BLOCK_LEN 1000
#define TEST_BLOCK_COUNT 1000

static void MDString PROTO_LIST ((char *));
static void MDTimeTrial PROTO_LIST ((void));
static void MDTestSuite PROTO_LIST ((void));
static void MDFile PROTO_LIST ((char *));
static void MDFilter PROTO_LIST ((void));
static void MDPrint PROTO_LIST ((unsigned char [16]));

#if MD == 2
#define MD_CTX MD2_CTX
#define MDInit MD2Init
#define MDUpdate MD2Update
#define MDFinal MD2Final
#endif
#if MD == 4
#define MD_CTX MD4_CTX
#define MDInit MD4Init
#define MDUpdate MD4Update
#define MDFinal MD4Final
#endif
#if MD == 5
#define MD_CTX MD5_CTX
#define MDInit MD5Init
#define MDUpdate MD5Update
#define MDFinal MD5Final
#endif

/* Main driver.

Arguments (may be any combination):
  -sstring - digests string
  -t       - runs time trial
  -x       - runs test script
  filename - digests file
  (none)   - digests standard input
 */
int main (argc, argv)
int argc;

Rivest                                                         [Page 17]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

char *argv[];
{
  int i;

  if (argc > 1)
 for (i = 1; i < argc; i++)
   if (argv[i][0] == '-' && argv[i][1] == 's')
     MDString (argv[i] + 2);
   else if (strcmp (argv[i], "-t") == 0)
     MDTimeTrial ();
   else if (strcmp (argv[i], "-x") == 0)
     MDTestSuite ();
   else
     MDFile (argv[i]);
  else
 MDFilter ();

  return (0);
}

/* Digests a string and prints the result.
 */
static void MDString (string)
char *string;
{
  MD_CTX context;
  unsigned char digest[16];
  unsigned int len = strlen (string);

  MDInit (&context);
  MDUpdate (&context, string, len);
  MDFinal (digest, &context);

  printf ("MD%d (\"%s\") = ", MD, string);
  MDPrint (digest);
  printf ("n");
}

/* Measures the time to digest TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte
  blocks.
 */
static void MDTimeTrial ()
{
  MD_CTX context;
  time_t endTime, startTime;
  unsigned char block[TEST_BLOCK_LEN], digest[16];
  unsigned int i;

Rivest                                                         [Page 18]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

  printf
 ("MD%d time trial. Digesting %d %d-byte blocks ...", MD,
  TEST_BLOCK_LEN, TEST_BLOCK_COUNT);

  /* Initialize block */
  for (i = 0; i < TEST_BLOCK_LEN; i++)
 block[i] = (unsigned char)(i & 0xff);

  /* Start timer */
  time (&startTime);

  /* Digest blocks */
  MDInit (&context);
  for (i = 0; i < TEST_BLOCK_COUNT; i++)
 MDUpdate (&context, block, TEST_BLOCK_LEN);
  MDFinal (digest, &context);

  /* Stop timer */
  time (&endTime);

  printf (" donen");
  printf ("Digest = ");
  MDPrint (digest);
  printf ("nTime = %ld secondsn", (long)(endTime-startTime));
  printf
 ("Speed = %ld bytes/secondn",
  (long)TEST_BLOCK_LEN * (long)TEST_BLOCK_COUNT/(endTime-startTime));
}

/* Digests a reference suite of strings and prints the results.
 */
static void MDTestSuite ()
{
  printf ("MD%d test suite:n", MD);

  MDString ("");
  MDString ("a");
  MDString ("abc");
  MDString ("message digest");
  MDString ("abcdefghijklmnopqrstuvwxyz");
  MDString
 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
  MDString
 ("1234567890123456789012345678901234567890
1234567890123456789012345678901234567890");
}

/* Digests a file and prints the result.

Rivest                                                         [Page 19]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

 */
static void MDFile (filename)
char *filename;
{
  FILE *file;
  MD_CTX context;
  int len;
  unsigned char buffer[1024], digest[16];

  if ((file = fopen (filename, "rb")) == NULL)
 printf ("%s can't be openedn", filename);

  else {
 MDInit (&context);
 while (len = fread (buffer, 1, 1024, file))
   MDUpdate (&context, buffer, len);
 MDFinal (digest, &context);

 fclose (file);

 printf ("MD%d (%s) = ", MD, filename);
 MDPrint (digest);
 printf ("n");
  }
}

/* Digests the standard input and prints the result.
 */
static void MDFilter ()
{
  MD_CTX context;
  int len;
  unsigned char buffer[16], digest[16];

  MDInit (&context);
  while (len = fread (buffer, 1, 16, stdin))
 MDUpdate (&context, buffer, len);
  MDFinal (digest, &context);

  MDPrint (digest);
  printf ("n");
}

/* Prints a message digest in hexadecimal.
 */
static void MDPrint (digest)
unsigned char digest[16];
{

Rivest                                                         [Page 20]

RFC 1321              MD5 Message-Digest Algorithm            April 1992

  unsigned int i;

  for (i = 0; i < 16; i++)
 printf ("%02x", digest[i]);
}

A.5 Test suite

   The MD5 test suite (driver option "-x") should print the following
   results:

MD5 test suite:
MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") =
d174ab98d277d9f5a5611c2c9f419d9f
MD5 ("123456789012345678901234567890123456789012345678901234567890123456
78901234567890") = 57edf4a22be3c955ac49da2e2107b67a

Security Considerations

   The level of security discussed in this memo is considered to be
   sufficient for implementing very high security hybrid digital-
   signature schemes based on MD5 and a public-key cryptosystem.

Author's Address

   Ronald L. Rivest
   Massachusetts Institute of Technology
   Laboratory for Computer Science
   NE43-324
   545 Technology Square
   Cambridge, MA  02139-1986

   Phone: (617) 253-5880
   EMail: rivest@theory.lcs.mit.edu

Rivest                                                         [Page 21]

kto zdes' ??? report free no credit card required for instant online credit card approval online mbna college student credit card unsecured credit card debit credit card consolidate non profit paying wal mart credit card bill on line credit card with the longest 0 apr no credit online credit card approval mbna credit card access credit card 0 apr balance transfer credit card fraud laws airline credit card rewards visa card for people in ontario with bad credit united bank credit card terminal aspire credit card online payment bad credit business card aspire visa credit card payments wal mart .com..make payment to credit card instant credit card decisions credit card counseling in virginia wal mart credit card application unsecured no credit check credit card instant approval of credit card online www bankofamerica com credit card payment gas rebate credit card credit card terminal 380 latest news about the credit card fraud bad credit unsecured card 500 initial limit college student credit card limits credit card for 0 for 18 months credit card offers instant approval bank of america, credit card credit card w airline miles penalty for credit card fraud shell credit card site credit card online application with instant approval how do i consolidate my credit card payments list of valid credit card numbers compare apply credit card offers compare credit card balance transfer foreign online pharmacy credit card processing company mbna america credit card mbna credit card capital card college credit one student chase online credit card payment get credit card with bad credit consolidate credit card bill bank of america mbna credit card visa credit card no interest 0 apr citi credit card account lookup my paypal bank account credit card free unsecured credit card bad credit what is a unsecured credit card valero gas credit card apr 0 balance transfer fee no annual fee credit card non profit credit card counseling bank of america credit card fraud gas credit card prepaid student credit card visa united five percent cash back credit card credit card for people with bad credit uk credit card for student in college mbna world point credit card national city, student visa credit card providian credit card washington mutual household bank credit card visa household bank secured credit card personal credit card debt settlement reduction compare secured credit card credit card online payment credit card counseling fees free porn with no credit card required mbna uk credit card fees need a unsecured credit card with bad credit credit card balance transfer apply 0 interest pirated credit card numbers low rate joint credit card personal loans to consolidate credit card debt credit card online approval for bad credit orchard bank credit card site payment credit citi card credit card cost returning college student walmart credit card account consolidate credit card balances loan best deal prepaid credit card credit card with no bank account credit card bad credit ok jp morgan chase credit card services san antonio tx aspire instant credit card applications low percentage rate credit card first national merchant credit card advantage.com percent interest 0 percent transfer credit card providian bank credit card providian credit card servicescom citibank reliance credit card credit card balance transfer 0 interest credit card digit numbers credit card verification at wal mart visa 0 interest credit card providian credit card company adam boddie credit card debt counseling dallas credit card apply online instant approval credit card 0 interest balance transfers card consolidation credit debt loan unsecured need a credit card with zero apr credit card terminal sale merchant credit card processors instant approval online credit card aspire unsecured credit card after bankruptcy is there a credit card to help with debt no credit check credit card online credit card processing for merchants citi diamond credit card low intrest credit card consolidate free cell phones no credit card required citi bank india credit card application posted credit card numbers verifone eclipse credit card terminal check status of credit card at orchard bank shell credit card accounts on line shell credit card service capital one credit card for bad credit people debt reduction credit card debe 40k shell credit card account online com credit card balance transfer rate credit card fraud liability credit card terminal omni 3200 2007, credit card, 0 percent, 15 months gas credit card offers household bank credit card account center how many numbers are in a credit card bank america credit card account "chase", credit card services, contact us, 1-800 non profit credit card counseling louisville bank of america prepaid credit card credit card college student consolidate credit card loans bad credit credit card unsecured 2500 limit mbna 0 interest credit card orchard bank master card credit limit how many college student apply for a credit card yearly making a credit card payment with orchard bank lipman nurit credit card terminal government will help with credit card debt credit card terminal monthly statement credit card issue for college student 0 credit card australia pay wal mart credit card online orchard bank credit card status 100 free porn no credit card bank of america credit card offers legal counseling for credit card debt providian credit card account access chase instant online credit card approval providian credit card bill payment mexicana airline credit card card credit debt help xxasdf application bad card credit credit unsecured free credit score no credit card required orchard credit card account other bad credit unsecured small bank credit card offers us credit card debt help credit card applications with no bank account required unocal gas credit card guaranteed approval unsecured credit card accept credit card payment on line credit card debt consolidation loan from from mbna calculate credit card payment best credit card deal websites need credit card for free college student secured credit card with poor credit unsecured credit card and debt management step by step consolidate credit card debit fake credit card numbers applying for student visa credit card account student visa credit card bank of america fixed low interest rate credit card america west airline credit card free cell phone no credit card required disability and credit card debt reduction free airline mile credit card sears credit card 999 credit credit card debt consolidation buisness loan credit card debt elimination program apply for a providian credit card instant guaranteed approval credit card with bad credit orchard bank credit card account access jet citibank credit card class action suit j.p. morgan chase credit card services valid visa credit card numbers household bank credit card login citi credit card 4000 limit nomembership fee secured credit card bank of america find a credit card for people with bad debt pay sears credit card bill write credit card company for debt reduction reporting a stolen shell credit card debt consolidate credit card best card credit deal card chase credit member services card college credit debt statist student att universal credit card mastercard citibank free porn no credit card needed how to change credit card number for pay pal orchard bank credit card payments update credit card experation date on pay pal best ways to consolidate credit card debt citibank credit card sign in household bank credit card existing customer mbna credit card insurance coverage mbna fop credit card credit card debt management company consolidate credit card balances low merchant rate credit card transaction my pay pal account credit card hess gas credit card application accept credit card with no merchant account credit card for people with bad credit, no prepaid walmart credit card payment household bank secured credit card for bad credit people credit card 0 on balance transfers credit card free airline miles credit card terminal for sale credit card with 0 interest rate low introductory rate credit card airline rewards credit card unsecured visa card for bad credit credit card applications instant approval my credit card account credit card with no credit check china airline credit card bank of america credit card pay bill providian credit card bad credit bank of america credit card pay lane bryant credit card payment no credit check unsecured visa card free porn videos no credit card www mbna com credit card how to avoid credit card fraud internet use instant approval credit card temporary number citi bank credit card pay online household bank business credit card online credit card processing + cost credit card acceptance pay pal pay pal merchandise credit card american credit card debt relief anb college student credit card online account shell select credit card household bank credit card payment center associate visa student credit card credit card processing merchant online credit card processing service credit card offers with 0 interest continental airline credit card fast easy instant credit card approval credit card terminal leasing orchard bank / credit card guaranteed unsecured credit card no checking account household+bank+credit+card+login shell oil company credit card credit card fraud in houston tx credit card apr rate card com credit online providian gas credit card rebate student credit card visa fraud credit card 0 no transfer fees providian washington mutual credit card payment australian low rate credit card sd credit card counseling mbna platinum plus credit card wal mart credit card payments discover credit card payment fia card services credit cards chase banl of america credit card monthly payment calculator free no credit card required porn apply card college credit online student 36 months 0 interest credit card government help with credit card debt citi credit card account shell credit card pay pal visa credit card credit card application 0 interest working credit card numbers hypercom t7 plus credit card terminal nurit 3010 credit card terminal unsecured visa credit card for bad credit sears credit card delinquent card consolidate credit debt it bad credit card online approval to other countrys fixed rate credit card offers online credit card processing software shell credit card online what credit card has lowest interest rate fake credit card numbers that work deny credit card payment pay pal credit card instant approval gas card for people with bad credit credit card with low intrest rate help or concessions paying credit card debt sears credit card citibank complaints against citibank credit card credit card approval start using credit now online exxon gas credit card need a unsecured credit card for bad credit instantly apply credit card instant approval linkpoint credit card terminal business industrial no annual fee no application fee low rate credit card chase card member services credit card sign in credit card low rate bass pro best credit card compare bad credit charge card low annual rate credit card credit card debt reduction plan capital one student credit card visa bad credit credit card offers guaranteed unsecured credit card with no checking account help me pay my credit card debt secure credit card with mbna bank citibank credit card center zero percent apr introductory interest rate credit card direct merchant credit card credit card with airline miles sears visa credit card checking statement of public bank credit card account unsecured credit card debt aspire credit card home page citi credit card bad credit chase credit card services westover hills san antonio tx providian credit card promotion instant approveal credit card citi platinum credit card bad credit credit card citi premierpass credit card apply online instant approval credit card no credit credit card for fair to good credit instant online approval aspire credit card customer service shell credit card payment center check status of orchard bank credit card credit card for people with bad credit cell phone no credit card articles on prevention of credit card fraud low interest rate for balance transfer credit card aspire credit card online approval business credit card compare citi mastercard credit card college student misusing credit card preventing credit card debt in college student online credit card management at citi cards.com credit card counseling illinois instant approval credit card no credit household bank worst credit card bank of america credit card 5 cash back play free online bingo no credit card neede credit card for people for bad credit washington mutual credit card account looking for a low rate credit card my bank of america credit card unsecured credit card instant approval discover credit card 0 sears credit card apply credit card debt help in cleveland ohio mbna credit card accounts compare credit card uk looking for credit card for people with bad credit loans to consolidate credit card debt household bank credit card rip off credit card counseling services in sacramento want a credit card but i have bad credit orchard bank card credit card best card credit interest low rate apply online providian credit card orchard bank joint credit card money bank wal mart credit card citi visa credit card citi premier pass credit card reviews what is the best credit card for airline travel points double delta airline mileage credit card pay pal credit card change credit card debt help discover gas credit card orchard bank credit card bill pay sears credit card springfield il list of free credit card numbers credit card counseling services kentucky credit card offers for bad credit credit card debit processing merchant account sears charge plus credit card upgrade household bank credit card free airline miles credit card orchard bank credit card review wal mart credit card safety technology bad credit wal mart credit card business credit card instant approval debt credit card insurance relief consolidation check free airline ticket with credit card pay aspire credit card payment unsolicited credit card missouri fraud online credit card processing reviews air line free miles credit card best deal credit card terminal used bad credit unsecured visa card american express credit card payment car loan more than price "cash back" pay "credit card" best credit card for buying gas how to consolidate credit card debits pay pal credit card center credit card numbers list online credit card at citi cards.com transfer credit card balances for people with bad credit instant approval online credit card application old navy credit card payment credit card 0 purchases bad credit unsecured credit card providian credit card account shell texaco gas credit card payment chase cardmember services credit card sears credit card service corporate office of household bank credit card services credit card payment terminal card consolidation credit debt reduction visa student credit card login bank of america credit card payment instant approval for a credit card percent transfer credit card 0 percent interest 12 months limit for credit card for college student credit card no fees low interest rate how to compare the best credit card citi bank secured credit card credit card offering free airline tickets credit card fraud in china unsecured credit card with no credit check student credit card online approval credit card application bad credit credit card companies with 0 interest apply for a student visa credit card aspire credit card company wal mart credit card log in free credit report with no credit card required shell credit card center mbna credit card payment make a credit card payment to wal mart wal mart credit card online credit card debt relief nonprofit chase visa credit card account access credit card terminal for free credit card with low interest rate bp credit card payment where can i use my pay pal buyer credit card instant bad credit card approval online instant approval corporate credit card sears credit card coupon compare credit card merchant services wal mart credit card canada credit card airline rewards with bonus miles interest,0 fee credit card and balance transfer pay pal update credit card credit card debt and consolidate instant online credit card ezcardinfo credit card account credit card theft at gas station credit card account transfer 0 interest best credit card for people with bad credit aspire credit card payment direct merchant credit card online hsbc low rate credit card merchant credit card machines fina credit card payment gas card with bad credit wal mart credit card bill pay orchard bank help center credit holiday card online offer credit card compare interest citi credit card account center mbna canada credit card instant credit card approval with fair credit apply card college credit student ebullion credit card processing online best gas rewards credit card low rate credit card processing what is an unsecured credit card sears citibank credit card online pharmacy credit card processing company foreign business credit card online instant approval no credit card citibank online credit card payments credit card 0 cash advance apply for sears credit card online apply for credit card online for people with bad credit compare credit card reward systems hsbc household bank credit card fruad rip off sears online credit card payment wal mart credit card applications washington mutual providian visa credit card credit card terminal eclipse wachovia credit card mbna citi credit card application form chase credit card services online unsecured bad credit card with no fees complain about household bank credit card approval card college credit instant student bad credit debit card compare credit card fo people with bad credit instant approval visa credit card build credit compare business credit card percentage rate cancel sears credit card household bank credit card account manager citi business credit card compare credit card rewards credit card application for bad credit crown credit card gas station service maryland wal mart credit card signin chase credit card services auto bill pay providian credit card offers sears credit card rewards how to review my orchard credit card account fullman gas credit card credit card numbers and expiry dates for sell providian washington mutual credit card best credit card deal uk low interest credit card online approval toseeka search for products consolidate credit card debt mbna worldpoints credit card conoco gas credit card citi bank business credit card credit card account theft wal mart credit card acct service card credit pal pay prepaid credit card fixed rate for life of loan pay bank of america credit card online airline credit card reviews apply for gas credit card instant approval credit card credit line no e mail no credit card free porn card credit merchant merchant credit card sales need a pin for my bank of america credit card sears credit card lawsuits in the 1990s best card college credit student wal mart credit card payment center bank of america +credit card access discover credit card 0 interest student visa classic credit card phone number card college credit free student bank of america credit card logon diamond shamrock gas credit card no credit card sex apply online for instant approval credit card ned to make payment on my shell credit card mbna america bank credit card credit card merchant account program credit card bad credit card 0 interest on balance transfer offers card credit debt reduction xxasdf credit card processing online payment unsecured credit card offers credit card for bad credit compare credit card reward canadian master card bad credit providian credit card login credit card online approval linkpoint 3000 credit card terminal credit card and 0 how to consolidate credit card debts accept credit card online merchant account christian credit card debt counseling unsecured card bad credit should i settle my debt sears credit card credit card counseling tacoma default pin for bank of america credit card shell credit card citibank sears business credit card chase credit card online payment credit card numbers names getting away with credit card fraud bank of america credit card 0 apr orchard bank credit card offer citi identity monitor credit card credit card processing jobs online business credit card online approval applications credit card debt and relief instant credit card applications need unsecured credit card with bad credit arizona card credit debt help judgment non profit credit card debt reduction ata airline credit card unsecured credit card poor credit closing a credit card account instant approval credit card application airline miles credit card offers aspire secured credit card credit card for bad credit with no annual fee instant credit card decision secure credit card information against fraud citibank settlement credit card free cell phones no credit card best instant approval credit card credit card terminal repair wamu online credit card account instant on line credit card approval allintitle free credit card debt consolidation nurit credit card terminal could i get a unsecured credit card with bad credit jp morgan chase credit card services pay household bank credit card bad credit unsecured credit card highest available balance aspire credit card scam college student credit card dept business credit card 0 interest find help with credit card debt + no fees citibank credit card homepage phentermine no credit card needed citibank credit card balance need help with credit card and unsecured debt best consumer information about credit card debt free help unsecured credit card bad credit wisconsin becoming an online merchant with credit card processing get a credit card with bad credit apply for an unsecured credit card credit card numbers for free credit card 0 15 months credit card processing without a merchant account card credit mart online wal free credit card counseling in missouri consolidate your credit card bills aspire visa gold credit card credit card debt relief services get a providian credit card need credit card for free college student aarp credit card services chase bank of america credit card sign on verifone omni credit card terminal best credit card for bad credit wal mart credit credit card credit card application online approval easy online credit approval credit card providian business credit card card credit debt reduction strategy non profit credit card debt reduction wa state aspire credit card columbus ga consolidate credit cards on to one card merchant credit card account federal law for credit card debt relief no credit card required porn aspire visa credit card bad credit card unsecured gauranteed approval credit card payment software credit card 0 percent interest illegal credit card numbers fastest credit card debt elimination wal mart credit card shopping pass bad credit need credit card credit card counseling credit card merchant accoun compare credit card companies credit card fraud theft nm bank of america credit card applications best high credit limits credit card offers bad credit orchard bank credit card activation phone number credit card numbers hack free credit card processing for your online business card credit merchant online processing credit card bad credit unsecured instant approval credit card with 0 apr household bank credit card paybill bad credit card offer negotiate credit card debt reduction hypercom credit card terminal providian services paypal credit card login low cost credit card processing online simular to paypal credit card student low interest rate hsbc credit card account sears credit card account online mbna credit card payment center airline miles credit card comparison can you use sams club credit card at wal mart household bank credit card paym credit card with low rate card consolidation credit debt loan credit card offers with 12 months zero apr thank you redemption citi bank credit card reduction credit card debt debt management consolidation credit card gas credit card for bad credit credit card 0 balance transfer card consolidation credit debt loan mortgage no applying wal mart credit card juniper credit card account credit card wal mart credit card terminal program visa card with bad credit compare credit card rates and terms credit card machine terminal credit card phone numbers lawyers in el paso, texas who can help you credit card debt mbna credit card uk valid credit card numbers for hacking purposes cash back versus air miles credit card household bank credit card payment how to data mine credit card numbers credit card debt relief good and bad credit card payment online moneymarket credit card compare credit card debt help information wisconsin unsecured credit card collection credit card low interest rate 640 credit score guaranteed unsecured credit card unsecured chase credit card for people with bad credit credit card application for college student credit card fraud investigator bank of america credit card sign in get approved instantly for unsecured credit card bad credit shell credit card applications low cost credit card processing online similar to paypal credit card payment service how do i consolidate my credit card debt household bank credit card official site interest 0 balance transfer fee credit card shell consumer credit card issued by citibank south dakota my aspire credit card balance manage household bank credit card unsecured credit card bad credit ok low annual percentage rate credit card credit card apps for bad credit instant approval how to fraud with credit card company citibank philippines credit card debt college student credit card offer credit card compare transfer aspire credit card login aarp card chase credit from services free trial isps no credit card or bank account needed bp gas credit card providian credit card payment 0nline gas credit card what are the effects of credit card fraud apply for orchard bank credit card buy mbna personal credit card online chevron gas credit card aspire credit card payment online washington mutual and providian bank credit card offers reduce and consolidate credit card payments washington mutual providian credit card how to apply for sears credit card student loan consolidation,credit card debt,personal loan, credit card offer 0 close credit card account where can i get a credit card with bad credit unsecured no fee credit card offers bad credit apply for providian visa credit card the first national merchant credit card mbna europe credit card cash back gasoline credit card sears credit card home page credit card fraud statistics regular shell gas credit card credit card account access mbna closed my credit card accounts credit card fraud specialist unsecured credit card for bad credit customers jcpenney citi credit card employment with credit card counseling services "consolidate+credit+card+debt" household bank credit card payments online college student platinum credit card aspire credit card log in bad credit unsecured card 500 aspire credit card reviews credit card debt management uk citibank credit card information aspire bad credit credit card instant credit card approval online use card today college student credit card application lifetime low interest rate credit card bank of america online credit card apply providian credit card credit card bank of america credit card with 0 credit card merchant machines for business credit card rate consolidate car loan and credit card payments mbna net access login credit card consolidate credit card payment mobile gas credit card citibank credit card for manhattan college students pay pal chabge credit card primary unsecured credit card debt loans chase online credit card services free wireless credit card terminal free ringtones with no credit card for us cellular phones american airline miles credit card how does online credit card processing credit card application for people with bad credit credit card programs with 0 interest non profit credit card counseling services chi credit card debt counseling oprah online pharmacyfoeiign credit card processing company card company consolidate credit debt that $10,000 credit card for people with bad credit bad credit rating credit card chase credit card payment center 15 month 0 interest credit card american credit card counseling arbonne mbna credit card fraud loss prevention credit card processing texas credit card pays cash back government help for credit card debt aspire credit card co aspire credit card in columbus ga customer service number orchard bank credit card customer service mbna ncl credit card wal mart credit card center sears credit card online payment fixed rate credit card transfer low interest fixed rate credit card help pay off credit card debt credit card fixed rate balance transfers low apr credit card airline miles no fee instant credit card for people with bad credit pay big balances or higher interest rate credit card canadian bad credit credit card companies citi rewards credit card apply for credit card instant online approval instant approval bad credit card mbna america credit card payments mbna net access log in credit card how to consolidate credit card debt need to check on my credit card aspire capital one credit card for people with bad credit credit card terminal fd100 credit card debt reduction san diego county open source or php online credit card processing software guaranteed online approval credit card search credit card debt help payment with credit card unsecured providian credit card for bad credit credit card and bad credit merchant bank credit card agreement first unsecured credit card business+credit+card+offer compare credit card holder prices need help droving in credit card debt shell credit card account on line credit card bonus airline miles very low interest rate credit card credit card debt management chase uk cheaper credit card shell texaco credit card online payment citi bank credit card offers for bankruptcy credit card consolidation debt loan relief compare payment credit card online poker searchers.com q credit card debt management credit card machines for people with bad credit credit card offering 0 interest citi credit card pay credit card lowest rate mbna com credit card childrens place credit card online approval apply online for credit card instant approval no credit citi bank student credit card credit card counseling massachusetts shell credit card center address online instant approval credit card applications credit card service fee for merchant pay shell credit card account on line card citi credit american express card for people wth bad credit card credit pal pay visa credit card payment airline mileage credit card companies who help pay off credit card debt no annual fee guaranteed instant approval apply credit card household bank credit card hsbc report credit card fraud gas miles credit card unsecured master or viva credit card bad ctedit no credit mbna credit card statement aspire credit card web site consolidate credit card debt removal aspire card credit apply for sears credit card no annual fee airline reward credit card free stolen credit card numbers instant credit card processing credit card with unsecured procesing credit card consolidate loan online discount gas credit card compare credit card offers providian credit card raises credit limit bank of america credit card decision pay pal plus credit card make payment household bank credit card account information citibank credit card login college student credit card debt newspaper shell credit card account internet credit card merchant unsecured visa card bad credit best buy credit card payment how to apply for an aspire credit card shell credit card online payments the best deal on credit card offers what is credit card fraud all credit card for 0 credit card debt relief pros cons chase credit card services randall road elgin illinois credit card offers for fair to bad credit help for christians in credit card debt money bank servicing site for pay pal plus credit card mbna credit card net access business credit card bad credit pay bank of america credit card bill credit card double cash back accept credit card payment online total credit card debt elimination bad debt credit card trustee instant approval online credit card for fair credit card college credit debt statistics student credit card offer "airline miles""cash back" credit card debt consolidation no mortgage loan de card credit online shell bank of america credit card payment center consolidate credit card payment in australia 36 months 0 interest on balance transfers credit card free porn websites no credit card numbers required orchard credit card payment no credit card cell phones closing credit card account account holder deceased business card credit offer small get unsecured credit card bwith bad credit ge money bank credit card payment what best deal credit card citi bank credit card top 10 free credit card debt relief bank of america credit card status debt elimination program credit card wal mart prepaid credit card chase credit card services home credit card numbers instant approval credit card for bad credit zero apr credit card online terminal for credit card processing college student applyinh for credit card credit card insurance mbna sears credit card .com credit card transfer 0 percent how to get credit card numbers apply for a credit card at mid america bank free hacked credit card numbers emerge credit card website providian credit card offers 0 interest credit card terminal software credit card prime rate shell credit card online payment gas credit card student college college student credit card need cosigner credit card promotions free airline tickets nellie mae credit card debt college student business card credit offer mbna uk credit card credit card terminal t7p credit card no credit unsecured logan airport credit card fraud household bank credit card service supaserach.com q credit card debt management said make can i see some real credit card numbers debt settlement or credit card counseling companies free credit card numbers instant cash loan no credit check no check grautee card instant online approval credit card applications application card credit mart online wal debt reduction credit card consolidation retaining compare credit card reward programs credit card special with 0 free credit card debt help internet merchant credit card account citibank credit card accounts no bank account credit card offers unsecured credit cards credit card debt debt relief or lawyer ua airline credit card hong kong college student with credit card debt credit card interest rate reduction citibank student credit card chase bank credit card services credit card with 0 balance transfer consumer credit card debt counseling bank loans for credit card debt help credit card offers with 0 interest for a year free low cost software for online credit card processing aspire credit card customer service payment processing credit card counseling display card credit debt help non profit debt reduction solutions credit card