ReactOS  0.4.15-dev-2972-gda2a567
md2.c File Reference
#include "tomcrypt.h"
Include dependency graph for md2.c:

Go to the source code of this file.

Functions

static void md2_update_chksum (md2_state *md2)
 
static void md2_compress (md2_state *md2)
 
int md2_init (md2_state *md2)
 
int md2_process (md2_state *md2, const unsigned char *buf, unsigned long len)
 
int md2_done (md2_state *md2, unsigned char *hash)
 

Variables

static const unsigned char PI_SUBST [256]
 

Function Documentation

◆ md2_compress()

static void md2_compress ( md2_state md2)
static

Definition at line 69 of file md2.c.

70 {
71  int j, k;
72  unsigned char t;
73 
74  /* copy block */
75  for (j = 0; j < 16; j++) {
76  md2->X[16+j] = md2->buf[j];
77  md2->X[32+j] = md2->X[j] ^ md2->X[16+j];
78  }
79 
80  t = 0;
81 
82  /* do 18 rounds */
83  for (j = 0; j < 18; j++) {
84  for (k = 0; k < 48; k++) {
85  t = (md2->X[k] ^= PI_SUBST[(int)(t & 255)]);
86  }
87  t = (t + (unsigned char)j) & 255;
88  }
89 }
GLdouble GLdouble t
Definition: gl.h:2047
unsigned char
Definition: typeof.h:29
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
static const unsigned char PI_SUBST[256]
Definition: md2.c:33
#define md2
Definition: compat-1.3.h:2015
int k
Definition: mpi.c:3369
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by md2_done(), and md2_process().

◆ md2_done()

int md2_done ( md2_state md2,
unsigned char hash 
)

Definition at line 125 of file md2.c.

126 {
127  unsigned long i, k;
128 
129  if (md2->curlen >= sizeof(md2->buf)) {
130  return CRYPT_INVALID_ARG;
131  }
132 
133  /* pad the message */
134  k = 16 - md2->curlen;
135  for (i = md2->curlen; i < 16; i++) {
136  md2->buf[i] = (unsigned char)k;
137  }
138 
139  /* hash and update */
140  md2_compress(md2);
142 
143  /* hash checksum */
144  memcpy(md2->buf, md2->chksum, 16);
145  md2_compress(md2);
146 
147  /* output is lower 16 bytes of X */
148  memcpy(hash, md2->X, 16);
149 
150  return CRYPT_OK;
151 }
static void md2_compress(md2_state *md2)
Definition: md2.c:69
static void md2_update_chksum(md2_state *md2)
Definition: md2.c:55
unsigned char
Definition: typeof.h:29
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define md2
Definition: compat-1.3.h:2015
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
Definition: _hash_fun.h:40
int k
Definition: mpi.c:3369

Referenced by finalize_hash_impl().

◆ md2_init()

int md2_init ( md2_state md2)

Definition at line 91 of file md2.c.

92 {
93  /* MD2 uses a zero'ed state... */
94  memset(md2->X, 0, sizeof(md2->X));
95  memset(md2->chksum, 0, sizeof(md2->chksum));
96  memset(md2->buf, 0, sizeof(md2->buf));
97  md2->curlen = 0;
98  return CRYPT_OK;
99 }
#define md2
Definition: compat-1.3.h:2015
#define memset(x, y, z)
Definition: compat.h:39

◆ md2_process()

int md2_process ( md2_state md2,
const unsigned char buf,
unsigned long  len 
)

Definition at line 101 of file md2.c.

102 {
103  unsigned long n;
104 
105  if (md2->curlen > sizeof(md2->buf)) {
106  return CRYPT_INVALID_ARG;
107  }
108  while (len > 0) {
109  n = MIN(len, (16 - md2->curlen));
110  memcpy(md2->buf + md2->curlen, buf, (size_t)n);
111  md2->curlen += n;
112  buf += n;
113  len -= n;
114 
115  /* is 16 bytes full? */
116  if (md2->curlen == 16) {
117  md2_compress(md2);
119  md2->curlen = 0;
120  }
121  }
122  return CRYPT_OK;
123 }
static void md2_compress(md2_state *md2)
Definition: md2.c:69
static void md2_update_chksum(md2_state *md2)
Definition: md2.c:55
GLdouble n
Definition: glext.h:7729
T MIN(T a, T b)
Definition: polytest.cpp:79
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
#define md2
Definition: compat-1.3.h:2015

◆ md2_update_chksum()

static void md2_update_chksum ( md2_state md2)
static

Definition at line 55 of file md2.c.

56 {
57  int j;
58  unsigned char L;
59  L = md2->chksum[15];
60  for (j = 0; j < 16; j++) {
61 
62 /* caution, the RFC says its "C[j] = S[M[i*16+j] xor L]" but the reference source code [and test vectors] say
63  otherwise.
64 */
65  L = (md2->chksum[j] ^= PI_SUBST[(int)(md2->buf[j] ^ L)] & 255);
66  }
67 }
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
static const unsigned char PI_SUBST[256]
Definition: md2.c:33
static const WCHAR L[]
Definition: oid.c:1250
#define md2
Definition: compat-1.3.h:2015
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by md2_done(), and md2_process().

Variable Documentation

◆ PI_SUBST

const unsigned char PI_SUBST[256]
static
Initial value:
= {
41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6,
19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188,
76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24,
138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251,
245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63,
148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50,
39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48, 179, 72, 165,
181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210,
150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157,
112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27,
96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15,
85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197,
234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65,
129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123,
8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233,
203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228,
166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237,
31, 26, 219, 153, 141, 51, 159, 17, 131, 20
}

Definition at line 33 of file md2.c.

Referenced by md2_compress(), and md2_update_chksum().