diff --git a/crypto/digest_extra/digest_test.cc b/crypto/digest_extra/digest_test.cc
index 6d02c08..5cfe1c8 100644
--- a/crypto/digest_extra/digest_test.cc
+++ b/crypto/digest_extra/digest_test.cc
@@ -147,16 +147,8 @@
 static void CompareDigest(const DigestTestVector *test,
                           const uint8_t *digest,
                           size_t digest_len) {
-  static const char kHexTable[] = "0123456789abcdef";
-  char digest_hex[2*EVP_MAX_MD_SIZE + 1];
-
-  for (size_t i = 0; i < digest_len; i++) {
-    digest_hex[2*i] = kHexTable[digest[i] >> 4];
-    digest_hex[2*i + 1] = kHexTable[digest[i] & 0xf];
-  }
-  digest_hex[2*digest_len] = '\0';
-
-  EXPECT_STREQ(test->expected_hex, digest_hex);
+  EXPECT_EQ(test->expected_hex,
+            EncodeHex(bssl::MakeConstSpan(digest, digest_len)));
 }
 
 static void TestDigest(const DigestTestVector *test) {
diff --git a/crypto/fipsmodule/ec/ec_test.cc b/crypto/fipsmodule/ec/ec_test.cc
index 07638cd..30983c9 100644
--- a/crypto/fipsmodule/ec/ec_test.cc
+++ b/crypto/fipsmodule/ec/ec_test.cc
@@ -913,21 +913,10 @@
   });
 }
 
