Fix cross-module errors.

Some files in crypto/x509 were moved from crypto/asn1, so they emit errors from
another module. Fix make_errors.go to account for this: cross module errors
must use the foreign module as the first argument to OPENSSL_PUT_ERROR. Both
the function code and the error code should be declared in the foreign module.

Update make_errors.go to ignore cross-module error lines when deciding which
function tokens to emit.

Change-Id: Ic38377ddd56e22d033ef91318c30510762f6445d
Reviewed-on: https://boringssl-review.googlesource.com/3383
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/crypto/asn1/asn1_lib.c b/crypto/asn1/asn1_lib.c
index 1fc2c06..22b441c 100644
--- a/crypto/asn1/asn1_lib.c
+++ b/crypto/asn1/asn1_lib.c
@@ -63,8 +63,46 @@
 #include <openssl/err.h>
 #include <openssl/mem.h>
 
+
+/* Used in asn1_mac.h.
+ * TODO(davidben): Remove this once asn1_mac.h is gone or trimmed. */
 OPENSSL_DECLARE_ERROR_REASON(ASN1, MALLOC_FAILURE);
 
+/* Cross-module errors from crypto/x509/i2d_pr.c */
+OPENSSL_DECLARE_ERROR_FUNCTION(ASN1, i2d_PrivateKey);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, UNSUPPORTED_PUBLIC_KEY_TYPE);
+
+/* Cross-module errors from crypto/x509/asn1_gen.c.
+ * TODO(davidben): Remove these once asn1_gen.c is gone. */
+OPENSSL_DECLARE_ERROR_FUNCTION(ASN1, ASN1_generate_v3);
+OPENSSL_DECLARE_ERROR_FUNCTION(ASN1, asn1_cb);
+OPENSSL_DECLARE_ERROR_FUNCTION(ASN1, parse_tagging);
+OPENSSL_DECLARE_ERROR_FUNCTION(ASN1, append_exp);
+OPENSSL_DECLARE_ERROR_FUNCTION(ASN1, asn1_str2type);
+OPENSSL_DECLARE_ERROR_FUNCTION(ASN1, bitstr_cb);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, DEPTH_EXCEEDED);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_BITSTRING_FORMAT);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_BOOLEAN);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_FORMAT);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_HEX);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_IMPLICIT_TAG);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_INTEGER);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_NESTED_TAGGING);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_NULL_VALUE);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_OBJECT);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, ILLEGAL_TIME_VALUE);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, INTEGER_NOT_ASCII_FORMAT);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, INVALID_MODIFIER);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, INVALID_NUMBER);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, LIST_ERROR);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, MISSING_VALUE);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, NOT_ASCII_FORMAT);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, OBJECT_NOT_ASCII_FORMAT);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, SEQUENCE_OR_SET_NEEDS_CONFIG);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, TIME_NOT_ASCII_FORMAT);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, UNKNOWN_FORMAT);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, UNKNOWN_TAG);
+OPENSSL_DECLARE_ERROR_REASON(ASN1, UNSUPPORTED_TYPE);
 
 static int asn1_get_length(const unsigned char **pp,int *inf,long *rl,int max);
 static void asn1_put_length(unsigned char **pp, int length);
diff --git a/crypto/err/asn1.errordata b/crypto/err/asn1.errordata
index bbe0e24..ac0ab29 100644
--- a/crypto/err/asn1.errordata
+++ b/crypto/err/asn1.errordata
@@ -13,6 +13,7 @@
 ASN1,function,137,ASN1_UTCTIME_adj
 ASN1,function,103,ASN1_d2i_fp
 ASN1,function,101,ASN1_dup
+ASN1,function,161,ASN1_generate_v3
 ASN1,function,158,ASN1_get_object
 ASN1,function,145,ASN1_i2d_bio
 ASN1,function,153,ASN1_i2d_fp
@@ -36,6 +37,8 @@
 ASN1,function,160,a2i_ASN1_ENUMERATED
 ASN1,function,114,a2i_ASN1_INTEGER
 ASN1,function,102,a2i_ASN1_STRING
+ASN1,function,162,append_exp
+ASN1,function,163,asn1_cb
 ASN1,function,152,asn1_check_tlen
 ASN1,function,156,asn1_collate_primitive
 ASN1,function,115,asn1_collect
@@ -45,8 +48,10 @@
 ASN1,function,109,asn1_ex_c2i
 ASN1,function,149,asn1_find_end
 ASN1,function,105,asn1_item_ex_combine_new
+ASN1,function,164,asn1_str2type
 ASN1,function,100,asn1_template_ex_d2i
 ASN1,function,141,asn1_template_noexp_d2i
+ASN1,function,165,bitstr_cb
 ASN1,function,142,c2i_ASN1_BIT_STRING
 ASN1,function,110,c2i_ASN1_INTEGER
 ASN1,function,118,c2i_ASN1_OBJECT
@@ -58,7 +63,9 @@
 ASN1,function,159,d2i_ASN1_bytes
 ASN1,function,113,d2i_ASN1_type_bytes
 ASN1,function,131,i2d_ASN1_TIME
+ASN1,function,166,i2d_PrivateKey
 ASN1,function,121,long_c2i
+ASN1,function,167,parse_tagging
 ASN1,reason,101,ADDING_OBJECT
 ASN1,reason,158,ASN1_LENGTH_MISMATCH
 ASN1,reason,123,ASN1_PARSE_ERROR
