diff --git a/testsuite/testutils.c b/testsuite/testutils.c
index 9cb0698938a1c28db7979302668c6374fda5b14f..5d8101c680d5bf4bd55cdcd994221f514d4f5f16 100644
--- a/testsuite/testutils.c
+++ b/testsuite/testutils.c
@@ -241,26 +241,36 @@ test_armor(const struct nettle_armor *armor,
            const uint8_t *data,
            const uint8_t *ascii)
 {
-  void *ctx = alloca(armor->context_size);
-  uint8_t *buffer = alloca(1 + strlen(ascii));
+  unsigned ascii_length = strlen(ascii);
+  uint8_t *buffer = alloca(1 + ascii_length);
   uint8_t *check = alloca(1 + data_length);
-
-  memset(buffer, 0x33, 1 + strlen(ascii));
+  void *encode = alloca(armor->encode_context_size);
+  void *decode = alloca(armor->decode_context_size);
+  unsigned done;
+  
+  memset(buffer, 0x33, 1 + ascii_length);
   memset(check, 0x55, 1 + data_length);
 
-  if (strlen(ascii) != armor->encode(buffer, data_length, data))
-    FAIL();
+  armor->encode_init(encode);
+  
+  ASSERT(armor->encode_length(data_length) <= ascii_length);
 
-  if (!MEMEQ(strlen(ascii), buffer, ascii))
+  done = armor->encode_update(encode, buffer, data_length, data);
+  done += armor->encode_final(encode, buffer + done);
+  ASSERT(done == ascii_length);
+
+  if (!MEMEQ(ascii_length, buffer, ascii))
     FAIL();
 
   if (0x33 != buffer[strlen(ascii)])
     FAIL();  
 
-  armor->decode_init(ctx);
-  if (data_length != armor->decode_update(ctx, check, strlen(ascii), buffer))
-    FAIL();
+  armor->decode_init(decode);
+  ASSERT(data_length
+	 == armor->decode_update(decode, check, ascii_length, buffer));
 
+  ASSERT(armor->decode_status(decode));
+  
   if (!MEMEQ(data_length, check, data))
     FAIL();