Precompute sorted array for error strings.

Previously, error strings were kept in arrays for each subdirectory and
err.c would iterate over them all and insert them at init time to a hash
table.

This means that, even if you have a shared library and lots of processes
using that, each process has ~30KB of private memory from building that
hash table.

This this change, all the error strings are built into a sorted list and
are thus static data. This means that processes can share the error
information and it actually saves binary space because of all the
pointer overhead in the old scheme. Also it saves the time taken
building the hash table at startup.

This removes support for externally-supplied error string data.

Change-Id: Ifca04f335c673a048e1a3e76ff2b69c7264635be
diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt
index 0b64a0b..972d57d 100644
--- a/crypto/CMakeLists.txt
+++ b/crypto/CMakeLists.txt
@@ -137,7 +137,6 @@
   crypto
 
   crypto.c
-  crypto_error.c
   mem.c
   thread.c
   ex_data.c
diff --git a/crypto/asn1/CMakeLists.txt b/crypto/asn1/CMakeLists.txt
index 35e1bec..283636e 100644
--- a/crypto/asn1/CMakeLists.txt
+++ b/crypto/asn1/CMakeLists.txt
@@ -23,7 +23,6 @@
   a_type.c
   a_utctm.c
   a_utf8.c
-  asn1_error.c
   asn1_lib.c
   asn1_par.c
   asn_pack.c
diff --git a/crypto/asn1/asn1_error.c b/crypto/asn1/asn1_error.c
deleted file mode 100644
index 5e9fcaa..0000000
--- a/crypto/asn1/asn1_error.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/asn1.h>
-
-const ERR_STRING_DATA ASN1_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_BIT_STRING_set_bit, 0), "ASN1_BIT_STRING_set_bit"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ENUMERATED_set, 0), "ASN1_ENUMERATED_set"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ENUMERATED_to_BN, 0), "ASN1_ENUMERATED_to_BN"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_GENERALIZEDTIME_adj, 0), "ASN1_GENERALIZEDTIME_adj"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_INTEGER_set, 0), "ASN1_INTEGER_set"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_INTEGER_to_BN, 0), "ASN1_INTEGER_to_BN"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_OBJECT_new, 0), "ASN1_OBJECT_new"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_PCTX_new, 0), "ASN1_PCTX_new"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_STRING_TABLE_add, 0), "ASN1_STRING_TABLE_add"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_STRING_set, 0), "ASN1_STRING_set"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_STRING_type_new, 0), "ASN1_STRING_type_new"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_TIME_adj, 0), "ASN1_TIME_adj"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_UTCTIME_adj, 0), "ASN1_UTCTIME_adj"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_d2i_fp, 0), "ASN1_d2i_fp"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_dup, 0), "ASN1_dup"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_get_object, 0), "ASN1_get_object"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_i2d_bio, 0), "ASN1_i2d_bio"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_i2d_fp, 0), "ASN1_i2d_fp"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_item_d2i_fp, 0), "ASN1_item_d2i_fp"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_item_dup, 0), "ASN1_item_dup"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_item_ex_d2i, 0), "ASN1_item_ex_d2i"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_item_i2d_bio, 0), "ASN1_item_i2d_bio"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_item_i2d_fp, 0), "ASN1_item_i2d_fp"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_item_pack, 0), "ASN1_item_pack"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_item_unpack, 0), "ASN1_item_unpack"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_mbstring_ncopy, 0), "ASN1_mbstring_ncopy"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_pack_string, 0), "ASN1_pack_string"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_seq_pack, 0), "ASN1_seq_pack"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_seq_unpack, 0), "ASN1_seq_unpack"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_template_new, 0), "ASN1_template_new"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_unpack_string, 0), "ASN1_unpack_string"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_BIO_new_NDEF, 0), "BIO_new_NDEF"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_BN_to_ASN1_ENUMERATED, 0), "BN_to_ASN1_ENUMERATED"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_BN_to_ASN1_INTEGER, 0), "BN_to_ASN1_INTEGER"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_a2d_ASN1_OBJECT, 0), "a2d_ASN1_OBJECT"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_a2i_ASN1_ENUMERATED, 0), "a2i_ASN1_ENUMERATED"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_a2i_ASN1_INTEGER, 0), "a2i_ASN1_INTEGER"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_a2i_ASN1_STRING, 0), "a2i_ASN1_STRING"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_asn1_check_tlen, 0), "asn1_check_tlen"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_asn1_collate_primitive, 0), "asn1_collate_primitive"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_asn1_collect, 0), "asn1_collect"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_asn1_d2i_ex_primitive, 0), "asn1_d2i_ex_primitive"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_asn1_d2i_read_bio, 0), "asn1_d2i_read_bio"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_asn1_do_adb, 0), "asn1_do_adb"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_asn1_ex_c2i, 0), "asn1_ex_c2i"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_asn1_find_end, 0), "asn1_find_end"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_asn1_item_ex_combine_new, 0), "asn1_item_ex_combine_new"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_asn1_template_ex_d2i, 0), "asn1_template_ex_d2i"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_asn1_template_noexp_d2i, 0), "asn1_template_noexp_d2i"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_c2i_ASN1_BIT_STRING, 0), "c2i_ASN1_BIT_STRING"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_c2i_ASN1_INTEGER, 0), "c2i_ASN1_INTEGER"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_c2i_ASN1_OBJECT, 0), "c2i_ASN1_OBJECT"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_collect_data, 0), "collect_data"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_d2i_ASN1_BOOLEAN, 0), "d2i_ASN1_BOOLEAN"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_d2i_ASN1_OBJECT, 0), "d2i_ASN1_OBJECT"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_d2i_ASN1_UINTEGER, 0), "d2i_ASN1_UINTEGER"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_d2i_ASN1_UTCTIME, 0), "d2i_ASN1_UTCTIME"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_d2i_ASN1_bytes, 0), "d2i_ASN1_bytes"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_d2i_ASN1_type_bytes, 0), "d2i_ASN1_type_bytes"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_i2d_ASN1_TIME, 0), "i2d_ASN1_TIME"},
-  {ERR_PACK(ERR_LIB_ASN1, ASN1_F_long_c2i, 0), "long_c2i"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ADDING_OBJECT), "ADDING_OBJECT"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ASN1_LENGTH_MISMATCH), "ASN1_LENGTH_MISMATCH"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ASN1_PARSE_ERROR), "ASN1_PARSE_ERROR"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ASN1_SIG_PARSE_ERROR), "ASN1_SIG_PARSE_ERROR"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_AUX_ERROR), "AUX_ERROR"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BAD_CLASS), "BAD_CLASS"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BAD_GET_ASN1_OBJECT_CALL), "BAD_GET_ASN1_OBJECT_CALL"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BAD_OBJECT_HEADER), "BAD_OBJECT_HEADER"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BAD_PASSWORD_READ), "BAD_PASSWORD_READ"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BAD_TAG), "BAD_TAG"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BMPSTRING_IS_WRONG_LENGTH), "BMPSTRING_IS_WRONG_LENGTH"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BN_LIB), "BN_LIB"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BOOLEAN_IS_WRONG_LENGTH), "BOOLEAN_IS_WRONG_LENGTH"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BUFFER_TOO_SMALL), "BUFFER_TOO_SMALL"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER), "CIPHER_HAS_NO_OBJECT_IDENTIFIER"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_CONTEXT_NOT_INITIALISED), "CONTEXT_NOT_INITIALISED"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_DATA_IS_WRONG), "DATA_IS_WRONG"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_DECODE_ERROR), "DECODE_ERROR"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_DECODING_ERROR), "DECODING_ERROR"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_DEPTH_EXCEEDED), "DEPTH_EXCEEDED"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ENCODE_ERROR), "ENCODE_ERROR"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ERROR_GETTING_TIME), "ERROR_GETTING_TIME"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ERROR_LOADING_SECTION), "ERROR_LOADING_SECTION"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ERROR_PARSING_SET_ELEMENT), "ERROR_PARSING_SET_ELEMENT"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ERROR_SETTING_CIPHER_PARAMS), "ERROR_SETTING_CIPHER_PARAMS"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_EXPECTING_AN_ASN1_SEQUENCE), "EXPECTING_AN_ASN1_SEQUENCE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_EXPECTING_AN_INTEGER), "EXPECTING_AN_INTEGER"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_EXPECTING_AN_OBJECT), "EXPECTING_AN_OBJECT"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_EXPECTING_A_BOOLEAN), "EXPECTING_A_BOOLEAN"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_EXPECTING_A_TIME), "EXPECTING_A_TIME"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_EXPLICIT_LENGTH_MISMATCH), "EXPLICIT_LENGTH_MISMATCH"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED), "EXPLICIT_TAG_NOT_CONSTRUCTED"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_FIELD_MISSING), "FIELD_MISSING"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_FIRST_NUM_TOO_LARGE), "FIRST_NUM_TOO_LARGE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_HEADER_TOO_LONG), "HEADER_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_BITSTRING_FORMAT), "ILLEGAL_BITSTRING_FORMAT"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_BOOLEAN), "ILLEGAL_BOOLEAN"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_CHARACTERS), "ILLEGAL_CHARACTERS"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_FORMAT), "ILLEGAL_FORMAT"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_HEX), "ILLEGAL_HEX"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_IMPLICIT_TAG), "ILLEGAL_IMPLICIT_TAG"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_INTEGER), "ILLEGAL_INTEGER"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_NESTED_TAGGING), "ILLEGAL_NESTED_TAGGING"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_NULL), "ILLEGAL_NULL"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_NULL_VALUE), "ILLEGAL_NULL_VALUE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_OBJECT), "ILLEGAL_OBJECT"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_OPTIONAL_ANY), "ILLEGAL_OPTIONAL_ANY"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE), "ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_TAGGED_ANY), "ILLEGAL_TAGGED_ANY"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_TIME_VALUE), "ILLEGAL_TIME_VALUE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INTEGER_NOT_ASCII_FORMAT), "INTEGER_NOT_ASCII_FORMAT"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG), "INTEGER_TOO_LARGE_FOR_LONG"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_BIT_STRING_BITS_LEFT), "INVALID_BIT_STRING_BITS_LEFT"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_BMPSTRING_LENGTH), "INVALID_BMPSTRING_LENGTH"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_DIGIT), "INVALID_DIGIT"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_MIME_TYPE), "INVALID_MIME_TYPE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_MODIFIER), "INVALID_MODIFIER"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_NUMBER), "INVALID_NUMBER"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_OBJECT_ENCODING), "INVALID_OBJECT_ENCODING"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_SEPARATOR), "INVALID_SEPARATOR"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_TIME_FORMAT), "INVALID_TIME_FORMAT"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_UNIVERSALSTRING_LENGTH), "INVALID_UNIVERSALSTRING_LENGTH"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_UTF8STRING), "INVALID_UTF8STRING"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_IV_TOO_LARGE), "IV_TOO_LARGE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_LENGTH_ERROR), "LENGTH_ERROR"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_LIST_ERROR), "LIST_ERROR"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MALLOC_FAILURE), "MALLOC_FAILURE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MIME_NO_CONTENT_TYPE), "MIME_NO_CONTENT_TYPE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MIME_PARSE_ERROR), "MIME_PARSE_ERROR"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MIME_SIG_PARSE_ERROR), "MIME_SIG_PARSE_ERROR"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MISSING_ASN1_EOS), "MISSING_ASN1_EOS"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MISSING_EOC), "MISSING_EOC"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MISSING_SECOND_NUMBER), "MISSING_SECOND_NUMBER"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MISSING_VALUE), "MISSING_VALUE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MSTRING_NOT_UNIVERSAL), "MSTRING_NOT_UNIVERSAL"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MSTRING_WRONG_TAG), "MSTRING_WRONG_TAG"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NESTED_ASN1_ERROR), "NESTED_ASN1_ERROR"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NESTED_ASN1_STRING), "NESTED_ASN1_STRING"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NON_HEX_CHARACTERS), "NON_HEX_CHARACTERS"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NOT_ASCII_FORMAT), "NOT_ASCII_FORMAT"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NOT_ENOUGH_DATA), "NOT_ENOUGH_DATA"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NO_CONTENT_TYPE), "NO_CONTENT_TYPE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NO_DEFAULT_DIGEST), "NO_DEFAULT_DIGEST"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NO_MATCHING_CHOICE_TYPE), "NO_MATCHING_CHOICE_TYPE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NO_MULTIPART_BODY_FAILURE), "NO_MULTIPART_BODY_FAILURE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NO_MULTIPART_BOUNDARY), "NO_MULTIPART_BOUNDARY"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NO_SIG_CONTENT_TYPE), "NO_SIG_CONTENT_TYPE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NULL_IS_WRONG_LENGTH), "NULL_IS_WRONG_LENGTH"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_OBJECT_NOT_ASCII_FORMAT), "OBJECT_NOT_ASCII_FORMAT"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ODD_NUMBER_OF_CHARS), "ODD_NUMBER_OF_CHARS"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_PRIVATE_KEY_HEADER_MISSING), "PRIVATE_KEY_HEADER_MISSING"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_SECOND_NUMBER_TOO_LARGE), "SECOND_NUMBER_TOO_LARGE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_SEQUENCE_LENGTH_MISMATCH), "SEQUENCE_LENGTH_MISMATCH"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_SEQUENCE_NOT_CONSTRUCTED), "SEQUENCE_NOT_CONSTRUCTED"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG), "SEQUENCE_OR_SET_NEEDS_CONFIG"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_SHORT_LINE), "SHORT_LINE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_SIG_INVALID_MIME_TYPE), "SIG_INVALID_MIME_TYPE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_STREAMING_NOT_SUPPORTED), "STREAMING_NOT_SUPPORTED"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_STRING_TOO_LONG), "STRING_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_STRING_TOO_SHORT), "STRING_TOO_SHORT"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_TAG_VALUE_TOO_HIGH), "TAG_VALUE_TOO_HIGH"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD), "THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_TIME_NOT_ASCII_FORMAT), "TIME_NOT_ASCII_FORMAT"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_TOO_LONG), "TOO_LONG"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_TYPE_NOT_CONSTRUCTED), "TYPE_NOT_CONSTRUCTED"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_TYPE_NOT_PRIMITIVE), "TYPE_NOT_PRIMITIVE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNABLE_TO_DECODE_RSA_KEY), "UNABLE_TO_DECODE_RSA_KEY"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY), "UNABLE_TO_DECODE_RSA_PRIVATE_KEY"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNEXPECTED_EOC), "UNEXPECTED_EOC"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH), "UNIVERSALSTRING_IS_WRONG_LENGTH"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNKNOWN_FORMAT), "UNKNOWN_FORMAT"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNKNOWN_OBJECT_TYPE), "UNKNOWN_OBJECT_TYPE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE), "UNKNOWN_PUBLIC_KEY_TYPE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNKNOWN_TAG), "UNKNOWN_TAG"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE), "UNSUPPORTED_ANY_DEFINED_BY_TYPE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNSUPPORTED_CIPHER), "UNSUPPORTED_CIPHER"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM), "UNSUPPORTED_ENCRYPTION_ALGORITHM"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE), "UNSUPPORTED_PUBLIC_KEY_TYPE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNSUPPORTED_TYPE), "UNSUPPORTED_TYPE"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_WRONG_TAG), "WRONG_TAG"},
-  {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_WRONG_TYPE), "WRONG_TYPE"},
-  {0, NULL},
-};
diff --git a/crypto/bio/CMakeLists.txt b/crypto/bio/CMakeLists.txt
index 6211e85..12bb749 100644
--- a/crypto/bio/CMakeLists.txt
+++ b/crypto/bio/CMakeLists.txt
@@ -6,7 +6,6 @@
   OBJECT
 
   bio.c
-  bio_error.c
   bio_mem.c
   buffer.c
   connect.c
diff --git a/crypto/bio/bio_error.c b/crypto/bio/bio_error.c
deleted file mode 100644
index 09585e4..0000000
--- a/crypto/bio/bio_error.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/bio.h>
-
-const ERR_STRING_DATA BIO_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_callback_ctrl, 0), "BIO_callback_ctrl"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_ctrl, 0), "BIO_ctrl"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_new, 0), "BIO_new"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_new_file, 0), "BIO_new_file"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_new_mem_buf, 0), "BIO_new_mem_buf"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_zero_copy_get_read_buf, 0), "BIO_zero_copy_get_read_buf"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_zero_copy_get_read_buf_done, 0), "BIO_zero_copy_get_read_buf_done"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_zero_copy_get_write_buf, 0), "BIO_zero_copy_get_write_buf"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_zero_copy_get_write_buf_done, 0), "BIO_zero_copy_get_write_buf_done"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_bio_ctrl, 0), "bio_ctrl"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_bio_io, 0), "bio_io"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_bio_ip_and_port_to_socket_and_addr, 0), "bio_ip_and_port_to_socket_and_addr"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_bio_make_pair, 0), "bio_make_pair"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_bio_write, 0), "bio_write"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_buffer_ctrl, 0), "buffer_ctrl"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_conn_ctrl, 0), "conn_ctrl"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_conn_state, 0), "conn_state"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_file_ctrl, 0), "file_ctrl"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_file_read, 0), "file_read"},
-  {ERR_PACK(ERR_LIB_BIO, BIO_F_mem_write, 0), "mem_write"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_ASN1_OBJECT_TOO_LONG), "ASN1_OBJECT_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_BAD_FOPEN_MODE), "BAD_FOPEN_MODE"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_BROKEN_PIPE), "BROKEN_PIPE"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_CONNECT_ERROR), "CONNECT_ERROR"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_ERROR_SETTING_NBIO), "ERROR_SETTING_NBIO"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_INVALID_ARGUMENT), "INVALID_ARGUMENT"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_IN_USE), "IN_USE"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_KEEPALIVE), "KEEPALIVE"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_NBIO_CONNECT_ERROR), "NBIO_CONNECT_ERROR"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_NO_HOSTNAME_SPECIFIED), "NO_HOSTNAME_SPECIFIED"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_NO_PORT_SPECIFIED), "NO_PORT_SPECIFIED"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_NO_SUCH_FILE), "NO_SUCH_FILE"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_NULL_PARAMETER), "NULL_PARAMETER"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_SYS_LIB), "SYS_LIB"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_UNABLE_TO_CREATE_SOCKET), "UNABLE_TO_CREATE_SOCKET"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_UNINITIALIZED), "UNINITIALIZED"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_UNSUPPORTED_METHOD), "UNSUPPORTED_METHOD"},
-  {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_WRITE_TO_READ_ONLY_BIO), "WRITE_TO_READ_ONLY_BIO"},
-  {0, NULL},
-};
diff --git a/crypto/bn/CMakeLists.txt b/crypto/bn/CMakeLists.txt
index 600be4d..0553201 100644
--- a/crypto/bn/CMakeLists.txt
+++ b/crypto/bn/CMakeLists.txt
@@ -37,7 +37,6 @@
 
   OBJECT
 
-  bn_error.c
   add.c
   bn.c
   cmp.c
diff --git a/crypto/bn/bn_error.c b/crypto/bn/bn_error.c
deleted file mode 100644
index b522c2a..0000000
--- a/crypto/bn/bn_error.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/bn.h>
-
-const ERR_STRING_DATA BN_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_CTX_get, 0), "BN_CTX_get"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_CTX_new, 0), "BN_CTX_new"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_CTX_start, 0), "BN_CTX_start"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_bn2dec, 0), "BN_bn2dec"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_bn2hex, 0), "BN_bn2hex"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_div, 0), "BN_div"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_div_recp, 0), "BN_div_recp"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_exp, 0), "BN_exp"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_generate_dsa_nonce, 0), "BN_generate_dsa_nonce"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_generate_prime_ex, 0), "BN_generate_prime_ex"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_mod_exp2_mont, 0), "BN_mod_exp2_mont"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_mod_exp_mont, 0), "BN_mod_exp_mont"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_mod_exp_mont_consttime, 0), "BN_mod_exp_mont_consttime"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_mod_exp_mont_word, 0), "BN_mod_exp_mont_word"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_mod_inverse, 0), "BN_mod_inverse"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_mod_inverse_no_branch, 0), "BN_mod_inverse_no_branch"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_mod_lshift_quick, 0), "BN_mod_lshift_quick"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_mod_sqrt, 0), "BN_mod_sqrt"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_new, 0), "BN_new"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_rand, 0), "BN_rand"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_rand_range, 0), "BN_rand_range"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_sqrt, 0), "BN_sqrt"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_BN_usub, 0), "BN_usub"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_bn_wexpand, 0), "bn_wexpand"},
-  {ERR_PACK(ERR_LIB_BN, BN_F_mod_exp_recp, 0), "mod_exp_recp"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_ARG2_LT_ARG3), "ARG2_LT_ARG3"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_BAD_RECIPROCAL), "BAD_RECIPROCAL"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_BIGNUM_TOO_LONG), "BIGNUM_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_BITS_TOO_SMALL), "BITS_TOO_SMALL"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_CALLED_WITH_EVEN_MODULUS), "CALLED_WITH_EVEN_MODULUS"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_DIV_BY_ZERO), "DIV_BY_ZERO"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_EXPAND_ON_STATIC_BIGNUM_DATA), "EXPAND_ON_STATIC_BIGNUM_DATA"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_INPUT_NOT_REDUCED), "INPUT_NOT_REDUCED"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_INVALID_RANGE), "INVALID_RANGE"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_NEGATIVE_NUMBER), "NEGATIVE_NUMBER"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_NOT_A_SQUARE), "NOT_A_SQUARE"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_NOT_INITIALIZED), "NOT_INITIALIZED"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_NO_INVERSE), "NO_INVERSE"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_PRIVATE_KEY_TOO_LARGE), "PRIVATE_KEY_TOO_LARGE"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_P_IS_NOT_PRIME), "P_IS_NOT_PRIME"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_TOO_MANY_ITERATIONS), "TOO_MANY_ITERATIONS"},
-  {ERR_PACK(ERR_LIB_BN, 0, BN_R_TOO_MANY_TEMPORARY_VARIABLES), "TOO_MANY_TEMPORARY_VARIABLES"},
-  {0, NULL},
-};
diff --git a/crypto/buf/CMakeLists.txt b/crypto/buf/CMakeLists.txt
index dabf8d1..19edf7d 100644
--- a/crypto/buf/CMakeLists.txt
+++ b/crypto/buf/CMakeLists.txt
@@ -6,5 +6,4 @@
   OBJECT
 
   buf.c
-  buf_error.c
 )
diff --git a/crypto/buf/buf_error.c b/crypto/buf/buf_error.c
deleted file mode 100644
index fac6011..0000000
--- a/crypto/buf/buf_error.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/buf.h>
-
-const ERR_STRING_DATA BUF_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_BUF, BUF_F_BUF_MEM_new, 0), "BUF_MEM_new"},
-  {ERR_PACK(ERR_LIB_BUF, BUF_F_BUF_memdup, 0), "BUF_memdup"},
-  {ERR_PACK(ERR_LIB_BUF, BUF_F_BUF_strndup, 0), "BUF_strndup"},
-  {ERR_PACK(ERR_LIB_BUF, BUF_F_buf_mem_grow, 0), "buf_mem_grow"},
-  {0, NULL},
-};
diff --git a/crypto/cipher/CMakeLists.txt b/crypto/cipher/CMakeLists.txt
index bb62b72..e506cfd 100644
--- a/crypto/cipher/CMakeLists.txt
+++ b/crypto/cipher/CMakeLists.txt
@@ -6,7 +6,6 @@
   OBJECT
 
   cipher.c
-  cipher_error.c
   derive_key.c
   aead.c
 
diff --git a/crypto/cipher/cipher_error.c b/crypto/cipher/cipher_error.c
deleted file mode 100644
index 95230f6..0000000
--- a/crypto/cipher/cipher_error.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/cipher.h>
-
-const ERR_STRING_DATA CIPHER_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_EVP_AEAD_CTX_init, 0), "EVP_AEAD_CTX_init"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_EVP_AEAD_CTX_open, 0), "EVP_AEAD_CTX_open"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_EVP_AEAD_CTX_seal, 0), "EVP_AEAD_CTX_seal"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_EVP_CIPHER_CTX_copy, 0), "EVP_CIPHER_CTX_copy"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_EVP_CIPHER_CTX_ctrl, 0), "EVP_CIPHER_CTX_ctrl"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_EVP_CIPHER_CTX_set_key_length, 0), "EVP_CIPHER_CTX_set_key_length"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_EVP_CipherInit_ex, 0), "EVP_CipherInit_ex"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_EVP_DecryptFinal_ex, 0), "EVP_DecryptFinal_ex"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_EVP_EncryptFinal_ex, 0), "EVP_EncryptFinal_ex"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_aes_gcm_init, 0), "aead_aes_gcm_init"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_aes_gcm_open, 0), "aead_aes_gcm_open"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_aes_gcm_seal, 0), "aead_aes_gcm_seal"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_aes_key_wrap_init, 0), "aead_aes_key_wrap_init"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_aes_key_wrap_open, 0), "aead_aes_key_wrap_open"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_aes_key_wrap_seal, 0), "aead_aes_key_wrap_seal"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_chacha20_poly1305_init, 0), "aead_chacha20_poly1305_init"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_chacha20_poly1305_open, 0), "aead_chacha20_poly1305_open"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_chacha20_poly1305_seal, 0), "aead_chacha20_poly1305_seal"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_rc4_md5_tls_init, 0), "aead_rc4_md5_tls_init"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_rc4_md5_tls_open, 0), "aead_rc4_md5_tls_open"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_rc4_md5_tls_seal, 0), "aead_rc4_md5_tls_seal"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_ssl3_ensure_cipher_init, 0), "aead_ssl3_ensure_cipher_init"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_ssl3_init, 0), "aead_ssl3_init"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_ssl3_open, 0), "aead_ssl3_open"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_ssl3_seal, 0), "aead_ssl3_seal"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_tls_ensure_cipher_init, 0), "aead_tls_ensure_cipher_init"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_tls_init, 0), "aead_tls_init"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_tls_open, 0), "aead_tls_open"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aead_tls_seal, 0), "aead_tls_seal"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aes_init_key, 0), "aes_init_key"},
-  {ERR_PACK(ERR_LIB_CIPHER, CIPHER_F_aesni_init_key, 0), "aesni_init_key"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_AES_KEY_SETUP_FAILED), "AES_KEY_SETUP_FAILED"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_BAD_DECRYPT), "BAD_DECRYPT"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_BAD_KEY_LENGTH), "BAD_KEY_LENGTH"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_BUFFER_TOO_SMALL), "BUFFER_TOO_SMALL"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_CTRL_NOT_IMPLEMENTED), "CTRL_NOT_IMPLEMENTED"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_CTRL_OPERATION_NOT_IMPLEMENTED), "CTRL_OPERATION_NOT_IMPLEMENTED"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH), "DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_INITIALIZATION_ERROR), "INITIALIZATION_ERROR"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_INPUT_NOT_INITIALIZED), "INPUT_NOT_INITIALIZED"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_INVALID_AD), "INVALID_AD"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_INVALID_AD_SIZE), "INVALID_AD_SIZE"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_INVALID_KEY_LENGTH), "INVALID_KEY_LENGTH"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_INVALID_NONCE_SIZE), "INVALID_NONCE_SIZE"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_INVALID_OPERATION), "INVALID_OPERATION"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_IV_TOO_LARGE), "IV_TOO_LARGE"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_NO_CIPHER_SET), "NO_CIPHER_SET"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_OUTPUT_ALIASES_INPUT), "OUTPUT_ALIASES_INPUT"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_TAG_TOO_LARGE), "TAG_TOO_LARGE"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_TOO_LARGE), "TOO_LARGE"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_UNSUPPORTED_AD_SIZE), "UNSUPPORTED_AD_SIZE"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_UNSUPPORTED_INPUT_SIZE), "UNSUPPORTED_INPUT_SIZE"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_UNSUPPORTED_KEY_SIZE), "UNSUPPORTED_KEY_SIZE"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_UNSUPPORTED_NONCE_SIZE), "UNSUPPORTED_NONCE_SIZE"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_UNSUPPORTED_TAG_SIZE), "UNSUPPORTED_TAG_SIZE"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_WRAP_MODE_NOT_ALLOWED), "WRAP_MODE_NOT_ALLOWED"},
-  {ERR_PACK(ERR_LIB_CIPHER, 0, CIPHER_R_WRONG_FINAL_BLOCK_LENGTH), "WRONG_FINAL_BLOCK_LENGTH"},
-  {0, NULL},
-};
diff --git a/crypto/conf/CMakeLists.txt b/crypto/conf/CMakeLists.txt
index f54d904..8046bb8 100644
--- a/crypto/conf/CMakeLists.txt
+++ b/crypto/conf/CMakeLists.txt
@@ -6,5 +6,4 @@
   OBJECT
 
   conf.c
-  conf_error.c
 )
diff --git a/crypto/conf/conf_error.c b/crypto/conf/conf_error.c
deleted file mode 100644
index b5dd001..0000000
--- a/crypto/conf/conf_error.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/conf.h>
-
-const ERR_STRING_DATA CONF_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_CONF, CONF_F_CONF_parse_list, 0), "CONF_parse_list"},
-  {ERR_PACK(ERR_LIB_CONF, CONF_F_NCONF_load, 0), "NCONF_load"},
-  {ERR_PACK(ERR_LIB_CONF, CONF_F_def_load_bio, 0), "def_load_bio"},
-  {ERR_PACK(ERR_LIB_CONF, CONF_F_str_copy, 0), "str_copy"},
-  {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_LIST_CANNOT_BE_NULL), "LIST_CANNOT_BE_NULL"},
-  {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_MISSING_CLOSE_SQUARE_BRACKET), "MISSING_CLOSE_SQUARE_BRACKET"},
-  {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_MISSING_EQUAL_SIGN), "MISSING_EQUAL_SIGN"},
-  {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_NO_CLOSE_BRACE), "NO_CLOSE_BRACE"},
-  {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_UNABLE_TO_CREATE_NEW_SECTION), "UNABLE_TO_CREATE_NEW_SECTION"},
-  {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_VARIABLE_HAS_NO_VALUE), "VARIABLE_HAS_NO_VALUE"},
-  {0, NULL},
-};
diff --git a/crypto/crypto_error.c b/crypto/crypto_error.c
deleted file mode 100644
index 3e63dca..0000000
--- a/crypto/crypto_error.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/crypto.h>
-
-const ERR_STRING_DATA CRYPTO_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_CRYPTO, CRYPTO_F_CRYPTO_set_ex_data, 0), "CRYPTO_set_ex_data"},
-  {ERR_PACK(ERR_LIB_CRYPTO, CRYPTO_F_get_class, 0), "get_class"},
-  {ERR_PACK(ERR_LIB_CRYPTO, CRYPTO_F_get_func_pointers, 0), "get_func_pointers"},
-  {ERR_PACK(ERR_LIB_CRYPTO, CRYPTO_F_get_new_index, 0), "get_new_index"},
-  {0, NULL},
-};
diff --git a/crypto/dh/CMakeLists.txt b/crypto/dh/CMakeLists.txt
index 4e31206..a154ef1 100644
--- a/crypto/dh/CMakeLists.txt
+++ b/crypto/dh/CMakeLists.txt
@@ -10,7 +10,6 @@
   params.c
   check.c
   dh_asn1.c
-  dh_error.c
 )
 
 add_executable(
diff --git a/crypto/dh/dh_error.c b/crypto/dh/dh_error.c
deleted file mode 100644
index 5ecc5d1..0000000
--- a/crypto/dh/dh_error.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/dh.h>
-
-const ERR_STRING_DATA DH_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_DH, DH_F_DH_new_method, 0), "DH_new_method"},
-  {ERR_PACK(ERR_LIB_DH, DH_F_compute_key, 0), "compute_key"},
-  {ERR_PACK(ERR_LIB_DH, DH_F_generate_key, 0), "generate_key"},
-  {ERR_PACK(ERR_LIB_DH, DH_F_generate_parameters, 0), "generate_parameters"},
-  {ERR_PACK(ERR_LIB_DH, 0, DH_R_BAD_GENERATOR), "BAD_GENERATOR"},
-  {ERR_PACK(ERR_LIB_DH, 0, DH_R_INVALID_PUBKEY), "INVALID_PUBKEY"},
-  {ERR_PACK(ERR_LIB_DH, 0, DH_R_MODULUS_TOO_LARGE), "MODULUS_TOO_LARGE"},
-  {ERR_PACK(ERR_LIB_DH, 0, DH_R_NO_PRIVATE_VALUE), "NO_PRIVATE_VALUE"},
-  {0, NULL},
-};
diff --git a/crypto/digest/CMakeLists.txt b/crypto/digest/CMakeLists.txt
index 6426399..8121a7c 100644
--- a/crypto/digest/CMakeLists.txt
+++ b/crypto/digest/CMakeLists.txt
@@ -7,7 +7,6 @@
 
   digest.c
   digests.c
-  digest_error.c
 )
 
 add_executable(
diff --git a/crypto/digest/digest_error.c b/crypto/digest/digest_error.c
deleted file mode 100644
index 0cc6702..0000000
--- a/crypto/digest/digest_error.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/digest.h>
-
-const ERR_STRING_DATA DIGEST_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_DIGEST, DIGEST_F_EVP_DigestInit_ex, 0), "EVP_DigestInit_ex"},
-  {ERR_PACK(ERR_LIB_DIGEST, DIGEST_F_EVP_MD_CTX_copy_ex, 0), "EVP_MD_CTX_copy_ex"},
-  {ERR_PACK(ERR_LIB_DIGEST, 0, DIGEST_R_INPUT_NOT_INITIALIZED), "INPUT_NOT_INITIALIZED"},
-  {0, NULL},
-};
diff --git a/crypto/dsa/CMakeLists.txt b/crypto/dsa/CMakeLists.txt
index fbc053e..dab2c4c 100644
--- a/crypto/dsa/CMakeLists.txt
+++ b/crypto/dsa/CMakeLists.txt
@@ -8,7 +8,6 @@
   dsa.c
   dsa_impl.c
   dsa_asn1.c
-  dsa_error.c
 )
 
 add_executable(
diff --git a/crypto/dsa/dsa_error.c b/crypto/dsa/dsa_error.c
deleted file mode 100644
index 5a83908..0000000
--- a/crypto/dsa/dsa_error.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/dsa.h>
-
-const ERR_STRING_DATA DSA_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_new_method, 0), "DSA_new_method"},
-  {ERR_PACK(ERR_LIB_DSA, DSA_F_dsa_sig_cb, 0), "dsa_sig_cb"},
-  {ERR_PACK(ERR_LIB_DSA, DSA_F_sign, 0), "sign"},
-  {ERR_PACK(ERR_LIB_DSA, DSA_F_sign_setup, 0), "sign_setup"},
-  {ERR_PACK(ERR_LIB_DSA, DSA_F_verify, 0), "verify"},
-  {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_BAD_Q_VALUE), "BAD_Q_VALUE"},
-  {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_MISSING_PARAMETERS), "MISSING_PARAMETERS"},
-  {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_MODULUS_TOO_LARGE), "MODULUS_TOO_LARGE"},
-  {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_NEED_NEW_SETUP_VALUES), "NEED_NEW_SETUP_VALUES"},
-  {0, NULL},
-};
diff --git a/crypto/ec/CMakeLists.txt b/crypto/ec/CMakeLists.txt
index 11266c6..73de676 100644
--- a/crypto/ec/CMakeLists.txt
+++ b/crypto/ec/CMakeLists.txt
@@ -12,7 +12,6 @@
   wnaf.c
   ec_key.c
   ec_asn1.c
-  ec_error.c
 )
 
 add_executable(
diff --git a/crypto/ec/ec_error.c b/crypto/ec/ec_error.c
deleted file mode 100644
index 73807c7..0000000
--- a/crypto/ec/ec_error.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/ec.h>
-
-const ERR_STRING_DATA EC_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_copy, 0), "EC_GROUP_copy"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_get_curve_GFp, 0), "EC_GROUP_get_curve_GFp"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_get_degree, 0), "EC_GROUP_get_degree"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_new_by_curve_name, 0), "EC_GROUP_new_by_curve_name"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_check_key, 0), "EC_KEY_check_key"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_copy, 0), "EC_KEY_copy"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_generate_key, 0), "EC_KEY_generate_key"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_new_method, 0), "EC_KEY_new_method"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_set_public_key_affine_coordinates, 0), "EC_KEY_set_public_key_affine_coordinates"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_add, 0), "EC_POINT_add"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_cmp, 0), "EC_POINT_cmp"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_copy, 0), "EC_POINT_copy"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_dbl, 0), "EC_POINT_dbl"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_dup, 0), "EC_POINT_dup"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_get_affine_coordinates_GFp, 0), "EC_POINT_get_affine_coordinates_GFp"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_invert, 0), "EC_POINT_invert"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_is_at_infinity, 0), "EC_POINT_is_at_infinity"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_is_on_curve, 0), "EC_POINT_is_on_curve"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_make_affine, 0), "EC_POINT_make_affine"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_new, 0), "EC_POINT_new"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_oct2point, 0), "EC_POINT_oct2point"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_point2oct, 0), "EC_POINT_point2oct"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_set_affine_coordinates_GFp, 0), "EC_POINT_set_affine_coordinates_GFp"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_set_compressed_coordinates_GFp, 0), "EC_POINT_set_compressed_coordinates_GFp"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_set_to_infinity, 0), "EC_POINT_set_to_infinity"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINTs_make_affine, 0), "EC_POINTs_make_affine"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_compute_wNAF, 0), "compute_wNAF"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_d2i_ECPKParameters, 0), "d2i_ECPKParameters"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_d2i_ECParameters, 0), "d2i_ECParameters"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_d2i_ECPrivateKey, 0), "d2i_ECPrivateKey"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_GFp_mont_field_decode, 0), "ec_GFp_mont_field_decode"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_GFp_mont_field_encode, 0), "ec_GFp_mont_field_encode"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_GFp_mont_field_mul, 0), "ec_GFp_mont_field_mul"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_GFp_mont_field_set_to_one, 0), "ec_GFp_mont_field_set_to_one"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_GFp_mont_field_sqr, 0), "ec_GFp_mont_field_sqr"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_GFp_mont_group_set_curve, 0), "ec_GFp_mont_group_set_curve"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_GFp_simple_group_check_discriminant, 0), "ec_GFp_simple_group_check_discriminant"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_GFp_simple_group_set_curve, 0), "ec_GFp_simple_group_set_curve"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_GFp_simple_make_affine, 0), "ec_GFp_simple_make_affine"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_GFp_simple_oct2point, 0), "ec_GFp_simple_oct2point"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_GFp_simple_point2oct, 0), "ec_GFp_simple_point2oct"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_GFp_simple_point_get_affine_coordinates, 0), "ec_GFp_simple_point_get_affine_coordinates"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_GFp_simple_point_set_affine_coordinates, 0), "ec_GFp_simple_point_set_affine_coordinates"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_GFp_simple_points_make_affine, 0), "ec_GFp_simple_points_make_affine"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_GFp_simple_set_compressed_coordinates, 0), "ec_GFp_simple_set_compressed_coordinates"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_asn1_group2pkparameters, 0), "ec_asn1_group2pkparameters"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_asn1_pkparameters2group, 0), "ec_asn1_pkparameters2group"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_group_new, 0), "ec_group_new"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_group_new_curve_GFp, 0), "ec_group_new_curve_GFp"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_group_new_from_data, 0), "ec_group_new_from_data"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_point_set_Jprojective_coordinates_GFp, 0), "ec_point_set_Jprojective_coordinates_GFp"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_pre_comp_new, 0), "ec_pre_comp_new"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_wNAF_mul, 0), "ec_wNAF_mul"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_ec_wNAF_precompute_mult, 0), "ec_wNAF_precompute_mult"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_i2d_ECPKParameters, 0), "i2d_ECPKParameters"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_i2d_ECParameters, 0), "i2d_ECParameters"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_i2d_ECPrivateKey, 0), "i2d_ECPrivateKey"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_i2o_ECPublicKey, 0), "i2o_ECPublicKey"},
-  {ERR_PACK(ERR_LIB_EC, EC_F_o2i_ECPublicKey, 0), "o2i_ECPublicKey"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_BUFFER_TOO_SMALL), "BUFFER_TOO_SMALL"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_COORDINATES_OUT_OF_RANGE), "COORDINATES_OUT_OF_RANGE"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_D2I_ECPKPARAMETERS_FAILURE), "D2I_ECPKPARAMETERS_FAILURE"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_EC_GROUP_NEW_BY_NAME_FAILURE), "EC_GROUP_NEW_BY_NAME_FAILURE"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_GF2M_NOT_SUPPORTED), "GF2M_NOT_SUPPORTED"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_GROUP2PKPARAMETERS_FAILURE), "GROUP2PKPARAMETERS_FAILURE"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_I2D_ECPKPARAMETERS_FAILURE), "I2D_ECPKPARAMETERS_FAILURE"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_INCOMPATIBLE_OBJECTS), "INCOMPATIBLE_OBJECTS"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_COMPRESSED_POINT), "INVALID_COMPRESSED_POINT"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_COMPRESSION_BIT), "INVALID_COMPRESSION_BIT"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_ENCODING), "INVALID_ENCODING"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_FIELD), "INVALID_FIELD"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_FORM), "INVALID_FORM"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_GROUP_ORDER), "INVALID_GROUP_ORDER"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_PRIVATE_KEY), "INVALID_PRIVATE_KEY"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_MISSING_PARAMETERS), "MISSING_PARAMETERS"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_MISSING_PRIVATE_KEY), "MISSING_PRIVATE_KEY"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_NON_NAMED_CURVE), "NON_NAMED_CURVE"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_NOT_INITIALIZED), "NOT_INITIALIZED"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_PKPARAMETERS2GROUP_FAILURE), "PKPARAMETERS2GROUP_FAILURE"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_POINT_AT_INFINITY), "POINT_AT_INFINITY"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_POINT_IS_NOT_ON_CURVE), "POINT_IS_NOT_ON_CURVE"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_SLOT_FULL), "SLOT_FULL"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_UNDEFINED_GENERATOR), "UNDEFINED_GENERATOR"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_UNKNOWN_GROUP), "UNKNOWN_GROUP"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_UNKNOWN_ORDER), "UNKNOWN_ORDER"},
-  {ERR_PACK(ERR_LIB_EC, 0, EC_R_WRONG_ORDER), "WRONG_ORDER"},
-  {0, NULL},
-};
diff --git a/crypto/ecdh/CMakeLists.txt b/crypto/ecdh/CMakeLists.txt
index b312148..346e72d 100644
--- a/crypto/ecdh/CMakeLists.txt
+++ b/crypto/ecdh/CMakeLists.txt
@@ -6,5 +6,4 @@
   OBJECT
 
   ecdh.c
-  ecdh_error.c
 )
diff --git a/crypto/ecdh/ecdh_error.c b/crypto/ecdh/ecdh_error.c
deleted file mode 100644
index 8ba1854..0000000
--- a/crypto/ecdh/ecdh_error.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/ecdh.h>
-
-const ERR_STRING_DATA ECDH_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_ECDH, ECDH_F_ECDH_compute_key, 0), "ECDH_compute_key"},
-  {ERR_PACK(ERR_LIB_ECDH, 0, ECDH_R_KDF_FAILED), "KDF_FAILED"},
-  {ERR_PACK(ERR_LIB_ECDH, 0, ECDH_R_NO_PRIVATE_VALUE), "NO_PRIVATE_VALUE"},
-  {ERR_PACK(ERR_LIB_ECDH, 0, ECDH_R_POINT_ARITHMETIC_FAILURE), "POINT_ARITHMETIC_FAILURE"},
-  {0, NULL},
-};
diff --git a/crypto/ecdsa/CMakeLists.txt b/crypto/ecdsa/CMakeLists.txt
index 4bddd27..95adbad 100644
--- a/crypto/ecdsa/CMakeLists.txt
+++ b/crypto/ecdsa/CMakeLists.txt
@@ -7,7 +7,6 @@
 
   ecdsa.c
   ecdsa_asn1.c
-  ecdsa_error.c
 )
 
 
diff --git a/crypto/ecdsa/ecdsa_error.c b/crypto/ecdsa/ecdsa_error.c
deleted file mode 100644
index cbd69ce..0000000
--- a/crypto/ecdsa/ecdsa_error.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/ecdsa.h>
-
-const ERR_STRING_DATA ECDSA_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_ECDSA, ECDSA_F_ECDSA_do_sign_ex, 0), "ECDSA_do_sign_ex"},
-  {ERR_PACK(ERR_LIB_ECDSA, ECDSA_F_ECDSA_do_verify, 0), "ECDSA_do_verify"},
-  {ERR_PACK(ERR_LIB_ECDSA, ECDSA_F_ECDSA_sign_ex, 0), "ECDSA_sign_ex"},
-  {ERR_PACK(ERR_LIB_ECDSA, ECDSA_F_ECDSA_sign_setup, 0), "ECDSA_sign_setup"},
-  {ERR_PACK(ERR_LIB_ECDSA, ECDSA_F_digest_to_bn, 0), "digest_to_bn"},
-  {ERR_PACK(ERR_LIB_ECDSA, ECDSA_F_ecdsa_sign_setup, 0), "ecdsa_sign_setup"},
-  {ERR_PACK(ERR_LIB_ECDSA, 0, ECDSA_R_BAD_SIGNATURE), "BAD_SIGNATURE"},
-  {ERR_PACK(ERR_LIB_ECDSA, 0, ECDSA_R_MISSING_PARAMETERS), "MISSING_PARAMETERS"},
-  {ERR_PACK(ERR_LIB_ECDSA, 0, ECDSA_R_NEED_NEW_SETUP_VALUES), "NEED_NEW_SETUP_VALUES"},
-  {ERR_PACK(ERR_LIB_ECDSA, 0, ECDSA_R_NOT_IMPLEMENTED), "NOT_IMPLEMENTED"},
-  {ERR_PACK(ERR_LIB_ECDSA, 0, ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED), "RANDOM_NUMBER_GENERATION_FAILED"},
-  {0, NULL},
-};
diff --git a/crypto/engine/CMakeLists.txt b/crypto/engine/CMakeLists.txt
index cea6566..e03650e 100644
--- a/crypto/engine/CMakeLists.txt
+++ b/crypto/engine/CMakeLists.txt
@@ -6,5 +6,4 @@
   OBJECT
 
   engine.c
-  engine_error.c
 )
diff --git a/crypto/engine/engine_error.c b/crypto/engine/engine_error.c
deleted file mode 100644
index 9f65f70..0000000
--- a/crypto/engine/engine_error.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/engine.h>
-
-const ERR_STRING_DATA ENGINE_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_OPERATION_NOT_SUPPORTED), "OPERATION_NOT_SUPPORTED"},
-  {0, NULL},
-};
diff --git a/crypto/err/asn1.errordata b/crypto/err/asn1.errordata
new file mode 100644
index 0000000..bbe0e24
--- /dev/null
+++ b/crypto/err/asn1.errordata
@@ -0,0 +1,182 @@
+ASN1,function,133,ASN1_BIT_STRING_set_bit
+ASN1,function,117,ASN1_ENUMERATED_set
+ASN1,function,128,ASN1_ENUMERATED_to_BN
+ASN1,function,155,ASN1_GENERALIZEDTIME_adj
+ASN1,function,125,ASN1_INTEGER_set
+ASN1,function,130,ASN1_INTEGER_to_BN
+ASN1,function,140,ASN1_OBJECT_new
+ASN1,function,111,ASN1_PCTX_new
+ASN1,function,148,ASN1_STRING_TABLE_add
+ASN1,function,136,ASN1_STRING_set
+ASN1,function,124,ASN1_STRING_type_new
+ASN1,function,132,ASN1_TIME_adj
+ASN1,function,137,ASN1_UTCTIME_adj
+ASN1,function,103,ASN1_d2i_fp
+ASN1,function,101,ASN1_dup
+ASN1,function,158,ASN1_get_object
+ASN1,function,145,ASN1_i2d_bio
+ASN1,function,153,ASN1_i2d_fp
+ASN1,function,150,ASN1_item_d2i_fp
+ASN1,function,116,ASN1_item_dup
+ASN1,function,129,ASN1_item_ex_d2i
+ASN1,function,146,ASN1_item_i2d_bio
+ASN1,function,154,ASN1_item_i2d_fp
+ASN1,function,135,ASN1_item_pack
+ASN1,function,112,ASN1_item_unpack
+ASN1,function,138,ASN1_mbstring_ncopy
+ASN1,function,157,ASN1_pack_string
+ASN1,function,122,ASN1_seq_pack
+ASN1,function,134,ASN1_seq_unpack
+ASN1,function,106,ASN1_template_new
+ASN1,function,119,ASN1_unpack_string
+ASN1,function,127,BIO_new_NDEF
+ASN1,function,143,BN_to_ASN1_ENUMERATED
+ASN1,function,126,BN_to_ASN1_INTEGER
+ASN1,function,123,a2d_ASN1_OBJECT
+ASN1,function,160,a2i_ASN1_ENUMERATED
+ASN1,function,114,a2i_ASN1_INTEGER
+ASN1,function,102,a2i_ASN1_STRING
+ASN1,function,152,asn1_check_tlen
+ASN1,function,156,asn1_collate_primitive
+ASN1,function,115,asn1_collect
+ASN1,function,144,asn1_d2i_ex_primitive
+ASN1,function,108,asn1_d2i_read_bio
+ASN1,function,107,asn1_do_adb
+ASN1,function,109,asn1_ex_c2i
+ASN1,function,149,asn1_find_end
+ASN1,function,105,asn1_item_ex_combine_new
+ASN1,function,100,asn1_template_ex_d2i
+ASN1,function,141,asn1_template_noexp_d2i
+ASN1,function,142,c2i_ASN1_BIT_STRING
+ASN1,function,110,c2i_ASN1_INTEGER
+ASN1,function,118,c2i_ASN1_OBJECT
+ASN1,function,151,collect_data
+ASN1,function,139,d2i_ASN1_BOOLEAN
+ASN1,function,104,d2i_ASN1_OBJECT
+ASN1,function,120,d2i_ASN1_UINTEGER
+ASN1,function,147,d2i_ASN1_UTCTIME
+ASN1,function,159,d2i_ASN1_bytes
+ASN1,function,113,d2i_ASN1_type_bytes
+ASN1,function,131,i2d_ASN1_TIME
+ASN1,function,121,long_c2i
+ASN1,reason,101,ADDING_OBJECT
+ASN1,reason,158,ASN1_LENGTH_MISMATCH
+ASN1,reason,123,ASN1_PARSE_ERROR
+ASN1,reason,100,ASN1_SIG_PARSE_ERROR
+ASN1,reason,146,AUX_ERROR
+ASN1,reason,212,BAD_CLASS
+ASN1,reason,131,BAD_GET_ASN1_OBJECT_CALL
+ASN1,reason,116,BAD_OBJECT_HEADER
+ASN1,reason,115,BAD_PASSWORD_READ
+ASN1,reason,213,BAD_TAG
+ASN1,reason,205,BMPSTRING_IS_WRONG_LENGTH
+ASN1,reason,120,BN_LIB
+ASN1,reason,222,BOOLEAN_IS_WRONG_LENGTH
+ASN1,reason,178,BUFFER_TOO_SMALL
+ASN1,reason,211,CIPHER_HAS_NO_OBJECT_IDENTIFIER
+ASN1,reason,118,CONTEXT_NOT_INITIALISED
+ASN1,reason,109,DATA_IS_WRONG
+ASN1,reason,197,DECODE_ERROR
+ASN1,reason,165,DECODING_ERROR
+ASN1,reason,142,DEPTH_EXCEEDED
+ASN1,reason,207,ENCODE_ERROR
+ASN1,reason,194,ERROR_GETTING_TIME
+ASN1,reason,156,ERROR_LOADING_SECTION
+ASN1,reason,220,ERROR_PARSING_SET_ELEMENT
+ASN1,reason,191,ERROR_SETTING_CIPHER_PARAMS
+ASN1,reason,201,EXPECTING_AN_ASN1_SEQUENCE
+ASN1,reason,141,EXPECTING_AN_INTEGER
+ASN1,reason,192,EXPECTING_AN_OBJECT
+ASN1,reason,168,EXPECTING_A_BOOLEAN
+ASN1,reason,133,EXPECTING_A_TIME
+ASN1,reason,107,EXPLICIT_LENGTH_MISMATCH
+ASN1,reason,215,EXPLICIT_TAG_NOT_CONSTRUCTED
+ASN1,reason,148,FIELD_MISSING
+ASN1,reason,151,FIRST_NUM_TOO_LARGE
+ASN1,reason,105,HEADER_TOO_LONG
+ASN1,reason,136,ILLEGAL_BITSTRING_FORMAT
+ASN1,reason,216,ILLEGAL_BOOLEAN
+ASN1,reason,117,ILLEGAL_CHARACTERS
+ASN1,reason,104,ILLEGAL_FORMAT
+ASN1,reason,161,ILLEGAL_HEX
+ASN1,reason,145,ILLEGAL_IMPLICIT_TAG
+ASN1,reason,160,ILLEGAL_INTEGER
+ASN1,reason,174,ILLEGAL_NESTED_TAGGING
+ASN1,reason,127,ILLEGAL_NULL
+ASN1,reason,167,ILLEGAL_NULL_VALUE
+ASN1,reason,143,ILLEGAL_OBJECT
+ASN1,reason,204,ILLEGAL_OPTIONAL_ANY
+ASN1,reason,214,ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE
+ASN1,reason,108,ILLEGAL_TAGGED_ANY
+ASN1,reason,209,ILLEGAL_TIME_VALUE
+ASN1,reason,171,INTEGER_NOT_ASCII_FORMAT
+ASN1,reason,176,INTEGER_TOO_LARGE_FOR_LONG
+ASN1,reason,224,INVALID_BIT_STRING_BITS_LEFT
+ASN1,reason,170,INVALID_BMPSTRING_LENGTH
+ASN1,reason,152,INVALID_DIGIT
+ASN1,reason,128,INVALID_MIME_TYPE
+ASN1,reason,172,INVALID_MODIFIER
+ASN1,reason,129,INVALID_NUMBER
+ASN1,reason,183,INVALID_OBJECT_ENCODING
+ASN1,reason,125,INVALID_SEPARATOR
+ASN1,reason,189,INVALID_TIME_FORMAT
+ASN1,reason,179,INVALID_UNIVERSALSTRING_LENGTH
+ASN1,reason,106,INVALID_UTF8STRING
+ASN1,reason,175,IV_TOO_LARGE
+ASN1,reason,164,LENGTH_ERROR
+ASN1,reason,196,LIST_ERROR
+ASN1,reason,126,MALLOC_FAILURE
+ASN1,reason,102,MIME_NO_CONTENT_TYPE
+ASN1,reason,182,MIME_PARSE_ERROR
+ASN1,reason,166,MIME_SIG_PARSE_ERROR
+ASN1,reason,219,MISSING_ASN1_EOS
+ASN1,reason,159,MISSING_EOC
+ASN1,reason,137,MISSING_SECOND_NUMBER
+ASN1,reason,195,MISSING_VALUE
+ASN1,reason,112,MSTRING_NOT_UNIVERSAL
+ASN1,reason,153,MSTRING_WRONG_TAG
+ASN1,reason,162,NESTED_ASN1_ERROR
+ASN1,reason,135,NESTED_ASN1_STRING
+ASN1,reason,198,NON_HEX_CHARACTERS
+ASN1,reason,110,NOT_ASCII_FORMAT
+ASN1,reason,111,NOT_ENOUGH_DATA
+ASN1,reason,187,NO_CONTENT_TYPE
+ASN1,reason,190,NO_DEFAULT_DIGEST
+ASN1,reason,121,NO_MATCHING_CHOICE_TYPE
+ASN1,reason,186,NO_MULTIPART_BODY_FAILURE
+ASN1,reason,124,NO_MULTIPART_BOUNDARY
+ASN1,reason,206,NO_SIG_CONTENT_TYPE
+ASN1,reason,218,NULL_IS_WRONG_LENGTH
+ASN1,reason,154,OBJECT_NOT_ASCII_FORMAT
+ASN1,reason,157,ODD_NUMBER_OF_CHARS
+ASN1,reason,184,PRIVATE_KEY_HEADER_MISSING
+ASN1,reason,188,SECOND_NUMBER_TOO_LARGE
+ASN1,reason,147,SEQUENCE_LENGTH_MISMATCH
+ASN1,reason,122,SEQUENCE_NOT_CONSTRUCTED
+ASN1,reason,119,SEQUENCE_OR_SET_NEEDS_CONFIG
+ASN1,reason,208,SHORT_LINE
+ASN1,reason,217,SIG_INVALID_MIME_TYPE
+ASN1,reason,169,STREAMING_NOT_SUPPORTED
+ASN1,reason,130,STRING_TOO_LONG
+ASN1,reason,203,STRING_TOO_SHORT
+ASN1,reason,134,TAG_VALUE_TOO_HIGH
+ASN1,reason,139,THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD
+ASN1,reason,138,TIME_NOT_ASCII_FORMAT
+ASN1,reason,163,TOO_LONG
+ASN1,reason,149,TYPE_NOT_CONSTRUCTED
+ASN1,reason,223,TYPE_NOT_PRIMITIVE
+ASN1,reason,132,UNABLE_TO_DECODE_RSA_KEY
+ASN1,reason,210,UNABLE_TO_DECODE_RSA_PRIVATE_KEY
+ASN1,reason,173,UNEXPECTED_EOC
+ASN1,reason,150,UNIVERSALSTRING_IS_WRONG_LENGTH
+ASN1,reason,113,UNKNOWN_FORMAT
+ASN1,reason,103,UNKNOWN_OBJECT_TYPE
+ASN1,reason,193,UNKNOWN_PUBLIC_KEY_TYPE
+ASN1,reason,144,UNKNOWN_TAG
+ASN1,reason,199,UNSUPPORTED_ANY_DEFINED_BY_TYPE
+ASN1,reason,185,UNSUPPORTED_CIPHER
+ASN1,reason,181,UNSUPPORTED_ENCRYPTION_ALGORITHM
+ASN1,reason,177,UNSUPPORTED_PUBLIC_KEY_TYPE
+ASN1,reason,155,UNSUPPORTED_TYPE
+ASN1,reason,221,WRONG_TAG
+ASN1,reason,140,WRONG_TYPE
diff --git a/crypto/err/bio.errordata b/crypto/err/bio.errordata
new file mode 100644
index 0000000..ae0ca4a
--- /dev/null
+++ b/crypto/err/bio.errordata
@@ -0,0 +1,38 @@
+BIO,function,112,BIO_callback_ctrl
+BIO,function,115,BIO_ctrl
+BIO,function,105,BIO_new
+BIO,function,103,BIO_new_file
+BIO,function,107,BIO_new_mem_buf
+BIO,function,118,BIO_zero_copy_get_read_buf
+BIO,function,119,BIO_zero_copy_get_read_buf_done
+BIO,function,116,BIO_zero_copy_get_write_buf
+BIO,function,117,BIO_zero_copy_get_write_buf_done
+BIO,function,101,bio_ctrl
+BIO,function,106,bio_io
+BIO,function,113,bio_ip_and_port_to_socket_and_addr
+BIO,function,100,bio_make_pair
+BIO,function,114,bio_write
+BIO,function,102,buffer_ctrl
+BIO,function,110,conn_ctrl
+BIO,function,109,conn_state
+BIO,function,111,file_ctrl
+BIO,function,104,file_read
+BIO,function,108,mem_write
+BIO,reason,110,ASN1_OBJECT_TOO_LONG
+BIO,reason,109,BAD_FOPEN_MODE
+BIO,reason,107,BROKEN_PIPE
+BIO,reason,105,CONNECT_ERROR
+BIO,reason,113,ERROR_SETTING_NBIO
+BIO,reason,111,INVALID_ARGUMENT
+BIO,reason,103,IN_USE
+BIO,reason,106,KEEPALIVE
+BIO,reason,108,NBIO_CONNECT_ERROR
+BIO,reason,102,NO_HOSTNAME_SPECIFIED
+BIO,reason,101,NO_PORT_SPECIFIED
+BIO,reason,115,NO_SUCH_FILE
+BIO,reason,116,NULL_PARAMETER
+BIO,reason,114,SYS_LIB
+BIO,reason,117,UNABLE_TO_CREATE_SOCKET
+BIO,reason,104,UNINITIALIZED
+BIO,reason,100,UNSUPPORTED_METHOD
+BIO,reason,112,WRITE_TO_READ_ONLY_BIO
diff --git a/crypto/err/bn.errordata b/crypto/err/bn.errordata
new file mode 100644
index 0000000..2d58be7
--- /dev/null
+++ b/crypto/err/bn.errordata
@@ -0,0 +1,42 @@
+BN,function,110,BN_CTX_get
+BN,function,120,BN_CTX_new
+BN,function,117,BN_CTX_start
+BN,function,112,BN_bn2dec
+BN,function,100,BN_bn2hex
+BN,function,113,BN_div
+BN,function,114,BN_div_recp
+BN,function,102,BN_exp
+BN,function,122,BN_generate_dsa_nonce
+BN,function,123,BN_generate_prime_ex
+BN,function,109,BN_mod_exp2_mont
+BN,function,108,BN_mod_exp_mont
+BN,function,115,BN_mod_exp_mont_consttime
+BN,function,116,BN_mod_exp_mont_word
+BN,function,111,BN_mod_inverse
+BN,function,121,BN_mod_inverse_no_branch
+BN,function,119,BN_mod_lshift_quick
+BN,function,104,BN_mod_sqrt
+BN,function,101,BN_new
+BN,function,105,BN_rand
+BN,function,106,BN_rand_range
+BN,function,124,BN_sqrt
+BN,function,118,BN_usub
+BN,function,107,bn_wexpand
+BN,function,103,mod_exp_recp
+BN,reason,112,ARG2_LT_ARG3
+BN,reason,109,BAD_RECIPROCAL
+BN,reason,113,BIGNUM_TOO_LONG
+BN,reason,115,BITS_TOO_SMALL
+BN,reason,107,CALLED_WITH_EVEN_MODULUS
+BN,reason,106,DIV_BY_ZERO
+BN,reason,108,EXPAND_ON_STATIC_BIGNUM_DATA
+BN,reason,102,INPUT_NOT_REDUCED
+BN,reason,111,INVALID_RANGE
+BN,reason,116,NEGATIVE_NUMBER
+BN,reason,100,NOT_A_SQUARE
+BN,reason,105,NOT_INITIALIZED
+BN,reason,104,NO_INVERSE
+BN,reason,114,PRIVATE_KEY_TOO_LARGE
+BN,reason,110,P_IS_NOT_PRIME
+BN,reason,101,TOO_MANY_ITERATIONS
+BN,reason,103,TOO_MANY_TEMPORARY_VARIABLES
diff --git a/crypto/err/buf.errordata b/crypto/err/buf.errordata
new file mode 100644
index 0000000..8be5776
--- /dev/null
+++ b/crypto/err/buf.errordata
@@ -0,0 +1,4 @@
+BUF,function,100,BUF_MEM_new
+BUF,function,103,BUF_memdup
+BUF,function,102,BUF_strndup
+BUF,function,101,buf_mem_grow
diff --git a/crypto/err/cipher.errordata b/crypto/err/cipher.errordata
new file mode 100644
index 0000000..69ff39b
--- /dev/null
+++ b/crypto/err/cipher.errordata
@@ -0,0 +1,57 @@
+CIPHER,function,108,EVP_AEAD_CTX_init
+CIPHER,function,107,EVP_AEAD_CTX_open
+CIPHER,function,109,EVP_AEAD_CTX_seal
+CIPHER,function,106,EVP_CIPHER_CTX_copy
+CIPHER,function,103,EVP_CIPHER_CTX_ctrl
+CIPHER,function,122,EVP_CIPHER_CTX_set_key_length
+CIPHER,function,100,EVP_CipherInit_ex
+CIPHER,function,102,EVP_DecryptFinal_ex
+CIPHER,function,101,EVP_EncryptFinal_ex
+CIPHER,function,112,aead_aes_gcm_init
+CIPHER,function,111,aead_aes_gcm_open
+CIPHER,function,110,aead_aes_gcm_seal
+CIPHER,function,120,aead_aes_key_wrap_init
+CIPHER,function,121,aead_aes_key_wrap_open
+CIPHER,function,119,aead_aes_key_wrap_seal
+CIPHER,function,113,aead_chacha20_poly1305_init
+CIPHER,function,114,aead_chacha20_poly1305_open
+CIPHER,function,115,aead_chacha20_poly1305_seal
+CIPHER,function,116,aead_rc4_md5_tls_init
+CIPHER,function,118,aead_rc4_md5_tls_open
+CIPHER,function,117,aead_rc4_md5_tls_seal
+CIPHER,function,130,aead_ssl3_ensure_cipher_init
+CIPHER,function,129,aead_ssl3_init
+CIPHER,function,127,aead_ssl3_open
+CIPHER,function,128,aead_ssl3_seal
+CIPHER,function,126,aead_tls_ensure_cipher_init
+CIPHER,function,123,aead_tls_init
+CIPHER,function,124,aead_tls_open
+CIPHER,function,125,aead_tls_seal
+CIPHER,function,104,aes_init_key
+CIPHER,function,105,aesni_init_key
+CIPHER,reason,101,AES_KEY_SETUP_FAILED
+CIPHER,reason,107,BAD_DECRYPT
+CIPHER,reason,111,BAD_KEY_LENGTH
+CIPHER,reason,112,BUFFER_TOO_SMALL
+CIPHER,reason,105,CTRL_NOT_IMPLEMENTED
+CIPHER,reason,109,CTRL_OPERATION_NOT_IMPLEMENTED
+CIPHER,reason,103,DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH
+CIPHER,reason,104,INITIALIZATION_ERROR
+CIPHER,reason,102,INPUT_NOT_INITIALIZED
+CIPHER,reason,118,INVALID_AD
+CIPHER,reason,117,INVALID_AD_SIZE
+CIPHER,reason,123,INVALID_KEY_LENGTH
+CIPHER,reason,125,INVALID_NONCE_SIZE
+CIPHER,reason,124,INVALID_OPERATION
+CIPHER,reason,116,IV_TOO_LARGE
+CIPHER,reason,106,NO_CIPHER_SET
+CIPHER,reason,113,OUTPUT_ALIASES_INPUT
+CIPHER,reason,110,TAG_TOO_LARGE
+CIPHER,reason,115,TOO_LARGE
+CIPHER,reason,121,UNSUPPORTED_AD_SIZE
+CIPHER,reason,120,UNSUPPORTED_INPUT_SIZE
+CIPHER,reason,114,UNSUPPORTED_KEY_SIZE
+CIPHER,reason,122,UNSUPPORTED_NONCE_SIZE
+CIPHER,reason,119,UNSUPPORTED_TAG_SIZE
+CIPHER,reason,100,WRAP_MODE_NOT_ALLOWED
+CIPHER,reason,108,WRONG_FINAL_BLOCK_LENGTH
diff --git a/crypto/err/conf.errordata b/crypto/err/conf.errordata
new file mode 100644
index 0000000..f0c900e
--- /dev/null
+++ b/crypto/err/conf.errordata
@@ -0,0 +1,10 @@
+CONF,function,100,CONF_parse_list
+CONF,function,103,NCONF_load
+CONF,function,102,def_load_bio
+CONF,function,101,str_copy
+CONF,reason,101,LIST_CANNOT_BE_NULL
+CONF,reason,105,MISSING_CLOSE_SQUARE_BRACKET
+CONF,reason,100,MISSING_EQUAL_SIGN
+CONF,reason,102,NO_CLOSE_BRACE
+CONF,reason,104,UNABLE_TO_CREATE_NEW_SECTION
+CONF,reason,103,VARIABLE_HAS_NO_VALUE
diff --git a/crypto/err/crypto.errordata b/crypto/err/crypto.errordata
new file mode 100644
index 0000000..0b85b2b
--- /dev/null
+++ b/crypto/err/crypto.errordata
@@ -0,0 +1,4 @@
+CRYPTO,function,100,CRYPTO_set_ex_data
+CRYPTO,function,101,get_class
+CRYPTO,function,103,get_func_pointers
+CRYPTO,function,102,get_new_index
diff --git a/crypto/err/dh.errordata b/crypto/err/dh.errordata
new file mode 100644
index 0000000..f29ec2c
--- /dev/null
+++ b/crypto/err/dh.errordata
@@ -0,0 +1,8 @@
+DH,function,103,DH_new_method
+DH,function,102,compute_key
+DH,function,101,generate_key
+DH,function,100,generate_parameters
+DH,reason,101,BAD_GENERATOR
+DH,reason,100,INVALID_PUBKEY
+DH,reason,102,MODULUS_TOO_LARGE
+DH,reason,103,NO_PRIVATE_VALUE
diff --git a/crypto/err/digest.errordata b/crypto/err/digest.errordata
new file mode 100644
index 0000000..95a3622
--- /dev/null
+++ b/crypto/err/digest.errordata
@@ -0,0 +1,3 @@
+DIGEST,function,100,EVP_DigestInit_ex
+DIGEST,function,101,EVP_MD_CTX_copy_ex
+DIGEST,reason,100,INPUT_NOT_INITIALIZED
diff --git a/crypto/err/dsa.errordata b/crypto/err/dsa.errordata
new file mode 100644
index 0000000..e0166e1
--- /dev/null
+++ b/crypto/err/dsa.errordata
@@ -0,0 +1,9 @@
+DSA,function,103,DSA_new_method
+DSA,function,102,dsa_sig_cb
+DSA,function,100,sign
+DSA,function,104,sign_setup
+DSA,function,101,verify
+DSA,reason,101,BAD_Q_VALUE
+DSA,reason,103,MISSING_PARAMETERS
+DSA,reason,102,MODULUS_TOO_LARGE
+DSA,reason,100,NEED_NEW_SETUP_VALUES
diff --git a/crypto/err/ec.errordata b/crypto/err/ec.errordata
new file mode 100644
index 0000000..68b5ba2
--- /dev/null
+++ b/crypto/err/ec.errordata
@@ -0,0 +1,86 @@
+EC,function,115,EC_GROUP_copy
+EC,function,158,EC_GROUP_get_curve_GFp
+EC,function,148,EC_GROUP_get_degree
+EC,function,107,EC_GROUP_new_by_curve_name
+EC,function,123,EC_KEY_check_key
+EC,function,135,EC_KEY_copy
+EC,function,155,EC_KEY_generate_key
+EC,function,105,EC_KEY_new_method
+EC,function,154,EC_KEY_set_public_key_affine_coordinates
+EC,function,157,EC_POINT_add
+EC,function,116,EC_POINT_cmp
+EC,function,138,EC_POINT_copy
+EC,function,132,EC_POINT_dbl
+EC,function,118,EC_POINT_dup
+EC,function,127,EC_POINT_get_affine_coordinates_GFp
+EC,function,119,EC_POINT_invert
+EC,function,126,EC_POINT_is_at_infinity
+EC,function,139,EC_POINT_is_on_curve
+EC,function,112,EC_POINT_make_affine
+EC,function,136,EC_POINT_new
+EC,function,125,EC_POINT_oct2point
+EC,function,137,EC_POINT_point2oct
+EC,function,153,EC_POINT_set_affine_coordinates_GFp
+EC,function,110,EC_POINT_set_compressed_coordinates_GFp
+EC,function,144,EC_POINT_set_to_infinity
+EC,function,145,EC_POINTs_make_affine
+EC,function,146,compute_wNAF
+EC,function,150,d2i_ECPKParameters
+EC,function,142,d2i_ECParameters
+EC,function,151,d2i_ECPrivateKey
+EC,function,101,ec_GFp_mont_field_decode
+EC,function,106,ec_GFp_mont_field_encode
+EC,function,117,ec_GFp_mont_field_mul
+EC,function,130,ec_GFp_mont_field_set_to_one
+EC,function,111,ec_GFp_mont_field_sqr
+EC,function,143,ec_GFp_mont_group_set_curve
+EC,function,149,ec_GFp_simple_group_check_discriminant
+EC,function,140,ec_GFp_simple_group_set_curve
+EC,function,104,ec_GFp_simple_make_affine
+EC,function,152,ec_GFp_simple_oct2point
+EC,function,147,ec_GFp_simple_point2oct
+EC,function,103,ec_GFp_simple_point_get_affine_coordinates
+EC,function,120,ec_GFp_simple_point_set_affine_coordinates
+EC,function,121,ec_GFp_simple_points_make_affine
+EC,function,156,ec_GFp_simple_set_compressed_coordinates
+EC,function,109,ec_asn1_group2pkparameters
+EC,function,133,ec_asn1_pkparameters2group
+EC,function,108,ec_group_new
+EC,function,131,ec_group_new_curve_GFp
+EC,function,102,ec_group_new_from_data
+EC,function,128,ec_point_set_Jprojective_coordinates_GFp
+EC,function,100,ec_pre_comp_new
+EC,function,114,ec_wNAF_mul
+EC,function,124,ec_wNAF_precompute_mult
+EC,function,134,i2d_ECPKParameters
+EC,function,113,i2d_ECParameters
+EC,function,141,i2d_ECPrivateKey
+EC,function,122,i2o_ECPublicKey
+EC,function,129,o2i_ECPublicKey
+EC,reason,108,BUFFER_TOO_SMALL
+EC,reason,102,COORDINATES_OUT_OF_RANGE
+EC,reason,109,D2I_ECPKPARAMETERS_FAILURE
+EC,reason,124,EC_GROUP_NEW_BY_NAME_FAILURE
+EC,reason,116,GF2M_NOT_SUPPORTED
+EC,reason,106,GROUP2PKPARAMETERS_FAILURE
+EC,reason,123,I2D_ECPKPARAMETERS_FAILURE
+EC,reason,122,INCOMPATIBLE_OBJECTS
+EC,reason,112,INVALID_COMPRESSED_POINT
+EC,reason,115,INVALID_COMPRESSION_BIT
+EC,reason,107,INVALID_ENCODING
+EC,reason,114,INVALID_FIELD
+EC,reason,110,INVALID_FORM
+EC,reason,125,INVALID_GROUP_ORDER
+EC,reason,111,INVALID_PRIVATE_KEY
+EC,reason,113,MISSING_PARAMETERS
+EC,reason,105,MISSING_PRIVATE_KEY
+EC,reason,101,NON_NAMED_CURVE
+EC,reason,104,NOT_INITIALIZED
+EC,reason,100,PKPARAMETERS2GROUP_FAILURE
+EC,reason,103,POINT_AT_INFINITY
+EC,reason,117,POINT_IS_NOT_ON_CURVE
+EC,reason,126,SLOT_FULL
+EC,reason,121,UNDEFINED_GENERATOR
+EC,reason,119,UNKNOWN_GROUP
+EC,reason,118,UNKNOWN_ORDER
+EC,reason,120,WRONG_ORDER
diff --git a/crypto/err/ecdh.errordata b/crypto/err/ecdh.errordata
new file mode 100644
index 0000000..2f47a91
--- /dev/null
+++ b/crypto/err/ecdh.errordata
@@ -0,0 +1,4 @@
+ECDH,function,100,ECDH_compute_key
+ECDH,reason,101,KDF_FAILED
+ECDH,reason,102,NO_PRIVATE_VALUE
+ECDH,reason,100,POINT_ARITHMETIC_FAILURE
diff --git a/crypto/err/ecdsa.errordata b/crypto/err/ecdsa.errordata
new file mode 100644
index 0000000..9ddc284
--- /dev/null
+++ b/crypto/err/ecdsa.errordata
@@ -0,0 +1,11 @@
+ECDSA,function,103,ECDSA_do_sign_ex
+ECDSA,function,101,ECDSA_do_verify
+ECDSA,function,104,ECDSA_sign_ex
+ECDSA,function,102,ECDSA_sign_setup
+ECDSA,function,100,digest_to_bn
+ECDSA,function,105,ecdsa_sign_setup
+ECDSA,reason,103,BAD_SIGNATURE
+ECDSA,reason,102,MISSING_PARAMETERS
+ECDSA,reason,101,NEED_NEW_SETUP_VALUES
+ECDSA,reason,104,NOT_IMPLEMENTED
+ECDSA,reason,100,RANDOM_NUMBER_GENERATION_FAILED
diff --git a/crypto/err/engine.errordata b/crypto/err/engine.errordata
new file mode 100644
index 0000000..1185e88
--- /dev/null
+++ b/crypto/err/engine.errordata
@@ -0,0 +1 @@
+ENGINE,reason,100,OPERATION_NOT_SUPPORTED
diff --git a/crypto/err/err.c b/crypto/err/err.c
index ec2062e..6ca7f23 100644
--- a/crypto/err/err.c
+++ b/crypto/err/err.c
@@ -423,40 +423,168 @@
   }
 }
 
-/* err_component_error_string returns the error string associated with
- * |packed_error|, which must be of a special form matching the keys inserted
- * into the error hash table. */
-static const char *err_component_error_string(uint32_t packed_error) {
-  ERR_STRING_DATA *p;
+#include "err_data.h"
 
-  err_fns_check();
-  p = ERRFN(get_item)(packed_error);
+// err_string_cmp is a compare function for searching error values with
+// |bsearch| in |err_string_lookup|.
+static int err_string_cmp(const void *a, const void *b) {
+  const uint32_t a_key = *((const uint32_t*) a) >> 15;
+  const uint32_t b_key = *((const uint32_t*) b) >> 15;
 
-  if (p == NULL) {
-    return NULL;
+  if (a_key < b_key) {
+    return -1;
+  } else if (a_key > b_key) {
+    return 1;
+  } else {
+    return 0;
   }
-  return p->string;
 }
 
+/* err_string_lookup looks up the string associated with |lib| and |key| in
+ * |values| and |string_data|. It returns the string or NULL if not found. */
+static const char *err_string_lookup(uint32_t lib, uint32_t key,
+                                     const uint32_t *values,
+                                     size_t num_values,
+                                     const char *string_data) {
+  /* |values| points to data in err_data.h, which is generated by
+   * err_data_generate.go. It's an array of uint32_t values. Each value has the
+   * following structure:
+   *   | lib  |    key    |    offset     |
+   *   |6 bits|  11 bits  |    15 bits    |
+   *
+   * The |lib| value is a library identifier: one of the |ERR_LIB_*| values.
+   * The |key| is either a function or a reason code, depending on the context.
+   * The |offset| is the number of bytes from the start of |string_data| where
+   * the (NUL terminated) string for this value can be found.
+   *
+   * Values are sorted based on treating the |lib| and |key| part as an
+   * unsigned integer. */
+  if (lib >= (1 << 6) || key >= (1 << 11)) {
+    return NULL;
+  }
+  uint32_t search_key = lib << 26 | key << 15;
+  const uint32_t *result = bsearch(&search_key, values, num_values,
+                                   sizeof(uint32_t), err_string_cmp);
+  if (result == NULL) {
+    return NULL;
+  }
+
+  return &string_data[(*result) & 0x7fff];
+}
+
+static const char *const kLibraryNames[ERR_NUM_LIBS] = {
+    "invalid library (0)",
+    "unknown library",                            /* ERR_LIB_NONE */
+    "system library",                             /* ERR_LIB_SYS */
+    "bignum routines",                            /* ERR_LIB_BN */
+    "RSA routines",                               /* ERR_LIB_RSA */
+    "Diffie-Hellman routines",                    /* ERR_LIB_DH */
+    "public key routines",                        /* ERR_LIB_EVP */
+    "memory buffer routines",                     /* ERR_LIB_BUF */
+    "object identifier routines",                 /* ERR_LIB_OBJ */
+    "PEM routines",                               /* ERR_LIB_PEM */
+    "DSA routines",                               /* ERR_LIB_DSA */
+    "X.509 certificate routines",                 /* ERR_LIB_X509 */
+    "ASN.1 encoding routines",                    /* ERR_LIB_ASN1 */
+    "configuration file routines",                /* ERR_LIB_CONF */
+    "common libcrypto routines",                  /* ERR_LIB_CRYPTO */
+    "elliptic curve routines",                    /* ERR_LIB_EC */
+    "SSL routines",                               /* ERR_LIB_SSL */
+    "BIO routines",                               /* ERR_LIB_BIO */
+    "PKCS7 routines",                             /* ERR_LIB_PKCS7 */
+    "PKCS8 routines",                             /* ERR_LIB_PKCS8 */
+    "X509 V3 routines",                           /* ERR_LIB_X509V3 */
+    "random number generator",                    /* ERR_LIB_RAND */
+    "ENGINE routines",                            /* ERR_LIB_ENGINE */
+    "OCSP routines",                              /* ERR_LIB_OCSP */
+    "UI routines",                                /* ERR_LIB_UI */
+    "COMP routines",                              /* ERR_LIB_COMP */
+    "ECDSA routines",                             /* ERR_LIB_ECDSA */
+    "ECDH routines",                              /* ERR_LIB_ECDH */
+    "HMAC routines",                              /* ERR_LIB_HMAC */
+    "Digest functions",                           /* ERR_LIB_DIGEST */
+    "Cipher functions",                           /* ERR_LIB_CIPHER */
+    "User defined functions",                     /* ERR_LIB_USER */
+    "HKDF functions",                             /* ERR_LIB_HKDF */
+};
+
 const char *ERR_lib_error_string(uint32_t packed_error) {
-  return err_component_error_string(ERR_PACK(ERR_GET_LIB(packed_error), 0, 0));
+  const uint32_t lib = ERR_GET_LIB(packed_error);
+
+  if (lib >= ERR_NUM_LIBS) {
+    return NULL;
+  }
+  return kLibraryNames[lib];
 }
 
 const char *ERR_func_error_string(uint32_t packed_error) {
-  return err_component_error_string(
-      ERR_PACK(ERR_GET_LIB(packed_error), ERR_GET_FUNC(packed_error), 0));
+  const uint32_t lib = ERR_GET_LIB(packed_error);
+  const uint32_t func = ERR_GET_FUNC(packed_error);
+
+  if (lib == ERR_LIB_SYS) {
+    switch (func) {
+      case SYS_F_fopen:
+        return "fopen";
+      case SYS_F_fclose:
+        return "fclose";
+      case SYS_F_fread:
+        return "fread";
+      case SYS_F_fwrite:
+        return "fwrite";
+      case SYS_F_socket:
+        return "socket";
+      case SYS_F_setsockopt:
+        return "setsockopt";
+      case SYS_F_connect:
+        return "connect";
+      case SYS_F_getaddrinfo:
+        return "getaddrinfo";
+      default:
+        return NULL;
+    }
+  }
+
+  return err_string_lookup(ERR_GET_LIB(packed_error),
+                           ERR_GET_FUNC(packed_error), kFunctionValues,
+                           sizeof(kFunctionValues) / sizeof(kFunctionValues[0]),
+                           kFunctionStringData);
 }
 
 const char *ERR_reason_error_string(uint32_t packed_error) {
-  const char *reason_str = err_component_error_string(
-      ERR_PACK(ERR_GET_LIB(packed_error), 0, ERR_GET_REASON(packed_error)));
+  const uint32_t lib = ERR_GET_LIB(packed_error);
+  const uint32_t reason = ERR_GET_REASON(packed_error);
 
-  if (reason_str != NULL) {
-    return reason_str;
+  if (lib == ERR_LIB_SYS) {
+    if (reason < 127) {
+      return strerror(reason);
+    }
+    return NULL;
   }
 
-  return err_component_error_string(
-      ERR_PACK(0, 0, ERR_GET_REASON(packed_error)));
+  if (reason < ERR_NUM_LIBS) {
+    return kLibraryNames[reason];
+  }
+
+  if (reason < 100) {
+    switch (reason) {
+      case ERR_R_MALLOC_FAILURE:
+        return "malloc failure";
+      case ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED:
+        return "function should not have been called";
+      case ERR_R_PASSED_NULL_PARAMETER:
+        return "passed a null parameter";
+      case ERR_R_INTERNAL_ERROR:
+        return "internal error";
+      case ERR_R_OVERFLOW:
+        return "overflow";
+      default:
+        return NULL;
+    }
+  }
+
+  return err_string_lookup(lib, reason, kReasonValues,
+                           sizeof(kReasonValues) / sizeof(kReasonValues[0]),
+                           kReasonStringData);
 }
 
 void ERR_print_errors_cb(ERR_print_errors_callback_t callback, void *ctx) {
@@ -648,162 +776,8 @@
   return 0;
 }
 
-static const char *const kLibraryNames[ERR_NUM_LIBS] = {
-    "invalid library (0)",
-    "unknown library",                            /* ERR_LIB_NONE */
-    "system library",                             /* ERR_LIB_SYS */
-    "bignum routines",                            /* ERR_LIB_BN */
-    "RSA routines",                               /* ERR_LIB_RSA */
-    "Diffie-Hellman routines",                    /* ERR_LIB_DH */
-    "public key routines",                        /* ERR_LIB_EVP */
-    "memory buffer routines",                     /* ERR_LIB_BUF */
-    "object identifier routines",                 /* ERR_LIB_OBJ */
-    "PEM routines",                               /* ERR_LIB_PEM */
-    "DSA routines",                               /* ERR_LIB_DSA */
-    "X.509 certificate routines",                 /* ERR_LIB_X509 */
-    "ASN.1 encoding routines",                    /* ERR_LIB_ASN1 */
-    "configuration file routines",                /* ERR_LIB_CONF */
-    "common libcrypto routines",                  /* ERR_LIB_CRYPTO */
-    "elliptic curve routines",                    /* ERR_LIB_EC */
-    "SSL routines",                               /* ERR_LIB_SSL */
-    "BIO routines",                               /* ERR_LIB_BIO */
-    "PKCS7 routines",                             /* ERR_LIB_PKCS7 */
-    "PKCS8 routines",                             /* ERR_LIB_PKCS8 */
-    "X509 V3 routines",                           /* ERR_LIB_X509V3 */
-    "random number generator",                    /* ERR_LIB_RAND */
-    "ENGINE routines",                            /* ERR_LIB_ENGINE */
-    "OCSP routines",                              /* ERR_LIB_OCSP */
-    "UI routines",                                /* ERR_LIB_UI */
-    "COMP routines",                              /* ERR_LIB_COMP */
-    "ECDSA routines",                             /* ERR_LIB_ECDSA */
-    "ECDH routines",                              /* ERR_LIB_ECDH */
-    "HMAC routines",                              /* ERR_LIB_HMAC */
-    "Digest functions",                           /* ERR_LIB_DIGEST */
-    "Cipher functions",                           /* ERR_LIB_CIPHER */
-    "User defined functions",                     /* ERR_LIB_USER */
-    "HKDF functions",                             /* ERR_LIB_HKDF */
-};
+void ERR_load_crypto_strings(void) {}
 
-#define NUM_SYS_ERRNOS 127
-
-/* kStaticErrors provides storage for ERR_STRING_DATA values that are created
- * at init time because we assume that ERR_STRING_DATA structures aren't
- * allocated on the heap. */
-static ERR_STRING_DATA kStaticErrors[ERR_NUM_LIBS * 2 + NUM_SYS_ERRNOS];
-
-static const ERR_STRING_DATA kGlobalErrors[] = {
-    {ERR_R_MALLOC_FAILURE, "malloc failure"},
-    {ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED, "function should not be called"},
-    {ERR_R_PASSED_NULL_PARAMETER, "passed a null parameter"},
-    {ERR_R_INTERNAL_ERROR, "internal error"},
-    {ERR_R_OVERFLOW, "overflow"},
-
-    {ERR_PACK(ERR_LIB_SYS, SYS_F_fopen, 0), "fopen"},
-    {ERR_PACK(ERR_LIB_SYS, SYS_F_fclose, 0), "fclose"},
-    {ERR_PACK(ERR_LIB_SYS, SYS_F_fread, 0), "fread"},
-    {ERR_PACK(ERR_LIB_SYS, SYS_F_fwrite, 0), "fwrite"},
-    {ERR_PACK(ERR_LIB_SYS, SYS_F_socket, 0), "socket"},
-    {ERR_PACK(ERR_LIB_SYS, SYS_F_setsockopt, 0), "setsockopt"},
-    {ERR_PACK(ERR_LIB_SYS, SYS_F_connect, 0), "connect"},
-    {ERR_PACK(ERR_LIB_SYS, SYS_F_getaddrinfo, 0), "getaddrinfo"},
-
-    {0, NULL},
-};
-
-
-extern const ERR_STRING_DATA ASN1_error_string_data[];
-extern const ERR_STRING_DATA BIO_error_string_data[];
-extern const ERR_STRING_DATA BN_error_string_data[];
-extern const ERR_STRING_DATA BUF_error_string_data[];
-extern const ERR_STRING_DATA CIPHER_error_string_data[];
-extern const ERR_STRING_DATA CONF_error_string_data[];
-extern const ERR_STRING_DATA CRYPTO_error_string_data[];
-extern const ERR_STRING_DATA DH_error_string_data[];
-extern const ERR_STRING_DATA DIGEST_error_string_data[];
-extern const ERR_STRING_DATA DSA_error_string_data[];
-extern const ERR_STRING_DATA ECDH_error_string_data[];
-extern const ERR_STRING_DATA ECDSA_error_string_data[];
-extern const ERR_STRING_DATA EC_error_string_data[];
-extern const ERR_STRING_DATA ENGINE_error_string_data[];
-extern const ERR_STRING_DATA EVP_error_string_data[];
-extern const ERR_STRING_DATA HKDF_error_string_data[];
-extern const ERR_STRING_DATA OBJ_error_string_data[];
-extern const ERR_STRING_DATA PEM_error_string_data[];
-extern const ERR_STRING_DATA PKCS8_error_string_data[];
-extern const ERR_STRING_DATA RSA_error_string_data[];
-extern const ERR_STRING_DATA X509V3_error_string_data[];
-extern const ERR_STRING_DATA X509_error_string_data[];
-
-static void err_load_strings(void) {
-  unsigned i, j = 0;
-
-  err_fns_check();
-
-  /* This loop loads strings for the libraries for the ERR_R_*_LIB
-   * reasons. */
-  for (i = ERR_LIB_NONE; i < ERR_NUM_LIBS; i++) {
-    ERR_STRING_DATA *data = &kStaticErrors[j++];
-    data->string = kLibraryNames[i];
-    data->error = ERR_PACK(i, 0, 0);
-    ERRFN(set_item)(data);
-
-    data = &kStaticErrors[j++];
-    data->string = kLibraryNames[i];
-    data->error = ERR_PACK(0, 0, i);
-    ERRFN(set_item)(data);
-  }
-
-  for (i = 1; i < 1 + NUM_SYS_ERRNOS; i++) {
-    /* The "SYS" library sets errno values as the reason for its errors.
-     * Thus we load the first |NUM_SYS_ERRNOS| errno strings as the
-     * reason strings for that library. */
-
-    ERR_STRING_DATA *data = &kStaticErrors[j++];
-    data->string = strerror(i);
-    data->error = ERR_PACK(ERR_LIB_SYS, 0, i);
-    ERRFN(set_item)(data);
-  }
-
-  ERR_load_strings(kGlobalErrors);
-
-  ERR_load_strings(ASN1_error_string_data);
-  ERR_load_strings(BIO_error_string_data);
-  ERR_load_strings(BN_error_string_data);
-  ERR_load_strings(BUF_error_string_data);
-  ERR_load_strings(CIPHER_error_string_data);
-  ERR_load_strings(CONF_error_string_data);
-  ERR_load_strings(CRYPTO_error_string_data);
-  ERR_load_strings(DH_error_string_data);
-  ERR_load_strings(DIGEST_error_string_data);
-  ERR_load_strings(DSA_error_string_data);
-  ERR_load_strings(ECDH_error_string_data);
-  ERR_load_strings(ECDSA_error_string_data);
-  ERR_load_strings(EC_error_string_data);
-  ERR_load_strings(ENGINE_error_string_data);
-  ERR_load_strings(EVP_error_string_data);
-  ERR_load_strings(HKDF_error_string_data);
-  ERR_load_strings(OBJ_error_string_data);
-  ERR_load_strings(PEM_error_string_data);
-  ERR_load_strings(PKCS8_error_string_data);
-  ERR_load_strings(RSA_error_string_data);
-  ERR_load_strings(X509V3_error_string_data);
-  ERR_load_strings(X509_error_string_data);
-}
-
-void ERR_load_strings(const ERR_STRING_DATA *str) {
-  err_fns_check();
-
-  while (str->error) {
-    ERRFN(set_item)(str);
-    str++;
-  }
-}
-
-void ERR_load_crypto_strings(void) { err_load_strings(); }
-
-void ERR_free_strings(void) {
-  err_fns_check();
-  ERRFN(shutdown)(err_state_free);
-}
+void ERR_free_strings(void) {}
 
 void ERR_load_BIO_strings(void) {}
diff --git a/crypto/err/err_data.h b/crypto/err/err_data.h
new file mode 100644
index 0000000..61323d4
--- /dev/null
+++ b/crypto/err/err_data.h
@@ -0,0 +1,1590 @@
+/* Copyright (c) 2015, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+ /* This file was generated by err_data_generate.go. */
+
+#include <openssl/base.h>
+#include <openssl/type_check.h>
+
+
+OPENSSL_COMPILE_ASSERT(ERR_LIB_NONE == 1, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_SYS == 2, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_BN == 3, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_RSA == 4, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_DH == 5, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_EVP == 6, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_BUF == 7, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_OBJ == 8, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_PEM == 9, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_DSA == 10, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_X509 == 11, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_ASN1 == 12, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_CONF == 13, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_CRYPTO == 14, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_EC == 15, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_SSL == 16, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_BIO == 17, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_PKCS7 == 18, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_PKCS8 == 19, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_X509V3 == 20, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_RAND == 21, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_ENGINE == 22, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_OCSP == 23, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_UI == 24, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_COMP == 25, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_ECDSA == 26, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_ECDH == 27, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_HMAC == 28, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_DIGEST == 29, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_CIPHER == 30, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_USER == 31, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_LIB_HKDF == 32, library_values_changed);
+OPENSSL_COMPILE_ASSERT(ERR_NUM_LIBS == 33, library_values_changed);
+
+static const uint32_t kFunctionValues[] = {
+    0xc3232b0,
+    0xc32b397,
+    0xc3332cd,
+    0xc33b3cf,
+    0xc34338b,
+    0xc34b39e,
+    0xc3533a6,
+    0xc35b3c4,
+    0xc363310,
+    0xc36b2ff,
+    0xc373283,
+    0xc37b34f,
+    0xc3832a6,
+    0xc38b2ba,
+    0xc3932c1,
+    0xc39b320,
+    0xc3a333a,
+    0xc3ab299,
+    0xc3b33bc,
+    0xc3bb377,
+    0xc3c328e,
+    0xc3cb35e,
+    0xc3d32d4,
+    0xc3db2ea,
+    0xc3e33b4,
+    0x10322857,
+    0x1032a7c9,
+    0x103327de,
+    0x1033a899,
+    0x10342759,
+    0x1034a88e,
+    0x103528ef,
+    0x1035a90b,
+    0x10362778,
+    0x1036a8c3,
+    0x10372739,
+    0x1037a8ca,
+    0x10382709,
+    0x1038a83e,
+    0x103927b2,
+    0x1039a6f9,
+    0x103a2795,
+    0x103aa6b3,
+    0x103b26e3,
+    0x103ba8bb,
+    0x103c2902,
+    0x103ca72a,
+    0x103d2800,
+    0x103da885,
+    0x103e26ca,
+    0x103ea8b3,
+    0x103f281f,
+    0x103fa86e,
+    0x1040271c,
+    0x1040a8dd,
+    0x1432266e,
+    0x1432a661,
+    0x14332655,
+    0x1433a647,
+    0x1832190a,
+    0x18329770,
+    0x183317a3,
+    0x18339889,
+    0x183416e8,
+    0x18349744,
+    0x18351939,
+    0x1835991a,
+    0x1836164c,
+    0x183696da,
+    0x18371826,
+    0x18379684,
+    0x1838184d,
+    0x183897fa,
+    0x183916fb,
+    0x18399625,
+    0x183a1696,
+    0x183a97e9,
+    0x183b17b5,
+    0x183b9753,
+    0x183c1869,
+    0x183c9636,
+    0x183d1896,
+    0x183d9929,
+    0x183e1949,
+    0x183e966f,
+    0x183f170b,
+    0x183f95f7,
+    0x1840177f,
+    0x184097c7,
+    0x18411731,
+    0x18419790,
+    0x184216bb,
+    0x1842985a,
+    0x18431878,
+    0x18439584,
+    0x184415d1,
+    0x184495c0,
+    0x184515a7,
+    0x184596c8,
+    0x184615e7,
+    0x184696a6,
+    0x18471763,
+    0x18479839,
+    0x184818d4,
+    0x184897d8,
+    0x1849160c,
+    0x184998c6,
+    0x184a1720,
+    0x184a9818,
+    0x184b1958,
+    0x184b965d,
+    0x184c18b5,
+    0x184c98a4,
+    0x184d180b,
+    0x184d9562,
+    0x184e154a,
+    0x184e98e4,
+    0x184f1596,
+    0x1c323253,
+    0x1c32b276,
+    0x1c33326a,
+    0x1c33b25f,
+    0x20322d62,
+    0x2032ad43,
+    0x20332d4e,
+    0x2033ad56,
+    0x24322c6f,
+    0x2432ad2a,
+    0x24332cb5,
+    0x2433ad1c,
+    0x24342c4e,
+    0x2434ac3c,
+    0x24352b97,
+    0x2435ab89,
+    0x24362c1b,
+    0x2436abcb,
+    0x24372c85,
+    0x2437ac33,
+    0x24382bde,
+    0x2438abf5,
+    0x24392ba9,
+    0x2439ace2,
+    0x243a2cfa,
+    0x243aac9d,
+    0x243b2cbf,
+    0x243babb8,
+    0x243c2c0d,
+    0x243cacd4,
+    0x243d2d11,
+    0x243dac62,
+    0x2832269c,
+    0x2832a6ac,
+    0x28332691,
+    0x2833a682,
+    0x283426a1,
+    0x2c323242,
+    0x2c32aec1,
+    0x2c3330f4,
+    0x2c33b087,
+    0x2c342ede,
+    0x2c34b192,
+    0x2c3530c8,
+    0x2c35ae8b,
+    0x2c363188,
+    0x2c36b01f,
+    0x2c372fdf,
+    0x2c37b14b,
+    0x2c382daf,
+    0x2c38b17a,
+    0x2c393203,
+    0x2c39ad8b,
+    0x2c3a3220,
+    0x2c3ab1ac,
+    0x2c3b2d7a,
+    0x2c3bb1ba,
+    0x2c3c3107,
+    0x2c3cae59,
+    0x2c3d2f74,
+    0x2c3daeaf,
+    0x2c3e2ff0,
+    0x2c3eb15a,
+    0x2c3f2deb,
+    0x2c3fae02,
+    0x2c402e72,
+    0x2c40b00b,
+    0x2c412db9,
+    0x2c41af86,
+    0x2c423231,
+    0x2c42af96,
+    0x2c433051,
+    0x2c43b212,
+    0x2c44319f,
+    0x2c44ad6e,
+    0x2c4530e0,
+    0x2c45ae3c,
+    0x2c462fb4,
+    0x2c46afa4,
+    0x2c4731c3,
+    0x2c47af60,
+    0x2c48313a,
+    0x2c48b096,
+    0x2c493167,
+    0x2c49b1e6,
+    0x2c4a2efb,
+    0x2c4ab032,
+    0x2c4b2dd2,
+    0x2c4bb118,
+    0x2c4c2f27,
+    0x2c4caf45,
+    0x2c4d3172,
+    0x2c4db129,
+    0x2c4e2ea1,
+    0x2c4eb1f4,
+    0x2c4f2fc4,
+    0x2c4fb065,
+    0x2c5030ad,
+    0x2c50ad9e,
+    0x2c512e1f,
+    0x2c51b1d7,
+    0x2c523078,
+    0x2c52af09,
+    0x30321cb2,
+    0x30329a8f,
+    0x30331c07,
+    0x30339a83,
+    0x30341d32,
+    0x30349c99,
+    0x30351b77,
+    0x30359c73,
+    0x30361c61,
+    0x30369c7f,
+    0x30371cf3,
+    0x30379a1b,
+    0x30381b23,
+    0x30389d74,
+    0x30391bf6,
+    0x30399c3e,
+    0x303a1ad2,
+    0x303a99a4,
+    0x303b1d04,
+    0x303b9b89,
+    0x303c1d42,
+    0x303c9d96,
+    0x303d1b59,
+    0x303d9bd2,
+    0x303e1a4f,
+    0x303e99e7,
+    0x303f1bbf,
+    0x303f9b9c,
+    0x304019b8,
+    0x30409ae0,
+    0x304119f8,
+    0x30419d88,
+    0x30421a64,
+    0x3042998c,
+    0x30431b67,
+    0x30439b14,
+    0x30441a3f,
+    0x30449a72,
+    0x30451b34,
+    0x30459d21,
+    0x30461a0b,
+    0x30469cc7,
+    0x30471cdf,
+    0x30479ba9,
+    0x30481c4b,
+    0x30489aa8,
+    0x30491af1,
+    0x30499d54,
+    0x304a1a29,
+    0x304a9c8b,
+    0x304b1ac1,
+    0x304b9d14,
+    0x304c1c17,
+    0x304c9ab5,
+    0x304d1b03,
+    0x304d99ce,
+    0x304e1c27,
+    0x304e9b48,
+    0x304f1a98,
+    0x304f9d65,
+    0x30501be2,
+    0x343220c5,
+    0x3432a0ed,
+    0x343320e0,
+    0x3433a0d5,
+    0x3832150d,
+    0x38329520,
+    0x3833153c,
+    0x3833952a,
+    0x3c3225be,
+    0x3c32a35e,
+    0x3c33257e,
+    0x3c33a484,
+    0x3c34243a,
+    0x3c34a17b,
+    0x3c352377,
+    0x3c35a12f,
+    0x3c36255a,
+    0x3c36a524,
+    0x3c3722c5,
+    0x3c37a3c3,
+    0x3c382259,
+    0x3c38a605,
+    0x3c3925ce,
+    0x3c39a0f6,
+    0x3c3a21c3,
+    0x3c3aa390,
+    0x3c3b21eb,
+    0x3c3ba21c,
+    0x3c3c24af,
+    0x3c3ca4da,
+    0x3c3d2627,
+    0x3c3da14a,
+    0x3c3e25da,
+    0x3c3ea27b,
+    0x3c3f222c,
+    0x3c3fa1f8,
+    0x3c402595,
+    0x3c40a637,
+    0x3c4123a6,
+    0x3c41a567,
+    0x3c4221de,
+    0x3c42a53f,
+    0x3c4325f2,
+    0x3c43a15b,
+    0x3c44226e,
+    0x3c44a28e,
+    0x3c4521d0,
+    0x3c45a244,
+    0x3c46241c,
+    0x3c46a616,
+    0x3c47233c,
+    0x3c47a3d9,
+    0x3c4822ed,
+    0x3c48a306,
+    0x3c49231c,
+    0x3c49a46c,
+    0x3c4a211b,
+    0x3c4aa3f5,
+    0x3c4b2329,
+    0x3c4ba34d,
+    0x3c4c2454,
+    0x3c4ca2a1,
+    0x3c4d218d,
+    0x3c4da167,
+    0x3c4e24fb,
+    0x3c4ea1b6,
+    0x3c4f2104,
+    0x403203d0,
+    0x40328648,
+    0x40330d16,
+    0x40338356,
+    0x40340302,
+    0x40348ccc,
+    0x403505d8,
+    0x403587d5,
+    0x4036038c,
+    0x40370f77,
+    0x4037815c,
+    0x40380617,
+    0x40388720,
+    0x40390798,
+    0x40398456,
+    0x403a0fd4,
+    0x403a8e8d,
+    0x403b0f84,
+    0x403b8966,
+    0x403c10c6,
+    0x403c854b,
+    0x403d0ef3,
+    0x403d8997,
+    0x403e0a98,
+    0x403e8b69,
+    0x403f0419,
+    0x403f8c74,
+    0x404007b0,
+    0x40408577,
+    0x404103e8,
+    0x404190f7,
+    0x40420c98,
+    0x404287f0,
+    0x40430214,
+    0x40438c38,
+    0x40440689,
+    0x404488b9,
+    0x4045086c,
+    0x404584ac,
+    0x40460ba0,
+    0x40468c14,
+    0x40470915,
+    0x40478cf6,
+    0x40480e4d,
+    0x40488278,
+    0x404907c7,
+    0x40498956,
+    0x404a00f2,
+    0x404a846f,
+    0x404b82d9,
+    0x404c05e8,
+    0x404c8010,
+    0x404d0842,
+    0x404d8682,
+    0x404e002a,
+    0x404e8694,
+    0x404f0434,
+    0x404f8fa1,
+    0x40500628,
+    0x40508c83,
+    0x405101ff,
+    0x4051902a,
+    0x40520fea,
+    0x40528f4a,
+    0x405309ff,
+    0x40538594,
+    0x40541015,
+    0x405486a1,
+    0x40550398,
+    0x40558e0a,
+    0x40560442,
+    0x4056810c,
+    0x40570f5c,
+    0x4057870a,
+    0x40580488,
+    0x40588857,
+    0x40590d9f,
+    0x40598bf3,
+    0x405a08cf,
+    0x405a8530,
+    0x405b09e3,
+    0x405b9123,
+    0x405c032f,
+    0x405c829c,
+    0x405d0a1b,
+    0x405d8b7a,
+    0x405e0cbe,
+    0x405e8761,
+    0x405f06d9,
+    0x405f84a2,
+    0x40600df8,
+    0x40608f6a,
+    0x4061012b,
+    0x4061814a,
+    0x40620db5,
+    0x40628371,
+    0x40630bb4,
+    0x40638b07,
+    0x4064066a,
+    0x40648926,
+    0x40650174,
+    0x40658b8d,
+    0x40660d4a,
+    0x40668738,
+    0x40670036,
+    0x40678a31,
+    0x406803b8,
+    0x40688191,
+    0x406901ef,
+    0x406984bc,
+    0x406a0f12,
+    0x406a8a81,
+    0x406b03fe,
+    0x406b87bd,
+    0x406c0b51,
+    0x406c8ed0,
+    0x406d09ad,
+    0x406d8af0,
+    0x406e0255,
+    0x406e8cd9,
+    0x406f0982,
+    0x406f877a,
+    0x40700521,
+    0x4070855f,
+    0x407110aa,
+    0x4071806c,
+    0x4072033a,
+    0x40728a64,
+    0x40730cb1,
+    0x40738602,
+    0x40740e1f,
+    0x40748dde,
+    0x40751100,
+    0x40758000,
+    0x40760d31,
+    0x407685ab,
+    0x407706b4,
+    0x407790e8,
+    0x40780a0f,
+    0x40788dc9,
+    0x40790e27,
+    0x40798b3a,
+    0x407a008b,
+    0x407a82f9,
+    0x407b0ad3,
+    0x407b82c8,
+    0x407c0fb8,
+    0x407c8c53,
+    0x407d0663,
+    0x407d83a5,
+    0x407e01b4,
+    0x407e80a3,
+    0x407f0346,
+    0x407f81d1,
+    0x40800f2e,
+    0x40808715,
+    0x40810e6a,
+    0x4081872c,
+    0x4082089d,
+    0x408280ba,
+    0x408305bd,
+    0x408382b2,
+    0x4084053e,
+    0x40848942,
+    0x4085031b,
+    0x40858bd8,
+    0x408606c2,
+    0x408680d6,
+    0x408708ec,
+    0x4087882a,
+    0x40880b25,
+    0x408882f1,
+    0x40890eb3,
+    0x40898889,
+    0x408a0a4f,
+    0x408a804e,
+    0x408b1061,
+    0x408b9043,
+    0x408c1002,
+    0x408c9081,
+    0x408d080b,
+    0x408d86f0,
+    0x408e074b,
+    0x408e8d7b,
+    0x408f0d61,
+    0x408f84d5,
+    0x40900672,
+    0x409084e5,
+    0x40910506,
+    0x40918ab6,
+    0x40920230,
+    0x4092824a,
+    0x409302bc,
+    0x409389ca,
+    0x409408fe,
+    0x409490a1,
+    0x409509f6,
+    0x40958585,
+    0x4096030b,
+    0x44322010,
+    0x44329fdd,
+    0x44332028,
+    0x44339f48,
+    0x44342053,
+    0x44349f40,
+    0x44351fe6,
+    0x44359f55,
+    0x4436205d,
+    0x4436a03e,
+    0x44372034,
+    0x4437a049,
+    0x44381f25,
+    0x44389fed,
+    0x4439201e,
+    0x44399f37,
+    0x443a1fa0,
+    0x443a9fbc,
+    0x443b1f65,
+    0x443b9f80,
+    0x4c321e6e,
+    0x4c329dae,
+    0x4c331d9f,
+    0x4c339e3a,
+    0x4c341e9e,
+    0x4c349ea8,
+    0x4c351e2c,
+    0x4c359efe,
+    0x4c361ed8,
+    0x4c369f11,
+    0x4c371e8e,
+    0x4c379ec0,
+    0x4c381e1a,
+    0x4c389e4f,
+    0x4c391eeb,
+    0x4c399e60,
+    0x4c3a1e7c,
+    0x4c3a9e0d,
+    0x4c3b1dd6,
+    0x4c3b9df1,
+    0x4c3c1dbd,
+    0x503212ac,
+    0x5032941c,
+    0x50331245,
+    0x5033914d,
+    0x50341182,
+    0x50349402,
+    0x50351195,
+    0x5035930e,
+    0x503613aa,
+    0x50369295,
+    0x503714e3,
+    0x5037928a,
+    0x503811c9,
+    0x503894c3,
+    0x50391351,
+    0x50399279,
+    0x503a12d9,
+    0x503a92fb,
+    0x503b13e0,
+    0x503b94f3,
+    0x503c120a,
+    0x503c93c0,
+    0x503d1348,
+    0x503d922f,
+    0x503e1483,
+    0x503e94af,
+    0x503f145d,
+    0x503f92a1,
+    0x504013ee,
+    0x5040915e,
+    0x504111a4,
+    0x504191e9,
+    0x5042137e,
+    0x5042921d,
+    0x504312c4,
+    0x50439372,
+    0x504411f9,
+    0x50449399,
+    0x504514d4,
+    0x5045946f,
+    0x504611d8,
+    0x50469430,
+    0x50471360,
+    0x50479339,
+    0x50481268,
+    0x504892b7,
+    0x504912e7,
+    0x50499386,
+    0x504a1498,
+    0x504a9446,
+    0x504b1171,
+    0x504b93cc,
+    0x504c14cc,
+    0x504c9257,
+    0x504d1138,
+    0x504d931f,
+    0x504e11b9,
+    0x683220a7,
+    0x6832a078,
+    0x68332096,
+    0x6833a067,
+    0x68342088,
+    0x6834a0b4,
+    0x6c322d32,
+    0x74321967,
+    0x74329979,
+    0x78322992,
+    0x7832a9b8,
+    0x783329a4,
+    0x7833a960,
+    0x78342b6d,
+    0x7834ab7a,
+    0x7835294c,
+    0x7835a928,
+    0x78362916,
+    0x7836a93a,
+    0x783729f0,
+    0x7837a9de,
+    0x783829cc,
+    0x7838aa47,
+    0x78392a63,
+    0x7839aa7f,
+    0x783a2a9b,
+    0x783aaac7,
+    0x783b2ab1,
+    0x783baa30,
+    0x783c2a02,
+    0x783caa19,
+    0x783d2974,
+    0x783dab43,
+    0x783e2b51,
+    0x783eab5f,
+    0x783f2b27,
+    0x783fab09,
+    0x78402b18,
+    0x7840aafa,
+    0x78412add,
+    0x80321508,
+};
+
+static const char kFunctionStringData[] = "D2I_SSL_SESSION\0SSL_CTX_check_private_key\0SSL_CTX_new\0SSL_CTX_set_cipher_list\0SSL_CTX_set_cipher_list_tls11\0SSL_CTX_set_session_id_context\0SSL_CTX_set_ssl_version\0SSL_CTX_use_PrivateKey\0SSL_CTX_use_PrivateKey_ASN1\0SSL_CTX_use_PrivateKey_file\0SSL_CTX_use_RSAPrivateKey\0SSL_CTX_use_RSAPrivateKey_ASN1\0SSL_CTX_use_RSAPrivateKey_file\0SSL_CTX_use_authz\0SSL_CTX_use_certificate\0SSL_CTX_use_certificate_ASN1\0SSL_CTX_use_certificate_chain_file\0SSL_CTX_use_certificate_file\0SSL_CTX_use_psk_identity_hint\0SSL_SESSION_new\0SSL_SESSION_print_fp\0SSL_SESSION_set1_id_context\0SSL_SESSION_to_bytes_full\0SSL_accept\0SSL_add_dir_cert_subjects_to_stack\0SSL_add_file_cert_subjects_to_stack\0SSL_check_private_key\0SSL_clear\0SSL_connect\0SSL_do_handshake\0SSL_load_client_CA_file\0SSL_new\0SSL_peek\0SSL_read\0SSL_renegotiate\0SSL_set_cipher_list\0SSL_set_fd\0SSL_set_rfd\0SSL_set_session\0SSL_set_session_id_context\0SSL_set_session_ticket_ext\0SSL_set_wfd\0SSL_shutdown\0SSL_use_PrivateKey\0SSL_use_PrivateKey_ASN1\0SSL_use_PrivateKey_file\0SSL_use_RSAPrivateKey\0SSL_use_RSAPrivateKey_ASN1\0SSL_use_RSAPrivateKey_file\0SSL_use_authz\0SSL_use_certificate\0SSL_use_certificate_ASN1\0SSL_use_certificate_file\0SSL_use_psk_identity_hint\0SSL_write\0authz_find_data\0check_suiteb_cipher_list\0d2i_SSL_SESSION\0d2i_SSL_SESSION_get_octet_string\0d2i_SSL_SESSION_get_string\0do_dtls1_write\0do_ssl3_write\0dtls1_accept\0dtls1_buffer_record\0dtls1_check_timeout_num\0dtls1_connect\0dtls1_do_write\0dtls1_get_hello_verify\0dtls1_get_message\0dtls1_get_message_fragment\0dtls1_heartbeat\0dtls1_preprocess_fragment\0dtls1_process_record\0dtls1_read_bytes\0dtls1_send_hello_verify_request\0dtls1_write_app_data_bytes\0fclose\0fprintf\0i2d_SSL_SESSION\0printf\0read_authz\0ssl23_accept\0ssl23_client_hello\0ssl23_connect\0ssl23_get_client_hello\0ssl23_get_server_hello\0ssl23_get_v2_client_hello\0ssl23_peek\0ssl23_read\0ssl23_write\0ssl3_accept\0ssl3_callback_ctrl\0ssl3_cert_verify_hash\0ssl3_change_cipher_state\0ssl3_check_cert_and_algorithm\0ssl3_check_client_hello\0ssl3_connect\0ssl3_ctrl\0ssl3_ctx_ctrl\0ssl3_digest_cached_records\0ssl3_do_change_cipher_spec\0ssl3_expect_change_cipher_spec\0ssl3_generate_key_block\0ssl3_get_cert_status\0ssl3_get_cert_verify\0ssl3_get_certificate_request\0ssl3_get_channel_id\0ssl3_get_client_certificate\0ssl3_get_client_hello\0ssl3_get_client_key_exchange\0ssl3_get_finished\0ssl3_get_initial_bytes\0ssl3_get_message\0ssl3_get_new_session_ticket\0ssl3_get_next_proto\0ssl3_get_record\0ssl3_get_server_certificate\0ssl3_get_server_done\0ssl3_get_server_hello\0ssl3_get_server_key_exchange\0ssl3_get_v2_client_hello\0ssl3_handshake_mac\0ssl3_prf\0ssl3_read_bytes\0ssl3_read_n\0ssl3_send_cert_verify\0ssl3_send_certificate_request\0ssl3_send_channel_id\0ssl3_send_client_certificate\0ssl3_send_client_hello\0ssl3_send_client_key_exchange\0ssl3_send_new_session_ticket\0ssl3_send_server_certificate\0ssl3_send_server_hello\0ssl3_send_server_key_exchange\0ssl3_setup_key_block\0ssl3_setup_read_buffer\0ssl3_setup_write_buffer\0ssl3_write_bytes\0ssl3_write_pending\0ssl_add_cert_chain\0ssl_add_cert_to_buf\0ssl_add_clienthello_renegotiate_ext\0ssl_add_clienthello_tlsext\0ssl_add_clienthello_use_srtp_ext\0ssl_add_serverhello_renegotiate_ext\0ssl_add_serverhello_tlsext\0ssl_add_serverhello_use_srtp_ext\0ssl_bad_method\0ssl_build_cert_chain\0ssl_bytes_to_cipher_list\0ssl_cert_dup\0ssl_cert_inst\0ssl_cert_new\0ssl_check_serverhello_tlsext\0ssl_check_srvr_ecc_cert_and_alg\0ssl_cipher_process_rulestr\0ssl_cipher_strength_sort\0ssl_create_cipher_list\0ssl_ctx_log_master_secret\0ssl_ctx_log_rsa_client_key_exchange\0ssl_ctx_make_profiles\0ssl_get_new_session\0ssl_get_prev_session\0ssl_get_server_cert_index\0ssl_get_sign_pkey\0ssl_init_wbio_buffer\0ssl_new\0ssl_parse_clienthello_renegotiate_ext\0ssl_parse_clienthello_tlsext\0ssl_parse_clienthello_use_srtp_ext\0ssl_parse_serverhello_renegotiate_ext\0ssl_parse_serverhello_tlsext\0ssl_parse_serverhello_use_srtp_ext\0ssl_prepare_clienthello_tlsext\0ssl_scan_clienthello_tlsext\0ssl_scan_serverhello_tlsext\0ssl_sess_cert_new\0ssl_set_authz\0ssl_set_cert\0ssl_set_pkey\0ssl_undefined_const_function\0ssl_undefined_function\0ssl_undefined_void_function\0ssl_verify_cert_chain\0tls12_check_peer_sigalg\0tls1_aead_ctx_init\0tls1_cert_verify_mac\0tls1_change_cipher_state\0tls1_change_cipher_state_aead\0tls1_change_cipher_state_cipher\0tls1_check_duplicate_extensions\0tls1_enc\0tls1_export_keying_material\0tls1_get_server_supplemental_data\0tls1_heartbeat\0tls1_prf\0tls1_send_server_supplemental_data\0tls1_setup_key_block\0SXNET_add_id_INTEGER\0SXNET_add_id_asc\0SXNET_add_id_ulong\0SXNET_get_id_asc\0SXNET_get_id_ulong\0X509V3_EXT_add\0X509V3_EXT_add_alias\0X509V3_EXT_free\0X509V3_EXT_i2d\0X509V3_EXT_nconf\0X509V3_add1_i2d\0X509V3_add_value\0X509V3_get_section\0X509V3_get_string\0X509V3_get_value_bool\0X509V3_parse_list\0X509_PURPOSE_add\0X509_PURPOSE_set\0a2i_GENERAL_NAME\0copy_email\0copy_issuer\0do_dirname\0do_ext_i2d\0do_ext_nconf\0gnames_from_sectname\0hex_to_string\0i2s_ASN1_ENUMERATED\0i2s_ASN1_IA5STRING\0i2s_ASN1_INTEGER\0i2v_AUTHORITY_INFO_ACCESS\0notice_section\0nref_nos\0policy_section\0process_pci_value\0r2i_certpol\0r2i_pci\0s2i_ASN1_IA5STRING\0s2i_ASN1_INTEGER\0s2i_ASN1_OCTET_STRING\0s2i_skey_id\0set_dist_point_name\0string_to_hex\0v2i_ASN1_BIT_STRING\0v2i_AUTHORITY_INFO_ACCESS\0v2i_AUTHORITY_KEYID\0v2i_BASIC_CONSTRAINTS\0v2i_EXTENDED_KEY_USAGE\0v2i_GENERAL_NAMES\0v2i_GENERAL_NAME_ex\0v2i_NAME_CONSTRAINTS\0v2i_POLICY_CONSTRAINTS\0v2i_POLICY_MAPPINGS\0v2i_crld\0v2i_idp\0v2i_issuer_alt\0v2i_subject_alt\0v3_generic_extension\0HKDF\0CRYPTO_set_ex_data\0get_class\0get_func_pointers\0get_new_index\0EVP_DigestSignAlgorithm\0EVP_DigestVerifyInitFromAlgorithm\0EVP_PKEY_CTX_ctrl\0EVP_PKEY_CTX_dup\0EVP_PKEY_copy_parameters\0EVP_PKEY_decrypt\0EVP_PKEY_decrypt_init\0EVP_PKEY_derive\0EVP_PKEY_derive_init\0EVP_PKEY_derive_set_peer\0EVP_PKEY_encrypt\0EVP_PKEY_encrypt_init\0EVP_PKEY_get1_DH\0EVP_PKEY_get1_DSA\0EVP_PKEY_get1_EC_KEY\0EVP_PKEY_get1_RSA\0EVP_PKEY_keygen\0EVP_PKEY_keygen_init\0EVP_PKEY_new\0EVP_PKEY_set_type\0EVP_PKEY_sign\0EVP_PKEY_sign_init\0EVP_PKEY_verify\0EVP_PKEY_verify_init\0check_padding_md\0d2i_AutoPrivateKey\0d2i_PrivateKey\0do_EC_KEY_print\0do_rsa_print\0do_sigver_init\0eckey_param2type\0eckey_param_decode\0eckey_priv_decode\0eckey_priv_encode\0eckey_pub_decode\0eckey_pub_encode\0eckey_type2param\0evp_pkey_ctx_new\0hmac_signctx\0i2d_PublicKey\0old_ec_priv_decode\0old_rsa_priv_decode\0pkey_ec_ctrl\0pkey_ec_derive\0pkey_ec_keygen\0pkey_ec_paramgen\0pkey_ec_sign\0pkey_rsa_ctrl\0pkey_rsa_decrypt\0pkey_rsa_encrypt\0pkey_rsa_sign\0rsa_algor_to_md\0rsa_digest_verify_init_from_algorithm\0rsa_item_verify\0rsa_mgf1_to_md\0rsa_priv_decode\0rsa_priv_encode\0rsa_pss_to_ctx\0rsa_pub_decode\0EVP_DigestInit_ex\0EVP_MD_CTX_copy_ex\0ASN1_BIT_STRING_set_bit\0ASN1_ENUMERATED_set\0ASN1_ENUMERATED_to_BN\0ASN1_GENERALIZEDTIME_adj\0ASN1_INTEGER_set\0ASN1_INTEGER_to_BN\0ASN1_OBJECT_new\0ASN1_PCTX_new\0ASN1_STRING_TABLE_add\0ASN1_STRING_set\0ASN1_STRING_type_new\0ASN1_TIME_adj\0ASN1_UTCTIME_adj\0ASN1_d2i_fp\0ASN1_dup\0ASN1_get_object\0ASN1_i2d_bio\0ASN1_i2d_fp\0ASN1_item_d2i_fp\0ASN1_item_dup\0ASN1_item_ex_d2i\0ASN1_item_i2d_bio\0ASN1_item_i2d_fp\0ASN1_item_pack\0ASN1_item_unpack\0ASN1_mbstring_ncopy\0ASN1_pack_string\0ASN1_seq_pack\0ASN1_seq_unpack\0ASN1_template_new\0ASN1_unpack_string\0BIO_new_NDEF\0BN_to_ASN1_ENUMERATED\0BN_to_ASN1_INTEGER\0a2d_ASN1_OBJECT\0a2i_ASN1_ENUMERATED\0a2i_ASN1_INTEGER\0a2i_ASN1_STRING\0asn1_check_tlen\0asn1_collate_primitive\0asn1_collect\0asn1_d2i_ex_primitive\0asn1_d2i_read_bio\0asn1_do_adb\0asn1_ex_c2i\0asn1_find_end\0asn1_item_ex_combine_new\0asn1_template_ex_d2i\0asn1_template_noexp_d2i\0c2i_ASN1_BIT_STRING\0c2i_ASN1_INTEGER\0c2i_ASN1_OBJECT\0collect_data\0d2i_ASN1_BOOLEAN\0d2i_ASN1_OBJECT\0d2i_ASN1_UINTEGER\0d2i_ASN1_UTCTIME\0d2i_ASN1_bytes\0d2i_ASN1_type_bytes\0i2d_ASN1_TIME\0long_c2i\0EVP_PKCS82PKEY\0EVP_PKEY2PKCS8\0PKCS12_get_key_and_certs\0PKCS12_handle_content_info\0PKCS12_handle_content_infos\0PKCS12_parse\0PKCS5_pbe2_set_iv\0PKCS5_pbe_set\0PKCS5_pbe_set0_algor\0PKCS5_pbkdf2_set\0PKCS8_decrypt\0PKCS8_encrypt\0PKCS8_encrypt_pbe\0pbe_cipher_init\0pbe_crypt\0pkcs12_item_decrypt_d2i\0pkcs12_item_i2d_encrypt\0pkcs12_key_gen_asc\0pkcs12_key_gen_raw\0pkcs12_key_gen_uni\0pkcs12_pbe_keyivgen\0BIO_callback_ctrl\0BIO_ctrl\0BIO_new\0BIO_new_file\0BIO_new_mem_buf\0BIO_zero_copy_get_read_buf\0BIO_zero_copy_get_read_buf_done\0BIO_zero_copy_get_write_buf\0BIO_zero_copy_get_write_buf_done\0bio_ctrl\0bio_io\0bio_ip_and_port_to_socket_and_addr\0bio_make_pair\0bio_write\0buffer_ctrl\0conn_ctrl\0conn_state\0file_ctrl\0file_read\0mem_write\0ECDSA_do_sign_ex\0ECDSA_do_verify\0ECDSA_sign_ex\0ECDSA_sign_setup\0digest_to_bn\0ecdsa_sign_setup\0CONF_parse_list\0NCONF_load\0def_load_bio\0str_copy\0EC_GROUP_copy\0EC_GROUP_get_curve_GFp\0EC_GROUP_get_degree\0EC_GROUP_new_by_curve_name\0EC_KEY_check_key\0EC_KEY_copy\0EC_KEY_generate_key\0EC_KEY_new_method\0EC_KEY_set_public_key_affine_coordinates\0EC_POINT_add\0EC_POINT_cmp\0EC_POINT_copy\0EC_POINT_dbl\0EC_POINT_dup\0EC_POINT_get_affine_coordinates_GFp\0EC_POINT_invert\0EC_POINT_is_at_infinity\0EC_POINT_is_on_curve\0EC_POINT_make_affine\0EC_POINT_new\0EC_POINT_oct2point\0EC_POINT_point2oct\0EC_POINT_set_affine_coordinates_GFp\0EC_POINT_set_compressed_coordinates_GFp\0EC_POINT_set_to_infinity\0EC_POINTs_make_affine\0compute_wNAF\0d2i_ECPKParameters\0d2i_ECParameters\0d2i_ECPrivateKey\0ec_GFp_mont_field_decode\0ec_GFp_mont_field_encode\0ec_GFp_mont_field_mul\0ec_GFp_mont_field_set_to_one\0ec_GFp_mont_field_sqr\0ec_GFp_mont_group_set_curve\0ec_GFp_simple_group_check_discriminant\0ec_GFp_simple_group_set_curve\0ec_GFp_simple_make_affine\0ec_GFp_simple_oct2point\0ec_GFp_simple_point2oct\0ec_GFp_simple_point_get_affine_coordinates\0ec_GFp_simple_point_set_affine_coordinates\0ec_GFp_simple_points_make_affine\0ec_GFp_simple_set_compressed_coordinates\0ec_asn1_group2pkparameters\0ec_asn1_pkparameters2group\0ec_group_new\0ec_group_new_curve_GFp\0ec_group_new_from_data\0ec_point_set_Jprojective_coordinates_GFp\0ec_pre_comp_new\0ec_wNAF_mul\0ec_wNAF_precompute_mult\0i2d_ECPKParameters\0i2d_ECParameters\0i2d_ECPrivateKey\0i2o_ECPublicKey\0o2i_ECPublicKey\0DH_new_method\0compute_key\0generate_key\0generate_parameters\0DSA_new_method\0dsa_sig_cb\0sign\0sign_setup\0verify\0BN_BLINDING_convert_ex\0BN_BLINDING_create_param\0BN_BLINDING_invert_ex\0BN_BLINDING_new\0BN_BLINDING_update\0RSA_check_key\0RSA_new_method\0RSA_padding_add_PKCS1_OAEP_mgf1\0RSA_padding_add_PKCS1_PSS_mgf1\0RSA_padding_add_PKCS1_type_1\0RSA_padding_add_PKCS1_type_2\0RSA_padding_add_SSLv23\0RSA_padding_add_none\0RSA_padding_check_PKCS1_OAEP_mgf1\0RSA_padding_check_PKCS1_type_1\0RSA_padding_check_PKCS1_type_2\0RSA_padding_check_SSLv23\0RSA_padding_check_none\0RSA_recover_crt_params\0RSA_sign\0RSA_verify\0RSA_verify_PKCS1_PSS_mgf1\0decrypt\0encrypt\0keygen\0pkcs1_prefixed_msg\0private_transform\0rsa_setup_blinding\0sign_raw\0verify_raw\0EVP_AEAD_CTX_init\0EVP_AEAD_CTX_open\0EVP_AEAD_CTX_seal\0EVP_CIPHER_CTX_copy\0EVP_CIPHER_CTX_ctrl\0EVP_CIPHER_CTX_set_key_length\0EVP_CipherInit_ex\0EVP_DecryptFinal_ex\0EVP_EncryptFinal_ex\0aead_aes_gcm_init\0aead_aes_gcm_open\0aead_aes_gcm_seal\0aead_aes_key_wrap_init\0aead_aes_key_wrap_open\0aead_aes_key_wrap_seal\0aead_chacha20_poly1305_init\0aead_chacha20_poly1305_open\0aead_chacha20_poly1305_seal\0aead_rc4_md5_tls_init\0aead_rc4_md5_tls_open\0aead_rc4_md5_tls_seal\0aead_ssl3_ensure_cipher_init\0aead_ssl3_init\0aead_ssl3_open\0aead_ssl3_seal\0aead_tls_ensure_cipher_init\0aead_tls_init\0aead_tls_open\0aead_tls_seal\0aes_init_key\0aesni_init_key\0PEM_ASN1_read\0PEM_ASN1_read_bio\0PEM_ASN1_write\0PEM_ASN1_write_bio\0PEM_X509_INFO_read\0PEM_X509_INFO_read_bio\0PEM_X509_INFO_write_bio\0PEM_do_header\0PEM_get_EVP_CIPHER_INFO\0PEM_read\0PEM_read_DHparams\0PEM_read_PrivateKey\0PEM_read_bio\0PEM_read_bio_DHparams\0PEM_read_bio_Parameters\0PEM_read_bio_PrivateKey\0PEM_write\0PEM_write_PrivateKey\0PEM_write_bio\0d2i_PKCS8PrivateKey_bio\0d2i_PKCS8PrivateKey_fp\0do_pk8pkey\0do_pk8pkey_fp\0load_iv\0ECDH_compute_key\0OBJ_create\0OBJ_dup\0OBJ_nid2obj\0OBJ_txt2obj\0ASN1_digest\0ASN1_generate_v3\0ASN1_item_sign_ctx\0ASN1_item_verify\0ASN1_sign\0NETSCAPE_SPKI_b64_decode\0NETSCAPE_SPKI_b64_encode\0PKCS7_get_certificates\0X509_ATTRIBUTE_create_by_NID\0X509_ATTRIBUTE_create_by_OBJ\0X509_ATTRIBUTE_create_by_txt\0X509_ATTRIBUTE_get0_data\0X509_ATTRIBUTE_set1_data\0X509_CRL_add0_revoked\0X509_CRL_diff\0X509_CRL_print_fp\0X509_EXTENSION_create_by_NID\0X509_EXTENSION_create_by_OBJ\0X509_INFO_new\0X509_NAME_ENTRY_create_by_NID\0X509_NAME_ENTRY_create_by_txt\0X509_NAME_ENTRY_set_object\0X509_NAME_add_entry\0X509_NAME_oneline\0X509_NAME_print\0X509_PKEY_new\0X509_PUBKEY_get\0X509_PUBKEY_set\0X509_REQ_check_private_key\0X509_REQ_to_X509\0X509_STORE_CTX_get1_issuer\0X509_STORE_CTX_init\0X509_STORE_CTX_new\0X509_STORE_CTX_purpose_inherit\0X509_STORE_add_cert\0X509_STORE_add_crl\0X509_TRUST_add\0X509_TRUST_set\0X509_check_private_key\0X509_get_pubkey_parameters\0X509_load_cert_crl_file\0X509_load_cert_file\0X509_load_crl_file\0X509_print_ex_fp\0X509_to_X509_REQ\0X509_verify_cert\0X509at_add1_attr\0X509v3_add_ext\0add_cert_dir\0append_exp\0asn1_cb\0asn1_str2type\0bitstr_cb\0by_file_ctrl\0check_policy\0d2i_X509_PKEY\0dir_ctrl\0get_cert_by_subject\0i2d_DSA_PUBKEY\0i2d_EC_PUBKEY\0i2d_PrivateKey\0i2d_RSA_PUBKEY\0parse_tagging\0x509_name_encode\0x509_name_ex_d2i\0x509_name_ex_new\0BUF_MEM_new\0BUF_memdup\0BUF_strndup\0buf_mem_grow\0BN_CTX_get\0BN_CTX_new\0BN_CTX_start\0BN_bn2dec\0BN_bn2hex\0BN_div\0BN_div_recp\0BN_exp\0BN_generate_dsa_nonce\0BN_generate_prime_ex\0BN_mod_exp2_mont\0BN_mod_exp_mont\0BN_mod_exp_mont_consttime\0BN_mod_exp_mont_word\0BN_mod_inverse\0BN_mod_inverse_no_branch\0BN_mod_lshift_quick\0BN_mod_sqrt\0BN_new\0BN_rand\0BN_rand_range\0BN_sqrt\0BN_usub\0bn_wexpand\0mod_exp_recp\0";
+
+static const uint32_t kReasonValues[] = {
+    0xc32423a,
+    0xc32bb2a,
+    0xc33420a,
+    0xc33c277,
+    0xc344247,
+    0xc34b759,
+    0xc3541e1,
+    0xc35c1c8,
+    0xc3641ed,
+    0xc36c19a,
+    0xc374268,
+    0xc37c21c,
+    0xc38418d,
+    0xc38c1a9,
+    0xc394252,
+    0xc39c1b9,
+    0xc3a422a,
+    0x10323a08,
+    0x10333a45,
+    0x1033b921,
+    0x10343889,
+    0x1034b967,
+    0x10353b55,
+    0x1035bb2a,
+    0x10363aff,
+    0x10369f34,
+    0x1037380f,
+    0x1037ba58,
+    0x10383912,
+    0x1038baac,
+    0x10393aed,
+    0x1039b9c6,
+    0x103a383e,
+    0x103ab93d,
+    0x103b39b5,
+    0x103bb863,
+    0x103c3a82,
+    0x103cb156,
+    0x103d384a,
+    0x103db958,
+    0x103e3b3e,
+    0x103ebac4,
+    0x103f310c,
+    0x103fb89e,
+    0x10403a32,
+    0x1040b983,
+    0x10413b14,
+    0x1041ba1f,
+    0x104202a1,
+    0x1042b8b3,
+    0x10433ad9,
+    0x1043b876,
+    0x104439f9,
+    0x1044b8c6,
+    0x1045399e,
+    0x1045bb6a,
+    0x10463a72,
+    0x1046b8df,
+    0x104739da,
+    0x1047ba96,
+    0x104838f4,
+    0x14323800,
+    0x1432b7f2,
+    0x1433380f,
+    0x1433b821,
+    0x18322953,
+    0x1832a96f,
+    0x183326fc,
+    0x1833a668,
+    0x18342864,
+    0x1834a7c7,
+    0x183527da,
+    0x18359d11,
+    0x183627ba,
+    0x1836a9a0,
+    0x18372610,
+    0x1837a5d9,
+    0x1838283b,
+    0x1838a5c5,
+    0x18392829,
+    0x1839a807,
+    0x183a2818,
+    0x183aa907,
+    0x183b2626,
+    0x183ba89e,
+    0x183c2782,
+    0x183ca586,
+    0x183d2742,
+    0x183da720,
+    0x183e288c,
+    0x183ea710,
+    0x183f287d,
+    0x183fa67b,
+    0x1840291d,
+    0x1840a63b,
+    0x18412796,
+    0x1841a6e6,
+    0x18422597,
+    0x1842a68f,
+    0x184326b4,
+    0x1843a7f7,
+    0x184426d8,
+    0x1844a7ec,
+    0x18452757,
+    0x1845a7a6,
+    0x18462938,
+    0x1846a653,
+    0x18472730,
+    0x18478622,
+    0x1848276e,
+    0x1848a8d3,
+    0x184925ad,
+    0x1849a5ee,
+    0x184a298a,
+    0x184aa8eb,
+    0x184b28b2,
+    0x20323f1e,
+    0x24323e57,
+    0x2432be49,
+    0x24333ebb,
+    0x2433bd49,
+    0x24343d9b,
+    0x2434bd3c,
+    0x24353d8c,
+    0x2435bd56,
+    0x24363b8d,
+    0x2436bec8,
+    0x24373e91,
+    0x2437be65,
+    0x24383e01,
+    0x2438bd7a,
+    0x24393ded,
+    0x2439be7f,
+    0x243a3dd3,
+    0x243abe1c,
+    0x243b3d2a,
+    0x243bbeb2,
+    0x243c2a4f,
+    0x243cbedf,
+    0x243d1df8,
+    0x243dbe3b,
+    0x243e3e2e,
+    0x243ebd67,
+    0x243f3db8,
+    0x243fbea4,
+    0x28323535,
+    0x2832b832,
+    0x2833380f,
+    0x2833a7c7,
+    0x2c32409c,
+    0x2c32c104,
+    0x2c3332ea,
+    0x2c33a907,
+    0x2c343faf,
+    0x2c34bf5c,
+    0x2c350a8d,
+    0x2c35bf1e,
+    0x2c363fdc,
+    0x2c36c023,
+    0x2c373f82,
+    0x2c37c0c7,
+    0x2c38406d,
+    0x2c38c0df,
+    0x2c394037,
+    0x2c39b26a,
+    0x2c3a4157,
+    0x2c3ac059,
+    0x2c3b416a,
+    0x2c3c4011,
+    0x2c3cc146,
+    0x2c3d3f4a,
+    0x2c3dc001,
+    0x2c3e4127,
+    0x2c3ec17b,
+    0x2c3f25ad,
+    0x2c3fbf70,
+    0x2c404083,
+    0x2c40bfee,
+    0x2c4140f7,
+    0x2c41c0b9,
+    0x2c423fcf,
+    0x2c42c048,
+    0x2c433f38,
+    0x2c43bf9d,
+    0x2c443fc2,
+    0x2c44bf2a,
+    0x2c452d76,
+    0x303229fb,
+    0x3032a9c7,
+    0x30332e81,
+    0x3033b1ff,
+    0x30342c60,
+    0x3034ac14,
+    0x30352e3a,
+    0x3035abbc,
+    0x30362d1c,
+    0x3036aabb,
+    0x30372f4f,
+    0x3037af60,
+    0x30382eef,
+    0x3038b1f0,
+    0x3039aa4f,
+    0x303a2a3d,
+    0x303aac4d,
+    0x303b25ad,
+    0x303bb082,
+    0x303c03ad,
+    0x303caf80,
+    0x303d3069,
+    0x303da9ea,
+    0x303e2fb2,
+    0x303eadf5,
+    0x303f2e72,
+    0x303facb7,
+    0x30402dba,
+    0x3040a23e,
+    0x304130d8,
+    0x3041aa24,
+    0x30423187,
+    0x3042abab,
+    0x304330f9,
+    0x3043af29,
+    0x30442c24,
+    0x3044aed9,
+    0x30453140,
+    0x3045b10c,
+    0x3046326a,
+    0x3046ab6e,
+    0x30472ad8,
+    0x3047acd7,
+    0x30483213,
+    0x3048ac7b,
+    0x30492a10,
+    0x3049b050,
+    0x304a2bf2,
+    0x304ab15f,
+    0x304b31d0,
+    0x304bac00,
+    0x304c2dac,
+    0x304caf05,
+    0x304d2ff1,
+    0x304da556,
+    0x304e2b07,
+    0x304eb009,
+    0x304f29d5,
+    0x304faecd,
+    0x30502c90,
+    0x3050ac6f,
+    0x30512f17,
+    0x3051b156,
+    0x30522e5a,
+    0x3052aac9,
+    0x30532ea7,
+    0x3053acc4,
+    0x30542b97,
+    0x3054b0c0,
+    0x30552d93,
+    0x3055ad42,
+    0x30562dcc,
+    0x3056b1c1,
+    0x30572ca0,
+    0x3057ae4d,
+    0x30582d5b,
+    0x3058a953,
+    0x30592586,
+    0x3059ae1b,
+    0x305ab23f,
+    0x305b2e96,
+    0x305baddd,
+    0x305c301d,
+    0x305c9df8,
+    0x305d2f98,
+    0x305daf70,
+    0x305e3038,
+    0x305eae07,
+    0x305f27da,
+    0x305fab37,
+    0x30602b83,
+    0x3060a8d3,
+    0x30612af4,
+    0x3061a2fd,
+    0x30622e67,
+    0x30628622,
+    0x30632f3c,
+    0x3063b21f,
+    0x3064ab53,
+    0x3065b0e8,
+    0x30662ce6,
+    0x3066aa69,
+    0x30672fc8,
+    0x3067aae7,
+    0x3068309f,
+    0x3068ad2f,
+    0x306931a0,
+    0x3069aa9b,
+    0x306a2a1a,
+    0x306aaa61,
+    0x306b2cfb,
+    0x306babd5,
+    0x306c2c3d,
+    0x306cb0aa,
+    0x306d2fdc,
+    0x306daebc,
+    0x306e2b1d,
+    0x306eb260,
+    0x306f2a83,
+    0x306fb174,
+    0x30702d76,
+    0x343235ac,
+    0x3432b57b,
+    0x343335bf,
+    0x3433b5eb,
+    0x343435ce,
+    0x3434b58f,
+    0x3c323769,
+    0x3c32b749,
+    0x3c333601,
+    0x3c33b784,
+    0x3c343759,
+    0x3c34b735,
+    0x3c353665,
+    0x3c35b6e1,
+    0x3c362586,
+    0x3c36b61a,
+    0x3c373700,
+    0x3c37b721,
+    0x3c3836b0,
+    0x3c38a7c7,
+    0x3c3936f2,
+    0x3c39b6c9,
+    0x3c3a3652,
+    0x3c3ab796,
+    0x3c3b37d8,
+    0x3c3bb7ca,
+    0x3c3c37e6,
+    0x3c3cb7b6,
+    0x3c3d369b,
+    0x3c3db680,
+    0x3c3e3635,
+    0x3c3eb70d,
+    0x3c3f37ac,
+    0x40321b67,
+    0x40328641,
+    0x403309f3,
+    0x40338247,
+    0x40340f60,
+    0x40348214,
+    0x4035173a,
+    0x40358a72,
+    0x403610fb,
+    0x403686e6,
+    0x4037095c,
+    0x4037819a,
+    0x40380fc0,
+    0x40389fa5,
+    0x40390150,
+    0x4039889f,
+    0x403a00f9,
+    0x403a8504,
+    0x403b0000,
+    0x403b8ee0,
+    0x403c02c0,
+    0x403c97a2,
+    0x403d1af7,
+    0x403d8c9d,
+    0x403e0c84,
+    0x403e8bd5,
+    0x403f104b,
+    0x403f9c70,
+    0x4040011f,
+    0x40409276,
+    0x40410ac1,
+    0x40418fb3,
+    0x404307a0,
+    0x40439578,
+    0x404400b9,
+    0x40449366,
+    0x404585d1,
+    0x40461c82,
+    0x4046808c,
+    0x40471c07,
+    0x404782d1,
+    0x40480d9d,
+    0x40489b86,
+    0x40491188,
+    0x404a11d5,
+    0x404a9bab,
+    0x404b1f08,
+    0x404b8278,
+    0x404c123c,
+    0x404c8548,
+    0x404d0e6a,
+    0x404d9a48,
+    0x404e0430,
+    0x404e8c1b,
+    0x404f06ae,
+    0x404f951c,
+    0x4050139a,
+    0x4050860d,
+    0x40510746,
+    0x40519f34,
+    0x40521500,
+    0x40529f87,
+    0x405312b9,
+    0x40538387,
+    0x4054147c,
+    0x40551d3a,
+    0x4055848d,
+    0x4056178a,
+    0x405689b5,
+    0x40570f18,
+    0x405787bd,
+    0x40580b6a,
+    0x40589df8,
+    0x40591381,
+    0x40599f60,
+    0x405a0317,
+    0x405a9212,
+    0x405b0393,
+    0x405b8a8d,
+    0x405c10be,
+    0x405c8f8f,
+    0x405d1e45,
+    0x405d9d8b,
+    0x405e1cbb,
+    0x405e9ee6,
+    0x405f00e9,
+    0x405f8063,
+    0x406004c1,
+    0x40611d5d,
+    0x40619557,
+    0x40620b8d,
+    0x4062828f,
+    0x40631f9c,
+    0x406382e2,
+    0x40640349,
+    0x40649cec,
+    0x4065010f,
+    0x40658bc1,
+    0x40660ebc,
+    0x40668763,
+    0x40670d48,
+    0x40679b11,
+    0x40680016,
+    0x4068953b,
+    0x406902f3,
+    0x40698cd7,
+    0x406a1201,
+    0x406a9174,
+    0x406b00a3,
+    0x406c0e44,
+    0x406c8caf,
+    0x406d1e8d,
+    0x406d9ca3,
+    0x406e05b9,
+    0x406e8bb2,
+    0x406f045c,
+    0x406f9d99,
+    0x40701d4c,
+    0x407085ef,
+    0x40710b39,
+    0x40719252,
+    0x407213b5,
+    0x4072883d,
+    0x40730ab1,
+    0x40750a09,
+    0x40758add,
+    0x40768304,
+    0x407707f6,
+    0x40778685,
+    0x407802af,
+    0x407893d6,
+    0x40791a96,
+    0x40798df9,
+    0x407a0534,
+    0x407a9717,
+    0x407b0fd7,
+    0x407b8257,
+    0x407c0810,
+    0x407c89c5,
+    0x407d1425,
+    0x407e03d0,
+    0x407e8143,
+    0x407f0d6b,
+    0x407f97e0,
+    0x40800ceb,
+    0x408083ad,
+    0x408110d9,
+    0x40818c68,
+    0x40820f3c,
+    0x40828e82,
+    0x40831ecf,
+    0x40840470,
+    0x40849265,
+    0x408514e3,
+    0x408592db,
+    0x4086099c,
+    0x40870b76,
+    0x40879efc,
+    0x408813e9,
+    0x408986c7,
+    0x408a0c50,
+    0x408a8ed0,
+    0x408b1e0b,
+    0x408b8a19,
+    0x408c0867,
+    0x408c8665,
+    0x408d0aeb,
+    0x408d87db,
+    0x408e10a7,
+    0x408e8363,
+    0x408f1ea5,
+    0x408f8267,
+    0x4090091f,
+    0x4090944b,
+    0x4091036d,
+    0x409186ff,
+    0x4092051f,
+    0x409280d7,
+    0x40930445,
+    0x40938e54,
+    0x4094149d,
+    0x409489e3,
+    0x409508fe,
+    0x40958044,
+    0x40960b17,
+    0x40968de0,
+    0x40970722,
+    0x40979a67,
+    0x40980a5a,
+    0x40989a2d,
+    0x40991026,
+    0x40998cc2,
+    0x409a0408,
+    0x409a9ad7,
+    0x409b12f4,
+    0x409b8ef2,
+    0x409c928b,
+    0x409d1591,
+    0x409d9bc5,
+    0x409e0883,
+    0x409e8912,
+    0x409f0afd,
+    0x40a012a2,
+    0x40a081ac,
+    0x40a10f4d,
+    0x40a18aac,
+    0x40a283f5,
+    0x40a30c00,
+    0x40a385e1,
+    0x40a410cb,
+    0x40a484a6,
+    0x40a51e2d,
+    0x40a58ff7,
+    0x40a61106,
+    0x40a69b4a,
+    0x40a70dcd,
+    0x40a7976b,
+    0x40a88d84,
+    0x40a90377,
+    0x40a98338,
+    0x40aa14c3,
+    0x40aa8e20,
+    0x40ab0b49,
+    0x40ab8e0e,
+    0x40ac0fa0,
+    0x40ac914c,
+    0x40ad9f1b,
+    0x40ae1c40,
+    0x40ae8b9e,
+    0x40af17c2,
+    0x40af908d,
+    0x40b01be6,
+    0x40b0892f,
+    0x40b10f71,
+    0x40b184f1,
+    0x40b20989,
+    0x40b28231,
+    0x40b31223,
+    0x40b39326,
+    0x40b40975,
+    0x40b491ea,
+    0x40b51c90,
+    0x40b58e9b,
+    0x40b68074,
+    0x40b7062f,
+    0x40b79f75,
+    0x40b80db5,
+    0x40b903e6,
+    0x40b98850,
+    0x40ba0570,
+    0x40bb1750,
+    0x40bb9dd3,
+    0x40bc0164,
+    0x40bc8170,
+    0x40be0b09,
+    0x40be911d,
+    0x40bf119b,
+    0x40bf91b3,
+    0x40c01d11,
+    0x40c09f4b,
+    0x40c11430,
+    0x40c1933e,
+    0x40c202a1,
+    0x40c281e6,
+    0x40c303b4,
+    0x40c3930f,
+    0x40c401c6,
+    0x40c48f2f,
+    0x40c51d20,
+    0x40c581b7,
+    0x40c60f00,
+    0x40c68827,
+    0x40c71a08,
+    0x40c7858a,
+    0x40c90d00,
+    0x40c98131,
+    0x40ca1d77,
+    0x40ca8a9b,
+    0x40cb0ad1,
+    0x40cb8e35,
+    0x40cc1137,
+    0x40cc9d00,
+    0x40cd1cd4,
+    0x40cd92ca,
+    0x40ce0786,
+    0x40ce9e75,
+    0x40cf9b2d,
+    0x40d00c35,
+    0x40d080b0,
+    0x40d10b2a,
+    0x40d201f8,
+    0x40d281d5,
+    0x40d30bee,
+    0x40d39e60,
+    0x40d41471,
+    0x40d49ebd,
+    0x40d5106f,
+    0x40d58b59,
+    0x40d60422,
+    0x40d68699,
+    0x40d70a31,
+    0x40d79abe,
+    0x40d80d5e,
+    0x40d89c29,
+    0x40d91c53,
+    0x40d98d17,
+    0x40da0945,
+    0x40da84d8,
+    0x40db05a5,
+    0x40db8622,
+    0x40dc1db8,
+    0x40dc88e2,
+    0x40dd140a,
+    0x40dd8a46,
+    0x40de0059,
+    0x40de88c0,
+    0x40df0d3a,
+    0x40df8185,
+    0x41f41642,
+    0x41f916d4,
+    0x41fe15c7,
+    0x41fe982f,
+    0x41ff1920,
+    0x4203165b,
+    0x4208167d,
+    0x420896b9,
+    0x420915ab,
+    0x420996f3,
+    0x420a1602,
+    0x420a95e2,
+    0x420b1622,
+    0x420b969b,
+    0x420c193c,
+    0x420c97fc,
+    0x420d1816,
+    0x420d984d,
+    0x42121867,
+    0x42171903,
+    0x421798a9,
+    0x421c18cb,
+    0x421f1886,
+    0x42211953,
+    0x422618e6,
+    0x422b19ec,
+    0x422b99b5,
+    0x422c19d4,
+    0x422c998f,
+    0x422d196e,
+    0x4432350b,
+    0x4432b4bd,
+    0x443334a7,
+    0x4433b483,
+    0x44341c82,
+    0x4434b451,
+    0x4435348a,
+    0x4435b445,
+    0x44363494,
+    0x4436b436,
+    0x44373421,
+    0x4437b472,
+    0x4438351e,
+    0x4438b45f,
+    0x443934eb,
+    0x4439b4cf,
+    0x443a34dc,
+    0x443ab4f3,
+    0x4c322b37,
+    0x4c32b387,
+    0x4c3333a0,
+    0x4c33b3b2,
+    0x4c341d11,
+    0x4c34aae7,
+    0x4c350622,
+    0x4c35b2ac,
+    0x4c3633e7,
+    0x4c36b36e,
+    0x4c3733c1,
+    0x4c37b2cd,
+    0x4c383156,
+    0x4c38b2a0,
+    0x4c3932ea,
+    0x4c39aa9b,
+    0x4c3a32dc,
+    0x4c3ab27d,
+    0x4c3b332b,
+    0x4c3bb28d,
+    0x4c3c3355,
+    0x4c3cb30b,
+    0x4c3d33da,
+    0x4c3db275,
+    0x4c3e32ff,
+    0x4c3eb2ba,
+    0x5032218a,
+    0x5032a451,
+    0x503321f6,
+    0x5033a3d5,
+    0x5034241b,
+    0x5034a2a0,
+    0x5035217a,
+    0x5035a06f,
+    0x503622e9,
+    0x5036a3eb,
+    0x5037213b,
+    0x5037a379,
+    0x50382567,
+    0x5038a1ba,
+    0x503922bd,
+    0x5039a22b,
+    0x503a23ad,
+    0x503a9fd5,
+    0x503b2023,
+    0x503ba4ef,
+    0x503c21a1,
+    0x503ca30b,
+    0x503d1ff0,
+    0x503da277,
+    0x503e24b7,
+    0x503ea286,
+    0x503f0a09,
+    0x503fa50b,
+    0x5040233c,
+    0x50409fe0,
+    0x5041209b,
+    0x5041a42e,
+    0x504222fd,
+    0x5042a4a5,
+    0x504320ed,
+    0x5043a3fb,
+    0x50442123,
+    0x5044a364,
+    0x50452352,
+    0x5045a329,
+    0x5046214d,
+    0x5046a2ca,
+    0x504721ce,
+    0x5047a10d,
+    0x504824d4,
+    0x5048a203,
+    0x50492088,
+    0x5049a219,
+    0x504a1fc6,
+    0x504aa543,
+    0x504b2477,
+    0x504ba0b3,
+    0x504c2534,
+    0x504ca059,
+    0x504d239f,
+    0x504da1e0,
+    0x504e22da,
+    0x504ea51d,
+    0x504f23c0,
+    0x504fa031,
+    0x50502556,
+    0x5050a0c4,
+    0x5051224d,
+    0x5051a23e,
+    0x5052225d,
+    0x5052a047,
+    0x505320d9,
+    0x5053a169,
+    0x50542009,
+    0x58323409,
+    0x6832355b,
+    0x6832b535,
+    0x683327c7,
+    0x683382a1,
+    0x6834354b,
+    0x6c323f05,
+    0x6c32befa,
+    0x6c333821,
+    0x743229b1,
+    0x78323cfb,
+    0x7832bb78,
+    0x783329b1,
+    0x7833bbdc,
+    0x78343bfe,
+    0x7834bba8,
+    0x78353c54,
+    0x7835bb8d,
+    0x78363d11,
+    0x7836bbbd,
+    0x78373c77,
+    0x7837bb99,
+    0x78382586,
+    0x7838bc62,
+    0x78393cba,
+    0x7839bc85,
+    0x783a2e4d,
+    0x783abc1e,
+    0x783b3c13,
+    0x783bbce6,
+    0x783c3ca3,
+    0x783cbc8f,
+    0x783d3ccf,
+    0x783dbc2e,
+    0x783e2730,
+    0x783ebc41,
+    0x80322575,
+};
+
+static const char kReasonStringData[] = "APP_DATA_IN_HANDSHAKE\0ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT\0AUTHZ_DATA_TOO_LARGE\0BAD_ALERT\0BAD_ALERT_RECORD\0BAD_AUTHENTICATION_TYPE\0BAD_CHANGE_CIPHER_SPEC\0BAD_CHECKSUM\0BAD_DATA\0BAD_DATA_RETURNED_BY_CALLBACK\0BAD_DECOMPRESSION\0BAD_DH_G_LENGTH\0BAD_DH_PUB_KEY_LENGTH\0BAD_DH_P_LENGTH\0BAD_DIGEST_LENGTH\0BAD_DSA_SIGNATURE\0BAD_ECC_CERT\0BAD_ECDSA_SIGNATURE\0BAD_ECPOINT\0BAD_HANDSHAKE_LENGTH\0BAD_HANDSHAKE_RECORD\0BAD_HELLO_REQUEST\0BAD_LENGTH\0BAD_MAC_DECODE\0BAD_MAC_LENGTH\0BAD_MESSAGE_TYPE\0BAD_PACKET_LENGTH\0BAD_PROTOCOL_VERSION_NUMBER\0BAD_PSK_IDENTITY_HINT_LENGTH\0BAD_RESPONSE_ARGUMENT\0BAD_RSA_DECRYPT\0BAD_RSA_ENCRYPT\0BAD_RSA_E_LENGTH\0BAD_RSA_MODULUS_LENGTH\0BAD_RSA_SIGNATURE\0BAD_SIGNATURE\0BAD_SRP_A_LENGTH\0BAD_SRP_B_LENGTH\0BAD_SRP_G_LENGTH\0BAD_SRP_N_LENGTH\0BAD_SRP_S_LENGTH\0BAD_SRTP_MKI_VALUE\0BAD_SRTP_PROTECTION_PROFILE_LIST\0BAD_SSL_FILETYPE\0BAD_SSL_SESSION_ID_LENGTH\0BAD_STATE\0BAD_VALUE\0BAD_WRITE_RETRY\0BIO_NOT_SET\0BLOCK_CIPHER_PAD_IS_WRONG\0BN_LIB\0CANNOT_SERIALIZE_PUBLIC_KEY\0CA_DN_LENGTH_MISMATCH\0CA_DN_TOO_LONG\0CCS_RECEIVED_EARLY\0CERTIFICATE_VERIFY_FAILED\0CERT_CB_ERROR\0CERT_LENGTH_MISMATCH\0CHALLENGE_IS_DIFFERENT\0CHANNEL_ID_NOT_P256\0CHANNEL_ID_SIGNATURE_INVALID\0CIPHER_CODE_WRONG_LENGTH\0CIPHER_OR_HASH_UNAVAILABLE\0CIPHER_TABLE_SRC_ERROR\0CLIENTHELLO_PARSE_FAILED\0CLIENTHELLO_TLSEXT\0COMPRESSED_LENGTH_TOO_LONG\0COMPRESSION_DISABLED\0COMPRESSION_FAILURE\0COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE\0COMPRESSION_LIBRARY_ERROR\0CONNECTION_ID_IS_DIFFERENT\0CONNECTION_REJECTED\0CONNECTION_TYPE_NOT_SET\0COOKIE_MISMATCH\0D2I_ECDSA_SIG\0DATA_BETWEEN_CCS_AND_FINISHED\0DATA_LENGTH_TOO_LONG\0DECODE_ERROR\0DECRYPTION_FAILED\0DECRYPTION_FAILED_OR_BAD_RECORD_MAC\0DH_PUBLIC_VALUE_LENGTH_IS_WRONG\0DIGEST_CHECK_FAILED\0DTLS_MESSAGE_TOO_BIG\0DUPLICATE_COMPRESSION_ID\0ECC_CERT_NOT_FOR_KEY_AGREEMENT\0ECC_CERT_NOT_FOR_SIGNING\0ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE\0ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE\0ECGROUP_TOO_LARGE_FOR_CIPHER\0EMPTY_SRTP_PROTECTION_PROFILE_LIST\0ENCRYPTED_LENGTH_TOO_LONG\0ERROR_GENERATING_TMP_RSA_KEY\0ERROR_IN_RECEIVED_CIPHER_LIST\0EVP_DIGESTSIGNFINAL_FAILED\0EVP_DIGESTSIGNINIT_FAILED\0EXCESSIVE_MESSAGE_SIZE\0EXTRA_DATA_IN_MESSAGE\0GOST_NOT_SUPPORTED\0GOT_A_FIN_BEFORE_A_CCS\0GOT_CHANNEL_ID_BEFORE_A_CCS\0GOT_NEXT_PROTO_BEFORE_A_CCS\0GOT_NEXT_PROTO_WITHOUT_EXTENSION\0HANDSHAKE_FAILURE_ON_CLIENT_HELLO\0HANDSHAKE_RECORD_BEFORE_CCS\0HTTPS_PROXY_REQUEST\0HTTP_REQUEST\0ILLEGAL_PADDING\0ILLEGAL_SUITEB_DIGEST\0INAPPROPRIATE_FALLBACK\0INCONSISTENT_COMPRESSION\0INVALID_AUDIT_PROOF\0INVALID_AUTHZ_DATA\0INVALID_CHALLENGE_LENGTH\0INVALID_COMMAND\0INVALID_COMPRESSION_ALGORITHM\0INVALID_MESSAGE\0INVALID_NULL_CMD_NAME\0INVALID_PURPOSE\0INVALID_SERVERINFO_DATA\0INVALID_SRP_USERNAME\0INVALID_SSL_SESSION\0INVALID_STATUS_RESPONSE\0INVALID_TICKET_KEYS_LENGTH\0INVALID_TRUST\0KEY_ARG_TOO_LONG\0KRB5\0KRB5_C_CC_PRINC\0KRB5_C_GET_CRED\0KRB5_C_INIT\0KRB5_C_MK_REQ\0KRB5_S_BAD_TICKET\0KRB5_S_INIT\0KRB5_S_RD_REQ\0KRB5_S_TKT_EXPIRED\0KRB5_S_TKT_NYV\0KRB5_S_TKT_SKEW\0LENGTH_MISMATCH\0LENGTH_TOO_SHORT\0LIBRARY_BUG\0LIBRARY_HAS_NO_CIPHERS\0MESSAGE_TOO_LONG\0MISSING_DH_DSA_CERT\0MISSING_DH_KEY\0MISSING_DH_RSA_CERT\0MISSING_DSA_SIGNING_CERT\0MISSING_ECDH_CERT\0MISSING_ECDSA_SIGNING_CERT\0MISSING_EXPORT_TMP_DH_KEY\0MISSING_EXPORT_TMP_RSA_KEY\0MISSING_RSA_CERTIFICATE\0MISSING_RSA_ENCRYPTING_CERT\0MISSING_RSA_SIGNING_CERT\0MISSING_SRP_PARAM\0MISSING_TMP_DH_KEY\0MISSING_TMP_ECDH_KEY\0MISSING_TMP_RSA_KEY\0MISSING_TMP_RSA_PKEY\0MISSING_VERIFY_MESSAGE\0MIXED_SPECIAL_OPERATOR_WITH_GROUPS\0MTU_TOO_SMALL\0MULTIPLE_SGC_RESTARTS\0NESTED_GROUP\0NON_SSLV2_INITIAL_PACKET\0NO_CERTIFICATES_RETURNED\0NO_CERTIFICATE_ASSIGNED\0NO_CERTIFICATE_RETURNED\0NO_CERTIFICATE_SET\0NO_CERTIFICATE_SPECIFIED\0NO_CIPHERS_AVAILABLE\0NO_CIPHERS_PASSED\0NO_CIPHERS_SPECIFIED\0NO_CIPHER_LIST\0NO_CIPHER_MATCH\0NO_CLIENT_CERT_METHOD\0NO_CLIENT_CERT_RECEIVED\0NO_COMPRESSION_SPECIFIED\0NO_GOST_CERTIFICATE_SENT_BY_PEER\0NO_METHOD_SPECIFIED\0NO_P256_SUPPORT\0NO_PEM_EXTENSIONS\0NO_PRIVATEKEY\0NO_PRIVATE_KEY_ASSIGNED\0NO_PROTOCOLS_AVAILABLE\0NO_PUBLICKEY\0NO_RENEGOTIATION\0NO_REQUIRED_DIGEST\0NO_SHARED_CIPHER\0NO_SHARED_SIGATURE_ALGORITHMS\0NO_SRTP_PROFILES\0NO_VERIFY_CALLBACK\0NULL_SSL_CTX\0NULL_SSL_METHOD_PASSED\0OLD_SESSION_CIPHER_NOT_RETURNED\0OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED\0ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE\0ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE\0ONLY_TLS_ALLOWED_IN_FIPS_MODE\0OPAQUE_PRF_INPUT_TOO_LONG\0PACKET_LENGTH_TOO_LONG\0PARSE_TLSEXT\0PATH_TOO_LONG\0PEER_DID_NOT_RETURN_A_CERTIFICATE\0PEER_ERROR\0PEER_ERROR_CERTIFICATE\0PEER_ERROR_NO_CERTIFICATE\0PEER_ERROR_NO_CIPHER\0PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE\0PEM_NAME_BAD_PREFIX\0PEM_NAME_TOO_SHORT\0PRE_MAC_LENGTH_TOO_LONG\0PROBLEMS_MAPPING_CIPHER_FUNCTIONS\0PROTOCOL_IS_SHUTDOWN\0PSK_IDENTITY_NOT_FOUND\0PSK_NO_CLIENT_CB\0PSK_NO_SERVER_CB\0PUBLIC_KEY_ENCRYPT_ERROR\0PUBLIC_KEY_IS_NOT_RSA\0PUBLIC_KEY_NOT_RSA\0READ_BIO_NOT_SET\0READ_TIMEOUT_EXPIRED\0READ_WRONG_PACKET_TYPE\0RECORD_LENGTH_MISMATCH\0RECORD_TOO_LARGE\0RECORD_TOO_SMALL\0RENEGOTIATE_EXT_TOO_LONG\0RENEGOTIATION_ENCODING_ERR\0RENEGOTIATION_MISMATCH\0REQUIRED_CIPHER_MISSING\0REQUIRED_COMPRESSSION_ALGORITHM_MISSING\0REUSE_CERT_LENGTH_NOT_ZERO\0REUSE_CERT_TYPE_NOT_ZERO\0REUSE_CIPHER_LIST_NOT_ZERO\0SCSV_RECEIVED_WHEN_RENEGOTIATING\0SERVERHELLO_TLSEXT\0SESSION_ID_CONTEXT_UNINITIALIZED\0SESSION_MAY_NOT_BE_CREATED\0SHORT_READ\0SIGNATURE_ALGORITHMS_ERROR\0SIGNATURE_FOR_NON_SIGNING_CERTIFICATE\0SRP_A_CALC\0SRTP_COULD_NOT_ALLOCATE_PROFILES\0SRTP_PROTECTION_PROFILE_LIST_TOO_LONG\0SRTP_UNKNOWN_PROTECTION_PROFILE\0SSL23_DOING_SESSION_ID_REUSE\0SSL2_CONNECTION_ID_TOO_LONG\0SSL3_EXT_INVALID_ECPOINTFORMAT\0SSL3_EXT_INVALID_SERVERNAME\0SSL3_EXT_INVALID_SERVERNAME_TYPE\0SSL3_SESSION_ID_TOO_LONG\0SSL3_SESSION_ID_TOO_SHORT\0SSLV3_ALERT_BAD_CERTIFICATE\0SSLV3_ALERT_BAD_RECORD_MAC\0SSLV3_ALERT_CERTIFICATE_EXPIRED\0SSLV3_ALERT_CERTIFICATE_REVOKED\0SSLV3_ALERT_CERTIFICATE_UNKNOWN\0SSLV3_ALERT_CLOSE_NOTIFY\0SSLV3_ALERT_DECOMPRESSION_FAILURE\0SSLV3_ALERT_HANDSHAKE_FAILURE\0SSLV3_ALERT_ILLEGAL_PARAMETER\0SSLV3_ALERT_NO_CERTIFICATE\0SSLV3_ALERT_UNEXPECTED_MESSAGE\0SSLV3_ALERT_UNSUPPORTED_CERTIFICATE\0SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION\0SSL_HANDSHAKE_FAILURE\0SSL_LIBRARY_HAS_NO_CIPHERS\0SSL_SESSION_ID_CALLBACK_FAILED\0SSL_SESSION_ID_CONFLICT\0SSL_SESSION_ID_CONTEXT_TOO_LONG\0SSL_SESSION_ID_HAS_BAD_LENGTH\0SSL_SESSION_ID_IS_DIFFERENT\0TLSV1_ALERT_ACCESS_DENIED\0TLSV1_ALERT_DECODE_ERROR\0TLSV1_ALERT_DECRYPTION_FAILED\0TLSV1_ALERT_DECRYPT_ERROR\0TLSV1_ALERT_EXPORT_RESTRICTION\0TLSV1_ALERT_INAPPROPRIATE_FALLBACK\0TLSV1_ALERT_INSUFFICIENT_SECURITY\0TLSV1_ALERT_INTERNAL_ERROR\0TLSV1_ALERT_NO_RENEGOTIATION\0TLSV1_ALERT_PROTOCOL_VERSION\0TLSV1_ALERT_RECORD_OVERFLOW\0TLSV1_ALERT_UNKNOWN_CA\0TLSV1_ALERT_USER_CANCELLED\0TLSV1_BAD_CERTIFICATE_HASH_VALUE\0TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE\0TLSV1_CERTIFICATE_UNOBTAINABLE\0TLSV1_UNRECOGNIZED_NAME\0TLSV1_UNSUPPORTED_EXTENSION\0TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER\0TLS_ILLEGAL_EXPORTER_LABEL\0TLS_INVALID_ECPOINTFORMAT_LIST\0TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST\0TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG\0TOO_MANY_EMPTY_FRAGMENTS\0TRIED_TO_USE_UNSUPPORTED_CIPHER\0UNABLE_TO_DECODE_DH_CERTS\0UNABLE_TO_DECODE_ECDH_CERTS\0UNABLE_TO_EXTRACT_PUBLIC_KEY\0UNABLE_TO_FIND_DH_PARAMETERS\0UNABLE_TO_FIND_ECDH_PARAMETERS\0UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS\0UNABLE_TO_FIND_SSL_METHOD\0UNABLE_TO_LOAD_SSL2_MD5_ROUTINES\0UNABLE_TO_LOAD_SSL3_MD5_ROUTINES\0UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES\0UNEXPECTED_GROUP_CLOSE\0UNEXPECTED_MESSAGE\0UNEXPECTED_OPERATOR_IN_GROUP\0UNEXPECTED_RECORD\0UNINITIALIZED\0UNKNOWN_ALERT_TYPE\0UNKNOWN_AUTHZ_DATA_TYPE\0UNKNOWN_CERTIFICATE_TYPE\0UNKNOWN_CIPHER_RETURNED\0UNKNOWN_CIPHER_TYPE\0UNKNOWN_CMD_NAME\0UNKNOWN_DIGEST\0UNKNOWN_KEY_EXCHANGE_TYPE\0UNKNOWN_PKEY_TYPE\0UNKNOWN_PROTOCOL\0UNKNOWN_REMOTE_ERROR_TYPE\0UNKNOWN_SSL_VERSION\0UNKNOWN_STATE\0UNKNOWN_SUPPLEMENTAL_DATA_TYPE\0UNPROCESSED_HANDSHAKE_DATA\0UNSAFE_LEGACY_RENEGOTIATION_DISABLED\0UNSUPPORTED_CIPHER\0UNSUPPORTED_COMPRESSION_ALGORITHM\0UNSUPPORTED_DIGEST_TYPE\0UNSUPPORTED_ELLIPTIC_CURVE\0UNSUPPORTED_PROTOCOL\0UNSUPPORTED_SSL_VERSION\0UNSUPPORTED_STATUS_TYPE\0USE_SRTP_NOT_NEGOTIATED\0WRITE_BIO_NOT_SET\0WRONG_CERTIFICATE_TYPE\0WRONG_CIPHER_RETURNED\0WRONG_CURVE\0WRONG_MESSAGE_TYPE\0WRONG_NUMBER_OF_KEY_BITS\0WRONG_SIGNATURE_LENGTH\0WRONG_SIGNATURE_SIZE\0WRONG_SIGNATURE_TYPE\0WRONG_SSL_VERSION\0WRONG_VERSION_NUMBER\0X509_LIB\0X509_VERIFICATION_SETUP_PROBLEMS\0BAD_IP_ADDRESS\0BAD_OBJECT\0BN_DEC2BN_ERROR\0BN_TO_ASN1_INTEGER_ERROR\0CANNOT_FIND_FREE_FUNCTION\0DIRNAME_ERROR\0DISTPOINT_ALREADY_SET\0DUPLICATE_ZONE_ID\0ERROR_CONVERTING_ZONE\0ERROR_CREATING_EXTENSION\0ERROR_IN_EXTENSION\0EXPECTED_A_SECTION_NAME\0EXTENSION_EXISTS\0EXTENSION_NAME_ERROR\0EXTENSION_NOT_FOUND\0EXTENSION_SETTING_NOT_SUPPORTED\0EXTENSION_VALUE_ERROR\0ILLEGAL_EMPTY_EXTENSION\0ILLEGAL_HEX_DIGIT\0INCORRECT_POLICY_SYNTAX_TAG\0INVALID_ASNUMBER\0INVALID_ASRANGE\0INVALID_BOOLEAN_STRING\0INVALID_EXTENSION_STRING\0INVALID_INHERITANCE\0INVALID_IPADDRESS\0INVALID_MULTIPLE_RDNS\0INVALID_NAME\0INVALID_NULL_ARGUMENT\0INVALID_NULL_NAME\0INVALID_NULL_VALUE\0INVALID_NUMBER\0INVALID_NUMBERS\0INVALID_OBJECT_IDENTIFIER\0INVALID_OPTION\0INVALID_POLICY_IDENTIFIER\0INVALID_PROXY_POLICY_SETTING\0INVALID_SAFI\0INVALID_SECTION\0INVALID_SYNTAX\0ISSUER_DECODE_ERROR\0MISSING_VALUE\0NEED_ORGANIZATION_AND_NUMBERS\0NO_CONFIG_DATABASE\0NO_ISSUER_CERTIFICATE\0NO_ISSUER_DETAILS\0NO_POLICY_IDENTIFIER\0NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED\0NO_PUBLIC_KEY\0NO_SUBJECT_DETAILS\0ODD_NUMBER_OF_DIGITS\0OPERATION_NOT_DEFINED\0OTHERNAME_ERROR\0POLICY_LANGUAGE_ALREADY_DEFINED\0POLICY_PATH_LENGTH\0POLICY_PATH_LENGTH_ALREADY_DEFINED\0POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED\0POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY\0SECTION_NOT_FOUND\0UNABLE_TO_GET_ISSUER_DETAILS\0UNABLE_TO_GET_ISSUER_KEYID\0UNKNOWN_BIT_STRING_ARGUMENT\0UNKNOWN_EXTENSION\0UNKNOWN_EXTENSION_NAME\0UNKNOWN_OPTION\0UNSUPPORTED_OPTION\0UNSUPPORTED_TYPE\0USER_TOO_LONG\0OUTPUT_TOO_LARGE\0BUFFER_TOO_SMALL\0COMMAND_NOT_SUPPORTED\0CONTEXT_NOT_INITIALISED\0DIFFERENT_KEY_TYPES\0DIFFERENT_PARAMETERS\0DIGEST_AND_KEY_TYPE_NOT_SUPPORTED\0DIGEST_DOES_NOT_MATCH\0EXPECTING_AN_DSA_KEY\0EXPECTING_AN_EC_KEY_KEY\0EXPECTING_AN_RSA_KEY\0EXPECTING_A_DH_KEY\0EXPECTING_A_DSA_KEY\0EXPLICIT_EC_PARAMETERS_NOT_SUPPORTED\0ILLEGAL_OR_UNSUPPORTED_PADDING_MODE\0INVALID_CURVE\0INVALID_DIGEST_LENGTH\0INVALID_DIGEST_TYPE\0INVALID_KEYBITS\0INVALID_MGF1_MD\0INVALID_OPERATION\0INVALID_PADDING_MODE\0INVALID_PSS_PARAMETERS\0INVALID_PSS_SALTLEN\0INVALID_SALT_LENGTH\0INVALID_TRAILER\0KDF_PARAMETER_ERROR\0KEYS_NOT_SET\0MISSING_PARAMETERS\0NO_DEFAULT_DIGEST\0NO_KEY_SET\0NO_MDC2_SUPPORT\0NO_NID_FOR_CURVE\0NO_OPERATION_SET\0NO_PARAMETERS_SET\0OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE\0OPERATON_NOT_INITIALIZED\0PEER_KEY_ERROR\0SHARED_INFO_ERROR\0UNKNOWN_MASK_DIGEST\0UNKNOWN_MESSAGE_DIGEST_ALGORITHM\0UNKNOWN_PUBLIC_KEY_TYPE\0UNKNOWN_SIGNATURE_ALGORITHM\0UNSUPPORTED_ALGORITHM\0UNSUPPORTED_MASK_ALGORITHM\0UNSUPPORTED_MASK_PARAMETER\0UNSUPPORTED_PUBLIC_KEY_TYPE\0UNSUPPORTED_SIGNATURE_TYPE\0WRONG_PUBLIC_KEY_TYPE\0X931_UNSUPPORTED\0INPUT_NOT_INITIALIZED\0ADDING_OBJECT\0ASN1_LENGTH_MISMATCH\0ASN1_PARSE_ERROR\0ASN1_SIG_PARSE_ERROR\0AUX_ERROR\0BAD_CLASS\0BAD_GET_ASN1_OBJECT_CALL\0BAD_OBJECT_HEADER\0BAD_PASSWORD_READ\0BAD_TAG\0BMPSTRING_IS_WRONG_LENGTH\0BOOLEAN_IS_WRONG_LENGTH\0CIPHER_HAS_NO_OBJECT_IDENTIFIER\0DATA_IS_WRONG\0DECODING_ERROR\0DEPTH_EXCEEDED\0ENCODE_ERROR\0ERROR_GETTING_TIME\0ERROR_LOADING_SECTION\0ERROR_PARSING_SET_ELEMENT\0ERROR_SETTING_CIPHER_PARAMS\0EXPECTING_AN_ASN1_SEQUENCE\0EXPECTING_AN_INTEGER\0EXPECTING_AN_OBJECT\0EXPECTING_A_BOOLEAN\0EXPECTING_A_TIME\0EXPLICIT_LENGTH_MISMATCH\0EXPLICIT_TAG_NOT_CONSTRUCTED\0FIELD_MISSING\0FIRST_NUM_TOO_LARGE\0HEADER_TOO_LONG\0ILLEGAL_BITSTRING_FORMAT\0ILLEGAL_BOOLEAN\0ILLEGAL_CHARACTERS\0ILLEGAL_FORMAT\0ILLEGAL_HEX\0ILLEGAL_IMPLICIT_TAG\0ILLEGAL_INTEGER\0ILLEGAL_NESTED_TAGGING\0ILLEGAL_NULL\0ILLEGAL_NULL_VALUE\0ILLEGAL_OBJECT\0ILLEGAL_OPTIONAL_ANY\0ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE\0ILLEGAL_TAGGED_ANY\0ILLEGAL_TIME_VALUE\0INTEGER_NOT_ASCII_FORMAT\0INTEGER_TOO_LARGE_FOR_LONG\0INVALID_BIT_STRING_BITS_LEFT\0INVALID_BMPSTRING_LENGTH\0INVALID_DIGIT\0INVALID_MIME_TYPE\0INVALID_MODIFIER\0INVALID_OBJECT_ENCODING\0INVALID_SEPARATOR\0INVALID_TIME_FORMAT\0INVALID_UNIVERSALSTRING_LENGTH\0INVALID_UTF8STRING\0IV_TOO_LARGE\0LENGTH_ERROR\0LIST_ERROR\0MALLOC_FAILURE\0MIME_NO_CONTENT_TYPE\0MIME_PARSE_ERROR\0MIME_SIG_PARSE_ERROR\0MISSING_ASN1_EOS\0MISSING_EOC\0MISSING_SECOND_NUMBER\0MSTRING_NOT_UNIVERSAL\0MSTRING_WRONG_TAG\0NESTED_ASN1_ERROR\0NESTED_ASN1_STRING\0NON_HEX_CHARACTERS\0NOT_ASCII_FORMAT\0NOT_ENOUGH_DATA\0NO_CONTENT_TYPE\0NO_MATCHING_CHOICE_TYPE\0NO_MULTIPART_BODY_FAILURE\0NO_MULTIPART_BOUNDARY\0NO_SIG_CONTENT_TYPE\0NULL_IS_WRONG_LENGTH\0OBJECT_NOT_ASCII_FORMAT\0ODD_NUMBER_OF_CHARS\0PRIVATE_KEY_HEADER_MISSING\0SECOND_NUMBER_TOO_LARGE\0SEQUENCE_LENGTH_MISMATCH\0SEQUENCE_NOT_CONSTRUCTED\0SEQUENCE_OR_SET_NEEDS_CONFIG\0SHORT_LINE\0SIG_INVALID_MIME_TYPE\0STREAMING_NOT_SUPPORTED\0STRING_TOO_LONG\0STRING_TOO_SHORT\0TAG_VALUE_TOO_HIGH\0THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD\0TIME_NOT_ASCII_FORMAT\0TOO_LONG\0TYPE_NOT_CONSTRUCTED\0TYPE_NOT_PRIMITIVE\0UNABLE_TO_DECODE_RSA_KEY\0UNABLE_TO_DECODE_RSA_PRIVATE_KEY\0UNEXPECTED_EOC\0UNIVERSALSTRING_IS_WRONG_LENGTH\0UNKNOWN_FORMAT\0UNKNOWN_OBJECT_TYPE\0UNKNOWN_TAG\0UNSUPPORTED_ANY_DEFINED_BY_TYPE\0UNSUPPORTED_ENCRYPTION_ALGORITHM\0WRONG_TAG\0WRONG_TYPE\0BAD_MAC\0BAD_PKCS12_DATA\0BAD_PKCS12_VERSION\0CRYPT_ERROR\0ENCRYPT_ERROR\0INCORRECT_PASSWORD\0KEYGEN_FAILURE\0KEY_GEN_ERROR\0METHOD_NOT_SUPPORTED\0MISSING_MAC\0MULTIPLE_PRIVATE_KEYS_IN_PKCS12\0PKCS12_PUBLIC_KEY_INTEGRITY_NOT_SUPPORTED\0PKCS12_TOO_DEEPLY_NESTED\0PRIVATE_KEY_DECODE_ERROR\0PRIVATE_KEY_ENCODE_ERROR\0UNKNOWN_ALGORITHM\0UNKNOWN_CIPHER\0UNKNOWN_CIPHER_ALGORITHM\0UNKNOWN_HASH\0UNSUPPORTED_PRIVATE_KEY_ALGORITHM\0OPERATION_NOT_SUPPORTED\0ASN1_OBJECT_TOO_LONG\0BAD_FOPEN_MODE\0BROKEN_PIPE\0CONNECT_ERROR\0ERROR_SETTING_NBIO\0INVALID_ARGUMENT\0IN_USE\0KEEPALIVE\0NBIO_CONNECT_ERROR\0NO_HOSTNAME_SPECIFIED\0NO_PORT_SPECIFIED\0NO_SUCH_FILE\0NULL_PARAMETER\0SYS_LIB\0UNABLE_TO_CREATE_SOCKET\0UNSUPPORTED_METHOD\0WRITE_TO_READ_ONLY_BIO\0NEED_NEW_SETUP_VALUES\0NOT_IMPLEMENTED\0RANDOM_NUMBER_GENERATION_FAILED\0LIST_CANNOT_BE_NULL\0MISSING_CLOSE_SQUARE_BRACKET\0MISSING_EQUAL_SIGN\0NO_CLOSE_BRACE\0UNABLE_TO_CREATE_NEW_SECTION\0VARIABLE_HAS_NO_VALUE\0COORDINATES_OUT_OF_RANGE\0D2I_ECPKPARAMETERS_FAILURE\0EC_GROUP_NEW_BY_NAME_FAILURE\0GF2M_NOT_SUPPORTED\0GROUP2PKPARAMETERS_FAILURE\0I2D_ECPKPARAMETERS_FAILURE\0INCOMPATIBLE_OBJECTS\0INVALID_COMPRESSED_POINT\0INVALID_COMPRESSION_BIT\0INVALID_ENCODING\0INVALID_FIELD\0INVALID_FORM\0INVALID_GROUP_ORDER\0INVALID_PRIVATE_KEY\0MISSING_PRIVATE_KEY\0NON_NAMED_CURVE\0NOT_INITIALIZED\0PKPARAMETERS2GROUP_FAILURE\0POINT_AT_INFINITY\0POINT_IS_NOT_ON_CURVE\0SLOT_FULL\0UNDEFINED_GENERATOR\0UNKNOWN_GROUP\0UNKNOWN_ORDER\0WRONG_ORDER\0BAD_GENERATOR\0INVALID_PUBKEY\0MODULUS_TOO_LARGE\0NO_PRIVATE_VALUE\0BAD_Q_VALUE\0BAD_E_VALUE\0BAD_FIXED_HEADER_DECRYPT\0BAD_PAD_BYTE_COUNT\0BAD_RSA_PARAMETERS\0BLOCK_TYPE_IS_NOT_01\0BLOCK_TYPE_IS_NOT_02\0BN_NOT_INITIALIZED\0CRT_PARAMS_ALREADY_GIVEN\0CRT_VALUES_INCORRECT\0DATA_LEN_NOT_EQUAL_TO_MOD_LEN\0DATA_TOO_LARGE\0DATA_TOO_LARGE_FOR_KEY_SIZE\0DATA_TOO_LARGE_FOR_MODULUS\0DATA_TOO_SMALL\0DATA_TOO_SMALL_FOR_KEY_SIZE\0DIGEST_TOO_BIG_FOR_RSA_KEY\0D_E_NOT_CONGRUENT_TO_1\0EMPTY_PUBLIC_KEY\0FIRST_OCTET_INVALID\0INCONSISTENT_SET_OF_CRT_VALUES\0INTERNAL_ERROR\0INVALID_MESSAGE_LENGTH\0KEY_SIZE_TOO_SMALL\0LAST_OCTET_INVALID\0NO_PUBLIC_EXPONENT\0NULL_BEFORE_BLOCK_MISSING\0N_NOT_EQUAL_P_Q\0OAEP_DECODING_ERROR\0ONLY_ONE_OF_P_Q_GIVEN\0OUTPUT_BUFFER_TOO_SMALL\0PADDING_CHECK_FAILED\0PKCS_DECODING_ERROR\0SLEN_CHECK_FAILED\0SLEN_RECOVERY_FAILED\0SSLV3_ROLLBACK_ATTACK\0TOO_MANY_ITERATIONS\0UNKNOWN_ALGORITHM_TYPE\0UNKNOWN_PADDING_TYPE\0VALUE_MISSING\0AES_KEY_SETUP_FAILED\0BAD_DECRYPT\0BAD_KEY_LENGTH\0CTRL_NOT_IMPLEMENTED\0CTRL_OPERATION_NOT_IMPLEMENTED\0DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH\0INITIALIZATION_ERROR\0INVALID_AD\0INVALID_AD_SIZE\0INVALID_KEY_LENGTH\0INVALID_NONCE_SIZE\0NO_CIPHER_SET\0OUTPUT_ALIASES_INPUT\0TAG_TOO_LARGE\0TOO_LARGE\0UNSUPPORTED_AD_SIZE\0UNSUPPORTED_INPUT_SIZE\0UNSUPPORTED_KEY_SIZE\0UNSUPPORTED_NONCE_SIZE\0UNSUPPORTED_TAG_SIZE\0WRAP_MODE_NOT_ALLOWED\0WRONG_FINAL_BLOCK_LENGTH\0BAD_BASE64_DECODE\0BAD_END_LINE\0BAD_IV_CHARS\0BAD_MAGIC_NUMBER\0BAD_VERSION_NUMBER\0BIO_WRITE_FAILURE\0CIPHER_IS_NULL\0ERROR_CONVERTING_PRIVATE_KEY\0EXPECTING_PRIVATE_KEY_BLOB\0EXPECTING_PUBLIC_KEY_BLOB\0INCONSISTENT_HEADER\0KEYBLOB_HEADER_PARSE_ERROR\0KEYBLOB_TOO_SHORT\0NOT_DEK_INFO\0NOT_ENCRYPTED\0NOT_PROC_TYPE\0NO_START_LINE\0PROBLEMS_GETTING_PASSWORD\0PUBLIC_KEY_NO_RSA\0PVK_DATA_TOO_SHORT\0PVK_TOO_SHORT\0READ_KEY\0SHORT_HEADER\0UNSUPPORTED_ENCRYPTION\0UNSUPPORTED_KEY_COMPONENTS\0KDF_FAILED\0POINT_ARITHMETIC_FAILURE\0UNKNOWN_NID\0AKID_MISMATCH\0BAD_PKCS7_VERSION\0BAD_X509_FILETYPE\0BASE64_DECODE_ERROR\0CANT_CHECK_DH_KEY\0CERT_ALREADY_IN_HASH_TABLE\0CRL_ALREADY_DELTA\0CRL_VERIFY_FAILURE\0ERR_ASN1_LIB\0IDP_MISMATCH\0INVALID_DIRECTORY\0INVALID_FIELD_NAME\0ISSUER_MISMATCH\0KEY_TYPE_MISMATCH\0KEY_VALUES_MISMATCH\0LOADING_CERT_DIR\0LOADING_DEFAULTS\0NEWER_CRL_NOT_NEWER\0NOT_PKCS7_SIGNED_DATA\0NO_CERTIFICATES_INCLUDED\0NO_CERT_SET_FOR_US_TO_VERIFY\0NO_CRL_NUMBER\0PUBLIC_KEY_DECODE_ERROR\0PUBLIC_KEY_ENCODE_ERROR\0SHOULD_RETRY\0UNABLE_TO_FIND_PARAMETERS_IN_CHAIN\0UNABLE_TO_GET_CERTS_PUBLIC_KEY\0UNKNOWN_KEY_TYPE\0UNKNOWN_PURPOSE_ID\0UNKNOWN_TRUST_ID\0WRONG_LOOKUP_TYPE\0ARG2_LT_ARG3\0BAD_RECIPROCAL\0BIGNUM_TOO_LONG\0BITS_TOO_SMALL\0CALLED_WITH_EVEN_MODULUS\0DIV_BY_ZERO\0EXPAND_ON_STATIC_BIGNUM_DATA\0INPUT_NOT_REDUCED\0INVALID_RANGE\0NEGATIVE_NUMBER\0NOT_A_SQUARE\0NO_INVERSE\0PRIVATE_KEY_TOO_LARGE\0P_IS_NOT_PRIME\0TOO_MANY_TEMPORARY_VARIABLES\0";
+
diff --git a/crypto/err/err_data_generate.go b/crypto/err/err_data_generate.go
new file mode 100644
index 0000000..c29c8ae
--- /dev/null
+++ b/crypto/err/err_data_generate.go
@@ -0,0 +1,282 @@
+/* Copyright (c) 2015, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+package main
+
+import (
+	"bufio"
+	"bytes"
+	"errors"
+	"fmt"
+	"io"
+	"os"
+	"sort"
+	"strconv"
+	"strings"
+)
+
+// libraryNames must be kept in sync with the enum in err.h. The generated code
+// will contain static assertions to enforce this.
+var libraryNames = []string{
+	"NONE",
+	"SYS",
+	"BN",
+	"RSA",
+	"DH",
+	"EVP",
+	"BUF",
+	"OBJ",
+	"PEM",
+	"DSA",
+	"X509",
+	"ASN1",
+	"CONF",
+	"CRYPTO",
+	"EC",
+	"SSL",
+	"BIO",
+	"PKCS7",
+	"PKCS8",
+	"X509V3",
+	"RAND",
+	"ENGINE",
+	"OCSP",
+	"UI",
+	"COMP",
+	"ECDSA",
+	"ECDH",
+	"HMAC",
+	"DIGEST",
+	"CIPHER",
+	"USER",
+	"HKDF",
+}
+
+// stringList is a map from uint32 -> string which can output data for a sorted
+// list as C literals.
+type stringList struct {
+	// entries is an array of keys and offsets into |stringData|. The
+	// offsets are in the bottom 15 bits of each uint32 and the key is the
+	// top 17 bits.
+	entries         []uint32
+	// internedStrings contains the same strings as are in |stringData|,
+	// but allows for easy deduplication. It maps a string to its offset in
+	// |stringData|.
+	internedStrings map[string]uint32
+	stringData      []byte
+}
+
+func newStringList() *stringList {
+	return &stringList{
+		internedStrings: make(map[string]uint32),
+	}
+}
+
+// offsetMask is the bottom 15 bits. It's a mask that selects the offset from a
+// uint32 in entries.
+const offsetMask = 0x7fff
+
+func (st *stringList) Add(key uint32, value string) error {
+	if key&offsetMask != 0 {
+		return errors.New("need bottom 15 bits of the key for the offset")
+	}
+	offset, ok := st.internedStrings[value]
+	if !ok {
+		offset = uint32(len(st.stringData))
+		if offset&offsetMask != offset {
+			return errors.New("stringList overflow")
+		}
+		st.stringData = append(st.stringData, []byte(value)...)
+		st.stringData = append(st.stringData, 0)
+		st.internedStrings[value] = offset
+	}
+
+	for _, existing := range st.entries {
+		if existing>>15 == key>>15 {
+			panic("duplicate entry")
+		}
+	}
+	st.entries = append(st.entries, key|offset)
+	return nil
+}
+
+// keySlice is a type that implements sorting of entries values.
+type keySlice []uint32
+
+func (ks keySlice) Len() int {
+	return len(ks)
+}
+
+func (ks keySlice) Less(i, j int) bool {
+	return (ks[i] >> 15) < (ks[j] >> 15)
+}
+
+func (ks keySlice) Swap(i, j int) {
+	ks[i], ks[j] = ks[j], ks[i]
+}
+
+func (st *stringList) buildList() []uint32 {
+	sort.Sort(keySlice(st.entries))
+	return st.entries
+}
+
+type stringWriter interface {
+	io.Writer
+	WriteString(string) (int, error)
+}
+
+func (st *stringList) WriteTo(out stringWriter, name string) {
+	list := st.buildList()
+	fmt.Fprintf(os.Stderr, "%s: %d bytes of list and %d bytes of string data.\n", name, 4*len(list), len(st.stringData))
+
+	out.WriteString("static const uint32_t k" + name + "Values[] = {\n")
+	for _, v := range list {
+		fmt.Fprintf(out, "    0x%x,\n", v)
+	}
+	out.WriteString("};\n\n")
+
+	out.WriteString("static const char k" + name + "StringData[] = \"")
+	for i, c := range st.stringData {
+		if c == 0 {
+			out.WriteString("\\0")
+			continue
+		}
+		out.Write(st.stringData[i : i+1])
+	}
+	out.WriteString("\";\n\n")
+}
+
+type errorData struct {
+	functions, reasons *stringList
+	libraryMap         map[string]uint32
+}
+
+func (e *errorData) readErrorDataFile(filename string) error {
+	inFile, err := os.Open(filename)
+	if err != nil {
+		return err
+	}
+	defer inFile.Close()
+
+	scanner := bufio.NewScanner(inFile)
+	comma := []byte(",")
+
+	lineNo := 0
+	for scanner.Scan() {
+		lineNo++
+
+		line := scanner.Bytes()
+		if len(line) == 0 {
+			continue
+		}
+		parts := bytes.Split(line, comma)
+		if len(parts) != 4 {
+			return fmt.Errorf("bad line %d in %s: found %d values but want 4", lineNo, filename, len(parts))
+		}
+		libNum, ok := e.libraryMap[string(parts[0])]
+		if !ok {
+			return fmt.Errorf("bad line %d in %s: unknown library", lineNo, filename)
+		}
+		if libNum >= 64 {
+			return fmt.Errorf("bad line %d in %s: library value too large", lineNo, filename)
+		}
+		key, err := strconv.ParseUint(string(parts[2]), 10 /* base */, 32 /* bit size */)
+		if err != nil {
+			return fmt.Errorf("bad line %d in %s: %s", lineNo, filename, err)
+		}
+		if key >= 2048 {
+			return fmt.Errorf("bad line %d in %s: key too large", lineNo, filename)
+		}
+		value := string(parts[3])
+
+		listKey := libNum<<26 | uint32(key)<<15
+
+		switch string(parts[1]) {
+		case "function":
+			err = e.functions.Add(listKey, value)
+		case "reason":
+			err = e.reasons.Add(listKey, value)
+		default:
+			return fmt.Errorf("bad line %d in %s: bad value type", lineNo, filename)
+		}
+
+		if err != nil {
+			return err
+		}
+	}
+
+	return scanner.Err()
+}
+
+func main() {
+	e := &errorData{
+		functions:  newStringList(),
+		reasons:    newStringList(),
+		libraryMap: make(map[string]uint32),
+	}
+	for i, name := range libraryNames {
+		e.libraryMap[name] = uint32(i) + 1
+	}
+
+	cwd, err := os.Open(".")
+	if err != nil {
+		panic(err)
+	}
+	names, err := cwd.Readdirnames(-1)
+	if err != nil {
+		panic(err)
+	}
+
+	for _, name := range names {
+		if !strings.HasSuffix(name, ".errordata") {
+			continue
+		}
+		if err := e.readErrorDataFile(name); err != nil {
+			panic(err)
+		}
+	}
+
+	out := os.Stdout
+
+	out.WriteString(`/* Copyright (c) 2015, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+ /* This file was generated by err_data_generate.go. */
+
+#include <openssl/base.h>
+#include <openssl/type_check.h>
+
+
+`)
+
+	for i, name := range libraryNames {
+		fmt.Fprintf(out, "OPENSSL_COMPILE_ASSERT(ERR_LIB_%s == %d, library_values_changed);\n", name, i+1)
+	}
+	fmt.Fprintf(out, "OPENSSL_COMPILE_ASSERT(ERR_NUM_LIBS == %d, library_values_changed);\n", len(libraryNames) + 1)
+	out.WriteString("\n")
+
+	e.functions.WriteTo(out, "Function")
+	e.reasons.WriteTo(out, "Reason")
+}
diff --git a/crypto/err/err_impl.c b/crypto/err/err_impl.c
index 32cff35..0c36f82 100644
--- a/crypto/err/err_impl.c
+++ b/crypto/err/err_impl.c
@@ -122,84 +122,9 @@
  * storage. */
 static LHASH_OF(ERR_STATE) *state_hash = NULL;
 
-/* error_hash maps from a packed error to the string for that library /
- * function / reason. */
-static LHASH_OF(ERR_STRING_DATA) *error_hash = NULL;
-
 /* global_next_library contains the next custom library value to return. */
 static int global_next_library = ERR_NUM_LIBS;
 
-/* err_string_data_hash is an lhash hash function for ERR_STRING_DATA. */
-static uint32_t err_string_data_hash(const ERR_STRING_DATA *a) {
-  return OPENSSL_hash32(&a->error, sizeof(a->error));
-}
-
-/* err_string_data_cmp is an lhash compare function for ERR_STRING_DATA. */
-static int err_string_data_cmp(const ERR_STRING_DATA *a,
-                               const ERR_STRING_DATA *b) {
-  return ((int)a->error) - ((int)b->error);
-}
-
-/* error_hash_get_write_locked returns the hash that maps from packed error to
- * error string and creates it if need be. The caller must hold a write lock on
- * LOCK_ERR. */
-static LHASH_OF(ERR_STRING_DATA) * error_hash_get_write_locked(void) {
-  if (!error_hash) {
-    error_hash = lh_ERR_STRING_DATA_new(err_string_data_hash, err_string_data_cmp);
-  }
-
-  return error_hash;
-}
-
-/* err_get_item returns an ERR_STRING_DATA with an |error| member that
- * equals |packed_error|, or NULL if none can be found. */
-static ERR_STRING_DATA *err_get_item(uint32_t packed_error) {
-  ERR_STRING_DATA *ret = NULL, pattern;
-
-  pattern.error = packed_error;
-
-  CRYPTO_r_lock(CRYPTO_LOCK_ERR);
-  if (error_hash) {
-    ret = lh_ERR_STRING_DATA_retrieve(error_hash, &pattern);
-  }
-  CRYPTO_r_unlock(CRYPTO_LOCK_ERR);
-
-  return ret;
-}
-
-/* err_set_item adds an ERR_STRING_DATA to the global hash of error strings and
- * returns the previous entry with the same |err->error| value, if any. */
-static ERR_STRING_DATA *err_set_item(const ERR_STRING_DATA *err) {
-  ERR_STRING_DATA *old_item = NULL;
-  LHASH_OF(ERR_STRING_DATA) *hash;
-
-  CRYPTO_w_lock(CRYPTO_LOCK_ERR);
-  hash = error_hash_get_write_locked();
-  if (hash) {
-    lh_ERR_STRING_DATA_insert(hash, &old_item, (ERR_STRING_DATA*) err);
-  }
-  CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
-
-  return old_item;
-}
-
-/* err_set_item removes an item from the global hash of error strings for
- * |packed_error| and returns the removed entry, if any. */
-static ERR_STRING_DATA *err_del_item(uint32_t packed_error) {
-  ERR_STRING_DATA *old_item = NULL, pattern;
-
-  pattern.error = packed_error;
-
-  CRYPTO_w_lock(CRYPTO_LOCK_ERR);
-  if (error_hash) {
-    old_item = lh_ERR_STRING_DATA_delete(error_hash, &pattern);
-  }
-  CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
-
-  return old_item;
-}
-
-
 /* err_state_hash is an lhash hash function for ERR_STATE. */
 static uint32_t err_state_hash(const ERR_STATE *a) {
   return CRYPTO_THREADID_hash(&a->tid);
@@ -210,7 +135,6 @@
   return CRYPTO_THREADID_cmp(&a->tid, &b->tid);
 }
 
-
 static ERR_STATE *err_get_state(void) {
   CRYPTO_THREADID tid;
   ERR_STATE pattern, *state, *race_state;
@@ -290,10 +214,6 @@
 
 static void err_shutdown(void (*err_state_free_cb)(ERR_STATE*)) {
   CRYPTO_w_lock(CRYPTO_LOCK_ERR);
-  if (error_hash) {
-    lh_ERR_STRING_DATA_free(error_hash);
-    error_hash = NULL;
-  }
   if (state_hash) {
     lh_ERR_STATE_doall(state_hash, err_state_free_cb);
     lh_ERR_STATE_free(state_hash);
@@ -314,9 +234,6 @@
 
 const struct ERR_FNS_st openssl_err_default_impl = {
   err_shutdown,
-  err_get_item,
-  err_set_item,
-  err_del_item,
   err_get_state,
   err_release_state,
   err_get_next_library,
diff --git a/crypto/err/evp.errordata b/crypto/err/evp.errordata
new file mode 100644
index 0000000..d2df521
--- /dev/null
+++ b/crypto/err/evp.errordata
@@ -0,0 +1,110 @@
+EVP,function,156,EVP_DigestSignAlgorithm
+EVP,function,155,EVP_DigestVerifyInitFromAlgorithm
+EVP,function,135,EVP_PKEY_CTX_ctrl
+EVP,function,158,EVP_PKEY_CTX_dup
+EVP,function,138,EVP_PKEY_copy_parameters
+EVP,function,137,EVP_PKEY_decrypt
+EVP,function,136,EVP_PKEY_decrypt_init
+EVP,function,140,EVP_PKEY_derive
+EVP,function,127,EVP_PKEY_derive_init
+EVP,function,146,EVP_PKEY_derive_set_peer
+EVP,function,115,EVP_PKEY_encrypt
+EVP,function,121,EVP_PKEY_encrypt_init
+EVP,function,108,EVP_PKEY_get1_DH
+EVP,function,151,EVP_PKEY_get1_DSA
+EVP,function,125,EVP_PKEY_get1_EC_KEY
+EVP,function,111,EVP_PKEY_get1_RSA
+EVP,function,116,EVP_PKEY_keygen
+EVP,function,141,EVP_PKEY_keygen_init
+EVP,function,132,EVP_PKEY_new
+EVP,function,139,EVP_PKEY_set_type
+EVP,function,109,EVP_PKEY_sign
+EVP,function,104,EVP_PKEY_sign_init
+EVP,function,114,EVP_PKEY_verify
+EVP,function,126,EVP_PKEY_verify_init
+EVP,function,148,check_padding_md
+EVP,function,130,d2i_AutoPrivateKey
+EVP,function,105,d2i_PrivateKey
+EVP,function,119,do_EC_KEY_print
+EVP,function,142,do_rsa_print
+EVP,function,101,do_sigver_init
+EVP,function,128,eckey_param2type
+EVP,function,131,eckey_param_decode
+EVP,function,102,eckey_priv_decode
+EVP,function,118,eckey_priv_encode
+EVP,function,129,eckey_pub_decode
+EVP,function,145,eckey_pub_encode
+EVP,function,117,eckey_type2param
+EVP,function,113,evp_pkey_ctx_new
+EVP,function,154,hmac_signctx
+EVP,function,149,i2d_PublicKey
+EVP,function,110,old_ec_priv_decode
+EVP,function,143,old_rsa_priv_decode
+EVP,function,112,pkey_ec_ctrl
+EVP,function,133,pkey_ec_derive
+EVP,function,120,pkey_ec_keygen
+EVP,function,134,pkey_ec_paramgen
+EVP,function,103,pkey_ec_sign
+EVP,function,122,pkey_rsa_ctrl
+EVP,function,153,pkey_rsa_decrypt
+EVP,function,152,pkey_rsa_encrypt
+EVP,function,147,pkey_rsa_sign
+EVP,function,144,rsa_algor_to_md
+EVP,function,157,rsa_digest_verify_init_from_algorithm
+EVP,function,100,rsa_item_verify
+EVP,function,107,rsa_mgf1_to_md
+EVP,function,123,rsa_priv_decode
+EVP,function,106,rsa_priv_encode
+EVP,function,124,rsa_pss_to_ctx
+EVP,function,150,rsa_pub_decode
+EVP,reason,121,BUFFER_TOO_SMALL
+EVP,reason,132,COMMAND_NOT_SUPPORTED
+EVP,reason,146,CONTEXT_NOT_INITIALISED
+EVP,reason,143,DECODE_ERROR
+EVP,reason,113,DIFFERENT_KEY_TYPES
+EVP,reason,111,DIFFERENT_PARAMETERS
+EVP,reason,147,DIGEST_AND_KEY_TYPE_NOT_SUPPORTED
+EVP,reason,110,DIGEST_DOES_NOT_MATCH
+EVP,reason,118,EXPECTING_AN_DSA_KEY
+EVP,reason,129,EXPECTING_AN_EC_KEY_KEY
+EVP,reason,141,EXPECTING_AN_RSA_KEY
+EVP,reason,103,EXPECTING_A_DH_KEY
+EVP,reason,127,EXPECTING_A_DSA_KEY
+EVP,reason,133,EXPLICIT_EC_PARAMETERS_NOT_SUPPORTED
+EVP,reason,134,ILLEGAL_OR_UNSUPPORTED_PADDING_MODE
+EVP,reason,136,INVALID_CURVE
+EVP,reason,131,INVALID_DIGEST_LENGTH
+EVP,reason,102,INVALID_DIGEST_TYPE
+EVP,reason,125,INVALID_KEYBITS
+EVP,reason,123,INVALID_MGF1_MD
+EVP,reason,142,INVALID_OPERATION
+EVP,reason,122,INVALID_PADDING_MODE
+EVP,reason,138,INVALID_PSS_PARAMETERS
+EVP,reason,144,INVALID_PSS_SALTLEN
+EVP,reason,120,INVALID_SALT_LENGTH
+EVP,reason,130,INVALID_TRAILER
+EVP,reason,139,KDF_PARAMETER_ERROR
+EVP,reason,108,KEYS_NOT_SET
+EVP,reason,105,MISSING_PARAMETERS
+EVP,reason,106,NO_DEFAULT_DIGEST
+EVP,reason,137,NO_KEY_SET
+EVP,reason,135,NO_MDC2_SUPPORT
+EVP,reason,115,NO_NID_FOR_CURVE
+EVP,reason,116,NO_OPERATION_SET
+EVP,reason,114,NO_PARAMETERS_SET
+EVP,reason,112,OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE
+EVP,reason,104,OPERATON_NOT_INITIALIZED
+EVP,reason,126,PEER_KEY_ERROR
+EVP,reason,124,SHARED_INFO_ERROR
+EVP,reason,107,UNKNOWN_DIGEST
+EVP,reason,119,UNKNOWN_MASK_DIGEST
+EVP,reason,150,UNKNOWN_MESSAGE_DIGEST_ALGORITHM
+EVP,reason,145,UNKNOWN_PUBLIC_KEY_TYPE
+EVP,reason,149,UNKNOWN_SIGNATURE_ALGORITHM
+EVP,reason,117,UNSUPPORTED_ALGORITHM
+EVP,reason,128,UNSUPPORTED_MASK_ALGORITHM
+EVP,reason,140,UNSUPPORTED_MASK_PARAMETER
+EVP,reason,100,UNSUPPORTED_PUBLIC_KEY_TYPE
+EVP,reason,101,UNSUPPORTED_SIGNATURE_TYPE
+EVP,reason,148,WRONG_PUBLIC_KEY_TYPE
+EVP,reason,109,X931_UNSUPPORTED
diff --git a/crypto/err/hkdf.errordata b/crypto/err/hkdf.errordata
new file mode 100644
index 0000000..878a802
--- /dev/null
+++ b/crypto/err/hkdf.errordata
@@ -0,0 +1,2 @@
+HKDF,function,100,HKDF
+HKDF,reason,100,OUTPUT_TOO_LARGE
diff --git a/crypto/err/obj.errordata b/crypto/err/obj.errordata
new file mode 100644
index 0000000..2584fbf
--- /dev/null
+++ b/crypto/err/obj.errordata
@@ -0,0 +1,5 @@
+OBJ,function,101,OBJ_create
+OBJ,function,102,OBJ_dup
+OBJ,function,103,OBJ_nid2obj
+OBJ,function,100,OBJ_txt2obj
+OBJ,reason,100,UNKNOWN_NID
diff --git a/crypto/err/pem.errordata b/crypto/err/pem.errordata
new file mode 100644
index 0000000..4652919
--- /dev/null
+++ b/crypto/err/pem.errordata
@@ -0,0 +1,52 @@
+PEM,function,107,PEM_ASN1_read
+PEM,function,106,PEM_ASN1_read_bio
+PEM,function,114,PEM_ASN1_write
+PEM,function,119,PEM_ASN1_write_bio
+PEM,function,109,PEM_X509_INFO_read
+PEM,function,112,PEM_X509_INFO_read_bio
+PEM,function,113,PEM_X509_INFO_write_bio
+PEM,function,120,PEM_do_header
+PEM,function,108,PEM_get_EVP_CIPHER_INFO
+PEM,function,111,PEM_read
+PEM,function,105,PEM_read_DHparams
+PEM,function,104,PEM_read_PrivateKey
+PEM,function,123,PEM_read_bio
+PEM,function,100,PEM_read_bio_DHparams
+PEM,function,110,PEM_read_bio_Parameters
+PEM,function,117,PEM_read_bio_PrivateKey
+PEM,function,102,PEM_write
+PEM,function,118,PEM_write_PrivateKey
+PEM,function,121,PEM_write_bio
+PEM,function,115,d2i_PKCS8PrivateKey_bio
+PEM,function,116,d2i_PKCS8PrivateKey_fp
+PEM,function,122,do_pk8pkey
+PEM,function,103,do_pk8pkey_fp
+PEM,function,101,load_iv
+PEM,reason,118,BAD_BASE64_DECODE
+PEM,reason,108,BAD_DECRYPT
+PEM,reason,105,BAD_END_LINE
+PEM,reason,103,BAD_IV_CHARS
+PEM,reason,107,BAD_MAGIC_NUMBER
+PEM,reason,120,BAD_PASSWORD_READ
+PEM,reason,125,BAD_VERSION_NUMBER
+PEM,reason,113,BIO_WRITE_FAILURE
+PEM,reason,106,CIPHER_IS_NULL
+PEM,reason,104,ERROR_CONVERTING_PRIVATE_KEY
+PEM,reason,126,EXPECTING_PRIVATE_KEY_BLOB
+PEM,reason,116,EXPECTING_PUBLIC_KEY_BLOB
+PEM,reason,114,INCONSISTENT_HEADER
+PEM,reason,112,KEYBLOB_HEADER_PARSE_ERROR
+PEM,reason,117,KEYBLOB_TOO_SHORT
+PEM,reason,124,NOT_DEK_INFO
+PEM,reason,123,NOT_ENCRYPTED
+PEM,reason,101,NOT_PROC_TYPE
+PEM,reason,100,NO_START_LINE
+PEM,reason,111,PROBLEMS_GETTING_PASSWORD
+PEM,reason,115,PUBLIC_KEY_NO_RSA
+PEM,reason,110,PVK_DATA_TOO_SHORT
+PEM,reason,127,PVK_TOO_SHORT
+PEM,reason,119,READ_KEY
+PEM,reason,102,SHORT_HEADER
+PEM,reason,122,UNSUPPORTED_CIPHER
+PEM,reason,109,UNSUPPORTED_ENCRYPTION
+PEM,reason,121,UNSUPPORTED_KEY_COMPONENTS
diff --git a/crypto/err/pkcs8.errordata b/crypto/err/pkcs8.errordata
new file mode 100644
index 0000000..d830597
--- /dev/null
+++ b/crypto/err/pkcs8.errordata
@@ -0,0 +1,47 @@
+PKCS8,function,102,EVP_PKCS82PKEY
+PKCS8,function,101,EVP_PKEY2PKCS8
+PKCS8,function,120,PKCS12_get_key_and_certs
+PKCS8,function,118,PKCS12_handle_content_info
+PKCS8,function,119,PKCS12_handle_content_infos
+PKCS8,function,117,PKCS12_parse
+PKCS8,function,112,PKCS5_pbe2_set_iv
+PKCS8,function,106,PKCS5_pbe_set
+PKCS8,function,103,PKCS5_pbe_set0_algor
+PKCS8,function,113,PKCS5_pbkdf2_set
+PKCS8,function,115,PKCS8_decrypt
+PKCS8,function,100,PKCS8_encrypt
+PKCS8,function,116,PKCS8_encrypt_pbe
+PKCS8,function,110,pbe_cipher_init
+PKCS8,function,104,pbe_crypt
+PKCS8,function,105,pkcs12_item_decrypt_d2i
+PKCS8,function,111,pkcs12_item_i2d_encrypt
+PKCS8,function,108,pkcs12_key_gen_asc
+PKCS8,function,114,pkcs12_key_gen_raw
+PKCS8,function,107,pkcs12_key_gen_uni
+PKCS8,function,109,pkcs12_pbe_keyivgen
+PKCS8,reason,123,BAD_MAC
+PKCS8,reason,117,BAD_PKCS12_DATA
+PKCS8,reason,119,BAD_PKCS12_VERSION
+PKCS8,reason,115,CIPHER_HAS_NO_OBJECT_IDENTIFIER
+PKCS8,reason,113,CRYPT_ERROR
+PKCS8,reason,106,DECODE_ERROR
+PKCS8,reason,105,ENCODE_ERROR
+PKCS8,reason,107,ENCRYPT_ERROR
+PKCS8,reason,100,ERROR_SETTING_CIPHER_PARAMS
+PKCS8,reason,125,INCORRECT_PASSWORD
+PKCS8,reason,111,KEYGEN_FAILURE
+PKCS8,reason,116,KEY_GEN_ERROR
+PKCS8,reason,114,METHOD_NOT_SUPPORTED
+PKCS8,reason,124,MISSING_MAC
+PKCS8,reason,121,MULTIPLE_PRIVATE_KEYS_IN_PKCS12
+PKCS8,reason,118,PKCS12_PUBLIC_KEY_INTEGRITY_NOT_SUPPORTED
+PKCS8,reason,120,PKCS12_TOO_DEEPLY_NESTED
+PKCS8,reason,109,PRIVATE_KEY_DECODE_ERROR
+PKCS8,reason,101,PRIVATE_KEY_ENCODE_ERROR
+PKCS8,reason,112,TOO_LONG
+PKCS8,reason,102,UNKNOWN_ALGORITHM
+PKCS8,reason,103,UNKNOWN_CIPHER
+PKCS8,reason,110,UNKNOWN_CIPHER_ALGORITHM
+PKCS8,reason,104,UNKNOWN_DIGEST
+PKCS8,reason,122,UNKNOWN_HASH
+PKCS8,reason,108,UNSUPPORTED_PRIVATE_KEY_ALGORITHM
diff --git a/crypto/err/rsa.errordata b/crypto/err/rsa.errordata
new file mode 100644
index 0000000..47c741c
--- /dev/null
+++ b/crypto/err/rsa.errordata
@@ -0,0 +1,74 @@
+RSA,function,117,BN_BLINDING_convert_ex
+RSA,function,124,BN_BLINDING_create_param
+RSA,function,118,BN_BLINDING_invert_ex
+RSA,function,115,BN_BLINDING_new
+RSA,function,112,BN_BLINDING_update
+RSA,function,128,RSA_check_key
+RSA,function,121,RSA_new_method
+RSA,function,110,RSA_padding_add_PKCS1_OAEP_mgf1
+RSA,function,104,RSA_padding_add_PKCS1_PSS_mgf1
+RSA,function,108,RSA_padding_add_PKCS1_type_1
+RSA,function,116,RSA_padding_add_PKCS1_type_2
+RSA,function,114,RSA_padding_add_SSLv23
+RSA,function,101,RSA_padding_add_none
+RSA,function,102,RSA_padding_check_PKCS1_OAEP_mgf1
+RSA,function,122,RSA_padding_check_PKCS1_type_1
+RSA,function,126,RSA_padding_check_PKCS1_type_2
+RSA,function,113,RSA_padding_check_SSLv23
+RSA,function,100,RSA_padding_check_none
+RSA,function,127,RSA_recover_crt_params
+RSA,function,123,RSA_sign
+RSA,function,105,RSA_verify
+RSA,function,103,RSA_verify_PKCS1_PSS_mgf1
+RSA,function,125,decrypt
+RSA,function,119,encrypt
+RSA,function,109,keygen
+RSA,function,111,pkcs1_prefixed_msg
+RSA,function,129,private_transform
+RSA,function,106,rsa_setup_blinding
+RSA,function,120,sign_raw
+RSA,function,107,verify_raw
+RSA,reason,116,BAD_E_VALUE
+RSA,reason,122,BAD_FIXED_HEADER_DECRYPT
+RSA,reason,119,BAD_PAD_BYTE_COUNT
+RSA,reason,135,BAD_RSA_PARAMETERS
+RSA,reason,132,BAD_SIGNATURE
+RSA,reason,104,BLOCK_TYPE_IS_NOT_01
+RSA,reason,127,BLOCK_TYPE_IS_NOT_02
+RSA,reason,133,BN_NOT_INITIALIZED
+RSA,reason,137,CRT_PARAMS_ALREADY_GIVEN
+RSA,reason,141,CRT_VALUES_INCORRECT
+RSA,reason,144,DATA_LEN_NOT_EQUAL_TO_MOD_LEN
+RSA,reason,112,DATA_TOO_LARGE
+RSA,reason,103,DATA_TOO_LARGE_FOR_KEY_SIZE
+RSA,reason,117,DATA_TOO_LARGE_FOR_MODULUS
+RSA,reason,123,DATA_TOO_SMALL
+RSA,reason,105,DATA_TOO_SMALL_FOR_KEY_SIZE
+RSA,reason,129,DIGEST_TOO_BIG_FOR_RSA_KEY
+RSA,reason,138,D_E_NOT_CONGRUENT_TO_1
+RSA,reason,118,EMPTY_PUBLIC_KEY
+RSA,reason,115,FIRST_OCTET_INVALID
+RSA,reason,142,INCONSISTENT_SET_OF_CRT_VALUES
+RSA,reason,136,INTERNAL_ERROR
+RSA,reason,100,INVALID_MESSAGE_LENGTH
+RSA,reason,131,KEY_SIZE_TOO_SMALL
+RSA,reason,128,LAST_OCTET_INVALID
+RSA,reason,110,MODULUS_TOO_LARGE
+RSA,reason,102,NO_PUBLIC_EXPONENT
+RSA,reason,111,NULL_BEFORE_BLOCK_MISSING
+RSA,reason,140,N_NOT_EQUAL_P_Q
+RSA,reason,120,OAEP_DECODING_ERROR
+RSA,reason,143,ONLY_ONE_OF_P_Q_GIVEN
+RSA,reason,113,OUTPUT_BUFFER_TOO_SMALL
+RSA,reason,125,PADDING_CHECK_FAILED
+RSA,reason,134,PKCS_DECODING_ERROR
+RSA,reason,114,SLEN_CHECK_FAILED
+RSA,reason,108,SLEN_RECOVERY_FAILED
+RSA,reason,130,SSLV3_ROLLBACK_ATTACK
+RSA,reason,126,THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD
+RSA,reason,121,TOO_LONG
+RSA,reason,107,TOO_MANY_ITERATIONS
+RSA,reason,124,UNKNOWN_ALGORITHM_TYPE
+RSA,reason,106,UNKNOWN_PADDING_TYPE
+RSA,reason,139,VALUE_MISSING
+RSA,reason,109,WRONG_SIGNATURE_LENGTH
diff --git a/crypto/err/ssl.errordata b/crypto/err/ssl.errordata
new file mode 100644
index 0000000..d316904
--- /dev/null
+++ b/crypto/err/ssl.errordata
@@ -0,0 +1,547 @@
+SSL,function,235,D2I_SSL_SESSION
+SSL,function,153,SSL_CTX_check_private_key
+SSL,function,156,SSL_CTX_new
+SSL,function,206,SSL_CTX_set_cipher_list
+SSL,function,277,SSL_CTX_set_cipher_list_tls11
+SSL,function,227,SSL_CTX_set_session_id_context
+SSL,function,244,SSL_CTX_set_ssl_version
+SSL,function,253,SSL_CTX_use_PrivateKey
+SSL,function,261,SSL_CTX_use_PrivateKey_ASN1
+SSL,function,269,SSL_CTX_use_PrivateKey_file
+SSL,function,148,SSL_CTX_use_RSAPrivateKey
+SSL,function,173,SSL_CTX_use_RSAPrivateKey_ASN1
+SSL,function,194,SSL_CTX_use_RSAPrivateKey_file
+SSL,function,195,SSL_CTX_use_authz
+SSL,function,111,SSL_CTX_use_certificate
+SSL,function,202,SSL_CTX_use_certificate_ASN1
+SSL,function,209,SSL_CTX_use_certificate_chain_file
+SSL,function,252,SSL_CTX_use_certificate_file
+SSL,function,255,SSL_CTX_use_psk_identity_hint
+SSL,function,210,SSL_SESSION_new
+SSL,function,162,SSL_SESSION_print_fp
+SSL,function,134,SSL_SESSION_set1_id_context
+SSL,function,292,SSL_SESSION_to_bytes_full
+SSL,function,293,SSL_accept
+SSL,function,220,SSL_add_dir_cert_subjects_to_stack
+SSL,function,145,SSL_add_file_cert_subjects_to_stack
+SSL,function,185,SSL_check_private_key
+SSL,function,263,SSL_clear
+SSL,function,294,SSL_connect
+SSL,function,247,SSL_do_handshake
+SSL,function,151,SSL_load_client_CA_file
+SSL,function,273,SSL_new
+SSL,function,245,SSL_peek
+SSL,function,104,SSL_read
+SSL,function,300,SSL_renegotiate
+SSL,function,266,SSL_set_cipher_list
+SSL,function,184,SSL_set_fd
+SSL,function,228,SSL_set_rfd
+SSL,function,254,SSL_set_session
+SSL,function,103,SSL_set_session_id_context
+SSL,function,197,SSL_set_session_ticket_ext
+SSL,function,108,SSL_set_wfd
+SSL,function,170,SSL_shutdown
+SSL,function,251,SSL_use_PrivateKey
+SSL,function,208,SSL_use_PrivateKey_ASN1
+SSL,function,100,SSL_use_PrivateKey_file
+SSL,function,130,SSL_use_RSAPrivateKey
+SSL,function,214,SSL_use_RSAPrivateKey_ASN1
+SSL,function,126,SSL_use_RSAPrivateKey_file
+SSL,function,158,SSL_use_authz
+SSL,function,172,SSL_use_certificate
+SSL,function,115,SSL_use_certificate_ASN1
+SSL,function,149,SSL_use_certificate_file
+SSL,function,176,SSL_use_psk_identity_hint
+SSL,function,191,SSL_write
+SSL,function,139,authz_find_data
+SSL,function,211,check_suiteb_cipher_list
+SSL,function,287,d2i_SSL_SESSION
+SSL,function,289,d2i_SSL_SESSION_get_octet_string
+SSL,function,290,d2i_SSL_SESSION_get_string
+SSL,function,224,do_dtls1_write
+SSL,function,181,do_ssl3_write
+SSL,function,264,dtls1_accept
+SSL,function,121,dtls1_buffer_record
+SSL,function,225,dtls1_check_timeout_num
+SSL,function,129,dtls1_connect
+SSL,function,299,dtls1_do_write
+SSL,function,167,dtls1_get_hello_verify
+SSL,function,237,dtls1_get_message
+SSL,function,262,dtls1_get_message_fragment
+SSL,function,106,dtls1_heartbeat
+SSL,function,152,dtls1_preprocess_fragment
+SSL,function,231,dtls1_process_record
+SSL,function,112,dtls1_read_bytes
+SSL,function,160,dtls1_send_hello_verify_request
+SSL,function,101,dtls1_write_app_data_bytes
+SSL,function,250,fclose
+SSL,function,200,fprintf
+SSL,function,288,i2d_SSL_SESSION
+SSL,function,155,printf
+SSL,function,136,read_authz
+SSL,function,157,ssl23_accept
+SSL,function,169,ssl23_client_hello
+SSL,function,238,ssl23_connect
+SSL,function,268,ssl23_get_client_hello
+SSL,function,190,ssl23_get_server_hello
+SSL,function,283,ssl23_get_v2_client_hello
+SSL,function,175,ssl23_peek
+SSL,function,257,ssl23_read
+SSL,function,113,ssl23_write
+SSL,function,259,ssl3_accept
+SSL,function,205,ssl3_callback_ctrl
+SSL,function,284,ssl3_cert_verify_hash
+SSL,function,189,ssl3_change_cipher_state
+SSL,function,223,ssl3_check_cert_and_algorithm
+SSL,function,114,ssl3_check_client_hello
+SSL,function,128,ssl3_connect
+SSL,function,215,ssl3_ctrl
+SSL,function,146,ssl3_ctx_ctrl
+SSL,function,107,ssl3_digest_cached_records
+SSL,function,133,ssl3_do_change_cipher_spec
+SSL,function,282,ssl3_expect_change_cipher_spec
+SSL,function,271,ssl3_generate_key_block
+SSL,function,154,ssl3_get_cert_status
+SSL,function,177,ssl3_get_cert_verify
+SSL,function,138,ssl3_get_certificate_request
+SSL,function,275,ssl3_get_channel_id
+SSL,function,260,ssl3_get_client_certificate
+SSL,function,137,ssl3_get_client_hello
+SSL,function,180,ssl3_get_client_key_exchange
+SSL,function,270,ssl3_get_finished
+SSL,function,296,ssl3_get_initial_bytes
+SSL,function,142,ssl3_get_message
+SSL,function,201,ssl3_get_new_session_ticket
+SSL,function,265,ssl3_get_next_proto
+SSL,function,147,ssl3_get_record
+SSL,function,119,ssl3_get_server_certificate
+SSL,function,222,ssl3_get_server_done
+SSL,function,123,ssl3_get_server_hello
+SSL,function,218,ssl3_get_server_key_exchange
+SSL,function,295,ssl3_get_v2_client_hello
+SSL,function,182,ssl3_handshake_mac
+SSL,function,298,ssl3_prf
+SSL,function,166,ssl3_read_bytes
+SSL,function,240,ssl3_read_n
+SSL,function,186,ssl3_send_cert_verify
+SSL,function,207,ssl3_send_certificate_request
+SSL,function,276,ssl3_send_channel_id
+SSL,function,229,ssl3_send_client_certificate
+SSL,function,213,ssl3_send_client_hello
+SSL,function,124,ssl3_send_client_key_exchange
+SSL,function,291,ssl3_send_new_session_ticket
+SSL,function,246,ssl3_send_server_certificate
+SSL,function,219,ssl3_send_server_hello
+SSL,function,199,ssl3_send_server_key_exchange
+SSL,function,272,ssl3_setup_key_block
+SSL,function,243,ssl3_setup_read_buffer
+SSL,function,216,ssl3_setup_write_buffer
+SSL,function,125,ssl3_write_bytes
+SSL,function,187,ssl3_write_pending
+SSL,function,203,ssl_add_cert_chain
+SSL,function,140,ssl_add_cert_to_buf
+SSL,function,198,ssl_add_clienthello_renegotiate_ext
+SSL,function,267,ssl_add_clienthello_tlsext
+SSL,function,179,ssl_add_clienthello_use_srtp_ext
+SSL,function,141,ssl_add_serverhello_renegotiate_ext
+SSL,function,135,ssl_add_serverhello_tlsext
+SSL,function,249,ssl_add_serverhello_use_srtp_ext
+SSL,function,127,ssl_bad_method
+SSL,function,161,ssl_build_cert_chain
+SSL,function,132,ssl_bytes_to_cipher_list
+SSL,function,230,ssl_cert_dup
+SSL,function,188,ssl_cert_inst
+SSL,function,105,ssl_cert_new
+SSL,function,221,ssl_check_serverhello_tlsext
+SSL,function,143,ssl_check_srvr_ecc_cert_and_alg
+SSL,function,102,ssl_cipher_process_rulestr
+SSL,function,236,ssl_cipher_strength_sort
+SSL,function,204,ssl_create_cipher_list
+SSL,function,286,ssl_ctx_log_master_secret
+SSL,function,285,ssl_ctx_log_rsa_client_key_exchange
+SSL,function,178,ssl_ctx_make_profiles
+SSL,function,196,ssl_get_new_session
+SSL,function,241,ssl_get_prev_session
+SSL,function,233,ssl_get_server_cert_index
+SSL,function,192,ssl_get_sign_pkey
+SSL,function,171,ssl_init_wbio_buffer
+SSL,function,232,ssl_new
+SSL,function,242,ssl_parse_clienthello_renegotiate_ext
+SSL,function,144,ssl_parse_clienthello_tlsext
+SSL,function,258,ssl_parse_clienthello_use_srtp_ext
+SSL,function,117,ssl_parse_serverhello_renegotiate_ext
+SSL,function,274,ssl_parse_serverhello_tlsext
+SSL,function,217,ssl_parse_serverhello_use_srtp_ext
+SSL,function,122,ssl_prepare_clienthello_tlsext
+SSL,function,212,ssl_scan_clienthello_tlsext
+SSL,function,256,ssl_scan_serverhello_tlsext
+SSL,function,165,ssl_sess_cert_new
+SSL,function,174,ssl_set_authz
+SSL,function,193,ssl_set_cert
+SSL,function,110,ssl_set_pkey
+SSL,function,118,ssl_undefined_const_function
+SSL,function,159,ssl_undefined_function
+SSL,function,248,ssl_undefined_void_function
+SSL,function,116,ssl_verify_cert_chain
+SSL,function,164,tls12_check_peer_sigalg
+SSL,function,280,tls1_aead_ctx_init
+SSL,function,168,tls1_cert_verify_mac
+SSL,function,163,tls1_change_cipher_state
+SSL,function,279,tls1_change_cipher_state_aead
+SSL,function,278,tls1_change_cipher_state_cipher
+SSL,function,281,tls1_check_duplicate_extensions
+SSL,function,297,tls1_enc
+SSL,function,226,tls1_export_keying_material
+SSL,function,120,tls1_get_server_supplemental_data
+SSL,function,239,tls1_heartbeat
+SSL,function,131,tls1_prf
+SSL,function,234,tls1_send_server_supplemental_data
+SSL,function,183,tls1_setup_key_block
+SSL,reason,118,APP_DATA_IN_HANDSHAKE
+SSL,reason,208,ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT
+SSL,reason,299,AUTHZ_DATA_TOO_LARGE
+SSL,reason,444,BAD_ALERT
+SSL,reason,191,BAD_ALERT_RECORD
+SSL,reason,365,BAD_AUTHENTICATION_TYPE
+SSL,reason,141,BAD_CHANGE_CIPHER_SPEC
+SSL,reason,214,BAD_CHECKSUM
+SSL,reason,417,BAD_DATA
+SSL,reason,136,BAD_DATA_RETURNED_BY_CALLBACK
+SSL,reason,293,BAD_DECOMPRESSION
+SSL,reason,190,BAD_DH_G_LENGTH
+SSL,reason,116,BAD_DH_PUB_KEY_LENGTH
+SSL,reason,202,BAD_DH_P_LENGTH
+SSL,reason,128,BAD_DIGEST_LENGTH
+SSL,reason,403,BAD_DSA_SIGNATURE
+SSL,reason,253,BAD_ECC_CERT
+SSL,reason,114,BAD_ECDSA_SIGNATURE
+SSL,reason,376,BAD_ECPOINT
+SSL,reason,377,BAD_HANDSHAKE_LENGTH
+SSL,reason,447,BAD_HANDSHAKE_RECORD
+SSL,reason,111,BAD_HELLO_REQUEST
+SSL,reason,321,BAD_LENGTH
+SSL,reason,395,BAD_MAC_DECODE
+SSL,reason,392,BAD_MAC_LENGTH
+SSL,reason,421,BAD_MESSAGE_TYPE
+SSL,reason,389,BAD_PACKET_LENGTH
+SSL,reason,420,BAD_PROTOCOL_VERSION_NUMBER
+SSL,reason,105,BAD_PSK_IDENTITY_HINT_LENGTH
+SSL,reason,357,BAD_RESPONSE_ARGUMENT
+SSL,reason,103,BAD_RSA_DECRYPT
+SSL,reason,247,BAD_RSA_ENCRYPT
+SSL,reason,287,BAD_RSA_E_LENGTH
+SSL,reason,151,BAD_RSA_MODULUS_LENGTH
+SSL,reason,197,BAD_RSA_SIGNATURE
+SSL,reason,388,BAD_SIGNATURE
+SSL,reason,240,BAD_SRP_A_LENGTH
+SSL,reason,120,BAD_SRP_B_LENGTH
+SSL,reason,143,BAD_SRP_G_LENGTH
+SSL,reason,199,BAD_SRP_N_LENGTH
+SSL,reason,210,BAD_SRP_S_LENGTH
+SSL,reason,237,BAD_SRTP_MKI_VALUE
+SSL,reason,180,BAD_SRTP_PROTECTION_PROFILE_LIST
+SSL,reason,339,BAD_SSL_FILETYPE
+SSL,reason,200,BAD_SSL_SESSION_ID_LENGTH
+SSL,reason,285,BAD_STATE
+SSL,reason,290,BAD_VALUE
+SSL,reason,338,BAD_WRITE_RETRY
+SSL,reason,167,BIO_NOT_SET
+SSL,reason,182,BLOCK_CIPHER_PAD_IS_WRONG
+SSL,reason,257,BN_LIB
+SSL,reason,390,CANNOT_SERIALIZE_PUBLIC_KEY
+SSL,reason,252,CA_DN_LENGTH_MISMATCH
+SSL,reason,370,CA_DN_TOO_LONG
+SSL,reason,325,CCS_RECEIVED_EARLY
+SSL,reason,308,CERTIFICATE_VERIFY_FAILED
+SSL,reason,428,CERT_CB_ERROR
+SSL,reason,156,CERT_LENGTH_MISMATCH
+SSL,reason,294,CHALLENGE_IS_DIFFERENT
+SSL,reason,222,CHANNEL_ID_NOT_P256
+SSL,reason,264,CHANNEL_ID_SIGNATURE_INVALID
+SSL,reason,171,CIPHER_CODE_WRONG_LENGTH
+SSL,reason,329,CIPHER_OR_HASH_UNAVAILABLE
+SSL,reason,192,CIPHER_TABLE_SRC_ERROR
+SSL,reason,437,CLIENTHELLO_PARSE_FAILED
+SSL,reason,355,CLIENTHELLO_TLSEXT
+SSL,reason,117,COMPRESSED_LENGTH_TOO_LONG
+SSL,reason,292,COMPRESSION_DISABLED
+SSL,reason,244,COMPRESSION_FAILURE
+SSL,reason,153,COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE
+SSL,reason,372,COMPRESSION_LIBRARY_ERROR
+SSL,reason,399,CONNECTION_ID_IS_DIFFERENT
+SSL,reason,438,CONNECTION_REJECTED
+SSL,reason,220,CONNECTION_TYPE_NOT_SET
+SSL,reason,139,COOKIE_MISMATCH
+SSL,reason,327,D2I_ECDSA_SIG
+SSL,reason,225,DATA_BETWEEN_CCS_AND_FINISHED
+SSL,reason,161,DATA_LENGTH_TOO_LONG
+SSL,reason,439,DECODE_ERROR
+SSL,reason,366,DECRYPTION_FAILED
+SSL,reason,101,DECRYPTION_FAILED_OR_BAD_RECORD_MAC
+SSL,reason,281,DH_PUBLIC_VALUE_LENGTH_IS_WRONG
+SSL,reason,239,DIGEST_CHECK_FAILED
+SSL,reason,429,DTLS_MESSAGE_TOO_BIG
+SSL,reason,158,DUPLICATE_COMPRESSION_ID
+SSL,reason,275,ECC_CERT_NOT_FOR_KEY_AGREEMENT
+SSL,reason,109,ECC_CERT_NOT_FOR_SIGNING
+SSL,reason,291,ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE
+SSL,reason,302,ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE
+SSL,reason,162,ECGROUP_TOO_LARGE_FOR_CIPHER
+SSL,reason,205,EMPTY_SRTP_PROTECTION_PROFILE_LIST
+SSL,reason,412,ENCRYPTED_LENGTH_TOO_LONG
+SSL,reason,134,ERROR_GENERATING_TMP_RSA_KEY
+SSL,reason,175,ERROR_IN_RECEIVED_CIPHER_LIST
+SSL,reason,283,EVP_DIGESTSIGNFINAL_FAILED
+SSL,reason,238,EVP_DIGESTSIGNINIT_FAILED
+SSL,reason,248,EXCESSIVE_MESSAGE_SIZE
+SSL,reason,397,EXTRA_DATA_IN_MESSAGE
+SSL,reason,229,GOST_NOT_SUPPORTED
+SSL,reason,371,GOT_A_FIN_BEFORE_A_CCS
+SSL,reason,280,GOT_CHANNEL_ID_BEFORE_A_CCS
+SSL,reason,316,GOT_NEXT_PROTO_BEFORE_A_CCS
+SSL,reason,115,GOT_NEXT_PROTO_WITHOUT_EXTENSION
+SSL,reason,445,HANDSHAKE_FAILURE_ON_CLIENT_HELLO
+SSL,reason,441,HANDSHAKE_RECORD_BEFORE_CCS
+SSL,reason,298,HTTPS_PROXY_REQUEST
+SSL,reason,317,HTTP_REQUEST
+SSL,reason,288,ILLEGAL_PADDING
+SSL,reason,353,ILLEGAL_SUITEB_DIGEST
+SSL,reason,436,INAPPROPRIATE_FALLBACK
+SSL,reason,110,INCONSISTENT_COMPRESSION
+SSL,reason,360,INVALID_AUDIT_PROOF
+SSL,reason,356,INVALID_AUTHZ_DATA
+SSL,reason,268,INVALID_CHALLENGE_LENGTH
+SSL,reason,173,INVALID_COMMAND
+SSL,reason,249,INVALID_COMPRESSION_ALGORITHM
+SSL,reason,297,INVALID_MESSAGE
+SSL,reason,102,INVALID_NULL_CMD_NAME
+SSL,reason,234,INVALID_PURPOSE
+SSL,reason,279,INVALID_SERVERINFO_DATA
+SSL,reason,430,INVALID_SRP_USERNAME
+SSL,reason,443,INVALID_SSL_SESSION
+SSL,reason,304,INVALID_STATUS_RESPONSE
+SSL,reason,107,INVALID_TICKET_KEYS_LENGTH
+SSL,reason,183,INVALID_TRUST
+SSL,reason,405,KEY_ARG_TOO_LONG
+SSL,reason,323,KRB5
+SSL,reason,230,KRB5_C_CC_PRINC
+SSL,reason,130,KRB5_C_GET_CRED
+SSL,reason,406,KRB5_C_INIT
+SSL,reason,235,KRB5_C_MK_REQ
+SSL,reason,282,KRB5_S_BAD_TICKET
+SSL,reason,318,KRB5_S_INIT
+SSL,reason,380,KRB5_S_RD_REQ
+SSL,reason,300,KRB5_S_TKT_EXPIRED
+SSL,reason,418,KRB5_S_TKT_NYV
+SSL,reason,226,KRB5_S_TKT_SKEW
+SSL,reason,342,LENGTH_MISMATCH
+SSL,reason,427,LENGTH_TOO_SHORT
+SSL,reason,176,LIBRARY_BUG
+SSL,reason,270,LIBRARY_HAS_NO_CIPHERS
+SSL,reason,196,MESSAGE_TOO_LONG
+SSL,reason,349,MISSING_DH_DSA_CERT
+SSL,reason,221,MISSING_DH_KEY
+SSL,reason,203,MISSING_DH_RSA_CERT
+SSL,reason,125,MISSING_DSA_SIGNING_CERT
+SSL,reason,422,MISSING_ECDH_CERT
+SSL,reason,326,MISSING_ECDSA_SIGNING_CERT
+SSL,reason,157,MISSING_EXPORT_TMP_DH_KEY
+SSL,reason,416,MISSING_EXPORT_TMP_RSA_KEY
+SSL,reason,276,MISSING_RSA_CERTIFICATE
+SSL,reason,259,MISSING_RSA_ENCRYPTING_CERT
+SSL,reason,124,MISSING_RSA_SIGNING_CERT
+SSL,reason,123,MISSING_SRP_PARAM
+SSL,reason,217,MISSING_TMP_DH_KEY
+SSL,reason,307,MISSING_TMP_ECDH_KEY
+SSL,reason,211,MISSING_TMP_RSA_KEY
+SSL,reason,256,MISSING_TMP_RSA_PKEY
+SSL,reason,402,MISSING_VERIFY_MESSAGE
+SSL,reason,435,MIXED_SPECIAL_OPERATOR_WITH_GROUPS
+SSL,reason,446,MTU_TOO_SMALL
+SSL,reason,206,MULTIPLE_SGC_RESTARTS
+SSL,reason,432,NESTED_GROUP
+SSL,reason,254,NON_SSLV2_INITIAL_PACKET
+SSL,reason,337,NO_CERTIFICATES_RETURNED
+SSL,reason,144,NO_CERTIFICATE_ASSIGNED
+SSL,reason,368,NO_CERTIFICATE_RETURNED
+SSL,reason,334,NO_CERTIFICATE_SET
+SSL,reason,301,NO_CERTIFICATE_SPECIFIED
+SSL,reason,243,NO_CIPHERS_AVAILABLE
+SSL,reason,343,NO_CIPHERS_PASSED
+SSL,reason,341,NO_CIPHERS_SPECIFIED
+SSL,reason,407,NO_CIPHER_LIST
+SSL,reason,216,NO_CIPHER_MATCH
+SSL,reason,295,NO_CLIENT_CERT_METHOD
+SSL,reason,154,NO_CLIENT_CERT_RECEIVED
+SSL,reason,261,NO_COMPRESSION_SPECIFIED
+SSL,reason,363,NO_GOST_CERTIFICATE_SENT_BY_PEER
+SSL,reason,204,NO_METHOD_SPECIFIED
+SSL,reason,277,NO_P256_SUPPORT
+SSL,reason,119,NO_PEM_EXTENSIONS
+SSL,reason,311,NO_PRIVATEKEY
+SSL,reason,396,NO_PRIVATE_KEY_ASSIGNED
+SSL,reason,174,NO_PROTOCOLS_AVAILABLE
+SSL,reason,393,NO_PUBLICKEY
+SSL,reason,260,NO_RENEGOTIATION
+SSL,reason,322,NO_REQUIRED_DIGEST
+SSL,reason,104,NO_SHARED_CIPHER
+SSL,reason,354,NO_SHARED_SIGATURE_ALGORITHMS
+SSL,reason,185,NO_SRTP_PROFILES
+SSL,reason,344,NO_VERIFY_CALLBACK
+SSL,reason,131,NULL_SSL_CTX
+SSL,reason,112,NULL_SSL_METHOD_PASSED
+SSL,reason,246,OLD_SESSION_CIPHER_NOT_RETURNED
+SSL,reason,331,OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED
+SSL,reason,306,ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE
+SSL,reason,126,ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE
+SSL,reason,426,ONLY_TLS_ALLOWED_IN_FIPS_MODE
+SSL,reason,351,OPAQUE_PRF_INPUT_TOO_LONG
+SSL,reason,284,PACKET_LENGTH_TOO_LONG
+SSL,reason,184,PARSE_TLSEXT
+SSL,reason,328,PATH_TOO_LONG
+SSL,reason,258,PEER_DID_NOT_RETURN_A_CERTIFICATE
+SSL,reason,108,PEER_ERROR
+SSL,reason,332,PEER_ERROR_CERTIFICATE
+SSL,reason,381,PEER_ERROR_NO_CERTIFICATE
+SSL,reason,408,PEER_ERROR_NO_CIPHER
+SSL,reason,345,PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE
+SSL,reason,213,PEM_NAME_BAD_PREFIX
+SSL,reason,146,PEM_NAME_TOO_SHORT
+SSL,reason,382,PRE_MAC_LENGTH_TOO_LONG
+SSL,reason,383,PROBLEMS_MAPPING_CIPHER_FUNCTIONS
+SSL,reason,148,PROTOCOL_IS_SHUTDOWN
+SSL,reason,361,PSK_IDENTITY_NOT_FOUND
+SSL,reason,212,PSK_NO_CLIENT_CB
+SSL,reason,181,PSK_NO_SERVER_CB
+SSL,reason,358,PUBLIC_KEY_ENCRYPT_ERROR
+SSL,reason,152,PUBLIC_KEY_IS_NOT_RSA
+SSL,reason,227,PUBLIC_KEY_NOT_RSA
+SSL,reason,265,READ_BIO_NOT_SET
+SSL,reason,129,READ_TIMEOUT_EXPIRED
+SSL,reason,313,READ_WRONG_PACKET_TYPE
+SSL,reason,320,RECORD_LENGTH_MISMATCH
+SSL,reason,166,RECORD_TOO_LARGE
+SSL,reason,411,RECORD_TOO_SMALL
+SSL,reason,267,RENEGOTIATE_EXT_TOO_LONG
+SSL,reason,310,RENEGOTIATION_ENCODING_ERR
+SSL,reason,391,RENEGOTIATION_MISMATCH
+SSL,reason,359,REQUIRED_CIPHER_MISSING
+SSL,reason,387,REQUIRED_COMPRESSSION_ALGORITHM_MISSING
+SSL,reason,137,REUSE_CERT_LENGTH_NOT_ZERO
+SSL,reason,178,REUSE_CERT_TYPE_NOT_ZERO
+SSL,reason,160,REUSE_CIPHER_LIST_NOT_ZERO
+SSL,reason,228,SCSV_RECEIVED_WHEN_RENEGOTIATING
+SSL,reason,241,SERVERHELLO_TLSEXT
+SSL,reason,272,SESSION_ID_CONTEXT_UNINITIALIZED
+SSL,reason,442,SESSION_MAY_NOT_BE_CREATED
+SSL,reason,250,SHORT_READ
+SSL,reason,386,SIGNATURE_ALGORITHMS_ERROR
+SSL,reason,289,SIGNATURE_FOR_NON_SIGNING_CERTIFICATE
+SSL,reason,424,SRP_A_CALC
+SSL,reason,168,SRTP_COULD_NOT_ALLOCATE_PROFILES
+SSL,reason,296,SRTP_PROTECTION_PROFILE_LIST_TOO_LONG
+SSL,reason,340,SRTP_UNKNOWN_PROTECTION_PROFILE
+SSL,reason,266,SSL23_DOING_SESSION_ID_REUSE
+SSL,reason,164,SSL2_CONNECTION_ID_TOO_LONG
+SSL,reason,159,SSL3_EXT_INVALID_ECPOINTFORMAT
+SSL,reason,209,SSL3_EXT_INVALID_SERVERNAME
+SSL,reason,195,SSL3_EXT_INVALID_SERVERNAME_TYPE
+SSL,reason,135,SSL3_SESSION_ID_TOO_LONG
+SSL,reason,314,SSL3_SESSION_ID_TOO_SHORT
+SSL,reason,1042,SSLV3_ALERT_BAD_CERTIFICATE
+SSL,reason,1020,SSLV3_ALERT_BAD_RECORD_MAC
+SSL,reason,1045,SSLV3_ALERT_CERTIFICATE_EXPIRED
+SSL,reason,1044,SSLV3_ALERT_CERTIFICATE_REVOKED
+SSL,reason,1046,SSLV3_ALERT_CERTIFICATE_UNKNOWN
+SSL,reason,1000,SSLV3_ALERT_CLOSE_NOTIFY
+SSL,reason,1030,SSLV3_ALERT_DECOMPRESSION_FAILURE
+SSL,reason,1040,SSLV3_ALERT_HANDSHAKE_FAILURE
+SSL,reason,1047,SSLV3_ALERT_ILLEGAL_PARAMETER
+SSL,reason,1041,SSLV3_ALERT_NO_CERTIFICATE
+SSL,reason,1010,SSLV3_ALERT_UNEXPECTED_MESSAGE
+SSL,reason,1043,SSLV3_ALERT_UNSUPPORTED_CERTIFICATE
+SSL,reason,245,SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION
+SSL,reason,106,SSL_HANDSHAKE_FAILURE
+SSL,reason,374,SSL_LIBRARY_HAS_NO_CIPHERS
+SSL,reason,335,SSL_SESSION_ID_CALLBACK_FAILED
+SSL,reason,172,SSL_SESSION_ID_CONFLICT
+SSL,reason,121,SSL_SESSION_ID_CONTEXT_TOO_LONG
+SSL,reason,350,SSL_SESSION_ID_HAS_BAD_LENGTH
+SSL,reason,255,SSL_SESSION_ID_IS_DIFFERENT
+SSL,reason,1049,TLSV1_ALERT_ACCESS_DENIED
+SSL,reason,1050,TLSV1_ALERT_DECODE_ERROR
+SSL,reason,1021,TLSV1_ALERT_DECRYPTION_FAILED
+SSL,reason,1051,TLSV1_ALERT_DECRYPT_ERROR
+SSL,reason,1060,TLSV1_ALERT_EXPORT_RESTRICTION
+SSL,reason,1086,TLSV1_ALERT_INAPPROPRIATE_FALLBACK
+SSL,reason,1071,TLSV1_ALERT_INSUFFICIENT_SECURITY
+SSL,reason,1080,TLSV1_ALERT_INTERNAL_ERROR
+SSL,reason,1100,TLSV1_ALERT_NO_RENEGOTIATION
+SSL,reason,1070,TLSV1_ALERT_PROTOCOL_VERSION
+SSL,reason,1022,TLSV1_ALERT_RECORD_OVERFLOW
+SSL,reason,1048,TLSV1_ALERT_UNKNOWN_CA
+SSL,reason,1090,TLSV1_ALERT_USER_CANCELLED
+SSL,reason,1114,TLSV1_BAD_CERTIFICATE_HASH_VALUE
+SSL,reason,1113,TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE
+SSL,reason,1111,TLSV1_CERTIFICATE_UNOBTAINABLE
+SSL,reason,1112,TLSV1_UNRECOGNIZED_NAME
+SSL,reason,1110,TLSV1_UNSUPPORTED_EXTENSION
+SSL,reason,398,TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER
+SSL,reason,305,TLS_ILLEGAL_EXPORTER_LABEL
+SSL,reason,155,TLS_INVALID_ECPOINTFORMAT_LIST
+SSL,reason,303,TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST
+SSL,reason,242,TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG
+SSL,reason,431,TOO_MANY_EMPTY_FRAGMENTS
+SSL,reason,309,TRIED_TO_USE_UNSUPPORTED_CIPHER
+SSL,reason,122,UNABLE_TO_DECODE_DH_CERTS
+SSL,reason,207,UNABLE_TO_DECODE_ECDH_CERTS
+SSL,reason,415,UNABLE_TO_EXTRACT_PUBLIC_KEY
+SSL,reason,333,UNABLE_TO_FIND_DH_PARAMETERS
+SSL,reason,100,UNABLE_TO_FIND_ECDH_PARAMETERS
+SSL,reason,145,UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS
+SSL,reason,149,UNABLE_TO_FIND_SSL_METHOD
+SSL,reason,315,UNABLE_TO_LOAD_SSL2_MD5_ROUTINES
+SSL,reason,352,UNABLE_TO_LOAD_SSL3_MD5_ROUTINES
+SSL,reason,142,UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES
+SSL,reason,433,UNEXPECTED_GROUP_CLOSE
+SSL,reason,348,UNEXPECTED_MESSAGE
+SSL,reason,434,UNEXPECTED_OPERATOR_IN_GROUP
+SSL,reason,127,UNEXPECTED_RECORD
+SSL,reason,140,UNINITIALIZED
+SSL,reason,362,UNKNOWN_ALERT_TYPE
+SSL,reason,219,UNKNOWN_AUTHZ_DATA_TYPE
+SSL,reason,188,UNKNOWN_CERTIFICATE_TYPE
+SSL,reason,410,UNKNOWN_CIPHER_RETURNED
+SSL,reason,201,UNKNOWN_CIPHER_TYPE
+SSL,reason,409,UNKNOWN_CMD_NAME
+SSL,reason,384,UNKNOWN_DIGEST
+SSL,reason,394,UNKNOWN_KEY_EXCHANGE_TYPE
+SSL,reason,170,UNKNOWN_PKEY_TYPE
+SSL,reason,224,UNKNOWN_PROTOCOL
+SSL,reason,194,UNKNOWN_REMOTE_ERROR_TYPE
+SSL,reason,404,UNKNOWN_SSL_VERSION
+SSL,reason,187,UNKNOWN_STATE
+SSL,reason,223,UNKNOWN_SUPPLEMENTAL_DATA_TYPE
+SSL,reason,440,UNPROCESSED_HANDSHAKE_DATA
+SSL,reason,375,UNSAFE_LEGACY_RENEGOTIATION_DISABLED
+SSL,reason,177,UNSUPPORTED_CIPHER
+SSL,reason,278,UNSUPPORTED_COMPRESSION_ALGORITHM
+SSL,reason,330,UNSUPPORTED_DIGEST_TYPE
+SSL,reason,186,UNSUPPORTED_ELLIPTIC_CURVE
+SSL,reason,423,UNSUPPORTED_PROTOCOL
+SSL,reason,413,UNSUPPORTED_SSL_VERSION
+SSL,reason,218,UNSUPPORTED_STATUS_TYPE
+SSL,reason,286,USE_SRTP_NOT_NEGOTIATED
+SSL,reason,425,WRITE_BIO_NOT_SET
+SSL,reason,262,WRONG_CERTIFICATE_TYPE
+SSL,reason,189,WRONG_CIPHER_RETURNED
+SSL,reason,271,WRONG_CURVE
+SSL,reason,150,WRONG_MESSAGE_TYPE
+SSL,reason,347,WRONG_NUMBER_OF_KEY_BITS
+SSL,reason,163,WRONG_SIGNATURE_LENGTH
+SSL,reason,385,WRONG_SIGNATURE_SIZE
+SSL,reason,179,WRONG_SIGNATURE_TYPE
+SSL,reason,367,WRONG_SSL_VERSION
+SSL,reason,165,WRONG_VERSION_NUMBER
+SSL,reason,198,X509_LIB
+SSL,reason,113,X509_VERIFICATION_SETUP_PROBLEMS
diff --git a/crypto/err/x509.errordata b/crypto/err/x509.errordata
new file mode 100644
index 0000000..48f50c9
--- /dev/null
+++ b/crypto/err/x509.errordata
@@ -0,0 +1,104 @@
+X509,function,137,ASN1_digest
+X509,function,118,ASN1_generate_v3
+X509,function,115,ASN1_item_sign_ctx
+X509,function,161,ASN1_item_verify
+X509,function,112,ASN1_sign
+X509,function,130,NETSCAPE_SPKI_b64_decode
+X509,function,150,NETSCAPE_SPKI_b64_encode
+X509,function,126,PKCS7_get_certificates
+X509,function,127,X509_ATTRIBUTE_create_by_NID
+X509,function,162,X509_ATTRIBUTE_create_by_OBJ
+X509,function,139,X509_ATTRIBUTE_create_by_txt
+X509,function,121,X509_ATTRIBUTE_get0_data
+X509,function,128,X509_ATTRIBUTE_set1_data
+X509,function,107,X509_CRL_add0_revoked
+X509,function,156,X509_CRL_diff
+X509,function,123,X509_CRL_print_fp
+X509,function,101,X509_EXTENSION_create_by_NID
+X509,function,104,X509_EXTENSION_create_by_OBJ
+X509,function,148,X509_INFO_new
+X509,function,165,X509_NAME_ENTRY_create_by_NID
+X509,function,152,X509_NAME_ENTRY_create_by_txt
+X509,function,153,X509_NAME_ENTRY_set_object
+X509,function,143,X509_NAME_add_entry
+X509,function,122,X509_NAME_oneline
+X509,function,131,X509_NAME_print
+X509,function,133,X509_PKEY_new
+X509,function,141,X509_PUBKEY_get
+X509,function,140,X509_PUBKEY_set
+X509,function,158,X509_REQ_check_private_key
+X509,function,110,X509_REQ_to_X509
+X509,function,124,X509_STORE_CTX_get1_issuer
+X509,function,129,X509_STORE_CTX_init
+X509,function,109,X509_STORE_CTX_new
+X509,function,149,X509_STORE_CTX_purpose_inherit
+X509,function,134,X509_STORE_add_cert
+X509,function,159,X509_STORE_add_crl
+X509,function,164,X509_TRUST_add
+X509,function,103,X509_TRUST_set
+X509,function,145,X509_check_private_key
+X509,function,160,X509_get_pubkey_parameters
+X509,function,106,X509_load_cert_crl_file
+X509,function,138,X509_load_cert_file
+X509,function,102,X509_load_crl_file
+X509,function,120,X509_print_ex_fp
+X509,function,151,X509_to_X509_REQ
+X509,function,155,X509_verify_cert
+X509,function,144,X509at_add1_attr
+X509,function,111,X509v3_add_ext
+X509,function,125,add_cert_dir
+X509,function,146,append_exp
+X509,function,154,asn1_cb
+X509,function,113,asn1_str2type
+X509,function,108,bitstr_cb
+X509,function,105,by_file_ctrl
+X509,function,136,check_policy
+X509,function,117,d2i_X509_PKEY
+X509,function,119,dir_ctrl
+X509,function,142,get_cert_by_subject
+X509,function,163,i2d_DSA_PUBKEY
+X509,function,147,i2d_EC_PUBKEY
+X509,function,157,i2d_PrivateKey
+X509,function,114,i2d_RSA_PUBKEY
+X509,function,135,parse_tagging
+X509,function,116,x509_name_encode
+X509,function,132,x509_name_ex_d2i
+X509,function,100,x509_name_ex_new
+X509,reason,137,AKID_MISMATCH
+X509,reason,134,BAD_PKCS7_VERSION
+X509,reason,122,BAD_X509_FILETYPE
+X509,reason,105,BASE64_DECODE_ERROR
+X509,reason,127,CANT_CHECK_DH_KEY
+X509,reason,110,CERT_ALREADY_IN_HASH_TABLE
+X509,reason,126,CONTEXT_NOT_INITIALISED
+X509,reason,135,CRL_ALREADY_DELTA
+X509,reason,104,CRL_VERIFY_FAILURE
+X509,reason,136,ERR_ASN1_LIB
+X509,reason,132,IDP_MISMATCH
+X509,reason,138,INVALID_BIT_STRING_BITS_LEFT
+X509,reason,108,INVALID_DIRECTORY
+X509,reason,129,INVALID_FIELD_NAME
+X509,reason,106,INVALID_TRUST
+X509,reason,123,ISSUER_MISMATCH
+X509,reason,120,KEY_TYPE_MISMATCH
+X509,reason,109,KEY_VALUES_MISMATCH
+X509,reason,114,LOADING_CERT_DIR
+X509,reason,133,LOADING_DEFAULTS
+X509,reason,102,METHOD_NOT_SUPPORTED
+X509,reason,117,NEWER_CRL_NOT_NEWER
+X509,reason,112,NOT_PKCS7_SIGNED_DATA
+X509,reason,128,NO_CERTIFICATES_INCLUDED
+X509,reason,100,NO_CERT_SET_FOR_US_TO_VERIFY
+X509,reason,131,NO_CRL_NUMBER
+X509,reason,111,PUBLIC_KEY_DECODE_ERROR
+X509,reason,113,PUBLIC_KEY_ENCODE_ERROR
+X509,reason,130,SHOULD_RETRY
+X509,reason,101,UNABLE_TO_FIND_PARAMETERS_IN_CHAIN
+X509,reason,124,UNABLE_TO_GET_CERTS_PUBLIC_KEY
+X509,reason,121,UNKNOWN_KEY_TYPE
+X509,reason,107,UNKNOWN_NID
+X509,reason,116,UNKNOWN_PURPOSE_ID
+X509,reason,118,UNKNOWN_TRUST_ID
+X509,reason,103,UNSUPPORTED_ALGORITHM
+X509,reason,125,WRONG_LOOKUP_TYPE
+X509,reason,115,WRONG_TYPE
diff --git a/crypto/err/x509v3.errordata b/crypto/err/x509v3.errordata
new file mode 100644
index 0000000..39cafec
--- /dev/null
+++ b/crypto/err/x509v3.errordata
@@ -0,0 +1,126 @@
+X509V3,function,154,SXNET_add_id_INTEGER
+X509V3,function,103,SXNET_add_id_asc
+X509V3,function,129,SXNET_add_id_ulong
+X509V3,function,150,SXNET_get_id_asc
+X509V3,function,104,SXNET_get_id_ulong
+X509V3,function,106,X509V3_EXT_add
+X509V3,function,130,X509V3_EXT_add_alias
+X509V3,function,156,X509V3_EXT_free
+X509V3,function,112,X509V3_EXT_i2d
+X509V3,function,140,X509V3_EXT_nconf
+X509V3,function,131,X509V3_add1_i2d
+X509V3,function,136,X509V3_add_value
+X509V3,function,120,X509V3_get_section
+X509V3,function,133,X509V3_get_string
+X509V3,function,123,X509V3_get_value_bool
+X509V3,function,102,X509V3_parse_list
+X509V3,function,153,X509_PURPOSE_add
+X509V3,function,144,X509_PURPOSE_set
+X509V3,function,115,a2i_GENERAL_NAME
+X509V3,function,111,copy_email
+X509V3,function,109,copy_issuer
+X509V3,function,127,do_dirname
+X509V3,function,100,do_ext_i2d
+X509V3,function,145,do_ext_nconf
+X509V3,function,134,gnames_from_sectname
+X509V3,function,116,hex_to_string
+X509V3,function,146,i2s_ASN1_ENUMERATED
+X509V3,function,117,i2s_ASN1_IA5STRING
+X509V3,function,107,i2s_ASN1_INTEGER
+X509V3,function,155,i2v_AUTHORITY_INFO_ACCESS
+X509V3,function,143,notice_section
+X509V3,function,122,nref_nos
+X509V3,function,114,policy_section
+X509V3,function,142,process_pci_value
+X509V3,function,135,r2i_certpol
+X509V3,function,132,r2i_pci
+X509V3,function,147,s2i_ASN1_IA5STRING
+X509V3,function,137,s2i_ASN1_INTEGER
+X509V3,function,108,s2i_ASN1_OCTET_STRING
+X509V3,function,121,s2i_skey_id
+X509V3,function,151,set_dist_point_name
+X509V3,function,118,string_to_hex
+X509V3,function,128,v2i_ASN1_BIT_STRING
+X509V3,function,105,v2i_AUTHORITY_INFO_ACCESS
+X509V3,function,101,v2i_AUTHORITY_KEYID
+X509V3,function,141,v2i_BASIC_CONSTRAINTS
+X509V3,function,149,v2i_EXTENDED_KEY_USAGE
+X509V3,function,126,v2i_GENERAL_NAMES
+X509V3,function,139,v2i_GENERAL_NAME_ex
+X509V3,function,124,v2i_NAME_CONSTRAINTS
+X509V3,function,148,v2i_POLICY_CONSTRAINTS
+X509V3,function,125,v2i_POLICY_MAPPINGS
+X509V3,function,113,v2i_crld
+X509V3,function,152,v2i_idp
+X509V3,function,138,v2i_issuer_alt
+X509V3,function,110,v2i_subject_alt
+X509V3,function,119,v3_generic_extension
+X509V3,reason,148,BAD_IP_ADDRESS
+X509V3,reason,117,BAD_OBJECT
+X509V3,reason,129,BN_DEC2BN_ERROR
+X509V3,reason,122,BN_TO_ASN1_INTEGER_ERROR
+X509V3,reason,168,CANNOT_FIND_FREE_FUNCTION
+X509V3,reason,118,DIRNAME_ERROR
+X509V3,reason,159,DISTPOINT_ALREADY_SET
+X509V3,reason,165,DUPLICATE_ZONE_ID
+X509V3,reason,153,ERROR_CONVERTING_ZONE
+X509V3,reason,107,ERROR_CREATING_EXTENSION
+X509V3,reason,146,ERROR_IN_EXTENSION
+X509V3,reason,130,EXPECTED_A_SECTION_NAME
+X509V3,reason,151,EXTENSION_EXISTS
+X509V3,reason,161,EXTENSION_NAME_ERROR
+X509V3,reason,166,EXTENSION_NOT_FOUND
+X509V3,reason,134,EXTENSION_SETTING_NOT_SUPPORTED
+X509V3,reason,143,EXTENSION_VALUE_ERROR
+X509V3,reason,136,ILLEGAL_EMPTY_EXTENSION
+X509V3,reason,110,ILLEGAL_HEX_DIGIT
+X509V3,reason,140,INCORRECT_POLICY_SYNTAX_TAG
+X509V3,reason,167,INVALID_ASNUMBER
+X509V3,reason,106,INVALID_ASRANGE
+X509V3,reason,100,INVALID_BOOLEAN_STRING
+X509V3,reason,120,INVALID_EXTENSION_STRING
+X509V3,reason,113,INVALID_INHERITANCE
+X509V3,reason,142,INVALID_IPADDRESS
+X509V3,reason,155,INVALID_MULTIPLE_RDNS
+X509V3,reason,102,INVALID_NAME
+X509V3,reason,145,INVALID_NULL_ARGUMENT
+X509V3,reason,147,INVALID_NULL_NAME
+X509V3,reason,115,INVALID_NULL_VALUE
+X509V3,reason,163,INVALID_NUMBER
+X509V3,reason,162,INVALID_NUMBERS
+X509V3,reason,164,INVALID_OBJECT_IDENTIFIER
+X509V3,reason,123,INVALID_OPTION
+X509V3,reason,125,INVALID_POLICY_IDENTIFIER
+X509V3,reason,105,INVALID_PROXY_POLICY_SETTING
+X509V3,reason,126,INVALID_PURPOSE
+X509V3,reason,114,INVALID_SAFI
+X509V3,reason,141,INVALID_SECTION
+X509V3,reason,156,INVALID_SYNTAX
+X509V3,reason,108,ISSUER_DECODE_ERROR
+X509V3,reason,132,MISSING_VALUE
+X509V3,reason,121,NEED_ORGANIZATION_AND_NUMBERS
+X509V3,reason,139,NO_CONFIG_DATABASE
+X509V3,reason,128,NO_ISSUER_CERTIFICATE
+X509V3,reason,138,NO_ISSUER_DETAILS
+X509V3,reason,137,NO_POLICY_IDENTIFIER
+X509V3,reason,111,NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED
+X509V3,reason,154,NO_PUBLIC_KEY
+X509V3,reason,116,NO_SUBJECT_DETAILS
+X509V3,reason,158,ODD_NUMBER_OF_DIGITS
+X509V3,reason,103,OPERATION_NOT_DEFINED
+X509V3,reason,109,OTHERNAME_ERROR
+X509V3,reason,135,POLICY_LANGUAGE_ALREADY_DEFINED
+X509V3,reason,104,POLICY_PATH_LENGTH
+X509V3,reason,131,POLICY_PATH_LENGTH_ALREADY_DEFINED
+X509V3,reason,101,POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED
+X509V3,reason,150,POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY
+X509V3,reason,133,SECTION_NOT_FOUND
+X509V3,reason,124,UNABLE_TO_GET_ISSUER_DETAILS
+X509V3,reason,144,UNABLE_TO_GET_ISSUER_KEYID
+X509V3,reason,119,UNKNOWN_BIT_STRING_ARGUMENT
+X509V3,reason,127,UNKNOWN_EXTENSION
+X509V3,reason,157,UNKNOWN_EXTENSION_NAME
+X509V3,reason,152,UNKNOWN_OPTION
+X509V3,reason,149,UNSUPPORTED_OPTION
+X509V3,reason,160,UNSUPPORTED_TYPE
+X509V3,reason,112,USER_TOO_LONG
diff --git a/crypto/evp/CMakeLists.txt b/crypto/evp/CMakeLists.txt
index 9854a18..0890ff9 100644
--- a/crypto/evp/CMakeLists.txt
+++ b/crypto/evp/CMakeLists.txt
@@ -10,7 +10,6 @@
   digestsign.c
   evp.c
   evp_ctx.c
-  evp_error.c
   p_ec.c
   p_ec_asn1.c
   p_hmac.c
diff --git a/crypto/evp/evp_error.c b/crypto/evp/evp_error.c
deleted file mode 100644
index b0d311e..0000000
--- a/crypto/evp/evp_error.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/evp.h>
-
-const ERR_STRING_DATA EVP_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_DigestSignAlgorithm, 0), "EVP_DigestSignAlgorithm"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_DigestVerifyInitFromAlgorithm, 0), "EVP_DigestVerifyInitFromAlgorithm"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_CTX_ctrl, 0), "EVP_PKEY_CTX_ctrl"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_CTX_dup, 0), "EVP_PKEY_CTX_dup"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_copy_parameters, 0), "EVP_PKEY_copy_parameters"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_decrypt, 0), "EVP_PKEY_decrypt"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_decrypt_init, 0), "EVP_PKEY_decrypt_init"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_derive, 0), "EVP_PKEY_derive"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_derive_init, 0), "EVP_PKEY_derive_init"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_derive_set_peer, 0), "EVP_PKEY_derive_set_peer"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_encrypt, 0), "EVP_PKEY_encrypt"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_encrypt_init, 0), "EVP_PKEY_encrypt_init"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_get1_DH, 0), "EVP_PKEY_get1_DH"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_get1_DSA, 0), "EVP_PKEY_get1_DSA"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_get1_EC_KEY, 0), "EVP_PKEY_get1_EC_KEY"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_get1_RSA, 0), "EVP_PKEY_get1_RSA"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_keygen, 0), "EVP_PKEY_keygen"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_keygen_init, 0), "EVP_PKEY_keygen_init"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_new, 0), "EVP_PKEY_new"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_set_type, 0), "EVP_PKEY_set_type"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_sign, 0), "EVP_PKEY_sign"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_sign_init, 0), "EVP_PKEY_sign_init"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_verify, 0), "EVP_PKEY_verify"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_verify_init, 0), "EVP_PKEY_verify_init"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_check_padding_md, 0), "check_padding_md"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_d2i_AutoPrivateKey, 0), "d2i_AutoPrivateKey"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_d2i_PrivateKey, 0), "d2i_PrivateKey"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_do_EC_KEY_print, 0), "do_EC_KEY_print"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_do_rsa_print, 0), "do_rsa_print"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_do_sigver_init, 0), "do_sigver_init"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_eckey_param2type, 0), "eckey_param2type"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_eckey_param_decode, 0), "eckey_param_decode"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_eckey_priv_decode, 0), "eckey_priv_decode"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_eckey_priv_encode, 0), "eckey_priv_encode"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_eckey_pub_decode, 0), "eckey_pub_decode"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_eckey_pub_encode, 0), "eckey_pub_encode"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_eckey_type2param, 0), "eckey_type2param"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_evp_pkey_ctx_new, 0), "evp_pkey_ctx_new"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_hmac_signctx, 0), "hmac_signctx"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_i2d_PublicKey, 0), "i2d_PublicKey"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_old_ec_priv_decode, 0), "old_ec_priv_decode"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_old_rsa_priv_decode, 0), "old_rsa_priv_decode"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_pkey_ec_ctrl, 0), "pkey_ec_ctrl"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_pkey_ec_derive, 0), "pkey_ec_derive"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_pkey_ec_keygen, 0), "pkey_ec_keygen"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_pkey_ec_paramgen, 0), "pkey_ec_paramgen"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_pkey_ec_sign, 0), "pkey_ec_sign"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_pkey_rsa_ctrl, 0), "pkey_rsa_ctrl"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_pkey_rsa_decrypt, 0), "pkey_rsa_decrypt"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_pkey_rsa_encrypt, 0), "pkey_rsa_encrypt"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_pkey_rsa_sign, 0), "pkey_rsa_sign"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_rsa_algor_to_md, 0), "rsa_algor_to_md"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_rsa_digest_verify_init_from_algorithm, 0), "rsa_digest_verify_init_from_algorithm"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_rsa_item_verify, 0), "rsa_item_verify"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_rsa_mgf1_to_md, 0), "rsa_mgf1_to_md"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_rsa_priv_decode, 0), "rsa_priv_decode"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_rsa_priv_encode, 0), "rsa_priv_encode"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_rsa_pss_to_ctx, 0), "rsa_pss_to_ctx"},
-  {ERR_PACK(ERR_LIB_EVP, EVP_F_rsa_pub_decode, 0), "rsa_pub_decode"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_BUFFER_TOO_SMALL), "BUFFER_TOO_SMALL"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_COMMAND_NOT_SUPPORTED), "COMMAND_NOT_SUPPORTED"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_CONTEXT_NOT_INITIALISED), "CONTEXT_NOT_INITIALISED"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_DECODE_ERROR), "DECODE_ERROR"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_DIFFERENT_KEY_TYPES), "DIFFERENT_KEY_TYPES"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_DIFFERENT_PARAMETERS), "DIFFERENT_PARAMETERS"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED), "DIGEST_AND_KEY_TYPE_NOT_SUPPORTED"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_DIGEST_DOES_NOT_MATCH), "DIGEST_DOES_NOT_MATCH"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_EXPECTING_AN_DSA_KEY), "EXPECTING_AN_DSA_KEY"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_EXPECTING_AN_EC_KEY_KEY), "EXPECTING_AN_EC_KEY_KEY"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_EXPECTING_AN_RSA_KEY), "EXPECTING_AN_RSA_KEY"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_EXPECTING_A_DH_KEY), "EXPECTING_A_DH_KEY"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_EXPECTING_A_DSA_KEY), "EXPECTING_A_DSA_KEY"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_EXPLICIT_EC_PARAMETERS_NOT_SUPPORTED), "EXPLICIT_EC_PARAMETERS_NOT_SUPPORTED"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE), "ILLEGAL_OR_UNSUPPORTED_PADDING_MODE"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_CURVE), "INVALID_CURVE"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_DIGEST_LENGTH), "INVALID_DIGEST_LENGTH"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_DIGEST_TYPE), "INVALID_DIGEST_TYPE"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_KEYBITS), "INVALID_KEYBITS"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_MGF1_MD), "INVALID_MGF1_MD"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_OPERATION), "INVALID_OPERATION"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_PADDING_MODE), "INVALID_PADDING_MODE"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_PSS_PARAMETERS), "INVALID_PSS_PARAMETERS"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_PSS_SALTLEN), "INVALID_PSS_SALTLEN"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_SALT_LENGTH), "INVALID_SALT_LENGTH"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_TRAILER), "INVALID_TRAILER"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_KDF_PARAMETER_ERROR), "KDF_PARAMETER_ERROR"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_KEYS_NOT_SET), "KEYS_NOT_SET"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_MISSING_PARAMETERS), "MISSING_PARAMETERS"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_NO_DEFAULT_DIGEST), "NO_DEFAULT_DIGEST"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_NO_KEY_SET), "NO_KEY_SET"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_NO_MDC2_SUPPORT), "NO_MDC2_SUPPORT"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_NO_NID_FOR_CURVE), "NO_NID_FOR_CURVE"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_NO_OPERATION_SET), "NO_OPERATION_SET"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_NO_PARAMETERS_SET), "NO_PARAMETERS_SET"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE), "OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_OPERATON_NOT_INITIALIZED), "OPERATON_NOT_INITIALIZED"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_PEER_KEY_ERROR), "PEER_KEY_ERROR"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_SHARED_INFO_ERROR), "SHARED_INFO_ERROR"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNKNOWN_DIGEST), "UNKNOWN_DIGEST"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNKNOWN_MASK_DIGEST), "UNKNOWN_MASK_DIGEST"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM), "UNKNOWN_MESSAGE_DIGEST_ALGORITHM"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNKNOWN_PUBLIC_KEY_TYPE), "UNKNOWN_PUBLIC_KEY_TYPE"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNKNOWN_SIGNATURE_ALGORITHM), "UNKNOWN_SIGNATURE_ALGORITHM"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNSUPPORTED_ALGORITHM), "UNSUPPORTED_ALGORITHM"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNSUPPORTED_MASK_ALGORITHM), "UNSUPPORTED_MASK_ALGORITHM"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNSUPPORTED_MASK_PARAMETER), "UNSUPPORTED_MASK_PARAMETER"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNSUPPORTED_PUBLIC_KEY_TYPE), "UNSUPPORTED_PUBLIC_KEY_TYPE"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNSUPPORTED_SIGNATURE_TYPE), "UNSUPPORTED_SIGNATURE_TYPE"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_WRONG_PUBLIC_KEY_TYPE), "WRONG_PUBLIC_KEY_TYPE"},
-  {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_X931_UNSUPPORTED), "X931_UNSUPPORTED"},
-  {0, NULL},
-};
diff --git a/crypto/hkdf/CMakeLists.txt b/crypto/hkdf/CMakeLists.txt
index 9666172..f8dd748 100644
--- a/crypto/hkdf/CMakeLists.txt
+++ b/crypto/hkdf/CMakeLists.txt
@@ -6,7 +6,6 @@
   OBJECT
 
   hkdf.c
-  hkdf_error.c
 )
 
 add_executable(
diff --git a/crypto/hkdf/hkdf_error.c b/crypto/hkdf/hkdf_error.c
deleted file mode 100644
index e1928d6..0000000
--- a/crypto/hkdf/hkdf_error.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/hkdf.h>
-
-const ERR_STRING_DATA HKDF_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_HKDF, HKDF_F_HKDF, 0), "HKDF"},
-  {ERR_PACK(ERR_LIB_HKDF, 0, HKDF_R_OUTPUT_TOO_LARGE), "OUTPUT_TOO_LARGE"},
-  {0, NULL},
-};
diff --git a/crypto/obj/CMakeLists.txt b/crypto/obj/CMakeLists.txt
index ade603d..a27e504 100644
--- a/crypto/obj/CMakeLists.txt
+++ b/crypto/obj/CMakeLists.txt
@@ -7,5 +7,4 @@
 
   obj.c
   obj_xref.c
-  obj_error.c
 )
diff --git a/crypto/obj/obj_error.c b/crypto/obj/obj_error.c
deleted file mode 100644
index 1ec9771..0000000
--- a/crypto/obj/obj_error.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/obj.h>
-
-const ERR_STRING_DATA OBJ_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_OBJ, OBJ_F_OBJ_create, 0), "OBJ_create"},
-  {ERR_PACK(ERR_LIB_OBJ, OBJ_F_OBJ_dup, 0), "OBJ_dup"},
-  {ERR_PACK(ERR_LIB_OBJ, OBJ_F_OBJ_nid2obj, 0), "OBJ_nid2obj"},
-  {ERR_PACK(ERR_LIB_OBJ, OBJ_F_OBJ_txt2obj, 0), "OBJ_txt2obj"},
-  {ERR_PACK(ERR_LIB_OBJ, 0, OBJ_R_UNKNOWN_NID), "UNKNOWN_NID"},
-  {0, NULL},
-};
diff --git a/crypto/pem/CMakeLists.txt b/crypto/pem/CMakeLists.txt
index 3275b15..720ba2f 100644
--- a/crypto/pem/CMakeLists.txt
+++ b/crypto/pem/CMakeLists.txt
@@ -6,7 +6,6 @@
   OBJECT
 
   pem_all.c
-  pem_error.c
   pem_info.c
   pem_lib.c
   pem_oth.c
diff --git a/crypto/pem/pem_error.c b/crypto/pem/pem_error.c
deleted file mode 100644
index 2745f4c..0000000
--- a/crypto/pem/pem_error.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/pem.h>
-
-const ERR_STRING_DATA PEM_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_ASN1_read, 0), "PEM_ASN1_read"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_ASN1_read_bio, 0), "PEM_ASN1_read_bio"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_ASN1_write, 0), "PEM_ASN1_write"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_ASN1_write_bio, 0), "PEM_ASN1_write_bio"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_X509_INFO_read, 0), "PEM_X509_INFO_read"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_X509_INFO_read_bio, 0), "PEM_X509_INFO_read_bio"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_X509_INFO_write_bio, 0), "PEM_X509_INFO_write_bio"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_do_header, 0), "PEM_do_header"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_get_EVP_CIPHER_INFO, 0), "PEM_get_EVP_CIPHER_INFO"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_read, 0), "PEM_read"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_read_DHparams, 0), "PEM_read_DHparams"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_read_PrivateKey, 0), "PEM_read_PrivateKey"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_read_bio, 0), "PEM_read_bio"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_read_bio_DHparams, 0), "PEM_read_bio_DHparams"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_read_bio_Parameters, 0), "PEM_read_bio_Parameters"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_read_bio_PrivateKey, 0), "PEM_read_bio_PrivateKey"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_write, 0), "PEM_write"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_write_PrivateKey, 0), "PEM_write_PrivateKey"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_write_bio, 0), "PEM_write_bio"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_d2i_PKCS8PrivateKey_bio, 0), "d2i_PKCS8PrivateKey_bio"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_d2i_PKCS8PrivateKey_fp, 0), "d2i_PKCS8PrivateKey_fp"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_do_pk8pkey, 0), "do_pk8pkey"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_do_pk8pkey_fp, 0), "do_pk8pkey_fp"},
-  {ERR_PACK(ERR_LIB_PEM, PEM_F_load_iv, 0), "load_iv"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BAD_BASE64_DECODE), "BAD_BASE64_DECODE"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BAD_DECRYPT), "BAD_DECRYPT"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BAD_END_LINE), "BAD_END_LINE"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BAD_IV_CHARS), "BAD_IV_CHARS"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BAD_MAGIC_NUMBER), "BAD_MAGIC_NUMBER"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BAD_PASSWORD_READ), "BAD_PASSWORD_READ"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BAD_VERSION_NUMBER), "BAD_VERSION_NUMBER"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BIO_WRITE_FAILURE), "BIO_WRITE_FAILURE"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_CIPHER_IS_NULL), "CIPHER_IS_NULL"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_ERROR_CONVERTING_PRIVATE_KEY), "ERROR_CONVERTING_PRIVATE_KEY"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_EXPECTING_PRIVATE_KEY_BLOB), "EXPECTING_PRIVATE_KEY_BLOB"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_EXPECTING_PUBLIC_KEY_BLOB), "EXPECTING_PUBLIC_KEY_BLOB"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_INCONSISTENT_HEADER), "INCONSISTENT_HEADER"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_KEYBLOB_HEADER_PARSE_ERROR), "KEYBLOB_HEADER_PARSE_ERROR"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_KEYBLOB_TOO_SHORT), "KEYBLOB_TOO_SHORT"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_NOT_DEK_INFO), "NOT_DEK_INFO"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_NOT_ENCRYPTED), "NOT_ENCRYPTED"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_NOT_PROC_TYPE), "NOT_PROC_TYPE"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_NO_START_LINE), "NO_START_LINE"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_PROBLEMS_GETTING_PASSWORD), "PROBLEMS_GETTING_PASSWORD"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_PUBLIC_KEY_NO_RSA), "PUBLIC_KEY_NO_RSA"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_PVK_DATA_TOO_SHORT), "PVK_DATA_TOO_SHORT"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_PVK_TOO_SHORT), "PVK_TOO_SHORT"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_READ_KEY), "READ_KEY"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_SHORT_HEADER), "SHORT_HEADER"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_UNSUPPORTED_CIPHER), "UNSUPPORTED_CIPHER"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_UNSUPPORTED_ENCRYPTION), "UNSUPPORTED_ENCRYPTION"},
-  {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_UNSUPPORTED_KEY_COMPONENTS), "UNSUPPORTED_KEY_COMPONENTS"},
-  {0, NULL},
-};
diff --git a/crypto/pkcs8/CMakeLists.txt b/crypto/pkcs8/CMakeLists.txt
index 1886fce..5c06fb8 100644
--- a/crypto/pkcs8/CMakeLists.txt
+++ b/crypto/pkcs8/CMakeLists.txt
@@ -9,7 +9,6 @@
   p8_pkey.c
   p5_pbe.c
   p5_pbev2.c
-  pkcs8_error.c
 )
 
 add_executable(
diff --git a/crypto/pkcs8/pkcs8_error.c b/crypto/pkcs8/pkcs8_error.c
deleted file mode 100644
index 3041658..0000000
--- a/crypto/pkcs8/pkcs8_error.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/pkcs8.h>
-
-const ERR_STRING_DATA PKCS8_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_EVP_PKCS82PKEY, 0), "EVP_PKCS82PKEY"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_EVP_PKEY2PKCS8, 0), "EVP_PKEY2PKCS8"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_PKCS12_get_key_and_certs, 0), "PKCS12_get_key_and_certs"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_PKCS12_handle_content_info, 0), "PKCS12_handle_content_info"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_PKCS12_handle_content_infos, 0), "PKCS12_handle_content_infos"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_PKCS12_parse, 0), "PKCS12_parse"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_PKCS5_pbe2_set_iv, 0), "PKCS5_pbe2_set_iv"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_PKCS5_pbe_set, 0), "PKCS5_pbe_set"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_PKCS5_pbe_set0_algor, 0), "PKCS5_pbe_set0_algor"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_PKCS5_pbkdf2_set, 0), "PKCS5_pbkdf2_set"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_PKCS8_decrypt, 0), "PKCS8_decrypt"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_PKCS8_encrypt, 0), "PKCS8_encrypt"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_PKCS8_encrypt_pbe, 0), "PKCS8_encrypt_pbe"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_pbe_cipher_init, 0), "pbe_cipher_init"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_pbe_crypt, 0), "pbe_crypt"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_pkcs12_item_decrypt_d2i, 0), "pkcs12_item_decrypt_d2i"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_pkcs12_item_i2d_encrypt, 0), "pkcs12_item_i2d_encrypt"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_pkcs12_key_gen_asc, 0), "pkcs12_key_gen_asc"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_pkcs12_key_gen_raw, 0), "pkcs12_key_gen_raw"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_pkcs12_key_gen_uni, 0), "pkcs12_key_gen_uni"},
-  {ERR_PACK(ERR_LIB_PKCS8, PKCS8_F_pkcs12_pbe_keyivgen, 0), "pkcs12_pbe_keyivgen"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_BAD_MAC), "BAD_MAC"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_BAD_PKCS12_DATA), "BAD_PKCS12_DATA"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_BAD_PKCS12_VERSION), "BAD_PKCS12_VERSION"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER), "CIPHER_HAS_NO_OBJECT_IDENTIFIER"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_CRYPT_ERROR), "CRYPT_ERROR"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_DECODE_ERROR), "DECODE_ERROR"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_ENCODE_ERROR), "ENCODE_ERROR"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_ENCRYPT_ERROR), "ENCRYPT_ERROR"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_ERROR_SETTING_CIPHER_PARAMS), "ERROR_SETTING_CIPHER_PARAMS"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_INCORRECT_PASSWORD), "INCORRECT_PASSWORD"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_KEYGEN_FAILURE), "KEYGEN_FAILURE"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_KEY_GEN_ERROR), "KEY_GEN_ERROR"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_METHOD_NOT_SUPPORTED), "METHOD_NOT_SUPPORTED"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_MISSING_MAC), "MISSING_MAC"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_MULTIPLE_PRIVATE_KEYS_IN_PKCS12), "MULTIPLE_PRIVATE_KEYS_IN_PKCS12"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_PKCS12_PUBLIC_KEY_INTEGRITY_NOT_SUPPORTED), "PKCS12_PUBLIC_KEY_INTEGRITY_NOT_SUPPORTED"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_PKCS12_TOO_DEEPLY_NESTED), "PKCS12_TOO_DEEPLY_NESTED"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_PRIVATE_KEY_DECODE_ERROR), "PRIVATE_KEY_DECODE_ERROR"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_PRIVATE_KEY_ENCODE_ERROR), "PRIVATE_KEY_ENCODE_ERROR"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_TOO_LONG), "TOO_LONG"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_UNKNOWN_ALGORITHM), "UNKNOWN_ALGORITHM"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_UNKNOWN_CIPHER), "UNKNOWN_CIPHER"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_UNKNOWN_CIPHER_ALGORITHM), "UNKNOWN_CIPHER_ALGORITHM"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_UNKNOWN_DIGEST), "UNKNOWN_DIGEST"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_UNKNOWN_HASH), "UNKNOWN_HASH"},
-  {ERR_PACK(ERR_LIB_PKCS8, 0, PKCS8_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM), "UNSUPPORTED_PRIVATE_KEY_ALGORITHM"},
-  {0, NULL},
-};
diff --git a/crypto/rsa/CMakeLists.txt b/crypto/rsa/CMakeLists.txt
index b3d8fa4..c438e1d 100644
--- a/crypto/rsa/CMakeLists.txt
+++ b/crypto/rsa/CMakeLists.txt
@@ -10,7 +10,6 @@
   blinding.c
   padding.c
   rsa_asn1.c
-  rsa_error.c
 )
 
 add_executable(
diff --git a/crypto/rsa/rsa_error.c b/crypto/rsa/rsa_error.c
deleted file mode 100644
index 3c8ebe4..0000000
--- a/crypto/rsa/rsa_error.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/rsa.h>
-
-const ERR_STRING_DATA RSA_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_BN_BLINDING_convert_ex, 0), "BN_BLINDING_convert_ex"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_BN_BLINDING_create_param, 0), "BN_BLINDING_create_param"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_BN_BLINDING_invert_ex, 0), "BN_BLINDING_invert_ex"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_BN_BLINDING_new, 0), "BN_BLINDING_new"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_BN_BLINDING_update, 0), "BN_BLINDING_update"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_check_key, 0), "RSA_check_key"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_new_method, 0), "RSA_new_method"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_padding_add_PKCS1_OAEP_mgf1, 0), "RSA_padding_add_PKCS1_OAEP_mgf1"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_padding_add_PKCS1_PSS_mgf1, 0), "RSA_padding_add_PKCS1_PSS_mgf1"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_padding_add_PKCS1_type_1, 0), "RSA_padding_add_PKCS1_type_1"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_padding_add_PKCS1_type_2, 0), "RSA_padding_add_PKCS1_type_2"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_padding_add_SSLv23, 0), "RSA_padding_add_SSLv23"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_padding_add_none, 0), "RSA_padding_add_none"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_padding_check_PKCS1_OAEP_mgf1, 0), "RSA_padding_check_PKCS1_OAEP_mgf1"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_padding_check_PKCS1_type_1, 0), "RSA_padding_check_PKCS1_type_1"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_padding_check_PKCS1_type_2, 0), "RSA_padding_check_PKCS1_type_2"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_padding_check_SSLv23, 0), "RSA_padding_check_SSLv23"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_padding_check_none, 0), "RSA_padding_check_none"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_recover_crt_params, 0), "RSA_recover_crt_params"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_sign, 0), "RSA_sign"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_verify, 0), "RSA_verify"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_verify_PKCS1_PSS_mgf1, 0), "RSA_verify_PKCS1_PSS_mgf1"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_decrypt, 0), "decrypt"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_encrypt, 0), "encrypt"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_keygen, 0), "keygen"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_pkcs1_prefixed_msg, 0), "pkcs1_prefixed_msg"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_private_transform, 0), "private_transform"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_rsa_setup_blinding, 0), "rsa_setup_blinding"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_sign_raw, 0), "sign_raw"},
-  {ERR_PACK(ERR_LIB_RSA, RSA_F_verify_raw, 0), "verify_raw"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_BAD_E_VALUE), "BAD_E_VALUE"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_BAD_FIXED_HEADER_DECRYPT), "BAD_FIXED_HEADER_DECRYPT"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_BAD_PAD_BYTE_COUNT), "BAD_PAD_BYTE_COUNT"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_BAD_RSA_PARAMETERS), "BAD_RSA_PARAMETERS"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_BAD_SIGNATURE), "BAD_SIGNATURE"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_BLOCK_TYPE_IS_NOT_01), "BLOCK_TYPE_IS_NOT_01"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_BLOCK_TYPE_IS_NOT_02), "BLOCK_TYPE_IS_NOT_02"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_BN_NOT_INITIALIZED), "BN_NOT_INITIALIZED"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_CRT_PARAMS_ALREADY_GIVEN), "CRT_PARAMS_ALREADY_GIVEN"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_CRT_VALUES_INCORRECT), "CRT_VALUES_INCORRECT"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DATA_LEN_NOT_EQUAL_TO_MOD_LEN), "DATA_LEN_NOT_EQUAL_TO_MOD_LEN"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DATA_TOO_LARGE), "DATA_TOO_LARGE"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE), "DATA_TOO_LARGE_FOR_KEY_SIZE"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DATA_TOO_LARGE_FOR_MODULUS), "DATA_TOO_LARGE_FOR_MODULUS"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DATA_TOO_SMALL), "DATA_TOO_SMALL"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE), "DATA_TOO_SMALL_FOR_KEY_SIZE"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY), "DIGEST_TOO_BIG_FOR_RSA_KEY"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_D_E_NOT_CONGRUENT_TO_1), "D_E_NOT_CONGRUENT_TO_1"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_EMPTY_PUBLIC_KEY), "EMPTY_PUBLIC_KEY"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_FIRST_OCTET_INVALID), "FIRST_OCTET_INVALID"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INCONSISTENT_SET_OF_CRT_VALUES), "INCONSISTENT_SET_OF_CRT_VALUES"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INTERNAL_ERROR), "INTERNAL_ERROR"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_MESSAGE_LENGTH), "INVALID_MESSAGE_LENGTH"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_KEY_SIZE_TOO_SMALL), "KEY_SIZE_TOO_SMALL"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_LAST_OCTET_INVALID), "LAST_OCTET_INVALID"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_MODULUS_TOO_LARGE), "MODULUS_TOO_LARGE"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_NO_PUBLIC_EXPONENT), "NO_PUBLIC_EXPONENT"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_NULL_BEFORE_BLOCK_MISSING), "NULL_BEFORE_BLOCK_MISSING"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_N_NOT_EQUAL_P_Q), "N_NOT_EQUAL_P_Q"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_OAEP_DECODING_ERROR), "OAEP_DECODING_ERROR"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_ONLY_ONE_OF_P_Q_GIVEN), "ONLY_ONE_OF_P_Q_GIVEN"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_OUTPUT_BUFFER_TOO_SMALL), "OUTPUT_BUFFER_TOO_SMALL"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_PADDING_CHECK_FAILED), "PADDING_CHECK_FAILED"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_PKCS_DECODING_ERROR), "PKCS_DECODING_ERROR"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_SLEN_CHECK_FAILED), "SLEN_CHECK_FAILED"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_SLEN_RECOVERY_FAILED), "SLEN_RECOVERY_FAILED"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_SSLV3_ROLLBACK_ATTACK), "SSLV3_ROLLBACK_ATTACK"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD), "THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_TOO_LONG), "TOO_LONG"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_TOO_MANY_ITERATIONS), "TOO_MANY_ITERATIONS"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_UNKNOWN_ALGORITHM_TYPE), "UNKNOWN_ALGORITHM_TYPE"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_UNKNOWN_PADDING_TYPE), "UNKNOWN_PADDING_TYPE"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_VALUE_MISSING), "VALUE_MISSING"},
-  {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_WRONG_SIGNATURE_LENGTH), "WRONG_SIGNATURE_LENGTH"},
-  {0, NULL},
-};
diff --git a/crypto/x509/CMakeLists.txt b/crypto/x509/CMakeLists.txt
index f00e28a..96cf35c 100644
--- a/crypto/x509/CMakeLists.txt
+++ b/crypto/x509/CMakeLists.txt
@@ -22,7 +22,6 @@
   x509_cmp.c
   x509_d2.c
   x509_def.c
-  x509_error.c
   x509_ext.c
   x509_lu.c
   x509_obj.c
diff --git a/crypto/x509/x509_error.c b/crypto/x509/x509_error.c
deleted file mode 100644
index 222a40a..0000000
--- a/crypto/x509/x509_error.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/x509.h>
-
-const ERR_STRING_DATA X509_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_X509, X509_F_ASN1_digest, 0), "ASN1_digest"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_ASN1_generate_v3, 0), "ASN1_generate_v3"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_ASN1_item_sign_ctx, 0), "ASN1_item_sign_ctx"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_ASN1_item_verify, 0), "ASN1_item_verify"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_ASN1_sign, 0), "ASN1_sign"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_NETSCAPE_SPKI_b64_decode, 0), "NETSCAPE_SPKI_b64_decode"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_NETSCAPE_SPKI_b64_encode, 0), "NETSCAPE_SPKI_b64_encode"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_PKCS7_get_certificates, 0), "PKCS7_get_certificates"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_ATTRIBUTE_create_by_NID, 0), "X509_ATTRIBUTE_create_by_NID"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_ATTRIBUTE_create_by_OBJ, 0), "X509_ATTRIBUTE_create_by_OBJ"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_ATTRIBUTE_create_by_txt, 0), "X509_ATTRIBUTE_create_by_txt"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_ATTRIBUTE_get0_data, 0), "X509_ATTRIBUTE_get0_data"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_ATTRIBUTE_set1_data, 0), "X509_ATTRIBUTE_set1_data"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_CRL_add0_revoked, 0), "X509_CRL_add0_revoked"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_CRL_diff, 0), "X509_CRL_diff"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_CRL_print_fp, 0), "X509_CRL_print_fp"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_EXTENSION_create_by_NID, 0), "X509_EXTENSION_create_by_NID"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_EXTENSION_create_by_OBJ, 0), "X509_EXTENSION_create_by_OBJ"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_INFO_new, 0), "X509_INFO_new"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_ENTRY_create_by_NID, 0), "X509_NAME_ENTRY_create_by_NID"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_ENTRY_create_by_txt, 0), "X509_NAME_ENTRY_create_by_txt"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_ENTRY_set_object, 0), "X509_NAME_ENTRY_set_object"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_add_entry, 0), "X509_NAME_add_entry"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_oneline, 0), "X509_NAME_oneline"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_print, 0), "X509_NAME_print"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_PKEY_new, 0), "X509_PKEY_new"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_get, 0), "X509_PUBKEY_get"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_set, 0), "X509_PUBKEY_set"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_REQ_check_private_key, 0), "X509_REQ_check_private_key"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_REQ_to_X509, 0), "X509_REQ_to_X509"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_CTX_get1_issuer, 0), "X509_STORE_CTX_get1_issuer"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_CTX_init, 0), "X509_STORE_CTX_init"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_CTX_new, 0), "X509_STORE_CTX_new"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_CTX_purpose_inherit, 0), "X509_STORE_CTX_purpose_inherit"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_add_cert, 0), "X509_STORE_add_cert"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_add_crl, 0), "X509_STORE_add_crl"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_TRUST_add, 0), "X509_TRUST_add"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_TRUST_set, 0), "X509_TRUST_set"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_check_private_key, 0), "X509_check_private_key"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_get_pubkey_parameters, 0), "X509_get_pubkey_parameters"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_load_cert_crl_file, 0), "X509_load_cert_crl_file"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_load_cert_file, 0), "X509_load_cert_file"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_load_crl_file, 0), "X509_load_crl_file"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_print_ex_fp, 0), "X509_print_ex_fp"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_to_X509_REQ, 0), "X509_to_X509_REQ"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509_verify_cert, 0), "X509_verify_cert"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509at_add1_attr, 0), "X509at_add1_attr"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_X509v3_add_ext, 0), "X509v3_add_ext"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_add_cert_dir, 0), "add_cert_dir"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_append_exp, 0), "append_exp"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_asn1_cb, 0), "asn1_cb"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_asn1_str2type, 0), "asn1_str2type"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_bitstr_cb, 0), "bitstr_cb"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_by_file_ctrl, 0), "by_file_ctrl"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_check_policy, 0), "check_policy"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_d2i_X509_PKEY, 0), "d2i_X509_PKEY"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_dir_ctrl, 0), "dir_ctrl"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_get_cert_by_subject, 0), "get_cert_by_subject"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_i2d_DSA_PUBKEY, 0), "i2d_DSA_PUBKEY"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_i2d_EC_PUBKEY, 0), "i2d_EC_PUBKEY"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_i2d_PrivateKey, 0), "i2d_PrivateKey"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_i2d_RSA_PUBKEY, 0), "i2d_RSA_PUBKEY"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_parse_tagging, 0), "parse_tagging"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_x509_name_encode, 0), "x509_name_encode"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_x509_name_ex_d2i, 0), "x509_name_ex_d2i"},
-  {ERR_PACK(ERR_LIB_X509, X509_F_x509_name_ex_new, 0), "x509_name_ex_new"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_AKID_MISMATCH), "AKID_MISMATCH"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_BAD_PKCS7_VERSION), "BAD_PKCS7_VERSION"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_BAD_X509_FILETYPE), "BAD_X509_FILETYPE"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_BASE64_DECODE_ERROR), "BASE64_DECODE_ERROR"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_CANT_CHECK_DH_KEY), "CANT_CHECK_DH_KEY"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_CERT_ALREADY_IN_HASH_TABLE), "CERT_ALREADY_IN_HASH_TABLE"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_CONTEXT_NOT_INITIALISED), "CONTEXT_NOT_INITIALISED"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_CRL_ALREADY_DELTA), "CRL_ALREADY_DELTA"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_CRL_VERIFY_FAILURE), "CRL_VERIFY_FAILURE"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_ERR_ASN1_LIB), "ERR_ASN1_LIB"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_IDP_MISMATCH), "IDP_MISMATCH"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_INVALID_BIT_STRING_BITS_LEFT), "INVALID_BIT_STRING_BITS_LEFT"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_INVALID_DIRECTORY), "INVALID_DIRECTORY"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_INVALID_FIELD_NAME), "INVALID_FIELD_NAME"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_INVALID_TRUST), "INVALID_TRUST"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_ISSUER_MISMATCH), "ISSUER_MISMATCH"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_KEY_TYPE_MISMATCH), "KEY_TYPE_MISMATCH"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_KEY_VALUES_MISMATCH), "KEY_VALUES_MISMATCH"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_LOADING_CERT_DIR), "LOADING_CERT_DIR"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_LOADING_DEFAULTS), "LOADING_DEFAULTS"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_METHOD_NOT_SUPPORTED), "METHOD_NOT_SUPPORTED"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_NEWER_CRL_NOT_NEWER), "NEWER_CRL_NOT_NEWER"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_NOT_PKCS7_SIGNED_DATA), "NOT_PKCS7_SIGNED_DATA"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_NO_CERTIFICATES_INCLUDED), "NO_CERTIFICATES_INCLUDED"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_NO_CERT_SET_FOR_US_TO_VERIFY), "NO_CERT_SET_FOR_US_TO_VERIFY"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_NO_CRL_NUMBER), "NO_CRL_NUMBER"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_PUBLIC_KEY_DECODE_ERROR), "PUBLIC_KEY_DECODE_ERROR"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_PUBLIC_KEY_ENCODE_ERROR), "PUBLIC_KEY_ENCODE_ERROR"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_SHOULD_RETRY), "SHOULD_RETRY"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN), "UNABLE_TO_FIND_PARAMETERS_IN_CHAIN"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY), "UNABLE_TO_GET_CERTS_PUBLIC_KEY"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_UNKNOWN_KEY_TYPE), "UNKNOWN_KEY_TYPE"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_UNKNOWN_NID), "UNKNOWN_NID"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_UNKNOWN_PURPOSE_ID), "UNKNOWN_PURPOSE_ID"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_UNKNOWN_TRUST_ID), "UNKNOWN_TRUST_ID"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_UNSUPPORTED_ALGORITHM), "UNSUPPORTED_ALGORITHM"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_WRONG_LOOKUP_TYPE), "WRONG_LOOKUP_TYPE"},
-  {ERR_PACK(ERR_LIB_X509, 0, X509_R_WRONG_TYPE), "WRONG_TYPE"},
-  {0, NULL},
-};
diff --git a/crypto/x509v3/CMakeLists.txt b/crypto/x509v3/CMakeLists.txt
index 26de0ed..f94bbc2 100644
--- a/crypto/x509v3/CMakeLists.txt
+++ b/crypto/x509v3/CMakeLists.txt
@@ -41,7 +41,6 @@
   v3_skey.c
   v3_sxnet.c
   v3_utl.c
-  x509v3_error.c
 )
 
 add_executable(
diff --git a/crypto/x509v3/x509v3_error.c b/crypto/x509v3/x509v3_error.c
deleted file mode 100644
index 9fbca5f..0000000
--- a/crypto/x509v3/x509v3_error.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/x509v3.h>
-
-const ERR_STRING_DATA X509V3_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_SXNET_add_id_INTEGER, 0), "SXNET_add_id_INTEGER"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_SXNET_add_id_asc, 0), "SXNET_add_id_asc"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_SXNET_add_id_ulong, 0), "SXNET_add_id_ulong"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_SXNET_get_id_asc, 0), "SXNET_get_id_asc"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_SXNET_get_id_ulong, 0), "SXNET_get_id_ulong"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_EXT_add, 0), "X509V3_EXT_add"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_EXT_add_alias, 0), "X509V3_EXT_add_alias"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_EXT_free, 0), "X509V3_EXT_free"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_EXT_i2d, 0), "X509V3_EXT_i2d"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_EXT_nconf, 0), "X509V3_EXT_nconf"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_add1_i2d, 0), "X509V3_add1_i2d"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_add_value, 0), "X509V3_add_value"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_get_section, 0), "X509V3_get_section"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_get_string, 0), "X509V3_get_string"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_get_value_bool, 0), "X509V3_get_value_bool"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_parse_list, 0), "X509V3_parse_list"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509_PURPOSE_add, 0), "X509_PURPOSE_add"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509_PURPOSE_set, 0), "X509_PURPOSE_set"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_a2i_GENERAL_NAME, 0), "a2i_GENERAL_NAME"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_copy_email, 0), "copy_email"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_copy_issuer, 0), "copy_issuer"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_do_dirname, 0), "do_dirname"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_do_ext_i2d, 0), "do_ext_i2d"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_do_ext_nconf, 0), "do_ext_nconf"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_gnames_from_sectname, 0), "gnames_from_sectname"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_hex_to_string, 0), "hex_to_string"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_i2s_ASN1_ENUMERATED, 0), "i2s_ASN1_ENUMERATED"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_i2s_ASN1_IA5STRING, 0), "i2s_ASN1_IA5STRING"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_i2s_ASN1_INTEGER, 0), "i2s_ASN1_INTEGER"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_i2v_AUTHORITY_INFO_ACCESS, 0), "i2v_AUTHORITY_INFO_ACCESS"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_notice_section, 0), "notice_section"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_nref_nos, 0), "nref_nos"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_policy_section, 0), "policy_section"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_process_pci_value, 0), "process_pci_value"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_r2i_certpol, 0), "r2i_certpol"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_r2i_pci, 0), "r2i_pci"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_s2i_ASN1_IA5STRING, 0), "s2i_ASN1_IA5STRING"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_s2i_ASN1_INTEGER, 0), "s2i_ASN1_INTEGER"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_s2i_ASN1_OCTET_STRING, 0), "s2i_ASN1_OCTET_STRING"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_s2i_skey_id, 0), "s2i_skey_id"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_set_dist_point_name, 0), "set_dist_point_name"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_string_to_hex, 0), "string_to_hex"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_v2i_ASN1_BIT_STRING, 0), "v2i_ASN1_BIT_STRING"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_v2i_AUTHORITY_INFO_ACCESS, 0), "v2i_AUTHORITY_INFO_ACCESS"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_v2i_AUTHORITY_KEYID, 0), "v2i_AUTHORITY_KEYID"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_v2i_BASIC_CONSTRAINTS, 0), "v2i_BASIC_CONSTRAINTS"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_v2i_EXTENDED_KEY_USAGE, 0), "v2i_EXTENDED_KEY_USAGE"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_v2i_GENERAL_NAMES, 0), "v2i_GENERAL_NAMES"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_v2i_GENERAL_NAME_ex, 0), "v2i_GENERAL_NAME_ex"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_v2i_NAME_CONSTRAINTS, 0), "v2i_NAME_CONSTRAINTS"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_v2i_POLICY_CONSTRAINTS, 0), "v2i_POLICY_CONSTRAINTS"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_v2i_POLICY_MAPPINGS, 0), "v2i_POLICY_MAPPINGS"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_v2i_crld, 0), "v2i_crld"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_v2i_idp, 0), "v2i_idp"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_v2i_issuer_alt, 0), "v2i_issuer_alt"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_v2i_subject_alt, 0), "v2i_subject_alt"},
-  {ERR_PACK(ERR_LIB_X509V3, X509V3_F_v3_generic_extension, 0), "v3_generic_extension"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_BAD_IP_ADDRESS), "BAD_IP_ADDRESS"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_BAD_OBJECT), "BAD_OBJECT"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_BN_DEC2BN_ERROR), "BN_DEC2BN_ERROR"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_BN_TO_ASN1_INTEGER_ERROR), "BN_TO_ASN1_INTEGER_ERROR"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_CANNOT_FIND_FREE_FUNCTION), "CANNOT_FIND_FREE_FUNCTION"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_DIRNAME_ERROR), "DIRNAME_ERROR"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_DISTPOINT_ALREADY_SET), "DISTPOINT_ALREADY_SET"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_DUPLICATE_ZONE_ID), "DUPLICATE_ZONE_ID"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_ERROR_CONVERTING_ZONE), "ERROR_CONVERTING_ZONE"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_ERROR_CREATING_EXTENSION), "ERROR_CREATING_EXTENSION"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_ERROR_IN_EXTENSION), "ERROR_IN_EXTENSION"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_EXPECTED_A_SECTION_NAME), "EXPECTED_A_SECTION_NAME"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_EXTENSION_EXISTS), "EXTENSION_EXISTS"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_EXTENSION_NAME_ERROR), "EXTENSION_NAME_ERROR"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_EXTENSION_NOT_FOUND), "EXTENSION_NOT_FOUND"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED), "EXTENSION_SETTING_NOT_SUPPORTED"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_EXTENSION_VALUE_ERROR), "EXTENSION_VALUE_ERROR"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_ILLEGAL_EMPTY_EXTENSION), "ILLEGAL_EMPTY_EXTENSION"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_ILLEGAL_HEX_DIGIT), "ILLEGAL_HEX_DIGIT"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INCORRECT_POLICY_SYNTAX_TAG), "INCORRECT_POLICY_SYNTAX_TAG"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_ASNUMBER), "INVALID_ASNUMBER"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_ASRANGE), "INVALID_ASRANGE"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_BOOLEAN_STRING), "INVALID_BOOLEAN_STRING"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_EXTENSION_STRING), "INVALID_EXTENSION_STRING"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_INHERITANCE), "INVALID_INHERITANCE"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_IPADDRESS), "INVALID_IPADDRESS"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_MULTIPLE_RDNS), "INVALID_MULTIPLE_RDNS"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_NAME), "INVALID_NAME"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_NULL_ARGUMENT), "INVALID_NULL_ARGUMENT"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_NULL_NAME), "INVALID_NULL_NAME"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_NULL_VALUE), "INVALID_NULL_VALUE"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_NUMBER), "INVALID_NUMBER"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_NUMBERS), "INVALID_NUMBERS"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_OBJECT_IDENTIFIER), "INVALID_OBJECT_IDENTIFIER"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_OPTION), "INVALID_OPTION"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_POLICY_IDENTIFIER), "INVALID_POLICY_IDENTIFIER"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_PROXY_POLICY_SETTING), "INVALID_PROXY_POLICY_SETTING"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_PURPOSE), "INVALID_PURPOSE"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_SAFI), "INVALID_SAFI"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_SECTION), "INVALID_SECTION"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_SYNTAX), "INVALID_SYNTAX"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_ISSUER_DECODE_ERROR), "ISSUER_DECODE_ERROR"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_MISSING_VALUE), "MISSING_VALUE"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NEED_ORGANIZATION_AND_NUMBERS), "NEED_ORGANIZATION_AND_NUMBERS"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NO_CONFIG_DATABASE), "NO_CONFIG_DATABASE"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NO_ISSUER_CERTIFICATE), "NO_ISSUER_CERTIFICATE"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NO_ISSUER_DETAILS), "NO_ISSUER_DETAILS"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NO_POLICY_IDENTIFIER), "NO_POLICY_IDENTIFIER"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED), "NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NO_PUBLIC_KEY), "NO_PUBLIC_KEY"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NO_SUBJECT_DETAILS), "NO_SUBJECT_DETAILS"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_ODD_NUMBER_OF_DIGITS), "ODD_NUMBER_OF_DIGITS"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_OPERATION_NOT_DEFINED), "OPERATION_NOT_DEFINED"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_OTHERNAME_ERROR), "OTHERNAME_ERROR"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED), "POLICY_LANGUAGE_ALREADY_DEFINED"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_POLICY_PATH_LENGTH), "POLICY_PATH_LENGTH"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED), "POLICY_PATH_LENGTH_ALREADY_DEFINED"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED), "POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY), "POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_SECTION_NOT_FOUND), "SECTION_NOT_FOUND"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS), "UNABLE_TO_GET_ISSUER_DETAILS"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNABLE_TO_GET_ISSUER_KEYID), "UNABLE_TO_GET_ISSUER_KEYID"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT), "UNKNOWN_BIT_STRING_ARGUMENT"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNKNOWN_EXTENSION), "UNKNOWN_EXTENSION"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNKNOWN_EXTENSION_NAME), "UNKNOWN_EXTENSION_NAME"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNKNOWN_OPTION), "UNKNOWN_OPTION"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNSUPPORTED_OPTION), "UNSUPPORTED_OPTION"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNSUPPORTED_TYPE), "UNSUPPORTED_TYPE"},
-  {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_USER_TOO_LONG), "USER_TOO_LONG"},
-  {0, NULL},
-};
diff --git a/include/openssl/err.h b/include/openssl/err.h
index c749659..4e318dd 100644
--- a/include/openssl/err.h
+++ b/include/openssl/err.h
@@ -142,10 +142,7 @@
 
 /* Startup and shutdown. */
 
-/* ERR_load_crypto_strings initialises the error string hash with builtin
- * values. If this is not called then the string forms of errors produced by
- * the functions below will contain numeric identifiers rather than
- * human-readable strings. */
+/* ERR_load_crypto_strings does nothing. */
 OPENSSL_EXPORT void ERR_load_crypto_strings(void);
 
 /* ERR_free_strings frees any memory retained by the error system, expect for
@@ -474,24 +471,10 @@
 #define ERR_GET_FUNC(packed_error) ((int)(((packed_error) >> 12) & 0xfff))
 #define ERR_GET_REASON(packed_error) ((int)((packed_error) & 0xfff))
 
-/* ERR_STRING_DATA is the type of an lhash node that contains a mapping from a
- * library, function or reason code to a string representation of it. */
-typedef struct err_string_data_st {
-  uint32_t error;
-  const char *string;
-} ERR_STRING_DATA;
-
-/* ERR_load_strings loads an array of ERR_STRING_DATA into the hash table. The
- * array must be terminated by an entry with a NULL string. */
-OPENSSL_EXPORT void ERR_load_strings(const ERR_STRING_DATA *str);
-
 /* ERR_FNS_st is a structure of function pointers that contains the actual
  * implementation of the error queue handling functions. */
 struct ERR_FNS_st {
   void (*shutdown)(void (*err_state_free_cb)(ERR_STATE*));
-  ERR_STRING_DATA *(*get_item)(uint32_t packed_error);
-  ERR_STRING_DATA *(*set_item)(const ERR_STRING_DATA *);
-  ERR_STRING_DATA *(*del_item)(uint32_t packed_error);
 
   /* get_state returns the ERR_STATE for the current thread. This function
    * never returns NULL. */
diff --git a/ssl/CMakeLists.txt b/ssl/CMakeLists.txt
index 91bd5ea..1f7be84 100644
--- a/ssl/CMakeLists.txt
+++ b/ssl/CMakeLists.txt
@@ -23,7 +23,6 @@
   ssl_asn1.c
   ssl_cert.c
   ssl_ciph.c
-  ssl_error.c
   ssl_lib.c
   ssl_rsa.c
   ssl_sess.c
diff --git a/ssl/ssl_algs.c b/ssl/ssl_algs.c
index 6ec88bf..fed6518 100644
--- a/ssl/ssl_algs.c
+++ b/ssl/ssl_algs.c
@@ -58,14 +58,9 @@
 
 #include <openssl/crypto.h>
 
-extern const ERR_STRING_DATA SSL_error_string_data[];
-
 int SSL_library_init(void) {
   CRYPTO_library_init();
-  ERR_load_crypto_strings();
-  ERR_load_strings(SSL_error_string_data);
   return 1;
 }
 
-void SSL_load_error_strings(void) {
-}
+void SSL_load_error_strings(void) {}
diff --git a/ssl/ssl_error.c b/ssl/ssl_error.c
deleted file mode 100644
index cbceb41..0000000
--- a/ssl/ssl_error.c
+++ /dev/null
@@ -1,568 +0,0 @@
-/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/err.h>
-
-#include <openssl/ssl.h>
-
-const ERR_STRING_DATA SSL_error_string_data[] = {
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_D2I_SSL_SESSION, 0), "D2I_SSL_SESSION"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_check_private_key, 0), "SSL_CTX_check_private_key"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_new, 0), "SSL_CTX_new"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_set_cipher_list, 0), "SSL_CTX_set_cipher_list"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_set_cipher_list_tls11, 0), "SSL_CTX_set_cipher_list_tls11"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_set_session_id_context, 0), "SSL_CTX_set_session_id_context"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_set_ssl_version, 0), "SSL_CTX_set_ssl_version"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_use_PrivateKey, 0), "SSL_CTX_use_PrivateKey"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_use_PrivateKey_ASN1, 0), "SSL_CTX_use_PrivateKey_ASN1"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_use_PrivateKey_file, 0), "SSL_CTX_use_PrivateKey_file"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_use_RSAPrivateKey, 0), "SSL_CTX_use_RSAPrivateKey"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_use_RSAPrivateKey_ASN1, 0), "SSL_CTX_use_RSAPrivateKey_ASN1"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_use_RSAPrivateKey_file, 0), "SSL_CTX_use_RSAPrivateKey_file"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_use_authz, 0), "SSL_CTX_use_authz"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_use_certificate, 0), "SSL_CTX_use_certificate"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_use_certificate_ASN1, 0), "SSL_CTX_use_certificate_ASN1"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_use_certificate_chain_file, 0), "SSL_CTX_use_certificate_chain_file"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_use_certificate_file, 0), "SSL_CTX_use_certificate_file"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_use_psk_identity_hint, 0), "SSL_CTX_use_psk_identity_hint"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SESSION_new, 0), "SSL_SESSION_new"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SESSION_print_fp, 0), "SSL_SESSION_print_fp"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SESSION_set1_id_context, 0), "SSL_SESSION_set1_id_context"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SESSION_to_bytes_full, 0), "SSL_SESSION_to_bytes_full"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_accept, 0), "SSL_accept"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_add_dir_cert_subjects_to_stack, 0), "SSL_add_dir_cert_subjects_to_stack"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_add_file_cert_subjects_to_stack, 0), "SSL_add_file_cert_subjects_to_stack"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_check_private_key, 0), "SSL_check_private_key"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_clear, 0), "SSL_clear"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_connect, 0), "SSL_connect"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_do_handshake, 0), "SSL_do_handshake"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_load_client_CA_file, 0), "SSL_load_client_CA_file"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_new, 0), "SSL_new"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_peek, 0), "SSL_peek"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_read, 0), "SSL_read"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_renegotiate, 0), "SSL_renegotiate"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_set_cipher_list, 0), "SSL_set_cipher_list"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_set_fd, 0), "SSL_set_fd"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_set_rfd, 0), "SSL_set_rfd"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_set_session, 0), "SSL_set_session"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_set_session_id_context, 0), "SSL_set_session_id_context"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_set_session_ticket_ext, 0), "SSL_set_session_ticket_ext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_set_wfd, 0), "SSL_set_wfd"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_shutdown, 0), "SSL_shutdown"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_use_PrivateKey, 0), "SSL_use_PrivateKey"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_use_PrivateKey_ASN1, 0), "SSL_use_PrivateKey_ASN1"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_use_PrivateKey_file, 0), "SSL_use_PrivateKey_file"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_use_RSAPrivateKey, 0), "SSL_use_RSAPrivateKey"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_use_RSAPrivateKey_ASN1, 0), "SSL_use_RSAPrivateKey_ASN1"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_use_RSAPrivateKey_file, 0), "SSL_use_RSAPrivateKey_file"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_use_authz, 0), "SSL_use_authz"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_use_certificate, 0), "SSL_use_certificate"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_use_certificate_ASN1, 0), "SSL_use_certificate_ASN1"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_use_certificate_file, 0), "SSL_use_certificate_file"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_use_psk_identity_hint, 0), "SSL_use_psk_identity_hint"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_write, 0), "SSL_write"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_authz_find_data, 0), "authz_find_data"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_check_suiteb_cipher_list, 0), "check_suiteb_cipher_list"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_d2i_SSL_SESSION, 0), "d2i_SSL_SESSION"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_d2i_SSL_SESSION_get_octet_string, 0), "d2i_SSL_SESSION_get_octet_string"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_d2i_SSL_SESSION_get_string, 0), "d2i_SSL_SESSION_get_string"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_do_dtls1_write, 0), "do_dtls1_write"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_do_ssl3_write, 0), "do_ssl3_write"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_dtls1_accept, 0), "dtls1_accept"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_dtls1_buffer_record, 0), "dtls1_buffer_record"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_dtls1_check_timeout_num, 0), "dtls1_check_timeout_num"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_dtls1_connect, 0), "dtls1_connect"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_dtls1_do_write, 0), "dtls1_do_write"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_dtls1_get_hello_verify, 0), "dtls1_get_hello_verify"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_dtls1_get_message, 0), "dtls1_get_message"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_dtls1_get_message_fragment, 0), "dtls1_get_message_fragment"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_dtls1_heartbeat, 0), "dtls1_heartbeat"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_dtls1_preprocess_fragment, 0), "dtls1_preprocess_fragment"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_dtls1_process_record, 0), "dtls1_process_record"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_dtls1_read_bytes, 0), "dtls1_read_bytes"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_dtls1_send_hello_verify_request, 0), "dtls1_send_hello_verify_request"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_dtls1_write_app_data_bytes, 0), "dtls1_write_app_data_bytes"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_fclose, 0), "fclose"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_fprintf, 0), "fprintf"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_i2d_SSL_SESSION, 0), "i2d_SSL_SESSION"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_printf, 0), "printf"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_read_authz, 0), "read_authz"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl23_accept, 0), "ssl23_accept"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl23_client_hello, 0), "ssl23_client_hello"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl23_connect, 0), "ssl23_connect"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl23_get_client_hello, 0), "ssl23_get_client_hello"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl23_get_server_hello, 0), "ssl23_get_server_hello"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl23_get_v2_client_hello, 0), "ssl23_get_v2_client_hello"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl23_peek, 0), "ssl23_peek"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl23_read, 0), "ssl23_read"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl23_write, 0), "ssl23_write"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_accept, 0), "ssl3_accept"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_callback_ctrl, 0), "ssl3_callback_ctrl"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_cert_verify_hash, 0), "ssl3_cert_verify_hash"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_change_cipher_state, 0), "ssl3_change_cipher_state"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_check_cert_and_algorithm, 0), "ssl3_check_cert_and_algorithm"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_check_client_hello, 0), "ssl3_check_client_hello"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_connect, 0), "ssl3_connect"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_ctrl, 0), "ssl3_ctrl"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_ctx_ctrl, 0), "ssl3_ctx_ctrl"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_digest_cached_records, 0), "ssl3_digest_cached_records"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_do_change_cipher_spec, 0), "ssl3_do_change_cipher_spec"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_expect_change_cipher_spec, 0), "ssl3_expect_change_cipher_spec"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_generate_key_block, 0), "ssl3_generate_key_block"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_cert_status, 0), "ssl3_get_cert_status"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_cert_verify, 0), "ssl3_get_cert_verify"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_certificate_request, 0), "ssl3_get_certificate_request"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_channel_id, 0), "ssl3_get_channel_id"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_client_certificate, 0), "ssl3_get_client_certificate"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_client_hello, 0), "ssl3_get_client_hello"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_client_key_exchange, 0), "ssl3_get_client_key_exchange"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_finished, 0), "ssl3_get_finished"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_initial_bytes, 0), "ssl3_get_initial_bytes"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_message, 0), "ssl3_get_message"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_new_session_ticket, 0), "ssl3_get_new_session_ticket"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_next_proto, 0), "ssl3_get_next_proto"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_record, 0), "ssl3_get_record"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_server_certificate, 0), "ssl3_get_server_certificate"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_server_done, 0), "ssl3_get_server_done"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_server_hello, 0), "ssl3_get_server_hello"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_server_key_exchange, 0), "ssl3_get_server_key_exchange"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_get_v2_client_hello, 0), "ssl3_get_v2_client_hello"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_handshake_mac, 0), "ssl3_handshake_mac"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_prf, 0), "ssl3_prf"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_read_bytes, 0), "ssl3_read_bytes"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_read_n, 0), "ssl3_read_n"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_send_cert_verify, 0), "ssl3_send_cert_verify"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_send_certificate_request, 0), "ssl3_send_certificate_request"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_send_channel_id, 0), "ssl3_send_channel_id"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_send_client_certificate, 0), "ssl3_send_client_certificate"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_send_client_hello, 0), "ssl3_send_client_hello"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_send_client_key_exchange, 0), "ssl3_send_client_key_exchange"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_send_new_session_ticket, 0), "ssl3_send_new_session_ticket"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_send_server_certificate, 0), "ssl3_send_server_certificate"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_send_server_hello, 0), "ssl3_send_server_hello"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_send_server_key_exchange, 0), "ssl3_send_server_key_exchange"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_setup_key_block, 0), "ssl3_setup_key_block"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_setup_read_buffer, 0), "ssl3_setup_read_buffer"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_setup_write_buffer, 0), "ssl3_setup_write_buffer"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_write_bytes, 0), "ssl3_write_bytes"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl3_write_pending, 0), "ssl3_write_pending"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_add_cert_chain, 0), "ssl_add_cert_chain"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_add_cert_to_buf, 0), "ssl_add_cert_to_buf"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_add_clienthello_renegotiate_ext, 0), "ssl_add_clienthello_renegotiate_ext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_add_clienthello_tlsext, 0), "ssl_add_clienthello_tlsext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_add_clienthello_use_srtp_ext, 0), "ssl_add_clienthello_use_srtp_ext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_add_serverhello_renegotiate_ext, 0), "ssl_add_serverhello_renegotiate_ext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_add_serverhello_tlsext, 0), "ssl_add_serverhello_tlsext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_add_serverhello_use_srtp_ext, 0), "ssl_add_serverhello_use_srtp_ext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_bad_method, 0), "ssl_bad_method"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_build_cert_chain, 0), "ssl_build_cert_chain"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_bytes_to_cipher_list, 0), "ssl_bytes_to_cipher_list"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_cert_dup, 0), "ssl_cert_dup"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_cert_inst, 0), "ssl_cert_inst"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_cert_new, 0), "ssl_cert_new"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_check_serverhello_tlsext, 0), "ssl_check_serverhello_tlsext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_check_srvr_ecc_cert_and_alg, 0), "ssl_check_srvr_ecc_cert_and_alg"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_cipher_process_rulestr, 0), "ssl_cipher_process_rulestr"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_cipher_strength_sort, 0), "ssl_cipher_strength_sort"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_create_cipher_list, 0), "ssl_create_cipher_list"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_ctx_log_master_secret, 0), "ssl_ctx_log_master_secret"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_ctx_log_rsa_client_key_exchange, 0), "ssl_ctx_log_rsa_client_key_exchange"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_ctx_make_profiles, 0), "ssl_ctx_make_profiles"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_get_new_session, 0), "ssl_get_new_session"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_get_prev_session, 0), "ssl_get_prev_session"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_get_server_cert_index, 0), "ssl_get_server_cert_index"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_get_sign_pkey, 0), "ssl_get_sign_pkey"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_init_wbio_buffer, 0), "ssl_init_wbio_buffer"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_new, 0), "ssl_new"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_parse_clienthello_renegotiate_ext, 0), "ssl_parse_clienthello_renegotiate_ext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_parse_clienthello_tlsext, 0), "ssl_parse_clienthello_tlsext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_parse_clienthello_use_srtp_ext, 0), "ssl_parse_clienthello_use_srtp_ext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_parse_serverhello_renegotiate_ext, 0), "ssl_parse_serverhello_renegotiate_ext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_parse_serverhello_tlsext, 0), "ssl_parse_serverhello_tlsext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_parse_serverhello_use_srtp_ext, 0), "ssl_parse_serverhello_use_srtp_ext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_prepare_clienthello_tlsext, 0), "ssl_prepare_clienthello_tlsext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_scan_clienthello_tlsext, 0), "ssl_scan_clienthello_tlsext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_scan_serverhello_tlsext, 0), "ssl_scan_serverhello_tlsext"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_sess_cert_new, 0), "ssl_sess_cert_new"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_set_authz, 0), "ssl_set_authz"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_set_cert, 0), "ssl_set_cert"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_set_pkey, 0), "ssl_set_pkey"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_undefined_const_function, 0), "ssl_undefined_const_function"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_undefined_function, 0), "ssl_undefined_function"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_undefined_void_function, 0), "ssl_undefined_void_function"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_ssl_verify_cert_chain, 0), "ssl_verify_cert_chain"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_tls12_check_peer_sigalg, 0), "tls12_check_peer_sigalg"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_tls1_aead_ctx_init, 0), "tls1_aead_ctx_init"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_tls1_cert_verify_mac, 0), "tls1_cert_verify_mac"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_tls1_change_cipher_state, 0), "tls1_change_cipher_state"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_tls1_change_cipher_state_aead, 0), "tls1_change_cipher_state_aead"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_tls1_change_cipher_state_cipher, 0), "tls1_change_cipher_state_cipher"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_tls1_check_duplicate_extensions, 0), "tls1_check_duplicate_extensions"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_tls1_enc, 0), "tls1_enc"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_tls1_export_keying_material, 0), "tls1_export_keying_material"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_tls1_get_server_supplemental_data, 0), "tls1_get_server_supplemental_data"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_tls1_heartbeat, 0), "tls1_heartbeat"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_tls1_prf, 0), "tls1_prf"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_tls1_send_server_supplemental_data, 0), "tls1_send_server_supplemental_data"},
-  {ERR_PACK(ERR_LIB_SSL, SSL_F_tls1_setup_key_block, 0), "tls1_setup_key_block"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_APP_DATA_IN_HANDSHAKE), "APP_DATA_IN_HANDSHAKE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT), "ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_AUTHZ_DATA_TOO_LARGE), "AUTHZ_DATA_TOO_LARGE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_ALERT), "BAD_ALERT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_ALERT_RECORD), "BAD_ALERT_RECORD"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_AUTHENTICATION_TYPE), "BAD_AUTHENTICATION_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_CHANGE_CIPHER_SPEC), "BAD_CHANGE_CIPHER_SPEC"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_CHECKSUM), "BAD_CHECKSUM"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DATA), "BAD_DATA"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DATA_RETURNED_BY_CALLBACK), "BAD_DATA_RETURNED_BY_CALLBACK"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DECOMPRESSION), "BAD_DECOMPRESSION"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DH_G_LENGTH), "BAD_DH_G_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DH_PUB_KEY_LENGTH), "BAD_DH_PUB_KEY_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DH_P_LENGTH), "BAD_DH_P_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DIGEST_LENGTH), "BAD_DIGEST_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DSA_SIGNATURE), "BAD_DSA_SIGNATURE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_ECC_CERT), "BAD_ECC_CERT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_ECDSA_SIGNATURE), "BAD_ECDSA_SIGNATURE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_ECPOINT), "BAD_ECPOINT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_HANDSHAKE_LENGTH), "BAD_HANDSHAKE_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_HANDSHAKE_RECORD), "BAD_HANDSHAKE_RECORD"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_HELLO_REQUEST), "BAD_HELLO_REQUEST"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_LENGTH), "BAD_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_MAC_DECODE), "BAD_MAC_DECODE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_MAC_LENGTH), "BAD_MAC_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_MESSAGE_TYPE), "BAD_MESSAGE_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_PACKET_LENGTH), "BAD_PACKET_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_PROTOCOL_VERSION_NUMBER), "BAD_PROTOCOL_VERSION_NUMBER"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH), "BAD_PSK_IDENTITY_HINT_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_RESPONSE_ARGUMENT), "BAD_RESPONSE_ARGUMENT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_RSA_DECRYPT), "BAD_RSA_DECRYPT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_RSA_ENCRYPT), "BAD_RSA_ENCRYPT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_RSA_E_LENGTH), "BAD_RSA_E_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_RSA_MODULUS_LENGTH), "BAD_RSA_MODULUS_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_RSA_SIGNATURE), "BAD_RSA_SIGNATURE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SIGNATURE), "BAD_SIGNATURE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SRP_A_LENGTH), "BAD_SRP_A_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SRP_B_LENGTH), "BAD_SRP_B_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SRP_G_LENGTH), "BAD_SRP_G_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SRP_N_LENGTH), "BAD_SRP_N_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SRP_S_LENGTH), "BAD_SRP_S_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SRTP_MKI_VALUE), "BAD_SRTP_MKI_VALUE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST), "BAD_SRTP_PROTECTION_PROFILE_LIST"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SSL_FILETYPE), "BAD_SSL_FILETYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SSL_SESSION_ID_LENGTH), "BAD_SSL_SESSION_ID_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_STATE), "BAD_STATE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_VALUE), "BAD_VALUE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_WRITE_RETRY), "BAD_WRITE_RETRY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BIO_NOT_SET), "BIO_NOT_SET"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BLOCK_CIPHER_PAD_IS_WRONG), "BLOCK_CIPHER_PAD_IS_WRONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BN_LIB), "BN_LIB"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CANNOT_SERIALIZE_PUBLIC_KEY), "CANNOT_SERIALIZE_PUBLIC_KEY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CA_DN_LENGTH_MISMATCH), "CA_DN_LENGTH_MISMATCH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CA_DN_TOO_LONG), "CA_DN_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CCS_RECEIVED_EARLY), "CCS_RECEIVED_EARLY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CERTIFICATE_VERIFY_FAILED), "CERTIFICATE_VERIFY_FAILED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CERT_CB_ERROR), "CERT_CB_ERROR"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CERT_LENGTH_MISMATCH), "CERT_LENGTH_MISMATCH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CHALLENGE_IS_DIFFERENT), "CHALLENGE_IS_DIFFERENT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CHANNEL_ID_NOT_P256), "CHANNEL_ID_NOT_P256"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CHANNEL_ID_SIGNATURE_INVALID), "CHANNEL_ID_SIGNATURE_INVALID"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CIPHER_CODE_WRONG_LENGTH), "CIPHER_CODE_WRONG_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CIPHER_OR_HASH_UNAVAILABLE), "CIPHER_OR_HASH_UNAVAILABLE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CIPHER_TABLE_SRC_ERROR), "CIPHER_TABLE_SRC_ERROR"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CLIENTHELLO_PARSE_FAILED), "CLIENTHELLO_PARSE_FAILED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CLIENTHELLO_TLSEXT), "CLIENTHELLO_TLSEXT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_COMPRESSED_LENGTH_TOO_LONG), "COMPRESSED_LENGTH_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_COMPRESSION_DISABLED), "COMPRESSION_DISABLED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_COMPRESSION_FAILURE), "COMPRESSION_FAILURE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE), "COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_COMPRESSION_LIBRARY_ERROR), "COMPRESSION_LIBRARY_ERROR"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CONNECTION_ID_IS_DIFFERENT), "CONNECTION_ID_IS_DIFFERENT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CONNECTION_REJECTED), "CONNECTION_REJECTED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CONNECTION_TYPE_NOT_SET), "CONNECTION_TYPE_NOT_SET"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_COOKIE_MISMATCH), "COOKIE_MISMATCH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_D2I_ECDSA_SIG), "D2I_ECDSA_SIG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DATA_BETWEEN_CCS_AND_FINISHED), "DATA_BETWEEN_CCS_AND_FINISHED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DATA_LENGTH_TOO_LONG), "DATA_LENGTH_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DECODE_ERROR), "DECODE_ERROR"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DECRYPTION_FAILED), "DECRYPTION_FAILED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC), "DECRYPTION_FAILED_OR_BAD_RECORD_MAC"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG), "DH_PUBLIC_VALUE_LENGTH_IS_WRONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DIGEST_CHECK_FAILED), "DIGEST_CHECK_FAILED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DTLS_MESSAGE_TOO_BIG), "DTLS_MESSAGE_TOO_BIG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DUPLICATE_COMPRESSION_ID), "DUPLICATE_COMPRESSION_ID"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT), "ECC_CERT_NOT_FOR_KEY_AGREEMENT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ECC_CERT_NOT_FOR_SIGNING), "ECC_CERT_NOT_FOR_SIGNING"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE), "ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE), "ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER), "ECGROUP_TOO_LARGE_FOR_CIPHER"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST), "EMPTY_SRTP_PROTECTION_PROFILE_LIST"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ENCRYPTED_LENGTH_TOO_LONG), "ENCRYPTED_LENGTH_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ERROR_GENERATING_TMP_RSA_KEY), "ERROR_GENERATING_TMP_RSA_KEY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST), "ERROR_IN_RECEIVED_CIPHER_LIST"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_EVP_DIGESTSIGNFINAL_FAILED), "EVP_DIGESTSIGNFINAL_FAILED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_EVP_DIGESTSIGNINIT_FAILED), "EVP_DIGESTSIGNINIT_FAILED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_EXCESSIVE_MESSAGE_SIZE), "EXCESSIVE_MESSAGE_SIZE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_EXTRA_DATA_IN_MESSAGE), "EXTRA_DATA_IN_MESSAGE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_GOST_NOT_SUPPORTED), "GOST_NOT_SUPPORTED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_GOT_A_FIN_BEFORE_A_CCS), "GOT_A_FIN_BEFORE_A_CCS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_GOT_CHANNEL_ID_BEFORE_A_CCS), "GOT_CHANNEL_ID_BEFORE_A_CCS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS), "GOT_NEXT_PROTO_BEFORE_A_CCS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION), "GOT_NEXT_PROTO_WITHOUT_EXTENSION"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_HANDSHAKE_FAILURE_ON_CLIENT_HELLO), "HANDSHAKE_FAILURE_ON_CLIENT_HELLO"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_HANDSHAKE_RECORD_BEFORE_CCS), "HANDSHAKE_RECORD_BEFORE_CCS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_HTTPS_PROXY_REQUEST), "HTTPS_PROXY_REQUEST"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_HTTP_REQUEST), "HTTP_REQUEST"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ILLEGAL_PADDING), "ILLEGAL_PADDING"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ILLEGAL_SUITEB_DIGEST), "ILLEGAL_SUITEB_DIGEST"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INAPPROPRIATE_FALLBACK), "INAPPROPRIATE_FALLBACK"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INCONSISTENT_COMPRESSION), "INCONSISTENT_COMPRESSION"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_AUDIT_PROOF), "INVALID_AUDIT_PROOF"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_AUTHZ_DATA), "INVALID_AUTHZ_DATA"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_CHALLENGE_LENGTH), "INVALID_CHALLENGE_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_COMMAND), "INVALID_COMMAND"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_COMPRESSION_ALGORITHM), "INVALID_COMPRESSION_ALGORITHM"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_MESSAGE), "INVALID_MESSAGE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_NULL_CMD_NAME), "INVALID_NULL_CMD_NAME"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_PURPOSE), "INVALID_PURPOSE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_SERVERINFO_DATA), "INVALID_SERVERINFO_DATA"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_SRP_USERNAME), "INVALID_SRP_USERNAME"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_SSL_SESSION), "INVALID_SSL_SESSION"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_STATUS_RESPONSE), "INVALID_STATUS_RESPONSE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_TICKET_KEYS_LENGTH), "INVALID_TICKET_KEYS_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_TRUST), "INVALID_TRUST"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_KEY_ARG_TOO_LONG), "KEY_ARG_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_KRB5), "KRB5"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_KRB5_C_CC_PRINC), "KRB5_C_CC_PRINC"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_KRB5_C_GET_CRED), "KRB5_C_GET_CRED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_KRB5_C_INIT), "KRB5_C_INIT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_KRB5_C_MK_REQ), "KRB5_C_MK_REQ"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_KRB5_S_BAD_TICKET), "KRB5_S_BAD_TICKET"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_KRB5_S_INIT), "KRB5_S_INIT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_KRB5_S_RD_REQ), "KRB5_S_RD_REQ"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_KRB5_S_TKT_EXPIRED), "KRB5_S_TKT_EXPIRED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_KRB5_S_TKT_NYV), "KRB5_S_TKT_NYV"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_KRB5_S_TKT_SKEW), "KRB5_S_TKT_SKEW"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_LENGTH_MISMATCH), "LENGTH_MISMATCH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_LENGTH_TOO_SHORT), "LENGTH_TOO_SHORT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_LIBRARY_BUG), "LIBRARY_BUG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_LIBRARY_HAS_NO_CIPHERS), "LIBRARY_HAS_NO_CIPHERS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MESSAGE_TOO_LONG), "MESSAGE_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_DH_DSA_CERT), "MISSING_DH_DSA_CERT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_DH_KEY), "MISSING_DH_KEY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_DH_RSA_CERT), "MISSING_DH_RSA_CERT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_DSA_SIGNING_CERT), "MISSING_DSA_SIGNING_CERT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_ECDH_CERT), "MISSING_ECDH_CERT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_ECDSA_SIGNING_CERT), "MISSING_ECDSA_SIGNING_CERT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_EXPORT_TMP_DH_KEY), "MISSING_EXPORT_TMP_DH_KEY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_EXPORT_TMP_RSA_KEY), "MISSING_EXPORT_TMP_RSA_KEY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_RSA_CERTIFICATE), "MISSING_RSA_CERTIFICATE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_RSA_ENCRYPTING_CERT), "MISSING_RSA_ENCRYPTING_CERT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_RSA_SIGNING_CERT), "MISSING_RSA_SIGNING_CERT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_SRP_PARAM), "MISSING_SRP_PARAM"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_TMP_DH_KEY), "MISSING_TMP_DH_KEY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_TMP_ECDH_KEY), "MISSING_TMP_ECDH_KEY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_TMP_RSA_KEY), "MISSING_TMP_RSA_KEY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_TMP_RSA_PKEY), "MISSING_TMP_RSA_PKEY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_VERIFY_MESSAGE), "MISSING_VERIFY_MESSAGE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MIXED_SPECIAL_OPERATOR_WITH_GROUPS), "MIXED_SPECIAL_OPERATOR_WITH_GROUPS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MTU_TOO_SMALL), "MTU_TOO_SMALL"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MULTIPLE_SGC_RESTARTS), "MULTIPLE_SGC_RESTARTS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NESTED_GROUP), "NESTED_GROUP"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NON_SSLV2_INITIAL_PACKET), "NON_SSLV2_INITIAL_PACKET"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CERTIFICATES_RETURNED), "NO_CERTIFICATES_RETURNED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CERTIFICATE_ASSIGNED), "NO_CERTIFICATE_ASSIGNED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CERTIFICATE_RETURNED), "NO_CERTIFICATE_RETURNED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CERTIFICATE_SET), "NO_CERTIFICATE_SET"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CERTIFICATE_SPECIFIED), "NO_CERTIFICATE_SPECIFIED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CIPHERS_AVAILABLE), "NO_CIPHERS_AVAILABLE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CIPHERS_PASSED), "NO_CIPHERS_PASSED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CIPHERS_SPECIFIED), "NO_CIPHERS_SPECIFIED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CIPHER_LIST), "NO_CIPHER_LIST"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CIPHER_MATCH), "NO_CIPHER_MATCH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CLIENT_CERT_METHOD), "NO_CLIENT_CERT_METHOD"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CLIENT_CERT_RECEIVED), "NO_CLIENT_CERT_RECEIVED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_COMPRESSION_SPECIFIED), "NO_COMPRESSION_SPECIFIED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER), "NO_GOST_CERTIFICATE_SENT_BY_PEER"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_METHOD_SPECIFIED), "NO_METHOD_SPECIFIED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_P256_SUPPORT), "NO_P256_SUPPORT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_PEM_EXTENSIONS), "NO_PEM_EXTENSIONS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_PRIVATEKEY), "NO_PRIVATEKEY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_PRIVATE_KEY_ASSIGNED), "NO_PRIVATE_KEY_ASSIGNED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_PROTOCOLS_AVAILABLE), "NO_PROTOCOLS_AVAILABLE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_PUBLICKEY), "NO_PUBLICKEY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_RENEGOTIATION), "NO_RENEGOTIATION"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_REQUIRED_DIGEST), "NO_REQUIRED_DIGEST"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_SHARED_CIPHER), "NO_SHARED_CIPHER"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_SHARED_SIGATURE_ALGORITHMS), "NO_SHARED_SIGATURE_ALGORITHMS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_SRTP_PROFILES), "NO_SRTP_PROFILES"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_VERIFY_CALLBACK), "NO_VERIFY_CALLBACK"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NULL_SSL_CTX), "NULL_SSL_CTX"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NULL_SSL_METHOD_PASSED), "NULL_SSL_METHOD_PASSED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED), "OLD_SESSION_CIPHER_NOT_RETURNED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED), "OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE), "ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE), "ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE), "ONLY_TLS_ALLOWED_IN_FIPS_MODE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG), "OPAQUE_PRF_INPUT_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PACKET_LENGTH_TOO_LONG), "PACKET_LENGTH_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PARSE_TLSEXT), "PARSE_TLSEXT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PATH_TOO_LONG), "PATH_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE), "PEER_DID_NOT_RETURN_A_CERTIFICATE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PEER_ERROR), "PEER_ERROR"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PEER_ERROR_CERTIFICATE), "PEER_ERROR_CERTIFICATE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PEER_ERROR_NO_CERTIFICATE), "PEER_ERROR_NO_CERTIFICATE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PEER_ERROR_NO_CIPHER), "PEER_ERROR_NO_CIPHER"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE), "PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PEM_NAME_BAD_PREFIX), "PEM_NAME_BAD_PREFIX"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PEM_NAME_TOO_SHORT), "PEM_NAME_TOO_SHORT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PRE_MAC_LENGTH_TOO_LONG), "PRE_MAC_LENGTH_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS), "PROBLEMS_MAPPING_CIPHER_FUNCTIONS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PROTOCOL_IS_SHUTDOWN), "PROTOCOL_IS_SHUTDOWN"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PSK_IDENTITY_NOT_FOUND), "PSK_IDENTITY_NOT_FOUND"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PSK_NO_CLIENT_CB), "PSK_NO_CLIENT_CB"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PSK_NO_SERVER_CB), "PSK_NO_SERVER_CB"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PUBLIC_KEY_ENCRYPT_ERROR), "PUBLIC_KEY_ENCRYPT_ERROR"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PUBLIC_KEY_IS_NOT_RSA), "PUBLIC_KEY_IS_NOT_RSA"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PUBLIC_KEY_NOT_RSA), "PUBLIC_KEY_NOT_RSA"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_READ_BIO_NOT_SET), "READ_BIO_NOT_SET"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_READ_TIMEOUT_EXPIRED), "READ_TIMEOUT_EXPIRED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_READ_WRONG_PACKET_TYPE), "READ_WRONG_PACKET_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_RECORD_LENGTH_MISMATCH), "RECORD_LENGTH_MISMATCH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_RECORD_TOO_LARGE), "RECORD_TOO_LARGE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_RECORD_TOO_SMALL), "RECORD_TOO_SMALL"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_RENEGOTIATE_EXT_TOO_LONG), "RENEGOTIATE_EXT_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_RENEGOTIATION_ENCODING_ERR), "RENEGOTIATION_ENCODING_ERR"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_RENEGOTIATION_MISMATCH), "RENEGOTIATION_MISMATCH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_REQUIRED_CIPHER_MISSING), "REQUIRED_CIPHER_MISSING"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_REQUIRED_COMPRESSSION_ALGORITHM_MISSING), "REQUIRED_COMPRESSSION_ALGORITHM_MISSING"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_REUSE_CERT_LENGTH_NOT_ZERO), "REUSE_CERT_LENGTH_NOT_ZERO"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_REUSE_CERT_TYPE_NOT_ZERO), "REUSE_CERT_TYPE_NOT_ZERO"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_REUSE_CIPHER_LIST_NOT_ZERO), "REUSE_CIPHER_LIST_NOT_ZERO"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING), "SCSV_RECEIVED_WHEN_RENEGOTIATING"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SERVERHELLO_TLSEXT), "SERVERHELLO_TLSEXT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED), "SESSION_ID_CONTEXT_UNINITIALIZED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SESSION_MAY_NOT_BE_CREATED), "SESSION_MAY_NOT_BE_CREATED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SHORT_READ), "SHORT_READ"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SIGNATURE_ALGORITHMS_ERROR), "SIGNATURE_ALGORITHMS_ERROR"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE), "SIGNATURE_FOR_NON_SIGNING_CERTIFICATE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SRP_A_CALC), "SRP_A_CALC"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES), "SRTP_COULD_NOT_ALLOCATE_PROFILES"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG), "SRTP_PROTECTION_PROFILE_LIST_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE), "SRTP_UNKNOWN_PROTECTION_PROFILE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL23_DOING_SESSION_ID_REUSE), "SSL23_DOING_SESSION_ID_REUSE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL2_CONNECTION_ID_TOO_LONG), "SSL2_CONNECTION_ID_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT), "SSL3_EXT_INVALID_ECPOINTFORMAT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL3_EXT_INVALID_SERVERNAME), "SSL3_EXT_INVALID_SERVERNAME"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE), "SSL3_EXT_INVALID_SERVERNAME_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL3_SESSION_ID_TOO_LONG), "SSL3_SESSION_ID_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL3_SESSION_ID_TOO_SHORT), "SSL3_SESSION_ID_TOO_SHORT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_BAD_CERTIFICATE), "SSLV3_ALERT_BAD_CERTIFICATE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_BAD_RECORD_MAC), "SSLV3_ALERT_BAD_RECORD_MAC"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED), "SSLV3_ALERT_CERTIFICATE_EXPIRED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED), "SSLV3_ALERT_CERTIFICATE_REVOKED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN), "SSLV3_ALERT_CERTIFICATE_UNKNOWN"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_CLOSE_NOTIFY), "SSLV3_ALERT_CLOSE_NOTIFY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE), "SSLV3_ALERT_DECOMPRESSION_FAILURE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE), "SSLV3_ALERT_HANDSHAKE_FAILURE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER), "SSLV3_ALERT_ILLEGAL_PARAMETER"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_NO_CERTIFICATE), "SSLV3_ALERT_NO_CERTIFICATE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE), "SSLV3_ALERT_UNEXPECTED_MESSAGE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE), "SSLV3_ALERT_UNSUPPORTED_CERTIFICATE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION), "SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_HANDSHAKE_FAILURE), "SSL_HANDSHAKE_FAILURE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS), "SSL_LIBRARY_HAS_NO_CIPHERS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_SESSION_ID_CALLBACK_FAILED), "SSL_SESSION_ID_CALLBACK_FAILED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_SESSION_ID_CONFLICT), "SSL_SESSION_ID_CONFLICT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG), "SSL_SESSION_ID_CONTEXT_TOO_LONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH), "SSL_SESSION_ID_HAS_BAD_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_SESSION_ID_IS_DIFFERENT), "SSL_SESSION_ID_IS_DIFFERENT"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_ACCESS_DENIED), "TLSV1_ALERT_ACCESS_DENIED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_DECODE_ERROR), "TLSV1_ALERT_DECODE_ERROR"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_DECRYPTION_FAILED), "TLSV1_ALERT_DECRYPTION_FAILED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_DECRYPT_ERROR), "TLSV1_ALERT_DECRYPT_ERROR"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION), "TLSV1_ALERT_EXPORT_RESTRICTION"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK), "TLSV1_ALERT_INAPPROPRIATE_FALLBACK"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY), "TLSV1_ALERT_INSUFFICIENT_SECURITY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_INTERNAL_ERROR), "TLSV1_ALERT_INTERNAL_ERROR"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_NO_RENEGOTIATION), "TLSV1_ALERT_NO_RENEGOTIATION"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_PROTOCOL_VERSION), "TLSV1_ALERT_PROTOCOL_VERSION"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_RECORD_OVERFLOW), "TLSV1_ALERT_RECORD_OVERFLOW"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_UNKNOWN_CA), "TLSV1_ALERT_UNKNOWN_CA"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_USER_CANCELLED), "TLSV1_ALERT_USER_CANCELLED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE), "TLSV1_BAD_CERTIFICATE_HASH_VALUE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE), "TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE), "TLSV1_CERTIFICATE_UNOBTAINABLE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_UNRECOGNIZED_NAME), "TLSV1_UNRECOGNIZED_NAME"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_UNSUPPORTED_EXTENSION), "TLSV1_UNSUPPORTED_EXTENSION"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER), "TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLS_ILLEGAL_EXPORTER_LABEL), "TLS_ILLEGAL_EXPORTER_LABEL"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST), "TLS_INVALID_ECPOINTFORMAT_LIST"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST), "TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG), "TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TOO_MANY_EMPTY_FRAGMENTS), "TOO_MANY_EMPTY_FRAGMENTS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER), "TRIED_TO_USE_UNSUPPORTED_CIPHER"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNABLE_TO_DECODE_DH_CERTS), "UNABLE_TO_DECODE_DH_CERTS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNABLE_TO_DECODE_ECDH_CERTS), "UNABLE_TO_DECODE_ECDH_CERTS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY), "UNABLE_TO_EXTRACT_PUBLIC_KEY"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNABLE_TO_FIND_DH_PARAMETERS), "UNABLE_TO_FIND_DH_PARAMETERS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS), "UNABLE_TO_FIND_ECDH_PARAMETERS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS), "UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNABLE_TO_FIND_SSL_METHOD), "UNABLE_TO_FIND_SSL_METHOD"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES), "UNABLE_TO_LOAD_SSL2_MD5_ROUTINES"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES), "UNABLE_TO_LOAD_SSL3_MD5_ROUTINES"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES), "UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNEXPECTED_GROUP_CLOSE), "UNEXPECTED_GROUP_CLOSE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNEXPECTED_MESSAGE), "UNEXPECTED_MESSAGE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNEXPECTED_OPERATOR_IN_GROUP), "UNEXPECTED_OPERATOR_IN_GROUP"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNEXPECTED_RECORD), "UNEXPECTED_RECORD"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNINITIALIZED), "UNINITIALIZED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_ALERT_TYPE), "UNKNOWN_ALERT_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_AUTHZ_DATA_TYPE), "UNKNOWN_AUTHZ_DATA_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_CERTIFICATE_TYPE), "UNKNOWN_CERTIFICATE_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_CIPHER_RETURNED), "UNKNOWN_CIPHER_RETURNED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_CIPHER_TYPE), "UNKNOWN_CIPHER_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_CMD_NAME), "UNKNOWN_CMD_NAME"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_DIGEST), "UNKNOWN_DIGEST"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE), "UNKNOWN_KEY_EXCHANGE_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_PKEY_TYPE), "UNKNOWN_PKEY_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_PROTOCOL), "UNKNOWN_PROTOCOL"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_REMOTE_ERROR_TYPE), "UNKNOWN_REMOTE_ERROR_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_SSL_VERSION), "UNKNOWN_SSL_VERSION"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_STATE), "UNKNOWN_STATE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_SUPPLEMENTAL_DATA_TYPE), "UNKNOWN_SUPPLEMENTAL_DATA_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNPROCESSED_HANDSHAKE_DATA), "UNPROCESSED_HANDSHAKE_DATA"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED), "UNSAFE_LEGACY_RENEGOTIATION_DISABLED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNSUPPORTED_CIPHER), "UNSUPPORTED_CIPHER"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM), "UNSUPPORTED_COMPRESSION_ALGORITHM"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNSUPPORTED_DIGEST_TYPE), "UNSUPPORTED_DIGEST_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE), "UNSUPPORTED_ELLIPTIC_CURVE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNSUPPORTED_PROTOCOL), "UNSUPPORTED_PROTOCOL"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNSUPPORTED_SSL_VERSION), "UNSUPPORTED_SSL_VERSION"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNSUPPORTED_STATUS_TYPE), "UNSUPPORTED_STATUS_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_USE_SRTP_NOT_NEGOTIATED), "USE_SRTP_NOT_NEGOTIATED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRITE_BIO_NOT_SET), "WRITE_BIO_NOT_SET"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_CERTIFICATE_TYPE), "WRONG_CERTIFICATE_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_CIPHER_RETURNED), "WRONG_CIPHER_RETURNED"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_CURVE), "WRONG_CURVE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_MESSAGE_TYPE), "WRONG_MESSAGE_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_NUMBER_OF_KEY_BITS), "WRONG_NUMBER_OF_KEY_BITS"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_SIGNATURE_LENGTH), "WRONG_SIGNATURE_LENGTH"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_SIGNATURE_SIZE), "WRONG_SIGNATURE_SIZE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_SIGNATURE_TYPE), "WRONG_SIGNATURE_TYPE"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_SSL_VERSION), "WRONG_SSL_VERSION"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_VERSION_NUMBER), "WRONG_VERSION_NUMBER"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_X509_LIB), "X509_LIB"},
-  {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS), "X509_VERIFICATION_SETUP_PROBLEMS"},
-  {0, NULL},
-};
diff --git a/util/make_errors.go b/util/make_errors.go
index 5fd75e2..cd7c8dd 100644
--- a/util/make_errors.go
+++ b/util/make_errors.go
@@ -21,6 +21,7 @@
 	"fmt"
 	"io"
 	"os"
+	"os/exec"
 	"path/filepath"
 	"sort"
 	"strconv"
@@ -36,17 +37,20 @@
 var resetFlag *bool = flag.Bool("reset", false, "If true, ignore current assignments and reassign from scratch")
 
 func makeErrors(reset bool) error {
+	topLevelPath, err := findToplevel()
+	if err != nil {
+		return err
+	}
+
 	dirName, err := os.Getwd()
 	if err != nil {
 		return err
 	}
 
 	lib := filepath.Base(dirName)
-	headerPath, err := findHeader(lib + ".h")
-	if err != nil {
-		return err
-	}
-	sourcePath := lib + "_error.c"
+	headerPath := filepath.Join(topLevelPath, "include", "openssl", lib+".h")
+	errDir := filepath.Join(topLevelPath, "crypto", "err")
+	dataPath := filepath.Join(errDir, lib+".errordata")
 
 	headerFile, err := os.Open(headerPath)
 	if err != nil {
@@ -90,7 +94,7 @@
 	}
 
 	for _, name := range filenames {
-		if !strings.HasSuffix(name, ".c") || name == sourcePath {
+		if !strings.HasSuffix(name, ".c") {
 			continue
 		}
 
@@ -119,55 +123,51 @@
 	}
 	os.Rename(headerPath+".tmp", headerPath)
 
-	sourceFile, err := os.OpenFile(sourcePath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
+	dataFile, err := os.OpenFile(dataPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
 	if err != nil {
 		return err
 	}
-	defer sourceFile.Close()
 
-	fmt.Fprintf(sourceFile, `/* Copyright (c) 2014, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+	outputStrings(dataFile, lib, typeFunctions, functions)
+	outputStrings(dataFile, lib, typeReasons, reasons)
+	dataFile.Close()
 
-#include <openssl/err.h>
+	generateCmd := exec.Command("go", "run", "err_data_generate.go")
+	generateCmd.Dir = errDir
 
-#include <openssl/%s.h>
+	errDataH, err := os.OpenFile(filepath.Join(errDir, "err_data.h"), os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
+	if err != nil {
+		return err
+	}
+	defer errDataH.Close()
 
-const ERR_STRING_DATA %s_error_string_data[] = {
-`, lib, prefix)
-	outputStrings(sourceFile, lib, typeFunctions, functions)
-	outputStrings(sourceFile, lib, typeReasons, reasons)
+	generateCmd.Stdout = errDataH
+	generateCmd.Stderr = os.Stderr
 
-	sourceFile.WriteString("  {0, NULL},\n};\n")
+	if err := generateCmd.Start(); err != nil {
+		return err
+	}
+	if err := generateCmd.Wait(); err != nil {
+		return err
+	}
 
 	return nil
 }
 
-func findHeader(basename string) (path string, err error) {
-	includeDir := filepath.Join("..", "include")
+func findToplevel() (path string, err error) {
+	path = ".."
+	buildingPath := filepath.Join(path, "BUILDING")
 
-	fi, err := os.Stat(includeDir)
+	_, err = os.Stat(buildingPath)
 	if err != nil && os.IsNotExist(err) {
-		includeDir = filepath.Join("..", includeDir)
-		fi, err = os.Stat(includeDir)
+		path = filepath.Join("..", path)
+		buildingPath = filepath.Join(path, "BUILDING")
+		_, err = os.Stat(buildingPath)
 	}
 	if err != nil {
-		return "", errors.New("cannot find path to include directory")
+		return "", errors.New("Cannot find BUILDING file at the top-level")
 	}
-	if !fi.IsDir() {
-		return "", errors.New("include node is not a directory")
-	}
-	return filepath.Join(includeDir, "openssl", basename), nil
+	return path, nil
 }
 
 type assignment struct {
@@ -295,18 +295,17 @@
 	sort.Strings(keys)
 
 	for _, key := range keys {
-		var pack string
-		if ty == typeFunctions {
-			pack = key + ", 0"
-		} else {
-			pack = "0, " + key
+		typeString := "function"
+		if ty == typeReasons {
+			typeString = "reason"
 		}
-
-		fmt.Fprintf(w, "  {ERR_PACK(ERR_LIB_%s, %s), \"%s\"},\n", lib, pack, key[prefixLen:])
+		fmt.Fprintf(w, "%s,%s,%d,%s\n", lib, typeString, assignments[key], key[prefixLen:])
 	}
 }
 
 func assignNewValues(assignments map[string]int, reserved int) {
+	// Needs to be in sync with the reason limit in
+	// |ERR_reason_error_string|.
 	max := 99
 
 	for _, value := range assignments {