diff --git a/crypto/err/err_data.h b/crypto/err/err_data.h
index 8961706..f5fa9dd 100644
--- a/crypto/err/err_data.h
+++ b/crypto/err/err_data.h
@@ -53,595 +53,602 @@
 OPENSSL_COMPILE_ASSERT(ERR_NUM_LIBS == 33, library_values_changed_num);
 
 static const uint32_t kFunctionValues[] = {
-    0xc320582,
-    0xc328669,
-    0xc33059f,
-    0xc3386a1,
-    0xc34065d,
-    0xc348670,
-    0xc350678,
-    0xc358696,
-    0xc3605e2,
-    0xc3685d1,
-    0xc370555,
-    0xc378621,
-    0xc380578,
-    0xc38858c,
-    0xc390593,
-    0xc3985f2,
-    0xc3a060c,
-    0xc3a856b,
-    0xc3b068e,
-    0xc3b8649,
-    0xc3c0560,
-    0xc3c8630,
-    0xc3d05a6,
-    0xc3d85bc,
-    0xc3e0686,
-    0x10321930,
-    0x103298a2,
-    0x103318b7,
-    0x10339972,
-    0x10341832,
-    0x10349967,
-    0x103519c8,
-    0x103599e4,
-    0x10361851,
-    0x1036999c,
-    0x10371812,
-    0x103799a3,
-    0x103817e2,
-    0x10389917,
-    0x1039188b,
-    0x103997d2,
-    0x103a186e,
-    0x103a978c,
-    0x103b17bc,
-    0x103b9994,
-    0x103c19db,
-    0x103c9803,
-    0x103d18d9,
-    0x103d995e,
-    0x103e17a3,
-    0x103e998c,
-    0x103f18f8,
-    0x103f9947,
-    0x104017f5,
-    0x104099b6,
-    0x143209e6,
-    0x143289d9,
-    0x143309cd,
-    0x143389bf,
-    0x183213d0,
-    0x18329236,
-    0x18331269,
-    0x1833934f,
-    0x183411ae,
-    0x1834920a,
-    0x183513ff,
-    0x183593e0,
-    0x18361112,
-    0x183691a0,
-    0x183712ec,
-    0x1837914a,
-    0x18381313,
-    0x183892c0,
-    0x183911c1,
-    0x183990eb,
-    0x183a115c,
-    0x183a92af,
-    0x183b127b,
-    0x183b9219,
-    0x183c132f,
-    0x183c90fc,
-    0x183d135c,
-    0x183d93ef,
-    0x183e140f,
-    0x183e9135,
-    0x183f11d1,
-    0x183f90bd,
-    0x18401245,
-    0x1840928d,
-    0x184111f7,
-    0x18419256,
-    0x18421181,
-    0x18429320,
-    0x1843133e,
-    0x1843904a,
-    0x18441097,
-    0x18449086,
-    0x1845106d,
-    0x1845918e,
-    0x184610ad,
-    0x1846916c,
-    0x18471229,
-    0x184792ff,
-    0x1848139a,
-    0x1848929e,
-    0x184910d2,
-    0x1849938c,
-    0x184a11e6,
-    0x184a92de,
-    0x184b141e,
-    0x184b9123,
-    0x184c137b,
-    0x184c936a,
-    0x184d12d1,
-    0x184d9028,
-    0x184e1010,
-    0x184e93aa,
-    0x184f105c,
-    0x1c3206ae,
-    0x1c3286d1,
-    0x1c3306c5,
-    0x1c3386ba,
-    0x20321451,
-    0x20329432,
-    0x2033143d,
-    0x20339445,
-    0x24321543,
-    0x243295fe,
-    0x24331589,
-    0x243395f0,
-    0x24341522,
-    0x24349510,
-    0x2435146b,
-    0x2435945d,
-    0x243614ef,
-    0x2436949f,
-    0x24371559,
-    0x24379507,
-    0x243814b2,
-    0x243894c9,
-    0x2439147d,
-    0x243995b6,
-    0x243a15ce,
-    0x243a9571,
-    0x243b1593,
-    0x243b948c,
-    0x243c14e1,
-    0x243c95a8,
-    0x243d15e5,
-    0x243d9536,
-    0x28320a39,
-    0x28328a49,
-    0x28330a2e,
-    0x28338a1f,
-    0x28340a3e,
+    0xc3205db,
+    0xc3286c2,
+    0xc3305f8,
+    0xc3386fa,
+    0xc3406b6,
+    0xc3486c9,
+    0xc3506d1,
+    0xc3586ef,
+    0xc36063b,
+    0xc36862a,
+    0xc3705ae,
+    0xc37867a,
+    0xc3805d1,
+    0xc3885e5,
+    0xc3905ec,
+    0xc39864b,
+    0xc3a0665,
+    0xc3a85c4,
+    0xc3b06e7,
+    0xc3b86a2,
+    0xc3c05b9,
+    0xc3c8689,
+    0xc3d05ff,
+    0xc3d8615,
+    0xc3e06df,
+    0x10321989,
+    0x103298fb,
+    0x10331910,
+    0x103399cb,
+    0x1034188b,
+    0x103499c0,
+    0x10351a21,
+    0x10359a3d,
+    0x103618aa,
+    0x103699f5,
+    0x1037186b,
+    0x103799fc,
+    0x1038183b,
+    0x10389970,
+    0x103918e4,
+    0x1039982b,
+    0x103a18c7,
+    0x103a97e5,
+    0x103b1815,
+    0x103b99ed,
+    0x103c1a34,
+    0x103c985c,
+    0x103d1932,
+    0x103d99b7,
+    0x103e17fc,
+    0x103e99e5,
+    0x103f1951,
+    0x103f99a0,
+    0x1040184e,
+    0x10409a0f,
+    0x14320a3f,
+    0x14328a32,
+    0x14330a26,
+    0x14338a18,
+    0x18321429,
+    0x1832928f,
+    0x183312c2,
+    0x183393a8,
+    0x18341207,
+    0x18349263,
+    0x18351458,
+    0x18359439,
+    0x1836116b,
+    0x183691f9,
+    0x18371345,
+    0x183791a3,
+    0x1838136c,
+    0x18389319,
+    0x1839121a,
+    0x18399144,
+    0x183a11b5,
+    0x183a9308,
+    0x183b12d4,
+    0x183b9272,
+    0x183c1388,
+    0x183c9155,
+    0x183d13b5,
+    0x183d9448,
+    0x183e1468,
+    0x183e918e,
+    0x183f122a,
+    0x183f9116,
+    0x1840129e,
+    0x184092e6,
+    0x18411250,
+    0x184192af,
+    0x184211da,
+    0x18429379,
+    0x18431397,
+    0x184390a3,
+    0x184410f0,
+    0x184490df,
+    0x184510c6,
+    0x184591e7,
+    0x18461106,
+    0x184691c5,
+    0x18471282,
+    0x18479358,
+    0x184813f3,
+    0x184892f7,
+    0x1849112b,
+    0x184993e5,
+    0x184a123f,
+    0x184a9337,
+    0x184b1477,
+    0x184b917c,
+    0x184c13d4,
+    0x184c93c3,
+    0x184d132a,
+    0x184d9081,
+    0x184e1069,
+    0x184e9403,
+    0x184f10b5,
+    0x1c320707,
+    0x1c32872a,
+    0x1c33071e,
+    0x1c338713,
+    0x203214aa,
+    0x2032948b,
+    0x20331496,
+    0x2033949e,
+    0x2432159c,
+    0x24329657,
+    0x243315e2,
+    0x24339649,
+    0x2434157b,
+    0x24349569,
+    0x243514c4,
+    0x243594b6,
+    0x24361548,
+    0x243694f8,
+    0x243715b2,
+    0x24379560,
+    0x2438150b,
+    0x24389522,
+    0x243914d6,
+    0x2439960f,
+    0x243a1627,
+    0x243a95ca,
+    0x243b15ec,
+    0x243b94e5,
+    0x243c153a,
+    0x243c9601,
+    0x243d163e,
+    0x243d958f,
+    0x28320a92,
+    0x28328aa2,
+    0x28330a87,
+    0x28338a78,
+    0x28340a97,
     0x2c322ffb,
-    0x2c32ac7a,
-    0x2c332ead,
-    0x2c33ae40,
-    0x2c342c97,
-    0x2c34af4b,
-    0x2c352e81,
-    0x2c35ac44,
-    0x2c362f41,
-    0x2c36add8,
-    0x2c372d98,
-    0x2c37af04,
-    0x2c382b68,
-    0x2c38af33,
-    0x2c392fbc,
-    0x2c39ab44,
+    0x2c32acc2,
+    0x2c332ef5,
+    0x2c33ae88,
+    0x2c342cdf,
+    0x2c34af68,
+    0x2c352ec9,
+    0x2c35ac8c,
+    0x2c360385,
+    0x2c36ae20,
+    0x2c372de0,
+    0x2c37af4c,
+    0x2c382bb0,
+    0x2c38834a,
+    0x2c392fca,
+    0x2c39ab8c,
     0x2c3a2fd9,
-    0x2c3aaf65,
-    0x2c3b2b33,
-    0x2c3baf73,
-    0x2c3c2ec0,
-    0x2c3cac12,
-    0x2c3d2d2d,
-    0x2c3dac68,
-    0x2c3e2da9,
-    0x2c3eaf13,
-    0x2c3f2ba4,
-    0x2c3fabbb,
-    0x2c402c2b,
-    0x2c40adc4,
-    0x2c412b72,
-    0x2c41ad3f,
+    0x2c3aaf82,
+    0x2c3b010c,
+    0x2c3baf90,
+    0x2c3c2f08,
+    0x2c3cac5a,
+    0x2c3d2d75,
+    0x2c3dacb0,
+    0x2c3e2df1,
+    0x2c3eaf5b,
+    0x2c3f2bec,
+    0x2c3fac03,
+    0x2c402c73,
+    0x2c40ae0c,
+    0x2c412bba,
+    0x2c41ad87,
     0x2c422fea,
-    0x2c42ad4f,
-    0x2c432e0a,
-    0x2c43afcb,
-    0x2c442f58,
-    0x2c44ab27,
-    0x2c452e99,
-    0x2c45abf5,
-    0x2c462d6d,
-    0x2c46ad5d,
-    0x2c472f7c,
-    0x2c47ad19,
-    0x2c482ef3,
-    0x2c48ae4f,
-    0x2c492f20,
-    0x2c49af9f,
-    0x2c4a2cb4,
-    0x2c4aadeb,
-    0x2c4b2b8b,
-    0x2c4baed1,
-    0x2c4c2ce0,
-    0x2c4cacfe,
-    0x2c4d2f2b,
-    0x2c4daee2,
-    0x2c4e2c5a,
-    0x2c4eafad,
-    0x2c4f2d7d,
-    0x2c4fae1e,
-    0x2c502e66,
-    0x2c50ab57,
-    0x2c512bd8,
-    0x2c51af90,
-    0x2c522e31,
-    0x2c52acc2,
-    0x30320326,
+    0x2c42ad97,
+    0x2c432e52,
+    0x2c43845e,
+    0x2c442f75,
+    0x2c44ab80,
+    0x2c452ee1,
+    0x2c45ac3d,
+    0x2c462db5,
+    0x2c46ada5,
+    0x2c472f99,
+    0x2c47ad61,
+    0x2c482f3b,
+    0x2c48ae97,
+    0x2c49029c,
+    0x2c49afbc,
+    0x2c4a2cfc,
+    0x2c4aae33,
+    0x2c4b2bd3,
+    0x2c4baf19,
+    0x2c4c2d28,
+    0x2c4cad46,
+    0x2c4d02a7,
+    0x2c4daf2a,
+    0x2c4e2ca2,
+    0x2c4e8446,
+    0x2c4f2dc5,
+    0x2c4fae66,
+    0x2c502eae,
+    0x2c50ab9f,
+    0x2c512c20,
+    0x2c51afad,
+    0x2c522e79,
+    0x2c52ad0a,
+    0x30320358,
     0x30328103,
-    0x3033027b,
+    0x3033028c,
     0x303380f7,
-    0x303403a6,
-    0x3034830d,
-    0x303501eb,
-    0x303582e7,
-    0x303602d5,
-    0x303682f3,
-    0x30370367,
+    0x303403e2,
+    0x30348331,
+    0x303501fc,
+    0x3035830b,
+    0x303602f9,
+    0x30368317,
+    0x303703a3,
     0x3037808f,
-    0x30380197,
-    0x303883e8,
-    0x3039026a,
-    0x303982b2,
-    0x303a0146,
+    0x303801a8,
+    0x30388424,
+    0x3039027b,
+    0x303982d6,
+    0x303a0157,
     0x303a8018,
-    0x303b0378,
-    0x303b81fd,
-    0x303c03b6,
-    0x303c840a,
-    0x303d01cd,
-    0x303d8246,
+    0x303b03b4,
+    0x303b820e,
+    0x303c03f2,
+    0x303c8455,
+    0x303d01de,
+    0x303d8257,
     0x303e00c3,
     0x303e805b,
-    0x303f0233,
-    0x303f8210,
+    0x303f0244,
+    0x303f8221,
     0x3040002c,
-    0x30408154,
+    0x30408165,
     0x3041006c,
-    0x304183fc,
+    0x30418438,
     0x304200d8,
     0x30428000,
-    0x304301db,
-    0x30438188,
+    0x304301ec,
+    0x30438199,
     0x304400b3,
     0x304480e6,
-    0x304501a8,
-    0x30458395,
+    0x304501b9,
+    0x304583d1,
     0x3046007f,
-    0x3046833b,
-    0x30470353,
-    0x3047821d,
-    0x304802bf,
-    0x3048811c,
-    0x30490165,
-    0x304983c8,
+    0x3046836d,
+    0x3047038f,
+    0x3047822e,
+    0x304802e3,
+    0x3048812d,
+    0x30490176,
+    0x30498404,
     0x304a009d,
-    0x304a82ff,
-    0x304b0135,
-    0x304b8388,
-    0x304c028b,
-    0x304c8129,
-    0x304d0177,
+    0x304a8323,
+    0x304b0146,
+    0x304b83c4,
+    0x304c02af,
+    0x304c813a,
+    0x304d0188,
     0x304d8042,
-    0x304e029b,
-    0x304e81bc,
-    0x304f010c,
-    0x304f83d9,
-    0x30500256,
-    0x34320951,
-    0x34328979,
-    0x3433096c,
-    0x34338961,
-    0x38320982,
-    0x38328995,
-    0x383309b1,
-    0x3833899f,
-    0x3c320f18,
-    0x3c328cb8,
-    0x3c330ed8,
-    0x3c338dde,
-    0x3c340d94,
-    0x3c348ad5,
-    0x3c350cd1,
-    0x3c358a89,
-    0x3c360eb4,
-    0x3c368e7e,
-    0x3c370c1f,
-    0x3c378d1d,
-    0x3c380bb3,
-    0x3c388f5f,
-    0x3c390f28,
-    0x3c398a50,
-    0x3c3a0b1d,
-    0x3c3a8cea,
-    0x3c3b0b45,
-    0x3c3b8b76,
-    0x3c3c0e09,
-    0x3c3c8e34,
-    0x3c3d0f81,
-    0x3c3d8aa4,
-    0x3c3e0f34,
-    0x3c3e8bd5,
-    0x3c3f0b86,
-    0x3c3f8b52,
-    0x3c400eef,
-    0x3c408f91,
-    0x3c410d00,
-    0x3c418ec1,
-    0x3c420b38,
-    0x3c428e99,
-    0x3c430f4c,
-    0x3c438ab5,
-    0x3c440bc8,
-    0x3c448be8,
-    0x3c450b2a,
-    0x3c458b9e,
-    0x3c460d76,
-    0x3c468f70,
-    0x3c470c96,
-    0x3c478d33,
-    0x3c480c47,
-    0x3c488c60,
-    0x3c490c76,
-    0x3c498dc6,
-    0x3c4a0a75,
-    0x3c4a8d4f,
-    0x3c4b0c83,
-    0x3c4b8ca7,
-    0x3c4c0dae,
-    0x3c4c8bfb,
-    0x3c4d0ae7,
-    0x3c4d8ac1,
-    0x3c4e0e55,
-    0x3c4e8b10,
-    0x3c4f0a5e,
-    0x40321dbf,
-    0x4032a037,
-    0x40332705,
-    0x40339d45,
-    0x40341cf1,
-    0x4034a6bb,
-    0x40351fc7,
-    0x4035a1c4,
-    0x40361d7b,
-    0x40372966,
-    0x40379b4b,
-    0x40382006,
-    0x4038a10f,
-    0x40392187,
-    0x40399e45,
-    0x403a29c3,
-    0x403aa87c,
-    0x403b2973,
-    0x403ba355,
-    0x403c2ab5,
-    0x403c9f3a,
-    0x403d28e2,
-    0x403da386,
-    0x403e2487,
-    0x403ea558,
-    0x403f1e08,
-    0x403fa663,
-    0x4040219f,
-    0x40409f66,
-    0x40411dd7,
-    0x4041aae6,
-    0x40422687,
-    0x4042a1df,
-    0x40431c03,
-    0x4043a627,
-    0x40442078,
-    0x4044a2a8,
-    0x4045225b,
-    0x40459e9b,
-    0x4046258f,
-    0x4046a603,
-    0x40472304,
-    0x4047a6e5,
-    0x4048283c,
-    0x40489c67,
-    0x404921b6,
-    0x4049a345,
-    0x404a1ae1,
-    0x404a9e5e,
-    0x404b9cc8,
-    0x404c1fd7,
-    0x404c99ff,
-    0x404d2231,
-    0x404da071,
-    0x404e1a19,
-    0x404ea083,
-    0x404f1e23,
-    0x404fa990,
-    0x40502017,
-    0x4050a672,
-    0x40511bee,
-    0x4051aa19,
-    0x405229d9,
-    0x4052a939,
-    0x405323ee,
-    0x40539f83,
-    0x40542a04,
-    0x4054a090,
-    0x40551d87,
-    0x4055a7f9,
-    0x40561e31,
-    0x40569afb,
-    0x4057294b,
-    0x4057a0f9,
-    0x40581e77,
-    0x4058a246,
-    0x4059278e,
-    0x4059a5e2,
-    0x405a22be,
-    0x405a9f1f,
-    0x405b23d2,
-    0x405bab12,
-    0x405c1d1e,
-    0x405c9c8b,
-    0x405d240a,
-    0x405da569,
-    0x405e26ad,
-    0x405ea150,
-    0x405f20c8,
-    0x405f9e91,
-    0x406027e7,
-    0x4060a959,
-    0x40611b1a,
-    0x40619b39,
-    0x406227a4,
-    0x40629d60,
-    0x406325a3,
-    0x4063a4f6,
-    0x40642059,
-    0x4064a315,
-    0x40651b63,
-    0x4065a57c,
-    0x40662739,
-    0x4066a127,
-    0x40671a25,
-    0x4067a420,
-    0x40681da7,
-    0x40689b80,
-    0x40691bde,
-    0x40699eab,
-    0x406a2901,
-    0x406aa470,
-    0x406b1ded,
-    0x406ba1ac,
-    0x406c2540,
-    0x406ca8bf,
-    0x406d239c,
-    0x406da4df,
-    0x406e1c44,
-    0x406ea6c8,
-    0x406f2371,
-    0x406fa169,
-    0x40701f10,
-    0x40709f4e,
-    0x40712a99,
-    0x40719a5b,
-    0x40721d29,
-    0x4072a453,
-    0x407326a0,
-    0x40739ff1,
-    0x4074280e,
-    0x4074a7cd,
-    0x40752aef,
-    0x407599ef,
-    0x40762720,
-    0x40769f9a,
-    0x407720a3,
-    0x4077aad7,
-    0x407823fe,
-    0x4078a7b8,
-    0x40792816,
-    0x4079a529,
-    0x407a1a7a,
-    0x407a9ce8,
-    0x407b24c2,
-    0x407b9cb7,
-    0x407c29a7,
-    0x407ca642,
-    0x407d2052,
-    0x407d9d94,
-    0x407e1ba3,
-    0x407e9a92,
-    0x407f1d35,
-    0x407f9bc0,
-    0x4080291d,
-    0x4080a104,
-    0x40812859,
-    0x4081a11b,
-    0x4082228c,
-    0x40829aa9,
-    0x40831fac,
-    0x40839ca1,
-    0x40841f2d,
-    0x4084a331,
-    0x40851d0a,
-    0x4085a5c7,
-    0x408620b1,
-    0x40869ac5,
-    0x408722db,
-    0x4087a219,
-    0x40882514,
-    0x40889ce0,
-    0x408928a2,
-    0x4089a278,
-    0x408a243e,
-    0x408a9a3d,
-    0x408b2a50,
-    0x408baa32,
-    0x408c29f1,
-    0x408caa70,
-    0x408d21fa,
-    0x408da0df,
-    0x408e213a,
-    0x408ea76a,
-    0x408f2750,
-    0x408f9ec4,
-    0x40902061,
-    0x40909ed4,
-    0x40911ef5,
-    0x4091a4a5,
-    0x40921c1f,
-    0x40929c39,
-    0x40931cab,
-    0x4093a3b9,
-    0x409422ed,
-    0x4094aa90,
-    0x409523e5,
-    0x40959f74,
-    0x40961cfa,
-    0x443204fe,
-    0x443284cb,
-    0x44330516,
-    0x44338436,
-    0x44340541,
-    0x4434842e,
-    0x443504d4,
-    0x44358443,
-    0x4436054b,
-    0x4436852c,
-    0x44370522,
-    0x44378537,
-    0x44380413,
-    0x443884db,
-    0x4439050c,
-    0x44398425,
-    0x443a048e,
-    0x443a84aa,
-    0x443b0453,
-    0x443b846e,
-    0x4c3216d5,
-    0x4c329615,
-    0x4c331606,
-    0x4c3396a1,
-    0x4c341705,
-    0x4c34970f,
-    0x4c351693,
-    0x4c359765,
-    0x4c36173f,
-    0x4c369778,
-    0x4c3716f5,
-    0x4c379727,
-    0x4c381681,
-    0x4c3896b6,
-    0x4c391752,
-    0x4c3996c7,
-    0x4c3a16e3,
-    0x4c3a9674,
-    0x4c3b163d,
-    0x4c3b9658,
-    0x4c3c1624,
+    0x304e02bf,
+    0x304e81cd,
+    0x304f011d,
+    0x304f8415,
+    0x30500267,
+    0x3050810c,
+    0x3051029c,
+    0x305182a7,
+    0x3052034a,
+    0x30528385,
+    0x30530446,
+    0x3053845e,
+    0x343209aa,
+    0x343289d2,
+    0x343309c5,
+    0x343389ba,
+    0x383209db,
+    0x383289ee,
+    0x38330a0a,
+    0x383389f8,
+    0x3c320f71,
+    0x3c328d11,
+    0x3c330f31,
+    0x3c338e37,
+    0x3c340ded,
+    0x3c348b2e,
+    0x3c350d2a,
+    0x3c358ae2,
+    0x3c360f0d,
+    0x3c368ed7,
+    0x3c370c78,
+    0x3c378d76,
+    0x3c380c0c,
+    0x3c388fb8,
+    0x3c390f81,
+    0x3c398aa9,
+    0x3c3a0b76,
+    0x3c3a8d43,
+    0x3c3b0b9e,
+    0x3c3b8bcf,
+    0x3c3c0e62,
+    0x3c3c8e8d,
+    0x3c3d0fda,
+    0x3c3d8afd,
+    0x3c3e0f8d,
+    0x3c3e8c2e,
+    0x3c3f0bdf,
+    0x3c3f8bab,
+    0x3c400f48,
+    0x3c408fea,
+    0x3c410d59,
+    0x3c418f1a,
+    0x3c420b91,
+    0x3c428ef2,
+    0x3c430fa5,
+    0x3c438b0e,
+    0x3c440c21,
+    0x3c448c41,
+    0x3c450b83,
+    0x3c458bf7,
+    0x3c460dcf,
+    0x3c468fc9,
+    0x3c470cef,
+    0x3c478d8c,
+    0x3c480ca0,
+    0x3c488cb9,
+    0x3c490ccf,
+    0x3c498e1f,
+    0x3c4a0ace,
+    0x3c4a8da8,
+    0x3c4b0cdc,
+    0x3c4b8d00,
+    0x3c4c0e07,
+    0x3c4c8c54,
+    0x3c4d0b40,
+    0x3c4d8b1a,
+    0x3c4e0eae,
+    0x3c4e8b69,
+    0x3c4f0ab7,
+    0x40321e18,
+    0x4032a090,
+    0x4033275e,
+    0x40339d9e,
+    0x40341d4a,
+    0x4034a714,
+    0x40352020,
+    0x4035a21d,
+    0x40361dd4,
+    0x403729bf,
+    0x40379ba4,
+    0x4038205f,
+    0x4038a168,
+    0x403921e0,
+    0x40399e9e,
+    0x403a2a1c,
+    0x403aa8d5,
+    0x403b29cc,
+    0x403ba3ae,
+    0x403c2b0e,
+    0x403c9f93,
+    0x403d293b,
+    0x403da3df,
+    0x403e24e0,
+    0x403ea5b1,
+    0x403f1e61,
+    0x403fa6bc,
+    0x404021f8,
+    0x40409fbf,
+    0x40411e30,
+    0x4041ab3f,
+    0x404226e0,
+    0x4042a238,
+    0x40431c5c,
+    0x4043a680,
+    0x404420d1,
+    0x4044a301,
+    0x404522b4,
+    0x40459ef4,
+    0x404625e8,
+    0x4046a65c,
+    0x4047235d,
+    0x4047a73e,
+    0x40482895,
+    0x40489cc0,
+    0x4049220f,
+    0x4049a39e,
+    0x404a1b3a,
+    0x404a9eb7,
+    0x404b9d21,
+    0x404c2030,
+    0x404c9a58,
+    0x404d228a,
+    0x404da0ca,
+    0x404e1a72,
+    0x404ea0dc,
+    0x404f1e7c,
+    0x404fa9e9,
+    0x40502070,
+    0x4050a6cb,
+    0x40511c47,
+    0x4051aa72,
+    0x40522a32,
+    0x4052a992,
+    0x40532447,
+    0x40539fdc,
+    0x40542a5d,
+    0x4054a0e9,
+    0x40551de0,
+    0x4055a852,
+    0x40561e8a,
+    0x40569b54,
+    0x405729a4,
+    0x4057a152,
+    0x40581ed0,
+    0x4058a29f,
+    0x405927e7,
+    0x4059a63b,
+    0x405a2317,
+    0x405a9f78,
+    0x405b242b,
+    0x405bab6b,
+    0x405c1d77,
+    0x405c9ce4,
+    0x405d2463,
+    0x405da5c2,
+    0x405e2706,
+    0x405ea1a9,
+    0x405f2121,
+    0x405f9eea,
+    0x40602840,
+    0x4060a9b2,
+    0x40611b73,
+    0x40619b92,
+    0x406227fd,
+    0x40629db9,
+    0x406325fc,
+    0x4063a54f,
+    0x406420b2,
+    0x4064a36e,
+    0x40651bbc,
+    0x4065a5d5,
+    0x40662792,
+    0x4066a180,
+    0x40671a7e,
+    0x4067a479,
+    0x40681e00,
+    0x40689bd9,
+    0x40691c37,
+    0x40699f04,
+    0x406a295a,
+    0x406aa4c9,
+    0x406b1e46,
+    0x406ba205,
+    0x406c2599,
+    0x406ca918,
+    0x406d23f5,
+    0x406da538,
+    0x406e1c9d,
+    0x406ea721,
+    0x406f23ca,
+    0x406fa1c2,
+    0x40701f69,
+    0x40709fa7,
+    0x40712af2,
+    0x40719ab4,
+    0x40721d82,
+    0x4072a4ac,
+    0x407326f9,
+    0x4073a04a,
+    0x40742867,
+    0x4074a826,
+    0x40752b48,
+    0x40759a48,
+    0x40762779,
+    0x40769ff3,
+    0x407720fc,
+    0x4077ab30,
+    0x40782457,
+    0x4078a811,
+    0x4079286f,
+    0x4079a582,
+    0x407a1ad3,
+    0x407a9d41,
+    0x407b251b,
+    0x407b9d10,
+    0x407c2a00,
+    0x407ca69b,
+    0x407d20ab,
+    0x407d9ded,
+    0x407e1bfc,
+    0x407e9aeb,
+    0x407f1d8e,
+    0x407f9c19,
+    0x40802976,
+    0x4080a15d,
+    0x408128b2,
+    0x4081a174,
+    0x408222e5,
+    0x40829b02,
+    0x40832005,
+    0x40839cfa,
+    0x40841f86,
+    0x4084a38a,
+    0x40851d63,
+    0x4085a620,
+    0x4086210a,
+    0x40869b1e,
+    0x40872334,
+    0x4087a272,
+    0x4088256d,
+    0x40889d39,
+    0x408928fb,
+    0x4089a2d1,
+    0x408a2497,
+    0x408a9a96,
+    0x408b2aa9,
+    0x408baa8b,
+    0x408c2a4a,
+    0x408caac9,
+    0x408d2253,
+    0x408da138,
+    0x408e2193,
+    0x408ea7c3,
+    0x408f27a9,
+    0x408f9f1d,
+    0x409020ba,
+    0x40909f2d,
+    0x40911f4e,
+    0x4091a4fe,
+    0x40921c78,
+    0x40929c92,
+    0x40931d04,
+    0x4093a412,
+    0x40942346,
+    0x4094aae9,
+    0x4095243e,
+    0x40959fcd,
+    0x40961d53,
+    0x44320557,
+    0x44328524,
+    0x4433056f,
+    0x4433848f,
+    0x4434059a,
+    0x44348487,
+    0x4435052d,
+    0x4435849c,
+    0x443605a4,
+    0x44368585,
+    0x4437057b,
+    0x44378590,
+    0x4438046c,
+    0x44388534,
+    0x44390565,
+    0x4439847e,
+    0x443a04e7,
+    0x443a8503,
+    0x443b04ac,
+    0x443b84c7,
+    0x4c32172e,
+    0x4c32966e,
+    0x4c33165f,
+    0x4c3396fa,
+    0x4c34175e,
+    0x4c349768,
+    0x4c3516ec,
+    0x4c3597be,
+    0x4c361798,
+    0x4c3697d1,
+    0x4c37174e,
+    0x4c379780,
+    0x4c3816da,
+    0x4c38970f,
+    0x4c3917ab,
+    0x4c399720,
+    0x4c3a173c,
+    0x4c3a96cd,
+    0x4c3b1696,
+    0x4c3b96b1,
+    0x4c3c167d,
     0x50323180,
     0x5032b2f0,
     0x50333119,
@@ -699,47 +706,47 @@
     0x504d300c,
     0x504db1f3,
     0x504e308d,
-    0x68320ff2,
-    0x68328fc3,
-    0x68330fe1,
-    0x68338fb2,
-    0x68340fd3,
-    0x68348fff,
-    0x6c320fa1,
-    0x743209fa,
-    0x74328a0c,
-    0x7832075a,
-    0x78328780,
-    0x7833076c,
-    0x78338728,
-    0x78340935,
-    0x78348942,
-    0x78350714,
-    0x783586f0,
-    0x783606de,
-    0x78368702,
-    0x783707b8,
-    0x783787a6,
-    0x78380794,
-    0x7838880f,
-    0x7839082b,
-    0x78398847,
-    0x783a0863,
-    0x783a888f,
-    0x783b0879,
-    0x783b87f8,
-    0x783c07ca,
-    0x783c87e1,
-    0x783d073c,
-    0x783d890b,
-    0x783e0919,
-    0x783e8927,
-    0x783f08ef,
-    0x783f88d1,
-    0x784008e0,
-    0x784088c2,
-    0x784108a5,
-    0x8032142d,
+    0x6832104b,
+    0x6832901c,
+    0x6833103a,
+    0x6833900b,
+    0x6834102c,
+    0x68349058,
+    0x6c320ffa,
+    0x74320a53,
+    0x74328a65,
+    0x783207b3,
+    0x783287d9,
+    0x783307c5,
+    0x78338781,
+    0x7834098e,
+    0x7834899b,
+    0x7835076d,
+    0x78358749,
+    0x78360737,
+    0x7836875b,
+    0x78370811,
+    0x783787ff,
+    0x783807ed,
+    0x78388868,
+    0x78390884,
+    0x783988a0,
+    0x783a08bc,
+    0x783a88e8,
+    0x783b08d2,
+    0x783b8851,
+    0x783c0823,
+    0x783c883a,
+    0x783d0795,
+    0x783d8964,
+    0x783e0972,
+    0x783e8980,
+    0x783f0948,
+    0x783f892a,
+    0x78400939,
+    0x7840891b,
+    0x784108fe,
+    0x80321486,
 };
 
 static const char kFunctionStringData[] =
