Add something to the error queue when Proc-Type version is wrong

The Proc-Type header starts with a version number. From RFC 1421,
Section 4.6.1.1:

>  The "Proc-Type:" field has two subfields, separated by a comma.  The
>  first subfield is a decimal number which is used to distinguish among
>  incompatible encapsulated header field interpretations which may
>  arise as changes are made to this standard.  Messages processed
>  according to this RFC will carry the subfield value "4" to
>  distinguish them from messages processed in accordance with prior PEM
>  RFCs.

RFC 1421 was an update of RFC 1113, which used X-Proc-Type: 3,ENCRYPTED,
which we do not support. RFC 1040 defined X-Proc-Type: 2 and RFC 989
defined X-Proc-Type: 1,E. As far as I can tell, no other numbers for
Proc-Type have ever existed, and likely never will.

If we were to ever Proc-Type: 5, we currently return failure but forget
to put something on the error queue. It's possible this was originally
done for extensibility, but it just breaks internal invariants. By
returning zero, the callers will treat this as an error anyway. We'll
just confuse code that expects OpenSSL to return an error. Also
OpenSSL's PEM APIs all treat failure to decrypt (e.g. due to unsupported
future cipher) as an error, so we should treat an unsupported future PEM
encryption scheme as an error too.

Change-Id: Ia1f4f6776fea8d8a465a73105bf3ce24a587f26b
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/74809
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/crypto/err/pem.errordata b/crypto/err/pem.errordata
index 2a4b73a..0856f74 100644
--- a/crypto/err/pem.errordata
+++ b/crypto/err/pem.errordata
@@ -13,3 +13,4 @@
 PEM,112,SHORT_HEADER
 PEM,113,UNSUPPORTED_CIPHER
 PEM,114,UNSUPPORTED_ENCRYPTION
+PEM,115,UNSUPPORTED_PROC_TYPE_VERSION
diff --git a/crypto/pem/pem_lib.cc b/crypto/pem/pem_lib.cc
index 61ab551..3a54348 100644
--- a/crypto/pem/pem_lib.cc
+++ b/crypto/pem/pem_lib.cc
@@ -391,14 +391,11 @@
     return 0;
   }
   header += 11;
-  if (*header != '4') {
+  if (header[0] != '4' || header[1] != ',') {
+    OPENSSL_PUT_ERROR(PEM, PEM_R_UNSUPPORTED_PROC_TYPE_VERSION);
     return 0;
   }
-  header++;
-  if (*header != ',') {
-    return 0;
-  }
-  header++;
+  header += 2;
   if (strncmp(header, "ENCRYPTED", 9) != 0) {
     OPENSSL_PUT_ERROR(PEM, PEM_R_NOT_ENCRYPTED);
     return 0;
diff --git a/crypto/pem/pem_test.cc b/crypto/pem/pem_test.cc
index 7b30954..30fe10a 100644
--- a/crypto/pem/pem_test.cc
+++ b/crypto/pem/pem_test.cc
@@ -316,4 +316,125 @@
   }
 }
 
