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/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