@@ -758,6 +765,7 @@
     "ASN1_UTCTIME_adj\0"
     "ASN1_d2i_fp\0"
     "ASN1_dup\0"
+    "ASN1_generate_v3\0"
     "ASN1_get_object\0"
     "ASN1_i2d_bio\0"
     "ASN1_i2d_fp\0"
@@ -781,6 +789,8 @@
     "a2i_ASN1_ENUMERATED\0"
     "a2i_ASN1_INTEGER\0"
     "a2i_ASN1_STRING\0"
+    "append_exp\0"
+    "asn1_cb\0"
     "asn1_check_tlen\0"
     "asn1_collate_primitive\0"
     "asn1_collect\0"
@@ -790,8 +800,10 @@
     "asn1_ex_c2i\0"
     "asn1_find_end\0"
     "asn1_item_ex_combine_new\0"
+    "asn1_str2type\0"
     "asn1_template_ex_d2i\0"
     "asn1_template_noexp_d2i\0"
+    "bitstr_cb\0"
     "c2i_ASN1_BIT_STRING\0"
     "c2i_ASN1_INTEGER\0"
     "c2i_ASN1_OBJECT\0"
@@ -803,7 +815,9 @@
     "d2i_ASN1_bytes\0"
     "d2i_ASN1_type_bytes\0"
     "i2d_ASN1_TIME\0"