-static uint8_t FromHexChar(char c) {
-  if ('0' <= c && c <= '9') {
-    return c - '0';
-  }
-  if ('a' <= c && c <= 'f') {
-    return c - 'a' + 10;
-  }
-  abort();
-}
-
 static std::vector<uint8_t> HexToBytes(const char *str) {
   std::vector<uint8_t> ret;
-  while (str[0] != '\0') {
-    ret.push_back((FromHexChar(str[0]) << 4) | FromHexChar(str[1]));
-    str += 2;
+  if (!DecodeHex(&ret, str)) {
+    abort();
   }
   return ret;
 }
diff --git a/crypto/test/file_test.cc b/crypto/test/file_test.cc
index 895185c..c39c078 100644
--- a/crypto/test/file_test.cc
+++ b/crypto/test/file_test.cc
@@ -28,6 +28,7 @@
 #include <openssl/err.h>
 
 #include "../internal.h"
+#include "./test_util.h"
 
 
 FileTest::FileTest(std::unique_ptr<FileTest::LineReader> reader,
@@ -312,31 +313,6 @@
   return GetAttribute(&value, key) && ConvertToBytes(out, value);
 }
 
-static std::string EncodeHex(const uint8_t *in, size_t in_len) {
-  static const char kHexDigits[] = "0123456789abcdef";
-  std::string ret;
-  ret.reserve(in_len * 2);
-  for (size_t i = 0; i < in_len; i++) {
-    ret += kHexDigits[in[i] >> 4];
-    ret += kHexDigits[in[i] & 0xf];
-  }
-  return ret;
-}
-
-bool FileTest::ExpectBytesEqual(const uint8_t *expected, size_t expected_len,
-                                const uint8_t *actual, size_t actual_len) {
-  if (expected_len == actual_len &&
-      OPENSSL_memcmp(expected, actual, expected_len) == 0) {
-    return true;
-  }
-
-  std::string expected_hex = EncodeHex(expected, expected_len);
-  std::string actual_hex = EncodeHex(actual, actual_len);
-  PrintLine("Expected: %s", expected_hex.c_str());
-  PrintLine("Actual:   %s", actual_hex.c_str());
-  return false;
-}
-
 void FileTest::ClearTest() {
   start_line_ = 0;
   type_.clear();
@@ -360,22 +336,6 @@
   unused_instructions_.erase(key);
 }
 
-static bool FromHexDigit(uint8_t *out, char c) {
-  if ('0' <= c && c <= '9') {
-    *out = c - '0';
-    return true;
-  }
-  if ('a' <= c && c <= 'f') {
-    *out = c - 'a' + 10;
-    return true;
-  }
-  if ('A' <= c && c <= 'F') {
-    *out = c - 'A' + 10;
-    return true;
-  }
-  return false;
-}
-
 bool FileTest::ConvertToBytes(std::vector<uint8_t> *out,
                               const std::string &value) {
   if (value.size() >= 2 && value[0] == '"' && value[value.size() - 1] == '"') {
@@ -383,20 +343,10 @@
     return true;
   }
 
-  if (value.size() % 2 != 0) {
+  if (!DecodeHex(out, value)) {
     PrintLine("Error decoding value: %s", value.c_str());
     return false;
   }
-  out->clear();
-  out->reserve(value.size() / 2);
-  for (size_t i = 0; i < value.size(); i += 2) {
-    uint8_t hi, lo;
-    if (!FromHexDigit(&hi, value[i]) || !FromHexDigit(&lo, value[i + 1])) {
-      PrintLine("Error decoding value: %s", value.c_str());
-      return false;
-    }
-    out->push_back((hi << 4) | lo);
-  }
   return true;
 }
 
diff --git a/crypto/test/file_test.h b/crypto/test/file_test.h
index 70a93e9..87f306f 100644
--- a/crypto/test/file_test.h
+++ b/crypto/test/file_test.h
@@ -164,11 +164,6 @@
   // success and returns false with an error to |stderr| on failure.
   bool GetBytes(std::vector<uint8_t> *out, const std::string &key);
 
-  // ExpectBytesEqual returns true if |expected| and |actual| are equal.
-  // Otherwise, it returns false and prints a message to |stderr|.
-  bool ExpectBytesEqual(const uint8_t *expected, size_t expected_len,
-                        const uint8_t *actual, size_t actual_len);
-
   // AtNewInstructionBlock returns true if the current test was immediately
   // preceded by an instruction block.
   bool IsAtNewInstructionBlock() const;
diff --git a/crypto/test/test_util.cc b/crypto/test/test_util.cc
index 29be702..7f95413 100644
--- a/crypto/test/test_util.cc
+++ b/crypto/test/test_util.cc
@@ -35,10 +35,51 @@
   }
 
   // Print a byte slice as hex.
-  static const char hex[] = "0123456789abcdef";
-  for (uint8_t b : in.span_) {
-    os << hex[b >> 4];
-    os << hex[b & 0xf];
-  }
+  os << EncodeHex(in.span_);
   return os;
 }
+
+static bool FromHexDigit(uint8_t *out, char c) {
+  if ('0' <= c && c <= '9') {
+    *out = c - '0';
+    return true;
+  }
+  if ('a' <= c && c <= 'f') {
+    *out = c - 'a' + 10;
+    return true;
+  }
+  if ('A' <= c && c <= 'F') {
+    *out = c - 'A' + 10;
+    return true;
+  }
+  return false;
+}
+
+bool DecodeHex(std::vector<uint8_t> *out, const std::string &in) {
+  out->clear();
+  if (in.size() % 2 != 0) {
+    return false;
+  }
+  out->reserve(in.size() / 2);
+  for (size_t i = 0; i < in.size(); i += 2) {
+    uint8_t hi, lo;
+    if (!FromHexDigit(&hi, in[i]) ||
+        !FromHexDigit(&lo, in[i + 1])) {
+      return false;
+    }
+    out->push_back((hi << 4) | lo);
+  }
+  return true;
+}
+
+std::string EncodeHex(bssl::Span<const uint8_t> in) {
+  static const char kHexDigits[] = "0123456789abcdef";
+  std::string ret;
+  ret.reserve(in.size() * 2);
+  for (uint8_t b : in) {
+    ret += kHexDigits[b >> 4];
+    ret += kHexDigits[b & 0xf];
+  }
+  return ret;
+}
+
diff --git a/crypto/test/test_util.h b/crypto/test/test_util.h
index 2ef3f19..796c931 100644
--- a/crypto/test/test_util.h
+++ b/crypto/test/test_util.h
@@ -59,5 +59,13 @@
 
 std::ostream &operator<<(std::ostream &os, const Bytes &in);
 
