chore: checkpoint before Python removal

This commit is contained in:
2026-03-26 22:33:59 +00:00
parent 683cec9307
commit e568ddf82a
29972 changed files with 11269302 additions and 2 deletions

View File

@@ -0,0 +1,97 @@
ASN1,100,ASN1_LENGTH_MISMATCH
ASN1,101,AUX_ERROR
ASN1,102,BAD_GET_ASN1_OBJECT_CALL
ASN1,103,BAD_OBJECT_HEADER
ASN1,193,BAD_TEMPLATE
ASN1,104,BMPSTRING_IS_WRONG_LENGTH
ASN1,105,BN_LIB
ASN1,106,BOOLEAN_IS_WRONG_LENGTH
ASN1,107,BUFFER_TOO_SMALL
ASN1,108,CONTEXT_NOT_INITIALISED
ASN1,109,DECODE_ERROR
ASN1,110,DEPTH_EXCEEDED
ASN1,111,DIGEST_AND_KEY_TYPE_NOT_SUPPORTED
ASN1,112,ENCODE_ERROR
ASN1,113,ERROR_GETTING_TIME
ASN1,114,EXPECTING_AN_ASN1_SEQUENCE
ASN1,115,EXPECTING_AN_INTEGER
ASN1,116,EXPECTING_AN_OBJECT
ASN1,117,EXPECTING_A_BOOLEAN
ASN1,118,EXPECTING_A_TIME
ASN1,119,EXPLICIT_LENGTH_MISMATCH
ASN1,120,EXPLICIT_TAG_NOT_CONSTRUCTED
ASN1,121,FIELD_MISSING
ASN1,122,FIRST_NUM_TOO_LARGE
ASN1,123,HEADER_TOO_LONG
ASN1,124,ILLEGAL_BITSTRING_FORMAT
ASN1,125,ILLEGAL_BOOLEAN
ASN1,126,ILLEGAL_CHARACTERS
ASN1,127,ILLEGAL_FORMAT
ASN1,128,ILLEGAL_HEX
ASN1,129,ILLEGAL_IMPLICIT_TAG
ASN1,130,ILLEGAL_INTEGER
ASN1,131,ILLEGAL_NESTED_TAGGING
ASN1,132,ILLEGAL_NULL
ASN1,133,ILLEGAL_NULL_VALUE
ASN1,134,ILLEGAL_OBJECT
ASN1,135,ILLEGAL_OPTIONAL_ANY
ASN1,136,ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE
ASN1,137,ILLEGAL_TAGGED_ANY
ASN1,138,ILLEGAL_TIME_VALUE
ASN1,139,INTEGER_NOT_ASCII_FORMAT
ASN1,140,INTEGER_TOO_LARGE_FOR_LONG
ASN1,141,INVALID_BIT_STRING_BITS_LEFT
ASN1,194,INVALID_BIT_STRING_PADDING
ASN1,142,INVALID_BMPSTRING
ASN1,143,INVALID_DIGIT
ASN1,196,INVALID_INTEGER
ASN1,144,INVALID_MODIFIER
ASN1,145,INVALID_NUMBER
ASN1,146,INVALID_OBJECT_ENCODING
ASN1,147,INVALID_SEPARATOR
ASN1,148,INVALID_TIME_FORMAT
ASN1,149,INVALID_UNIVERSALSTRING
ASN1,150,INVALID_UTF8STRING
ASN1,151,LIST_ERROR
ASN1,152,MISSING_ASN1_EOS
ASN1,153,MISSING_EOC
ASN1,154,MISSING_SECOND_NUMBER
ASN1,155,MISSING_VALUE
ASN1,156,MSTRING_NOT_UNIVERSAL
ASN1,157,MSTRING_WRONG_TAG
ASN1,158,NESTED_ASN1_ERROR
ASN1,159,NESTED_ASN1_STRING
ASN1,192,NESTED_TOO_DEEP
ASN1,160,NON_HEX_CHARACTERS
ASN1,161,NOT_ASCII_FORMAT
ASN1,162,NOT_ENOUGH_DATA
ASN1,163,NO_MATCHING_CHOICE_TYPE
ASN1,164,NULL_IS_WRONG_LENGTH
ASN1,165,OBJECT_NOT_ASCII_FORMAT
ASN1,166,ODD_NUMBER_OF_CHARS
ASN1,167,SECOND_NUMBER_TOO_LARGE
ASN1,168,SEQUENCE_LENGTH_MISMATCH
ASN1,169,SEQUENCE_NOT_CONSTRUCTED
ASN1,170,SEQUENCE_OR_SET_NEEDS_CONFIG
ASN1,171,SHORT_LINE
ASN1,172,STREAMING_NOT_SUPPORTED
ASN1,173,STRING_TOO_LONG
ASN1,174,STRING_TOO_SHORT
ASN1,175,TAG_VALUE_TOO_HIGH
ASN1,176,TIME_NOT_ASCII_FORMAT
ASN1,177,TOO_LONG
ASN1,178,TYPE_NOT_CONSTRUCTED
ASN1,179,TYPE_NOT_PRIMITIVE
ASN1,180,UNEXPECTED_EOC
ASN1,181,UNIVERSALSTRING_IS_WRONG_LENGTH
ASN1,182,UNKNOWN_FORMAT
ASN1,183,UNKNOWN_MESSAGE_DIGEST_ALGORITHM
ASN1,184,UNKNOWN_SIGNATURE_ALGORITHM
ASN1,185,UNKNOWN_TAG
ASN1,186,UNSUPPORTED_ANY_DEFINED_BY_TYPE
ASN1,187,UNSUPPORTED_PUBLIC_KEY_TYPE
ASN1,188,UNSUPPORTED_TYPE
ASN1,195,WRONG_INTEGER_TYPE
ASN1,189,WRONG_PUBLIC_KEY_TYPE
ASN1,190,WRONG_TAG
ASN1,191,WRONG_TYPE

View File

@@ -0,0 +1,17 @@
BIO,100,BAD_FOPEN_MODE
BIO,101,BROKEN_PIPE
BIO,102,CONNECT_ERROR
BIO,103,ERROR_SETTING_NBIO
BIO,104,INVALID_ARGUMENT
BIO,105,IN_USE
BIO,106,KEEPALIVE
BIO,107,NBIO_CONNECT_ERROR
BIO,108,NO_HOSTNAME_SPECIFIED
BIO,109,NO_PORT_SPECIFIED
BIO,110,NO_SUCH_FILE
BIO,111,NULL_PARAMETER
BIO,112,SYS_LIB
BIO,113,UNABLE_TO_CREATE_SOCKET
BIO,114,UNINITIALIZED
BIO,115,UNSUPPORTED_METHOD
BIO,116,WRITE_TO_READ_ONLY_BIO

View File

@@ -0,0 +1,20 @@
BN,100,ARG2_LT_ARG3
BN,117,BAD_ENCODING
BN,101,BAD_RECIPROCAL
BN,102,BIGNUM_TOO_LONG
BN,103,BITS_TOO_SMALL
BN,104,CALLED_WITH_EVEN_MODULUS
BN,105,DIV_BY_ZERO
BN,118,ENCODE_ERROR
BN,106,EXPAND_ON_STATIC_BIGNUM_DATA
BN,107,INPUT_NOT_REDUCED
BN,119,INVALID_INPUT
BN,108,INVALID_RANGE
BN,109,NEGATIVE_NUMBER
BN,110,NOT_A_SQUARE
BN,111,NOT_INITIALIZED
BN,112,NO_INVERSE
BN,113,PRIVATE_KEY_TOO_LARGE
BN,114,P_IS_NOT_PRIME
BN,115,TOO_MANY_ITERATIONS
BN,116,TOO_MANY_TEMPORARY_VARIABLES

View File

@@ -0,0 +1,33 @@
CIPHER,100,AES_KEY_SETUP_FAILED
CIPHER,142,ALIGNMENT_CHANGED
CIPHER,101,BAD_DECRYPT
CIPHER,102,BAD_KEY_LENGTH
CIPHER,103,BUFFER_TOO_SMALL
CIPHER,104,CTRL_NOT_IMPLEMENTED
CIPHER,105,CTRL_OPERATION_NOT_IMPLEMENTED
CIPHER,140,CTRL_OPERATION_NOT_PERFORMED
CIPHER,106,DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH
CIPHER,107,INITIALIZATION_ERROR
CIPHER,108,INPUT_NOT_INITIALIZED
CIPHER,109,INVALID_AD_SIZE
CIPHER,110,INVALID_KEY_LENGTH
CIPHER,125,INVALID_NONCE
CIPHER,111,INVALID_NONCE_SIZE
CIPHER,112,INVALID_OPERATION
CIPHER,113,IV_TOO_LARGE
CIPHER,114,NO_CIPHER_SET
CIPHER,124,NO_DIRECTION_SET
CIPHER,115,OUTPUT_ALIASES_INPUT
CIPHER,144,SERIALIZATION_INVALID_CIPHER_ID
CIPHER,141,SERIALIZATION_INVALID_EVP_AEAD_CTX
CIPHER,143,SERIALIZATION_INVALID_SERDE_VERSION
CIPHER,116,TAG_TOO_LARGE
CIPHER,117,TOO_LARGE
CIPHER,118,UNSUPPORTED_AD_SIZE
CIPHER,119,UNSUPPORTED_INPUT_SIZE
CIPHER,120,UNSUPPORTED_KEY_SIZE
CIPHER,121,UNSUPPORTED_NONCE_SIZE
CIPHER,122,UNSUPPORTED_TAG_SIZE
CIPHER,123,WRONG_FINAL_BLOCK_LENGTH
CIPHER,139,XTS_DATA_UNIT_IS_TOO_LARGE
CIPHER,138,XTS_DUPLICATED_KEYS

View File

@@ -0,0 +1,9 @@
CONF,100,LIST_CANNOT_BE_NULL
CONF,101,MISSING_CLOSE_SQUARE_BRACKET
CONF,102,MISSING_EQUAL_SIGN
CONF,103,NO_CLOSE_BRACE
CONF,108,NO_CLOSE_QUOTE
CONF,104,UNABLE_TO_CREATE_NEW_SECTION
CONF,107,VARIABLE_EXPANSION_NOT_SUPPORTED
CONF,106,VARIABLE_EXPANSION_TOO_LONG
CONF,105,VARIABLE_HAS_NO_VALUE

View File

@@ -0,0 +1,8 @@
DH,100,BAD_GENERATOR
DH,104,DECODE_ERROR
DH,105,ENCODE_ERROR
DH,106,INVALID_NID
DH,107,INVALID_PARAMETERS
DH,101,INVALID_PUBKEY
DH,102,MODULUS_TOO_LARGE
DH,103,NO_PRIVATE_VALUE

View File

@@ -0,0 +1,3 @@
DIGEST,101,DECODE_ERROR
DIGEST,100,INPUT_NOT_INITIALIZED
DIGEST,102,UNKNOWN_HASH