+    "i2d_PrivateKey\0"
     "long_c2i\0"
+    "parse_tagging\0"
     "BIO_callback_ctrl\0"
     "BIO_ctrl\0"
     "BIO_new\0"
@@ -1308,7 +1322,6 @@
     "tls1_send_server_supplemental_data\0"
     "tls1_setup_key_block\0"
     "ASN1_digest\0"
-    "ASN1_generate_v3\0"
     "ASN1_item_sign_ctx\0"
     "ASN1_item_verify\0"
     "ASN1_sign\0"
@@ -1356,10 +1369,6 @@
     "X509at_add1_attr\0"
     "X509v3_add_ext\0"
     "add_cert_dir\0"
-    "append_exp\0"
-    "asn1_cb\0"
-    "asn1_str2type\0"
-    "bitstr_cb\0"
     "by_file_ctrl\0"
     "check_policy\0"
     "d2i_X509_PKEY\0"
@@ -1367,9 +1376,7 @@
     "get_cert_by_subject\0"
     "i2d_DSA_PUBKEY\0"
     "i2d_EC_PUBKEY\0"
-    "i2d_PrivateKey\0"
     "i2d_RSA_PUBKEY\0"
-    "parse_tagging\0"
     "x509_name_encode\0"
     "x509_name_ex_d2i\0"
     "x509_name_ex_new\0"