+TEST(PEMTest, BadHeaders) {
+  const struct {
+    const char *pem;
+    int err_lib, err_reason;
+  } kTests[] = {
+      // Proc-Type must be the first header.
+      {
+          R"(
+-----BEGIN EC PRIVATE KEY-----
+DEK-Info: AES-128-CBC,B3B2988AECAE6EAB0D043105994C1123
+Proc-Type: 4,ENCRYPTED
+
+RK7DUIGDHWTFh2rpTX+dR88hUyC1PyDlIULiNCkuWFwHrJbc1gM6hMVOKmU196XC
+iITrIKmilFm9CPD6Tpfk/NhI/QPxyJlk1geIkxpvUZ2FCeMuYI1To14oYOUKv14q
+wr6JtaX2G+pOmwcSPymZC4u2TncAP7KHgS8UGcMw8CE=
+-----END EC PRIVATE KEY-----
+)",
+          ERR_LIB_PEM, PEM_R_NOT_PROC_TYPE},
+      // Unsupported Proc-Type version.
+      {
+          R"(
+-----BEGIN EC PRIVATE KEY-----
+Proc-Type: 5,ENCRYPTED
+DEK-Info: AES-128-CBC,B3B2988AECAE6EAB0D043105994C1123
+
+RK7DUIGDHWTFh2rpTX+dR88hUyC1PyDlIULiNCkuWFwHrJbc1gM6hMVOKmU196XC
+iITrIKmilFm9CPD6Tpfk/NhI/QPxyJlk1geIkxpvUZ2FCeMuYI1To14oYOUKv14q
+wr6JtaX2G+pOmwcSPymZC4u2TncAP7KHgS8UGcMw8CE=
+-----END EC PRIVATE KEY-----
+)",
+          ERR_LIB_PEM, PEM_R_UNSUPPORTED_PROC_TYPE_VERSION},
+      // Unsupported Proc-Type version.
+      {
+          R"(
+-----BEGIN EC PRIVATE KEY-----
+Proc-Type: 42,ENCRYPTED
+DEK-Info: AES-128-CBC,B3B2988AECAE6EAB0D043105994C1123
+
+RK7DUIGDHWTFh2rpTX+dR88hUyC1PyDlIULiNCkuWFwHrJbc1gM6hMVOKmU196XC
+iITrIKmilFm9CPD6Tpfk/NhI/QPxyJlk1geIkxpvUZ2FCeMuYI1To14oYOUKv14q
+wr6JtaX2G+pOmwcSPymZC4u2TncAP7KHgS8UGcMw8CE=
+-----END EC PRIVATE KEY-----
+)",
+          ERR_LIB_PEM, PEM_R_UNSUPPORTED_PROC_TYPE_VERSION},
+      // Unsupported Proc-Type.
+      {
+          R"(
+-----BEGIN EC PRIVATE KEY-----
+Proc-Type: 4,MIC-ONLY
+DEK-Info: AES-128-CBC,B3B2988AECAE6EAB0D043105994C1123
+
+RK7DUIGDHWTFh2rpTX+dR88hUyC1PyDlIULiNCkuWFwHrJbc1gM6hMVOKmU196XC
+iITrIKmilFm9CPD6Tpfk/NhI/QPxyJlk1geIkxpvUZ2FCeMuYI1To14oYOUKv14q
+wr6JtaX2G+pOmwcSPymZC4u2TncAP7KHgS8UGcMw8CE=
+-----END EC PRIVATE KEY-----
+)",
+          ERR_LIB_PEM, PEM_R_NOT_ENCRYPTED},
+      // Missing DEK-Info.
+      {
+          R"(
+-----BEGIN EC PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+
+RK7DUIGDHWTFh2rpTX+dR88hUyC1PyDlIULiNCkuWFwHrJbc1gM6hMVOKmU196XC
+iITrIKmilFm9CPD6Tpfk/NhI/QPxyJlk1geIkxpvUZ2FCeMuYI1To14oYOUKv14q
+wr6JtaX2G+pOmwcSPymZC4u2TncAP7KHgS8UGcMw8CE=
+-----END EC PRIVATE KEY-----
+)",
+          ERR_LIB_PEM, PEM_R_NOT_DEK_INFO},
+      // Unsupported cipher.
+      {
+          R"(
+-----BEGIN EC PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-127-CBC,B3B2988AECAE6EAB0D043105994C1123
+
+RK7DUIGDHWTFh2rpTX+dR88hUyC1PyDlIULiNCkuWFwHrJbc1gM6hMVOKmU196XC
+iITrIKmilFm9CPD6Tpfk/NhI/QPxyJlk1geIkxpvUZ2FCeMuYI1To14oYOUKv14q
+wr6JtaX2G+pOmwcSPymZC4u2TncAP7KHgS8UGcMw8CE=
+-----END EC PRIVATE KEY-----
+)",
+          ERR_LIB_PEM, PEM_R_UNSUPPORTED_ENCRYPTION},
+      // IV is not hex.
+      {
+          R"(
+-----BEGIN EC PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-128-CBC,B3B2988AECAE6EAB0D043105994C112Z
+
+RK7DUIGDHWTFh2rpTX+dR88hUyC1PyDlIULiNCkuWFwHrJbc1gM6hMVOKmU196XC
+iITrIKmilFm9CPD6Tpfk/NhI/QPxyJlk1geIkxpvUZ2FCeMuYI1To14oYOUKv14q
+wr6JtaX2G+pOmwcSPymZC4u2TncAP7KHgS8UGcMw8CE=
+-----END EC PRIVATE KEY-----
+)",
+          ERR_LIB_PEM, PEM_R_BAD_IV_CHARS},
+      // Truncated IV.
+      {
+          R"(
+-----BEGIN EC PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-128-CBC,B3B2988AECAE6EAB0D043105994C112
+
+RK7DUIGDHWTFh2rpTX+dR88hUyC1PyDlIULiNCkuWFwHrJbc1gM6hMVOKmU196XC
+iITrIKmilFm9CPD6Tpfk/NhI/QPxyJlk1geIkxpvUZ2FCeMuYI1To14oYOUKv14q
+wr6JtaX2G+pOmwcSPymZC4u2TncAP7KHgS8UGcMw8CE=
+-----END EC PRIVATE KEY-----
+)",
+          ERR_LIB_PEM, PEM_R_BAD_IV_CHARS},
+  };
+  for (const auto &t : kTests) {
+    SCOPED_TRACE(t.pem);
+    bssl::UniquePtr<BIO> bio(BIO_new_mem_buf(t.pem, -1));
+    ASSERT_TRUE(bio);
+    bssl::UniquePtr<EVP_PKEY> pkey(PEM_read_bio_PrivateKey(
+        bio.get(), nullptr, nullptr, const_cast<char *>("password")));
+    EXPECT_FALSE(pkey);
+    EXPECT_TRUE(ErrorEquals(ERR_get_error(), t.err_lib, t.err_reason));
+    ERR_clear_error();
+  }
+}
+
 }  // namespace
