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:
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
|
||||||
}
|
|
||||||
|
@@ -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
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user