37#define F(X,Y,Z) (((X)&(Y)) | ((~(X))&(Z)))
38#define G(X,Y,Z) (((X)&(Y)) | ((X)&(Z)) | ((Y)&(Z)))
39#define H(X,Y,Z) ((X)^(Y)^(Z))
41#define lshift(x,s) ((((x)<<(s))&0xFFFFFFFF) | (((x)>>(32-(s)))&0xFFFFFFFF))
43#define lshift(x,s) (((x)<<(s)) | ((x)>>(32-(s))))
46#define ROUND1(a,b,c,d,k,s) a = lshift(a + F(b,c,d) + X[k], s)
47#define ROUND2(a,b,c,d,k,s) a = lshift(a + G(b,c,d) + X[k] + 0x5A827999,s)
48#define ROUND3(a,b,c,d,k,s) a = lshift(a + H(b,c,d) + X[k] + 0x6ED9EBA1,s)
55 for (
int j = 0; j < 16; j++)
58 uint32_t
A =
m->A,
B =
m->B,
C =
m->C,
D =
m->D;
59 uint32_t AA =
A, BB =
B, CC =
C, DD =
D;
61 ROUND1(
A,
B,
C,
D, 0, 3);
ROUND1(
D,
A,
B,
C, 1, 7);
62 ROUND1(
C,
D,
A,
B, 2, 11);
ROUND1(
B,
C,
D,
A, 3, 19);
63 ROUND1(
A,
B,
C,
D, 4, 3);
ROUND1(
D,
A,
B,
C, 5, 7);
64 ROUND1(
C,
D,
A,
B, 6, 11);
ROUND1(
B,
C,
D,
A, 7, 19);
65 ROUND1(
A,
B,
C,
D, 8, 3);
ROUND1(
D,
A,
B,
C, 9, 7);
66 ROUND1(
C,
D,
A,
B, 10, 11);
ROUND1(
B,
C,
D,
A, 11, 19);
67 ROUND1(
A,
B,
C,
D, 12, 3);
ROUND1(
D,
A,
B,
C, 13, 7);
68 ROUND1(
C,
D,
A,
B, 14, 11);
ROUND1(
B,
C,
D,
A, 15, 19);
70 ROUND2(
A,
B,
C,
D, 0, 3);
ROUND2(
D,
A,
B,
C, 4, 5);
71 ROUND2(
C,
D,
A,
B, 8, 9);
ROUND2(
B,
C,
D,
A, 12, 13);
72 ROUND2(
A,
B,
C,
D, 1, 3);
ROUND2(
D,
A,
B,
C, 5, 5);
73 ROUND2(
C,
D,
A,
B, 9, 9);
ROUND2(
B,
C,
D,
A, 13, 13);
74 ROUND2(
A,
B,
C,
D, 2, 3);
ROUND2(
D,
A,
B,
C, 6, 5);
75 ROUND2(
C,
D,
A,
B, 10, 9);
ROUND2(
B,
C,
D,
A, 14, 13);
76 ROUND2(
A,
B,
C,
D, 3, 3);
ROUND2(
D,
A,
B,
C, 7, 5);
77 ROUND2(
C,
D,
A,
B, 11, 9);
ROUND2(
B,
C,
D,
A, 15, 13);
79 ROUND3(
A,
B,
C,
D, 0, 3);
ROUND3(
D,
A,
B,
C, 8, 9);
80 ROUND3(
C,
D,
A,
B, 4, 11);
ROUND3(
B,
C,
D,
A, 12, 15);
81 ROUND3(
A,
B,
C,
D, 2, 3);
ROUND3(
D,
A,
B,
C, 10, 9);
82 ROUND3(
C,
D,
A,
B, 6, 11);
ROUND3(
B,
C,
D,
A, 14, 15);
83 ROUND3(
A,
B,
C,
D, 1, 3);
ROUND3(
D,
A,
B,
C, 9, 9);
84 ROUND3(
C,
D,
A,
B, 5, 11);
ROUND3(
B,
C,
D,
A, 13, 15);
85 ROUND3(
A,
B,
C,
D, 3, 3);
ROUND3(
D,
A,
B,
C, 11, 9);
86 ROUND3(
C,
D,
A,
B, 7, 11);
ROUND3(
B,
C,
D,
A, 15, 15);
88 A += AA;
B += BB;
C += CC;
D += DD;
91 A &= 0xFFFFFFFF;
B &= 0xFFFFFFFF;
92 C &= 0xFFFFFFFF;
D &= 0xFFFFFFFF;
95 for (
int j = 0; j < 16; j++)
98 m->A =
A;
m->B =
B;
m->C =
C;
m->D =
D;
101static void copy64 (uint32_t*
M,
const unsigned char* in)
103 for (
int i = 0;
i < 16;
i++)
104 M[
i] = (in[
i * 4 + 3] << 24) | (in[
i * 4 + 2] << 16) | (in[
i * 4 + 1] << 8) | (in[
i * 4 + 0] << 0);
107static void copy4 (
unsigned char* out, uint32_t x)
110 out[1] = (x>>8)&0xFF;
111 out[2] = (x>>16)&0xFF;
112 out[3] = (x>>24)&0xFF;
127 unsigned char buf[128];
132 const uint32_t b =
m->totalN * 8;
187static void mdfour (
unsigned char* out,
const unsigned char* in,
int n)
206 mdfour((
unsigned char*) digest, (
const unsigned char*) buffer,
length);
208 return digest[0] ^ digest[1] ^ digest[2] ^ digest[3];
static void mdfour_update(struct mdfour *md, const unsigned char *in, int n)
#define ROUND3(a, b, c, d, k, s)
static void mdfour_tail(const unsigned char *in, int n)
static void mdfour64(uint32_t *M)
static void mdfour(unsigned char *out, const unsigned char *in, int n)
static void mdfour_result(struct mdfour *md, unsigned char *out)
static void copy64(uint32_t *M, const unsigned char *in)
#define ROUND2(a, b, c, d, k, s)
static void mdfour_begin(struct mdfour *md)
unsigned Com_BlockChecksum(const void *buffer, int length)
#define ROUND1(a, b, c, d, k, s)
static void copy4(unsigned char *out, uint32_t x)
QGL_EXTERN GLuint GLsizei GLsizei * length