View File

@@ -0,0 +1,9 @@
DSA,100,BAD_Q_VALUE
DSA,104,BAD_VERSION
DSA,105,DECODE_ERROR
DSA,106,ENCODE_ERROR
DSA,107,INVALID_PARAMETERS
DSA,101,MISSING_PARAMETERS
DSA,102,MODULUS_TOO_LARGE
DSA,103,NEED_NEW_SETUP_VALUES
DSA,108,TOO_MANY_ITERATIONS

View File

@@ -0,0 +1,34 @@
EC,126,BIGNUM_OUT_OF_RANGE
EC,100,BUFFER_TOO_SMALL
EC,101,COORDINATES_OUT_OF_RANGE
EC,102,D2I_ECPKPARAMETERS_FAILURE
EC,128,DECODE_ERROR
EC,103,EC_GROUP_NEW_BY_NAME_FAILURE
EC,129,ENCODE_ERROR
EC,104,GROUP2PKPARAMETERS_FAILURE
EC,130,GROUP_MISMATCH
EC,105,I2D_ECPKPARAMETERS_FAILURE
EC,106,INCOMPATIBLE_OBJECTS
EC,131,INVALID_COFACTOR
EC,107,INVALID_COMPRESSED_POINT
EC,108,INVALID_COMPRESSION_BIT
EC,109,INVALID_ENCODING
EC,110,INVALID_FIELD
EC,111,INVALID_FORM
EC,112,INVALID_GROUP_ORDER
EC,113,INVALID_PRIVATE_KEY
EC,133,INVALID_SCALAR
EC,114,MISSING_PARAMETERS
EC,115,MISSING_PRIVATE_KEY
EC,116,NON_NAMED_CURVE
EC,117,NOT_INITIALIZED
EC,118,PKPARAMETERS2GROUP_FAILURE
EC,119,POINT_AT_INFINITY
EC,120,POINT_IS_NOT_ON_CURVE
EC,132,PUBLIC_KEY_VALIDATION_FAILED
EC,121,SLOT_FULL
EC,122,UNDEFINED_GENERATOR
EC,123,UNKNOWN_GROUP
EC,124,UNKNOWN_ORDER
EC,127,WRONG_CURVE_PARAMETERS
EC,125,WRONG_ORDER

View File

@@ -0,0 +1,4 @@
ECDH,100,KDF_FAILED
ECDH,101,NO_PRIVATE_VALUE
ECDH,102,POINT_ARITHMETIC_FAILURE
ECDH,103,UNKNOWN_DIGEST_LENGTH

View File

@@ -0,0 +1,8 @@
ECDSA,100,BAD_SIGNATURE
ECDSA,105,ENCODE_ERROR
ECDSA,205,MISMATCHED_SIGNATURE
ECDSA,101,MISSING_PARAMETERS
ECDSA,102,NEED_NEW_SETUP_VALUES
ECDSA,103,NOT_IMPLEMENTED
ECDSA,104,RANDOM_NUMBER_GENERATION_FAILED
ECDSA,106,TOO_MANY_ITERATIONS

View File

@@ -0,0 +1 @@
ENGINE,100,OPERATION_NOT_SUPPORTED

View File