+// DecodeHex decodes |in| from hexadecimal and writes the output to |out|. It
+// returns true on success and false if |in| is not a valid hexadecimal byte
+// string.
+bool DecodeHex(std::vector<uint8_t> *out, const std::string &in);
+
+// EncodeHex returns |in| encoded in hexadecimal.
+std::string EncodeHex(bssl::Span<const uint8_t> in);
+
 
 #endif  // OPENSSL_HEADER_CRYPTO_TEST_TEST_UTIL_H
diff --git a/util/fipstools/cavp/cavp_aes_gcm_test.cc b/util/fipstools/cavp/cavp_aes_gcm_test.cc
index 3a162bd..6ee991d 100644
--- a/util/fipstools/cavp/cavp_aes_gcm_test.cc
+++ b/util/fipstools/cavp/cavp_aes_gcm_test.cc
@@ -23,6 +23,7 @@
 #include <openssl/err.h>
 
 #include "../crypto/test/file_test.h"
+#include "../crypto/test/test_util.h"
 #include "cavp_test_util.h"
 
 
@@ -77,8 +78,8 @@
     return false;
   }
   printf("%s", t->CurrentTestToString().c_str());
-  printf("CT = %s\r\n", EncodeHex(ct.data(), ct.size()).c_str());
-  printf("Tag = %s\r\n\r\n", EncodeHex(tag.data(), tag.size()).c_str());
+  printf("CT = %s\r\n", EncodeHex(ct).c_str());
+  printf("Tag = %s\r\n\r\n", EncodeHex(tag).c_str());
 
   return true;
 }
@@ -119,7 +120,7 @@
   bool aead_result =
       AEADDecrypt(ctx->aead, &pt, pt_len, key, aad, ct, tag, iv);
   if (aead_result) {
-    printf("PT = %s\r\n\r\n", EncodeHex(pt.data(), pt.size()).c_str());
+    printf("PT = %s\r\n\r\n", EncodeHex(pt).c_str());
   } else {
     printf("FAIL\r\n\r\n");
   }
diff --git a/util/fipstools/cavp/cavp_aes_test.cc b/util/fipstools/cavp/cavp_aes_test.cc
index 6c0cf3c..d1f49b4 100644
--- a/util/fipstools/cavp/cavp_aes_test.cc
+++ b/util/fipstools/cavp/cavp_aes_test.cc
@@ -22,6 +22,7 @@
 #include <openssl/err.h>
 
 #include "../crypto/test/file_test.h"
+#include "../crypto/test/test_util.h"
 #include "cavp_test_util.h"
 
 