diff --git a/gen/crypto/err_data.cc b/gen/crypto/err_data.cc
index 48bce02..6657eb5 100644
--- a/gen/crypto/err_data.cc
+++ b/gen/crypto/err_data.cc
@@ -77,54 +77,54 @@
     0xc3b00f7,
     0xc3b8921,
     0x10320892,
-    0x10329654,
-    0x10331660,
-    0x10339679,
-    0x1034168c,
+    0x10329672,
+    0x1033167e,
+    0x10339697,
+    0x103416aa,
     0x10348f93,
     0x10350cdf,
-    0x1035969f,
-    0x103616c9,
-    0x103696dc,
-    0x103716fb,
-    0x10379714,
-    0x10381729,
-    0x10389747,
-    0x10391756,
-    0x10399772,
-    0x103a178d,
-    0x103a979c,
-    0x103b17b8,
-    0x103b97d3,
-    0x103c17f9,
+    0x103596bd,
+    0x103616e7,
+    0x103696fa,
+    0x10371719,
+    0x10379732,
+    0x10381747,
+    0x10389765,
+    0x10391774,
+    0x10399790,
+    0x103a17ab,
+    0x103a97ba,
+    0x103b17d6,
+    0x103b97f1,
+    0x103c1817,
     0x103c80f7,
-    0x103d180a,
-    0x103d981e,
-    0x103e183d,
-    0x103e984c,
-    0x103f1863,
-    0x103f9876,
+    0x103d1828,
+    0x103d983c,
+    0x103e185b,
+    0x103e986a,
+    0x103f1881,
+    0x103f9894,
     0x10400ca3,
-    0x10409889,
-    0x104118a7,
-    0x104198ba,
-    0x104218d4,
-    0x104298e4,
-    0x104318f8,
-    0x1043990e,
-    0x10441926,
-    0x1044993b,
-    0x1045194f,
-    0x10459961,
+    0x104098a7,
+    0x104118c5,
+    0x104198d8,
+    0x104218f2,
+    0x10429902,
+    0x10431916,
+    0x1043992c,
+    0x10441944,
+    0x10449959,
+    0x1045196d,
+    0x1045997f,
     0x10460635,
     0x1046899a,
-    0x10471976,
-    0x1047998d,
-    0x104819a2,
-    0x104899b0,
+    0x10471994,
+    0x104799ab,
+    0x104819c0,
+    0x104899ce,
     0x10490edf,
-    0x104997ea,
-    0x104a16b4,
+    0x10499808,
+    0x104a16d2,
     0x14320c73,
     0x14328c94,
     0x14330ca3,
@@ -188,6 +188,7 @@
     0x2438134e,
     0x2438935b,
     0x2439136e,
+    0x24399385,
     0x28320cd3,
     0x28328ceb,
     0x28330ca3,
@@ -197,51 +198,51 @@
     0x283500f7,
     0x28358c81,
     0x2836099a,
-    0x2c3232d4,
-    0x2c329385,
-    0x2c3332e2,
-    0x2c33b2f4,
-    0x2c343308,
-    0x2c34b31a,
-    0x2c353335,
-    0x2c35b347,
-    0x2c363377,
+    0x2c3232f2,
+    0x2c3293a3,
+    0x2c333300,
+    0x2c33b312,
+    0x2c343326,
+    0x2c34b338,
+    0x2c353353,
+    0x2c35b365,
+    0x2c363395,
     0x2c36833a,