@@ -0,0 +1,799 @@
// Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
// Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
// `strdup` was only officially added in C23:
// * https://en.cppreference.com/w/c/string/byte/strdup
// The following macros are needed to ensure its definition
// is provided by the headers.
#ifdef __STDC_ALLOC_LIB__
#define __STDC_WANT_LIB_EXT2__ 1
#else
#define _POSIX_C_SOURCE 200809L
#endif
// Ensure we can't call OPENSSL_malloc circularly.
#define _BORINGSSL_PROHIBIT_OPENSSL_MALLOC
#include <openssl/err.h>
#include <assert.h>
#include <errno.h>
#ifndef __STDC_FORMAT_MACROS
#define __STDC_FORMAT_MACROS
#endif
#include <inttypes.h>
#include <limits.h>
#include <stdarg.h>
#include <string.h>
#if defined(OPENSSL_WINDOWS)
OPENSSL_MSVC_PRAGMA(warning(push, 3))
#include <windows.h>
OPENSSL_MSVC_PRAGMA(warning(pop))
#endif
#include <openssl/mem.h>
#include <openssl/thread.h>
#include "../internal.h"
#include "./internal.h"
struct err_error_st {
// file contains the filename where the error occurred.
const char *file;
// data contains a NUL-terminated string with optional data. It is allocated
// with system |malloc| and must be freed with |free| (not |OPENSSL_free|)
char *data;
// packed contains the error library and reason, as packed by ERR_PACK.
uint32_t packed;
// line contains the line number where the error occurred.
uint16_t line;
// mark indicates a reversion point in the queue. See |ERR_pop_to_mark|.
unsigned mark : 1;
};
// ERR_STATE contains the per-thread, error queue.
typedef struct err_state_st {
// errors contains up to ERR_NUM_ERRORS - 1 most recent errors, organised as a
// ring buffer.
struct err_error_st errors[ERR_NUM_ERRORS];
// top contains the index of the most recent error. If |top| equals |bottom|
// then the queue is empty.
unsigned top;
// bottom contains the index before the least recent error in the queue.
unsigned bottom;
// to_free, if not NULL, contains a pointer owned by this structure that was
// previously a |data| pointer of one of the elements of |errors|.
void *to_free;
} ERR_STATE;
extern const uint32_t kOpenSSLReasonValues[];
extern const size_t kOpenSSLReasonValuesLen;
extern const char kOpenSSLReasonStringData[];
static char *strdup_libc_malloc(const char *str) {
// |strdup| is not in C until C23, so MSVC triggers deprecation warnings, and
// glibc and musl gate it on a feature macro. Reimplementing it is easier.
size_t len = strlen(str);
char *ret = malloc(len + 1);
if (ret != NULL) {
memcpy(ret, str, len + 1);
}
return ret;
}
// err_clear clears the given queued error.
static void err_clear(struct err_error_st *error) {
free(error->data);
OPENSSL_memset(error, 0, sizeof(struct err_error_st));
}
static void err_copy(struct err_error_st *dst, const struct err_error_st *src) {
err_clear(dst);
dst->file = src->file;
if (src->data != NULL) {
// We can't use OPENSSL_strdup because we don't want to call OPENSSL_malloc,
// which can affect the error stack.
dst->data = strdup_libc_malloc(src->data);
}
dst->packed = src->packed;
dst->line = src->line;
}
// global_next_library contains the next custom library value to return.
static int global_next_library = ERR_NUM_LIBS;
// global_next_library_mutex protects |global_next_library| from concurrent
// updates.
static struct CRYPTO_STATIC_MUTEX global_next_library_mutex =
CRYPTO_STATIC_MUTEX_INIT;
static void err_state_free(void *statep) {
ERR_STATE *state = statep;
if (state == NULL) {
return;
}
for (unsigned i = 0; i < ERR_NUM_ERRORS; i++) {
err_clear(&state->errors[i]);
}
free(state->to_free);
free(state);
}
// err_get_state gets the ERR_STATE object for the current thread.
static ERR_STATE *err_get_state(void) {
ERR_STATE *state = CRYPTO_get_thread_local(OPENSSL_THREAD_LOCAL_ERR);
if (state == NULL) {
state = malloc(sizeof(ERR_STATE));
if (state == NULL) {
return NULL;
}
OPENSSL_memset(state, 0, sizeof(ERR_STATE));
if (!CRYPTO_set_thread_local(OPENSSL_THREAD_LOCAL_ERR, state,
err_state_free)) {
return NULL;
}
}
return state;
}
static uint32_t get_error_values(int inc, int top, const char **file, int *line,
const char **data, int *flags) {
unsigned i = 0;
ERR_STATE *state;
struct err_error_st *error;
uint32_t ret;
state = err_get_state();
if (state == NULL || state->bottom == state->top) {
return 0;
}
if (top) {
assert(!inc);
// last error
i = state->top;
} else {
i = (state->bottom + 1) % ERR_NUM_ERRORS;
}
error = &state->errors[i];
ret = error->packed;
if (file != NULL && line != NULL) {
if (error->file == NULL) {
*file = "NA";
*line = 0;
} else {
*file = error->file;
*line = error->line;
}
}
if (data != NULL) {
if (error->data == NULL) {
*data = "";
if (flags != NULL) {
*flags = 0;
}
} else {
*data = error->data;
if (flags != NULL) {
// Without |ERR_FLAG_MALLOCED|, rust-openssl assumes the string has a
// static lifetime. In both cases, we retain ownership of the string,
// and the caller is not expected to free it.
*flags = ERR_FLAG_STRING | ERR_FLAG_MALLOCED;
}
// If this error is being removed, take ownership of data from
// the error. The semantics are such that the caller doesn't
// take ownership either. Instead the error system takes
// ownership and retains it until the next call that affects the
// error queue.
if (inc) {
if (error->data != NULL) {
free(state->to_free);
state->to_free = error->data;
}
error->data = NULL;
}
}
}
if (inc) {
assert(!top);
err_clear(error);
state->bottom = i;
}
return ret;
}
uint32_t ERR_get_error(void) {
return get_error_values(1 /* inc */, 0 /* bottom */, NULL, NULL, NULL, NULL);
}
uint32_t ERR_get_error_line(const char **file, int *line) {
return get_error_values(1 /* inc */, 0 /* bottom */, file, line, NULL, NULL);
}
uint32_t ERR_get_error_line_data(const char **file, int *line,
const char **data, int *flags) {
return get_error_values(1 /* inc */, 0 /* bottom */, file, line, data, flags);
}
uint32_t ERR_peek_error(void) {
return get_error_values(0 /* peek */, 0 /* bottom */, NULL, NULL, NULL, NULL);
}
uint32_t ERR_peek_error_line(const char **file, int *line) {
return get_error_values(0 /* peek */, 0 /* bottom */, file, line, NULL, NULL);
}
uint32_t ERR_peek_error_line_data(const char **file, int *line,
const char **data, int *flags) {
return get_error_values(0 /* peek */, 0 /* bottom */, file, line, data,
flags);
}
uint32_t ERR_peek_last_error(void) {
return get_error_values(0 /* peek */, 1 /* top */, NULL, NULL, NULL, NULL);
}
uint32_t ERR_peek_last_error_line(const char **file, int *line) {
return get_error_values(0 /* peek */, 1 /* top */, file, line, NULL, NULL);
}
uint32_t ERR_peek_last_error_line_data(const char **file, int *line,
const char **data, int *flags) {
return get_error_values(0 /* peek */, 1 /* top */, file, line, data, flags);
}
void ERR_clear_error(void) {
ERR_STATE *const state = err_get_state();
unsigned i;
if (state == NULL) {
return;
}
for (i = 0; i < ERR_NUM_ERRORS; i++) {
err_clear(&state->errors[i]);
}
free(state->to_free);
state->to_free = NULL;
state->top = state->bottom = 0;
}
void ERR_remove_thread_state(const CRYPTO_THREADID *tid) {
if (tid != NULL) {
assert(0);
return;
}
ERR_clear_error();
}
int ERR_get_next_error_library(void) {
int ret;
CRYPTO_STATIC_MUTEX_lock_write(&global_next_library_mutex);
ret = global_next_library++;
CRYPTO_STATIC_MUTEX_unlock_write(&global_next_library_mutex);
return ret;
}
void ERR_remove_state(unsigned long pid) {
ERR_clear_error();
}
void ERR_clear_system_error(void) {
errno = 0;
}
// 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 (a_key < b_key) {
return -1;
} else if (a_key > b_key) {
return 1;
} else {
return 0;
}
}
// 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 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
"HKDF functions", // ERR_LIB_HKDF
"Trust Token functions", // ERR_LIB_TRUST_TOKEN
"User defined functions", // ERR_LIB_USER
};
static const char *err_lib_error_string(uint32_t packed_error) {
const uint32_t lib = ERR_GET_LIB(packed_error);
if (lib >= ERR_NUM_LIBS) {
return NULL;
}
return kLibraryNames[lib];
}
const char *ERR_lib_error_string(uint32_t packed_error) {
const char *ret = err_lib_error_string(packed_error);
return ret == NULL ? "unknown library" : ret;
}
const char *ERR_func_error_string(uint32_t packed_error) {
return "OPENSSL_internal";
}
static const char *err_reason_error_string(uint32_t packed_error) {
const uint32_t lib = ERR_GET_LIB(packed_error);
const uint32_t reason = ERR_GET_REASON(packed_error);
if (lib == ERR_LIB_SYS) {
if (reason < 127) {
return strerror(reason);
}
return NULL;
}
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, kOpenSSLReasonValues,
kOpenSSLReasonValuesLen, kOpenSSLReasonStringData);
}
const char *ERR_reason_error_string(uint32_t packed_error) {
const char *ret = err_reason_error_string(packed_error);
return ret == NULL ? "unknown error" : ret;
}
char *ERR_error_string(uint32_t packed_error, char *ret) {
static char buf[ERR_ERROR_STRING_BUF_LEN];
if (ret == NULL) {
// TODO(fork): remove this.
ret = buf;
}
#if !defined(NDEBUG)
// This is aimed to help catch callers who don't provide
// |ERR_ERROR_STRING_BUF_LEN| bytes of space.
OPENSSL_memset(ret, 0, ERR_ERROR_STRING_BUF_LEN);
#endif
return ERR_error_string_n(packed_error, ret, ERR_ERROR_STRING_BUF_LEN);
}
char *ERR_error_string_n(uint32_t packed_error, char *buf, size_t len) {
if (len == 0) {
return NULL;
}
unsigned lib = ERR_GET_LIB(packed_error);
unsigned reason = ERR_GET_REASON(packed_error);
const char *lib_str = err_lib_error_string(packed_error);
const char *reason_str = err_reason_error_string(packed_error);
char lib_buf[32], reason_buf[32];
if (lib_str == NULL) {
snprintf(lib_buf, sizeof(lib_buf), "lib(%u)", lib);
lib_str = lib_buf;
}
if (reason_str == NULL) {
snprintf(reason_buf, sizeof(reason_buf), "reason(%u)", reason);
reason_str = reason_buf;
}
int ret = snprintf(buf, len, "error:%08" PRIx32 ":%s:OPENSSL_internal:%s",
packed_error, lib_str, reason_str);
if (ret >= 0 && (size_t)ret >= len) {
// The output was truncated; make sure we always have 5 colon-separated
// fields, i.e. 4 colons.
static const unsigned num_colons = 4;
unsigned i;
char *s = buf;
if (len <= num_colons) {
// In this situation it's not possible to ensure that the correct number
// of colons are included in the output.
return buf;
}
for (i = 0; i < num_colons; i++) {
char *colon = strchr(s, ':');
char *last_pos = &buf[len - 1] - num_colons + i;
if (colon == NULL || colon > last_pos) {
// set colon |i| at last possible position (buf[len-1] is the
// terminating 0). If we're setting this colon, then all whole of the
// rest of the string must be colons in order to have the correct
// number.
OPENSSL_memset(last_pos, ':', num_colons - i);
break;
}
s = colon + 1;
}
}
return buf;
}
void ERR_print_errors_cb(ERR_print_errors_callback_t callback, void *ctx) {
char buf[ERR_ERROR_STRING_BUF_LEN];
char buf2[1024];
const char *file, *data;
int line, flags;
uint32_t packed_error;
// thread_hash is the least-significant bits of the |ERR_STATE| pointer value
// for this thread.
const unsigned long thread_hash = (uintptr_t) err_get_state();
for (;;) {
packed_error = ERR_get_error_line_data(&file, &line, &data, &flags);
if (packed_error == 0) {
break;
}
ERR_error_string_n(packed_error, buf, sizeof(buf));
snprintf(buf2, sizeof(buf2), "%lu:%s:%s:%d:%s\n", thread_hash, buf, file,
line, (flags & ERR_FLAG_STRING) ? data : "");
if (callback(buf2, strlen(buf2), ctx) <= 0) {
break;
}
}
}
static int print_errors_to_file(const char* msg, size_t msg_len, void* ctx) {
assert(msg[msg_len] == '\0');
FILE* fp = ctx;
int res = fputs(msg, fp);
return res < 0 ? 0 : 1;
}
void ERR_print_errors_fp(FILE *file) {
ERR_print_errors_cb(print_errors_to_file, file);
}
// err_set_error_data sets the data on the most recent error.
static void err_set_error_data(char *data) {
ERR_STATE *const state = err_get_state();
struct err_error_st *error;
if (state == NULL || state->top == state->bottom) {
free(data);
return;
}
error = &state->errors[state->top];
free(error->data);
error->data = data;
}
void ERR_put_error(int library, int unused, int reason, const char *file,
unsigned line) {
ERR_STATE *const state = err_get_state();
struct err_error_st *error;
if (state == NULL) {
return;
}
if (library == ERR_LIB_SYS && reason == 0) {
#if defined(OPENSSL_WINDOWS)
reason = GetLastError();
#else
reason = errno;
#endif
}
state->top = (state->top + 1) % ERR_NUM_ERRORS;
if (state->top == state->bottom) {
state->bottom = (state->bottom + 1) % ERR_NUM_ERRORS;
}
error = &state->errors[state->top];
err_clear(error);
error->file = file;
error->line = line;
error->packed = ERR_PACK(library, reason);
}
// ERR_add_error_data_vdata takes a variable number of const char* pointers,
// concatenates them and sets the result as the data on the most recent
// error.
static void err_add_error_vdata(unsigned num, va_list args) {
size_t total_size = 0;
const char *substr;
char *buf;
va_list args_copy;
va_copy(args_copy, args);
for (size_t i = 0; i < num; i++) {
substr = va_arg(args_copy, const char *);
if (substr == NULL) {
continue;
}
size_t substr_len = strlen(substr);
if (SIZE_MAX - total_size < substr_len) {
va_end(args_copy);
return; // Would overflow.
}
total_size += substr_len;
}
va_end(args_copy);
if (total_size == SIZE_MAX) {
return; // Would overflow.
}
total_size += 1; // NUL terminator.
if ((buf = malloc(total_size)) == NULL) {
return;
}
buf[0] = '\0';
for (size_t i = 0; i < num; i++) {
substr = va_arg(args, const char *);
if (substr == NULL) {
continue;
}
if (OPENSSL_strlcat(buf, substr, total_size) >= total_size) {
assert(0); // should not be possible.
}
}
err_set_error_data(buf);
}
void ERR_add_error_data(unsigned count, ...) {
va_list args;
va_start(args, count);
err_add_error_vdata(count, args);
va_end(args);
}
void ERR_add_error_dataf(const char *format, ...) {
char *buf = NULL;
va_list ap;
va_start(ap, format);
if (OPENSSL_vasprintf_internal(&buf, format, ap, /*system_malloc=*/1) == -1) {
va_end(ap);
return;
}
va_end(ap);
err_set_error_data(buf);
}
void ERR_set_error_data(char *data, int flags) {
if (!(flags & ERR_FLAG_STRING)) {
// We do not support non-string error data.
assert(0);
return;
}
// We can not use OPENSSL_strdup because we don't want to call OPENSSL_malloc,
// which can affect the error stack.
char *copy = strdup_libc_malloc(data);
if (copy != NULL) {
err_set_error_data(copy);
}
if (flags & ERR_FLAG_MALLOCED) {
// We can not take ownership of |data| directly because it is allocated with
// |OPENSSL_malloc| and we will free it with system |free| later.
OPENSSL_free(data);
}
}
int ERR_set_mark(void) {
ERR_STATE *const state = err_get_state();
if (state == NULL || state->bottom == state->top) {
return 0;
}
state->errors[state->top].mark = 1;
return 1;
}
int ERR_pop_to_mark(void) {
ERR_STATE *const state = err_get_state();
if (state == NULL) {
return 0;
}
while (state->bottom != state->top) {
struct err_error_st *error = &state->errors[state->top];
if (error->mark) {
error->mark = 0;
return 1;
}
err_clear(error);
if (state->top == 0) {
state->top = ERR_NUM_ERRORS - 1;
} else {
state->top--;
}
}
return 0;
}
void ERR_load_CRYPTO_strings(void) {}
void ERR_load_crypto_strings(void) {}
void ERR_free_strings(void) {}
void ERR_load_BIO_strings(void) {}
void ERR_load_ERR_strings(void) {}
void ERR_load_RAND_strings(void) {}
struct err_save_state_st {
struct err_error_st *errors;
size_t num_errors;
};
void ERR_SAVE_STATE_free(ERR_SAVE_STATE *state) {
if (state == NULL) {
return;
}
for (size_t i = 0; i < state->num_errors; i++) {
err_clear(&state->errors[i]);
}
free(state->errors);
free(state);
}
ERR_SAVE_STATE *ERR_save_state(void) {
ERR_STATE *const state = err_get_state();
if (state == NULL || state->top == state->bottom) {
return NULL;
}
ERR_SAVE_STATE *ret = malloc(sizeof(ERR_SAVE_STATE));
if (ret == NULL) {
return NULL;
}
// Errors are stored in the range (bottom, top].
size_t num_errors = state->top >= state->bottom
? state->top - state->bottom
: ERR_NUM_ERRORS + state->top - state->bottom;
assert(num_errors < ERR_NUM_ERRORS);
ret->errors = malloc(num_errors * sizeof(struct err_error_st));
if (ret->errors == NULL) {
free(ret);
return NULL;
}
OPENSSL_memset(ret->errors, 0, num_errors * sizeof(struct err_error_st));
ret->num_errors = num_errors;
for (size_t i = 0; i < num_errors; i++) {
size_t j = (state->bottom + i + 1) % ERR_NUM_ERRORS;
err_copy(&ret->errors[i], &state->errors[j]);
}
return ret;
}
void ERR_restore_state(const ERR_SAVE_STATE *state) {
if (state == NULL || state->num_errors == 0) {
ERR_clear_error();
return;
}
if (state->num_errors >= ERR_NUM_ERRORS) {
abort();
}
ERR_STATE *const dst = err_get_state();
if (dst == NULL) {
return;
}
for (size_t i = 0; i < state->num_errors; i++) {
err_copy(&dst->errors[i], &state->errors[i]);
}
dst->top = (unsigned)(state->num_errors - 1);
dst->bottom = ERR_NUM_ERRORS - 1;
}