@@ -47,13 +48,11 @@
                     result_label = encrypt ? "CIPHERTEXT" : "PLAINTEXT";
   std::vector<uint8_t> prev_result, result, prev_in;
   for (int i = 0; i < 100; i++) {
-    printf("COUNT = %d\r\nKEY = %s\r\n", i,
-           EncodeHex(key.data(), key.size()).c_str());
+    printf("COUNT = %d\r\nKEY = %s\r\n", i, EncodeHex(key).c_str());
     if (ctx->has_iv) {
-      printf("IV = %s\r\n", EncodeHex(iv.data(), iv.size()).c_str());
+      printf("IV = %s\r\n", EncodeHex(iv).c_str());
     }
-    printf("%s = %s\r\n", in_label.c_str(),
-           EncodeHex(in.data(), in.size()).c_str());
+    printf("%s = %s\r\n", in_label.c_str(), EncodeHex(in).c_str());
 
     if (!ctx->has_iv) {  // ECB mode
       for (int j = 0; j < 1000; j++) {
@@ -88,8 +87,7 @@
       }
     }
 
-    printf("%s = %s\r\n\r\n", result_label.c_str(),
-           EncodeHex(result.data(), result.size()).c_str());
+    printf("%s = %s\r\n\r\n", result_label.c_str(), EncodeHex(result).c_str());
 
     const size_t key_len = key.size() * 8;
     if (key_len == 128) {
@@ -165,7 +163,7 @@
     const std::string label =
         operation == kEncrypt ? "CIPHERTEXT" : "PLAINTEXT";
     printf("%s%s = %s\r\n\r\n", t->CurrentTestToString().c_str(), label.c_str(),
-           EncodeHex(result.data(), result.size()).c_str());
+           EncodeHex(result).c_str());
   } else {  // ctx->mode == kMCT
     const std::string op_label =
         operation == kEncrypt ? "[ENCRYPT]" : "[DECRYPT]";
diff --git a/util/fipstools/cavp/cavp_ctr_drbg_test.cc b/util/fipstools/cavp/cavp_ctr_drbg_test.cc
index 30a1a15..a27736e 100644
--- a/util/fipstools/cavp/cavp_ctr_drbg_test.cc
+++ b/util/fipstools/cavp/cavp_ctr_drbg_test.cc
@@ -22,6 +22,7 @@
 #include "cavp_test_util.h"
 #include "../crypto/fipsmodule/rand/internal.h"
 #include "../crypto/test/file_test.h"
+#include "../crypto/test/test_util.h"
 
 
 static bool TestCTRDRBG(FileTest *t, void *arg) {
@@ -81,8 +82,7 @@
                     ai2.size() > 0 ? ai2.data() : nullptr, ai2.size());
 
   printf("%s", t->CurrentTestToString().c_str());
-  printf("ReturnedBits = %s\r\n\r\n",
-         EncodeHex(out.data(), out.size()).c_str());
+  printf("ReturnedBits = %s\r\n\r\n", EncodeHex(out).c_str());
 
   return true;
 }
diff --git a/util/fipstools/cavp/cavp_ecdsa2_keypair_test.cc b/util/fipstools/cavp/cavp_ecdsa2_keypair_test.cc
index d1fcead..f8c4a01 100644
--- a/util/fipstools/cavp/cavp_ecdsa2_keypair_test.cc
+++ b/util/fipstools/cavp/cavp_ecdsa2_keypair_test.cc
@@ -26,6 +26,7 @@
 #include <openssl/nid.h>
 
 #include "../crypto/test/file_test.h"
+#include "../crypto/test/test_util.h"
 #include "cavp_test_util.h"
 
 
@@ -68,10 +69,8 @@
       return false;
     }
 
-    printf("d = %s\r\nQx = %s\r\nQy = %s\r\n\r\n",
-           EncodeHex(d_bytes.data(), d_bytes.size()).c_str(),
-           EncodeHex(qx_bytes.data(), qx_bytes.size()).c_str(),
-           EncodeHex(qy_bytes.data(), qy_bytes.size()).c_str());
+    printf("d = %s\r\nQx = %s\r\nQy = %s\r\n\r\n", EncodeHex(d_bytes).c_str(),
+           EncodeHex(qx_bytes).c_str(), EncodeHex(qy_bytes).c_str());
   }
 
   return true;
diff --git a/util/fipstools/cavp/cavp_ecdsa2_siggen_test.cc b/util/fipstools/cavp/cavp_ecdsa2_siggen_test.cc
index 60c1c87..1282eaa 100644
--- a/util/fipstools/cavp/cavp_ecdsa2_siggen_test.cc
+++ b/util/fipstools/cavp/cavp_ecdsa2_siggen_test.cc
@@ -28,6 +28,7 @@
 
 #include "../crypto/internal.h"
 #include "../crypto/test/file_test.h"
