From e4e955e54a109e3d9721a1aea29d3ca7c7d0c065 Mon Sep 17 00:00:00 2001 From: jsing <> Date: Wed, 12 Apr 2023 04:40:39 +0000 Subject: Provide and use crypto_store_htobe64(). It is common to need to store data in a specific endianness - rather than handrolling and deduplicating code to do this, provide a crypto_store_htobe64() function that converts from host endian to big endian, before storing the data to a location with unknown alignment. ok tb@ --- src/lib/libcrypto/sha/sha512.c | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) (limited to 'src/lib/libcrypto/sha/sha512.c') diff --git a/src/lib/libcrypto/sha/sha512.c b/src/lib/libcrypto/sha/sha512.c index a518c039ea..14c4cbd4f3 100644 --- a/src/lib/libcrypto/sha/sha512.c +++ b/src/lib/libcrypto/sha/sha512.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sha512.c,v 1.30 2023/04/11 15:38:55 tb Exp $ */ +/* $OpenBSD: sha512.c,v 1.31 2023/04/12 04:40:39 jsing Exp $ */ /* ==================================================================== * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. * @@ -61,6 +61,8 @@ #include #include +#include "crypto_internal.h" + #if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA512) #if !defined(__STRICT_ALIGNMENT) || defined(SHA512_ASM) @@ -552,37 +554,21 @@ SHA512_Final(unsigned char *md, SHA512_CTX *c) sha512_block_data_order(c, p, 1); - if (md == 0) + if (md == NULL) return 0; + /* Let compiler decide if it's appropriate to unroll... */ switch (c->md_len) { - /* Let compiler decide if it's appropriate to unroll... */ case SHA384_DIGEST_LENGTH: for (n = 0; n < SHA384_DIGEST_LENGTH/8; n++) { - SHA_LONG64 t = c->h[n]; - - *(md++) = (unsigned char)(t >> 56); - *(md++) = (unsigned char)(t >> 48); - *(md++) = (unsigned char)(t >> 40); - *(md++) = (unsigned char)(t >> 32); - *(md++) = (unsigned char)(t >> 24); - *(md++) = (unsigned char)(t >> 16); - *(md++) = (unsigned char)(t >> 8); - *(md++) = (unsigned char)(t); + crypto_store_htobe64(md, c->h[n]); + md += 8; } break; case SHA512_DIGEST_LENGTH: for (n = 0; n < SHA512_DIGEST_LENGTH/8; n++) { - SHA_LONG64 t = c->h[n]; - - *(md++) = (unsigned char)(t >> 56); - *(md++) = (unsigned char)(t >> 48); - *(md++) = (unsigned char)(t >> 40); - *(md++) = (unsigned char)(t >> 32); - *(md++) = (unsigned char)(t >> 24); - *(md++) = (unsigned char)(t >> 16); - *(md++) = (unsigned char)(t >> 8); - *(md++) = (unsigned char)(t); + crypto_store_htobe64(md, c->h[n]); + md += 8; } break; /* ... as well as make sure md_len is not abused. */ -- cgit v1.2.3-55-g6feb