diff --git a/crypto/x509/asn1_gen.c b/crypto/x509/asn1_gen.c
index 750701e..9ffd937 100644
--- a/crypto/x509/asn1_gen.c
+++ b/crypto/x509/asn1_gen.c
@@ -65,6 +65,9 @@
 #include <openssl/x509v3.h>
 
 
+/* Although this file is in crypto/x509 for layering purposes, it emits errors
+ * from the ASN.1 module for OpenSSL compatibility. */
+
 #define ASN1_GEN_FLAG		0x10000
 #define ASN1_GEN_FLAG_IMP	(ASN1_GEN_FLAG|1)
 #define ASN1_GEN_FLAG_EXP	(ASN1_GEN_FLAG|2)
@@ -165,7 +168,7 @@
 		{
 		if (!cnf)
 			{
-			OPENSSL_PUT_ERROR(X509, ASN1_generate_v3, ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG);
+			OPENSSL_PUT_ERROR(ASN1, ASN1_generate_v3, ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG);
 			return NULL;
 			}
 		ret = asn1_multi(asn1_tags.utype, asn1_tags.str, cnf);
@@ -308,7 +311,7 @@
 
 	if (utype == -1)
 		{
-		OPENSSL_PUT_ERROR(X509, asn1_cb, ASN1_R_UNKNOWN_TAG);
+		OPENSSL_PUT_ERROR(ASN1, asn1_cb, ASN1_R_UNKNOWN_TAG);
 		ERR_add_error_data(2, "tag=", elem);
 		return -1;
 		}
@@ -321,7 +324,7 @@
 		/* If no value and not end of string, error */
 		if (!vstart && elem[len])
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_cb, ASN1_R_MISSING_VALUE);
+			OPENSSL_PUT_ERROR(ASN1, asn1_cb, ASN1_R_MISSING_VALUE);
 			return -1;
 			}
 		return 0;