+#include "../crypto/test/test_util.h"
 #include "cavp_test_util.h"
 
 
@@ -82,11 +83,9 @@
   }
 
   printf("%sQx = %s\r\nQy = %s\r\nR = %s\r\nS = %s\r\n\r\n",
-         t->CurrentTestToString().c_str(),
-         EncodeHex(qx_bytes.data(), qx_bytes.size()).c_str(),
-         EncodeHex(qy_bytes.data(), qy_bytes.size()).c_str(),
-         EncodeHex(r_bytes.data(), r_bytes.size()).c_str(),
-         EncodeHex(s_bytes.data(), s_bytes.size()).c_str());
+         t->CurrentTestToString().c_str(), EncodeHex(qx_bytes).c_str(),
+         EncodeHex(qy_bytes).c_str(), EncodeHex(r_bytes).c_str(),
+         EncodeHex(s_bytes).c_str());
   return true;
 }
 
diff --git a/util/fipstools/cavp/cavp_hmac_test.cc b/util/fipstools/cavp/cavp_hmac_test.cc
index 59c7e10..c88226a 100644
--- a/util/fipstools/cavp/cavp_hmac_test.cc
+++ b/util/fipstools/cavp/cavp_hmac_test.cc
@@ -19,8 +19,10 @@
 
 #include <openssl/crypto.h>
 #include <openssl/hmac.h>
+#include <openssl/span.h>
 
 #include "../crypto/test/file_test.h"
+#include "../crypto/test/test_util.h"
 #include "cavp_test_util.h"
 
 
@@ -79,7 +81,8 @@
   }
 
   printf("%s", t->CurrentTestToString().c_str());
-  printf("Mac = %s\r\n\r\n", EncodeHex(out, t_len).c_str());
+  printf("Mac = %s\r\n\r\n",
+         EncodeHex(bssl::MakeConstSpan(out, t_len)).c_str());
 
   return true;
 }
diff --git a/util/fipstools/cavp/cavp_kas_test.cc b/util/fipstools/cavp/cavp_kas_test.cc
index f89bc97..9a74f1d 100644
--- a/util/fipstools/cavp/cavp_kas_test.cc
+++ b/util/fipstools/cavp/cavp_kas_test.cc
@@ -26,9 +26,11 @@
 #include <openssl/err.h>
 #include <openssl/nid.h>
 #include <openssl/sha.h>
+#include <openssl/span.h>
 
 #include "../crypto/internal.h"
 #include "../crypto/test/file_test.h"
+#include "../crypto/test/test_util.h"
 #include "cavp_test_util.h"
 
 
@@ -104,7 +106,8 @@
 
     printf("%sIUTHashZZ = %s\r\nResult = %c\r\n\r\n\r\n",
            t->CurrentTestToString().c_str(),
-           EncodeHex(digest, digest_len).c_str(), ok ? 'P' : 'F');
+           EncodeHex(bssl::MakeConstSpan(digest, digest_len)).c_str(),
+           ok ? 'P' : 'F');
   } else {
     const EC_POINT *pub = EC_KEY_get0_public_key(ec_key.get());
     bssl::UniquePtr<BIGNUM> x(BN_new());
@@ -119,7 +122,7 @@
 
     printf("%sQeIUTx = %s\r\nQeIUTy = %s\r\nHashZZ = %s\r\n",
            t->CurrentTestToString().c_str(), x_hex.get(), y_hex.get(),
-           EncodeHex(digest, digest_len).c_str());
+           EncodeHex(bssl::MakeConstSpan(digest, digest_len)).c_str());
   }
 
   return true;
diff --git a/util/fipstools/cavp/cavp_keywrap_test.cc b/util/fipstools/cavp/cavp_keywrap_test.cc
index a4abccd..67397ec 100644
--- a/util/fipstools/cavp/cavp_keywrap_test.cc
+++ b/util/fipstools/cavp/cavp_keywrap_test.cc
@@ -21,6 +21,7 @@
 #include <openssl/crypto.h>
 
 #include "../crypto/test/file_test.h"
