From 490c5d462817acfba9dc33b221652b968ab5a0e0 Mon Sep 17 00:00:00 2001
From: Paul Elliott <paul.elliott@arm.com>
Date: Wed, 3 Mar 2021 17:11:32 +0000
Subject: [PATCH] Fix constant flow mask maths

Signed-off-by: Paul Elliott <paul.elliott@arm.com>
---
 library/base64.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/library/base64.c b/library/base64.c
index 6b0cb7169..9bc6a522b 100644
--- a/library/base64.c
+++ b/library/base64.c
@@ -110,7 +110,9 @@ static void mbedtls_base64_cond_assign_uchar(unsigned char * dest, const unsigne
 #endif
 
     /* Generate bitmask from condition, mask will either be 0xFFFFFFFF or 0 */
-    unsigned char mask =  -( unsigned char )( ( condition | -condition ) >> 7 );
+    unsigned char mask = ( condition | -condition );
+    mask >>= 7;
+    mask = -mask;
 
 #if defined(_MSC_VER)
 #pragma warning( pop )
@@ -133,7 +135,9 @@ static void mbedtls_base64_cond_assign_uint32(uint32_t * dest, const uint32_t sr
 #endif
 
     /* Generate bitmask from condition, mask will either be 0xFFFFFFFF or 0 */
-    uint32_t mask =  -( uint32_t )( ( condition | -condition ) >> 31 );
+    uint32_t mask = ( condition | -condition );
+    mask >>= 31;
+    mask = -mask;
 
 #if defined(_MSC_VER)
 #pragma warning( pop )
@@ -142,7 +146,6 @@ static void mbedtls_base64_cond_assign_uint32(uint32_t * dest, const uint32_t sr
     *dest = ( src & mask ) | ( ( *dest ) & ~mask );
 }
 
-
 /*
  * Constant flow check for equality
 */