@@ -334,7 +337,7 @@
 		/* Check for illegal multiple IMPLICIT tagging */
 		if (arg->imp_tag != -1)
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_cb, ASN1_R_ILLEGAL_NESTED_TAGGING);
+			OPENSSL_PUT_ERROR(ASN1, asn1_cb, ASN1_R_ILLEGAL_NESTED_TAGGING);
 			return -1;
 			}
 		if (!parse_tagging(vstart, vlen, &arg->imp_tag, &arg->imp_class))
@@ -380,7 +383,7 @@
 			arg->format = ASN1_GEN_FORMAT_BITLIST;
 		else
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_cb, ASN1_R_UNKNOWN_FORMAT);
+			OPENSSL_PUT_ERROR(ASN1, asn1_cb, ASN1_R_UNKNOWN_FORMAT);
 			return -1;
 			}
 		break;
@@ -404,7 +407,7 @@
 		return 0;
 	if (tag_num < 0)
 		{
-		OPENSSL_PUT_ERROR(X509, parse_tagging, ASN1_R_INVALID_NUMBER);
+		OPENSSL_PUT_ERROR(ASN1, parse_tagging, ASN1_R_INVALID_NUMBER);
 		return 0;
 		}
 	*ptag = tag_num;
@@ -437,7 +440,7 @@
 			default:
 			erch[0] = *eptr;
 			erch[1] = 0;