+#include "../crypto/test/test_util.h"
 #include "cavp_test_util.h"
 
 
@@ -119,8 +120,7 @@
       printf("FAIL\r\n\r\n");
     }
   } else {
-    printf("%s = %s\r\n\r\n", result_label.c_str(),
-           EncodeHex(result.data(), result.size()).c_str());
+    printf("%s = %s\r\n\r\n", result_label.c_str(), EncodeHex(result).c_str());
   }
 
   return true;
diff --git a/util/fipstools/cavp/cavp_rsa2_keygen_test.cc b/util/fipstools/cavp/cavp_rsa2_keygen_test.cc
index fa8d658..e7088c7 100644
--- a/util/fipstools/cavp/cavp_rsa2_keygen_test.cc
+++ b/util/fipstools/cavp/cavp_rsa2_keygen_test.cc
@@ -23,6 +23,7 @@
 
 #include "../crypto/internal.h"
 #include "../crypto/test/file_test.h"
+#include "../crypto/test/test_util.h"
 #include "cavp_test_util.h"
 
 
@@ -68,11 +69,9 @@
     }
 
     printf("e = %s\r\np = %s\r\nq = %s\r\nn = %s\r\nd = %s\r\n\r\n",
-           EncodeHex(e_bytes.data(), e_bytes.size()).c_str(),
-           EncodeHex(p_bytes.data(), p_bytes.size()).c_str(),
-           EncodeHex(q_bytes.data(), q_bytes.size()).c_str(),
-           EncodeHex(n_bytes.data(), n_bytes.size()).c_str(),
-           EncodeHex(d_bytes.data(), d_bytes.size()).c_str());
+           EncodeHex(e_bytes).c_str(), EncodeHex(p_bytes).c_str(),
+           EncodeHex(q_bytes).c_str(), EncodeHex(n_bytes).c_str(),
+           EncodeHex(d_bytes).c_str());
   }
 
   return true;
diff --git a/util/fipstools/cavp/cavp_rsa2_siggen_test.cc b/util/fipstools/cavp/cavp_rsa2_siggen_test.cc
index 063b89d..636a73a 100644
--- a/util/fipstools/cavp/cavp_rsa2_siggen_test.cc
+++ b/util/fipstools/cavp/cavp_rsa2_siggen_test.cc
@@ -24,6 +24,7 @@
 
 #include "../crypto/internal.h"
 #include "../crypto/test/file_test.h"
+#include "../crypto/test/test_util.h"
 #include "cavp_test_util.h"
 
 namespace {
@@ -66,10 +67,8 @@
       return false;
     }
 
-    printf("[mod = %s]\r\n\r\nn = %s\r\n\r\ne = %s",
-           mod_str.c_str(),
-           EncodeHex(n_bytes.data(), n_bytes.size()).c_str(),
-           EncodeHex(e_bytes.data(), e_bytes.size()).c_str());
+    printf("[mod = %s]\r\n\r\nn = %s\r\n\r\ne = %s", mod_str.c_str(),
+           EncodeHex(n_bytes).c_str(), EncodeHex(e_bytes).c_str());
     test = test.substr(test.find("]") + 3);
   }
 
@@ -97,8 +96,8 @@
     sig_len = sig_len_u;
   }
 
-  printf("%sS = %s\r\n\r\n", test.c_str(),
-         EncodeHex(sig.data(), sig_len).c_str());
+  sig.resize(sig_len);
+  printf("%sS = %s\r\n\r\n", test.c_str(), EncodeHex(sig).c_str());
   return true;
 }
 