-    0x2c373384,
-    0x2c37b3b0,
-    0x2c3833ee,
-    0x2c38b405,
-    0x2c393423,
-    0x2c39b433,
-    0x2c3a3445,
-    0x2c3ab459,
-    0x2c3b346a,
-    0x2c3bb489,
-    0x2c3c1397,
-    0x2c3c93ad,
-    0x2c3d34ce,
-    0x2c3d93c6,
-    0x2c3e34f8,
-    0x2c3eb506,
-    0x2c3f351e,
-    0x2c3fb536,
-    0x2c403560,
+    0x2c3733a2,
+    0x2c37b3ce,
+    0x2c38340c,
+    0x2c38b423,
+    0x2c393441,
+    0x2c39b451,
+    0x2c3a3463,
+    0x2c3ab477,
+    0x2c3b3488,
+    0x2c3bb4a7,
+    0x2c3c13b5,
+    0x2c3c93cb,
+    0x2c3d34ec,
+    0x2c3d93e4,
+    0x2c3e3516,
+    0x2c3eb524,
+    0x2c3f353c,
+    0x2c3fb554,
+    0x2c40357e,
     0x2c409298,
-    0x2c413571,
-    0x2c41b584,
+    0x2c41358f,
+    0x2c41b5a2,
     0x2c42125e,
-    0x2c42b595,
+    0x2c42b5b3,
     0x2c43076d,
-    0x2c43b47b,
-    0x2c4433c3,
-    0x2c44b543,
-    0x2c45335a,
-    0x2c45b396,
-    0x2c463413,
-    0x2c46b49d,
-    0x2c4734b2,
-    0x2c47b4eb,
-    0x2c4833d5,
+    0x2c43b499,
+    0x2c4433e1,
+    0x2c44b561,
+    0x2c453378,
+    0x2c45b3b4,
+    0x2c463431,
+    0x2c46b4bb,
+    0x2c4734d0,
+    0x2c47b509,
+    0x2c4833f3,
     0x30320000,
     0x30328015,
     0x3033001f,
@@ -381,260 +382,260 @@
     0x3c418dd3,
     0x3c420edf,
     0x3c428e69,
-    0x40321a1c,
-    0x40329a32,
-    0x40331a60,
-    0x40339a6a,
-    0x40341a81,
-    0x40349a9f,
-    0x40351aaf,
-    0x40359ac1,
-    0x40361ace,
-    0x40369ada,
-    0x40371aef,
-    0x40379b01,
-    0x40381b0c,
-    0x40389b1e,
+    0x40321a3a,
+    0x40329a50,
+    0x40331a7e,
+    0x40339a88,
+    0x40341a9f,
+    0x40349abd,
+    0x40351acd,
+    0x40359adf,
+    0x40361aec,
+    0x40369af8,
+    0x40371b0d,
+    0x40379b1f,
+    0x40381b2a,
+    0x40389b3c,
     0x40390f93,
-    0x40399b2e,
-    0x403a1b41,
-    0x403a9b62,
-    0x403b1b73,
-    0x403b9b83,
+    0x40399b4c,
+    0x403a1b5f,
+    0x403a9b80,
+    0x403b1b91,
+    0x403b9ba1,
     0x403c0071,
     0x403c8090,
-    0x403d1be4,
-    0x403d9bfa,
-    0x403e1c09,
-    0x403e9c41,
-    0x403f1c5b,
-    0x403f9c83,
-    0x40401c98,
-    0x40409cac,
-    0x40411ce7,
-    0x40419d02,
-    0x40421d1b,
-    0x40429d2e,
-    0x40431d42,
-    0x40439d70,
-    0x40441d87,
+    0x403d1c02,
+    0x403d9c18,
+    0x403e1c27,
+    0x403e9c5f,
+    0x403f1c79,
+    0x403f9ca1,
+    0x40401cb6,
+    0x40409cca,
+    0x40411d05,
+    0x40419d20,
+    0x40421d39,
+    0x40429d4c,
+    0x40431d60,
+    0x40439d8e,
+    0x40441da5,
     0x404480b9,
