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