diff --git a/buffer.c b/buffer.c
index c311d2829d2b1b27cdb49b2e6fd089c7c72ee46a..f18e0320f89a881914c74bca373d2ef3bcb91a7a 100644
--- a/buffer.c
+++ b/buffer.c
@@ -54,6 +54,18 @@ nettle_buffer_grow(struct nettle_buffer *buffer,
   return 1;
 }
 
+void
+nettle_buffer_init_realloc(struct nettle_buffer *buffer,
+			   void *realloc_ctx,
+			   nettle_realloc_func realloc)
+{
+  buffer->contents = NULL;
+  buffer->alloc = 0;
+  buffer->realloc = realloc;
+  buffer->realloc_ctx = realloc_ctx;
+  buffer->size = 0;
+}
+
 void
 nettle_buffer_init_size(struct nettle_buffer *buffer,
 			unsigned length, uint8_t *space)
diff --git a/buffer.h b/buffer.h
index f10f96931ed9a0f7578475aff3e3797b0f7ffed5..050b06ce3c797f8c1c6cabe1764212823aaefd49 100644
--- a/buffer.h
+++ b/buffer.h
@@ -34,8 +34,8 @@ struct nettle_buffer
   /* Allocated size */
   unsigned alloc;
 
-  nettle_realloc_func *realloc;
   void *realloc_ctx;
+  nettle_realloc_func *realloc;
 
   /* Current size */
   unsigned size;
@@ -45,6 +45,11 @@ struct nettle_buffer
 void
 nettle_buffer_init(struct nettle_buffer *buffer);
 
+void
+nettle_buffer_init_realloc(struct nettle_buffer *buffer,
+			   void *realloc_ctx,
+			   nettle_realloc_func realloc);
+
 /* Initializes a buffer of fix size */
 void
 nettle_buffer_init_size(struct nettle_buffer *buffer,