diff --git a/buffer.c b/buffer.c
index e61b471f61ec12975b898b99dbb254f1590c1225..c311d2829d2b1b27cdb49b2e6fd089c7c72ee46a 100644
--- a/buffer.c
+++ b/buffer.c
@@ -76,6 +76,12 @@ nettle_buffer_clear(struct nettle_buffer *buffer)
   buffer->size = 0;
 }
 
+void
+nettle_buffer_reset(struct nettle_buffer *buffer)
+{
+  buffer->size = 0;
+}
+
 uint8_t *
 nettle_buffer_space(struct nettle_buffer *buffer,
 		    unsigned length)
@@ -103,3 +109,10 @@ nettle_buffer_write(struct nettle_buffer *buffer,
   else
     return 0;
 }
+
+int
+nettle_buffer_copy(struct nettle_buffer *dst,
+		   const struct nettle_buffer *src)
+{
+  nettle_buffer_write(dst, src->size, src->contents);
+}
diff --git a/buffer.h b/buffer.h
index c153839ef0ff9bbc7771027e307cbc7aac2e84b3..f10f96931ed9a0f7578475aff3e3797b0f7ffed5 100644
--- a/buffer.h
+++ b/buffer.h
@@ -53,6 +53,10 @@ nettle_buffer_init_size(struct nettle_buffer *buffer,
 void
 nettle_buffer_clear(struct nettle_buffer *buffer);
 
+/* Resets the buffer, without freeing the buffer space. */
+void
+nettle_buffer_reset(struct nettle_buffer *buffer);
+
 int
 nettle_buffer_grow(struct nettle_buffer *buffer,
 		   unsigned length);
@@ -73,4 +77,9 @@ uint8_t *
 nettle_buffer_space(struct nettle_buffer *buffer,
 		    unsigned length);
 
+/* Copy the contents of SRC to the end of DST. */
+int
+nettle_buffer_copy(struct nettle_buffer *dst,
+		   const struct nettle_buffer *src);
+
 #endif /* NETTLE_BUFFER_H_INCLUDED */