aboutsummaryrefslogtreecommitdiff
path: root/crypto/sha/sha512.c
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2013-12-18 21:27:35 +0100
committerAndy Polyakov <appro@openssl.org>2013-12-18 21:27:35 +0100
commitcdd1acd788020d2c525331da1712ada778f1373c (patch)
tree0c664e048d7efe9e3319a9b2afe8607b169ca87b /crypto/sha/sha512.c
parent128e1d101b0a77a1c5f713f1568d6ecfd4d4b9d2 (diff)
downloadopenssl-cdd1acd788020d2c525331da1712ada778f1373c.zip
openssl-cdd1acd788020d2c525331da1712ada778f1373c.tar.gz
openssl-cdd1acd788020d2c525331da1712ada778f1373c.tar.bz2
sha512.c: fullfull implicit API contract in SHA512_Transform.
SHA512_Transform was initially added rather as tribute to tradition than for practucal reasons. But use was recently found in ssl/s3_cbc.c and it turned to be problematic on platforms that don't tolerate misasligned references to memory and lack assembly subroutine.
Diffstat (limited to 'crypto/sha/sha512.c')
-rw-r--r--crypto/sha/sha512.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/crypto/sha/sha512.c b/crypto/sha/sha512.c
index 59b4ace..2799990 100644
--- a/crypto/sha/sha512.c
+++ b/crypto/sha/sha512.c
@@ -234,7 +234,14 @@ int SHA384_Update (SHA512_CTX *c, const void *data, size_t len)
{ return SHA512_Update (c,data,len); }
void SHA512_Transform (SHA512_CTX *c, const unsigned char *data)
-{ sha512_block_data_order (c,data,1); }
+ {
+#ifndef SHA512_BLOCK_CAN_MANAGE_UNALIGNED_DATA
+ if ((size_t)data%sizeof(c->u.d[0]) != 0)
+ memcpy(c->u.p,data,sizeof(c->u.p)),
+ data = c->u.p;
+#endif
+ sha512_block_data_order (c,data,1);
+ }
unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md)
{