avb_tests: split out reset keys; enable key testing

This change uses ProductionResetTest() to verify server signatures
are valid with AVB's internal keys and implementation.

The server signs a nonce=0,hash=00.00 which acts as
the "test input". This signature is put into the test-data
reset_key_data.cc file.

AVB uses a selector to identify key/protocol version:
  0 = test, 1 = server-dev, 2 = server-prod

Currently 1 is the default and 0 is what TEST_IMAGE produces.

This test supports testing whichever key is active on the image.
Many AVB tests expect selector==1, so they will fail if run with
a different key, but this test may be run explicitly using
   bazel run runtests -- \
     --gtest_filter=AvbTest.ResetKeyNullTokenSignatureTest

To switch the build, the RESET_KEY macro can be used on BOARD=red:
      touch user/avb/avb_app.c
      make BOARD=red ... RESET_KEY=1  # 0 or 2

For other builds, the key will default to what is in the define.

Test: Followed the instructions above for keys 0, 1, 2.
Bug: 74946926

Change-Id: I4a7b67f9bc2ab14731f4340d56382df22cd588b2
diff --git a/BUILD b/BUILD
index fb9a2ea..8c12dd7 100644
--- a/BUILD
+++ b/BUILD
@@ -23,6 +23,7 @@
     deps = [
         ":dcrypto_test_data",
         ":km_test_lib",
+        ":reset_key_data_lib",
         ":util",
         "@boringssl//:ssl",
         "@com_github_gflags_gflags//:gflags",
@@ -97,6 +98,16 @@
 )
 
 cc_library(
+    name = "reset_key_data_lib",
+    srcs = [
+        "src/test-data/test-keys/reset_key_data.cc",
+    ],
+    hdrs = [
+        "src/test-data/test-keys/reset_key_data.h",
+    ],
+)
+
+cc_library(
     name = "km_test_lib",
     srcs = [
         "src/test-data/test-keys/rsa.cc",
diff --git a/src/avb_tests.cc b/src/avb_tests.cc
index b6be4c4..f6e3161 100644
--- a/src/avb_tests.cc
+++ b/src/avb_tests.cc
@@ -5,6 +5,7 @@
 #include "nugget_tools.h"
 #include "nugget/app/avb/avb.pb.h"
 #include "Avb.client.h"
+#include "src/test-data/test-keys/reset_key_data.h"
 #include <avb.h>
 #include <application.h>
 #include <nos/AppClient.h>
@@ -139,38 +140,10 @@
   EXPECT_EQ(locks[OWNER], 0x00);
 }
 
-static const uint8_t kResetKeyPem[] =
-"-----BEGIN RSA PRIVATE KEY-----\n\
-MIIEpAIBAAKCAQEAo0IoAa5cK7XyAj7u1jFStsfEcxkgAZVF9VWKzH1bofKxLioA\n\
-r5Lo4D33glKehxkOlDo6GkBj1PoI8WuvYYvEUyxJNUdlVpa1C2lbewEL0rfyBrZ9\n\
-4cp0ZeUknymYHn3ynW4Z8sYMlj7BNxGttV/jbxtgtT5WHJ+hg5/4/ifCPucN17Bt\n\
-heUKIBoAjy6DlB/pMg1NUQ82DaASMFe89mEzI9Zk4CRtkWjEhknY0bYm46U1ABJb\n\
-YmIsHlxdADskvWFDmq8CfJr/jXstTXxZeqaxPPdSP+WPwXN/ku5W7qkF2qimEKiy\n\
-DYHzY65JhfWmHOLLGNuz6iHkq93uzkKsGIIPGQIDAQABAoIBABGTvdrwetv56uRz\n\
-AiPti4pCV9RMkDWbbLzNSPRbStJU3t6phwlgN9Js2YkefBLvj7JF0pug8x6rDOtx\n\
-PKCz+5841Wj3FuILt9JStZa4th0p0NUIMOVudrnBwf+g6s/dn5FzmTeaOyCyAPt8\n\
-28b7W/FKcU8SNxM93JXfU1+JyFAdREqsXQfqLhCAXBb46fs5D8hg0c99RdWuJSuY\n\
-HKyVXDrjmYAHS5qUDeMx0OY/q1qM03FBvHekvJ78WPpUKF7B/gYH9lBHIHE0KLJY\n\
-JR6kKkzN/Ii6BsSubKKeuNntzlzd2ukvFdX4uc42dDpIXPdaQAn84KRYN7++KoGz\n\
-2LqtAAECgYEAzQt5kt9c+xDeKMPR92XQ4uMeLxTufBei1PFGZbJnJT8aEMkVhKT/\n\
-Pbh1Z8OnN9YvFprDNpEilUm7xyffrE7p0pI1/qiBXZExy6pIcGAo4ZcB8ayN0JV3\n\
-k+RilE73x+sKAyWOm82b273PiyHNsQI4flkO5Ev9rpZbPMKlvZYsmxkCgYEAy9RR\n\
-RwxwCpvFi3um0Rwz7CI2uvVXGaLVXyR2oNGLcJG7AhusYi4FX6XJQ3vAgiDmzu/c\n\
-SaEF9w7uqeueIUA7L7njYP1ojfJAUJEtQRfVJF2tDntN5YgYUTsx8n3IKTs4xFT4\n\
-dBthKo16zzLv92+8m4sWJhFW2zzFFLwk+G5jlAECgYEAln1piSZus8Y5h2nRXOZZ\n\
-XWyb5qpSLrmaRPegV1uM4IVjuBYduPDwdHhBkxrCS/TjMo/73ry+yRsIuq7FN03j\n\
-xyyQfItoByhdh8E+0VuCJbATOTEQFJre3KiuwXMD4LLc8lpKRIevcKPrA46XzOZ4\n\
-WCM9DsnHMrAf3oRt6KujqWECgYEAyu43fWUEp4suwg/5pXdOumnV040vinZzuKW0\n\
-9aeqDAkLBq5Gkfj/oJqOJoGux9+5640i5KtMJQzY0JOke7ZXNsz7dDTXQ3tMTOo9\n\
-A/GWYv5grWpVw5AbpcQpliNkhKhRfCactfwMYTE6c89i2haE0NdI1d2te9ik3l/y\n\
-7uP4gAECgYA3u2CumlkjHq+LbMK6Ry+Ajyy4ssM5PKJUqSogJDUkHsG/C7yaCdq/\n\
-Ljt2x2220H0pM9885C3PpKxoYwRih9dzOamnARJocAElp2b5AQB+tKddlMdwx1pQ\n\
-0IMGQ3fBYkDFLGYDk7hGYkLLlSJCZwi64xKmmfEwl83RL6JDSFupDg==\n\
------END RSA PRIVATE KEY-----";
-
-static RSA *GetResetKey()
+RSA *GetResetKey()
 {
-  BIO *bio = BIO_new_mem_buf((void*)kResetKeyPem, sizeof(kResetKeyPem) - 1);
+  BIO *bio = BIO_new_mem_buf((void*)test_data::kResetKeyPem,
+                              test_data::kResetKeyPemSize - 1);
   RSA *rsa = PEM_read_bio_RSAPrivateKey(bio, NULL, 0, NULL);
   BIO_free(bio);
   return rsa;
@@ -805,33 +778,6 @@
   ASSERT_NO_ERROR(code, "");
 }
 
-static const uint8_t kNullSig[] = {
-  0x95, 0x35, 0x5a, 0xb6, 0xe3, 0x8e, 0x43, 0x03, 0xd9, 0xd9, 0xd5, 0x6e,
-  0x99, 0x86, 0xff, 0x8e, 0x6a, 0xf1, 0x54, 0x6f, 0xa8, 0xff, 0x37, 0x38,
-  0xc6, 0x9b, 0x4d, 0xc6, 0x99, 0x1f, 0x37, 0x5c, 0xec, 0xf4, 0x32, 0xd8,
-  0xe6, 0x00, 0xcc, 0x74, 0xde, 0xa9, 0x68, 0x1a, 0xab, 0x6a, 0x6e, 0xe7,
-  0xa7, 0xa1, 0x59, 0xe0, 0x7c, 0x86, 0x95, 0x28, 0x94, 0x18, 0x3f, 0x0f,
-  0xb9, 0x0f, 0x05, 0x6c, 0x86, 0x5a, 0x6a, 0xe4, 0x6d, 0x36, 0x71, 0x86,
-  0x38, 0xab, 0x7a, 0x2d, 0x9c, 0xa5, 0xfa, 0xc8, 0x7c, 0x48, 0x02, 0x8c,
-  0x6b, 0x4d, 0xda, 0xa4, 0xb5, 0xa8, 0x17, 0x39, 0x5e, 0xe3, 0x1a, 0xd5,
-  0xf8, 0x87, 0x6e, 0xd9, 0xc0, 0x0c, 0x29, 0x4d, 0x93, 0xa2, 0x3b, 0xfc,
-  0x2d, 0x38, 0x8e, 0x2b, 0xc7, 0x49, 0x26, 0xd9, 0xcb, 0x47, 0x89, 0x4c,
-  0x79, 0xd3, 0x60, 0x62, 0xf9, 0x71, 0xa7, 0x73, 0x6a, 0x03, 0x65, 0x1f,
-  0x11, 0x0d, 0x9e, 0x27, 0x99, 0x6b, 0xa7, 0x46, 0x85, 0x75, 0xec, 0xff,
-  0x5b, 0x1d, 0x8d, 0x1b, 0x34, 0xd8, 0xb9, 0x4f, 0x63, 0x88, 0x08, 0xa8,
-  0x16, 0xba, 0xfc, 0xe7, 0x66, 0xa4, 0xe5, 0xde, 0x4e, 0x0b, 0x98, 0x80,
-  0xd5, 0x16, 0x55, 0xfb, 0xdb, 0xe8, 0xa2, 0x90, 0x85, 0x4e, 0xa9, 0xb6,
-  0x81, 0x55, 0xef, 0xbf, 0x12, 0xe3, 0xd2, 0xa9, 0xae, 0x2c, 0x43, 0x67,
-  0x4c, 0x09, 0x6d, 0x95, 0xaf, 0x44, 0xc2, 0xb9, 0x9d, 0x7c, 0xb1, 0x88,
-  0xf8, 0x6c, 0xa0, 0x13, 0x4c, 0xbf, 0x85, 0xa2, 0x8b, 0x9d, 0x06, 0xc8,
-  0x11, 0xdb, 0x1f, 0xfb, 0x05, 0x15, 0xd6, 0x1f, 0xe5, 0x52, 0x9c, 0xd5,
-  0xbd, 0xff, 0xb0, 0xce, 0x29, 0xec, 0xd8, 0x9e, 0xdb, 0x5b, 0xc9, 0x52,
-  0x24, 0xaf, 0x22, 0xeb, 0xce, 0x15, 0x0d, 0xfd, 0x6c, 0x76, 0x90, 0x3e,
-  0x4f, 0x63, 0xfd, 0xb1
-};
-
-const static unsigned int kNullSigLen = 256;
-
 TEST_F(AvbTest, ProductionResetTestValid)
 {
   static const uint8_t kDeviceHash[] = {
@@ -876,7 +822,8 @@
   message.nonce = 0;
   memset(message.data, 0, sizeof(message.data));
   code = ProductionResetTest(selector, message.nonce, message.data, len,
-                             kNullSig, kNullSigLen);
+                             test_data::kResetSignatures[selector],
+                             test_data::kResetSignatureLengths[selector]);
   ASSERT_NO_ERROR(code, "");
 }
 
@@ -889,4 +836,29 @@
   EXPECT_EQ(locks[DEVICE], 0x00);
 }
 
