Change sha256 output type from an array to a pointer
The output parameter of mbedtls_sha256_finish_ret and mbedtls_sha256_ret
now has a pointer type rather than array type. This removes spurious
warnings in some compilers when outputting a SHA-224 hash into a
28-byte buffer.
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
diff --git a/ChangeLog.d/sha512-output-type.txt b/ChangeLog.d/sha512-output-type.txt
index e29557c..eabc67d 100644
--- a/ChangeLog.d/sha512-output-type.txt
+++ b/ChangeLog.d/sha512-output-type.txt
@@ -1,5 +1,6 @@
API changes
- * The output parameter of mbedtls_sha512_finish_ret and mbedtls_sha512_ret
- now has a pointer type rather than array type. This removes spurious
- warnings in some compilers when outputting a SHA-384 hash into a
- 48-byte buffer.
+ * The output parameter of mbedtls_sha512_finish_ret, mbedtls_sha512_ret,
+ mbedtls_sha256_finish_ret and mbedtls_sha256_ret now has a pointer type
+ rather than array type. This removes spurious warnings in some compilers
+ when outputting a SHA-384 or SHA-224 hash into a buffer of exactly
+ the hash size.
diff --git a/docs/3.0-migration-guide.d/sha512-output-type.md b/docs/3.0-migration-guide.d/sha512-output-type.md
index 5a7d205..c62a881 100644
--- a/docs/3.0-migration-guide.d/sha512-output-type.md
+++ b/docs/3.0-migration-guide.d/sha512-output-type.md
@@ -1,8 +1,8 @@
-SHA-512 output type change
+SHA-512 and SHA-256 output type change
--------------------------
-The output parameter of `mbedtls_sha512_finish_ret()` and `mbedtls_sha512_ret()` now has a pointer type rather than array type. This makes no difference in terms of C semantics, but removes spurious warnings in some compilers when outputting a SHA-384 hash into a 48-byte buffer.
+The output parameter of `mbedtls_sha256_finish_ret()`, `mbedtls_sha256_ret()`, `mbedtls_sha512_finish_ret()`, `mbedtls_sha512_ret()` now has a pointer type rather than array type. This makes no difference in terms of C semantics, but removes spurious warnings in some compilers when outputting a SHA-384 hash into a 48-byte buffer or a SHA-224 hash into a 28-byte buffer.
This makes no difference to a vast majority of applications. If your code takes a pointer to one of these functions, you may need to change the type of the pointer.
-Alternative implementations of the SHA512 module must adjust their functions' prototype accordingly.
+Alternative implementations of the SHA256 and SHA512 modules must adjust their functions' prototype accordingly.
diff --git a/include/mbedtls/sha256.h b/include/mbedtls/sha256.h
index 9b8d91d..1100869 100644
--- a/include/mbedtls/sha256.h
+++ b/include/mbedtls/sha256.h
@@ -127,13 +127,14 @@
* \param ctx The SHA-256 context. This must be initialized
* and have a hash operation started.
* \param output The SHA-224 or SHA-256 checksum result.
- * This must be a writable buffer of length \c 32 Bytes.
+ * This must be a writable buffer of length \c 32 bytes
+ * for SHA-256, 28 bytes for SHA-224.
*
* \return \c 0 on success.
* \return A negative error code on failure.
*/
int mbedtls_sha256_finish_ret( mbedtls_sha256_context *ctx,
- unsigned char output[32] );
+ unsigned char *output );
/**
* \brief This function processes a single data block within
@@ -163,14 +164,15 @@
* \param input The buffer holding the data. This must be a readable
* buffer of length \p ilen Bytes.
* \param ilen The length of the input data in Bytes.
- * \param output The SHA-224 or SHA-256 checksum result. This must
- * be a writable buffer of length \c 32 Bytes.
+ * \param output The SHA-224 or SHA-256 checksum result.
+ * This must be a writable buffer of length \c 32 bytes
+ * for SHA-256, 28 bytes for SHA-224.
* \param is224 Determines which function to use. This must be
* either \c 0 for SHA-256, or \c 1 for SHA-224.
*/
int mbedtls_sha256_ret( const unsigned char *input,
size_t ilen,
- unsigned char output[32],
+ unsigned char *output,
int is224 );
#if defined(MBEDTLS_SELF_TEST)
diff --git a/library/sha256.c b/library/sha256.c
index a94f325..36ab0c1 100644
--- a/library/sha256.c
+++ b/library/sha256.c
@@ -332,7 +332,7 @@
* SHA-256 final digest
*/
int mbedtls_sha256_finish_ret( mbedtls_sha256_context *ctx,
- unsigned char output[32] )
+ unsigned char *output )
{
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
uint32_t used;
@@ -401,7 +401,7 @@
*/
int mbedtls_sha256_ret( const unsigned char *input,
size_t ilen,
- unsigned char output[32],
+ unsigned char *output,
int is224 )
{
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;