move to the pseudo-standard APIs for md4,md5,sha

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@7815 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Assar Westerlund
2000-01-25 23:01:58 +00:00
parent d5c8ae247b
commit 2cc99ee904
6 changed files with 110 additions and 133 deletions

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1995, 1996, 1997, 1998, 1999 Kungliga Tekniska H<>gskolan * Copyright (c) 1995 - 2000 Kungliga Tekniska H<>gskolan
* (Royal Institute of Technology, Stockholm, Sweden). * (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved. * All rights reserved.
* *
@@ -47,10 +47,10 @@ RCSID("$Id$");
#define X data #define X data
void void
md4_init (struct md4 *m) MD4Init (struct md4 *m)
{ {
m->offset = 0; m->sz[0] = 0;
m->sz = 0; m->sz[1] = 0;
D = 0x10325476; D = 0x10325476;
C = 0x98badcfe; C = 0x98badcfe;
B = 0xefcdab89; B = 0xefcdab89;
@@ -175,17 +175,23 @@ struct x32{
}; };
void void
md4_update (struct md4 *m, const void *v, size_t len) MD4Update (struct md4 *m, const void *v, size_t len)
{ {
const unsigned char *p = v; const unsigned char *p = v;
m->sz += len; size_t old_sz = m->sz[0];
while(len > 0){ size_t offset;
size_t l = min(len, 64 - m->offset);
memcpy(m->save + m->offset, p, l); m->sz[0] += len * 8;
m->offset += l; if (m->sz[0] < old_sz)
++m->sz[1];
offset = (old_sz / 8) % 64;
while(len > 0) {
size_t l = min(len, 64 - offset);
memcpy(m->save + offset, p, l);
offset += l;
p += l; p += l;
len -= l; len -= l;
if(m->offset == 64){ if(offset == 64) {
#if defined(WORDS_BIGENDIAN) #if defined(WORDS_BIGENDIAN)
int i; int i;
u_int32_t current[16]; u_int32_t current[16];
@@ -198,26 +204,29 @@ md4_update (struct md4 *m, const void *v, size_t len)
#else #else
calc(m, (u_int32_t*)m->save); calc(m, (u_int32_t*)m->save);
#endif #endif
m->offset = 0; offset = 0;
} }
} }
} }
void void
md4_finito (struct md4 *m, void *res) MD4Final (void *res, struct md4 *m)
{ {
static unsigned char zeros[72]; static unsigned char zeros[72];
u_int32_t len; unsigned offset = (m->sz[0] / 8) % 64;
unsigned int dstart = (120 - m->offset - 1) % 64 + 1; unsigned int dstart = (120 - offset - 1) % 64 + 1;
*zeros = 0x80; *zeros = 0x80;
memset (zeros + 1, 0, sizeof(zeros) - 1); memset (zeros + 1, 0, sizeof(zeros) - 1);
len = 8 * m->sz; zeros[dstart+0] = (m->sz[0] >> 0) & 0xff;
zeros[dstart+0] = (len >> 0) & 0xff; zeros[dstart+1] = (m->sz[0] >> 8) & 0xff;
zeros[dstart+1] = (len >> 8) & 0xff; zeros[dstart+2] = (m->sz[0] >> 16) & 0xff;
zeros[dstart+2] = (len >> 16) & 0xff; zeros[dstart+3] = (m->sz[0] >> 24) & 0xff;
zeros[dstart+3] = (len >> 24) & 0xff; zeros[dstart+4] = (m->sz[1] >> 0) & 0xff;
md4_update (m, zeros, dstart + 8); zeros[dstart+5] = (m->sz[1] >> 8) & 0xff;
zeros[dstart+6] = (m->sz[1] >> 16) & 0xff;
zeros[dstart+7] = (m->sz[1] >> 24) & 0xff;
MD4Update (m, zeros, dstart + 8);
{ {
int i; int i;
unsigned char *r = (unsigned char *)res; unsigned char *r = (unsigned char *)res;

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1995, 1996, 1997 Kungliga Tekniska H<>gskolan * Copyright (c) 1995 - 2000 Kungliga Tekniska H<>gskolan
* (Royal Institute of Technology, Stockholm, Sweden). * (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved. * All rights reserved.
* *
@@ -47,12 +47,13 @@
#endif #endif
struct md4 { struct md4 {
unsigned int offset; unsigned int sz[2];
unsigned int sz;
u_int32_t counter[4]; u_int32_t counter[4];
unsigned char save[64]; unsigned char save[64];
}; };
void md4_init (struct md4 *m); typedef struct md4 MD4_CTX;
void md4_update (struct md4 *m, const void *p, size_t len);
void md4_finito (struct md4 *m, void *res); void MD4Init (struct md4 *m);
void MD4Update (struct md4 *m, const void *p, size_t len);
void MD4Final (void *res, struct md4 *m);

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1995, 1996, 1997, 1998, 1999 Kungliga Tekniska H<>gskolan * Copyright (c) 1995 - 2000 Kungliga Tekniska H<>gskolan
* (Royal Institute of Technology, Stockholm, Sweden). * (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved. * All rights reserved.
* *
@@ -47,10 +47,10 @@ RCSID("$Id$");
#define X data #define X data
void void
md5_init (struct md5 *m) MD5Init (struct md5 *m)
{ {
m->offset = 0; m->sz[0] = 0;
m->sz = 0; m->sz[1] = 0;
D = 0x10325476; D = 0x10325476;
C = 0x98badcfe; C = 0x98badcfe;
B = 0xefcdab89; B = 0xefcdab89;
@@ -199,17 +199,23 @@ struct x32{
}; };
void void
md5_update (struct md5 *m, const void *v, size_t len) MD5Update (struct md5 *m, const void *v, size_t len)
{ {
const unsigned char *p = v; const unsigned char *p = v;
m->sz += len; size_t old_sz = m->sz[0];
size_t offset;
m->sz[0] += len * 8;
if (m->sz[0] < old_sz)
++m->sz[1];
offset = (old_sz / 8) % 64;
while(len > 0){ while(len > 0){
size_t l = min(len, 64 - m->offset); size_t l = min(len, 64 - offset);
memcpy(m->save + m->offset, p, l); memcpy(m->save + offset, p, l);
m->offset += l; offset += l;
p += l; p += l;
len -= l; len -= l;
if(m->offset == 64){ if(offset == 64){
#if defined(WORDS_BIGENDIAN) #if defined(WORDS_BIGENDIAN)
int i; int i;
u_int32_t current[16]; u_int32_t current[16];
@@ -222,26 +228,29 @@ md5_update (struct md5 *m, const void *v, size_t len)
#else #else
calc(m, (u_int32_t*)m->save); calc(m, (u_int32_t*)m->save);
#endif #endif
m->offset = 0; offset = 0;
} }
} }
} }
void void
md5_finito (struct md5 *m, void *res) MD5Final (void *res, struct md5 *m)
{ {
static unsigned char zeros[72]; static unsigned char zeros[72];
u_int32_t len; unsigned offset = (m->sz[0] / 8) % 64;
unsigned int dstart = (120 - m->offset - 1) % 64 + 1; unsigned int dstart = (120 - offset - 1) % 64 + 1;
*zeros = 0x80; *zeros = 0x80;
memset (zeros + 1, 0, sizeof(zeros) - 1); memset (zeros + 1, 0, sizeof(zeros) - 1);
len = 8 * m->sz; zeros[dstart+0] = (m->sz[0] >> 0) & 0xff;
zeros[dstart+0] = (len >> 0) & 0xff; zeros[dstart+1] = (m->sz[0] >> 8) & 0xff;
zeros[dstart+1] = (len >> 8) & 0xff; zeros[dstart+2] = (m->sz[0] >> 16) & 0xff;
zeros[dstart+2] = (len >> 16) & 0xff; zeros[dstart+3] = (m->sz[0] >> 24) & 0xff;
zeros[dstart+3] = (len >> 24) & 0xff; zeros[dstart+4] = (m->sz[1] >> 0) & 0xff;
md5_update (m, zeros, dstart + 8); zeros[dstart+5] = (m->sz[1] >> 8) & 0xff;
zeros[dstart+6] = (m->sz[1] >> 16) & 0xff;
zeros[dstart+7] = (m->sz[1] >> 24) & 0xff;
MD5Update (m, zeros, dstart + 8);
{ {
int i; int i;
unsigned char *r = (unsigned char *)res; unsigned char *r = (unsigned char *)res;
@@ -263,28 +272,3 @@ md5_finito (struct md5 *m, void *res)
} }
#endif #endif
} }
/*
* This is only for linkage compatibility!
*/
#undef MD5Init
#undef MD5Update
#undef MD5Final
void
MD5Init (MD5_CTX *mdContext)
{
md5_init(&mdContext->m.d5);
}
void
MD5Update (MD5_CTX *mdContext, const unsigned char *inBuf, unsigned int inLen)
{
md5_update(&mdContext->m.d5, (const unsigned char *)inBuf, inLen);
}
void
MD5Final (unsigned char digest[16], MD5_CTX *mdContext)
{
md5_finito(&mdContext->m.d5, digest);
}

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1995, 1996, 1997 Kungliga Tekniska H<>gskolan * Copyright (c) 1995 - 2000 Kungliga Tekniska H<>gskolan
* (Royal Institute of Technology, Stockholm, Sweden). * (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved. * All rights reserved.
* *
@@ -47,40 +47,13 @@
#endif #endif
struct md5 { struct md5 {
unsigned int offset; unsigned int sz[2];
unsigned int sz;
u_int32_t counter[4]; u_int32_t counter[4];
unsigned char save[64]; unsigned char save[64];
}; };
void md5_init (struct md5 *m); typedef struct md5 MD5_CTX;
void md5_update (struct md5 *m, const void *p, size_t len);
void md5_finito (struct md5 *m, void *res); /* u_int32_t res[4] */
/* void MD5Init (struct md5 *m);
* Functions for compatibility that have never been tested. void MD5Update (struct md5 *m, const void *p, size_t len);
*/ void MD5Final (void *res, struct md5 *m); /* u_int32_t res[4] */
typedef struct {
u_int32_t i[2]; /* number of _bits_ handled mod 2^64 */
u_int32_t buf[4]; /* scratch buffer */
unsigned char in[64]; /* input buffer */
} MD5_CTX_PREAMBLE;
typedef struct {
union {
MD5_CTX_PREAMBLE preamble_;
struct md5 d5;
} m;
} MD5_CTX;
void MD5Init (MD5_CTX *mdContext);
void MD5Update (MD5_CTX *mdContext,
const unsigned char *inBuf,
unsigned int inLen);
void MD5Final (unsigned char digest[16], MD5_CTX *mdContext);
#ifndef NO_MD5_MACROS
#define MD5Init(mdContext) md5_init(&(mdContext)->m.d5)
#define MD5Update(mdCtx, inBuf, inLen) md5_update(&(mdCtx)->m.d5, inBuf, inLen)
#define MD5Final(digest, mdCtx) md5_finito(&(mdCtx)->m.d5, (digest))
#endif

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1995, 1996, 1997, 1998, 1999 Kungliga Tekniska H<>gskolan * Copyright (c) 1995 - 2000 Kungliga Tekniska H<>gskolan
* (Royal Institute of Technology, Stockholm, Sweden). * (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved. * All rights reserved.
* *
@@ -48,10 +48,10 @@ RCSID("$Id$");
#define X data #define X data
void void
sha_init (struct sha *m) SHA1Init (struct sha1 *m)
{ {
m->offset = 0; m->sz[0] = 0;
m->sz = 0; m->sz[1] = 0;
A = 0x67452301; A = 0x67452301;
B = 0xefcdab89; B = 0xefcdab89;
C = 0x98badcfe; C = 0x98badcfe;
@@ -83,7 +83,7 @@ do { \
} while(0) } while(0)
static inline void static inline void
calc (struct sha *m, u_int32_t *in) calc (struct sha1 *m, u_int32_t *in)
{ {
u_int32_t AA, BB, CC, DD, EE; u_int32_t AA, BB, CC, DD, EE;
u_int32_t data[80]; u_int32_t data[80];
@@ -225,17 +225,23 @@ struct x32{
}; };
void void
sha_update (struct sha *m, const void *v, size_t len) SHA1Update (struct sha1 *m, const void *v, size_t len)
{ {
const unsigned char *p = v; const unsigned char *p = v;
m->sz += len; size_t old_sz = m->sz[0];
size_t offset;
m->sz[0] += len * 8;
if (m->sz[0] < old_sz)
++m->sz[1];
offset = (old_sz / 8) % 64;
while(len > 0){ while(len > 0){
size_t l = min(len, 64 - m->offset); size_t l = min(len, 64 - offset);
memcpy(m->save + m->offset, p, l); memcpy(m->save + offset, p, l);
m->offset += l; offset += l;
p += l; p += l;
len -= l; len -= l;
if(m->offset == 64){ if(offset == 64){
#if !defined(WORDS_BIGENDIAN) || defined(_CRAY) #if !defined(WORDS_BIGENDIAN) || defined(_CRAY)
int i; int i;
u_int32_t current[16]; u_int32_t current[16];
@@ -248,26 +254,29 @@ sha_update (struct sha *m, const void *v, size_t len)
#else #else
calc(m, (u_int32_t*)m->save); calc(m, (u_int32_t*)m->save);
#endif #endif
m->offset = 0; offset = 0;
} }
} }
} }
void void
sha_finito (struct sha *m, void *res) SHA1Final (void *res, struct sha1 *m)
{ {
static unsigned char zeros[72]; static unsigned char zeros[72];
u_int32_t len; unsigned offset = (m->sz[0] / 8) % 64;
unsigned int dstart = (120 - m->offset - 1) % 64 + 1; unsigned int dstart = (120 - offset - 1) % 64 + 1;
*zeros = 0x80; *zeros = 0x80;
memset (zeros + 1, 0, sizeof(zeros) - 1); memset (zeros + 1, 0, sizeof(zeros) - 1);
len = 8 * m->sz; zeros[dstart+7] = (m->sz[0] >> 0) & 0xff;
zeros[dstart+7] = (len >> 0) & 0xff; zeros[dstart+6] = (m->sz[0] >> 8) & 0xff;
zeros[dstart+6] = (len >> 8) & 0xff; zeros[dstart+5] = (m->sz[0] >> 16) & 0xff;
zeros[dstart+5] = (len >> 16) & 0xff; zeros[dstart+4] = (m->sz[0] >> 24) & 0xff;
zeros[dstart+4] = (len >> 24) & 0xff; zeros[dstart+3] = (m->sz[1] >> 0) & 0xff;
sha_update (m, zeros, dstart + 8); zeros[dstart+2] = (m->sz[1] >> 8) & 0xff;
zeros[dstart+1] = (m->sz[1] >> 16) & 0xff;
zeros[dstart+0] = (m->sz[1] >> 24) & 0xff;
SHA1Update (m, zeros, dstart + 8);
{ {
int i; int i;
unsigned char *r = (unsigned char*)res; unsigned char *r = (unsigned char*)res;

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1995, 1996, 1997 Kungliga Tekniska H<>gskolan * Copyright (c) 1995 - 2000 Kungliga Tekniska H<>gskolan
* (Royal Institute of Technology, Stockholm, Sweden). * (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved. * All rights reserved.
* *
@@ -46,13 +46,14 @@
#include <ktypes.h> #include <ktypes.h>
#endif #endif
struct sha { struct sha1 {
unsigned int offset; unsigned int sz[2];
unsigned int sz;
u_int32_t counter[5]; u_int32_t counter[5];
unsigned char save[64]; unsigned char save[64];
}; };
void sha_init (struct sha *m); typedef struct sha1 SHA1_CTX;
void sha_update (struct sha *m, const void *v, size_t len);
void sha_finito (struct sha *m, void *res); void SHA1Init (struct sha1 *m);
void SHA1Update (struct sha1 *m, const void *v, size_t len);
void SHA1Final (void *res, struct sha1 *m);