-    0x40451d9c,
-    0x40459dae,
-    0x40461dd2,
-    0x40469df2,
-    0x40471e00,
-    0x40479e27,
-    0x40481e98,
-    0x40489f52,
-    0x40491f69,
-    0x40499f83,
-    0x404a1f9a,
-    0x404a9fb8,
-    0x404b1fd0,
-    0x404b9ffd,
-    0x404c2013,
-    0x404ca025,
-    0x404d2046,
-    0x404da07f,
-    0x404e2093,
-    0x404ea0a0,
-    0x404f2151,
-    0x404fa1c7,
-    0x40502236,
-    0x4050a24a,
-    0x4051227d,
-    0x4052228d,
-    0x4052a2b1,
-    0x405322c9,
-    0x4053a2dc,
-    0x405422f1,
-    0x4054a314,
-    0x4055233f,
-    0x4055a37c,
-    0x405623a1,
-    0x4056a3ba,
-    0x405723d2,
-    0x4057a3e5,
-    0x405823fa,
-    0x4058a421,
-    0x40592450,
-    0x4059a47d,
-    0x405aa491,
-    0x405b24a9,
-    0x405ba4ba,
-    0x405c24cd,
-    0x405ca50c,
-    0x405d2519,
-    0x405da53e,
-    0x405e257c,
+    0x40451dba,
+    0x40459dcc,
+    0x40461df0,
+    0x40469e10,
+    0x40471e1e,
+    0x40479e45,
+    0x40481eb6,
+    0x40489f70,
+    0x40491f87,
+    0x40499fa1,
+    0x404a1fb8,
+    0x404a9fd6,
+    0x404b1fee,
+    0x404ba01b,
+    0x404c2031,
+    0x404ca043,
+    0x404d2064,
+    0x404da09d,
+    0x404e20b1,
+    0x404ea0be,
+    0x404f216f,
+    0x404fa1e5,
+    0x40502254,
+    0x4050a268,
+    0x4051229b,
+    0x405222ab,
+    0x4052a2cf,
+    0x405322e7,
+    0x4053a2fa,
+    0x4054230f,
+    0x4054a332,
+    0x4055235d,
+    0x4055a39a,
+    0x405623bf,
+    0x4056a3d8,
+    0x405723f0,
+    0x4057a403,
+    0x40582418,
+    0x4058a43f,
+    0x4059246e,
+    0x4059a49b,
+    0x405aa4af,
+    0x405b24c7,
+    0x405ba4d8,
+    0x405c24eb,
+    0x405ca52a,
+    0x405d2537,
+    0x405da55c,
+    0x405e259a,
     0x405e8afe,
-    0x405f259d,
-    0x405fa5aa,
-    0x406025b8,
-    0x4060a5da,
-    0x4061263b,
-    0x4061a673,
-    0x4062268a,
-    0x4062a69b,
-    0x406326e8,
-    0x4063a6fd,
-    0x40642714,
-    0x4064a740,
-    0x4065275b,
-    0x4065a772,
-    0x4066278a,
-    0x4066a7b4,
-    0x406727df,
-    0x4067a824,
-    0x4068286c,
-    0x4068a88d,
-    0x406928bf,
-    0x4069a8ed,
-    0x406a290e,
-    0x406aa92e,
-    0x406b2ab6,
-    0x406baad9,
-    0x406c2aef,
-    0x406cadf9,
-    0x406d2e28,
-    0x406dae50,
-    0x406e2e7e,
-    0x406eaecb,
-    0x406f2f24,
-    0x406faf5c,
-    0x40702f6f,
-    0x4070af8c,
+    0x405f25bb,
+    0x405fa5c8,
+    0x406025d6,
+    0x4060a5f8,
+    0x40612659,
+    0x4061a691,
+    0x406226a8,
+    0x4062a6b9,
+    0x40632706,
+    0x4063a71b,
+    0x40642732,
+    0x4064a75e,
+    0x40652779,
+    0x4065a790,
+    0x406627a8,
+    0x4066a7d2,
+    0x406727fd,
+    0x4067a842,
+    0x4068288a,
+    0x4068a8ab,
+    0x406928dd,
+    0x4069a90b,
+    0x406a292c,
+    0x406aa94c,
+    0x406b2ad4,
+    0x406baaf7,
+    0x406c2b0d,
+    0x406cae17,
+    0x406d2e46,
+    0x406dae6e,
+    0x406e2e9c,
+    0x406eaee9,
+    0x406f2f42,
+    0x406faf7a,
+    0x40702f8d,
+    0x4070afaa,
     0x4071084d,
-    0x4071af9e,
-    0x40722fb1,
-    0x4072afe7,
-    0x40732fff,
-    0x407395af,
-    0x40743013,
-    0x4074b02d,
-    0x4075303e,
-    0x4075b052,
-    0x40763060,
+    0x4071afbc,
+    0x40722fcf,
+    0x4072b005,
+    0x4073301d,
+    0x407395cd,
+    0x40743031,
+    0x4074b04b,
+    0x4075305c,
+    0x4075b070,
+    0x4076307e,
     0x4076935b,
