Fix for Crays
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@3089 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -68,7 +68,7 @@ md4_init (struct md4 *m)
|
||||
A = 0x67452301;
|
||||
}
|
||||
|
||||
static inline u_int32_t
|
||||
static u_int32_t
|
||||
cshift (u_int32_t x, unsigned n)
|
||||
{
|
||||
return (x << n) | (x >> (32 - n));
|
||||
@@ -85,7 +85,7 @@ a = cshift(a + OP(b,c,d) + X[k] + i, s)
|
||||
#define DO2(a,b,c,d,k,s,i) DOIT(a,b,c,d,k,s,i,G)
|
||||
#define DO3(a,b,c,d,k,s,i) DOIT(a,b,c,d,k,s,i,H)
|
||||
|
||||
static inline void
|
||||
static void
|
||||
calc (struct md4 *m, u_int32_t *data)
|
||||
{
|
||||
u_int32_t AA, BB, CC, DD;
|
||||
@@ -171,7 +171,7 @@ calc (struct md4 *m, u_int32_t *data)
|
||||
* From `Performance analysis of MD5' by Joseph D. Touch <touch@isi.edu>
|
||||
*/
|
||||
|
||||
static inline u_int32_t
|
||||
static u_int32_t
|
||||
swap_u_int32_t (u_int32_t t)
|
||||
{
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
@@ -189,48 +189,38 @@ swap_u_int32_t (u_int32_t t)
|
||||
#endif
|
||||
}
|
||||
|
||||
struct x32{
|
||||
unsigned int a:32;
|
||||
unsigned int b:32;
|
||||
};
|
||||
|
||||
void
|
||||
md4_update (struct md4 *m, void *v, size_t len)
|
||||
md4_update (struct md4 *m, const void *v, size_t len)
|
||||
{
|
||||
u_char *p = (u_char *)v;
|
||||
const unsigned char *p = v;
|
||||
m->sz += len;
|
||||
if (m->offset == 0 && len % 64 == 0)
|
||||
while (len > 0) {
|
||||
while(len > 0){
|
||||
size_t l = min(len, 64 - m->offset);
|
||||
memcpy(m->save + m->offset, p, l);
|
||||
m->offset += l;
|
||||
p += l;
|
||||
len -= l;
|
||||
if(m->offset == 64){
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
{
|
||||
int i;
|
||||
u_int32_t *u = (u_int32_t *)p;
|
||||
|
||||
for (i = 0; i < 16; ++i)
|
||||
m->current[i] = swap_u_int32_t (u[i]);
|
||||
int i;
|
||||
u_int32_t current[16];
|
||||
struct x32 *u = (struct x32*)m->save;
|
||||
for(i = 0; i < 8; i++){
|
||||
current[2*i+0] = swap_u_int32_t(u[i].a);
|
||||
current[2*i+1] = swap_u_int32_t(u[i].b);
|
||||
}
|
||||
calc (m, m->current);
|
||||
calc(m, current);
|
||||
#else
|
||||
calc (m, (u_int32_t *)p);
|
||||
calc(m, (u_int32_t*)m->save);
|
||||
#endif
|
||||
p += 64;
|
||||
len -= 64;
|
||||
}
|
||||
else
|
||||
while (len > 0) {
|
||||
unsigned l;
|
||||
|
||||
l = min(64 - m->offset, len);
|
||||
memcpy ((char *)m->current + m->offset, p, l);
|
||||
p += l;
|
||||
len -= l;
|
||||
m->offset += l;
|
||||
if (m->offset == 64) {
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 16; ++i)
|
||||
m->current[i] = swap_u_int32_t (m->current[i]);
|
||||
#endif
|
||||
calc (m, m->current);
|
||||
m->offset = 0;
|
||||
}
|
||||
m->offset = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -243,8 +233,10 @@ md4_finito (struct md4 *m, void *res)
|
||||
*zeros = 0x80;
|
||||
memset (zeros + 1, 0, sizeof(zeros) - 1);
|
||||
len = 8 * m->sz;
|
||||
len = swap_u_int32_t (len);
|
||||
memcpy (zeros + dstart, &len, sizeof(len));
|
||||
zeros[dstart+0] = (len >> 0) & 0xff;
|
||||
zeros[dstart+1] = (len >> 8) & 0xff;
|
||||
zeros[dstart+2] = (len >> 16) & 0xff;
|
||||
zeros[dstart+3] = (len >> 24) & 0xff;
|
||||
md4_update (m, zeros, dstart + 8);
|
||||
{
|
||||
int i;
|
||||
|
@@ -49,11 +49,11 @@
|
||||
|
||||
struct md4 {
|
||||
unsigned offset;
|
||||
u_int32_t counter[4];
|
||||
u_int32_t current[16];
|
||||
unsigned sz;
|
||||
u_int32_t counter[4];
|
||||
unsigned char save[64];
|
||||
};
|
||||
|
||||
void md4_init (struct md4 *m);
|
||||
void md4_update (struct md4 *m, void *p, size_t len);
|
||||
void md4_update (struct md4 *m, const void *p, size_t len);
|
||||
void md4_finito (struct md4 *m, void *res);
|
||||
|
@@ -213,48 +213,38 @@ swap_u_int32_t (u_int32_t t)
|
||||
#endif
|
||||
}
|
||||
|
||||
struct x32{
|
||||
unsigned int a:32;
|
||||
unsigned int b:32;
|
||||
};
|
||||
|
||||
void
|
||||
md5_update (struct md5 *m, const void *v, size_t len)
|
||||
{
|
||||
u_char *p = (u_char *)v;
|
||||
const unsigned char *p = v;
|
||||
m->sz += len;
|
||||
if (m->offset == 0 && len % 64 == 0)
|
||||
while (len > 0) {
|
||||
while(len > 0){
|
||||
size_t l = min(len, 64 - m->offset);
|
||||
memcpy(m->save + m->offset, p, l);
|
||||
m->offset += l;
|
||||
p += l;
|
||||
len -= l;
|
||||
if(m->offset == 64){
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
{
|
||||
int i;
|
||||
u_int32_t *u = (u_int32_t *)p;
|
||||
|
||||
for (i = 0; i < 16; ++i)
|
||||
m->current[i] = swap_u_int32_t (u[i]);
|
||||
int i;
|
||||
u_int32_t current[16];
|
||||
struct x32 *u = (struct x32*)m->save;
|
||||
for(i = 0; i < 8; i++){
|
||||
current[2*i+0] = swap_u_int32_t(u[i].a);
|
||||
current[2*i+1] = swap_u_int32_t(u[i].b);
|
||||
}
|
||||
calc (m, m->current);
|
||||
calc(m, current);
|
||||
#else
|
||||
calc (m, (u_int32_t *)p);
|
||||
calc(m, (u_int32_t*)m->save);
|
||||
#endif
|
||||
p += 64;
|
||||
len -= 64;
|
||||
}
|
||||
else
|
||||
while (len > 0) {
|
||||
unsigned l;
|
||||
|
||||
l = min(64 - m->offset, len);
|
||||
memcpy ((char *)m->current + m->offset, p, l);
|
||||
p += l;
|
||||
len -= l;
|
||||
m->offset += l;
|
||||
if (m->offset == 64) {
|
||||
#if defined(WORDS_BIGENDIAN)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 16; ++i)
|
||||
m->current[i] = swap_u_int32_t (m->current[i]);
|
||||
#endif
|
||||
calc (m, m->current);
|
||||
m->offset = 0;
|
||||
}
|
||||
m->offset = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -267,8 +257,10 @@ md5_finito (struct md5 *m, void *res)
|
||||
*zeros = 0x80;
|
||||
memset (zeros + 1, 0, sizeof(zeros) - 1);
|
||||
len = 8 * m->sz;
|
||||
len = swap_u_int32_t (len);
|
||||
memcpy (zeros + dstart, &len, sizeof(len));
|
||||
zeros[dstart+0] = (len >> 0) & 0xff;
|
||||
zeros[dstart+1] = (len >> 8) & 0xff;
|
||||
zeros[dstart+2] = (len >> 16) & 0xff;
|
||||
zeros[dstart+3] = (len >> 24) & 0xff;
|
||||
md5_update (m, zeros, dstart + 8);
|
||||
{
|
||||
int i;
|
||||
|
@@ -51,7 +51,7 @@ struct md5 {
|
||||
unsigned offset;
|
||||
unsigned sz;
|
||||
u_int32_t counter[4];
|
||||
u_int32_t current[16];
|
||||
unsigned char save[64];
|
||||
};
|
||||
|
||||
void md5_init (struct md5 *m);
|
||||
|
@@ -237,48 +237,38 @@ swap_u_int32_t (u_int32_t t)
|
||||
#endif
|
||||
}
|
||||
|
||||
struct x32{
|
||||
unsigned int a:32;
|
||||
unsigned int b:32;
|
||||
};
|
||||
|
||||
void
|
||||
sha_update (struct sha *m, void *v, size_t len)
|
||||
sha_update (struct sha *m, const void *v, size_t len)
|
||||
{
|
||||
u_char *p = (u_char *)v;
|
||||
const unsigned char *p = v;
|
||||
m->sz += len;
|
||||
if (m->offset == 0 && len % 64 == 0)
|
||||
while (len > 0) {
|
||||
#if !defined(WORDS_BIGENDIAN)
|
||||
{
|
||||
int i;
|
||||
u_int32_t *u = (u_int32_t *)p;
|
||||
|
||||
for (i = 0; i < 16; ++i)
|
||||
m->current[i] = swap_u_int32_t (u[i]);
|
||||
while(len > 0){
|
||||
size_t l = min(len, 64 - m->offset);
|
||||
memcpy(m->save + m->offset, p, l);
|
||||
m->offset += l;
|
||||
p += l;
|
||||
len -= l;
|
||||
if(m->offset == 64){
|
||||
#if !defined(WORDS_BIGENDIAN) || defined(_CRAY)
|
||||
int i;
|
||||
u_int32_t current[16];
|
||||
struct x32 *u = (struct x32*)m->save;
|
||||
for(i = 0; i < 8; i++){
|
||||
current[2*i+0] = swap_u_int32_t(u[i].a);
|
||||
current[2*i+1] = swap_u_int32_t(u[i].b);
|
||||
}
|
||||
calc (m, m->current);
|
||||
calc(m, current);
|
||||
#else
|
||||
calc (m, (u_int32_t *)p);
|
||||
calc(m, (u_int32_t*)m->save);
|
||||
#endif
|
||||
p += 64;
|
||||
len -= 64;
|
||||
}
|
||||
else
|
||||
while (len > 0) {
|
||||
unsigned l;
|
||||
|
||||
l = min(64 - m->offset, len);
|
||||
memcpy ((char *)m->current + m->offset, p, l);
|
||||
p += l;
|
||||
len -= l;
|
||||
m->offset += l;
|
||||
if (m->offset == 64) {
|
||||
#if !defined(WORDS_BIGENDIAN)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 16; ++i)
|
||||
m->current[i] = swap_u_int32_t (m->current[i]);
|
||||
#endif
|
||||
calc (m, m->current);
|
||||
m->offset = 0;
|
||||
}
|
||||
m->offset = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -291,8 +281,10 @@ sha_finito (struct sha *m, void *res)
|
||||
*zeros = 0x80;
|
||||
memset (zeros + 1, 0, sizeof(zeros) - 1);
|
||||
len = 8 * m->sz;
|
||||
len = swap_u_int32_t (len);
|
||||
memcpy (zeros + dstart + 4, &len, sizeof(len));
|
||||
zeros[dstart+7] = (len >> 0) & 0xff;
|
||||
zeros[dstart+6] = (len >> 8) & 0xff;
|
||||
zeros[dstart+5] = (len >> 16) & 0xff;
|
||||
zeros[dstart+4] = (len >> 24) & 0xff;
|
||||
sha_update (m, zeros, dstart + 8);
|
||||
{
|
||||
int i;
|
||||
|
@@ -49,11 +49,11 @@
|
||||
|
||||
struct sha {
|
||||
unsigned offset;
|
||||
u_int32_t counter[5];
|
||||
u_int32_t current[20];
|
||||
unsigned sz;
|
||||
u_int32_t counter[5];
|
||||
unsigned char save[64];
|
||||
};
|
||||
|
||||
void sha_init (struct sha *m);
|
||||
void sha_update (struct sha *m, void *v, size_t len);
|
||||
void sha_update (struct sha *m, const void *v, size_t len);
|
||||
void sha_finito (struct sha *m, void *res);
|
||||
|
Reference in New Issue
Block a user