diff --git a/util/fipstools/cavp/cavp_sha_monte_test.cc b/util/fipstools/cavp/cavp_sha_monte_test.cc
index d6f2fb0..f5bcdd1 100644
--- a/util/fipstools/cavp/cavp_sha_monte_test.cc
+++ b/util/fipstools/cavp/cavp_sha_monte_test.cc
@@ -21,6 +21,7 @@
 #include <openssl/digest.h>
 
 #include "../crypto/test/file_test.h"
+#include "../crypto/test/test_util.h"
 #include "cavp_test_util.h"
 
 
@@ -74,7 +75,7 @@
       msg.insert(msg.end(), out.begin(), out.end());
     }
     printf("COUNT = %d\r\n", count);
-    printf("MD = %s\r\n\r\n", EncodeHex(out.data(), out.size()).c_str());
+    printf("MD = %s\r\n\r\n", EncodeHex(out).c_str());
   }
 
   return true;
diff --git a/util/fipstools/cavp/cavp_sha_test.cc b/util/fipstools/cavp/cavp_sha_test.cc
index aae25c1..c046451 100644
--- a/util/fipstools/cavp/cavp_sha_test.cc
+++ b/util/fipstools/cavp/cavp_sha_test.cc
@@ -21,6 +21,7 @@
 #include <openssl/digest.h>
 
 #include "../crypto/test/file_test.h"
+#include "../crypto/test/test_util.h"
 #include "cavp_test_util.h"
 
 namespace {
@@ -69,7 +70,7 @@
   }
 
   printf("%s", t->CurrentTestToString().c_str());
-  printf("MD = %s\r\n\r\n", EncodeHex(out.data(), out.size()).c_str());
+  printf("MD = %s\r\n\r\n", EncodeHex(out).c_str());
 
   return true;
 }
diff --git a/util/fipstools/cavp/cavp_tdes_test.cc b/util/fipstools/cavp/cavp_tdes_test.cc
index d1c10ff..7b8839d 100644
--- a/util/fipstools/cavp/cavp_tdes_test.cc
+++ b/util/fipstools/cavp/cavp_tdes_test.cc
@@ -22,6 +22,7 @@
 #include <openssl/err.h>
 
 #include "../crypto/test/file_test.h"
+#include "../crypto/test/test_util.h"
 #include "cavp_test_util.h"
 
 
@@ -131,20 +132,16 @@
       operation == kEncrypt ? "CIPHERTEXT" : "PLAINTEXT";
   printf("COUNT = %s\r\n", count.c_str());
   if (num_keys == kNotPresent) {
-    printf("KEYs = %s\r\n", EncodeHex(keys.data(), keys.size()).c_str());
+    printf("KEYs = %s\r\n", EncodeHex(keys).c_str());
   } else {
-    printf("KEY1 = %s\r\nKEY2 = %s\r\nKEY3 = %s\r\n",
-           EncodeHex(key1.data(), key1.size()).c_str(),
-           EncodeHex(key2.data(), key2.size()).c_str(),
-           EncodeHex(key3.data(), key3.size()).c_str());
+    printf("KEY1 = %s\r\nKEY2 = %s\r\nKEY3 = %s\r\n", EncodeHex(key1).c_str(),
+           EncodeHex(key2).c_str(), EncodeHex(key3).c_str());
   }
   if (ctx->has_iv) {
-    printf("IV = %s\r\n", EncodeHex(iv.data(), iv.size()).c_str());
+    printf("IV = %s\r\n", EncodeHex(iv).c_str());
   }
-  printf("%s = %s\r\n", in_label.c_str(),
-         EncodeHex(in.data(), in.size()).c_str());
-  printf("%s = %s\r\n\r\n", result_label.c_str(),
-         EncodeHex(result.data(), result.size()).c_str());
+  printf("%s = %s\r\n", in_label.c_str(), EncodeHex(in).c_str());
+  printf("%s = %s\r\n\r\n", result_label.c_str(), EncodeHex(result).c_str());
 
   return true;
 }
