From: Andy Polyakov Date: Wed, 18 Dec 2013 20:27:35 +0000 (+0100) Subject: sha512.c: fullfull implicit API contract in SHA512_Transform. X-Git-Tag: OpenSSL_1_0_1f~10 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=2ec4181ba92fc6b828687d2dc47c13dcd35a5d93;p=oweals%2Fopenssl.git 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. (cherry picked from commit cdd1acd788020d2c525331da1712ada778f1373c) --- diff --git a/crypto/sha/sha512.c b/crypto/sha/sha512.c index 50dd7dc744..50c229ddeb 100644 --- a/crypto/sha/sha512.c +++ b/crypto/sha/sha512.c @@ -232,7 +232,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) {