-			OPENSSL_PUT_ERROR(X509, parse_tagging, ASN1_R_INVALID_MODIFIER);
+			OPENSSL_PUT_ERROR(ASN1, parse_tagging, ASN1_R_INVALID_MODIFIER);
 			ERR_add_error_data(2, "Char=", erch);
 			return 0;
 			break;
@@ -523,13 +526,13 @@
 	/* Can only have IMPLICIT if permitted */
 	if ((arg->imp_tag != -1) && !imp_ok)
 		{
-		OPENSSL_PUT_ERROR(X509, append_exp, ASN1_R_ILLEGAL_IMPLICIT_TAG);
+		OPENSSL_PUT_ERROR(ASN1, append_exp, ASN1_R_ILLEGAL_IMPLICIT_TAG);
 		return 0;
 		}
 
 	if (arg->exp_count == ASN1_FLAG_EXP_MAX)
 		{
-		OPENSSL_PUT_ERROR(X509, append_exp, ASN1_R_DEPTH_EXCEEDED);
+		OPENSSL_PUT_ERROR(ASN1, append_exp, ASN1_R_DEPTH_EXCEEDED);
 		return 0;
 		}
 
@@ -647,7 +650,7 @@
 
 	if (!(atmp = ASN1_TYPE_new()))
 		{
-		OPENSSL_PUT_ERROR(X509, asn1_str2type, ERR_R_MALLOC_FAILURE);
+		OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ERR_R_MALLOC_FAILURE);
 		return NULL;
 		}
 
@@ -660,7 +663,7 @@
 		case V_ASN1_NULL:
 		if (str && *str)
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_str2type, ASN1_R_ILLEGAL_NULL_VALUE);
+			OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ASN1_R_ILLEGAL_NULL_VALUE);
 			goto bad_form;
 			}
 		break;
@@ -668,7 +671,7 @@
 		case V_ASN1_BOOLEAN:
 		if (format != ASN1_GEN_FORMAT_ASCII)
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_str2type, ASN1_R_NOT_ASCII_FORMAT);
+			OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ASN1_R_NOT_ASCII_FORMAT);
 			goto bad_form;
 			}
 		vtmp.name = NULL;
@@ -676,7 +679,7 @@
 		vtmp.value = (char *)str;
 		if (!X509V3_get_value_bool(&vtmp, &atmp->value.boolean))
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_str2type, ASN1_R_ILLEGAL_BOOLEAN);
+			OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ASN1_R_ILLEGAL_BOOLEAN);
 			goto bad_str;
 			}
 		break;
@@ -685,12 +688,12 @@
 		case V_ASN1_ENUMERATED:
 		if (format != ASN1_GEN_FORMAT_ASCII)
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_str2type, ASN1_R_INTEGER_NOT_ASCII_FORMAT);
+			OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ASN1_R_INTEGER_NOT_ASCII_FORMAT);
 			goto bad_form;
 			}
 		if (!(atmp->value.integer = s2i_ASN1_INTEGER(NULL, (char *)str)))
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_str2type, ASN1_R_ILLEGAL_INTEGER);
+			OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ASN1_R_ILLEGAL_INTEGER);
 			goto bad_str;
 			}
 		break;
@@ -698,12 +701,12 @@
 		case V_ASN1_OBJECT:
 		if (format != ASN1_GEN_FORMAT_ASCII)
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_str2type, ASN1_R_OBJECT_NOT_ASCII_FORMAT);
+			OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ASN1_R_OBJECT_NOT_ASCII_FORMAT);
 			goto bad_form;
 			}
 		if (!(atmp->value.object = OBJ_txt2obj(str, 0)))
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_str2type, ASN1_R_ILLEGAL_OBJECT);
+			OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ASN1_R_ILLEGAL_OBJECT);
 			goto bad_str;
 			}
 		break;
