32 #include "../shared/shared.h"
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;
101 static 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);
107 static 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;
187 static 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];
unsigned Com_BlockChecksum(const void *buffer, int length)
#define ROUND1(a, b, c, d, k, s)
static void mdfour_begin(struct mdfour *md)
static void copy4(unsigned char *out, uint32_t x)
static void mdfour(unsigned char *out, const unsigned char *in, int n)
QGL_EXTERN GLuint GLsizei GLsizei * length
static void mdfour_tail(const unsigned char *in, int n)
#define ROUND3(a, b, c, d, k, s)
static void mdfour_result(struct mdfour *md, unsigned char *out)
#define ROUND2(a, b, c, d, k, s)
static void copy64(uint32_t *M, const unsigned char *in)
static void mdfour_update(struct mdfour *md, const unsigned char *in, int n)
static void mdfour64(uint32_t *M)