-    0x40773085,
-    0x4077b0c5,
-    0x407830e0,
-    0x4078b119,
-    0x40793130,
-    0x4079b146,
-    0x407a3172,
-    0x407ab185,
-    0x407b319a,
-    0x407bb1ac,
-    0x407c31dd,
-    0x407cb1e6,
-    0x407d28a8,
-    0x407da1ef,
-    0x407e30f5,
-    0x407ea431,
-    0x407f1e14,
-    0x407f9fe7,
-    0x40802161,
-    0x40809e3c,
-    0x4081229f,
-    0x4081a0ee,
-    0x40822e69,
-    0x40829b8f,
-    0x4083240c,
-    0x4083a725,
-    0x40841e50,
-    0x4084a469,
-    0x408524de,
-    0x4085a602,
-    0x4086255e,
-    0x4086a209,
-    0x40872eaf,
-    0x4087a650,
-    0x40881bcd,
-    0x4088a837,
-    0x40891c1c,
-    0x40899ba9,
-    0x408a2b27,
-    0x408a99c7,
-    0x408b31c1,
-    0x408baf39,
-    0x408c24ee,
-    0x408d1f38,
-    0x408d9e82,
-    0x408e2068,
-    0x408ea35c,
-    0x408f284b,
-    0x408fa61e,
-    0x40902800,
-    0x4090a530,
-    0x40912b0f,
-    0x409199ff,
-    0x40921c69,
-    0x4092aeea,
-    0x40932fca,
-    0x4093a21a,
-    0x40941e64,
-    0x4094ab40,
-    0x409526ac,
-    0x4095b152,
-    0x40962e96,
-    0x4096a17a,
-    0x40972265,
-    0x4097a0b7,
-    0x40981cc9,
-    0x4098a6c0,
-    0x40992f06,
-    0x4099a389,
-    0x409a2322,
-    0x409a99e3,
-    0x409b1ebe,
-    0x409b9ee9,
-    0x409c30a7,
-    0x409c9f11,
-    0x409d2136,
-    0x409da104,
-    0x409e1d5a,
-    0x409ea1af,
-    0x409f2197,
-    0x409f9eb1,
-    0x40a021d7,
-    0x40a0a0d1,
-    0x40a1211f,
-    0x41f429e1,
-    0x41f92a73,
-    0x41fe2966,
-    0x41feac1c,
-    0x41ff2d4a,
-    0x420329fa,
-    0x42082a1c,
-    0x4208aa58,
-    0x4209294a,
-    0x4209aa92,
-    0x420a29a1,
-    0x420aa981,
-    0x420b29c1,
-    0x420baa3a,
-    0x420c2d66,
-    0x420cab50,
-    0x420d2c03,
-    0x420dac3a,
-    0x42122c6d,
-    0x42172d2d,
-    0x4217acaf,
-    0x421c2cd1,
-    0x421f2c8c,
-    0x42212dde,
-    0x42262d10,
-    0x422b2dbc,
-    0x422babde,
-    0x422c2d9e,
-    0x422cab91,
-    0x422d2b6a,
-    0x422dad7d,
-    0x422e2bbd,
-    0x42302cec,
-    0x4230ac54,
+    0x407730a3,
+    0x4077b0e3,
+    0x407830fe,
+    0x4078b137,
+    0x4079314e,
+    0x4079b164,
+    0x407a3190,
+    0x407ab1a3,
+    0x407b31b8,
+    0x407bb1ca,
+    0x407c31fb,
+    0x407cb204,
+    0x407d28c6,
+    0x407da20d,
+    0x407e3113,
+    0x407ea44f,
+    0x407f1e32,
+    0x407fa005,
+    0x4080217f,
+    0x40809e5a,
+    0x408122bd,
+    0x4081a10c,
+    0x40822e87,
+    0x40829bad,
+    0x4083242a,
+    0x4083a743,
+    0x40841e6e,
+    0x4084a487,
+    0x408524fc,
+    0x4085a620,
+    0x4086257c,
+    0x4086a227,
+    0x40872ecd,
+    0x4087a66e,
+    0x40881beb,
+    0x4088a855,
+    0x40891c3a,
+    0x40899bc7,
+    0x408a2b45,
+    0x408a99e5,
+    0x408b31df,
+    0x408baf57,
+    0x408c250c,
+    0x408d1f56,
+    0x408d9ea0,
+    0x408e2086,
+    0x408ea37a,
+    0x408f2869,
+    0x408fa63c,
+    0x4090281e,
+    0x4090a54e,
+    0x40912b2d,
+    0x40919a1d,
+    0x40921c87,
+    0x4092af08,
+    0x40932fe8,
+    0x4093a238,
+    0x40941e82,
+    0x4094ab5e,
+    0x409526ca,
+    0x4095b170,
+    0x40962eb4,
+    0x4096a198,
+    0x40972283,
+    0x4097a0d5,
+    0x40981ce7,
+    0x4098a6de,
+    0x40992f24,
+    0x4099a3a7,
+    0x409a2340,
+    0x409a9a01,
+    0x409b1edc,
+    0x409b9f07,
+    0x409c30c5,
+    0x409c9f2f,
+    0x409d2154,
+    0x409da122,
+    0x409e1d78,
+    0x409ea1cd,
+    0x409f21b5,
+    0x409f9ecf,
+    0x40a021f5,
+    0x40a0a0ef,
+    0x40a1213d,
+    0x41f429ff,
+    0x41f92a91,
+    0x41fe2984,
+    0x41feac3a,
+    0x41ff2d68,
+    0x42032a18,
+    0x42082a3a,
+    0x4208aa76,
+    0x42092968,
+    0x4209aab0,
+    0x420a29bf,
+    0x420aa99f,
+    0x420b29df,
+    0x420baa58,
+    0x420c2d84,
+    0x420cab6e,
+    0x420d2c21,
+    0x420dac58,
+    0x42122c8b,
+    0x42172d4b,
+    0x4217accd,
+    0x421c2cef,
+    0x421f2caa,
+    0x42212dfc,
+    0x42262d2e,
+    0x422b2dda,
+    0x422babfc,
+    0x422c2dbc,
+    0x422cabaf,
+    0x422d2b88,
+    0x422dad9b,
+    0x422e2bdb,
+    0x42302d0a,
+    0x4230ac72,
     0x44320778,
     0x44328787,
     0x44330793,
