/* crypto/md32_common.h */
/* ====================================================================
- * Copyright (c) 1999-2006 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
: "r"(a), "I"(n)); \
ret; \
})
-# elif defined(__s390__) || defined(__s390x__)
+# elif defined(__s390x__)
# define ROTATE(a,n) ({ register unsigned int ret; \
asm ("rll %0,%1,%2" \
: "=r"(ret) \
- : "r"(a), "I"(n):"cc"); \
+ : "r"(a), "I"(n)); \
ret; \
})
# endif
{
p=(unsigned char *)c->data;
- if ((n+len) >= HASH_CBLOCK)
+ if (len >= HASH_CBLOCK || len+n >= HASH_CBLOCK)
{
memcpy (p+n,data,HASH_CBLOCK-n);
HASH_BLOCK_DATA_ORDER (c,p,1);
if (n > (HASH_CBLOCK-8))
{
+ memset (p+n,0,HASH_CBLOCK-n);
+ n=0;
HASH_BLOCK_DATA_ORDER (c,p,1);
- memset (p,0,HASH_CBLOCK);
}
+ memset (p+n,0,HASH_CBLOCK-8-n);
p += HASH_CBLOCK-8;
#if defined(DATA_ORDER_IS_BIG_ENDIAN)