diff --git a/mongoose.c b/mongoose.c
index 4de79c5f2b0b7e58fc7325264d88be581224dde0..9ea78be3c7f040a7b8cfc314c6bd7046570c8076 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -1347,8 +1347,10 @@ static void SHA1Transform(uint32_t state[5], const unsigned char buffer[64]) {
   state[2] += c;
   state[3] += d;
   state[4] += e;
-  a = b = c = d = e = 0;
-  memset(block, '\0', sizeof(block));
+  // Erase working structures. The order of operations is important,
+  // used to ensure that compiler doesn't optimize those out.
+  memset(block, 0, sizeof(block));
+  a = b = c = d = e = block[0].l[0];
 }
 
 static void SHA1Init(SHA1_CTX* context) {