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;
|
A = 0x67452301;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u_int32_t
|
static u_int32_t
|
||||||
cshift (u_int32_t x, unsigned n)
|
cshift (u_int32_t x, unsigned n)
|
||||||
{
|
{
|
||||||
return (x << n) | (x >> (32 - 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 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)
|
#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)
|
calc (struct md4 *m, u_int32_t *data)
|
||||||
{
|
{
|
||||||
u_int32_t AA, BB, CC, DD;
|
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>
|
* 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)
|
swap_u_int32_t (u_int32_t t)
|
||||||
{
|
{
|
||||||
#if defined(WORDS_BIGENDIAN)
|
#if defined(WORDS_BIGENDIAN)
|
||||||
@@ -189,48 +189,38 @@ swap_u_int32_t (u_int32_t t)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct x32{
|
||||||
|
unsigned int a:32;
|
||||||
|
unsigned int b:32;
|
||||||
|
};
|
||||||
|
|
||||||
void
|
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;
|
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)
|
#if defined(WORDS_BIGENDIAN)
|
||||||
{
|
int i;
|
||||||
int i;
|
u_int32_t current[16];
|
||||||
u_int32_t *u = (u_int32_t *)p;
|
struct x32 *u = (struct x32*)m->save;
|
||||||
|
for(i = 0; i < 8; i++){
|
||||||
for (i = 0; i < 16; ++i)
|
current[2*i+0] = swap_u_int32_t(u[i].a);
|
||||||
m->current[i] = swap_u_int32_t (u[i]);
|
current[2*i+1] = swap_u_int32_t(u[i].b);
|
||||||
}
|
}
|
||||||
calc (m, m->current);
|
calc(m, current);
|
||||||
#else
|
#else
|
||||||
calc (m, (u_int32_t *)p);
|
calc(m, (u_int32_t*)m->save);
|
||||||
#endif
|
#endif
|
||||||
p += 64;
|
m->offset = 0;
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -243,8 +233,10 @@ md4_finito (struct md4 *m, void *res)
|
|||||||
*zeros = 0x80;
|
*zeros = 0x80;
|
||||||
memset (zeros + 1, 0, sizeof(zeros) - 1);
|
memset (zeros + 1, 0, sizeof(zeros) - 1);
|
||||||
len = 8 * m->sz;
|
len = 8 * m->sz;
|
||||||
len = swap_u_int32_t (len);
|
zeros[dstart+0] = (len >> 0) & 0xff;
|
||||||
memcpy (zeros + dstart, &len, sizeof(len));
|
zeros[dstart+1] = (len >> 8) & 0xff;
|
||||||
|
zeros[dstart+2] = (len >> 16) & 0xff;
|
||||||
|
zeros[dstart+3] = (len >> 24) & 0xff;
|
||||||
md4_update (m, zeros, dstart + 8);
|
md4_update (m, zeros, dstart + 8);
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@@ -49,11 +49,11 @@
|
|||||||
|
|
||||||
struct md4 {
|
struct md4 {
|
||||||
unsigned offset;
|
unsigned offset;
|
||||||
u_int32_t counter[4];
|
|
||||||
u_int32_t current[16];
|
|
||||||
unsigned sz;
|
unsigned sz;
|
||||||
|
u_int32_t counter[4];
|
||||||
|
unsigned char save[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
void md4_init (struct md4 *m);
|
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);
|
void md4_finito (struct md4 *m, void *res);
|
||||||
|
@@ -213,48 +213,38 @@ swap_u_int32_t (u_int32_t t)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct x32{
|
||||||
|
unsigned int a:32;
|
||||||
|
unsigned int b:32;
|
||||||
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
md5_update (struct md5 *m, const void *v, size_t len)
|
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;
|
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)
|
#if defined(WORDS_BIGENDIAN)
|
||||||
{
|
int i;
|
||||||
int i;
|
u_int32_t current[16];
|
||||||
u_int32_t *u = (u_int32_t *)p;
|
struct x32 *u = (struct x32*)m->save;
|
||||||
|
for(i = 0; i < 8; i++){
|
||||||
for (i = 0; i < 16; ++i)
|
current[2*i+0] = swap_u_int32_t(u[i].a);
|
||||||
m->current[i] = swap_u_int32_t (u[i]);
|
current[2*i+1] = swap_u_int32_t(u[i].b);
|
||||||
}
|
}
|
||||||
calc (m, m->current);
|
calc(m, current);
|
||||||
#else
|
#else
|
||||||
calc (m, (u_int32_t *)p);
|
calc(m, (u_int32_t*)m->save);
|
||||||
#endif
|
#endif
|
||||||
p += 64;
|
m->offset = 0;
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -267,8 +257,10 @@ md5_finito (struct md5 *m, void *res)
|
|||||||
*zeros = 0x80;
|
*zeros = 0x80;
|
||||||
memset (zeros + 1, 0, sizeof(zeros) - 1);
|
memset (zeros + 1, 0, sizeof(zeros) - 1);
|
||||||
len = 8 * m->sz;
|
len = 8 * m->sz;
|
||||||
len = swap_u_int32_t (len);
|
zeros[dstart+0] = (len >> 0) & 0xff;
|
||||||
memcpy (zeros + dstart, &len, sizeof(len));
|
zeros[dstart+1] = (len >> 8) & 0xff;
|
||||||
|
zeros[dstart+2] = (len >> 16) & 0xff;
|
||||||
|
zeros[dstart+3] = (len >> 24) & 0xff;
|
||||||
md5_update (m, zeros, dstart + 8);
|
md5_update (m, zeros, dstart + 8);
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@@ -51,7 +51,7 @@ struct md5 {
|
|||||||
unsigned offset;
|
unsigned offset;
|
||||||
unsigned sz;
|
unsigned sz;
|
||||||
u_int32_t counter[4];
|
u_int32_t counter[4];
|
||||||
u_int32_t current[16];
|
unsigned char save[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
void md5_init (struct md5 *m);
|
void md5_init (struct md5 *m);
|
||||||
|
@@ -237,48 +237,38 @@ swap_u_int32_t (u_int32_t t)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct x32{
|
||||||
|
unsigned int a:32;
|
||||||
|
unsigned int b:32;
|
||||||
|
};
|
||||||
|
|
||||||
void
|
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;
|
m->sz += len;
|
||||||
if (m->offset == 0 && len % 64 == 0)
|
while(len > 0){
|
||||||
while (len > 0) {
|
size_t l = min(len, 64 - m->offset);
|
||||||
#if !defined(WORDS_BIGENDIAN)
|
memcpy(m->save + m->offset, p, l);
|
||||||
{
|
m->offset += l;
|
||||||
int i;
|
p += l;
|
||||||
u_int32_t *u = (u_int32_t *)p;
|
len -= l;
|
||||||
|
if(m->offset == 64){
|
||||||
for (i = 0; i < 16; ++i)
|
#if !defined(WORDS_BIGENDIAN) || defined(_CRAY)
|
||||||
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
|
#else
|
||||||
calc (m, (u_int32_t *)p);
|
calc(m, (u_int32_t*)m->save);
|
||||||
#endif
|
#endif
|
||||||
p += 64;
|
m->offset = 0;
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -291,8 +281,10 @@ sha_finito (struct sha *m, void *res)
|
|||||||
*zeros = 0x80;
|
*zeros = 0x80;
|
||||||
memset (zeros + 1, 0, sizeof(zeros) - 1);
|
memset (zeros + 1, 0, sizeof(zeros) - 1);
|
||||||
len = 8 * m->sz;
|
len = 8 * m->sz;
|
||||||
len = swap_u_int32_t (len);
|
zeros[dstart+7] = (len >> 0) & 0xff;
|
||||||
memcpy (zeros + dstart + 4, &len, sizeof(len));
|
zeros[dstart+6] = (len >> 8) & 0xff;
|
||||||
|
zeros[dstart+5] = (len >> 16) & 0xff;
|
||||||
|
zeros[dstart+4] = (len >> 24) & 0xff;
|
||||||
sha_update (m, zeros, dstart + 8);
|
sha_update (m, zeros, dstart + 8);
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@@ -49,11 +49,11 @@
|
|||||||
|
|
||||||
struct sha {
|
struct sha {
|
||||||
unsigned offset;
|
unsigned offset;
|
||||||
u_int32_t counter[5];
|
|
||||||
u_int32_t current[20];
|
|
||||||
unsigned sz;
|
unsigned sz;
|
||||||
|
u_int32_t counter[5];
|
||||||
|
unsigned char save[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
void sha_init (struct sha *m);
|
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);
|
void sha_finito (struct sha *m, void *res);
|
||||||
|
Reference in New Issue
Block a user