@@ -652,109 +653,109 @@
     0x4439084d,
     0x4439885b,
     0x443a086e,
-    0x48321385,
-    0x48329397,
-    0x483313ad,
-    0x483393c6,
-    0x4c321403,
-    0x4c329413,
-    0x4c331426,
-    0x4c339446,
+    0x483213a3,
+    0x483293b5,
+    0x483313cb,
+    0x483393e4,
+    0x4c321421,
+    0x4c329431,
+    0x4c331444,
+    0x4c339464,
     0x4c3400b9,
     0x4c3480f7,
-    0x4c351452,
-    0x4c359460,
-    0x4c36147c,
-    0x4c3694a2,
-    0x4c3714b1,
-    0x4c3794bf,
-    0x4c3814d4,
-    0x4c3894e0,
-    0x4c391500,
-    0x4c39952a,
-    0x4c3a1543,
-    0x4c3a955c,
+    0x4c351470,
+    0x4c35947e,
+    0x4c36149a,
+    0x4c3694c0,
+    0x4c3714cf,
+    0x4c3794dd,
+    0x4c3814f2,
+    0x4c3894fe,
+    0x4c39151e,
+    0x4c399548,
+    0x4c3a1561,
+    0x4c3a957a,
     0x4c3b0635,
-    0x4c3b9575,
-    0x4c3c1587,
-    0x4c3c9596,
-    0x4c3d15af,
+    0x4c3b9593,
+    0x4c3c15a5,
+    0x4c3c95b4,
+    0x4c3d15cd,
     0x4c3d8cc6,
-    0x4c3e161c,
-    0x4c3e95be,
-    0x4c3f163e,
+    0x4c3e163a,
+    0x4c3e95dc,
+    0x4c3f165c,
     0x4c3f935b,
-    0x4c4015d4,
-    0x4c4093ef,
-    0x4c41160c,
-    0x4c41948f,
-    0x4c4215f8,
-    0x4c4293d7,
-    0x503235a7,
-    0x5032b5b6,
-    0x503335c1,
-    0x5033b5d1,
-    0x503435ea,
-    0x5034b604,
-    0x50353612,
-    0x5035b628,
-    0x5036363a,
-    0x5036b650,
-    0x50373669,
-    0x5037b67c,
-    0x50383694,
-    0x5038b6a5,
-    0x503936ba,
-    0x5039b6ce,
-    0x503a36ee,
-    0x503ab704,
-    0x503b371c,
-    0x503bb72e,
-    0x503c374a,
-    0x503cb761,
-    0x503d377a,
-    0x503db790,
-    0x503e379d,
-    0x503eb7b3,
-    0x503f37c5,
+    0x4c4015f2,
+    0x4c40940d,
+    0x4c41162a,
+    0x4c4194ad,
+    0x4c421616,
+    0x4c4293f5,
+    0x503235c5,
+    0x5032b5d4,
+    0x503335df,
+    0x5033b5ef,
+    0x50343608,
+    0x5034b622,
+    0x50353630,
+    0x5035b646,
+    0x50363658,
+    0x5036b66e,
+    0x50373687,
+    0x5037b69a,
+    0x503836b2,
+    0x5038b6c3,
+    0x503936d8,
+    0x5039b6ec,
+    0x503a370c,
+    0x503ab722,
+    0x503b373a,
+    0x503bb74c,
+    0x503c3768,
+    0x503cb77f,
+    0x503d3798,
+    0x503db7ae,
+    0x503e37bb,
+    0x503eb7d1,
+    0x503f37e3,
     0x503f83b3,
