diff --git a/sha3-224.c b/sha3-224.c
index 853c9503b0c12f2c758515a9d0df57c02aa2cc00..62ab7af0e5a4732c70874f539ba21bd282a874c4 100644
--- a/sha3-224.c
+++ b/sha3-224.c
@@ -63,7 +63,7 @@ sha3_224_digest(struct sha3_224_ctx *ctx,
 		size_t length,
 		uint8_t *digest)
 {
-  _sha3_pad (&ctx->state, SHA3_224_BLOCK_SIZE, ctx->block, ctx->index);
+  _sha3_pad_hash (&ctx->state, SHA3_224_BLOCK_SIZE, ctx->block, ctx->index);
   _nettle_write_le64 (length, digest, ctx->state.a);
   sha3_224_init (ctx);
 }
diff --git a/sha3-256.c b/sha3-256.c
index cf3e7b020f42e026566c60ba2f2a5233bf5050d9..c5f133ee0d271b150029968115154eae55c9f1b4 100644
--- a/sha3-256.c
+++ b/sha3-256.c
@@ -63,7 +63,7 @@ sha3_256_digest(struct sha3_256_ctx *ctx,
 		size_t length,
 		uint8_t *digest)
 {
-  _sha3_pad (&ctx->state, SHA3_256_BLOCK_SIZE, ctx->block, ctx->index);
+  _sha3_pad_hash (&ctx->state, SHA3_256_BLOCK_SIZE, ctx->block, ctx->index);
   _nettle_write_le64 (length, digest, ctx->state.a);
   sha3_256_init (ctx);
 }
diff --git a/sha3-384.c b/sha3-384.c
index c0dec5171c3833d2408e6c24ba6f7870f6cd4c2e..83fd1eb9ab7827685fbc8236a1d6627123ce7bac 100644
--- a/sha3-384.c
+++ b/sha3-384.c
@@ -63,7 +63,7 @@ sha3_384_digest(struct sha3_384_ctx *ctx,
 		size_t length,
 		uint8_t *digest)
 {
-  _sha3_pad (&ctx->state, SHA3_384_BLOCK_SIZE, ctx->block, ctx->index);
+  _sha3_pad_hash (&ctx->state, SHA3_384_BLOCK_SIZE, ctx->block, ctx->index);
   _nettle_write_le64 (length, digest, ctx->state.a);
   sha3_384_init (ctx);
 }
diff --git a/sha3-512.c b/sha3-512.c
index b477ec1b4cff09feabef3232f7f05d07e5dedbaf..fd6a2e3522c87ea9d86d7a206ed1381eef4d9d0e 100644
--- a/sha3-512.c
+++ b/sha3-512.c
@@ -63,7 +63,7 @@ sha3_512_digest(struct sha3_512_ctx *ctx,
 		size_t length,
 		uint8_t *digest)
 {
-  _sha3_pad (&ctx->state, SHA3_512_BLOCK_SIZE, ctx->block, ctx->index);
+  _sha3_pad_hash (&ctx->state, SHA3_512_BLOCK_SIZE, ctx->block, ctx->index);
   _nettle_write_le64 (length, digest, ctx->state.a);
   sha3_512_init (ctx);
 }
diff --git a/sha3-internal.h b/sha3-internal.h
index 172a9273c2226759d754146bd03a7855dd00050f..2a19b24f903fcabd66c1fbc3240385c16d9d38da 100644
--- a/sha3-internal.h
+++ b/sha3-internal.h
@@ -39,14 +39,21 @@
 #define _sha3_update _nettle_sha3_update
 #define _sha3_pad _nettle_sha3_pad
 
+#define SHA3_HASH_MAGIC 6
+
 unsigned
 _sha3_update (struct sha3_state *state,
 	      unsigned block_size, uint8_t *block,
 	      unsigned pos,
 	      size_t length, const uint8_t *data);
+
+
 void
 _sha3_pad (struct sha3_state *state,
-	   unsigned block_size, uint8_t *block, unsigned pos);
+	   unsigned block_size, uint8_t *block, unsigned pos, uint8_t magic);
+
+#define _sha3_pad_hash(state, block_size, block, pos) \
+  _sha3_pad (state, block_size, block, pos, SHA3_HASH_MAGIC)
 
 
 #endif
diff --git a/sha3.c b/sha3.c
index 4a083be2fcd19c594ff322190bee6b85daee3820..43a911f9de1c02dd0fdb5af710a88f86ccbb65b6 100644
--- a/sha3.c
+++ b/sha3.c
@@ -92,10 +92,10 @@ _sha3_update (struct sha3_state *state,
 
 void
 _sha3_pad (struct sha3_state *state,
-	   unsigned block_size, uint8_t *block, unsigned pos)
+	   unsigned block_size, uint8_t *block, unsigned pos, uint8_t magic)
 {
   assert (pos < block_size);
-  block[pos++] = 6;
+  block[pos++] = magic;
 
   memset (block + pos, 0, block_size - pos);
   block[block_size - 1] |= 0x80;