@@ -712,23 +715,23 @@
 		case V_ASN1_GENERALIZEDTIME:
 		if (format != ASN1_GEN_FORMAT_ASCII)
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_str2type, ASN1_R_TIME_NOT_ASCII_FORMAT);
+			OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ASN1_R_TIME_NOT_ASCII_FORMAT);
 			goto bad_form;
 			}
 		if (!(atmp->value.asn1_string = ASN1_STRING_new()))
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_str2type, ERR_R_MALLOC_FAILURE);
+			OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ERR_R_MALLOC_FAILURE);
 			goto bad_str;
 			}
 		if (!ASN1_STRING_set(atmp->value.asn1_string, str, -1))
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_str2type, ERR_R_MALLOC_FAILURE);
+			OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ERR_R_MALLOC_FAILURE);
 			goto bad_str;
 			}
 		atmp->value.asn1_string->type = utype;
 		if (!ASN1_TIME_check(atmp->value.asn1_string))
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_str2type, ASN1_R_ILLEGAL_TIME_VALUE);
+			OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ASN1_R_ILLEGAL_TIME_VALUE);
 			goto bad_str;
 			}
 
@@ -750,7 +753,7 @@
 			format = MBSTRING_UTF8;
 		else
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_str2type, ASN1_R_ILLEGAL_FORMAT);
+			OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ASN1_R_ILLEGAL_FORMAT);
 			goto bad_form;
 			}
 
@@ -758,7 +761,7 @@
 		if (ASN1_mbstring_copy(&atmp->value.asn1_string, (unsigned char *)str,
 						-1, format, ASN1_tag2bit(utype)) <= 0)
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_str2type, ERR_R_MALLOC_FAILURE);
+			OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ERR_R_MALLOC_FAILURE);
 			goto bad_str;
 			}
 		
@@ -771,7 +774,7 @@
 
 		if (!(atmp->value.asn1_string = ASN1_STRING_new()))
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_str2type, ERR_R_MALLOC_FAILURE);
+			OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ERR_R_MALLOC_FAILURE);
 			goto bad_form;
 			}
 
@@ -780,7 +783,7 @@
 
 			if (!(rdata = string_to_hex((char *)str, &rdlen)))
 				{
-				OPENSSL_PUT_ERROR(X509, asn1_str2type, ASN1_R_ILLEGAL_HEX);
+				OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ASN1_R_ILLEGAL_HEX);
 				goto bad_str;
 				}
 
@@ -795,7 +798,7 @@
 			{
 			if (!CONF_parse_list(str, ',', 1, bitstr_cb, atmp->value.bit_string))
 				{
-				OPENSSL_PUT_ERROR(X509, asn1_str2type, ASN1_R_LIST_ERROR);
+				OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ASN1_R_LIST_ERROR);
 				goto bad_str;
 				}
 			no_unused = 0;
@@ -803,7 +806,7 @@
 			}
 		else 
 			{
-			OPENSSL_PUT_ERROR(X509, asn1_str2type, ASN1_R_ILLEGAL_BITSTRING_FORMAT);
+			OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ASN1_R_ILLEGAL_BITSTRING_FORMAT);
 			goto bad_form;
 			}
 
@@ -819,7 +822,7 @@
 		break;
 
 		default:
-		OPENSSL_PUT_ERROR(X509, asn1_str2type, ASN1_R_UNSUPPORTED_TYPE);
+		OPENSSL_PUT_ERROR(ASN1, asn1_str2type, ASN1_R_UNSUPPORTED_TYPE);
 		goto bad_str;
 		break;
 		}
@@ -849,12 +852,12 @@
 		return 0;
 	if (bitnum < 0)
 		{
-		OPENSSL_PUT_ERROR(X509, bitstr_cb, ASN1_R_INVALID_NUMBER);
+		OPENSSL_PUT_ERROR(ASN1, bitstr_cb, ASN1_R_INVALID_NUMBER);
 		return 0;
 		}
 	if (!ASN1_BIT_STRING_set_bit(bitstr, bitnum, 1))
 		{
-		OPENSSL_PUT_ERROR(X509, bitstr_cb, ERR_R_MALLOC_FAILURE);
+		OPENSSL_PUT_ERROR(ASN1, bitstr_cb, ERR_R_MALLOC_FAILURE);
 		return 0;
 		}
 	return 1;
diff --git a/crypto/x509/i2d_pr.c b/crypto/x509/i2d_pr.c
index 8896565..443ca53 100644
--- a/crypto/x509/i2d_pr.c
+++ b/crypto/x509/i2d_pr.c
@@ -57,8 +57,7 @@
 
 #include <openssl/x509.h>
 
-#include <stdio.h>
-
+#include <openssl/asn1.h>
 #include <openssl/err.h>
 #include <openssl/evp.h>
 
@@ -77,7 +76,9 @@
 		PKCS8_PRIV_KEY_INFO_free(p8);
 		return ret;
 	}
-	OPENSSL_PUT_ERROR(X509, i2d_PrivateKey, ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE);
+	/* Although this file is in crypto/x509 for layering reasons, it emits
+	 * an error code from ASN1 for OpenSSL compatibility. */
+	OPENSSL_PUT_ERROR(ASN1, i2d_PrivateKey, ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE);
 	return -1;
 	}
 
diff --git a/include/openssl/asn1.h b/include/openssl/asn1.h
index 941b156..100cec8 100644
--- a/include/openssl/asn1.h
+++ b/include/openssl/asn1.h
@@ -1139,6 +1139,13 @@
 #define ASN1_F_ASN1_get_object 158
 #define ASN1_F_d2i_ASN1_bytes 159
 #define ASN1_F_a2i_ASN1_ENUMERATED 160
+#define ASN1_F_ASN1_generate_v3 161
+#define ASN1_F_append_exp 162
+#define ASN1_F_asn1_cb 163
+#define ASN1_F_asn1_str2type 164
+#define ASN1_F_bitstr_cb 165
+#define ASN1_F_i2d_PrivateKey 166
+#define ASN1_F_parse_tagging 167
 #define ASN1_R_ASN1_SIG_PARSE_ERROR 100
 #define ASN1_R_ADDING_OBJECT 101
 #define ASN1_R_MIME_NO_CONTENT_TYPE 102
diff --git a/util/make_errors.go b/util/make_errors.go
index d1e5438..48d9ad4 100644
--- a/util/make_errors.go
+++ b/util/make_errors.go
@@ -366,8 +366,7 @@
 	}
 	defer file.Close()
 
-	prefix += "_"
-	reasonPrefix := prefix + "R_"
+	reasonPrefix := prefix + "_R_"
 	var currentFunction string
 
 	scanner := bufio.NewScanner(file)
@@ -394,8 +393,9 @@
 			}
 		}
 
-		if strings.Contains(line, "OPENSSL_PUT_ERROR(") {
-			functionToken := prefix + "F_" + currentFunction
+		// Do not include cross-module error lines.
+		if strings.Contains(line, "OPENSSL_PUT_ERROR(" + prefix + ",") {
+			functionToken := prefix + "_F_" + currentFunction
 			if _, ok := functions[functionToken]; !ok {
 				functions[functionToken] = -1
 			}
@@ -405,7 +405,7 @@
 		handleDeclareMacro(line, "_F_", "OPENSSL_DECLARE_ERROR_FUNCTION(", functions)
 
 		for len(line) > 0 {
-			i := strings.Index(line, prefix)
+			i := strings.Index(line, prefix + "_")
 			if i == -1 {
 				break
 			}