View File

@@ -0,0 +1,250 @@
// Copyright (c) 2015, Google Inc.
// SPDX-License-Identifier: ISC
//go:build ignore
package main
import (
"bufio"
"bytes"
"errors"
"flag"
"fmt"
"io"
"os"
"sort"
"strconv"
"strings"
)
var verbose = flag.Bool("verbose", false, "If true, prints a status message at the end.")
// 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",
"HKDF",
"TRUST_TOKEN",
"USER",
}
// 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(value)
}
}
st.entries = append(st.entries, key|offset)
return nil
}
func (st *stringList) buildList() []uint32 {
sort.Slice(st.entries, func(i, j int) bool { return (st.entries[i] >> 15) < (st.entries[j] >> 15) })
return st.entries
}
type stringWriter interface {
io.Writer
WriteString(string) (int, error)
}
func (st *stringList) WriteTo(out stringWriter, name string) {
list := st.buildList()
if *verbose {
fmt.Fprintf(os.Stderr, "%s: %d bytes of list and %d bytes of string data.\n", name, 4*len(list), len(st.stringData))
}
values := "kOpenSSL" + name + "Values"
out.WriteString("const uint32_t " + values + "[] = {\n")
for _, v := range list {
fmt.Fprintf(out, " 0x%x,\n", v)
}
out.WriteString("};\n\n")
out.WriteString("const size_t " + values + "Len = sizeof(" + values + ") / sizeof(" + values + "[0]);\n\n")
stringData := "kOpenSSL" + name + "StringData"
out.WriteString("const char " + stringData + "[] =\n \"")
for i, c := range st.stringData {
if c == 0 {
out.WriteString("\\0\"\n \"")
continue
}
out.Write(st.stringData[i : i+1])
}
out.WriteString("\";\n\n")
}
type errorData struct {
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) != 3 {
return fmt.Errorf("bad line %d in %s: found %d values but want 3", 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[1]), 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[2])
listKey := libNum<<26 | uint32(key)<<15
err = e.reasons.Add(listKey, value)
if err != nil {
return err
}
}
return scanner.Err()
}
func main() {
flag.Parse()
e := &errorData{
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)
}
sort.Strings(names)
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.
// SPDX-License-Identifier: ISC
/* This file was generated by err_data_generate.go. */
#include <openssl/base.h>
#include <openssl/err.h>
#include <openssl/type_check.h>
`)
for i, name := range libraryNames {
fmt.Fprintf(out, "OPENSSL_STATIC_ASSERT(ERR_LIB_%s == %d, library_value_changed)\n", name, i+1)
}
fmt.Fprintf(out, "OPENSSL_STATIC_ASSERT(ERR_NUM_LIBS == %d, number_of_libraries_changed)\n", len(libraryNames)+1)
out.WriteString("\n")
e.reasons.WriteTo(out, "Reason")
}

View File

@@ -0,0 +1,297 @@
// Copyright (c) 2014, Google Inc.
// SPDX-License-Identifier: ISC
#include <stdio.h>
#include <string.h>
#include <gtest/gtest.h>
#include <openssl/crypto.h>
#include <openssl/err.h>
#include <openssl/mem.h>
#include "./internal.h"
#if defined(OPENSSL_WINDOWS)
OPENSSL_MSVC_PRAGMA(warning(push, 3))
#include <windows.h>
OPENSSL_MSVC_PRAGMA(warning(pop))
#else
#include <errno.h>
#endif
TEST(ErrTest, Overflow) {
for (unsigned i = 0; i < ERR_NUM_ERRORS*2; i++) {
ERR_put_error(1, 0 /* unused */, i+1, "test", 1);
}
for (unsigned i = 0; i < ERR_NUM_ERRORS - 1; i++) {
SCOPED_TRACE(i);
uint32_t err = ERR_get_error();
// Errors are returned in order they were pushed, with the least recent ones
// removed, up to |ERR_NUM_ERRORS - 1| errors. So the errors returned are
// |ERR_NUM_ERRORS + 2| through |ERR_NUM_ERRORS * 2|, inclusive.
EXPECT_NE(0u, err);
EXPECT_EQ(static_cast<int>(i + ERR_NUM_ERRORS + 2), ERR_GET_REASON(err));
}
EXPECT_EQ(0u, ERR_get_error());
}
TEST(ErrTest, PutError) {
ASSERT_EQ(0u, ERR_get_error())
<< "ERR_get_error returned value before an error was added.";
ERR_put_error(1, 0 /* unused */, 2, "test", 4);
ERR_add_error_data(1, "testing");
int peeked_line, line, peeked_flags, flags;
const char *peeked_file, *file, *peeked_data, *data;
uint32_t peeked_packed_error =
ERR_peek_error_line_data(&peeked_file, &peeked_line, &peeked_data,
&peeked_flags);
uint32_t packed_error = ERR_get_error_line_data(&file, &line, &data, &flags);
EXPECT_EQ(peeked_packed_error, packed_error);
EXPECT_EQ(peeked_file, file);
EXPECT_EQ(peeked_data, data);
EXPECT_EQ(peeked_flags, flags);
EXPECT_STREQ("test", file);
EXPECT_EQ(4, line);
EXPECT_EQ(flags, ERR_FLAG_STRING | ERR_FLAG_MALLOCED);
EXPECT_EQ(1, ERR_GET_LIB(packed_error));
EXPECT_EQ(2, ERR_GET_REASON(packed_error));
EXPECT_STREQ("testing", data);
ERR_put_error(1, 0 /* unused */, 2, "test", 4);
ERR_set_error_data(const_cast<char *>("testing"), ERR_FLAG_STRING);
packed_error = ERR_get_error_line_data(&file, &line, &data, &flags);
EXPECT_NE(0u, packed_error);
EXPECT_STREQ("testing", data);
ERR_put_error(1, 0 /* unused */, 2, "test", 4);
bssl::UniquePtr<char> str(OPENSSL_strdup("testing"));
ERR_set_error_data(str.release(), ERR_FLAG_STRING | ERR_FLAG_MALLOCED);
packed_error = ERR_get_error_line_data(&file, &line, &data, &flags);
EXPECT_NE(0u, packed_error);
EXPECT_STREQ("testing", data);
}
TEST(ErrTest, ClearError) {
ASSERT_EQ(0u, ERR_get_error())
<< "ERR_get_error returned value before an error was added.";
ERR_put_error(1, 0 /* unused */, 2, "test", 4);
ERR_clear_error();
// The error queue should be cleared.
EXPECT_EQ(0u, ERR_get_error());
}
TEST(ErrTest, Print) {
ERR_put_error(1, 0 /* unused */, 2, "test", 4);
ERR_add_error_data(1, "testing");
uint32_t packed_error = ERR_get_error();
char buf[256];
for (size_t i = 0; i <= sizeof(buf); i++) {
ERR_error_string_n(packed_error, buf, i);
}
}
TEST(ErrTest, Release) {
ERR_put_error(1, 0 /* unused */, 2, "test", 4);
ERR_remove_thread_state(NULL);
// The error queue should be cleared.
EXPECT_EQ(0u, ERR_get_error());
}
static bool HasSuffix(const char *str, const char *suffix) {
size_t suffix_len = strlen(suffix);
size_t str_len = strlen(str);
if (str_len < suffix_len) {
return false;
}
return strcmp(str + str_len - suffix_len, suffix) == 0;
}
TEST(ErrTest, PutMacro) {
int expected_line = __LINE__ + 1;
OPENSSL_PUT_ERROR(USER, ERR_R_INTERNAL_ERROR);
int line;
const char *file;
uint32_t error = ERR_get_error_line(&file, &line);
EXPECT_PRED2(HasSuffix, file, "err_test.cc");
EXPECT_EQ(expected_line, line);
EXPECT_EQ(ERR_LIB_USER, ERR_GET_LIB(error));
EXPECT_EQ(ERR_R_INTERNAL_ERROR, ERR_GET_REASON(error));
}
TEST(ErrTest, SaveAndRestore) {
// Restoring no state clears the error queue, including error data.
ERR_put_error(1, 0 /* unused */, 1, "test1.c", 1);
ERR_put_error(2, 0 /* unused */, 2, "test2.c", 2);
ERR_add_error_data(1, "data1");
ERR_restore_state(nullptr);
EXPECT_EQ(0u, ERR_get_error());
// Add some entries to the error queue and save it.
ERR_put_error(1, 0 /* unused */, 1, "test1.c", 1);
ERR_add_error_data(1, "data1");
ERR_put_error(2, 0 /* unused */, 2, "test2.c", 2);
ERR_put_error(3, 0 /* unused */, 3, "test3.c", 3);
ERR_add_error_data(1, "data3");
bssl::UniquePtr<ERR_SAVE_STATE> saved(ERR_save_state());
ASSERT_TRUE(saved);
// The existing error queue entries still exist.
int line, flags;
const char *file, *data;
uint32_t packed_error = ERR_get_error_line_data(&file, &line, &data, &flags);
EXPECT_EQ(ERR_GET_LIB(packed_error), 1);
EXPECT_EQ(ERR_GET_REASON(packed_error), 1);
EXPECT_STREQ("test1.c", file);
EXPECT_EQ(line, 1);
EXPECT_STREQ(data, "data1");
EXPECT_EQ(flags, ERR_FLAG_STRING | ERR_FLAG_MALLOCED);
// The state may be restored, both over an empty and non-empty state.
for (unsigned i = 0; i < 2; i++) {
SCOPED_TRACE(i);
ERR_restore_state(saved.get());
packed_error = ERR_get_error_line_data(&file, &line, &data, &flags);
EXPECT_EQ(ERR_GET_LIB(packed_error), 1);
EXPECT_EQ(ERR_GET_REASON(packed_error), 1);
EXPECT_STREQ("test1.c", file);
EXPECT_EQ(line, 1);
EXPECT_STREQ(data, "data1");
EXPECT_EQ(flags, ERR_FLAG_STRING | ERR_FLAG_MALLOCED);
packed_error = ERR_get_error_line_data(&file, &line, &data, &flags);
EXPECT_EQ(ERR_GET_LIB(packed_error), 2);
EXPECT_EQ(ERR_GET_REASON(packed_error), 2);
EXPECT_STREQ("test2.c", file);
EXPECT_EQ(line, 2);
EXPECT_STREQ(data, ""); // No error data is reported as the empty string.
EXPECT_EQ(flags, 0);
packed_error = ERR_get_error_line_data(&file, &line, &data, &flags);
EXPECT_EQ(ERR_GET_LIB(packed_error), 3);
EXPECT_EQ(ERR_GET_REASON(packed_error), 3);
EXPECT_STREQ("test3.c", file);
EXPECT_EQ(line, 3);
EXPECT_STREQ(data, "data3");
EXPECT_EQ(flags, ERR_FLAG_STRING | ERR_FLAG_MALLOCED);
// The error queue is now empty for the next iteration.
EXPECT_EQ(0u, ERR_get_error());
}
// Test a case where the error queue wraps around. The first set of errors
// will all be discarded, but result in wrapping the list around.
ERR_clear_error();
for (unsigned i = 0; i < ERR_NUM_ERRORS / 2; i++) {
ERR_put_error(0, 0 /* unused */, 0, "invalid", 0);
}
for (unsigned i = 1; i < ERR_NUM_ERRORS; i++) {
ERR_put_error(i, 0 /* unused */, i, "test", i);
}
saved.reset(ERR_save_state());
// The state may be restored, both over an empty and non-empty state. Pop one
// error off so the first iteration is tested to not be a no-op.
ERR_get_error();
for (int i = 0; i < 2; i++) {
SCOPED_TRACE(i);
ERR_restore_state(saved.get());
for (int j = 1; j < ERR_NUM_ERRORS; j++) {
SCOPED_TRACE(j);
packed_error = ERR_get_error_line_data(&file, &line, &data, &flags);
EXPECT_EQ(ERR_GET_LIB(packed_error), j);
EXPECT_EQ(ERR_GET_REASON(packed_error), j);
EXPECT_STREQ("test", file);
EXPECT_EQ(line, j);
}
// The error queue is now empty for the next iteration.
EXPECT_EQ(0u, ERR_get_error());
}
}
// Querying the error queue should not affect the OS error.
#if defined(OPENSSL_WINDOWS)
TEST(ErrTest, PreservesLastError) {
SetLastError(ERROR_INVALID_FUNCTION);
ERR_get_error();
EXPECT_EQ(static_cast<DWORD>(ERROR_INVALID_FUNCTION), GetLastError());
}
#else
TEST(ErrTest, PreservesErrno) {
errno = EINVAL;
ERR_get_error();
EXPECT_EQ(EINVAL, errno);
}
#endif
TEST(ErrTest, String) {
char buf[128];
const uint32_t err = ERR_PACK(ERR_LIB_CRYPTO, ERR_R_INTERNAL_ERROR);
EXPECT_STREQ(
"error:0e000044:common libcrypto routines:OPENSSL_internal:internal "
"error",
ERR_error_string_n(err, buf, sizeof(buf)));
// The buffer is exactly the right size.
EXPECT_STREQ(
"error:0e000044:common libcrypto routines:OPENSSL_internal:internal "
"error",
ERR_error_string_n(err, buf, 73));
// If the buffer is too short, the string is truncated.
EXPECT_STREQ(
"error:0e000044:common libcrypto routines:OPENSSL_internal:internal "
"erro",
ERR_error_string_n(err, buf, 72));
EXPECT_STREQ("error:0e000044:common libcrypto routines:OPENSSL_internal:",
ERR_error_string_n(err, buf, 59));
// Truncated log lines always have the right number of colons.
EXPECT_STREQ("error:0e000044:common libcrypto routines:OPENSSL_interna:",
ERR_error_string_n(err, buf, 58));
EXPECT_STREQ("error:0e000044:common libcrypto routines:OPENSSL_intern:",
ERR_error_string_n(err, buf, 57));
EXPECT_STREQ("error:0e000044:common libcryp::",
ERR_error_string_n(err, buf, 32));
EXPECT_STREQ("error:0e0000:::",
ERR_error_string_n(err, buf, 16));
EXPECT_STREQ("err::::",
ERR_error_string_n(err, buf, 8));
EXPECT_STREQ("::::",
ERR_error_string_n(err, buf, 5));
// If the buffer is too short for even four colons, |ERR_error_string_n| does
// not bother trying to preserve the format.
EXPECT_STREQ("err", ERR_error_string_n(err, buf, 4));
EXPECT_STREQ("er", ERR_error_string_n(err, buf, 3));
EXPECT_STREQ("e", ERR_error_string_n(err, buf, 2));
EXPECT_STREQ("", ERR_error_string_n(err, buf, 1));
// A buffer length of zero should not touch the buffer.
ERR_error_string_n(err, nullptr, 0);
}
// Error-printing functions should return something with unknown errors.
TEST(ErrTest, UnknownError) {
uint32_t err = ERR_PACK(0xff, 0xfff);
EXPECT_TRUE(ERR_lib_error_string(err));
EXPECT_TRUE(ERR_reason_error_string(err));
char buf[128];
ERR_error_string_n(err, buf, sizeof(buf));
EXPECT_NE(0u, strlen(buf));
}

View File

@@ -0,0 +1,44 @@
EVP,138,BAD_DECRYPT
EVP,100,BUFFER_TOO_SMALL
EVP,101,COMMAND_NOT_SUPPORTED
EVP,102,DECODE_ERROR
EVP,103,DIFFERENT_KEY_TYPES
EVP,104,DIFFERENT_PARAMETERS
EVP,136,EMPTY_PSK
EVP,105,ENCODE_ERROR
EVP,107,EXPECTING_AN_RSA_KEY
EVP,139,EXPECTING_A_DH_KEY
EVP,108,EXPECTING_A_DSA_KEY
EVP,106,EXPECTING_A_EC_KEY_KEY
EVP,140,EXPECTING_A_PQDSA_KEY
EVP,109,ILLEGAL_OR_UNSUPPORTED_PADDING_MODE
EVP,137,INVALID_BUFFER_SIZE
EVP,110,INVALID_DIGEST_LENGTH
EVP,111,INVALID_DIGEST_TYPE
EVP,112,INVALID_KEYBITS
EVP,113,INVALID_MGF1_MD
EVP,114,INVALID_OPERATION
EVP,115,INVALID_PADDING_MODE
EVP,133,INVALID_PARAMETERS
EVP,134,INVALID_PEER_KEY
EVP,500,INVALID_PSS_MD
EVP,116,INVALID_PSS_SALTLEN
EVP,501,INVALID_PSS_SALT_LEN
EVP,502,INVALID_PSS_TRAILER_FIELD
EVP,131,INVALID_SIGNATURE
EVP,117,KEYS_NOT_SET
EVP,132,MEMORY_LIMIT_EXCEEDED
EVP,118,MISSING_PARAMETERS
EVP,130,NOT_A_PRIVATE_KEY
EVP,135,NOT_XOF_OR_INVALID_LENGTH
EVP,119,NO_DEFAULT_DIGEST
EVP,120,NO_KEY_SET
EVP,121,NO_MDC2_SUPPORT
EVP,122,NO_NID_FOR_CURVE
EVP,123,NO_OPERATION_SET
EVP,124,NO_PARAMETERS_SET
EVP,125,OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE
EVP,126,OPERATON_NOT_INITIALIZED
EVP,127,UNKNOWN_PUBLIC_KEY_TYPE
EVP,128,UNSUPPORTED_ALGORITHM
EVP,129,UNSUPPORTED_PUBLIC_KEY_TYPE

View File

@@ -0,0 +1 @@
HKDF,100,OUTPUT_TOO_LARGE

View File

@@ -0,0 +1,4 @@
HMAC,102,BUFFER_TOO_SMALL
HMAC,100,MISSING_PARAMETERS
HMAC,104,NOT_CALLED_JUST_AFTER_INIT
HMAC,103,SET_PRECOMPUTED_KEY_EXPORT_NOT_CALLED

View File

@@ -0,0 +1,47 @@
// Copyright (c) 2017, Google Inc.
// SPDX-License-Identifier: ISC
#ifndef OPENSSL_HEADER_CRYPTO_ERR_INTERNAL_H
#define OPENSSL_HEADER_CRYPTO_ERR_INTERNAL_H
#include <openssl/err.h>
#if defined(__cplusplus)
extern "C" {
#endif
// Private error queue functions.
// ERR_SAVE_STATE contains a saved representation of the error queue. It is
// slightly more compact than |ERR_STATE| as the error queue will typically not
// contain |ERR_NUM_ERRORS| entries.
typedef struct err_save_state_st ERR_SAVE_STATE;
// ERR_SAVE_STATE_free releases all memory associated with |state|.
OPENSSL_EXPORT void ERR_SAVE_STATE_free(ERR_SAVE_STATE *state);
// ERR_save_state returns a newly-allocated |ERR_SAVE_STATE| structure
// containing the current state of the error queue or NULL on allocation
// error. It should be released with |ERR_SAVE_STATE_free|.
OPENSSL_EXPORT ERR_SAVE_STATE *ERR_save_state(void);
// ERR_restore_state clears the error queue and replaces it with |state|.
OPENSSL_EXPORT void ERR_restore_state(const ERR_SAVE_STATE *state);
#if defined(__cplusplus)
} // extern C
extern "C++" {
BSSL_NAMESPACE_BEGIN
BORINGSSL_MAKE_DELETER(ERR_SAVE_STATE, ERR_SAVE_STATE_free)
BSSL_NAMESPACE_END
} // extern C++
#endif
#endif // OPENSSL_HEADER_CRYPTO_ERR_INTERNAL_H

View File

@@ -0,0 +1,2 @@
OBJ,101,INVALID_OID_STRING
OBJ,100,UNKNOWN_NID

View File

@@ -0,0 +1,27 @@
OCSP,101,CERTIFICATE_VERIFY_ERROR
OCSP,102,DIGEST_ERR
OCSP,122,ERROR_IN_NEXTUPDATE_FIELD
OCSP,123,ERROR_IN_THISUPDATE_FIELD
OCSP,121,ERROR_PARSING_URL
OCSP,103,MISSING_OCSPSIGNING_USAGE
OCSP,124,NEXTUPDATE_BEFORE_THISUPDATE
OCSP,104,NOT_BASIC_RESPONSE
OCSP,105,NO_CERTIFICATES_IN_CHAIN
OCSP,108,NO_RESPONSE_DATA
OCSP,109,NO_REVOKED_TIME
OCSP,130,NO_SIGNER_KEY
OCSP,131,OCSP_REQUEST_DUPLICATE_SIGNATURE
OCSP,110,PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE
OCSP,128,REQUEST_NOT_SIGNED
OCSP,111,RESPONSE_CONTAINS_NO_REVOCATION_DATA
OCSP,112,ROOT_CA_NOT_TRUSTED
OCSP,115,SERVER_RESPONSE_PARSE_ERROR
OCSP,117,SIGNATURE_FAILURE
OCSP,118,SIGNER_CERTIFICATE_NOT_FOUND
OCSP,125,STATUS_EXPIRED
OCSP,126,STATUS_NOT_YET_VALID
OCSP,127,STATUS_TOO_OLD
OCSP,132,UNKNOWN_FIELD_VALUE
OCSP,119,UNKNOWN_MESSAGE_DIGEST
OCSP,120,UNKNOWN_NID
OCSP,129,UNSUPPORTED_REQUESTORNAME_TYPE

View File

@@ -0,0 +1,16 @@
PEM,100,BAD_BASE64_DECODE
PEM,101,BAD_DECRYPT
PEM,102,BAD_END_LINE
PEM,103,BAD_IV_CHARS
PEM,104,BAD_PASSWORD_READ
PEM,105,CIPHER_IS_NULL
PEM,106,ERROR_CONVERTING_PRIVATE_KEY
PEM,107,NOT_DEK_INFO
PEM,108,NOT_ENCRYPTED
PEM,109,NOT_PROC_TYPE
PEM,110,NO_START_LINE
PEM,115,PROBLEMS_GETTING_PASSWORD
PEM,111,READ_KEY
PEM,112,SHORT_HEADER
PEM,113,UNSUPPORTED_CIPHER
PEM,114,UNSUPPORTED_ENCRYPTION

View File

@@ -0,0 +1,35 @@
PKCS7,100,BAD_PKCS7_VERSION
PKCS7,113,CERTIFICATE_VERIFY_ERROR
PKCS7,134,CERT_MUST_BE_RSA
PKCS7,123,CIPHER_HAS_NO_OBJECT_IDENTIFIER
PKCS7,106,CIPHER_NOT_INITIALIZED
PKCS7,111,CONTENT_AND_DATA_PRESENT
PKCS7,121,DECRYPT_ERROR
PKCS7,129,DIGEST_FAILURE
PKCS7,119,ERROR_ADDING_RECIPIENT
PKCS7,118,ERROR_SETTING_CIPHER
PKCS7,104,INVALID_NULL_POINTER
PKCS7,126,INVALID_SIGNED_DATA_TYPE
PKCS7,101,NOT_PKCS7_SIGNED_DATA
PKCS7,102,NO_CERTIFICATES_INCLUDED
PKCS7,105,NO_CONTENT
PKCS7,103,NO_CRLS_INCLUDED
PKCS7,133,NO_DEFAULT_DIGEST
PKCS7,128,NO_RECIPIENT_MATCHES_CERTIFICATE
PKCS7,112,NO_SIGNATURES_ON_DATA
PKCS7,116,NO_SIGNERS
PKCS7,132,PKCS7_ADD_SIGNATURE_ERROR
PKCS7,131,PKCS7_ADD_SIGNER_ERROR
PKCS7,122,PKCS7_DATASIGN
PKCS7,120,PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE
PKCS7,115,SIGNATURE_FAILURE
PKCS7,117,SIGNER_CERTIFICATE_NOT_FOUND
PKCS7,124,SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE
PKCS7,114,SMIME_TEXT_ERROR
PKCS7,109,UNABLE_TO_FIND_MEM_BIO
PKCS7,108,UNABLE_TO_FIND_MESSAGE_DIGEST
PKCS7,125,UNKNOWN_DIGEST_TYPE
PKCS7,127,UNSUPPORTED_CIPHER_TYPE
PKCS7,107,UNSUPPORTED_CONTENT_TYPE
PKCS7,110,WRONG_CONTENT_TYPE
PKCS7,130,WRONG_PKCS7_TYPE

View File

@@ -0,0 +1,34 @@
PKCS8,133,AMBIGUOUS_FRIENDLY_NAME
PKCS8,129,BAD_ITERATION_COUNT
PKCS8,100,BAD_PKCS12_DATA
PKCS8,101,BAD_PKCS12_VERSION
PKCS8,102,CIPHER_HAS_NO_OBJECT_IDENTIFIER
PKCS8,103,CRYPT_ERROR
PKCS8,104,DECODE_ERROR
PKCS8,105,ENCODE_ERROR
PKCS8,106,ENCRYPT_ERROR
PKCS8,107,ERROR_SETTING_CIPHER_PARAMS
PKCS8,108,INCORRECT_PASSWORD
PKCS8,131,INVALID_CHARACTERS
PKCS8,109,KEYGEN_FAILURE
PKCS8,110,KEY_GEN_ERROR
PKCS8,111,METHOD_NOT_SUPPORTED
PKCS8,112,MISSING_MAC
PKCS8,113,MULTIPLE_PRIVATE_KEYS_IN_PKCS12
PKCS8,114,PKCS12_PUBLIC_KEY_INTEGRITY_NOT_SUPPORTED
PKCS8,115,PKCS12_TOO_DEEPLY_NESTED
PKCS8,116,PRIVATE_KEY_DECODE_ERROR
PKCS8,117,PRIVATE_KEY_ENCODE_ERROR
PKCS8,118,TOO_LONG
PKCS8,119,UNKNOWN_ALGORITHM
PKCS8,120,UNKNOWN_CIPHER
PKCS8,121,UNKNOWN_CIPHER_ALGORITHM
PKCS8,122,UNKNOWN_DIGEST
PKCS8,123,UNKNOWN_HASH
PKCS8,127,UNSUPPORTED_CIPHER
PKCS8,125,UNSUPPORTED_KEYLENGTH
PKCS8,128,UNSUPPORTED_KEY_DERIVATION_FUNCTION
PKCS8,132,UNSUPPORTED_OPTIONS
PKCS8,130,UNSUPPORTED_PRF
PKCS8,124,UNSUPPORTED_PRIVATE_KEY_ALGORITHM
PKCS8,126,UNSUPPORTED_SALT_TYPE

View File

@@ -0,0 +1,50 @@
RSA,100,BAD_ENCODING
RSA,101,BAD_E_VALUE
RSA,102,BAD_FIXED_HEADER_DECRYPT
RSA,103,BAD_PAD_BYTE_COUNT
RSA,104,BAD_RSA_PARAMETERS
RSA,105,BAD_SIGNATURE
RSA,106,BAD_VERSION
RSA,107,BLOCK_TYPE_IS_NOT_01
RSA,148,BLOCK_TYPE_IS_NOT_02
RSA,108,BN_NOT_INITIALIZED
RSA,109,CANNOT_RECOVER_MULTI_PRIME_KEY
RSA,110,CRT_PARAMS_ALREADY_GIVEN
RSA,111,CRT_VALUES_INCORRECT
RSA,112,DATA_LEN_NOT_EQUAL_TO_MOD_LEN
RSA,113,DATA_TOO_LARGE
RSA,114,DATA_TOO_LARGE_FOR_KEY_SIZE
RSA,115,DATA_TOO_LARGE_FOR_MODULUS
RSA,116,DATA_TOO_SMALL
RSA,117,DATA_TOO_SMALL_FOR_KEY_SIZE
RSA,118,DIGEST_TOO_BIG_FOR_RSA_KEY
RSA,119,D_E_NOT_CONGRUENT_TO_1
RSA,147,D_OUT_OF_RANGE
RSA,120,EMPTY_PUBLIC_KEY
RSA,121,ENCODE_ERROR
RSA,122,FIRST_OCTET_INVALID
RSA,123,INCONSISTENT_SET_OF_CRT_VALUES
RSA,124,INTERNAL_ERROR
RSA,125,INVALID_MESSAGE_LENGTH
RSA,126,KEY_SIZE_TOO_SMALL
RSA,127,LAST_OCTET_INVALID
RSA,248,MISMATCHED_SIGNATURE
RSA,128,MODULUS_TOO_LARGE
RSA,129,MUST_HAVE_AT_LEAST_TWO_PRIMES
RSA,130,NO_PUBLIC_EXPONENT
RSA,131,NULL_BEFORE_BLOCK_MISSING
RSA,132,N_NOT_EQUAL_P_Q
RSA,133,OAEP_DECODING_ERROR
RSA,134,ONLY_ONE_OF_P_Q_GIVEN
RSA,135,OUTPUT_BUFFER_TOO_SMALL
RSA,136,PADDING_CHECK_FAILED
RSA,137,PKCS_DECODING_ERROR
RSA,146,PUBLIC_KEY_VALIDATION_FAILED
RSA,138,SLEN_CHECK_FAILED
RSA,139,SLEN_RECOVERY_FAILED
RSA,140,TOO_LONG
RSA,141,TOO_MANY_ITERATIONS
RSA,142,UNKNOWN_ALGORITHM_TYPE
RSA,143,UNKNOWN_PADDING_TYPE
RSA,144,VALUE_MISSING
RSA,145,WRONG_SIGNATURE_LENGTH

View File

@@ -0,0 +1,265 @@
SSL,277,ALPN_MISMATCH_ON_EARLY_DATA
SSL,309,ALPS_MISMATCH_ON_EARLY_DATA
SSL,281,APPLICATION_DATA_INSTEAD_OF_HANDSHAKE
SSL,291,APPLICATION_DATA_ON_SHUTDOWN
SSL,100,APP_DATA_IN_HANDSHAKE
SSL,101,ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT
SSL,102,BAD_ALERT
SSL,103,BAD_CHANGE_CIPHER_SPEC
SSL,104,BAD_DATA_RETURNED_BY_CALLBACK
SSL,105,BAD_DH_P_LENGTH
SSL,106,BAD_DIGEST_LENGTH
SSL,107,BAD_ECC_CERT
SSL,108,BAD_ECPOINT
SSL,109,BAD_HANDSHAKE_RECORD
SSL,110,BAD_HELLO_REQUEST
SSL,507,BAD_HYBRID_KEYSHARE
SSL,508,BAD_KEM_CIPHERTEXT
SSL,111,BAD_LENGTH
SSL,112,BAD_PACKET_LENGTH
SSL,113,BAD_RSA_ENCRYPT
SSL,114,BAD_SIGNATURE
SSL,115,BAD_SRTP_MKI_VALUE
SSL,116,BAD_SRTP_PROTECTION_PROFILE_LIST
SSL,117,BAD_SSL_FILETYPE
SSL,118,BAD_WRITE_RETRY
SSL,119,BIO_NOT_SET
SSL,261,BLOCK_CIPHER_PAD_IS_WRONG
SSL,120,BN_LIB
SSL,121,BUFFER_TOO_SMALL
SSL,275,CANNOT_HAVE_BOTH_PRIVKEY_AND_METHOD
SSL,272,CANNOT_PARSE_LEAF_CERT
SSL,122,CA_DN_LENGTH_MISMATCH
SSL,123,CA_DN_TOO_LONG
SSL,124,CCS_RECEIVED_EARLY
SSL,274,CERTIFICATE_AND_PRIVATE_KEY_MISMATCH
SSL,125,CERTIFICATE_VERIFY_FAILED
SSL,126,CERT_CB_ERROR
SSL,292,CERT_DECOMPRESSION_FAILED
SSL,127,CERT_LENGTH_MISMATCH
SSL,128,CHANNEL_ID_NOT_P256
SSL,129,CHANNEL_ID_SIGNATURE_INVALID
SSL,304,CIPHER_MISMATCH_ON_EARLY_DATA
SSL,130,CIPHER_OR_HASH_UNAVAILABLE
SSL,131,CLIENTHELLO_PARSE_FAILED
SSL,132,CLIENTHELLO_TLSEXT
SSL,133,CONNECTION_REJECTED
SSL,134,CONNECTION_TYPE_NOT_SET
SSL,316,COULD_NOT_PARSE_HINTS
SSL,135,CUSTOM_EXTENSION_ERROR
SSL,136,DATA_LENGTH_TOO_LONG
SSL,137,DECODE_ERROR
SSL,138,DECRYPTION_FAILED
SSL,139,DECRYPTION_FAILED_OR_BAD_RECORD_MAC
SSL,140,DH_PUBLIC_VALUE_LENGTH_IS_WRONG
SSL,141,DH_P_TOO_LONG
SSL,142,DIGEST_CHECK_FAILED
SSL,254,DOWNGRADE_DETECTED
SSL,143,DTLS_MESSAGE_TOO_BIG
SSL,257,DUPLICATE_EXTENSION
SSL,264,DUPLICATE_KEY_SHARE
SSL,296,DUPLICATE_SIGNATURE_ALGORITHM
SSL,283,EARLY_DATA_NOT_IN_USE
SSL,144,ECC_CERT_NOT_FOR_SIGNING
SSL,319,ECH_REJECTED
SSL,310,ECH_SERVER_CONFIG_AND_PRIVATE_KEY_MISMATCH
SSL,311,ECH_SERVER_CONFIG_UNSUPPORTED_EXTENSION
SSL,313,ECH_SERVER_WOULD_HAVE_NO_RETRY_CONFIGS
SSL,282,EMPTY_HELLO_RETRY_REQUEST
SSL,145,EMS_STATE_INCONSISTENT
SSL,146,ENCRYPTED_LENGTH_TOO_LONG
SSL,147,ERROR_ADDING_EXTENSION
SSL,148,ERROR_IN_RECEIVED_CIPHER_LIST
SSL,149,ERROR_PARSING_EXTENSION
SSL,150,EXCESSIVE_MESSAGE_SIZE
SSL,255,EXCESS_HANDSHAKE_DATA
SSL,151,EXTRA_DATA_IN_MESSAGE
SSL,152,FRAGMENT_MISMATCH
SSL,153,GOT_NEXT_PROTO_WITHOUT_EXTENSION
SSL,154,HANDSHAKE_FAILURE_ON_CLIENT_HELLO
SSL,284,HANDSHAKE_NOT_COMPLETE
SSL,155,HTTPS_PROXY_REQUEST
SSL,156,HTTP_REQUEST
SSL,157,INAPPROPRIATE_FALLBACK
SSL,303,INCONSISTENT_CLIENT_HELLO
SSL,321,INCONSISTENT_ECH_NEGOTIATION
SSL,259,INVALID_ALPN_PROTOCOL
SSL,315,INVALID_ALPN_PROTOCOL_LIST
SSL,322,INVALID_ALPS_CODEPOINT
SSL,314,INVALID_CLIENT_HELLO_INNER
SSL,158,INVALID_COMMAND
SSL,256,INVALID_COMPRESSION_LIST
SSL,301,INVALID_DELEGATED_CREDENTIAL
SSL,318,INVALID_ECH_CONFIG_LIST
SSL,317,INVALID_ECH_PUBLIC_NAME
SSL,159,INVALID_MESSAGE
SSL,320,INVALID_OUTER_EXTENSION
SSL,251,INVALID_OUTER_RECORD_TYPE
SSL,269,INVALID_SCT_LIST
SSL,295,INVALID_SIGNATURE_ALGORITHM
SSL,160,INVALID_SSL_SESSION
SSL,161,INVALID_TICKET_KEYS_LENGTH
SSL,302,KEY_USAGE_BIT_INCORRECT
SSL,162,LENGTH_MISMATCH
SSL,164,MISSING_EXTENSION
SSL,258,MISSING_KEY_SHARE
SSL,165,MISSING_RSA_CERTIFICATE
SSL,166,MISSING_TMP_DH_KEY
SSL,167,MISSING_TMP_ECDH_KEY
SSL,168,MIXED_SPECIAL_OPERATOR_WITH_GROUPS
SSL,169,MTU_TOO_SMALL
SSL,308,NEGOTIATED_ALPS_WITHOUT_ALPN
SSL,170,NEGOTIATED_BOTH_NPN_AND_ALPN
SSL,285,NEGOTIATED_TB_WITHOUT_EMS_OR_RI
SSL,171,NESTED_GROUP
SSL,323,NOT_REPLACING_CERTIFICATE
SSL,307,NO_APPLICATION_PROTOCOL
SSL,172,NO_CERTIFICATES_RETURNED
SSL,173,NO_CERTIFICATE_ASSIGNED
SSL,174,NO_CERTIFICATE_SET
SSL,175,NO_CIPHERS_AVAILABLE
SSL,176,NO_CIPHERS_PASSED
SSL,262,NO_CIPHERS_SPECIFIED
SSL,177,NO_CIPHER_MATCH
SSL,253,NO_COMMON_SIGNATURE_ALGORITHMS
SSL,178,NO_COMPRESSION_SPECIFIED
SSL,265,NO_GROUPS_SPECIFIED
SSL,179,NO_METHOD_SPECIFIED
SSL,181,NO_PRIVATE_KEY_ASSIGNED
SSL,182,NO_RENEGOTIATION
SSL,183,NO_REQUIRED_DIGEST
SSL,184,NO_SHARED_CIPHER
SSL,266,NO_SHARED_GROUP
SSL,280,NO_SUPPORTED_VERSIONS_ENABLED
SSL,185,NULL_SSL_CTX
SSL,186,NULL_SSL_METHOD_PASSED
SSL,289,OCSP_CB_ERROR
SSL,187,OLD_SESSION_CIPHER_NOT_RETURNED
SSL,268,OLD_SESSION_PRF_HASH_MISMATCH
SSL,188,OLD_SESSION_VERSION_NOT_RETURNED
SSL,189,OUTPUT_ALIASES_INPUT
SSL,190,PARSE_TLSEXT
SSL,191,PATH_TOO_LONG
SSL,192,PEER_DID_NOT_RETURN_A_CERTIFICATE
SSL,193,PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE
SSL,267,PRE_SHARED_KEY_MUST_BE_LAST
SSL,287,PRIVATE_KEY_OPERATION_FAILED
SSL,194,PROTOCOL_IS_SHUTDOWN
SSL,271,PSK_IDENTITY_BINDER_COUNT_MISMATCH
SSL,195,PSK_IDENTITY_NOT_FOUND
SSL,196,PSK_NO_CLIENT_CB
SSL,197,PSK_NO_SERVER_CB
SSL,298,QUIC_INTERNAL_ERROR
SSL,305,QUIC_TRANSPORT_PARAMETERS_MISCONFIGURED
SSL,198,READ_TIMEOUT_EXPIRED
SSL,199,RECORD_LENGTH_MISMATCH
SSL,200,RECORD_TOO_LARGE
SSL,263,RENEGOTIATION_EMS_MISMATCH
SSL,201,RENEGOTIATION_ENCODING_ERR
SSL,202,RENEGOTIATION_MISMATCH
SSL,203,REQUIRED_CIPHER_MISSING
SSL,204,RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION
SSL,205,RESUMED_NON_EMS_SESSION_WITH_EMS_EXTENSION
SSL,206,SCSV_RECEIVED_WHEN_RENEGOTIATING
SSL,288,SECOND_SERVERHELLO_VERSION_MISMATCH
SSL,1122,SERIALIZATION_INVALID_SERDE_VERSION
SSL,501,SERIALIZATION_INVALID_SSL
SSL,503,SERIALIZATION_INVALID_SSL3_STATE
SSL,506,SERIALIZATION_INVALID_SSL_AEAD_CONTEXT
SSL,505,SERIALIZATION_INVALID_SSL_BUFFER
SSL,502,SERIALIZATION_INVALID_SSL_CONFIG
SSL,500,SERIALIZATION_UNSUPPORTED
SSL,207,SERVERHELLO_TLSEXT
SSL,273,SERVER_CERT_CHANGED
SSL,286,SERVER_ECHOED_INVALID_SESSION_ID
SSL,208,SESSION_ID_CONTEXT_UNINITIALIZED
SSL,209,SESSION_MAY_NOT_BE_CREATED
SSL,250,SHUTDOWN_WHILE_IN_INIT
SSL,210,SIGNATURE_ALGORITHMS_EXTENSION_SENT_BY_SERVER
SSL,211,SRTP_COULD_NOT_ALLOCATE_PROFILES
SSL,212,SRTP_UNKNOWN_PROTECTION_PROFILE
SSL,213,SSL3_EXT_INVALID_SERVERNAME
SSL,1042,SSLV3_ALERT_BAD_CERTIFICATE
SSL,1020,SSLV3_ALERT_BAD_RECORD_MAC
SSL,1045,SSLV3_ALERT_CERTIFICATE_EXPIRED
SSL,1044,SSLV3_ALERT_CERTIFICATE_REVOKED
SSL,1046,SSLV3_ALERT_CERTIFICATE_UNKNOWN
SSL,1000,SSLV3_ALERT_CLOSE_NOTIFY
SSL,1030,SSLV3_ALERT_DECOMPRESSION_FAILURE
SSL,1040,SSLV3_ALERT_HANDSHAKE_FAILURE
SSL,1047,SSLV3_ALERT_ILLEGAL_PARAMETER
SSL,1041,SSLV3_ALERT_NO_CERTIFICATE
SSL,1010,SSLV3_ALERT_UNEXPECTED_MESSAGE
SSL,1043,SSLV3_ALERT_UNSUPPORTED_CERTIFICATE
SSL,214,SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION
SSL,215,SSL_HANDSHAKE_FAILURE
SSL,216,SSL_SESSION_ID_CONTEXT_TOO_LONG
SSL,290,SSL_SESSION_ID_TOO_LONG
SSL,276,TICKET_ENCRYPTION_FAILED
SSL,297,TLS13_DOWNGRADE
SSL,1049,TLSV1_ALERT_ACCESS_DENIED
SSL,1114,TLSV1_ALERT_BAD_CERTIFICATE_HASH_VALUE
SSL,1113,TLSV1_ALERT_BAD_CERTIFICATE_STATUS_RESPONSE
SSL,1116,TLSV1_ALERT_CERTIFICATE_REQUIRED
SSL,1111,TLSV1_ALERT_CERTIFICATE_UNOBTAINABLE
SSL,1050,TLSV1_ALERT_DECODE_ERROR
SSL,1021,TLSV1_ALERT_DECRYPTION_FAILED
SSL,1051,TLSV1_ALERT_DECRYPT_ERROR
SSL,1121,TLSV1_ALERT_ECH_REQUIRED
SSL,1060,TLSV1_ALERT_EXPORT_RESTRICTION
SSL,1086,TLSV1_ALERT_INAPPROPRIATE_FALLBACK
SSL,1071,TLSV1_ALERT_INSUFFICIENT_SECURITY
SSL,1080,TLSV1_ALERT_INTERNAL_ERROR
SSL,1120,TLSV1_ALERT_NO_APPLICATION_PROTOCOL
SSL,1100,TLSV1_ALERT_NO_RENEGOTIATION
SSL,1070,TLSV1_ALERT_PROTOCOL_VERSION
SSL,1022,TLSV1_ALERT_RECORD_OVERFLOW
SSL,1048,TLSV1_ALERT_UNKNOWN_CA
SSL,1115,TLSV1_ALERT_UNKNOWN_PSK_IDENTITY
SSL,1112,TLSV1_ALERT_UNRECOGNIZED_NAME
SSL,1110,TLSV1_ALERT_UNSUPPORTED_EXTENSION
SSL,1090,TLSV1_ALERT_USER_CANCELLED
SSL,217,TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST
SSL,218,TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG
SSL,219,TOO_MANY_EMPTY_FRAGMENTS
SSL,260,TOO_MANY_KEY_UPDATES
SSL,220,TOO_MANY_WARNING_ALERTS
SSL,300,TOO_MUCH_READ_EARLY_DATA
SSL,270,TOO_MUCH_SKIPPED_EARLY_DATA
SSL,221,UNABLE_TO_FIND_ECDH_PARAMETERS
SSL,293,UNCOMPRESSED_CERT_TOO_LARGE
SSL,306,UNEXPECTED_COMPATIBILITY_MODE
SSL,222,UNEXPECTED_EXTENSION
SSL,279,UNEXPECTED_EXTENSION_ON_EARLY_DATA
SSL,223,UNEXPECTED_MESSAGE
SSL,224,UNEXPECTED_OPERATOR_IN_GROUP
SSL,225,UNEXPECTED_RECORD
SSL,226,UNINITIALIZED
SSL,227,UNKNOWN_ALERT_TYPE
SSL,228,UNKNOWN_CERTIFICATE_TYPE
SSL,294,UNKNOWN_CERT_COMPRESSION_ALG
SSL,229,UNKNOWN_CIPHER_RETURNED
SSL,230,UNKNOWN_CIPHER_TYPE
SSL,231,UNKNOWN_DIGEST
SSL,232,UNKNOWN_KEY_EXCHANGE_TYPE
SSL,233,UNKNOWN_PROTOCOL
SSL,234,UNKNOWN_SSL_VERSION
SSL,235,UNKNOWN_STATE
SSL,236,UNSAFE_LEGACY_RENEGOTIATION_DISABLED
SSL,237,UNSUPPORTED_CIPHER
SSL,238,UNSUPPORTED_COMPRESSION_ALGORITHM
SSL,312,UNSUPPORTED_ECH_SERVER_CONFIG
SSL,239,UNSUPPORTED_ELLIPTIC_CURVE
SSL,240,UNSUPPORTED_PROTOCOL
SSL,252,UNSUPPORTED_PROTOCOL_FOR_CUSTOM_KEY
SSL,241,WRONG_CERTIFICATE_TYPE
SSL,242,WRONG_CIPHER_RETURNED
SSL,243,WRONG_CURVE
SSL,299,WRONG_ENCRYPTION_LEVEL_RECEIVED
SSL,244,WRONG_MESSAGE_TYPE
SSL,245,WRONG_SIGNATURE_TYPE
SSL,246,WRONG_SSL_VERSION
SSL,247,WRONG_VERSION_NUMBER
SSL,278,WRONG_VERSION_ON_EARLY_DATA
SSL,248,X509_LIB
SSL,249,X509_VERIFICATION_SETUP_PROBLEMS

View File

@@ -0,0 +1,15 @@
TRUST_TOKEN,111,BAD_VALIDITY_CHECK
TRUST_TOKEN,101,BUFFER_TOO_SMALL
TRUST_TOKEN,103,DECODE_ERROR
TRUST_TOKEN,105,DECODE_FAILURE
TRUST_TOKEN,109,INVALID_KEY_ID
TRUST_TOKEN,106,INVALID_METADATA
TRUST_TOKEN,113,INVALID_METADATA_KEY
TRUST_TOKEN,114,INVALID_PROOF
TRUST_TOKEN,110,INVALID_TOKEN
TRUST_TOKEN,100,KEYGEN_FAILURE
TRUST_TOKEN,108,NO_KEYS_CONFIGURED
TRUST_TOKEN,112,NO_SRR_KEY_CONFIGURED
TRUST_TOKEN,102,OVER_BATCHSIZE
TRUST_TOKEN,104,SRR_SIGNATURE_ERROR
TRUST_TOKEN,107,TOO_MANY_KEYS

View File

@@ -0,0 +1,46 @@
X509,100,AKID_MISMATCH
X509,101,BAD_PKCS7_VERSION
X509,102,BAD_X509_FILETYPE
X509,103,BASE64_DECODE_ERROR
X509,104,CANT_CHECK_DH_KEY
X509,105,CERT_ALREADY_IN_HASH_TABLE
X509,106,CRL_ALREADY_DELTA
X509,107,CRL_VERIFY_FAILURE
X509,138,DELTA_CRL_WITHOUT_CRL_NUMBER
X509,108,IDP_MISMATCH
X509,109,INVALID_BIT_STRING_BITS_LEFT
X509,110,INVALID_DIRECTORY
X509,139,INVALID_FIELD_FOR_VERSION
X509,111,INVALID_FIELD_NAME
X509,136,INVALID_PARAMETER
X509,144,INVALID_POLICY_EXTENSION
X509,112,INVALID_PSS_PARAMETERS
X509,113,INVALID_TRUST
X509,140,INVALID_VERSION
X509,114,ISSUER_MISMATCH
X509,115,KEY_TYPE_MISMATCH
X509,116,KEY_VALUES_MISMATCH
X509,117,LOADING_CERT_DIR
X509,118,LOADING_DEFAULTS
X509,135,NAME_TOO_LONG
X509,119,NEWER_CRL_NOT_NEWER
X509,120,NOT_PKCS7_SIGNED_DATA
X509,121,NO_CERTIFICATES_INCLUDED
X509,141,NO_CERTIFICATE_FOUND
X509,142,NO_CERTIFICATE_OR_CRL_FOUND
X509,122,NO_CERT_SET_FOR_US_TO_VERIFY
X509,123,NO_CRLS_INCLUDED
X509,143,NO_CRL_FOUND
X509,124,NO_CRL_NUMBER
X509,125,PUBLIC_KEY_DECODE_ERROR
X509,126,PUBLIC_KEY_ENCODE_ERROR
X509,127,SHOULD_RETRY
X509,137,SIGNATURE_ALGORITHM_MISMATCH
X509,128,UNKNOWN_KEY_TYPE
X509,129,UNKNOWN_NID
X509,130,UNKNOWN_PURPOSE_ID
X509,145,UNKNOWN_SIGID_ALGS
X509,131,UNKNOWN_TRUST_ID
X509,132,UNSUPPORTED_ALGORITHM
X509,133,WRONG_LOOKUP_TYPE
X509,134,WRONG_TYPE

View File

@@ -0,0 +1,65 @@
X509V3,100,BAD_IP_ADDRESS
X509V3,101,BAD_OBJECT
X509V3,102,BN_DEC2BN_ERROR
X509V3,103,BN_TO_ASN1_INTEGER_ERROR
X509V3,104,CANNOT_FIND_FREE_FUNCTION
X509V3,105,DIRNAME_ERROR
X509V3,106,DISTPOINT_ALREADY_SET
X509V3,107,DUPLICATE_ZONE_ID
X509V3,108,ERROR_CONVERTING_ZONE
X509V3,109,ERROR_CREATING_EXTENSION
X509V3,110,ERROR_IN_EXTENSION
X509V3,111,EXPECTED_A_SECTION_NAME
X509V3,112,EXTENSION_EXISTS
X509V3,113,EXTENSION_NAME_ERROR
X509V3,114,EXTENSION_NOT_FOUND
X509V3,115,EXTENSION_SETTING_NOT_SUPPORTED
X509V3,116,EXTENSION_VALUE_ERROR
X509V3,117,ILLEGAL_EMPTY_EXTENSION
X509V3,118,ILLEGAL_HEX_DIGIT
X509V3,119,INCORRECT_POLICY_SYNTAX_TAG
X509V3,120,INVALID_BOOLEAN_STRING
X509V3,121,INVALID_EXTENSION_STRING
X509V3,122,INVALID_MULTIPLE_RDNS
X509V3,123,INVALID_NAME
X509V3,124,INVALID_NULL_ARGUMENT
X509V3,125,INVALID_NULL_NAME
X509V3,126,INVALID_NULL_VALUE
X509V3,127,INVALID_NUMBER
X509V3,128,INVALID_NUMBERS
X509V3,129,INVALID_OBJECT_IDENTIFIER
X509V3,130,INVALID_OPTION
X509V3,131,INVALID_POLICY_IDENTIFIER
X509V3,132,INVALID_PROXY_POLICY_SETTING
X509V3,133,INVALID_PURPOSE
X509V3,134,INVALID_SECTION
X509V3,135,INVALID_SYNTAX
X509V3,163,INVALID_VALUE
X509V3,136,ISSUER_DECODE_ERROR
X509V3,137,MISSING_VALUE
X509V3,138,NEED_ORGANIZATION_AND_NUMBERS
X509V3,139,NO_CONFIG_DATABASE
X509V3,140,NO_ISSUER_CERTIFICATE
X509V3,141,NO_ISSUER_DETAILS
X509V3,142,NO_POLICY_IDENTIFIER
X509V3,143,NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED
X509V3,144,NO_PUBLIC_KEY
X509V3,145,NO_SUBJECT_DETAILS
X509V3,146,ODD_NUMBER_OF_DIGITS
X509V3,147,OPERATION_NOT_DEFINED
X509V3,148,OTHERNAME_ERROR
X509V3,149,POLICY_LANGUAGE_ALREADY_DEFINED
X509V3,150,POLICY_PATH_LENGTH
X509V3,151,POLICY_PATH_LENGTH_ALREADY_DEFINED
X509V3,152,POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY
X509V3,153,SECTION_NOT_FOUND
X509V3,164,TRAILING_DATA_IN_EXTENSION
X509V3,154,UNABLE_TO_GET_ISSUER_DETAILS
X509V3,155,UNABLE_TO_GET_ISSUER_KEYID
X509V3,156,UNKNOWN_BIT_STRING_ARGUMENT
X509V3,157,UNKNOWN_EXTENSION
X509V3,158,UNKNOWN_EXTENSION_NAME
X509V3,159,UNKNOWN_OPTION
X509V3,160,UNSUPPORTED_OPTION
X509V3,161,UNSUPPORTED_TYPE
X509V3,162,USER_TOO_LONG