-    0x504037d8,
-    0x5040b7e8,
-    0x50413802,
-    0x5041b811,
-    0x5042382b,
-    0x5042b848,
-    0x50433858,
-    0x5043b868,
-    0x50443885,
+    0x504037f6,
+    0x5040b806,
+    0x50413820,
+    0x5041b82f,
+    0x50423849,
+    0x5042b866,
+    0x50433876,
+    0x5043b886,
+    0x504438a3,
     0x50448469,
-    0x50453899,
-    0x5045b8b7,
-    0x504638ca,
-    0x5046b8e0,
-    0x504738f2,
-    0x5047b907,
-    0x5048392d,
-    0x5048b93b,
-    0x5049394e,
-    0x5049b963,
-    0x504a3979,
-    0x504ab989,
-    0x504b39a9,
-    0x504bb9bc,
-    0x504c39df,
-    0x504cba0d,
-    0x504d3a3a,
-    0x504dba57,
-    0x504e3a72,
-    0x504eba8e,
-    0x504f3aa0,
-    0x504fbab7,
-    0x50503ac6,
+    0x504538b7,
+    0x5045b8d5,
+    0x504638e8,
+    0x5046b8fe,
+    0x50473910,
+    0x5047b925,
+    0x5048394b,
+    0x5048b959,
+    0x5049396c,
+    0x5049b981,
+    0x504a3997,
+    0x504ab9a7,
+    0x504b39c7,
+    0x504bb9da,
+    0x504c39fd,
+    0x504cba2b,
+    0x504d3a58,
+    0x504dba75,
+    0x504e3a90,
+    0x504ebaac,
+    0x504f3abe,
+    0x504fbad5,
+    0x50503ae4,
     0x50508729,
-    0x50513ad9,
-    0x5051b877,
-    0x50523a1f,
+    0x50513af7,
+    0x5051b895,
+    0x50523a3d,
     0x58320fd1,
     0x68320f93,
     0x68328ceb,
@@ -797,21 +798,21 @@
     0x783e0aed,
     0x783e8a9f,
     0x7c321274,
-    0x803214a2,
+    0x803214c0,
     0x80328090,
-    0x803332a3,
+    0x803332c1,
     0x803380b9,
-    0x803432b2,
-    0x8034b21a,
-    0x80353238,
-    0x8035b2c6,
-    0x8036327a,
-    0x8036b229,
-    0x8037326c,
-    0x8037b207,
-    0x8038328d,
-    0x8038b249,
-    0x8039325e,
+    0x803432d0,
+    0x8034b238,
+    0x80353256,
+    0x8035b2e4,
+    0x80363298,
+    0x8036b247,
+    0x8037328a,
+    0x8037b225,
+    0x803832ab,
+    0x8038b267,
+    0x8039327c,
 };
 
 extern const size_t kOpenSSLReasonValuesLen;
@@ -1080,6 +1081,7 @@
     "SHORT_HEADER\0"
     "UNSUPPORTED_CIPHER\0"
     "UNSUPPORTED_ENCRYPTION\0"
+    "UNSUPPORTED_PROC_TYPE_VERSION\0"
     "BAD_PKCS7_VERSION\0"
     "NOT_PKCS7_SIGNED_DATA\0"
     "NO_CERTIFICATES_INCLUDED\0"
diff --git a/include/openssl/pem.h b/include/openssl/pem.h
index 797e7f0..28bf3f2 100644
--- a/include/openssl/pem.h
+++ b/include/openssl/pem.h
@@ -443,5 +443,6 @@
 #define PEM_R_SHORT_HEADER 112
 #define PEM_R_UNSUPPORTED_CIPHER 113
 #define PEM_R_UNSUPPORTED_ENCRYPTION 114
+#define PEM_R_UNSUPPORTED_PROC_TYPE_VERSION 115
 
 #endif  // OPENSSL_HEADER_PEM_H