@@ -265,16 +262,13 @@
       printf("[%s]\n\n", op_label.c_str());
     }
     printf("COUNT = %d\r\nKEY1 = %s\r\nKEY2 = %s\r\nKEY3 = %s\r\n", i,
-           EncodeHex(key1.data(), key1.size()).c_str(),
-           EncodeHex(key2.data(), key2.size()).c_str(),
-           EncodeHex(key3.data(), key3.size()).c_str());
+           EncodeHex(key1).c_str(), EncodeHex(key2).c_str(),
+           EncodeHex(key3).c_str());
     if (ctx->has_iv) {
-      printf("IV = %s\r\n", EncodeHex(iv.data(), iv.size()).c_str());
+      printf("IV = %s\r\n", EncodeHex(iv).c_str());
     }
-    printf("%s = %s\r\n", in_label.c_str(),
-           EncodeHex(in.data(), in.size()).c_str());
-    printf("%s = %s\r\n\r\n", result_label.c_str(),
-           EncodeHex(result.data(), result.size()).c_str());
+    printf("%s = %s\r\n", in_label.c_str(), EncodeHex(in).c_str());
+    printf("%s = %s\r\n\r\n", result_label.c_str(), EncodeHex(result).c_str());
 
 
     XORKeyWithOddParityLSB(&key1, result);
diff --git a/util/fipstools/cavp/cavp_test_util.cc b/util/fipstools/cavp/cavp_test_util.cc
index 87a3b92..1b4e3a1 100644
--- a/util/fipstools/cavp/cavp_test_util.cc
+++ b/util/fipstools/cavp/cavp_test_util.cc
@@ -20,17 +20,6 @@
 #include <openssl/nid.h>
 
 
-std::string EncodeHex(const uint8_t *in, size_t in_len) {
-  static const char kHexDigits[] = "0123456789abcdef";
-  std::string ret;
-  ret.reserve(in_len * 2);
-  for (size_t i = 0; i < in_len; i++) {
-    ret += kHexDigits[in[i] >> 4];
-    ret += kHexDigits[in[i] & 0xf];
-  }
-  return ret;
-}
-
 const EVP_CIPHER *GetCipher(const std::string &name) {
   if (name == "des-cbc") {
     return EVP_des_cbc();
diff --git a/util/fipstools/cavp/cavp_test_util.h b/util/fipstools/cavp/cavp_test_util.h
index ca9e790..d51dfe6 100644
--- a/util/fipstools/cavp/cavp_test_util.h
+++ b/util/fipstools/cavp/cavp_test_util.h
@@ -25,8 +25,6 @@
 #include "../crypto/test/file_test.h"
 
 
-std::string EncodeHex(const uint8_t *in, size_t in_len);
-
 const EVP_CIPHER *GetCipher(const std::string &name);
 
 bool CipherOperation(const EVP_CIPHER *cipher, std::vector<uint8_t> *out,
diff --git a/util/fipstools/cavp/cavp_tlskdf_test.cc b/util/fipstools/cavp/cavp_tlskdf_test.cc
index 0af2d47..0243439 100644
--- a/util/fipstools/cavp/cavp_tlskdf_test.cc
+++ b/util/fipstools/cavp/cavp_tlskdf_test.cc
@@ -25,6 +25,7 @@
 #include "cavp_test_util.h"
 #include "../crypto/fipsmodule/tls/internal.h"
 #include "../crypto/test/file_test.h"
+#include "../crypto/test/test_util.h"
 
 
 static bool TestTLSKDF(FileTest *t, void *arg) {
@@ -91,9 +92,8 @@
   }
 
   printf("%smaster_secret = %s\r\nkey_block = %s\r\n\r\n",
-         t->CurrentTestToString().c_str(),
-         EncodeHex(master_secret, sizeof(master_secret)).c_str(),
-         EncodeHex(key_block.data(), key_block.size()).c_str());
+         t->CurrentTestToString().c_str(), EncodeHex(master_secret).c_str(),
+         EncodeHex(key_block).c_str());
 
   return true;
 }