+TEST_F(AvbTest, ResetKeyNullTokenSignatureTest)
+{
+  struct ResetMessage message;
+  int code;
+
+  uint32_t selector;
+  uint64_t nonce;
+  uint8_t device_data[AVB_DEVICE_DATA_SIZE];
+  size_t len = sizeof(device_data);
+
+  // Get the selector
+  code = GetResetChallenge(client.get(), &selector, &nonce,
+                           device_data, &len);
+  ASSERT_NO_ERROR(code, "");
+  ASSERT_LT(selector, test_data::kResetSignatureCount);
+
+  memset(&message, 0, sizeof(message));
+  // Now use a good one, but without getting a new nonce.
+  cout << "Testing key: " << selector << "\n";
+  code = ProductionResetTest(selector, message.nonce, message.data, 32,
+                             test_data::kResetSignatures[selector],
+                             test_data::kResetSignatureLengths[selector]);
+  ASSERT_NO_ERROR(code, "");
+}
+
 }  // namespace
diff --git a/src/test-data/test-keys/reset_key_data.cc b/src/test-data/test-keys/reset_key_data.cc
new file mode 100644
index 0000000..9f22c42
--- /dev/null
+++ b/src/test-data/test-keys/reset_key_data.cc
@@ -0,0 +1,124 @@
+
+#include "reset_key_data.h"
+
+namespace test_data {
+
+const uint8_t kResetKeyPem[] =
+"-----BEGIN RSA PRIVATE KEY-----\n\
+MIIEpAIBAAKCAQEAo0IoAa5cK7XyAj7u1jFStsfEcxkgAZVF9VWKzH1bofKxLioA\n\
+r5Lo4D33glKehxkOlDo6GkBj1PoI8WuvYYvEUyxJNUdlVpa1C2lbewEL0rfyBrZ9\n\
+4cp0ZeUknymYHn3ynW4Z8sYMlj7BNxGttV/jbxtgtT5WHJ+hg5/4/ifCPucN17Bt\n\
+heUKIBoAjy6DlB/pMg1NUQ82DaASMFe89mEzI9Zk4CRtkWjEhknY0bYm46U1ABJb\n\
+YmIsHlxdADskvWFDmq8CfJr/jXstTXxZeqaxPPdSP+WPwXN/ku5W7qkF2qimEKiy\n\
+DYHzY65JhfWmHOLLGNuz6iHkq93uzkKsGIIPGQIDAQABAoIBABGTvdrwetv56uRz\n\
+AiPti4pCV9RMkDWbbLzNSPRbStJU3t6phwlgN9Js2YkefBLvj7JF0pug8x6rDOtx\n\
+PKCz+5841Wj3FuILt9JStZa4th0p0NUIMOVudrnBwf+g6s/dn5FzmTeaOyCyAPt8\n\
+28b7W/FKcU8SNxM93JXfU1+JyFAdREqsXQfqLhCAXBb46fs5D8hg0c99RdWuJSuY\n\
+HKyVXDrjmYAHS5qUDeMx0OY/q1qM03FBvHekvJ78WPpUKF7B/gYH9lBHIHE0KLJY\n\
+JR6kKkzN/Ii6BsSubKKeuNntzlzd2ukvFdX4uc42dDpIXPdaQAn84KRYN7++KoGz\n\
+2LqtAAECgYEAzQt5kt9c+xDeKMPR92XQ4uMeLxTufBei1PFGZbJnJT8aEMkVhKT/\n\
+Pbh1Z8OnN9YvFprDNpEilUm7xyffrE7p0pI1/qiBXZExy6pIcGAo4ZcB8ayN0JV3\n\
+k+RilE73x+sKAyWOm82b273PiyHNsQI4flkO5Ev9rpZbPMKlvZYsmxkCgYEAy9RR\n\
+RwxwCpvFi3um0Rwz7CI2uvVXGaLVXyR2oNGLcJG7AhusYi4FX6XJQ3vAgiDmzu/c\n\
+SaEF9w7uqeueIUA7L7njYP1ojfJAUJEtQRfVJF2tDntN5YgYUTsx8n3IKTs4xFT4\n\
+dBthKo16zzLv92+8m4sWJhFW2zzFFLwk+G5jlAECgYEAln1piSZus8Y5h2nRXOZZ\n\
+XWyb5qpSLrmaRPegV1uM4IVjuBYduPDwdHhBkxrCS/TjMo/73ry+yRsIuq7FN03j\n\
+xyyQfItoByhdh8E+0VuCJbATOTEQFJre3KiuwXMD4LLc8lpKRIevcKPrA46XzOZ4\n\
+WCM9DsnHMrAf3oRt6KujqWECgYEAyu43fWUEp4suwg/5pXdOumnV040vinZzuKW0\n\
+9aeqDAkLBq5Gkfj/oJqOJoGux9+5640i5KtMJQzY0JOke7ZXNsz7dDTXQ3tMTOo9\n\
+A/GWYv5grWpVw5AbpcQpliNkhKhRfCactfwMYTE6c89i2haE0NdI1d2te9ik3l/y\n\
+7uP4gAECgYA3u2CumlkjHq+LbMK6Ry+Ajyy4ssM5PKJUqSogJDUkHsG/C7yaCdq/\n\
+Ljt2x2220H0pM9885C3PpKxoYwRih9dzOamnARJocAElp2b5AQB+tKddlMdwx1pQ\n\
+0IMGQ3fBYkDFLGYDk7hGYkLLlSJCZwi64xKmmfEwl83RL6JDSFupDg==\n\
+-----END RSA PRIVATE KEY-----";
+const size_t kResetKeyPemSize = sizeof(kResetKeyPem);
+
+// Dev-signed "null" message.
+static const uint8_t kNullDevSig[] = {
+  0x9d, 0x16, 0x0c, 0x04, 0x64, 0xd6, 0x17, 0xbc, 0xf9, 0x81, 0x4d, 0x7b,
+  0x15, 0x45, 0x2f, 0xa1, 0x66, 0xfa, 0x03, 0x45, 0x50, 0x9b, 0x60, 0x6e,
+  0x77, 0x76, 0x4d, 0x09, 0x99, 0x98, 0xe5, 0x8e, 0x0a, 0xf3, 0x4e, 0x09,
+  0x2c, 0xa0, 0xfd, 0x2e, 0xfa, 0x23, 0x16, 0x53, 0x61, 0x43, 0x6b, 0xba,
+  0xb7, 0xf8, 0x6b, 0xb4, 0xbe, 0x55, 0x3d, 0x21, 0x63, 0x84, 0x64, 0x00,
+  0x2d, 0xf0, 0x3c, 0x4d, 0x63, 0x4d, 0xe8, 0xf6, 0x26, 0xf7, 0x6b, 0x0e,
+  0x08, 0xca, 0xda, 0xa0, 0x8d, 0x0a, 0x3f, 0x06, 0x9d, 0xf7, 0x4d, 0x97,
+  0x86, 0xf4, 0xc2, 0x56, 0x94, 0x85, 0x46, 0xc0, 0x11, 0x0b, 0x9d, 0x12,
+  0x39, 0x9e, 0x3d, 0xb7, 0xcb, 0xac, 0xe9, 0x63, 0x10, 0xd7, 0xeb, 0x1c,
+  0x0b, 0xf7, 0x83, 0x06, 0xa8, 0xdd, 0x61, 0x38, 0xef, 0xe8, 0x13, 0x18,
+  0xda, 0xd8, 0xdc, 0xd6, 0x12, 0x1c, 0xf3, 0x7c, 0x6e, 0x19, 0xd6, 0x94,
+  0xe6, 0x3a, 0x6e, 0x8e, 0x5b, 0xcf, 0x3a, 0x69, 0x1c, 0xcf, 0xc2, 0x48,
+  0xc2, 0xb2, 0x1b, 0xb8, 0x24, 0xc2, 0xc5, 0x7e, 0xdc, 0x5d, 0x01, 0xe6,
+  0xfb, 0x14, 0xbf, 0x96, 0xc1, 0xd3, 0xdf, 0xe5, 0x14, 0x3f, 0xcb, 0xea,
+  0xfa, 0xef, 0xa7, 0x5c, 0xc3, 0xcb, 0x62, 0x09, 0x0e, 0x1f, 0xd9, 0x56,
+  0x35, 0xdb, 0x34, 0x23, 0x6a, 0xac, 0x43, 0x0d, 0x27, 0x90, 0x8e, 0x96,
+  0xcc, 0x89, 0xb6, 0x74, 0x45, 0x1e, 0x8f, 0x48, 0x2a, 0x1d, 0x8f, 0xba,
+  0xd0, 0x80, 0x7e, 0xf9, 0x1f, 0x21, 0x9b, 0x87, 0x80, 0x9b, 0x9e, 0x1a,
+  0xb8, 0xc3, 0xe4, 0x55, 0xaa, 0x67, 0xa5, 0x2d, 0x1a, 0x85, 0xd8, 0x6a,
+  0x9a, 0xc7, 0x5d, 0x1e, 0x1d, 0x51, 0x47, 0x09, 0x51, 0xf6, 0x7c, 0xe9,
+  0xfc, 0x1f, 0x9e, 0xea, 0xc9, 0xce, 0x77, 0xf2, 0xb1, 0x79, 0x7e, 0x17,
+  0xc2, 0x78, 0xab, 0xf7
+};
+
+static const uint8_t kNullProdSig[] = {
+  0x41, 0xcf, 0x80, 0xa7, 0x43, 0xdb, 0xb1, 0x08, 0x36, 0x5f, 0xbb, 0x23,
+  0xa4, 0x1c, 0xa9, 0x28, 0xdf, 0x64, 0x79, 0xeb, 0x41, 0x67, 0x5d, 0x35,
+  0x09, 0x76, 0x4a, 0xca, 0x74, 0xe8, 0xf0, 0x5b, 0x7d, 0x53, 0x8f, 0x5f,
+  0x49, 0xdb, 0x7c, 0x08, 0x70, 0xdb, 0xd3, 0xe2, 0x87, 0x51, 0x08, 0x6f,
+  0x13, 0x40, 0x33, 0x56, 0xa9, 0x99, 0x07, 0xee, 0x18, 0x88, 0xe0, 0x63,
+  0x15, 0x90, 0x4e, 0xd1, 0x4a, 0x51, 0x00, 0x91, 0x63, 0x3e, 0x55, 0x80,
+  0xfc, 0xde, 0x18, 0x55, 0x52, 0x89, 0xa0, 0x05, 0xdc, 0x99, 0x80, 0x2c,
+  0x90, 0xd1, 0x14, 0xea, 0xe0, 0xd7, 0xab, 0x26, 0x67, 0xe3, 0x75, 0xd0,
+  0x06, 0xa9, 0x36, 0x11, 0x21, 0xc8, 0x21, 0x4c, 0x49, 0xe2, 0x81, 0x66,
+  0x25, 0x2c, 0x41, 0xb6, 0x48, 0x65, 0x0b, 0x44, 0xc9, 0xcc, 0x0c, 0xad,
+  0x88, 0x95, 0x9d, 0x9a, 0x25, 0x71, 0xb3, 0x85, 0x22, 0xbf, 0x28, 0x05,
+  0x65, 0x62, 0x61, 0x54, 0x5d, 0xd9, 0xc8, 0x7c, 0x17, 0x5f, 0xec, 0xc7,
+  0x40, 0xaf, 0x66, 0xd3, 0x0a, 0x1f, 0x6a, 0x56, 0xbc, 0x48, 0x84, 0xf6,
+  0x61, 0xa3, 0xab, 0x3c, 0x81, 0x72, 0x75, 0x94, 0x5d, 0x03, 0xeb, 0xca,
+  0x7f, 0xb3, 0x48, 0xbc, 0x8f, 0x4c, 0xb3, 0xc2, 0xae, 0xa9, 0x53, 0x91,
+  0x17, 0x48, 0x48, 0x36, 0xb7, 0x7c, 0xd8, 0xe4, 0x99, 0x86, 0x1e, 0x57,
+  0xaa, 0xaf, 0xab, 0xe4, 0x61, 0x32, 0x58, 0xdb, 0x45, 0x38, 0x26, 0x32,
+  0x2c, 0xa0, 0x21, 0x34, 0xa3, 0xef, 0x6c, 0x2c, 0x8c, 0x74, 0x10, 0x3c,
+  0x70, 0x3e, 0xe2, 0x80, 0x7a, 0xf5, 0x9f, 0xf1, 0x92, 0x43, 0x4f, 0x21,
+  0xb8, 0x21, 0xd5, 0x7a, 0xa7, 0x36, 0xfc, 0x2e, 0x50, 0xd1, 0xa6, 0xbf,
+  0xfc, 0xc7, 0x57, 0x75, 0x19, 0xb7, 0xcf, 0x8f, 0xdb, 0x3d, 0x1c, 0xa2,
+  0xdc, 0x81, 0x71, 0x82
+};
+
+static const uint8_t kNullTestSig[] = {
+  0x95, 0x35, 0x5a, 0xb6, 0xe3, 0x8e, 0x43, 0x03, 0xd9, 0xd9, 0xd5, 0x6e,
+  0x99, 0x86, 0xff, 0x8e, 0x6a, 0xf1, 0x54, 0x6f, 0xa8, 0xff, 0x37, 0x38,
+  0xc6, 0x9b, 0x4d, 0xc6, 0x99, 0x1f, 0x37, 0x5c, 0xec, 0xf4, 0x32, 0xd8,
+  0xe6, 0x00, 0xcc, 0x74, 0xde, 0xa9, 0x68, 0x1a, 0xab, 0x6a, 0x6e, 0xe7,
+  0xa7, 0xa1, 0x59, 0xe0, 0x7c, 0x86, 0x95, 0x28, 0x94, 0x18, 0x3f, 0x0f,
+  0xb9, 0x0f, 0x05, 0x6c, 0x86, 0x5a, 0x6a, 0xe4, 0x6d, 0x36, 0x71, 0x86,
+  0x38, 0xab, 0x7a, 0x2d, 0x9c, 0xa5, 0xfa, 0xc8, 0x7c, 0x48, 0x02, 0x8c,
+  0x6b, 0x4d, 0xda, 0xa4, 0xb5, 0xa8, 0x17, 0x39, 0x5e, 0xe3, 0x1a, 0xd5,
+  0xf8, 0x87, 0x6e, 0xd9, 0xc0, 0x0c, 0x29, 0x4d, 0x93, 0xa2, 0x3b, 0xfc,
+  0x2d, 0x38, 0x8e, 0x2b, 0xc7, 0x49, 0x26, 0xd9, 0xcb, 0x47, 0x89, 0x4c,
+  0x79, 0xd3, 0x60, 0x62, 0xf9, 0x71, 0xa7, 0x73, 0x6a, 0x03, 0x65, 0x1f,
+  0x11, 0x0d, 0x9e, 0x27, 0x99, 0x6b, 0xa7, 0x46, 0x85, 0x75, 0xec, 0xff,
+  0x5b, 0x1d, 0x8d, 0x1b, 0x34, 0xd8, 0xb9, 0x4f, 0x63, 0x88, 0x08, 0xa8,
+  0x16, 0xba, 0xfc, 0xe7, 0x66, 0xa4, 0xe5, 0xde, 0x4e, 0x0b, 0x98, 0x80,
+  0xd5, 0x16, 0x55, 0xfb, 0xdb, 0xe8, 0xa2, 0x90, 0x85, 0x4e, 0xa9, 0xb6,
+  0x81, 0x55, 0xef, 0xbf, 0x12, 0xe3, 0xd2, 0xa9, 0xae, 0x2c, 0x43, 0x67,
+  0x4c, 0x09, 0x6d, 0x95, 0xaf, 0x44, 0xc2, 0xb9, 0x9d, 0x7c, 0xb1, 0x88,
+  0xf8, 0x6c, 0xa0, 0x13, 0x4c, 0xbf, 0x85, 0xa2, 0x8b, 0x9d, 0x06, 0xc8,
+  0x11, 0xdb, 0x1f, 0xfb, 0x05, 0x15, 0xd6, 0x1f, 0xe5, 0x52, 0x9c, 0xd5,
+  0xbd, 0xff, 0xb0, 0xce, 0x29, 0xec, 0xd8, 0x9e, 0xdb, 0x5b, 0xc9, 0x52,
+  0x24, 0xaf, 0x22, 0xeb, 0xce, 0x15, 0x0d, 0xfd, 0x6c, 0x76, 0x90, 0x3e,
+  0x4f, 0x63, 0xfd, 0xb1
+};
+
+const uint8_t *kResetSignatures[] = {
+ [0] = kNullTestSig,
+ [1] = kNullDevSig,
+ [2] = kNullProdSig,
+};
+
+const size_t kResetSignatureLengths[] = {
+ 256, 256, 256,
+};
+
+const size_t kResetSignatureCount = 3;
+
+}  // namespace test_data
diff --git a/src/test-data/test-keys/reset_key_data.h b/src/test-data/test-keys/reset_key_data.h
new file mode 100644
index 0000000..0fb948f
--- /dev/null
+++ b/src/test-data/test-keys/reset_key_data.h
@@ -0,0 +1,17 @@
+#ifndef SRC_TEST_RESET_KEYS_H
+#define SRC_TEST_RESET_KEYS_H
+
+#include <stddef.h>
+#include <stdint.h>
+
+namespace test_data {
+
+extern const uint8_t kResetKeyPem[];
+extern const size_t kResetKeyPemSize;
+extern const uint8_t *kResetSignatures[];
+extern const size_t kResetSignatureLengths[];
+extern const size_t kResetSignatureCount;
+}  // namespace test_data
+
+
+#endif  // SRC_TEST_RESET_KEYS_H