From 3785acea299247e9fbab5c08d9808925b39921cb Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 16 Jun 2019 15:20:04 -0700 Subject: [PATCH] Update to OpenSSL 1.1.1c in preparation for Qt 5.12.4/5.13 --- libs/windows/include/openssl/asn1.h | 242 +--- libs/windows/include/openssl/asn1err.h | 252 ++++ libs/windows/include/openssl/asn1t.h | 32 +- libs/windows/include/openssl/async.h | 26 +- libs/windows/include/openssl/asyncerr.h | 38 + libs/windows/include/openssl/bio.h | 196 +-- libs/windows/include/openssl/bioerr.h | 120 ++ libs/windows/include/openssl/bn.h | 97 +- libs/windows/include/openssl/bnerr.h | 96 ++ libs/windows/include/openssl/buffer.h | 19 +- libs/windows/include/openssl/buffererr.h | 30 + libs/windows/include/openssl/cms.h | 182 +-- libs/windows/include/openssl/cmserr.h | 196 +++ libs/windows/include/openssl/comp.h | 23 +- libs/windows/include/openssl/comperr.h | 40 + libs/windows/include/openssl/conf.h | 56 +- libs/windows/include/openssl/conferr.h | 72 + libs/windows/include/openssl/crypto.h | 74 +- libs/windows/include/openssl/cryptoerr.h | 56 + libs/windows/include/openssl/ct.h | 61 +- libs/windows/include/openssl/cterr.h | 76 + libs/windows/include/openssl/dh.h | 83 +- libs/windows/include/openssl/dherr.h | 84 ++ libs/windows/include/openssl/dsa.h | 64 +- libs/windows/include/openssl/dsaerr.h | 67 + libs/windows/include/openssl/dtls1.h | 13 +- libs/windows/include/openssl/e_os2.h | 39 +- libs/windows/include/openssl/ec.h | 477 +++---- libs/windows/include/openssl/ecerr.h | 271 ++++ libs/windows/include/openssl/engine.h | 99 +- libs/windows/include/openssl/engineerr.h | 107 ++ libs/windows/include/openssl/err.h | 24 +- libs/windows/include/openssl/evp.h | 374 ++--- libs/windows/include/openssl/evperr.h | 194 +++ libs/windows/include/openssl/hmac.h | 6 +- libs/windows/include/openssl/kdf.h | 80 +- libs/windows/include/openssl/kdferr.h | 51 + libs/windows/include/openssl/lhash.h | 55 +- libs/windows/include/openssl/modes.h | 17 +- libs/windows/include/openssl/obj_mac.h | 639 ++++++++- libs/windows/include/openssl/objects.h | 928 +------------ libs/windows/include/openssl/objectserr.h | 38 + libs/windows/include/openssl/ocsp.h | 77 +- libs/windows/include/openssl/ocsperr.h | 74 + libs/windows/include/openssl/opensslconf.h | 48 +- libs/windows/include/openssl/opensslv.h | 8 +- libs/windows/include/openssl/ossl_typ.h | 8 +- libs/windows/include/openssl/pem.h | 144 +- libs/windows/include/openssl/pem2.h | 15 +- libs/windows/include/openssl/pemerr.h | 99 ++ libs/windows/include/openssl/pkcs12.h | 61 +- libs/windows/include/openssl/pkcs12err.h | 77 + libs/windows/include/openssl/pkcs7.h | 87 +- libs/windows/include/openssl/pkcs7err.h | 99 ++ libs/windows/include/openssl/rand.h | 60 +- libs/windows/include/openssl/rand_drbg.h | 130 ++ libs/windows/include/openssl/randerr.h | 89 ++ libs/windows/include/openssl/rsa.h | 256 ++-- libs/windows/include/openssl/rsaerr.h | 162 +++ libs/windows/include/openssl/safestack.h | 89 +- libs/windows/include/openssl/srp.h | 6 +- libs/windows/include/openssl/ssl.h | 1467 +++++++++----------- libs/windows/include/openssl/ssl3.h | 57 +- libs/windows/include/openssl/sslerr.h | 768 ++++++++++ libs/windows/include/openssl/stack.h | 11 +- libs/windows/include/openssl/store.h | 266 ++++ libs/windows/include/openssl/storeerr.h | 87 ++ libs/windows/include/openssl/tls1.h | 423 ++++-- libs/windows/include/openssl/ts.h | 134 +- libs/windows/include/openssl/tserr.h | 128 ++ libs/windows/include/openssl/txt_db.h | 4 +- libs/windows/include/openssl/ui.h | 120 +- libs/windows/include/openssl/uierr.h | 61 + libs/windows/include/openssl/x509.h | 147 +- libs/windows/include/openssl/x509_vfy.h | 10 +- libs/windows/include/openssl/x509err.h | 125 ++ libs/windows/include/openssl/x509v3.h | 201 +-- libs/windows/include/openssl/x509v3err.h | 158 +++ libs/windows/lib/x64/libcrypto-1_1-x64.dll | Bin 2452672 -> 2822848 bytes libs/windows/lib/x64/libcrypto-1_1-x64.pdb | Bin 8630272 -> 9375744 bytes libs/windows/lib/x64/libcrypto.lib | Bin 914140 -> 1000812 bytes libs/windows/lib/x64/libssl-1_1-x64.dll | Bin 517824 -> 682176 bytes libs/windows/lib/x64/libssl-1_1-x64.pdb | Bin 1863680 -> 2306048 bytes libs/windows/lib/x64/libssl.lib | Bin 93674 -> 118430 bytes libs/windows/lib/x86/libcrypto-1_1.dll | Bin 1892032 -> 2209984 bytes libs/windows/lib/x86/libcrypto-1_1.pdb | Bin 9154560 -> 10039296 bytes libs/windows/lib/x86/libcrypto.lib | Bin 918102 -> 1005138 bytes libs/windows/lib/x86/libssl-1_1.dll | Bin 401600 -> 533184 bytes libs/windows/lib/x86/libssl-1_1.pdb | Bin 1978368 -> 2461696 bytes libs/windows/lib/x86/libssl.lib | Bin 93882 -> 118720 bytes 90 files changed, 6996 insertions(+), 4454 deletions(-) create mode 100644 libs/windows/include/openssl/asn1err.h create mode 100644 libs/windows/include/openssl/asyncerr.h create mode 100644 libs/windows/include/openssl/bioerr.h create mode 100644 libs/windows/include/openssl/bnerr.h create mode 100644 libs/windows/include/openssl/buffererr.h create mode 100644 libs/windows/include/openssl/cmserr.h create mode 100644 libs/windows/include/openssl/comperr.h create mode 100644 libs/windows/include/openssl/conferr.h create mode 100644 libs/windows/include/openssl/cryptoerr.h create mode 100644 libs/windows/include/openssl/cterr.h create mode 100644 libs/windows/include/openssl/dherr.h create mode 100644 libs/windows/include/openssl/dsaerr.h create mode 100644 libs/windows/include/openssl/ecerr.h create mode 100644 libs/windows/include/openssl/engineerr.h create mode 100644 libs/windows/include/openssl/evperr.h create mode 100644 libs/windows/include/openssl/kdferr.h create mode 100644 libs/windows/include/openssl/objectserr.h create mode 100644 libs/windows/include/openssl/ocsperr.h create mode 100644 libs/windows/include/openssl/pemerr.h create mode 100644 libs/windows/include/openssl/pkcs12err.h create mode 100644 libs/windows/include/openssl/pkcs7err.h create mode 100644 libs/windows/include/openssl/rand_drbg.h create mode 100644 libs/windows/include/openssl/randerr.h create mode 100644 libs/windows/include/openssl/rsaerr.h create mode 100644 libs/windows/include/openssl/sslerr.h create mode 100644 libs/windows/include/openssl/store.h create mode 100644 libs/windows/include/openssl/storeerr.h create mode 100644 libs/windows/include/openssl/tserr.h create mode 100644 libs/windows/include/openssl/uierr.h create mode 100644 libs/windows/include/openssl/x509err.h create mode 100644 libs/windows/include/openssl/x509v3err.h diff --git a/libs/windows/include/openssl/asn1.h b/libs/windows/include/openssl/asn1.h index d0b1099a..9522eec1 100644 --- a/libs/windows/include/openssl/asn1.h +++ b/libs/windows/include/openssl/asn1.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -14,9 +14,8 @@ # include # include # include -# include # include - +# include # include # include @@ -40,7 +39,7 @@ extern "C" { # define V_ASN1_CONSTRUCTED 0x20 # define V_ASN1_PRIMITIVE_TAG 0x1f -# define V_ASN1_PRIMATIVE_TAG 0x1f +# define V_ASN1_PRIMATIVE_TAG /*compat*/ V_ASN1_PRIMITIVE_TAG # define V_ASN1_APP_CHOOSE -2/* let the recipient choose */ # define V_ASN1_OTHER -3/* used in ASN1_TYPE */ @@ -141,6 +140,8 @@ DEFINE_STACK_OF(X509_ALGOR) # define ASN1_STRING_FLAG_MSTRING 0x040 /* String is embedded and only content should be freed */ # define ASN1_STRING_FLAG_EMBED 0x080 +/* String should be parsed in RFC 5280's time format */ +# define ASN1_STRING_FLAG_X509_TIME 0x100 /* This is the base type that holds just about everything :-) */ struct asn1_string_st { int length; @@ -588,6 +589,7 @@ ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, time_t t, int offset_day, long offset_sec); int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); + int ASN1_TIME_diff(int *pday, int *psec, const ASN1_TIME *from, const ASN1_TIME *to); @@ -628,6 +630,11 @@ int ASN1_TIME_check(const ASN1_TIME *t); ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *t, ASN1_GENERALIZEDTIME **out); int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); +int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str); +int ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm); +int ASN1_TIME_normalize(ASN1_TIME *s); +int ASN1_TIME_cmp_time_t(const ASN1_TIME *s, time_t t); +int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b); int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a); int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); @@ -870,231 +877,8 @@ ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); int SMIME_crlf_copy(BIO *in, BIO *out, int flags); int SMIME_text(BIO *in, BIO *out); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_ASN1_strings(void); - -/* Error codes for the ASN1 functions. */ - -/* Function codes. */ -# define ASN1_F_A2D_ASN1_OBJECT 100 -# define ASN1_F_A2I_ASN1_INTEGER 102 -# define ASN1_F_A2I_ASN1_STRING 103 -# define ASN1_F_APPEND_EXP 176 -# define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 -# define ASN1_F_ASN1_CB 177 -# define ASN1_F_ASN1_CHECK_TLEN 104 -# define ASN1_F_ASN1_COLLECT 106 -# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 -# define ASN1_F_ASN1_D2I_FP 109 -# define ASN1_F_ASN1_D2I_READ_BIO 107 -# define ASN1_F_ASN1_DIGEST 184 -# define ASN1_F_ASN1_DO_ADB 110 -# define ASN1_F_ASN1_DO_LOCK 233 -# define ASN1_F_ASN1_DUP 111 -# define ASN1_F_ASN1_EX_C2I 204 -# define ASN1_F_ASN1_FIND_END 190 -# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 -# define ASN1_F_ASN1_GENERATE_V3 178 -# define ASN1_F_ASN1_GET_INT64 224 -# define ASN1_F_ASN1_GET_OBJECT 114 -# define ASN1_F_ASN1_GET_UINT64 225 -# define ASN1_F_ASN1_I2D_BIO 116 -# define ASN1_F_ASN1_I2D_FP 117 -# define ASN1_F_ASN1_ITEM_D2I_FP 206 -# define ASN1_F_ASN1_ITEM_DUP 191 -# define ASN1_F_ASN1_ITEM_EMBED_D2I 120 -# define ASN1_F_ASN1_ITEM_EMBED_NEW 121 -# define ASN1_F_ASN1_ITEM_I2D_BIO 192 -# define ASN1_F_ASN1_ITEM_I2D_FP 193 -# define ASN1_F_ASN1_ITEM_PACK 198 -# define ASN1_F_ASN1_ITEM_SIGN 195 -# define ASN1_F_ASN1_ITEM_SIGN_CTX 220 -# define ASN1_F_ASN1_ITEM_UNPACK 199 -# define ASN1_F_ASN1_ITEM_VERIFY 197 -# define ASN1_F_ASN1_MBSTRING_NCOPY 122 -# define ASN1_F_ASN1_OBJECT_NEW 123 -# define ASN1_F_ASN1_OUTPUT_DATA 214 -# define ASN1_F_ASN1_PCTX_NEW 205 -# define ASN1_F_ASN1_SCTX_NEW 221 -# define ASN1_F_ASN1_SIGN 128 -# define ASN1_F_ASN1_STR2TYPE 179 -# define ASN1_F_ASN1_STRING_GET_INT64 227 -# define ASN1_F_ASN1_STRING_GET_UINT64 230 -# define ASN1_F_ASN1_STRING_SET 186 -# define ASN1_F_ASN1_STRING_TABLE_ADD 129 -# define ASN1_F_ASN1_STRING_TO_BN 228 -# define ASN1_F_ASN1_STRING_TYPE_NEW 130 -# define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 -# define ASN1_F_ASN1_TEMPLATE_NEW 133 -# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 -# define ASN1_F_ASN1_TIME_ADJ 217 -# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 -# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 -# define ASN1_F_ASN1_UTCTIME_ADJ 218 -# define ASN1_F_ASN1_VERIFY 137 -# define ASN1_F_B64_READ_ASN1 209 -# define ASN1_F_B64_WRITE_ASN1 210 -# define ASN1_F_BIO_NEW_NDEF 208 -# define ASN1_F_BITSTR_CB 180 -# define ASN1_F_BN_TO_ASN1_STRING 229 -# define ASN1_F_C2I_ASN1_BIT_STRING 189 -# define ASN1_F_C2I_ASN1_INTEGER 194 -# define ASN1_F_C2I_ASN1_OBJECT 196 -# define ASN1_F_C2I_IBUF 226 -# define ASN1_F_C2I_UINT64_INT 101 -# define ASN1_F_COLLECT_DATA 140 -# define ASN1_F_D2I_ASN1_OBJECT 147 -# define ASN1_F_D2I_ASN1_UINTEGER 150 -# define ASN1_F_D2I_AUTOPRIVATEKEY 207 -# define ASN1_F_D2I_PRIVATEKEY 154 -# define ASN1_F_D2I_PUBLICKEY 155 -# define ASN1_F_DO_BUF 142 -# define ASN1_F_DO_TCREATE 222 -# define ASN1_F_I2D_ASN1_BIO_STREAM 211 -# define ASN1_F_I2D_ASN1_OBJECT 143 -# define ASN1_F_I2D_DSA_PUBKEY 161 -# define ASN1_F_I2D_EC_PUBKEY 181 -# define ASN1_F_I2D_PRIVATEKEY 163 -# define ASN1_F_I2D_PUBLICKEY 164 -# define ASN1_F_I2D_RSA_PUBKEY 165 -# define ASN1_F_LONG_C2I 166 -# define ASN1_F_OID_MODULE_INIT 174 -# define ASN1_F_PARSE_TAGGING 182 -# define ASN1_F_PKCS5_PBE2_SET_IV 167 -# define ASN1_F_PKCS5_PBE2_SET_SCRYPT 231 -# define ASN1_F_PKCS5_PBE_SET 202 -# define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 -# define ASN1_F_PKCS5_PBKDF2_SET 219 -# define ASN1_F_PKCS5_SCRYPT_SET 232 -# define ASN1_F_SMIME_READ_ASN1 212 -# define ASN1_F_SMIME_TEXT 213 -# define ASN1_F_STBL_MODULE_INIT 223 -# define ASN1_F_UINT32_C2I 105 -# define ASN1_F_UINT64_C2I 112 -# define ASN1_F_X509_CRL_ADD0_REVOKED 169 -# define ASN1_F_X509_INFO_NEW 170 -# define ASN1_F_X509_NAME_ENCODE 203 -# define ASN1_F_X509_NAME_EX_D2I 158 -# define ASN1_F_X509_NAME_EX_NEW 171 -# define ASN1_F_X509_PKEY_NEW 173 - -/* Reason codes. */ -# define ASN1_R_ADDING_OBJECT 171 -# define ASN1_R_ASN1_PARSE_ERROR 203 -# define ASN1_R_ASN1_SIG_PARSE_ERROR 204 -# define ASN1_R_AUX_ERROR 100 -# define ASN1_R_BAD_OBJECT_HEADER 102 -# define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214 -# define ASN1_R_BN_LIB 105 -# define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 -# define ASN1_R_BUFFER_TOO_SMALL 107 -# define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 108 -# define ASN1_R_CONTEXT_NOT_INITIALISED 217 -# define ASN1_R_DATA_IS_WRONG 109 -# define ASN1_R_DECODE_ERROR 110 -# define ASN1_R_DEPTH_EXCEEDED 174 -# define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 198 -# define ASN1_R_ENCODE_ERROR 112 -# define ASN1_R_ERROR_GETTING_TIME 173 -# define ASN1_R_ERROR_LOADING_SECTION 172 -# define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 114 -# define ASN1_R_EXPECTING_AN_INTEGER 115 -# define ASN1_R_EXPECTING_AN_OBJECT 116 -# define ASN1_R_EXPLICIT_LENGTH_MISMATCH 119 -# define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 120 -# define ASN1_R_FIELD_MISSING 121 -# define ASN1_R_FIRST_NUM_TOO_LARGE 122 -# define ASN1_R_HEADER_TOO_LONG 123 -# define ASN1_R_ILLEGAL_BITSTRING_FORMAT 175 -# define ASN1_R_ILLEGAL_BOOLEAN 176 -# define ASN1_R_ILLEGAL_CHARACTERS 124 -# define ASN1_R_ILLEGAL_FORMAT 177 -# define ASN1_R_ILLEGAL_HEX 178 -# define ASN1_R_ILLEGAL_IMPLICIT_TAG 179 -# define ASN1_R_ILLEGAL_INTEGER 180 -# define ASN1_R_ILLEGAL_NEGATIVE_VALUE 226 -# define ASN1_R_ILLEGAL_NESTED_TAGGING 181 -# define ASN1_R_ILLEGAL_NULL 125 -# define ASN1_R_ILLEGAL_NULL_VALUE 182 -# define ASN1_R_ILLEGAL_OBJECT 183 -# define ASN1_R_ILLEGAL_OPTIONAL_ANY 126 -# define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 170 -# define ASN1_R_ILLEGAL_PADDING 221 -# define ASN1_R_ILLEGAL_TAGGED_ANY 127 -# define ASN1_R_ILLEGAL_TIME_VALUE 184 -# define ASN1_R_ILLEGAL_ZERO_CONTENT 222 -# define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 -# define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 -# define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220 -# define ASN1_R_INVALID_BMPSTRING_LENGTH 129 -# define ASN1_R_INVALID_DIGIT 130 -# define ASN1_R_INVALID_MIME_TYPE 205 -# define ASN1_R_INVALID_MODIFIER 186 -# define ASN1_R_INVALID_NUMBER 187 -# define ASN1_R_INVALID_OBJECT_ENCODING 216 -# define ASN1_R_INVALID_SCRYPT_PARAMETERS 227 -# define ASN1_R_INVALID_SEPARATOR 131 -# define ASN1_R_INVALID_STRING_TABLE_VALUE 218 -# define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 -# define ASN1_R_INVALID_UTF8STRING 134 -# define ASN1_R_INVALID_VALUE 219 -# define ASN1_R_LIST_ERROR 188 -# define ASN1_R_MIME_NO_CONTENT_TYPE 206 -# define ASN1_R_MIME_PARSE_ERROR 207 -# define ASN1_R_MIME_SIG_PARSE_ERROR 208 -# define ASN1_R_MISSING_EOC 137 -# define ASN1_R_MISSING_SECOND_NUMBER 138 -# define ASN1_R_MISSING_VALUE 189 -# define ASN1_R_MSTRING_NOT_UNIVERSAL 139 -# define ASN1_R_MSTRING_WRONG_TAG 140 -# define ASN1_R_NESTED_ASN1_STRING 197 -# define ASN1_R_NESTED_TOO_DEEP 201 -# define ASN1_R_NON_HEX_CHARACTERS 141 -# define ASN1_R_NOT_ASCII_FORMAT 190 -# define ASN1_R_NOT_ENOUGH_DATA 142 -# define ASN1_R_NO_CONTENT_TYPE 209 -# define ASN1_R_NO_MATCHING_CHOICE_TYPE 143 -# define ASN1_R_NO_MULTIPART_BODY_FAILURE 210 -# define ASN1_R_NO_MULTIPART_BOUNDARY 211 -# define ASN1_R_NO_SIG_CONTENT_TYPE 212 -# define ASN1_R_NULL_IS_WRONG_LENGTH 144 -# define ASN1_R_OBJECT_NOT_ASCII_FORMAT 191 -# define ASN1_R_ODD_NUMBER_OF_CHARS 145 -# define ASN1_R_SECOND_NUMBER_TOO_LARGE 147 -# define ASN1_R_SEQUENCE_LENGTH_MISMATCH 148 -# define ASN1_R_SEQUENCE_NOT_CONSTRUCTED 149 -# define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 192 -# define ASN1_R_SHORT_LINE 150 -# define ASN1_R_SIG_INVALID_MIME_TYPE 213 -# define ASN1_R_STREAMING_NOT_SUPPORTED 202 -# define ASN1_R_STRING_TOO_LONG 151 -# define ASN1_R_STRING_TOO_SHORT 152 -# define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154 -# define ASN1_R_TIME_NOT_ASCII_FORMAT 193 -# define ASN1_R_TOO_LARGE 223 -# define ASN1_R_TOO_LONG 155 -# define ASN1_R_TOO_SMALL 224 -# define ASN1_R_TYPE_NOT_CONSTRUCTED 156 -# define ASN1_R_TYPE_NOT_PRIMITIVE 195 -# define ASN1_R_UNEXPECTED_EOC 159 -# define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215 -# define ASN1_R_UNKNOWN_FORMAT 160 -# define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 -# define ASN1_R_UNKNOWN_OBJECT_TYPE 162 -# define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 163 -# define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 199 -# define ASN1_R_UNKNOWN_TAG 194 -# define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 -# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 -# define ASN1_R_UNSUPPORTED_TYPE 196 -# define ASN1_R_WRONG_INTEGER_TYPE 225 -# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 -# define ASN1_R_WRONG_TAG 168 +const ASN1_ITEM *ASN1_ITEM_lookup(const char *name); +const ASN1_ITEM *ASN1_ITEM_get(size_t i); # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/asn1err.h b/libs/windows/include/openssl/asn1err.h new file mode 100644 index 00000000..5a91126d --- /dev/null +++ b/libs/windows/include/openssl/asn1err.h @@ -0,0 +1,252 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ASN1ERR_H +# define HEADER_ASN1ERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_ASN1_strings(void); + +/* + * ASN1 function codes. + */ +# define ASN1_F_A2D_ASN1_OBJECT 100 +# define ASN1_F_A2I_ASN1_INTEGER 102 +# define ASN1_F_A2I_ASN1_STRING 103 +# define ASN1_F_APPEND_EXP 176 +# define ASN1_F_ASN1_BIO_INIT 113 +# define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 +# define ASN1_F_ASN1_CB 177 +# define ASN1_F_ASN1_CHECK_TLEN 104 +# define ASN1_F_ASN1_COLLECT 106 +# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 +# define ASN1_F_ASN1_D2I_FP 109 +# define ASN1_F_ASN1_D2I_READ_BIO 107 +# define ASN1_F_ASN1_DIGEST 184 +# define ASN1_F_ASN1_DO_ADB 110 +# define ASN1_F_ASN1_DO_LOCK 233 +# define ASN1_F_ASN1_DUP 111 +# define ASN1_F_ASN1_ENC_SAVE 115 +# define ASN1_F_ASN1_EX_C2I 204 +# define ASN1_F_ASN1_FIND_END 190 +# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 +# define ASN1_F_ASN1_GENERATE_V3 178 +# define ASN1_F_ASN1_GET_INT64 224 +# define ASN1_F_ASN1_GET_OBJECT 114 +# define ASN1_F_ASN1_GET_UINT64 225 +# define ASN1_F_ASN1_I2D_BIO 116 +# define ASN1_F_ASN1_I2D_FP 117 +# define ASN1_F_ASN1_ITEM_D2I_FP 206 +# define ASN1_F_ASN1_ITEM_DUP 191 +# define ASN1_F_ASN1_ITEM_EMBED_D2I 120 +# define ASN1_F_ASN1_ITEM_EMBED_NEW 121 +# define ASN1_F_ASN1_ITEM_FLAGS_I2D 118 +# define ASN1_F_ASN1_ITEM_I2D_BIO 192 +# define ASN1_F_ASN1_ITEM_I2D_FP 193 +# define ASN1_F_ASN1_ITEM_PACK 198 +# define ASN1_F_ASN1_ITEM_SIGN 195 +# define ASN1_F_ASN1_ITEM_SIGN_CTX 220 +# define ASN1_F_ASN1_ITEM_UNPACK 199 +# define ASN1_F_ASN1_ITEM_VERIFY 197 +# define ASN1_F_ASN1_MBSTRING_NCOPY 122 +# define ASN1_F_ASN1_OBJECT_NEW 123 +# define ASN1_F_ASN1_OUTPUT_DATA 214 +# define ASN1_F_ASN1_PCTX_NEW 205 +# define ASN1_F_ASN1_PRIMITIVE_NEW 119 +# define ASN1_F_ASN1_SCTX_NEW 221 +# define ASN1_F_ASN1_SIGN 128 +# define ASN1_F_ASN1_STR2TYPE 179 +# define ASN1_F_ASN1_STRING_GET_INT64 227 +# define ASN1_F_ASN1_STRING_GET_UINT64 230 +# define ASN1_F_ASN1_STRING_SET 186 +# define ASN1_F_ASN1_STRING_TABLE_ADD 129 +# define ASN1_F_ASN1_STRING_TO_BN 228 +# define ASN1_F_ASN1_STRING_TYPE_NEW 130 +# define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 +# define ASN1_F_ASN1_TEMPLATE_NEW 133 +# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 +# define ASN1_F_ASN1_TIME_ADJ 217 +# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 +# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 +# define ASN1_F_ASN1_UTCTIME_ADJ 218 +# define ASN1_F_ASN1_VERIFY 137 +# define ASN1_F_B64_READ_ASN1 209 +# define ASN1_F_B64_WRITE_ASN1 210 +# define ASN1_F_BIO_NEW_NDEF 208 +# define ASN1_F_BITSTR_CB 180 +# define ASN1_F_BN_TO_ASN1_STRING 229 +# define ASN1_F_C2I_ASN1_BIT_STRING 189 +# define ASN1_F_C2I_ASN1_INTEGER 194 +# define ASN1_F_C2I_ASN1_OBJECT 196 +# define ASN1_F_C2I_IBUF 226 +# define ASN1_F_C2I_UINT64_INT 101 +# define ASN1_F_COLLECT_DATA 140 +# define ASN1_F_D2I_ASN1_OBJECT 147 +# define ASN1_F_D2I_ASN1_UINTEGER 150 +# define ASN1_F_D2I_AUTOPRIVATEKEY 207 +# define ASN1_F_D2I_PRIVATEKEY 154 +# define ASN1_F_D2I_PUBLICKEY 155 +# define ASN1_F_DO_BUF 142 +# define ASN1_F_DO_CREATE 124 +# define ASN1_F_DO_DUMP 125 +# define ASN1_F_DO_TCREATE 222 +# define ASN1_F_I2A_ASN1_OBJECT 126 +# define ASN1_F_I2D_ASN1_BIO_STREAM 211 +# define ASN1_F_I2D_ASN1_OBJECT 143 +# define ASN1_F_I2D_DSA_PUBKEY 161 +# define ASN1_F_I2D_EC_PUBKEY 181 +# define ASN1_F_I2D_PRIVATEKEY 163 +# define ASN1_F_I2D_PUBLICKEY 164 +# define ASN1_F_I2D_RSA_PUBKEY 165 +# define ASN1_F_LONG_C2I 166 +# define ASN1_F_NDEF_PREFIX 127 +# define ASN1_F_NDEF_SUFFIX 136 +# define ASN1_F_OID_MODULE_INIT 174 +# define ASN1_F_PARSE_TAGGING 182 +# define ASN1_F_PKCS5_PBE2_SET_IV 167 +# define ASN1_F_PKCS5_PBE2_SET_SCRYPT 231 +# define ASN1_F_PKCS5_PBE_SET 202 +# define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 +# define ASN1_F_PKCS5_PBKDF2_SET 219 +# define ASN1_F_PKCS5_SCRYPT_SET 232 +# define ASN1_F_SMIME_READ_ASN1 212 +# define ASN1_F_SMIME_TEXT 213 +# define ASN1_F_STABLE_GET 138 +# define ASN1_F_STBL_MODULE_INIT 223 +# define ASN1_F_UINT32_C2I 105 +# define ASN1_F_UINT32_NEW 139 +# define ASN1_F_UINT64_C2I 112 +# define ASN1_F_UINT64_NEW 141 +# define ASN1_F_X509_CRL_ADD0_REVOKED 169 +# define ASN1_F_X509_INFO_NEW 170 +# define ASN1_F_X509_NAME_ENCODE 203 +# define ASN1_F_X509_NAME_EX_D2I 158 +# define ASN1_F_X509_NAME_EX_NEW 171 +# define ASN1_F_X509_PKEY_NEW 173 + +/* + * ASN1 reason codes. + */ +# define ASN1_R_ADDING_OBJECT 171 +# define ASN1_R_ASN1_PARSE_ERROR 203 +# define ASN1_R_ASN1_SIG_PARSE_ERROR 204 +# define ASN1_R_AUX_ERROR 100 +# define ASN1_R_BAD_OBJECT_HEADER 102 +# define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214 +# define ASN1_R_BN_LIB 105 +# define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 +# define ASN1_R_BUFFER_TOO_SMALL 107 +# define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 108 +# define ASN1_R_CONTEXT_NOT_INITIALISED 217 +# define ASN1_R_DATA_IS_WRONG 109 +# define ASN1_R_DECODE_ERROR 110 +# define ASN1_R_DEPTH_EXCEEDED 174 +# define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 198 +# define ASN1_R_ENCODE_ERROR 112 +# define ASN1_R_ERROR_GETTING_TIME 173 +# define ASN1_R_ERROR_LOADING_SECTION 172 +# define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 114 +# define ASN1_R_EXPECTING_AN_INTEGER 115 +# define ASN1_R_EXPECTING_AN_OBJECT 116 +# define ASN1_R_EXPLICIT_LENGTH_MISMATCH 119 +# define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 120 +# define ASN1_R_FIELD_MISSING 121 +# define ASN1_R_FIRST_NUM_TOO_LARGE 122 +# define ASN1_R_HEADER_TOO_LONG 123 +# define ASN1_R_ILLEGAL_BITSTRING_FORMAT 175 +# define ASN1_R_ILLEGAL_BOOLEAN 176 +# define ASN1_R_ILLEGAL_CHARACTERS 124 +# define ASN1_R_ILLEGAL_FORMAT 177 +# define ASN1_R_ILLEGAL_HEX 178 +# define ASN1_R_ILLEGAL_IMPLICIT_TAG 179 +# define ASN1_R_ILLEGAL_INTEGER 180 +# define ASN1_R_ILLEGAL_NEGATIVE_VALUE 226 +# define ASN1_R_ILLEGAL_NESTED_TAGGING 181 +# define ASN1_R_ILLEGAL_NULL 125 +# define ASN1_R_ILLEGAL_NULL_VALUE 182 +# define ASN1_R_ILLEGAL_OBJECT 183 +# define ASN1_R_ILLEGAL_OPTIONAL_ANY 126 +# define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 170 +# define ASN1_R_ILLEGAL_PADDING 221 +# define ASN1_R_ILLEGAL_TAGGED_ANY 127 +# define ASN1_R_ILLEGAL_TIME_VALUE 184 +# define ASN1_R_ILLEGAL_ZERO_CONTENT 222 +# define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 +# define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 +# define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220 +# define ASN1_R_INVALID_BMPSTRING_LENGTH 129 +# define ASN1_R_INVALID_DIGIT 130 +# define ASN1_R_INVALID_MIME_TYPE 205 +# define ASN1_R_INVALID_MODIFIER 186 +# define ASN1_R_INVALID_NUMBER 187 +# define ASN1_R_INVALID_OBJECT_ENCODING 216 +# define ASN1_R_INVALID_SCRYPT_PARAMETERS 227 +# define ASN1_R_INVALID_SEPARATOR 131 +# define ASN1_R_INVALID_STRING_TABLE_VALUE 218 +# define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 +# define ASN1_R_INVALID_UTF8STRING 134 +# define ASN1_R_INVALID_VALUE 219 +# define ASN1_R_LIST_ERROR 188 +# define ASN1_R_MIME_NO_CONTENT_TYPE 206 +# define ASN1_R_MIME_PARSE_ERROR 207 +# define ASN1_R_MIME_SIG_PARSE_ERROR 208 +# define ASN1_R_MISSING_EOC 137 +# define ASN1_R_MISSING_SECOND_NUMBER 138 +# define ASN1_R_MISSING_VALUE 189 +# define ASN1_R_MSTRING_NOT_UNIVERSAL 139 +# define ASN1_R_MSTRING_WRONG_TAG 140 +# define ASN1_R_NESTED_ASN1_STRING 197 +# define ASN1_R_NESTED_TOO_DEEP 201 +# define ASN1_R_NON_HEX_CHARACTERS 141 +# define ASN1_R_NOT_ASCII_FORMAT 190 +# define ASN1_R_NOT_ENOUGH_DATA 142 +# define ASN1_R_NO_CONTENT_TYPE 209 +# define ASN1_R_NO_MATCHING_CHOICE_TYPE 143 +# define ASN1_R_NO_MULTIPART_BODY_FAILURE 210 +# define ASN1_R_NO_MULTIPART_BOUNDARY 211 +# define ASN1_R_NO_SIG_CONTENT_TYPE 212 +# define ASN1_R_NULL_IS_WRONG_LENGTH 144 +# define ASN1_R_OBJECT_NOT_ASCII_FORMAT 191 +# define ASN1_R_ODD_NUMBER_OF_CHARS 145 +# define ASN1_R_SECOND_NUMBER_TOO_LARGE 147 +# define ASN1_R_SEQUENCE_LENGTH_MISMATCH 148 +# define ASN1_R_SEQUENCE_NOT_CONSTRUCTED 149 +# define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 192 +# define ASN1_R_SHORT_LINE 150 +# define ASN1_R_SIG_INVALID_MIME_TYPE 213 +# define ASN1_R_STREAMING_NOT_SUPPORTED 202 +# define ASN1_R_STRING_TOO_LONG 151 +# define ASN1_R_STRING_TOO_SHORT 152 +# define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154 +# define ASN1_R_TIME_NOT_ASCII_FORMAT 193 +# define ASN1_R_TOO_LARGE 223 +# define ASN1_R_TOO_LONG 155 +# define ASN1_R_TOO_SMALL 224 +# define ASN1_R_TYPE_NOT_CONSTRUCTED 156 +# define ASN1_R_TYPE_NOT_PRIMITIVE 195 +# define ASN1_R_UNEXPECTED_EOC 159 +# define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215 +# define ASN1_R_UNKNOWN_FORMAT 160 +# define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 +# define ASN1_R_UNKNOWN_OBJECT_TYPE 162 +# define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 163 +# define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 199 +# define ASN1_R_UNKNOWN_TAG 194 +# define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 +# define ASN1_R_UNSUPPORTED_CIPHER 228 +# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 +# define ASN1_R_UNSUPPORTED_TYPE 196 +# define ASN1_R_WRONG_INTEGER_TYPE 225 +# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 +# define ASN1_R_WRONG_TAG 168 + +#endif diff --git a/libs/windows/include/openssl/asn1t.h b/libs/windows/include/openssl/asn1t.h index a5248293..a450ba0d 100644 --- a/libs/windows/include/openssl/asn1t.h +++ b/libs/windows/include/openssl/asn1t.h @@ -33,7 +33,7 @@ extern "C" { /* Macros for start and end of ASN1_ITEM definition */ # define ASN1_ITEM_start(itname) \ - OPENSSL_GLOBAL const ASN1_ITEM itname##_it = { + const ASN1_ITEM itname##_it = { # define static_ASN1_ITEM_start(itname) \ static const ASN1_ITEM itname##_it = { @@ -44,7 +44,7 @@ extern "C" { # else /* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr())) +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) /* Macros for start and end of ASN1_ITEM definition */ @@ -130,7 +130,7 @@ extern "C" { sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ NULL,\ sizeof(stname),\ - #stname \ + #tname \ ASN1_ITEM_end(tname) # define static_ASN1_SEQUENCE_END_name(stname, tname) \ @@ -208,7 +208,7 @@ extern "C" { sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ &tname##_aux,\ sizeof(stname),\ - #stname \ + #tname \ ASN1_ITEM_end(tname) # define static_ASN1_SEQUENCE_END_ref(stname, tname) \ ;\ @@ -325,10 +325,10 @@ extern "C" { /* implicit and explicit helper macros */ # define ASN1_IMP_EX(stname, field, type, tag, ex) \ - ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | ex, tag, stname, field, type) + ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | (ex), tag, stname, field, type) # define ASN1_EXP_EX(stname, field, type, tag, ex) \ - ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | ex, tag, stname, field, type) + ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | (ex), tag, stname, field, type) /* Any defined by macros: the field used is in the table itself */ @@ -531,10 +531,10 @@ struct ASN1_ADB_TABLE_st { # define ASN1_TFLG_TAG_MASK (0x3 << 3) /* context specific IMPLICIT */ -# define ASN1_TFLG_IMPLICIT ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT +# define ASN1_TFLG_IMPLICIT (ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT) /* context specific EXPLICIT */ -# define ASN1_TFLG_EXPLICIT ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT +# define ASN1_TFLG_EXPLICIT (ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT) /* * If tagging is in force these determine the type of tag to use. Otherwise @@ -906,8 +906,24 @@ DECLARE_ASN1_ITEM(ASN1_FBOOLEAN) DECLARE_ASN1_ITEM(ASN1_SEQUENCE) DECLARE_ASN1_ITEM(CBIGNUM) DECLARE_ASN1_ITEM(BIGNUM) +DECLARE_ASN1_ITEM(INT32) +DECLARE_ASN1_ITEM(ZINT32) +DECLARE_ASN1_ITEM(UINT32) +DECLARE_ASN1_ITEM(ZUINT32) +DECLARE_ASN1_ITEM(INT64) +DECLARE_ASN1_ITEM(ZINT64) +DECLARE_ASN1_ITEM(UINT64) +DECLARE_ASN1_ITEM(ZUINT64) + +# if OPENSSL_API_COMPAT < 0x10200000L +/* + * LONG and ZLONG are strongly discouraged for use as stored data, as the + * underlying C type (long) differs in size depending on the architecture. + * They are designed with 32-bit longs in mind. + */ DECLARE_ASN1_ITEM(LONG) DECLARE_ASN1_ITEM(ZLONG) +# endif DEFINE_STACK_OF(ASN1_VALUE) diff --git a/libs/windows/include/openssl/async.h b/libs/windows/include/openssl/async.h index 5b2e496d..7052b890 100644 --- a/libs/windows/include/openssl/async.h +++ b/libs/windows/include/openssl/async.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -22,6 +22,7 @@ #define OSSL_ASYNC_FD int #define OSSL_BAD_ASYNC_FD -1 #endif +# include # ifdef __cplusplus @@ -68,29 +69,6 @@ ASYNC_WAIT_CTX *ASYNC_get_wait_ctx(ASYNC_JOB *job); void ASYNC_block_pause(void); void ASYNC_unblock_pause(void); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_ASYNC_strings(void); - -/* Error codes for the ASYNC functions. */ - -/* Function codes. */ -# define ASYNC_F_ASYNC_CTX_NEW 100 -# define ASYNC_F_ASYNC_INIT_THREAD 101 -# define ASYNC_F_ASYNC_JOB_NEW 102 -# define ASYNC_F_ASYNC_PAUSE_JOB 103 -# define ASYNC_F_ASYNC_START_FUNC 104 -# define ASYNC_F_ASYNC_START_JOB 105 - -/* Reason codes. */ -# define ASYNC_R_FAILED_TO_SET_POOL 101 -# define ASYNC_R_FAILED_TO_SWAP_CONTEXT 102 -# define ASYNC_R_INIT_FAILED 105 -# define ASYNC_R_INVALID_POOL_SIZE 103 # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/asyncerr.h b/libs/windows/include/openssl/asyncerr.h new file mode 100644 index 00000000..5497ba75 --- /dev/null +++ b/libs/windows/include/openssl/asyncerr.h @@ -0,0 +1,38 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ASYNCERR_H +# define HEADER_ASYNCERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_ASYNC_strings(void); + +/* + * ASYNC function codes. + */ +# define ASYNC_F_ASYNC_CTX_NEW 100 +# define ASYNC_F_ASYNC_INIT_THREAD 101 +# define ASYNC_F_ASYNC_JOB_NEW 102 +# define ASYNC_F_ASYNC_PAUSE_JOB 103 +# define ASYNC_F_ASYNC_START_FUNC 104 +# define ASYNC_F_ASYNC_START_JOB 105 +# define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD 106 + +/* + * ASYNC reason codes. + */ +# define ASYNC_R_FAILED_TO_SET_POOL 101 +# define ASYNC_R_FAILED_TO_SWAP_CONTEXT 102 +# define ASYNC_R_INIT_FAILED 105 +# define ASYNC_R_INVALID_POOL_SIZE 103 + +#endif diff --git a/libs/windows/include/openssl/bio.h b/libs/windows/include/openssl/bio.h index 3a728625..2888b42d 100644 --- a/libs/windows/include/openssl/bio.h +++ b/libs/windows/include/openssl/bio.h @@ -18,6 +18,7 @@ # include # include +# include # ifndef OPENSSL_NO_SCTP # include @@ -87,6 +88,7 @@ extern "C" { # define BIO_CTRL_SET_CALLBACK 14/* opt - set callback function */ # define BIO_CTRL_GET_CALLBACK 15/* opt - set callback function */ +# define BIO_CTRL_PEEK 29/* BIO_f_buffer special */ # define BIO_CTRL_SET_FILENAME 30/* BIO_s_file special */ /* dgram BIO stuff */ @@ -236,8 +238,15 @@ void BIO_clear_flags(BIO *b, int flags); typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, long argl, long ret); +typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp, + size_t len, int argi, + long argl, int ret, size_t *processed); BIO_callback_fn BIO_get_callback(const BIO *b); void BIO_set_callback(BIO *b, BIO_callback_fn callback); + +BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); +void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); + char *BIO_get_callback_arg(const BIO *b); void BIO_set_callback_arg(BIO *b, char *arg); @@ -359,9 +368,12 @@ struct bio_dgram_sctp_prinfo { # define BIO_FAMILY_IPANY 256 /* BIO_s_connect() */ -# define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0,(char *)name) -# define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1,(char *)port) -# define BIO_set_conn_address(b,addr) BIO_ctrl(b,BIO_C_SET_CONNECT,2,(char *)addr) +# define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0, \ + (char *)(name)) +# define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1, \ + (char *)(port)) +# define BIO_set_conn_address(b,addr) BIO_ctrl(b,BIO_C_SET_CONNECT,2, \ + (char *)(addr)) # define BIO_set_conn_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_CONNECT,3,f) # define BIO_get_conn_hostname(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)) # define BIO_get_conn_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)) @@ -370,15 +382,18 @@ struct bio_dgram_sctp_prinfo { # define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) /* BIO_s_accept() */ -# define BIO_set_accept_name(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0,(char *)name) -# define BIO_set_accept_port(b,port) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(char *)port) +# define BIO_set_accept_name(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0, \ + (char *)(name)) +# define BIO_set_accept_port(b,port) BIO_ctrl(b,BIO_C_SET_ACCEPT,1, \ + (char *)(port)) # define BIO_get_accept_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)) # define BIO_get_accept_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,1)) # define BIO_get_peer_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,2)) # define BIO_get_peer_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,3)) /* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */ # define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(n)?(void *)"a":NULL) -# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,3,(char *)bio) +# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,3, \ + (char *)(bio)) # define BIO_set_accept_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_ACCEPT,4,f) # define BIO_get_accept_ip_family(b) BIO_ctrl(b,BIO_C_GET_ACCEPT,4,NULL) @@ -398,11 +413,11 @@ struct bio_dgram_sctp_prinfo { /* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ # define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) -# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c) +# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)(c)) /* BIO_s_file() */ -# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)fp) -# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)fpp) +# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)(fp)) +# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)(fpp)) /* BIO_s_fd() and BIO_s_file() */ # define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) @@ -420,7 +435,7 @@ struct bio_dgram_sctp_prinfo { int BIO_read_filename(BIO *b, const char *name); # else # define BIO_read_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_READ,(char *)name) + BIO_CLOSE|BIO_FP_READ,(char *)(name)) # endif # define BIO_write_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ BIO_CLOSE|BIO_FP_WRITE,name) @@ -435,8 +450,8 @@ int BIO_read_filename(BIO *b, const char *name); * next_bio field in the bio. So when you free the BIO, make sure you are * doing a BIO_free_all() to catch the underlying BIO. */ -# define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)ssl) -# define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)sslp) +# define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)(ssl)) +# define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)(sslp)) # define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL) # define BIO_set_ssl_renegotiate_bytes(b,num) \ BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL) @@ -446,11 +461,12 @@ int BIO_read_filename(BIO *b, const char *name); BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL) /* defined in evp.h */ -/* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)md) */ +/* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)(md)) */ -# define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp) -# define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)bm) -# define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0,(char *)pp) +# define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)(pp)) +# define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)(bm)) +# define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0, \ + (char *)(pp)) # define BIO_set_mem_eof_return(b,v) \ BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL) @@ -480,6 +496,7 @@ size_t BIO_ctrl_wpending(BIO *b); /* For the BIO_f_buffer() type */ # define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL) +# define BIO_buffer_peek(b,s,l) BIO_ctrl(b,BIO_CTRL_PEEK,(l),(s)) /* For BIO_s_bio() */ # define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL) @@ -496,17 +513,17 @@ int BIO_ctrl_reset_read_request(BIO *b); /* ctrl macros for dgram */ # define BIO_ctrl_dgram_connect(b,peer) \ - (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)peer) + (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)(peer)) # define BIO_ctrl_set_connected(b,peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, 0, (char *)peer) + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, 0, (char *)(peer)) # define BIO_dgram_recv_timedout(b) \ (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL) # define BIO_dgram_send_timedout(b) \ (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL) # define BIO_dgram_get_peer(b,peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)peer) + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)(peer)) # define BIO_dgram_set_peer(b,peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)peer) + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)(peer)) # define BIO_dgram_get_mtu_overhead(b) \ (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) @@ -542,9 +559,11 @@ void BIO_set_shutdown(BIO *a, int shut); int BIO_get_shutdown(BIO *a); void BIO_vfree(BIO *a); int BIO_up_ref(BIO *a); -int BIO_read(BIO *b, void *data, int len); +int BIO_read(BIO *b, void *data, int dlen); +int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); int BIO_gets(BIO *bp, char *buf, int size); -int BIO_write(BIO *b, const void *data, int len); +int BIO_write(BIO *b, const void *data, int dlen); +int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); int BIO_puts(BIO *bp, const char *buf); int BIO_indent(BIO *b, int indent, int max); long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); @@ -655,6 +674,9 @@ enum BIO_lookup_type { int BIO_lookup(const char *host, const char *service, enum BIO_lookup_type lookup_type, int family, int socktype, BIO_ADDRINFO **res); +int BIO_lookup_ex(const char *host, const char *service, + int lookup_type, int family, int socktype, int protocol, + BIO_ADDRINFO **res); int BIO_sock_error(int sock); int BIO_socket_ioctl(int fd, long type, void *arg); int BIO_socket_nbio(int fd, int mode); @@ -687,6 +709,7 @@ int BIO_sock_info(int sock, int BIO_socket(int domain, int socktype, int protocol, int options); int BIO_connect(int sock, const BIO_ADDR *addr, int options); +int BIO_bind(int sock, const BIO_ADDR *addr, int options); int BIO_listen(int sock, const BIO_ADDR *addr, int options); int BIO_accept_ex(int accept_sock, BIO_ADDR *addr, int options); int BIO_closesocket(int sock); @@ -712,30 +735,50 @@ void BIO_copy_next_retry(BIO *b); * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg); */ -# ifdef __GNUC__ -# define __bio_h__attr__ __attribute__ -# else -# define __bio_h__attr__(x) +# define ossl_bio__attr__(x) +# if defined(__GNUC__) && defined(__STDC_VERSION__) \ + && !defined(__APPLE__) + /* + * Because we support the 'z' modifier, which made its appearance in C99, + * we can't use __attribute__ with pre C99 dialects. + */ +# if __STDC_VERSION__ >= 199901L +# undef ossl_bio__attr__ +# define ossl_bio__attr__ __attribute__ +# if __GNUC__*10 + __GNUC_MINOR__ >= 44 +# define ossl_bio__printf__ __gnu_printf__ +# else +# define ossl_bio__printf__ __printf__ +# endif +# endif # endif int BIO_printf(BIO *bio, const char *format, ...) -__bio_h__attr__((__format__(__printf__, 2, 3))); +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 3))); int BIO_vprintf(BIO *bio, const char *format, va_list args) -__bio_h__attr__((__format__(__printf__, 2, 0))); +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 0))); int BIO_snprintf(char *buf, size_t n, const char *format, ...) -__bio_h__attr__((__format__(__printf__, 3, 4))); +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 4))); int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) -__bio_h__attr__((__format__(__printf__, 3, 0))); -# undef __bio_h__attr__ +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 0))); +# undef ossl_bio__attr__ +# undef ossl_bio__printf__ BIO_METHOD *BIO_meth_new(int type, const char *name); void BIO_meth_free(BIO_METHOD *biom); int (*BIO_meth_get_write(const BIO_METHOD *biom)) (BIO *, const char *, int); +int (*BIO_meth_get_write_ex(const BIO_METHOD *biom)) (BIO *, const char *, size_t, + size_t *); int BIO_meth_set_write(BIO_METHOD *biom, int (*write) (BIO *, const char *, int)); +int BIO_meth_set_write_ex(BIO_METHOD *biom, + int (*bwrite) (BIO *, const char *, size_t, size_t *)); int (*BIO_meth_get_read(const BIO_METHOD *biom)) (BIO *, char *, int); +int (*BIO_meth_get_read_ex(const BIO_METHOD *biom)) (BIO *, char *, size_t, size_t *); int BIO_meth_set_read(BIO_METHOD *biom, int (*read) (BIO *, char *, int)); +int BIO_meth_set_read_ex(BIO_METHOD *biom, + int (*bread) (BIO *, char *, size_t, size_t *)); int (*BIO_meth_get_puts(const BIO_METHOD *biom)) (BIO *, const char *); int BIO_meth_set_puts(BIO_METHOD *biom, int (*puts) (BIO *, const char *)); @@ -755,97 +798,6 @@ int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, long (*callback_ctrl) (BIO *, int, BIO_info_cb *)); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_BIO_strings(void); - -/* Error codes for the BIO functions. */ - -/* Function codes. */ -# define BIO_F_ACPT_STATE 100 -# define BIO_F_ADDR_STRINGS 134 -# define BIO_F_BIO_ACCEPT 101 -# define BIO_F_BIO_ACCEPT_EX 137 -# define BIO_F_BIO_ADDR_NEW 144 -# define BIO_F_BIO_CALLBACK_CTRL 131 -# define BIO_F_BIO_CONNECT 138 -# define BIO_F_BIO_CTRL 103 -# define BIO_F_BIO_GETS 104 -# define BIO_F_BIO_GET_HOST_IP 106 -# define BIO_F_BIO_GET_NEW_INDEX 102 -# define BIO_F_BIO_GET_PORT 107 -# define BIO_F_BIO_LISTEN 139 -# define BIO_F_BIO_LOOKUP 135 -# define BIO_F_BIO_MAKE_PAIR 121 -# define BIO_F_BIO_METH_NEW 146 -# define BIO_F_BIO_NEW 108 -# define BIO_F_BIO_NEW_FILE 109 -# define BIO_F_BIO_NEW_MEM_BUF 126 -# define BIO_F_BIO_NREAD 123 -# define BIO_F_BIO_NREAD0 124 -# define BIO_F_BIO_NWRITE 125 -# define BIO_F_BIO_NWRITE0 122 -# define BIO_F_BIO_PARSE_HOSTSERV 136 -# define BIO_F_BIO_PUTS 110 -# define BIO_F_BIO_READ 111 -# define BIO_F_BIO_SOCKET 140 -# define BIO_F_BIO_SOCKET_NBIO 142 -# define BIO_F_BIO_SOCK_INFO 141 -# define BIO_F_BIO_SOCK_INIT 112 -# define BIO_F_BIO_WRITE 113 -# define BIO_F_BUFFER_CTRL 114 -# define BIO_F_CONN_CTRL 127 -# define BIO_F_CONN_STATE 115 -# define BIO_F_DGRAM_SCTP_READ 132 -# define BIO_F_DGRAM_SCTP_WRITE 133 -# define BIO_F_FILE_CTRL 116 -# define BIO_F_FILE_READ 130 -# define BIO_F_LINEBUFFER_CTRL 129 -# define BIO_F_MEM_WRITE 117 -# define BIO_F_SSL_NEW 118 - -/* Reason codes. */ -# define BIO_R_ACCEPT_ERROR 100 -# define BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET 141 -# define BIO_R_AMBIGUOUS_HOST_OR_SERVICE 129 -# define BIO_R_BAD_FOPEN_MODE 101 -# define BIO_R_BROKEN_PIPE 124 -# define BIO_R_CONNECT_ERROR 103 -# define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 -# define BIO_R_GETSOCKNAME_ERROR 132 -# define BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS 133 -# define BIO_R_GETTING_SOCKTYPE 134 -# define BIO_R_INVALID_ARGUMENT 125 -# define BIO_R_INVALID_SOCKET 135 -# define BIO_R_IN_USE 123 -# define BIO_R_LISTEN_V6_ONLY 136 -# define BIO_R_LOOKUP_RETURNED_NOTHING 142 -# define BIO_R_MALFORMED_HOST_OR_SERVICE 130 -# define BIO_R_NBIO_CONNECT_ERROR 110 -# define BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED 143 -# define BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED 144 -# define BIO_R_NO_PORT_DEFINED 113 -# define BIO_R_NO_SUCH_FILE 128 -# define BIO_R_NULL_PARAMETER 115 -# define BIO_R_UNABLE_TO_BIND_SOCKET 117 -# define BIO_R_UNABLE_TO_CREATE_SOCKET 118 -# define BIO_R_UNABLE_TO_KEEPALIVE 137 -# define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 -# define BIO_R_UNABLE_TO_NODELAY 138 -# define BIO_R_UNABLE_TO_REUSEADDR 139 -# define BIO_R_UNAVAILABLE_IP_FAMILY 145 -# define BIO_R_UNINITIALIZED 120 -# define BIO_R_UNKNOWN_INFO_TYPE 140 -# define BIO_R_UNSUPPORTED_IP_FAMILY 146 -# define BIO_R_UNSUPPORTED_METHOD 121 -# define BIO_R_UNSUPPORTED_PROTOCOL_FAMILY 131 -# define BIO_R_WRITE_TO_READ_ONLY_BIO 126 -# define BIO_R_WSASTARTUP 122 - # ifdef __cplusplus } # endif diff --git a/libs/windows/include/openssl/bioerr.h b/libs/windows/include/openssl/bioerr.h new file mode 100644 index 00000000..f119a59c --- /dev/null +++ b/libs/windows/include/openssl/bioerr.h @@ -0,0 +1,120 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BIOERR_H +# define HEADER_BIOERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_BIO_strings(void); + +/* + * BIO function codes. + */ +# define BIO_F_ACPT_STATE 100 +# define BIO_F_ADDRINFO_WRAP 148 +# define BIO_F_ADDR_STRINGS 134 +# define BIO_F_BIO_ACCEPT 101 +# define BIO_F_BIO_ACCEPT_EX 137 +# define BIO_F_BIO_ACCEPT_NEW 152 +# define BIO_F_BIO_ADDR_NEW 144 +# define BIO_F_BIO_BIND 147 +# define BIO_F_BIO_CALLBACK_CTRL 131 +# define BIO_F_BIO_CONNECT 138 +# define BIO_F_BIO_CONNECT_NEW 153 +# define BIO_F_BIO_CTRL 103 +# define BIO_F_BIO_GETS 104 +# define BIO_F_BIO_GET_HOST_IP 106 +# define BIO_F_BIO_GET_NEW_INDEX 102 +# define BIO_F_BIO_GET_PORT 107 +# define BIO_F_BIO_LISTEN 139 +# define BIO_F_BIO_LOOKUP 135 +# define BIO_F_BIO_LOOKUP_EX 143 +# define BIO_F_BIO_MAKE_PAIR 121 +# define BIO_F_BIO_METH_NEW 146 +# define BIO_F_BIO_NEW 108 +# define BIO_F_BIO_NEW_DGRAM_SCTP 145 +# define BIO_F_BIO_NEW_FILE 109 +# define BIO_F_BIO_NEW_MEM_BUF 126 +# define BIO_F_BIO_NREAD 123 +# define BIO_F_BIO_NREAD0 124 +# define BIO_F_BIO_NWRITE 125 +# define BIO_F_BIO_NWRITE0 122 +# define BIO_F_BIO_PARSE_HOSTSERV 136 +# define BIO_F_BIO_PUTS 110 +# define BIO_F_BIO_READ 111 +# define BIO_F_BIO_READ_EX 105 +# define BIO_F_BIO_READ_INTERN 120 +# define BIO_F_BIO_SOCKET 140 +# define BIO_F_BIO_SOCKET_NBIO 142 +# define BIO_F_BIO_SOCK_INFO 141 +# define BIO_F_BIO_SOCK_INIT 112 +# define BIO_F_BIO_WRITE 113 +# define BIO_F_BIO_WRITE_EX 119 +# define BIO_F_BIO_WRITE_INTERN 128 +# define BIO_F_BUFFER_CTRL 114 +# define BIO_F_CONN_CTRL 127 +# define BIO_F_CONN_STATE 115 +# define BIO_F_DGRAM_SCTP_NEW 149 +# define BIO_F_DGRAM_SCTP_READ 132 +# define BIO_F_DGRAM_SCTP_WRITE 133 +# define BIO_F_DOAPR_OUTCH 150 +# define BIO_F_FILE_CTRL 116 +# define BIO_F_FILE_READ 130 +# define BIO_F_LINEBUFFER_CTRL 129 +# define BIO_F_LINEBUFFER_NEW 151 +# define BIO_F_MEM_WRITE 117 +# define BIO_F_NBIOF_NEW 154 +# define BIO_F_SLG_WRITE 155 +# define BIO_F_SSL_NEW 118 + +/* + * BIO reason codes. + */ +# define BIO_R_ACCEPT_ERROR 100 +# define BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET 141 +# define BIO_R_AMBIGUOUS_HOST_OR_SERVICE 129 +# define BIO_R_BAD_FOPEN_MODE 101 +# define BIO_R_BROKEN_PIPE 124 +# define BIO_R_CONNECT_ERROR 103 +# define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 +# define BIO_R_GETSOCKNAME_ERROR 132 +# define BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS 133 +# define BIO_R_GETTING_SOCKTYPE 134 +# define BIO_R_INVALID_ARGUMENT 125 +# define BIO_R_INVALID_SOCKET 135 +# define BIO_R_IN_USE 123 +# define BIO_R_LENGTH_TOO_LONG 102 +# define BIO_R_LISTEN_V6_ONLY 136 +# define BIO_R_LOOKUP_RETURNED_NOTHING 142 +# define BIO_R_MALFORMED_HOST_OR_SERVICE 130 +# define BIO_R_NBIO_CONNECT_ERROR 110 +# define BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED 143 +# define BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED 144 +# define BIO_R_NO_PORT_DEFINED 113 +# define BIO_R_NO_SUCH_FILE 128 +# define BIO_R_NULL_PARAMETER 115 +# define BIO_R_UNABLE_TO_BIND_SOCKET 117 +# define BIO_R_UNABLE_TO_CREATE_SOCKET 118 +# define BIO_R_UNABLE_TO_KEEPALIVE 137 +# define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 +# define BIO_R_UNABLE_TO_NODELAY 138 +# define BIO_R_UNABLE_TO_REUSEADDR 139 +# define BIO_R_UNAVAILABLE_IP_FAMILY 145 +# define BIO_R_UNINITIALIZED 120 +# define BIO_R_UNKNOWN_INFO_TYPE 140 +# define BIO_R_UNSUPPORTED_IP_FAMILY 146 +# define BIO_R_UNSUPPORTED_METHOD 121 +# define BIO_R_UNSUPPORTED_PROTOCOL_FAMILY 131 +# define BIO_R_WRITE_TO_READ_ONLY_BIO 126 +# define BIO_R_WSASTARTUP 122 + +#endif diff --git a/libs/windows/include/openssl/bn.h b/libs/windows/include/openssl/bn.h index 301edd52..8af05d00 100644 --- a/libs/windows/include/openssl/bn.h +++ b/libs/windows/include/openssl/bn.h @@ -1,5 +1,6 @@ /* * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -7,20 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * Portions of the attached software ("Contribution") are developed by - * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. - * - * The Contribution is licensed pursuant to the Eric Young open source - * license provided above. - * - * The binary polynomial arithmetic software is originally written by - * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. - * - */ - #ifndef HEADER_BN_H # define HEADER_BN_H @@ -31,6 +18,7 @@ # include # include # include +# include #ifdef __cplusplus extern "C" { @@ -217,8 +205,10 @@ void BN_CTX_start(BN_CTX *ctx); BIGNUM *BN_CTX_get(BN_CTX *ctx); void BN_CTX_end(BN_CTX *ctx); int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); -int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_priv_rand(BIGNUM *rnd, int bits, int top, int bottom); int BN_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_priv_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); int BN_num_bits(const BIGNUM *a); int BN_num_bits_word(BN_ULONG l); @@ -542,83 +532,6 @@ BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn); int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_BN_strings(void); - -/* Error codes for the BN functions. */ - -/* Function codes. */ -# define BN_F_BNRAND 127 -# define BN_F_BN_BLINDING_CONVERT_EX 100 -# define BN_F_BN_BLINDING_CREATE_PARAM 128 -# define BN_F_BN_BLINDING_INVERT_EX 101 -# define BN_F_BN_BLINDING_NEW 102 -# define BN_F_BN_BLINDING_UPDATE 103 -# define BN_F_BN_BN2DEC 104 -# define BN_F_BN_BN2HEX 105 -# define BN_F_BN_COMPUTE_WNAF 142 -# define BN_F_BN_CTX_GET 116 -# define BN_F_BN_CTX_NEW 106 -# define BN_F_BN_CTX_START 129 -# define BN_F_BN_DIV 107 -# define BN_F_BN_DIV_RECP 130 -# define BN_F_BN_EXP 123 -# define BN_F_BN_EXPAND_INTERNAL 120 -# define BN_F_BN_GENCB_NEW 143 -# define BN_F_BN_GENERATE_DSA_NONCE 140 -# define BN_F_BN_GENERATE_PRIME_EX 141 -# define BN_F_BN_GF2M_MOD 131 -# define BN_F_BN_GF2M_MOD_EXP 132 -# define BN_F_BN_GF2M_MOD_MUL 133 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 -# define BN_F_BN_GF2M_MOD_SQR 136 -# define BN_F_BN_GF2M_MOD_SQRT 137 -# define BN_F_BN_LSHIFT 145 -# define BN_F_BN_MOD_EXP2_MONT 118 -# define BN_F_BN_MOD_EXP_MONT 109 -# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 -# define BN_F_BN_MOD_EXP_MONT_WORD 117 -# define BN_F_BN_MOD_EXP_RECP 125 -# define BN_F_BN_MOD_EXP_SIMPLE 126 -# define BN_F_BN_MOD_INVERSE 110 -# define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 -# define BN_F_BN_MOD_LSHIFT_QUICK 119 -# define BN_F_BN_MOD_SQRT 121 -# define BN_F_BN_MPI2BN 112 -# define BN_F_BN_NEW 113 -# define BN_F_BN_RAND 114 -# define BN_F_BN_RAND_RANGE 122 -# define BN_F_BN_RSHIFT 146 -# define BN_F_BN_SET_WORDS 144 -# define BN_F_BN_USUB 115 - -/* Reason codes. */ -# define BN_R_ARG2_LT_ARG3 100 -# define BN_R_BAD_RECIPROCAL 101 -# define BN_R_BIGNUM_TOO_LONG 114 -# define BN_R_BITS_TOO_SMALL 118 -# define BN_R_CALLED_WITH_EVEN_MODULUS 102 -# define BN_R_DIV_BY_ZERO 103 -# define BN_R_ENCODING_ERROR 104 -# define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 -# define BN_R_INPUT_NOT_REDUCED 110 -# define BN_R_INVALID_LENGTH 106 -# define BN_R_INVALID_RANGE 115 -# define BN_R_INVALID_SHIFT 119 -# define BN_R_NOT_A_SQUARE 111 -# define BN_R_NOT_INITIALIZED 107 -# define BN_R_NO_INVERSE 108 -# define BN_R_NO_SOLUTION 116 -# define BN_R_PRIVATE_KEY_TOO_LARGE 117 -# define BN_R_P_IS_NOT_PRIME 112 -# define BN_R_TOO_MANY_ITERATIONS 113 -# define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109 # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/bnerr.h b/libs/windows/include/openssl/bnerr.h new file mode 100644 index 00000000..8a022cc0 --- /dev/null +++ b/libs/windows/include/openssl/bnerr.h @@ -0,0 +1,96 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BNERR_H +# define HEADER_BNERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_BN_strings(void); + +/* + * BN function codes. + */ +# define BN_F_BNRAND 127 +# define BN_F_BNRAND_RANGE 138 +# define BN_F_BN_BLINDING_CONVERT_EX 100 +# define BN_F_BN_BLINDING_CREATE_PARAM 128 +# define BN_F_BN_BLINDING_INVERT_EX 101 +# define BN_F_BN_BLINDING_NEW 102 +# define BN_F_BN_BLINDING_UPDATE 103 +# define BN_F_BN_BN2DEC 104 +# define BN_F_BN_BN2HEX 105 +# define BN_F_BN_COMPUTE_WNAF 142 +# define BN_F_BN_CTX_GET 116 +# define BN_F_BN_CTX_NEW 106 +# define BN_F_BN_CTX_START 129 +# define BN_F_BN_DIV 107 +# define BN_F_BN_DIV_RECP 130 +# define BN_F_BN_EXP 123 +# define BN_F_BN_EXPAND_INTERNAL 120 +# define BN_F_BN_GENCB_NEW 143 +# define BN_F_BN_GENERATE_DSA_NONCE 140 +# define BN_F_BN_GENERATE_PRIME_EX 141 +# define BN_F_BN_GF2M_MOD 131 +# define BN_F_BN_GF2M_MOD_EXP 132 +# define BN_F_BN_GF2M_MOD_MUL 133 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 +# define BN_F_BN_GF2M_MOD_SQR 136 +# define BN_F_BN_GF2M_MOD_SQRT 137 +# define BN_F_BN_LSHIFT 145 +# define BN_F_BN_MOD_EXP2_MONT 118 +# define BN_F_BN_MOD_EXP_MONT 109 +# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 +# define BN_F_BN_MOD_EXP_MONT_WORD 117 +# define BN_F_BN_MOD_EXP_RECP 125 +# define BN_F_BN_MOD_EXP_SIMPLE 126 +# define BN_F_BN_MOD_INVERSE 110 +# define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 +# define BN_F_BN_MOD_LSHIFT_QUICK 119 +# define BN_F_BN_MOD_SQRT 121 +# define BN_F_BN_MONT_CTX_NEW 149 +# define BN_F_BN_MPI2BN 112 +# define BN_F_BN_NEW 113 +# define BN_F_BN_POOL_GET 147 +# define BN_F_BN_RAND 114 +# define BN_F_BN_RAND_RANGE 122 +# define BN_F_BN_RECP_CTX_NEW 150 +# define BN_F_BN_RSHIFT 146 +# define BN_F_BN_SET_WORDS 144 +# define BN_F_BN_STACK_PUSH 148 +# define BN_F_BN_USUB 115 + +/* + * BN reason codes. + */ +# define BN_R_ARG2_LT_ARG3 100 +# define BN_R_BAD_RECIPROCAL 101 +# define BN_R_BIGNUM_TOO_LONG 114 +# define BN_R_BITS_TOO_SMALL 118 +# define BN_R_CALLED_WITH_EVEN_MODULUS 102 +# define BN_R_DIV_BY_ZERO 103 +# define BN_R_ENCODING_ERROR 104 +# define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 +# define BN_R_INPUT_NOT_REDUCED 110 +# define BN_R_INVALID_LENGTH 106 +# define BN_R_INVALID_RANGE 115 +# define BN_R_INVALID_SHIFT 119 +# define BN_R_NOT_A_SQUARE 111 +# define BN_R_NOT_INITIALIZED 107 +# define BN_R_NO_INVERSE 108 +# define BN_R_NO_SOLUTION 116 +# define BN_R_PRIVATE_KEY_TOO_LARGE 117 +# define BN_R_P_IS_NOT_PRIME 112 +# define BN_R_TOO_MANY_ITERATIONS 113 +# define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109 + +#endif diff --git a/libs/windows/include/openssl/buffer.h b/libs/windows/include/openssl/buffer.h index 35160b4f..d2765766 100644 --- a/libs/windows/include/openssl/buffer.h +++ b/libs/windows/include/openssl/buffer.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -14,6 +14,7 @@ # ifndef HEADER_CRYPTO_H # include # endif +# include #ifdef __cplusplus @@ -50,22 +51,6 @@ size_t BUF_MEM_grow(BUF_MEM *str, size_t len); size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len); void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_BUF_strings(void); - -/* Error codes for the BUF functions. */ - -/* Function codes. */ -# define BUF_F_BUF_MEM_GROW 100 -# define BUF_F_BUF_MEM_GROW_CLEAN 105 -# define BUF_F_BUF_MEM_NEW 101 - -/* Reason codes. */ # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/buffererr.h b/libs/windows/include/openssl/buffererr.h new file mode 100644 index 00000000..3aee1323 --- /dev/null +++ b/libs/windows/include/openssl/buffererr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BUFERR_H +# define HEADER_BUFERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_BUF_strings(void); + +/* + * BUF function codes. + */ +# define BUF_F_BUF_MEM_GROW 100 +# define BUF_F_BUF_MEM_GROW_CLEAN 105 +# define BUF_F_BUF_MEM_NEW 101 + +/* + * BUF reason codes. + */ + +#endif diff --git a/libs/windows/include/openssl/cms.h b/libs/windows/include/openssl/cms.h index 7e534e0d..ddf37e56 100644 --- a/libs/windows/include/openssl/cms.h +++ b/libs/windows/include/openssl/cms.h @@ -1,5 +1,5 @@ /* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -15,6 +15,7 @@ # ifndef OPENSSL_NO_CMS # include # include +# include # ifdef __cplusplus extern "C" { # endif @@ -329,181 +330,10 @@ int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg, ASN1_OCTET_STRING *ukm, int keylen); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_CMS_strings(void); - -/* Error codes for the CMS functions. */ - -/* Function codes. */ -# define CMS_F_CHECK_CONTENT 99 -# define CMS_F_CMS_ADD0_CERT 164 -# define CMS_F_CMS_ADD0_RECIPIENT_KEY 100 -# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 165 -# define CMS_F_CMS_ADD1_RECEIPTREQUEST 158 -# define CMS_F_CMS_ADD1_RECIPIENT_CERT 101 -# define CMS_F_CMS_ADD1_SIGNER 102 -# define CMS_F_CMS_ADD1_SIGNINGTIME 103 -# define CMS_F_CMS_COMPRESS 104 -# define CMS_F_CMS_COMPRESSEDDATA_CREATE 105 -# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 106 -# define CMS_F_CMS_COPY_CONTENT 107 -# define CMS_F_CMS_COPY_MESSAGEDIGEST 108 -# define CMS_F_CMS_DATA 109 -# define CMS_F_CMS_DATAFINAL 110 -# define CMS_F_CMS_DATAINIT 111 -# define CMS_F_CMS_DECRYPT 112 -# define CMS_F_CMS_DECRYPT_SET1_KEY 113 -# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 166 -# define CMS_F_CMS_DECRYPT_SET1_PKEY 114 -# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 115 -# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 116 -# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 117 -# define CMS_F_CMS_DIGEST_VERIFY 118 -# define CMS_F_CMS_ENCODE_RECEIPT 161 -# define CMS_F_CMS_ENCRYPT 119 -# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 120 -# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 121 -# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 122 -# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 123 -# define CMS_F_CMS_ENVELOPEDDATA_CREATE 124 -# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125 -# define CMS_F_CMS_ENVELOPED_DATA_INIT 126 -# define CMS_F_CMS_ENV_ASN1_CTRL 171 -# define CMS_F_CMS_FINAL 127 -# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128 -# define CMS_F_CMS_GET0_CONTENT 129 -# define CMS_F_CMS_GET0_ECONTENT_TYPE 130 -# define CMS_F_CMS_GET0_ENVELOPED 131 -# define CMS_F_CMS_GET0_REVOCATION_CHOICES 132 -# define CMS_F_CMS_GET0_SIGNED 133 -# define CMS_F_CMS_MSGSIGDIGEST_ADD1 162 -# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159 -# define CMS_F_CMS_RECEIPT_VERIFY 160 -# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134 -# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 169 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 178 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 175 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 173 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 172 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 174 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 138 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 139 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 140 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 141 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 142 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 143 -# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 167 -# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145 -# define CMS_F_CMS_SD_ASN1_CTRL 170 -# define CMS_F_CMS_SET1_IAS 176 -# define CMS_F_CMS_SET1_KEYID 177 -# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146 -# define CMS_F_CMS_SET_DETACHED 147 -# define CMS_F_CMS_SIGN 148 -# define CMS_F_CMS_SIGNED_DATA_INIT 149 -# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 150 -# define CMS_F_CMS_SIGNERINFO_SIGN 151 -# define CMS_F_CMS_SIGNERINFO_VERIFY 152 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 153 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 154 -# define CMS_F_CMS_SIGN_RECEIPT 163 -# define CMS_F_CMS_STREAM 155 -# define CMS_F_CMS_UNCOMPRESS 156 -# define CMS_F_CMS_VERIFY 157 - -/* Reason codes. */ -# define CMS_R_ADD_SIGNER_ERROR 99 -# define CMS_R_CERTIFICATE_ALREADY_PRESENT 175 -# define CMS_R_CERTIFICATE_HAS_NO_KEYID 160 -# define CMS_R_CERTIFICATE_VERIFY_ERROR 100 -# define CMS_R_CIPHER_INITIALISATION_ERROR 101 -# define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102 -# define CMS_R_CMS_DATAFINAL_ERROR 103 -# define CMS_R_CMS_LIB 104 -# define CMS_R_CONTENTIDENTIFIER_MISMATCH 170 -# define CMS_R_CONTENT_NOT_FOUND 105 -# define CMS_R_CONTENT_TYPE_MISMATCH 171 -# define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA 106 -# define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA 107 -# define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA 108 -# define CMS_R_CONTENT_VERIFY_ERROR 109 -# define CMS_R_CTRL_ERROR 110 -# define CMS_R_CTRL_FAILURE 111 -# define CMS_R_DECRYPT_ERROR 112 -# define CMS_R_ERROR_GETTING_PUBLIC_KEY 113 -# define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE 114 -# define CMS_R_ERROR_SETTING_KEY 115 -# define CMS_R_ERROR_SETTING_RECIPIENTINFO 116 -# define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH 117 -# define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER 176 -# define CMS_R_INVALID_KEY_LENGTH 118 -# define CMS_R_MD_BIO_INIT_ERROR 119 -# define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH 120 -# define CMS_R_MESSAGEDIGEST_WRONG_LENGTH 121 -# define CMS_R_MSGSIGDIGEST_ERROR 172 -# define CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE 162 -# define CMS_R_MSGSIGDIGEST_WRONG_LENGTH 163 -# define CMS_R_NEED_ONE_SIGNER 164 -# define CMS_R_NOT_A_SIGNED_RECEIPT 165 -# define CMS_R_NOT_ENCRYPTED_DATA 122 -# define CMS_R_NOT_KEK 123 -# define CMS_R_NOT_KEY_AGREEMENT 181 -# define CMS_R_NOT_KEY_TRANSPORT 124 -# define CMS_R_NOT_PWRI 177 -# define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 125 -# define CMS_R_NO_CIPHER 126 -# define CMS_R_NO_CONTENT 127 -# define CMS_R_NO_CONTENT_TYPE 173 -# define CMS_R_NO_DEFAULT_DIGEST 128 -# define CMS_R_NO_DIGEST_SET 129 -# define CMS_R_NO_KEY 130 -# define CMS_R_NO_KEY_OR_CERT 174 -# define CMS_R_NO_MATCHING_DIGEST 131 -# define CMS_R_NO_MATCHING_RECIPIENT 132 -# define CMS_R_NO_MATCHING_SIGNATURE 166 -# define CMS_R_NO_MSGSIGDIGEST 167 -# define CMS_R_NO_PASSWORD 178 -# define CMS_R_NO_PRIVATE_KEY 133 -# define CMS_R_NO_PUBLIC_KEY 134 -# define CMS_R_NO_RECEIPT_REQUEST 168 -# define CMS_R_NO_SIGNERS 135 -# define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 136 -# define CMS_R_RECEIPT_DECODE_ERROR 169 -# define CMS_R_RECIPIENT_ERROR 137 -# define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND 138 -# define CMS_R_SIGNFINAL_ERROR 139 -# define CMS_R_SMIME_TEXT_ERROR 140 -# define CMS_R_STORE_INIT_ERROR 141 -# define CMS_R_TYPE_NOT_COMPRESSED_DATA 142 -# define CMS_R_TYPE_NOT_DATA 143 -# define CMS_R_TYPE_NOT_DIGESTED_DATA 144 -# define CMS_R_TYPE_NOT_ENCRYPTED_DATA 145 -# define CMS_R_TYPE_NOT_ENVELOPED_DATA 146 -# define CMS_R_UNABLE_TO_FINALIZE_CONTEXT 147 -# define CMS_R_UNKNOWN_CIPHER 148 -# define CMS_R_UNKNOWN_DIGEST_ALGORIHM 149 -# define CMS_R_UNKNOWN_ID 150 -# define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151 -# define CMS_R_UNSUPPORTED_CONTENT_TYPE 152 -# define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153 -# define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179 -# define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154 -# define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE 155 -# define CMS_R_UNSUPPORTED_TYPE 156 -# define CMS_R_UNWRAP_ERROR 157 -# define CMS_R_UNWRAP_FAILURE 180 -# define CMS_R_VERIFICATION_FAILURE 158 -# define CMS_R_WRAP_ERROR 159 +/* Backward compatibility for spelling errors. */ +# define CMS_R_UNKNOWN_DIGEST_ALGORITM CMS_R_UNKNOWN_DIGEST_ALGORITHM +# define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE \ + CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/cmserr.h b/libs/windows/include/openssl/cmserr.h new file mode 100644 index 00000000..3f8ae26d --- /dev/null +++ b/libs/windows/include/openssl/cmserr.h @@ -0,0 +1,196 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CMSERR_H +# define HEADER_CMSERR_H + +# include + +# ifndef OPENSSL_NO_CMS + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_CMS_strings(void); + +/* + * CMS function codes. + */ +# define CMS_F_CHECK_CONTENT 99 +# define CMS_F_CMS_ADD0_CERT 164 +# define CMS_F_CMS_ADD0_RECIPIENT_KEY 100 +# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 165 +# define CMS_F_CMS_ADD1_RECEIPTREQUEST 158 +# define CMS_F_CMS_ADD1_RECIPIENT_CERT 101 +# define CMS_F_CMS_ADD1_SIGNER 102 +# define CMS_F_CMS_ADD1_SIGNINGTIME 103 +# define CMS_F_CMS_COMPRESS 104 +# define CMS_F_CMS_COMPRESSEDDATA_CREATE 105 +# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 106 +# define CMS_F_CMS_COPY_CONTENT 107 +# define CMS_F_CMS_COPY_MESSAGEDIGEST 108 +# define CMS_F_CMS_DATA 109 +# define CMS_F_CMS_DATAFINAL 110 +# define CMS_F_CMS_DATAINIT 111 +# define CMS_F_CMS_DECRYPT 112 +# define CMS_F_CMS_DECRYPT_SET1_KEY 113 +# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 166 +# define CMS_F_CMS_DECRYPT_SET1_PKEY 114 +# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 115 +# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 116 +# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 117 +# define CMS_F_CMS_DIGEST_VERIFY 118 +# define CMS_F_CMS_ENCODE_RECEIPT 161 +# define CMS_F_CMS_ENCRYPT 119 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT 179 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 120 +# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 121 +# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 122 +# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 123 +# define CMS_F_CMS_ENVELOPEDDATA_CREATE 124 +# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125 +# define CMS_F_CMS_ENVELOPED_DATA_INIT 126 +# define CMS_F_CMS_ENV_ASN1_CTRL 171 +# define CMS_F_CMS_FINAL 127 +# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128 +# define CMS_F_CMS_GET0_CONTENT 129 +# define CMS_F_CMS_GET0_ECONTENT_TYPE 130 +# define CMS_F_CMS_GET0_ENVELOPED 131 +# define CMS_F_CMS_GET0_REVOCATION_CHOICES 132 +# define CMS_F_CMS_GET0_SIGNED 133 +# define CMS_F_CMS_MSGSIGDIGEST_ADD1 162 +# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159 +# define CMS_F_CMS_RECEIPT_VERIFY 160 +# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134 +# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 169 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 178 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 175 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 173 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 172 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 174 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 138 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 139 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 140 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 141 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 142 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 143 +# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 167 +# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145 +# define CMS_F_CMS_SD_ASN1_CTRL 170 +# define CMS_F_CMS_SET1_IAS 176 +# define CMS_F_CMS_SET1_KEYID 177 +# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146 +# define CMS_F_CMS_SET_DETACHED 147 +# define CMS_F_CMS_SIGN 148 +# define CMS_F_CMS_SIGNED_DATA_INIT 149 +# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 150 +# define CMS_F_CMS_SIGNERINFO_SIGN 151 +# define CMS_F_CMS_SIGNERINFO_VERIFY 152 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 153 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 154 +# define CMS_F_CMS_SIGN_RECEIPT 163 +# define CMS_F_CMS_STREAM 155 +# define CMS_F_CMS_UNCOMPRESS 156 +# define CMS_F_CMS_VERIFY 157 +# define CMS_F_KEK_UNWRAP_KEY 180 + +/* + * CMS reason codes. + */ +# define CMS_R_ADD_SIGNER_ERROR 99 +# define CMS_R_CERTIFICATE_ALREADY_PRESENT 175 +# define CMS_R_CERTIFICATE_HAS_NO_KEYID 160 +# define CMS_R_CERTIFICATE_VERIFY_ERROR 100 +# define CMS_R_CIPHER_INITIALISATION_ERROR 101 +# define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102 +# define CMS_R_CMS_DATAFINAL_ERROR 103 +# define CMS_R_CMS_LIB 104 +# define CMS_R_CONTENTIDENTIFIER_MISMATCH 170 +# define CMS_R_CONTENT_NOT_FOUND 105 +# define CMS_R_CONTENT_TYPE_MISMATCH 171 +# define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA 106 +# define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA 107 +# define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA 108 +# define CMS_R_CONTENT_VERIFY_ERROR 109 +# define CMS_R_CTRL_ERROR 110 +# define CMS_R_CTRL_FAILURE 111 +# define CMS_R_DECRYPT_ERROR 112 +# define CMS_R_ERROR_GETTING_PUBLIC_KEY 113 +# define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE 114 +# define CMS_R_ERROR_SETTING_KEY 115 +# define CMS_R_ERROR_SETTING_RECIPIENTINFO 116 +# define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH 117 +# define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER 176 +# define CMS_R_INVALID_KEY_LENGTH 118 +# define CMS_R_MD_BIO_INIT_ERROR 119 +# define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH 120 +# define CMS_R_MESSAGEDIGEST_WRONG_LENGTH 121 +# define CMS_R_MSGSIGDIGEST_ERROR 172 +# define CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE 162 +# define CMS_R_MSGSIGDIGEST_WRONG_LENGTH 163 +# define CMS_R_NEED_ONE_SIGNER 164 +# define CMS_R_NOT_A_SIGNED_RECEIPT 165 +# define CMS_R_NOT_ENCRYPTED_DATA 122 +# define CMS_R_NOT_KEK 123 +# define CMS_R_NOT_KEY_AGREEMENT 181 +# define CMS_R_NOT_KEY_TRANSPORT 124 +# define CMS_R_NOT_PWRI 177 +# define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 125 +# define CMS_R_NO_CIPHER 126 +# define CMS_R_NO_CONTENT 127 +# define CMS_R_NO_CONTENT_TYPE 173 +# define CMS_R_NO_DEFAULT_DIGEST 128 +# define CMS_R_NO_DIGEST_SET 129 +# define CMS_R_NO_KEY 130 +# define CMS_R_NO_KEY_OR_CERT 174 +# define CMS_R_NO_MATCHING_DIGEST 131 +# define CMS_R_NO_MATCHING_RECIPIENT 132 +# define CMS_R_NO_MATCHING_SIGNATURE 166 +# define CMS_R_NO_MSGSIGDIGEST 167 +# define CMS_R_NO_PASSWORD 178 +# define CMS_R_NO_PRIVATE_KEY 133 +# define CMS_R_NO_PUBLIC_KEY 134 +# define CMS_R_NO_RECEIPT_REQUEST 168 +# define CMS_R_NO_SIGNERS 135 +# define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 136 +# define CMS_R_RECEIPT_DECODE_ERROR 169 +# define CMS_R_RECIPIENT_ERROR 137 +# define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND 138 +# define CMS_R_SIGNFINAL_ERROR 139 +# define CMS_R_SMIME_TEXT_ERROR 140 +# define CMS_R_STORE_INIT_ERROR 141 +# define CMS_R_TYPE_NOT_COMPRESSED_DATA 142 +# define CMS_R_TYPE_NOT_DATA 143 +# define CMS_R_TYPE_NOT_DIGESTED_DATA 144 +# define CMS_R_TYPE_NOT_ENCRYPTED_DATA 145 +# define CMS_R_TYPE_NOT_ENVELOPED_DATA 146 +# define CMS_R_UNABLE_TO_FINALIZE_CONTEXT 147 +# define CMS_R_UNKNOWN_CIPHER 148 +# define CMS_R_UNKNOWN_DIGEST_ALGORITHM 149 +# define CMS_R_UNKNOWN_ID 150 +# define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151 +# define CMS_R_UNSUPPORTED_CONTENT_TYPE 152 +# define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153 +# define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179 +# define CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE 155 +# define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154 +# define CMS_R_UNSUPPORTED_TYPE 156 +# define CMS_R_UNWRAP_ERROR 157 +# define CMS_R_UNWRAP_FAILURE 180 +# define CMS_R_VERIFICATION_FAILURE 158 +# define CMS_R_WRAP_ERROR 159 + +# endif +#endif diff --git a/libs/windows/include/openssl/comp.h b/libs/windows/include/openssl/comp.h index 260ff1e0..d814d3cf 100644 --- a/libs/windows/include/openssl/comp.h +++ b/libs/windows/include/openssl/comp.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -14,6 +14,7 @@ # ifndef OPENSSL_NO_COMP # include +# include # ifdef __cplusplus extern "C" { # endif @@ -44,26 +45,6 @@ const BIO_METHOD *BIO_f_zlib(void); # endif # endif -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_COMP_strings(void); - -/* Error codes for the COMP functions. */ - -/* Function codes. */ -# define COMP_F_BIO_ZLIB_FLUSH 99 -# define COMP_F_BIO_ZLIB_NEW 100 -# define COMP_F_BIO_ZLIB_READ 101 -# define COMP_F_BIO_ZLIB_WRITE 102 - -/* Reason codes. */ -# define COMP_R_ZLIB_DEFLATE_ERROR 99 -# define COMP_R_ZLIB_INFLATE_ERROR 100 -# define COMP_R_ZLIB_NOT_SUPPORTED 101 # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/comperr.h b/libs/windows/include/openssl/comperr.h new file mode 100644 index 00000000..edea63a6 --- /dev/null +++ b/libs/windows/include/openssl/comperr.h @@ -0,0 +1,40 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_COMPERR_H +# define HEADER_COMPERR_H + +# include + +# ifndef OPENSSL_NO_COMP + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_COMP_strings(void); + +/* + * COMP function codes. + */ +# define COMP_F_BIO_ZLIB_FLUSH 99 +# define COMP_F_BIO_ZLIB_NEW 100 +# define COMP_F_BIO_ZLIB_READ 101 +# define COMP_F_BIO_ZLIB_WRITE 102 +# define COMP_F_COMP_CTX_NEW 103 + +/* + * COMP reason codes. + */ +# define COMP_R_ZLIB_DEFLATE_ERROR 99 +# define COMP_R_ZLIB_INFLATE_ERROR 100 +# define COMP_R_ZLIB_NOT_SUPPORTED 101 + +# endif +#endif diff --git a/libs/windows/include/openssl/conf.h b/libs/windows/include/openssl/conf.h index e0539e31..7336cd2f 100644 --- a/libs/windows/include/openssl/conf.h +++ b/libs/windows/include/openssl/conf.h @@ -12,11 +12,10 @@ # include # include -# include # include # include - # include +# include #ifdef __cplusplus extern "C" { @@ -162,59 +161,6 @@ int CONF_parse_list(const char *list, int sep, int nospc, void OPENSSL_load_builtin_modules(void); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_CONF_strings(void); - -/* Error codes for the CONF functions. */ - -/* Function codes. */ -# define CONF_F_CONF_DUMP_FP 104 -# define CONF_F_CONF_LOAD 100 -# define CONF_F_CONF_LOAD_FP 103 -# define CONF_F_CONF_PARSE_LIST 119 -# define CONF_F_DEF_LOAD 120 -# define CONF_F_DEF_LOAD_BIO 121 -# define CONF_F_MODULE_INIT 115 -# define CONF_F_MODULE_LOAD_DSO 117 -# define CONF_F_MODULE_RUN 118 -# define CONF_F_NCONF_DUMP_BIO 105 -# define CONF_F_NCONF_DUMP_FP 106 -# define CONF_F_NCONF_GET_NUMBER_E 112 -# define CONF_F_NCONF_GET_SECTION 108 -# define CONF_F_NCONF_GET_STRING 109 -# define CONF_F_NCONF_LOAD 113 -# define CONF_F_NCONF_LOAD_BIO 110 -# define CONF_F_NCONF_LOAD_FP 114 -# define CONF_F_NCONF_NEW 111 -# define CONF_F_SSL_MODULE_INIT 123 -# define CONF_F_STR_COPY 101 - -/* Reason codes. */ -# define CONF_R_ERROR_LOADING_DSO 110 -# define CONF_R_LIST_CANNOT_BE_NULL 115 -# define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 -# define CONF_R_MISSING_EQUAL_SIGN 101 -# define CONF_R_MISSING_INIT_FUNCTION 112 -# define CONF_R_MODULE_INITIALIZATION_ERROR 109 -# define CONF_R_NO_CLOSE_BRACE 102 -# define CONF_R_NO_CONF 105 -# define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 -# define CONF_R_NO_SECTION 107 -# define CONF_R_NO_SUCH_FILE 114 -# define CONF_R_NO_VALUE 108 -# define CONF_R_SSL_COMMAND_SECTION_EMPTY 117 -# define CONF_R_SSL_COMMAND_SECTION_NOT_FOUND 118 -# define CONF_R_SSL_SECTION_EMPTY 119 -# define CONF_R_SSL_SECTION_NOT_FOUND 120 -# define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 -# define CONF_R_UNKNOWN_MODULE_NAME 113 -# define CONF_R_VARIABLE_EXPANSION_TOO_LONG 116 -# define CONF_R_VARIABLE_HAS_NO_VALUE 104 # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/conferr.h b/libs/windows/include/openssl/conferr.h new file mode 100644 index 00000000..d1c92f45 --- /dev/null +++ b/libs/windows/include/openssl/conferr.h @@ -0,0 +1,72 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CONFERR_H +# define HEADER_CONFERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_CONF_strings(void); + +/* + * CONF function codes. + */ +# define CONF_F_CONF_DUMP_FP 104 +# define CONF_F_CONF_LOAD 100 +# define CONF_F_CONF_LOAD_FP 103 +# define CONF_F_CONF_PARSE_LIST 119 +# define CONF_F_DEF_LOAD 120 +# define CONF_F_DEF_LOAD_BIO 121 +# define CONF_F_GET_NEXT_FILE 107 +# define CONF_F_MODULE_ADD 122 +# define CONF_F_MODULE_INIT 115 +# define CONF_F_MODULE_LOAD_DSO 117 +# define CONF_F_MODULE_RUN 118 +# define CONF_F_NCONF_DUMP_BIO 105 +# define CONF_F_NCONF_DUMP_FP 106 +# define CONF_F_NCONF_GET_NUMBER_E 112 +# define CONF_F_NCONF_GET_SECTION 108 +# define CONF_F_NCONF_GET_STRING 109 +# define CONF_F_NCONF_LOAD 113 +# define CONF_F_NCONF_LOAD_BIO 110 +# define CONF_F_NCONF_LOAD_FP 114 +# define CONF_F_NCONF_NEW 111 +# define CONF_F_PROCESS_INCLUDE 116 +# define CONF_F_SSL_MODULE_INIT 123 +# define CONF_F_STR_COPY 101 + +/* + * CONF reason codes. + */ +# define CONF_R_ERROR_LOADING_DSO 110 +# define CONF_R_LIST_CANNOT_BE_NULL 115 +# define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 +# define CONF_R_MISSING_EQUAL_SIGN 101 +# define CONF_R_MISSING_INIT_FUNCTION 112 +# define CONF_R_MODULE_INITIALIZATION_ERROR 109 +# define CONF_R_NO_CLOSE_BRACE 102 +# define CONF_R_NO_CONF 105 +# define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 +# define CONF_R_NO_SECTION 107 +# define CONF_R_NO_SUCH_FILE 114 +# define CONF_R_NO_VALUE 108 +# define CONF_R_NUMBER_TOO_LARGE 121 +# define CONF_R_RECURSIVE_DIRECTORY_INCLUDE 111 +# define CONF_R_SSL_COMMAND_SECTION_EMPTY 117 +# define CONF_R_SSL_COMMAND_SECTION_NOT_FOUND 118 +# define CONF_R_SSL_SECTION_EMPTY 119 +# define CONF_R_SSL_SECTION_NOT_FOUND 120 +# define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 +# define CONF_R_UNKNOWN_MODULE_NAME 113 +# define CONF_R_VARIABLE_EXPANSION_TOO_LONG 116 +# define CONF_R_VARIABLE_HAS_NO_VALUE 104 + +#endif diff --git a/libs/windows/include/openssl/crypto.h b/libs/windows/include/openssl/crypto.h index fa3f12af..7d0b5262 100644 --- a/libs/windows/include/openssl/crypto.h +++ b/libs/windows/include/openssl/crypto.h @@ -1,5 +1,6 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -7,12 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECDH support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - #ifndef HEADER_CRYPTO_H # define HEADER_CRYPTO_H @@ -25,11 +20,11 @@ # include # endif -# include # include # include # include # include +# include # ifdef CHARSET_EBCDIC # include @@ -110,15 +105,12 @@ DEFINE_STACK_OF(void) # define CRYPTO_EX_INDEX_UI 11 # define CRYPTO_EX_INDEX_BIO 12 # define CRYPTO_EX_INDEX_APP 13 -# define CRYPTO_EX_INDEX__COUNT 14 +# define CRYPTO_EX_INDEX_UI_METHOD 14 +# define CRYPTO_EX_INDEX_DRBG 15 +# define CRYPTO_EX_INDEX__COUNT 16 -/* - * This is the default callbacks, but we can have others as well: this is - * needed in Win32 where the application malloc and the library malloc may - * not be the same. - */ -#define OPENSSL_malloc_init() \ - CRYPTO_set_mem_functions(CRYPTO_malloc, CRYPTO_realloc, CRYPTO_free) +/* No longer needed, so this is a no-op */ +#define OPENSSL_malloc_init() while(0) continue int CRYPTO_mem_ctrl(int mode); @@ -211,7 +203,7 @@ void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); * The old locking functions have been removed completely without compatibility * macros. This is because the old functions either could not properly report * errors, or the returned error values were not clearly documented. - * Replacing the locking functions with with no-ops would cause race condition + * Replacing the locking functions with no-ops would cause race condition * issues in the affected applications. It is far better for them to fail at * compile time. * On the other hand, the locking callbacks are no longer used. Consequently, @@ -303,6 +295,7 @@ void OPENSSL_cleanse(void *ptr, size_t len); CRYPTO_mem_debug_pop() int CRYPTO_mem_debug_push(const char *info, const char *file, int line); int CRYPTO_mem_debug_pop(void); +void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); /*- * Debugging functions (enabled by CRYPTO_set_mem_debug(1)) @@ -317,6 +310,8 @@ void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num, int flag, void CRYPTO_mem_debug_free(void *addr, int flag, const char *file, int line); +int CRYPTO_mem_leaks_cb(int (*cb) (const char *str, size_t len, void *u), + void *u); # ifndef OPENSSL_NO_STDIO int CRYPTO_mem_leaks_fp(FILE *); # endif @@ -337,6 +332,11 @@ int FIPS_mode(void); int FIPS_mode_set(int r); void OPENSSL_init(void); +# ifdef OPENSSL_SYS_UNIX +void OPENSSL_fork_prepare(void); +void OPENSSL_fork_parent(void); +void OPENSSL_fork_child(void); +# endif struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result); int OPENSSL_gmtime_adj(struct tm *tm, int offset_day, long offset_sec); @@ -350,9 +350,7 @@ int OPENSSL_gmtime_diff(int *pday, int *psec, * into a defined order as the return value when a != b is undefined, other * than to be non-zero. */ -int CRYPTO_memcmp(const volatile void * volatile in_a, - const volatile void * volatile in_b, - size_t len); +int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); /* Standard initialisation options */ # define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L @@ -372,8 +370,9 @@ int CRYPTO_memcmp(const volatile void * volatile in_a, # define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L # define OPENSSL_INIT_ENGINE_AFALG 0x00008000L /* OPENSSL_INIT_ZLIB 0x00010000L */ -/* currently unused 0x00020000L */ +# define OPENSSL_INIT_ATFORK 0x00020000L /* OPENSSL_INIT_BASE_ONLY 0x00040000L */ +# define OPENSSL_INIT_NO_ATEXIT 0x00080000L /* OPENSSL_INIT flag range 0xfff00000 reserved for OPENSSL_init_ssl() */ /* Max OPENSSL_INIT flag value is 0x80000000 */ @@ -393,8 +392,12 @@ void OPENSSL_thread_stop(void); /* Low-level control of initialization */ OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); # ifndef OPENSSL_NO_STDIO +int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *settings, + const char *config_filename); +void OPENSSL_INIT_set_config_file_flags(OPENSSL_INIT_SETTINGS *settings, + unsigned long flags); int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *settings, - const char *config_file); + const char *config_appname); # endif void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *settings); @@ -435,33 +438,6 @@ int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_CRYPTO_strings(void); - -/* Error codes for the CRYPTO functions. */ - -/* Function codes. */ -# define CRYPTO_F_CRYPTO_DUP_EX_DATA 110 -# define CRYPTO_F_CRYPTO_FREE_EX_DATA 111 -# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 -# define CRYPTO_F_CRYPTO_MEMDUP 115 -# define CRYPTO_F_CRYPTO_NEW_EX_DATA 112 -# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 -# define CRYPTO_F_FIPS_MODE_SET 109 -# define CRYPTO_F_GET_AND_LOCK 113 -# define CRYPTO_F_OPENSSL_BUF2HEXSTR 117 -# define CRYPTO_F_OPENSSL_HEXSTR2BUF 118 -# define CRYPTO_F_OPENSSL_INIT_CRYPTO 116 - -/* Reason codes. */ -# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 -# define CRYPTO_R_ILLEGAL_HEX_DIGIT 102 -# define CRYPTO_R_ODD_NUMBER_OF_DIGITS 103 # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/cryptoerr.h b/libs/windows/include/openssl/cryptoerr.h new file mode 100644 index 00000000..10723d04 --- /dev/null +++ b/libs/windows/include/openssl/cryptoerr.h @@ -0,0 +1,56 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CRYPTOERR_H +# define HEADER_CRYPTOERR_H + +# ifdef __cplusplus +extern "C" +# endif + +# include + +int ERR_load_CRYPTO_strings(void); + +/* + * CRYPTO function codes. + */ +# define CRYPTO_F_CMAC_CTX_NEW 120 +# define CRYPTO_F_CRYPTO_DUP_EX_DATA 110 +# define CRYPTO_F_CRYPTO_FREE_EX_DATA 111 +# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 +# define CRYPTO_F_CRYPTO_MEMDUP 115 +# define CRYPTO_F_CRYPTO_NEW_EX_DATA 112 +# define CRYPTO_F_CRYPTO_OCB128_COPY_CTX 121 +# define CRYPTO_F_CRYPTO_OCB128_INIT 122 +# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 +# define CRYPTO_F_FIPS_MODE_SET 109 +# define CRYPTO_F_GET_AND_LOCK 113 +# define CRYPTO_F_OPENSSL_ATEXIT 114 +# define CRYPTO_F_OPENSSL_BUF2HEXSTR 117 +# define CRYPTO_F_OPENSSL_FOPEN 119 +# define CRYPTO_F_OPENSSL_HEXSTR2BUF 118 +# define CRYPTO_F_OPENSSL_INIT_CRYPTO 116 +# define CRYPTO_F_OPENSSL_LH_NEW 126 +# define CRYPTO_F_OPENSSL_SK_DEEP_COPY 127 +# define CRYPTO_F_OPENSSL_SK_DUP 128 +# define CRYPTO_F_PKEY_HMAC_INIT 123 +# define CRYPTO_F_PKEY_POLY1305_INIT 124 +# define CRYPTO_F_PKEY_SIPHASH_INIT 125 +# define CRYPTO_F_SK_RESERVE 129 + +/* + * CRYPTO reason codes. + */ +# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 +# define CRYPTO_R_ILLEGAL_HEX_DIGIT 102 +# define CRYPTO_R_ODD_NUMBER_OF_DIGITS 103 + +#endif diff --git a/libs/windows/include/openssl/ct.h b/libs/windows/include/openssl/ct.h index bf29fbab..d4262fa0 100644 --- a/libs/windows/include/openssl/ct.h +++ b/libs/windows/include/openssl/ct.h @@ -1,5 +1,5 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -16,6 +16,7 @@ # include # include # include +# include # ifdef __cplusplus extern "C" { # endif @@ -468,64 +469,6 @@ __owur int CTLOG_STORE_load_file(CTLOG_STORE *store, const char *file); */ __owur int CTLOG_STORE_load_default_file(CTLOG_STORE *store); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_CT_strings(void); - -/* Error codes for the CT functions. */ - -/* Function codes. */ -# define CT_F_CTLOG_NEW 117 -# define CT_F_CTLOG_NEW_FROM_BASE64 118 -# define CT_F_CTLOG_NEW_FROM_CONF 119 -# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 122 -# define CT_F_CTLOG_STORE_LOAD_FILE 123 -# define CT_F_CTLOG_STORE_LOAD_LOG 130 -# define CT_F_CTLOG_STORE_NEW 131 -# define CT_F_CT_BASE64_DECODE 124 -# define CT_F_CT_POLICY_EVAL_CTX_NEW 133 -# define CT_F_CT_V1_LOG_ID_FROM_PKEY 125 -# define CT_F_I2O_SCT 107 -# define CT_F_I2O_SCT_LIST 108 -# define CT_F_I2O_SCT_SIGNATURE 109 -# define CT_F_O2I_SCT 110 -# define CT_F_O2I_SCT_LIST 111 -# define CT_F_O2I_SCT_SIGNATURE 112 -# define CT_F_SCT_CTX_NEW 126 -# define CT_F_SCT_CTX_VERIFY 128 -# define CT_F_SCT_NEW 100 -# define CT_F_SCT_NEW_FROM_BASE64 127 -# define CT_F_SCT_SET0_LOG_ID 101 -# define CT_F_SCT_SET1_EXTENSIONS 114 -# define CT_F_SCT_SET1_LOG_ID 115 -# define CT_F_SCT_SET1_SIGNATURE 116 -# define CT_F_SCT_SET_LOG_ENTRY_TYPE 102 -# define CT_F_SCT_SET_SIGNATURE_NID 103 -# define CT_F_SCT_SET_VERSION 104 - -/* Reason codes. */ -# define CT_R_BASE64_DECODE_ERROR 108 -# define CT_R_INVALID_LOG_ID_LENGTH 100 -# define CT_R_LOG_CONF_INVALID 109 -# define CT_R_LOG_CONF_INVALID_KEY 110 -# define CT_R_LOG_CONF_MISSING_DESCRIPTION 111 -# define CT_R_LOG_CONF_MISSING_KEY 112 -# define CT_R_LOG_KEY_INVALID 113 -# define CT_R_SCT_FUTURE_TIMESTAMP 116 -# define CT_R_SCT_INVALID 104 -# define CT_R_SCT_INVALID_SIGNATURE 107 -# define CT_R_SCT_LIST_INVALID 105 -# define CT_R_SCT_LOG_ID_MISMATCH 114 -# define CT_R_SCT_NOT_SET 106 -# define CT_R_SCT_UNSUPPORTED_VERSION 115 -# define CT_R_UNRECOGNIZED_SIGNATURE_NID 101 -# define CT_R_UNSUPPORTED_ENTRY_TYPE 102 -# define CT_R_UNSUPPORTED_VERSION 103 - # ifdef __cplusplus } # endif diff --git a/libs/windows/include/openssl/cterr.h b/libs/windows/include/openssl/cterr.h new file mode 100644 index 00000000..764e1a22 --- /dev/null +++ b/libs/windows/include/openssl/cterr.h @@ -0,0 +1,76 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CTERR_H +# define HEADER_CTERR_H + +# include + +# ifndef OPENSSL_NO_CT + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_CT_strings(void); + +/* + * CT function codes. + */ +# define CT_F_CTLOG_NEW 117 +# define CT_F_CTLOG_NEW_FROM_BASE64 118 +# define CT_F_CTLOG_NEW_FROM_CONF 119 +# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 122 +# define CT_F_CTLOG_STORE_LOAD_FILE 123 +# define CT_F_CTLOG_STORE_LOAD_LOG 130 +# define CT_F_CTLOG_STORE_NEW 131 +# define CT_F_CT_BASE64_DECODE 124 +# define CT_F_CT_POLICY_EVAL_CTX_NEW 133 +# define CT_F_CT_V1_LOG_ID_FROM_PKEY 125 +# define CT_F_I2O_SCT 107 +# define CT_F_I2O_SCT_LIST 108 +# define CT_F_I2O_SCT_SIGNATURE 109 +# define CT_F_O2I_SCT 110 +# define CT_F_O2I_SCT_LIST 111 +# define CT_F_O2I_SCT_SIGNATURE 112 +# define CT_F_SCT_CTX_NEW 126 +# define CT_F_SCT_CTX_VERIFY 128 +# define CT_F_SCT_NEW 100 +# define CT_F_SCT_NEW_FROM_BASE64 127 +# define CT_F_SCT_SET0_LOG_ID 101 +# define CT_F_SCT_SET1_EXTENSIONS 114 +# define CT_F_SCT_SET1_LOG_ID 115 +# define CT_F_SCT_SET1_SIGNATURE 116 +# define CT_F_SCT_SET_LOG_ENTRY_TYPE 102 +# define CT_F_SCT_SET_SIGNATURE_NID 103 +# define CT_F_SCT_SET_VERSION 104 + +/* + * CT reason codes. + */ +# define CT_R_BASE64_DECODE_ERROR 108 +# define CT_R_INVALID_LOG_ID_LENGTH 100 +# define CT_R_LOG_CONF_INVALID 109 +# define CT_R_LOG_CONF_INVALID_KEY 110 +# define CT_R_LOG_CONF_MISSING_DESCRIPTION 111 +# define CT_R_LOG_CONF_MISSING_KEY 112 +# define CT_R_LOG_KEY_INVALID 113 +# define CT_R_SCT_FUTURE_TIMESTAMP 116 +# define CT_R_SCT_INVALID 104 +# define CT_R_SCT_INVALID_SIGNATURE 107 +# define CT_R_SCT_LIST_INVALID 105 +# define CT_R_SCT_LOG_ID_MISMATCH 114 +# define CT_R_SCT_NOT_SET 106 +# define CT_R_SCT_UNSUPPORTED_VERSION 115 +# define CT_R_UNRECOGNIZED_SIGNATURE_NID 101 +# define CT_R_UNSUPPORTED_ENTRY_TYPE 102 +# define CT_R_UNSUPPORTED_VERSION 103 + +# endif +#endif diff --git a/libs/windows/include/openssl/dh.h b/libs/windows/include/openssl/dh.h index 8cf879e1..3527540c 100644 --- a/libs/windows/include/openssl/dh.h +++ b/libs/windows/include/openssl/dh.h @@ -20,6 +20,7 @@ # if OPENSSL_API_COMPAT < 0x10100000L # include # endif +# include # ifdef __cplusplus extern "C" { @@ -141,6 +142,9 @@ DEPRECATEDIN_0_9_8(DH *DH_generate_parameters(int prime_len, int generator, int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, BN_GENCB *cb); +int DH_check_params_ex(const DH *dh); +int DH_check_ex(const DH *dh); +int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key); int DH_check_params(const DH *dh, int *ret); int DH_check(const DH *dh, int *codes); int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes); @@ -161,6 +165,10 @@ DH *DH_get_1024_160(void); DH *DH_get_2048_224(void); DH *DH_get_2048_256(void); +/* Named parameters, currently RFC7919 */ +DH *DH_new_by_nid(int nid); +int DH_get_nid(const DH *dh); + # ifndef OPENSSL_NO_CMS /* RFC2631 KDF */ int DH_KDF_X9_42(unsigned char *out, size_t outlen, @@ -175,6 +183,11 @@ int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); void DH_get0_key(const DH *dh, const BIGNUM **pub_key, const BIGNUM **priv_key); int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); +const BIGNUM *DH_get0_p(const DH *dh); +const BIGNUM *DH_get0_q(const DH *dh); +const BIGNUM *DH_get0_g(const DH *dh); +const BIGNUM *DH_get0_priv_key(const DH *dh); +const BIGNUM *DH_get0_pub_key(const DH *dh); void DH_clear_flags(DH *dh, int flags); int DH_test_flags(const DH *dh, int flags); void DH_set_flags(DH *dh, int flags); @@ -237,6 +250,15 @@ int DH_meth_set_generate_params(DH_METHOD *dhm, EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) +# define EVP_PKEY_CTX_set_dh_nid(ctx, nid) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, \ + EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_DH_NID, nid, NULL) + +# define EVP_PKEY_CTX_set_dh_pad(ctx, pad) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_PAD, pad, NULL) + # define EVP_PKEY_CTX_set_dh_kdf_type(ctx, kdf) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ @@ -250,22 +272,22 @@ int DH_meth_set_generate_params(DH_METHOD *dhm, # define EVP_PKEY_CTX_set0_dh_kdf_oid(ctx, oid) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)oid) + EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)(oid)) # define EVP_PKEY_CTX_get0_dh_kdf_oid(ctx, poid) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)poid) + EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)(poid)) # define EVP_PKEY_CTX_set_dh_kdf_md(ctx, md) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)md) + EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)(md)) # define EVP_PKEY_CTX_get_dh_kdf_md(ctx, pmd) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)pmd) + EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)(pmd)) # define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ @@ -275,17 +297,17 @@ int DH_meth_set_generate_params(DH_METHOD *dhm, # define EVP_PKEY_CTX_get_dh_kdf_outlen(ctx, plen) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)plen) + EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)(plen)) # define EVP_PKEY_CTX_set0_dh_kdf_ukm(ctx, p, plen) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)p) + EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)(p)) # define EVP_PKEY_CTX_get0_dh_kdf_ukm(ctx, p) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)p) + EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)(p)) # define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN (EVP_PKEY_ALG_CTRL + 1) # define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR (EVP_PKEY_ALG_CTRL + 2) @@ -301,6 +323,8 @@ int DH_meth_set_generate_params(DH_METHOD *dhm, # define EVP_PKEY_CTRL_GET_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 12) # define EVP_PKEY_CTRL_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 13) # define EVP_PKEY_CTRL_GET_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 14) +# define EVP_PKEY_CTRL_DH_NID (EVP_PKEY_ALG_CTRL + 15) +# define EVP_PKEY_CTRL_DH_PAD (EVP_PKEY_ALG_CTRL + 16) /* KDF types */ # define EVP_PKEY_DH_KDF_NONE 1 @@ -308,51 +332,6 @@ int DH_meth_set_generate_params(DH_METHOD *dhm, # define EVP_PKEY_DH_KDF_X9_42 2 # endif -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_DH_strings(void); - -/* Error codes for the DH functions. */ - -/* Function codes. */ -# define DH_F_COMPUTE_KEY 102 -# define DH_F_DHPARAMS_PRINT_FP 101 -# define DH_F_DH_BUILTIN_GENPARAMS 106 -# define DH_F_DH_CMS_DECRYPT 114 -# define DH_F_DH_CMS_SET_PEERKEY 115 -# define DH_F_DH_CMS_SET_SHARED_INFO 116 -# define DH_F_DH_METH_DUP 117 -# define DH_F_DH_METH_NEW 118 -# define DH_F_DH_METH_SET1_NAME 119 -# define DH_F_DH_NEW_METHOD 105 -# define DH_F_DH_PARAM_DECODE 107 -# define DH_F_DH_PRIV_DECODE 110 -# define DH_F_DH_PRIV_ENCODE 111 -# define DH_F_DH_PUB_DECODE 108 -# define DH_F_DH_PUB_ENCODE 109 -# define DH_F_DO_DH_PRINT 100 -# define DH_F_GENERATE_KEY 103 -# define DH_F_PKEY_DH_DERIVE 112 -# define DH_F_PKEY_DH_KEYGEN 113 - -/* Reason codes. */ -# define DH_R_BAD_GENERATOR 101 -# define DH_R_BN_DECODE_ERROR 109 -# define DH_R_BN_ERROR 106 -# define DH_R_DECODE_ERROR 104 -# define DH_R_INVALID_PUBKEY 102 -# define DH_R_KDF_PARAMETER_ERROR 112 -# define DH_R_KEYS_NOT_SET 108 -# define DH_R_MODULUS_TOO_LARGE 103 -# define DH_R_NO_PARAMETERS_SET 107 -# define DH_R_NO_PRIVATE_VALUE 100 -# define DH_R_PARAMETER_ENCODING_ERROR 105 -# define DH_R_PEER_KEY_ERROR 111 -# define DH_R_SHARED_INFO_ERROR 113 # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/dherr.h b/libs/windows/include/openssl/dherr.h new file mode 100644 index 00000000..81e73f75 --- /dev/null +++ b/libs/windows/include/openssl/dherr.h @@ -0,0 +1,84 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DHERR_H +# define HEADER_DHERR_H + +# include + +# ifndef OPENSSL_NO_DH + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_DH_strings(void); + +/* + * DH function codes. + */ +# define DH_F_COMPUTE_KEY 102 +# define DH_F_DHPARAMS_PRINT_FP 101 +# define DH_F_DH_BUILTIN_GENPARAMS 106 +# define DH_F_DH_CHECK_EX 121 +# define DH_F_DH_CHECK_PARAMS_EX 122 +# define DH_F_DH_CHECK_PUB_KEY_EX 123 +# define DH_F_DH_CMS_DECRYPT 114 +# define DH_F_DH_CMS_SET_PEERKEY 115 +# define DH_F_DH_CMS_SET_SHARED_INFO 116 +# define DH_F_DH_METH_DUP 117 +# define DH_F_DH_METH_NEW 118 +# define DH_F_DH_METH_SET1_NAME 119 +# define DH_F_DH_NEW_BY_NID 104 +# define DH_F_DH_NEW_METHOD 105 +# define DH_F_DH_PARAM_DECODE 107 +# define DH_F_DH_PKEY_PUBLIC_CHECK 124 +# define DH_F_DH_PRIV_DECODE 110 +# define DH_F_DH_PRIV_ENCODE 111 +# define DH_F_DH_PUB_DECODE 108 +# define DH_F_DH_PUB_ENCODE 109 +# define DH_F_DO_DH_PRINT 100 +# define DH_F_GENERATE_KEY 103 +# define DH_F_PKEY_DH_CTRL_STR 120 +# define DH_F_PKEY_DH_DERIVE 112 +# define DH_F_PKEY_DH_INIT 125 +# define DH_F_PKEY_DH_KEYGEN 113 + +/* + * DH reason codes. + */ +# define DH_R_BAD_GENERATOR 101 +# define DH_R_BN_DECODE_ERROR 109 +# define DH_R_BN_ERROR 106 +# define DH_R_CHECK_INVALID_J_VALUE 115 +# define DH_R_CHECK_INVALID_Q_VALUE 116 +# define DH_R_CHECK_PUBKEY_INVALID 122 +# define DH_R_CHECK_PUBKEY_TOO_LARGE 123 +# define DH_R_CHECK_PUBKEY_TOO_SMALL 124 +# define DH_R_CHECK_P_NOT_PRIME 117 +# define DH_R_CHECK_P_NOT_SAFE_PRIME 118 +# define DH_R_CHECK_Q_NOT_PRIME 119 +# define DH_R_DECODE_ERROR 104 +# define DH_R_INVALID_PARAMETER_NAME 110 +# define DH_R_INVALID_PARAMETER_NID 114 +# define DH_R_INVALID_PUBKEY 102 +# define DH_R_KDF_PARAMETER_ERROR 112 +# define DH_R_KEYS_NOT_SET 108 +# define DH_R_MISSING_PUBKEY 125 +# define DH_R_MODULUS_TOO_LARGE 103 +# define DH_R_NOT_SUITABLE_GENERATOR 120 +# define DH_R_NO_PARAMETERS_SET 107 +# define DH_R_NO_PRIVATE_VALUE 100 +# define DH_R_PARAMETER_ENCODING_ERROR 105 +# define DH_R_PEER_KEY_ERROR 111 +# define DH_R_SHARED_INFO_ERROR 113 +# define DH_R_UNABLE_TO_CHECK_GENERATOR 121 + +# endif +#endif diff --git a/libs/windows/include/openssl/dsa.h b/libs/windows/include/openssl/dsa.h index 3a7b1a62..822eff34 100644 --- a/libs/windows/include/openssl/dsa.h +++ b/libs/windows/include/openssl/dsa.h @@ -7,11 +7,6 @@ * https://www.openssl.org/source/license.html */ -/* - * The DSS routines are based on patches supplied by - * Steven Schoch . - */ - #ifndef HEADER_DSA_H # define HEADER_DSA_H @@ -25,11 +20,11 @@ extern "C" { # include # include # include -# include # include # if OPENSSL_API_COMPAT < 0x10100000L # include # endif +# include # ifndef OPENSSL_DSA_MAX_MODULUS_BITS # define OPENSSL_DSA_MAX_MODULUS_BITS 10000 @@ -104,7 +99,7 @@ int DSA_size(const DSA *); int DSA_bits(const DSA *d); int DSA_security_bits(const DSA *d); /* next 4 return -1 on error */ -int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp); +DEPRECATEDIN_1_2_0(int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)) int DSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char *sig, unsigned int *siglen, DSA *dsa); int DSA_verify(int type, const unsigned char *dgst, int dgst_len, @@ -178,6 +173,11 @@ int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); void DSA_get0_key(const DSA *d, const BIGNUM **pub_key, const BIGNUM **priv_key); int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key); +const BIGNUM *DSA_get0_p(const DSA *d); +const BIGNUM *DSA_get0_q(const DSA *d); +const BIGNUM *DSA_get0_g(const DSA *d); +const BIGNUM *DSA_get0_pub_key(const DSA *d); +const BIGNUM *DSA_get0_priv_key(const DSA *d); void DSA_clear_flags(DSA *d, int flags); int DSA_test_flags(const DSA *d, int flags); void DSA_set_flags(DSA *d, int flags); @@ -201,7 +201,7 @@ int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) int DSA_meth_set_sign_setup(DSA_METHOD *dsam, int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) - (const unsigned char *, int , DSA_SIG *, DSA *); + (const unsigned char *, int, DSA_SIG *, DSA *); int DSA_meth_set_verify(DSA_METHOD *dsam, int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) @@ -230,54 +230,6 @@ int DSA_meth_set_paramgen(DSA_METHOD *dsam, int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *); int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *)); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_DSA_strings(void); - -/* Error codes for the DSA functions. */ - -/* Function codes. */ -# define DSA_F_DSAPARAMS_PRINT 100 -# define DSA_F_DSAPARAMS_PRINT_FP 101 -# define DSA_F_DSA_BUILTIN_PARAMGEN 125 -# define DSA_F_DSA_BUILTIN_PARAMGEN2 126 -# define DSA_F_DSA_DO_SIGN 112 -# define DSA_F_DSA_DO_VERIFY 113 -# define DSA_F_DSA_METH_DUP 127 -# define DSA_F_DSA_METH_NEW 128 -# define DSA_F_DSA_METH_SET1_NAME 129 -# define DSA_F_DSA_NEW_METHOD 103 -# define DSA_F_DSA_PARAM_DECODE 119 -# define DSA_F_DSA_PRINT_FP 105 -# define DSA_F_DSA_PRIV_DECODE 115 -# define DSA_F_DSA_PRIV_ENCODE 116 -# define DSA_F_DSA_PUB_DECODE 117 -# define DSA_F_DSA_PUB_ENCODE 118 -# define DSA_F_DSA_SIGN 106 -# define DSA_F_DSA_SIGN_SETUP 107 -# define DSA_F_DSA_SIG_NEW 102 -# define DSA_F_OLD_DSA_PRIV_DECODE 122 -# define DSA_F_PKEY_DSA_CTRL 120 -# define DSA_F_PKEY_DSA_CTRL_STR 104 -# define DSA_F_PKEY_DSA_KEYGEN 121 - -/* Reason codes. */ -# define DSA_R_BAD_Q_VALUE 102 -# define DSA_R_BN_DECODE_ERROR 108 -# define DSA_R_BN_ERROR 109 -# define DSA_R_DECODE_ERROR 104 -# define DSA_R_INVALID_DIGEST_TYPE 106 -# define DSA_R_INVALID_PARAMETERS 112 -# define DSA_R_MISSING_PARAMETERS 101 -# define DSA_R_MODULUS_TOO_LARGE 103 -# define DSA_R_NO_PARAMETERS_SET 107 -# define DSA_R_PARAMETER_ENCODING_ERROR 105 -# define DSA_R_Q_NOT_PRIME 113 -# define DSA_R_SEED_LEN_SMALL 110 # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/dsaerr.h b/libs/windows/include/openssl/dsaerr.h new file mode 100644 index 00000000..d94f97bb --- /dev/null +++ b/libs/windows/include/openssl/dsaerr.h @@ -0,0 +1,67 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DSAERR_H +# define HEADER_DSAERR_H + +# include + +# ifndef OPENSSL_NO_DSA + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_DSA_strings(void); + +/* + * DSA function codes. + */ +# define DSA_F_DSAPARAMS_PRINT 100 +# define DSA_F_DSAPARAMS_PRINT_FP 101 +# define DSA_F_DSA_BUILTIN_PARAMGEN 125 +# define DSA_F_DSA_BUILTIN_PARAMGEN2 126 +# define DSA_F_DSA_DO_SIGN 112 +# define DSA_F_DSA_DO_VERIFY 113 +# define DSA_F_DSA_METH_DUP 127 +# define DSA_F_DSA_METH_NEW 128 +# define DSA_F_DSA_METH_SET1_NAME 129 +# define DSA_F_DSA_NEW_METHOD 103 +# define DSA_F_DSA_PARAM_DECODE 119 +# define DSA_F_DSA_PRINT_FP 105 +# define DSA_F_DSA_PRIV_DECODE 115 +# define DSA_F_DSA_PRIV_ENCODE 116 +# define DSA_F_DSA_PUB_DECODE 117 +# define DSA_F_DSA_PUB_ENCODE 118 +# define DSA_F_DSA_SIGN 106 +# define DSA_F_DSA_SIGN_SETUP 107 +# define DSA_F_DSA_SIG_NEW 102 +# define DSA_F_OLD_DSA_PRIV_DECODE 122 +# define DSA_F_PKEY_DSA_CTRL 120 +# define DSA_F_PKEY_DSA_CTRL_STR 104 +# define DSA_F_PKEY_DSA_KEYGEN 121 + +/* + * DSA reason codes. + */ +# define DSA_R_BAD_Q_VALUE 102 +# define DSA_R_BN_DECODE_ERROR 108 +# define DSA_R_BN_ERROR 109 +# define DSA_R_DECODE_ERROR 104 +# define DSA_R_INVALID_DIGEST_TYPE 106 +# define DSA_R_INVALID_PARAMETERS 112 +# define DSA_R_MISSING_PARAMETERS 101 +# define DSA_R_MODULUS_TOO_LARGE 103 +# define DSA_R_NO_PARAMETERS_SET 107 +# define DSA_R_PARAMETER_ENCODING_ERROR 105 +# define DSA_R_Q_NOT_PRIME 113 +# define DSA_R_SEED_LEN_SMALL 110 + +# endif +#endif diff --git a/libs/windows/include/openssl/dtls1.h b/libs/windows/include/openssl/dtls1.h index f4769f83..a312e386 100644 --- a/libs/windows/include/openssl/dtls1.h +++ b/libs/windows/include/openssl/dtls1.h @@ -1,5 +1,5 @@ /* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2005-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -26,6 +26,10 @@ extern "C" { # define DTLS_ANY_VERSION 0x1FFFF /* lengths of messages */ +/* + * Actually the max cookie length in DTLS is 255. But we can't change this now + * due to compatibility concerns. + */ # define DTLS1_COOKIE_LENGTH 256 # define DTLS1_RT_HEADER_LENGTH 13 @@ -37,12 +41,7 @@ extern "C" { # define DTLS1_CCS_HEADER_LENGTH 1 -# ifdef DTLS1_AD_MISSING_HANDSHAKE_MESSAGE -# define DTLS1_AL_HEADER_LENGTH 7 -# else -# define DTLS1_AL_HEADER_LENGTH 2 -# endif - +# define DTLS1_AL_HEADER_LENGTH 2 /* Timeout multipliers (timeout slice is defined in apps/timeouts.h */ # define DTLS1_TMO_READ_COUNT 2 diff --git a/libs/windows/include/openssl/e_os2.h b/libs/windows/include/openssl/e_os2.h index 9800e154..97a776cd 100644 --- a/libs/windows/include/openssl/e_os2.h +++ b/libs/windows/include/openssl/e_os2.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -146,36 +146,30 @@ extern "C" { # endif /*- - * Definitions of OPENSSL_GLOBAL and OPENSSL_EXTERN, to define and declare - * certain global symbols that, with some compilers under VMS, have to be - * defined and declared explicitly with globaldef and globalref. - * Definitions of OPENSSL_EXPORT and OPENSSL_IMPORT, to define and declare - * DLL exports and imports for compilers under Win32. These are a little - * more complicated to use. Basically, for any library that exports some - * global variables, the following code must be present in the header file - * that declares them, before OPENSSL_EXTERN is used: + * OPENSSL_EXTERN is normally used to declare a symbol with possible extra + * attributes to handle its presence in a shared library. + * OPENSSL_EXPORT is used to define a symbol with extra possible attributes + * to make it visible in a shared library. + * Care needs to be taken when a header file is used both to declare and + * define symbols. Basically, for any library that exports some global + * variables, the following code must be present in the header file that + * declares them, before OPENSSL_EXTERN is used: * * #ifdef SOME_BUILD_FLAG_MACRO * # undef OPENSSL_EXTERN * # define OPENSSL_EXTERN OPENSSL_EXPORT * #endif * - * The default is to have OPENSSL_EXPORT, OPENSSL_EXTERN and OPENSSL_GLOBAL + * The default is to have OPENSSL_EXPORT and OPENSSL_EXTERN * have some generally sensible values. */ -# if defined(OPENSSL_SYS_VMS_NODECC) -# define OPENSSL_EXPORT globalref -# define OPENSSL_EXTERN globalref -# define OPENSSL_GLOBAL globaldef -# elif defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) +# if defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) # define OPENSSL_EXPORT extern __declspec(dllexport) # define OPENSSL_EXTERN extern __declspec(dllimport) -# define OPENSSL_GLOBAL # else # define OPENSSL_EXPORT extern # define OPENSSL_EXTERN extern -# define OPENSSL_GLOBAL # endif /*- @@ -196,7 +190,7 @@ extern "C" { # define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) # define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) # else -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) OPENSSL_GLOBAL type _shadow_##name=value; +# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) type _shadow_##name=value; # define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name # define OPENSSL_GLOBAL_REF(name) _shadow_##name # endif @@ -222,6 +216,8 @@ extern "C" { # define OSSL_SSIZE_MAX SSIZE_MAX # elif defined(_POSIX_SSIZE_MAX) # define OSSL_SSIZE_MAX _POSIX_SSIZE_MAX +# else +# define OSSL_SSIZE_MAX ((ssize_t)(SIZE_MAX>>1)) # endif # endif @@ -291,6 +287,13 @@ typedef unsigned __int64 uint64_t; # define ossl_noreturn # endif +/* ossl_unused: portable unused attribute for use in public headers */ +# if defined(__GNUC__) +# define ossl_unused __attribute__((unused)) +# else +# define ossl_unused +# endif + #ifdef __cplusplus } #endif diff --git a/libs/windows/include/openssl/ec.h b/libs/windows/include/openssl/ec.h index d6b36c77..347cfb6d 100644 --- a/libs/windows/include/openssl/ec.h +++ b/libs/windows/include/openssl/ec.h @@ -1,5 +1,6 @@ /* * Copyright 2002-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -7,20 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * Portions of the attached software ("Contribution") are developed by - * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. - * - * The Contribution is licensed pursuant to the OpenSSL open source - * license provided above. - * - * The elliptic curve binary polynomial software is originally written by - * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. - * - */ - #ifndef HEADER_EC_H # define HEADER_EC_H @@ -32,6 +19,7 @@ # if OPENSSL_API_COMPAT < 0x10100000L # include # endif +# include # ifdef __cplusplus extern "C" { # endif @@ -235,50 +223,84 @@ unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x); size_t EC_GROUP_get_seed_len(const EC_GROUP *); size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); -/** Sets the parameter of a ec over GFp defined by y^2 = x^3 + a*x + b +/** Sets the parameters of a ec curve defined by y^2 = x^3 + a*x + b (for GFp) + * or y^2 + x*y = x^3 + a*x^2 + b (for GF2m) * \param group EC_GROUP object - * \param p BIGNUM with the prime number + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) * \param a BIGNUM with parameter a of the equation * \param b BIGNUM with parameter b of the equation * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); +int EC_GROUP_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, + const BIGNUM *b, BN_CTX *ctx); -/** Gets the parameter of the ec over GFp defined by y^2 = x^3 + a*x + b +/** Gets the parameters of the ec curve defined by y^2 = x^3 + a*x + b (for GFp) + * or y^2 + x*y = x^3 + a*x^2 + b (for GF2m) * \param group EC_GROUP object - * \param p BIGNUM for the prime number + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) * \param a BIGNUM for parameter a of the equation * \param b BIGNUM for parameter b of the equation * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, - BIGNUM *b, BN_CTX *ctx); +int EC_GROUP_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, + BN_CTX *ctx); + +/** Sets the parameters of an ec curve. Synonym for EC_GROUP_set_curve + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \param a BIGNUM with parameter a of the equation + * \param b BIGNUM with parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, + const BIGNUM *a, const BIGNUM *b, + BN_CTX *ctx)) + +/** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \param a BIGNUM for parameter a of the equation + * \param b BIGNUM for parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, + BIGNUM *a, BIGNUM *b, + BN_CTX *ctx)) # ifndef OPENSSL_NO_EC2M -/** Sets the parameter of a ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 + b +/** Sets the parameter of an ec curve. Synonym for EC_GROUP_set_curve * \param group EC_GROUP object - * \param p BIGNUM with the polynomial defining the underlying field + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) * \param a BIGNUM with parameter a of the equation * \param b BIGNUM with parameter b of the equation * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); +DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, + const BIGNUM *a, const BIGNUM *b, + BN_CTX *ctx)) -/** Gets the parameter of the ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 + b +/** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve * \param group EC_GROUP object - * \param p BIGNUM for the polynomial defining the underlying field + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) * \param a BIGNUM for parameter a of the equation * \param b BIGNUM for parameter b of the equation * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, - BIGNUM *b, BN_CTX *ctx); +DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, + BIGNUM *a, BIGNUM *b, + BN_CTX *ctx)) # endif /** Returns the number of bits needed to represent a field element * \param group EC_GROUP object @@ -350,7 +372,7 @@ EC_GROUP *EC_GROUP_new_by_curve_name(int nid); */ EC_GROUP *EC_GROUP_new_from_ecparameters(const ECPARAMETERS *params); -/** Creates an ECPARAMETERS object for the the given EC_GROUP object. +/** Creates an ECPARAMETERS object for the given EC_GROUP object. * \param group pointer to the EC_GROUP object * \param params pointer to an existing ECPARAMETERS object or NULL * \return pointer to the new ECPARAMETERS object or NULL @@ -366,7 +388,7 @@ ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group, */ EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params); -/** Creates an ECPKPARAMETERS object for the the given EC_GROUP object. +/** Creates an ECPKPARAMETERS object for the given EC_GROUP object. * \param group pointer to the EC_GROUP object * \param params pointer to an existing ECPKPARAMETERS object or NULL * \return pointer to the new ECPKPARAMETERS object or NULL @@ -471,7 +493,7 @@ int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, BIGNUM *y, BIGNUM *z, BN_CTX *ctx); -/** Sets the affine coordinates of a EC_POINT over GFp +/** Sets the affine coordinates of an EC_POINT * \param group underlying EC_GROUP object * \param p EC_POINT object * \param x BIGNUM with the x-coordinate @@ -479,23 +501,65 @@ int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p, - const BIGNUM *x, const BIGNUM *y, +int EC_POINT_set_affine_coordinates(const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, + BN_CTX *ctx); + +/** Gets the affine coordinates of an EC_POINT. + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BN_CTX *ctx); + +/** Sets the affine coordinates of an EC_POINT. A synonym of + * EC_POINT_set_affine_coordinates + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with the x-coordinate + * \param y BIGNUM with the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, + EC_POINT *p, + const BIGNUM *x, + const BIGNUM *y, + BN_CTX *ctx)) + +/** Gets the affine coordinates of an EC_POINT. A synonym of + * EC_POINT_get_affine_coordinates + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, + const EC_POINT *p, + BIGNUM *x, + BIGNUM *y, + BN_CTX *ctx)) + +/** Sets the x9.62 compressed coordinates of a EC_POINT + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with x-coordinate + * \param y_bit integer with the y-Bit (either 0 or 1) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, int y_bit, BN_CTX *ctx); -/** Gets the affine coordinates of a EC_POINT over GFp - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, BIGNUM *x, - BIGNUM *y, BN_CTX *ctx); - -/** Sets the x9.62 compressed coordinates of a EC_POINT over GFp +/** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of + * EC_POINT_set_compressed_coordinates * \param group underlying EC_GROUP object * \param p EC_POINT object * \param x BIGNUM with x-coordinate @@ -503,11 +567,14 @@ int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, const BIGNUM *x, - int y_bit, BN_CTX *ctx); +DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, + EC_POINT *p, + const BIGNUM *x, + int y_bit, + BN_CTX *ctx)) # ifndef OPENSSL_NO_EC2M -/** Sets the affine coordinates of a EC_POINT over GF2m +/** Sets the affine coordinates of an EC_POINT. A synonym of + * EC_POINT_set_affine_coordinates * \param group underlying EC_GROUP object * \param p EC_POINT object * \param x BIGNUM with the x-coordinate @@ -515,11 +582,14 @@ int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p, - const BIGNUM *x, const BIGNUM *y, - BN_CTX *ctx); +DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, + EC_POINT *p, + const BIGNUM *x, + const BIGNUM *y, + BN_CTX *ctx)) -/** Gets the affine coordinates of a EC_POINT over GF2m +/** Gets the affine coordinates of an EC_POINT. A synonym of + * EC_POINT_get_affine_coordinates * \param group underlying EC_GROUP object * \param p EC_POINT object * \param x BIGNUM for the x-coordinate @@ -527,11 +597,14 @@ int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, - const EC_POINT *p, BIGNUM *x, - BIGNUM *y, BN_CTX *ctx); +DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, + const EC_POINT *p, + BIGNUM *x, + BIGNUM *y, + BN_CTX *ctx)) -/** Sets the x9.62 compressed coordinates of a EC_POINT over GF2m +/** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of + * EC_POINT_set_compressed_coordinates * \param group underlying EC_GROUP object * \param p EC_POINT object * \param x BIGNUM with x-coordinate @@ -539,9 +612,11 @@ int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, - EC_POINT *p, const BIGNUM *x, - int y_bit, BN_CTX *ctx); +DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, + EC_POINT *p, + const BIGNUM *x, + int y_bit, + BN_CTX *ctx)) # endif /** Encodes a EC_POINT object to a octet string * \param group underlying EC_GROUP object @@ -785,6 +860,12 @@ EC_KEY *EC_KEY_dup(const EC_KEY *src); */ int EC_KEY_up_ref(EC_KEY *key); +/** Returns the ENGINE object of a EC_KEY object + * \param eckey EC_KEY object + * \return the ENGINE object (possibly NULL). + */ +ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey); + /** Returns the EC_GROUP object of a EC_KEY object * \param key EC_KEY object * \return the EC_GROUP object (possibly NULL). @@ -1026,6 +1107,11 @@ const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); EC_KEY *EC_KEY_new_method(ENGINE *engine); +/** The old name for ecdh_KDF_X9_63 + * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, + * it is actually specified in ANSI X9.63. + * This identifier is retained for backwards compatibility + */ int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, const unsigned char *Z, size_t Zlen, const unsigned char *sinfo, size_t sinfolen, @@ -1066,14 +1152,24 @@ int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); /** Accessor for r and s fields of ECDSA_SIG - * \param sig pointer to ECDSA_SIG pointer + * \param sig pointer to ECDSA_SIG structure * \param pr pointer to BIGNUM pointer for r (may be NULL) * \param ps pointer to BIGNUM pointer for s (may be NULL) */ void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); +/** Accessor for r field of ECDSA_SIG + * \param sig pointer to ECDSA_SIG structure + */ +const BIGNUM *ECDSA_SIG_get0_r(const ECDSA_SIG *sig); + +/** Accessor for s field of ECDSA_SIG + * \param sig pointer to ECDSA_SIG structure + */ +const BIGNUM *ECDSA_SIG_get0_s(const ECDSA_SIG *sig); + /** Setter for r and s fields of ECDSA_SIG - * \param sig pointer to ECDSA_SIG pointer + * \param sig pointer to ECDSA_SIG structure * \param r pointer to BIGNUM for r (may be NULL) * \param s pointer to BIGNUM for s (may be NULL) */ @@ -1310,12 +1406,12 @@ void EC_KEY_METHOD_get_verify(const EC_KEY_METHOD *meth, # define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)md) + EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)(md)) # define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)pmd) + EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)(pmd)) # define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ @@ -1325,17 +1421,31 @@ void EC_KEY_METHOD_get_verify(const EC_KEY_METHOD *meth, # define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, (void *)plen) + EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, \ + (void *)(plen)) # define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)p) + EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)(p)) # define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)p) + EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)(p)) + +/* SM2 will skip the operation check so no need to pass operation here */ +# define EVP_PKEY_CTX_set1_id(ctx, id, id_len) \ + EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ + EVP_PKEY_CTRL_SET1_ID, (int)id_len, (void*)(id)) + +# define EVP_PKEY_CTX_get1_id(ctx, id) \ + EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ + EVP_PKEY_CTRL_GET1_ID, 0, (void*)(id)) + +# define EVP_PKEY_CTX_get1_id_len(ctx, id_len) \ + EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ + EVP_PKEY_CTRL_GET1_ID_LEN, 0, (void*)(id_len)) # define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) # define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) @@ -1347,228 +1457,19 @@ void EC_KEY_METHOD_get_verify(const EC_KEY_METHOD *meth, # define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) # define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) # define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) +# define EVP_PKEY_CTRL_SET1_ID (EVP_PKEY_ALG_CTRL + 11) +# define EVP_PKEY_CTRL_GET1_ID (EVP_PKEY_ALG_CTRL + 12) +# define EVP_PKEY_CTRL_GET1_ID_LEN (EVP_PKEY_ALG_CTRL + 13) /* KDF types */ # define EVP_PKEY_ECDH_KDF_NONE 1 -# define EVP_PKEY_ECDH_KDF_X9_62 2 - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. +# define EVP_PKEY_ECDH_KDF_X9_63 2 +/** The old name for EVP_PKEY_ECDH_KDF_X9_63 + * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, + * it is actually specified in ANSI X9.63. + * This identifier is retained for backwards compatibility */ +# define EVP_PKEY_ECDH_KDF_X9_62 EVP_PKEY_ECDH_KDF_X9_63 -int ERR_load_EC_strings(void); - -/* Error codes for the EC functions. */ - -/* Function codes. */ -# define EC_F_BN_TO_FELEM 224 -# define EC_F_D2I_ECPARAMETERS 144 -# define EC_F_D2I_ECPKPARAMETERS 145 -# define EC_F_D2I_ECPRIVATEKEY 146 -# define EC_F_DO_EC_KEY_PRINT 221 -# define EC_F_ECDH_CMS_DECRYPT 238 -# define EC_F_ECDH_CMS_SET_SHARED_INFO 239 -# define EC_F_ECDH_COMPUTE_KEY 246 -# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 257 -# define EC_F_ECDSA_DO_SIGN_EX 251 -# define EC_F_ECDSA_DO_VERIFY 252 -# define EC_F_ECDSA_SIGN_EX 254 -# define EC_F_ECDSA_SIGN_SETUP 248 -# define EC_F_ECDSA_SIG_NEW 265 -# define EC_F_ECDSA_VERIFY 253 -# define EC_F_ECKEY_PARAM2TYPE 223 -# define EC_F_ECKEY_PARAM_DECODE 212 -# define EC_F_ECKEY_PRIV_DECODE 213 -# define EC_F_ECKEY_PRIV_ENCODE 214 -# define EC_F_ECKEY_PUB_DECODE 215 -# define EC_F_ECKEY_PUB_ENCODE 216 -# define EC_F_ECKEY_TYPE2PARAM 220 -# define EC_F_ECPARAMETERS_PRINT 147 -# define EC_F_ECPARAMETERS_PRINT_FP 148 -# define EC_F_ECPKPARAMETERS_PRINT 149 -# define EC_F_ECPKPARAMETERS_PRINT_FP 150 -# define EC_F_ECP_NISTZ256_GET_AFFINE 240 -# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 -# define EC_F_ECP_NISTZ256_POINTS_MUL 241 -# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 -# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 -# define EC_F_ECX_KEY_OP 266 -# define EC_F_ECX_PRIV_ENCODE 267 -# define EC_F_ECX_PUB_ENCODE 268 -# define EC_F_EC_ASN1_GROUP2CURVE 153 -# define EC_F_EC_ASN1_GROUP2FIELDID 154 -# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208 -# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159 -# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195 -# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160 -# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161 -# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162 -# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163 -# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164 -# define EC_F_EC_GFP_MONT_FIELD_DECODE 133 -# define EC_F_EC_GFP_MONT_FIELD_ENCODE 134 -# define EC_F_EC_GFP_MONT_FIELD_MUL 131 -# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209 -# define EC_F_EC_GFP_MONT_FIELD_SQR 132 -# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189 -# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 225 -# define EC_F_EC_GFP_NISTP224_POINTS_MUL 228 -# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226 -# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 230 -# define EC_F_EC_GFP_NISTP256_POINTS_MUL 231 -# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232 -# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 233 -# define EC_F_EC_GFP_NISTP521_POINTS_MUL 234 -# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235 -# define EC_F_EC_GFP_NIST_FIELD_MUL 200 -# define EC_F_EC_GFP_NIST_FIELD_SQR 201 -# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202 -# define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES 287 -# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165 -# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 -# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102 -# define EC_F_EC_GFP_SIMPLE_OCT2POINT 103 -# define EC_F_EC_GFP_SIMPLE_POINT2OCT 104 -# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137 -# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167 -# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 -# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 -# define EC_F_EC_GROUP_CHECK 170 -# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171 -# define EC_F_EC_GROUP_COPY 106 -# define EC_F_EC_GROUP_GET_CURVE_GF2M 172 -# define EC_F_EC_GROUP_GET_CURVE_GFP 130 -# define EC_F_EC_GROUP_GET_DEGREE 173 -# define EC_F_EC_GROUP_GET_ECPARAMETERS 261 -# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 262 -# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193 -# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194 -# define EC_F_EC_GROUP_NEW 108 -# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174 -# define EC_F_EC_GROUP_NEW_FROM_DATA 175 -# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS 263 -# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 264 -# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 -# define EC_F_EC_GROUP_SET_CURVE_GFP 109 -# define EC_F_EC_GROUP_SET_GENERATOR 111 -# define EC_F_EC_KEY_CHECK_KEY 177 -# define EC_F_EC_KEY_COPY 178 -# define EC_F_EC_KEY_GENERATE_KEY 179 -# define EC_F_EC_KEY_NEW 182 -# define EC_F_EC_KEY_NEW_METHOD 245 -# define EC_F_EC_KEY_OCT2PRIV 255 -# define EC_F_EC_KEY_PRINT 180 -# define EC_F_EC_KEY_PRINT_FP 181 -# define EC_F_EC_KEY_PRIV2OCT 256 -# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 -# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 258 -# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 259 -# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 260 -# define EC_F_EC_POINTS_MAKE_AFFINE 136 -# define EC_F_EC_POINT_ADD 112 -# define EC_F_EC_POINT_CMP 113 -# define EC_F_EC_POINT_COPY 114 -# define EC_F_EC_POINT_DBL 115 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 -# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 -# define EC_F_EC_POINT_INVERT 210 -# define EC_F_EC_POINT_IS_AT_INFINITY 118 -# define EC_F_EC_POINT_IS_ON_CURVE 119 -# define EC_F_EC_POINT_MAKE_AFFINE 120 -# define EC_F_EC_POINT_NEW 121 -# define EC_F_EC_POINT_OCT2POINT 122 -# define EC_F_EC_POINT_POINT2OCT 123 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125 -# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126 -# define EC_F_EC_POINT_SET_TO_INFINITY 127 -# define EC_F_EC_PRE_COMP_NEW 196 -# define EC_F_EC_WNAF_MUL 187 -# define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 -# define EC_F_I2D_ECPARAMETERS 190 -# define EC_F_I2D_ECPKPARAMETERS 191 -# define EC_F_I2D_ECPRIVATEKEY 192 -# define EC_F_I2O_ECPUBLICKEY 151 -# define EC_F_NISTP224_PRE_COMP_NEW 227 -# define EC_F_NISTP256_PRE_COMP_NEW 236 -# define EC_F_NISTP521_PRE_COMP_NEW 237 -# define EC_F_O2I_ECPUBLICKEY 152 -# define EC_F_OLD_EC_PRIV_DECODE 222 -# define EC_F_OSSL_ECDH_COMPUTE_KEY 247 -# define EC_F_OSSL_ECDSA_SIGN_SIG 249 -# define EC_F_OSSL_ECDSA_VERIFY_SIG 250 -# define EC_F_PKEY_ECX_DERIVE 269 -# define EC_F_PKEY_EC_CTRL 197 -# define EC_F_PKEY_EC_CTRL_STR 198 -# define EC_F_PKEY_EC_DERIVE 217 -# define EC_F_PKEY_EC_KEYGEN 199 -# define EC_F_PKEY_EC_PARAMGEN 219 -# define EC_F_PKEY_EC_SIGN 218 - -/* Reason codes. */ -# define EC_R_ASN1_ERROR 115 -# define EC_R_BAD_SIGNATURE 156 -# define EC_R_BIGNUM_OUT_OF_RANGE 144 -# define EC_R_BUFFER_TOO_SMALL 100 -# define EC_R_COORDINATES_OUT_OF_RANGE 146 -# define EC_R_CURVE_DOES_NOT_SUPPORT_ECDH 160 -# define EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING 159 -# define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 -# define EC_R_DECODE_ERROR 142 -# define EC_R_DISCRIMINANT_IS_ZERO 118 -# define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 -# define EC_R_FIELD_TOO_LARGE 143 -# define EC_R_GF2M_NOT_SUPPORTED 147 -# define EC_R_GROUP2PKPARAMETERS_FAILURE 120 -# define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 -# define EC_R_INCOMPATIBLE_OBJECTS 101 -# define EC_R_INVALID_ARGUMENT 112 -# define EC_R_INVALID_COMPRESSED_POINT 110 -# define EC_R_INVALID_COMPRESSION_BIT 109 -# define EC_R_INVALID_CURVE 141 -# define EC_R_INVALID_DIGEST 151 -# define EC_R_INVALID_DIGEST_TYPE 138 -# define EC_R_INVALID_ENCODING 102 -# define EC_R_INVALID_FIELD 103 -# define EC_R_INVALID_FORM 104 -# define EC_R_INVALID_GROUP_ORDER 122 -# define EC_R_INVALID_KEY 116 -# define EC_R_INVALID_OUTPUT_LENGTH 161 -# define EC_R_INVALID_PEER_KEY 133 -# define EC_R_INVALID_PENTANOMIAL_BASIS 132 -# define EC_R_INVALID_PRIVATE_KEY 123 -# define EC_R_INVALID_TRINOMIAL_BASIS 137 -# define EC_R_KDF_PARAMETER_ERROR 148 -# define EC_R_KEYS_NOT_SET 140 -# define EC_R_MISSING_PARAMETERS 124 -# define EC_R_MISSING_PRIVATE_KEY 125 -# define EC_R_NEED_NEW_SETUP_VALUES 157 -# define EC_R_NOT_A_NIST_PRIME 135 -# define EC_R_NOT_IMPLEMENTED 126 -# define EC_R_NOT_INITIALIZED 111 -# define EC_R_NO_PARAMETERS_SET 139 -# define EC_R_NO_PRIVATE_VALUE 154 -# define EC_R_OPERATION_NOT_SUPPORTED 152 -# define EC_R_PASSED_NULL_PARAMETER 134 -# define EC_R_PEER_KEY_ERROR 149 -# define EC_R_PKPARAMETERS2GROUP_FAILURE 127 -# define EC_R_POINT_ARITHMETIC_FAILURE 155 -# define EC_R_POINT_AT_INFINITY 106 -# define EC_R_POINT_IS_NOT_ON_CURVE 107 -# define EC_R_RANDOM_NUMBER_GENERATION_FAILED 158 -# define EC_R_SHARED_INFO_ERROR 150 -# define EC_R_SLOT_FULL 108 -# define EC_R_UNDEFINED_GENERATOR 113 -# define EC_R_UNDEFINED_ORDER 128 -# define EC_R_UNKNOWN_GROUP 129 -# define EC_R_UNKNOWN_ORDER 114 -# define EC_R_UNSUPPORTED_FIELD 131 -# define EC_R_WRONG_CURVE_PARAMETERS 145 -# define EC_R_WRONG_ORDER 130 # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/ecerr.h b/libs/windows/include/openssl/ecerr.h new file mode 100644 index 00000000..be313d28 --- /dev/null +++ b/libs/windows/include/openssl/ecerr.h @@ -0,0 +1,271 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ECERR_H +# define HEADER_ECERR_H + +# include + +# ifndef OPENSSL_NO_EC + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_EC_strings(void); + +/* + * EC function codes. + */ +# define EC_F_BN_TO_FELEM 224 +# define EC_F_D2I_ECPARAMETERS 144 +# define EC_F_D2I_ECPKPARAMETERS 145 +# define EC_F_D2I_ECPRIVATEKEY 146 +# define EC_F_DO_EC_KEY_PRINT 221 +# define EC_F_ECDH_CMS_DECRYPT 238 +# define EC_F_ECDH_CMS_SET_SHARED_INFO 239 +# define EC_F_ECDH_COMPUTE_KEY 246 +# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 257 +# define EC_F_ECDSA_DO_SIGN_EX 251 +# define EC_F_ECDSA_DO_VERIFY 252 +# define EC_F_ECDSA_SIGN_EX 254 +# define EC_F_ECDSA_SIGN_SETUP 248 +# define EC_F_ECDSA_SIG_NEW 265 +# define EC_F_ECDSA_VERIFY 253 +# define EC_F_ECD_ITEM_VERIFY 270 +# define EC_F_ECKEY_PARAM2TYPE 223 +# define EC_F_ECKEY_PARAM_DECODE 212 +# define EC_F_ECKEY_PRIV_DECODE 213 +# define EC_F_ECKEY_PRIV_ENCODE 214 +# define EC_F_ECKEY_PUB_DECODE 215 +# define EC_F_ECKEY_PUB_ENCODE 216 +# define EC_F_ECKEY_TYPE2PARAM 220 +# define EC_F_ECPARAMETERS_PRINT 147 +# define EC_F_ECPARAMETERS_PRINT_FP 148 +# define EC_F_ECPKPARAMETERS_PRINT 149 +# define EC_F_ECPKPARAMETERS_PRINT_FP 150 +# define EC_F_ECP_NISTZ256_GET_AFFINE 240 +# define EC_F_ECP_NISTZ256_INV_MOD_ORD 275 +# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 +# define EC_F_ECP_NISTZ256_POINTS_MUL 241 +# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 +# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 +# define EC_F_ECX_KEY_OP 266 +# define EC_F_ECX_PRIV_ENCODE 267 +# define EC_F_ECX_PUB_ENCODE 268 +# define EC_F_EC_ASN1_GROUP2CURVE 153 +# define EC_F_EC_ASN1_GROUP2FIELDID 154 +# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208 +# define EC_F_EC_GF2M_SIMPLE_FIELD_INV 296 +# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159 +# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195 +# define EC_F_EC_GF2M_SIMPLE_LADDER_POST 285 +# define EC_F_EC_GF2M_SIMPLE_LADDER_PRE 288 +# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160 +# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161 +# define EC_F_EC_GF2M_SIMPLE_POINTS_MUL 289 +# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162 +# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163 +# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164 +# define EC_F_EC_GFP_MONT_FIELD_DECODE 133 +# define EC_F_EC_GFP_MONT_FIELD_ENCODE 134 +# define EC_F_EC_GFP_MONT_FIELD_INV 297 +# define EC_F_EC_GFP_MONT_FIELD_MUL 131 +# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209 +# define EC_F_EC_GFP_MONT_FIELD_SQR 132 +# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189 +# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 225 +# define EC_F_EC_GFP_NISTP224_POINTS_MUL 228 +# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226 +# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 230 +# define EC_F_EC_GFP_NISTP256_POINTS_MUL 231 +# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232 +# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 233 +# define EC_F_EC_GFP_NISTP521_POINTS_MUL 234 +# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235 +# define EC_F_EC_GFP_NIST_FIELD_MUL 200 +# define EC_F_EC_GFP_NIST_FIELD_SQR 201 +# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202 +# define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES 287 +# define EC_F_EC_GFP_SIMPLE_FIELD_INV 298 +# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165 +# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 +# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102 +# define EC_F_EC_GFP_SIMPLE_OCT2POINT 103 +# define EC_F_EC_GFP_SIMPLE_POINT2OCT 104 +# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137 +# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167 +# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 +# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 +# define EC_F_EC_GROUP_CHECK 170 +# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171 +# define EC_F_EC_GROUP_COPY 106 +# define EC_F_EC_GROUP_GET_CURVE 291 +# define EC_F_EC_GROUP_GET_CURVE_GF2M 172 +# define EC_F_EC_GROUP_GET_CURVE_GFP 130 +# define EC_F_EC_GROUP_GET_DEGREE 173 +# define EC_F_EC_GROUP_GET_ECPARAMETERS 261 +# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 262 +# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193 +# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194 +# define EC_F_EC_GROUP_NEW 108 +# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174 +# define EC_F_EC_GROUP_NEW_FROM_DATA 175 +# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS 263 +# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 264 +# define EC_F_EC_GROUP_SET_CURVE 292 +# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 +# define EC_F_EC_GROUP_SET_CURVE_GFP 109 +# define EC_F_EC_GROUP_SET_GENERATOR 111 +# define EC_F_EC_GROUP_SET_SEED 286 +# define EC_F_EC_KEY_CHECK_KEY 177 +# define EC_F_EC_KEY_COPY 178 +# define EC_F_EC_KEY_GENERATE_KEY 179 +# define EC_F_EC_KEY_NEW 182 +# define EC_F_EC_KEY_NEW_METHOD 245 +# define EC_F_EC_KEY_OCT2PRIV 255 +# define EC_F_EC_KEY_PRINT 180 +# define EC_F_EC_KEY_PRINT_FP 181 +# define EC_F_EC_KEY_PRIV2BUF 279 +# define EC_F_EC_KEY_PRIV2OCT 256 +# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 +# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 258 +# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 259 +# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 260 +# define EC_F_EC_PKEY_CHECK 273 +# define EC_F_EC_PKEY_PARAM_CHECK 274 +# define EC_F_EC_POINTS_MAKE_AFFINE 136 +# define EC_F_EC_POINTS_MUL 290 +# define EC_F_EC_POINT_ADD 112 +# define EC_F_EC_POINT_BN2POINT 280 +# define EC_F_EC_POINT_CMP 113 +# define EC_F_EC_POINT_COPY 114 +# define EC_F_EC_POINT_DBL 115 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES 293 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 +# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 +# define EC_F_EC_POINT_INVERT 210 +# define EC_F_EC_POINT_IS_AT_INFINITY 118 +# define EC_F_EC_POINT_IS_ON_CURVE 119 +# define EC_F_EC_POINT_MAKE_AFFINE 120 +# define EC_F_EC_POINT_NEW 121 +# define EC_F_EC_POINT_OCT2POINT 122 +# define EC_F_EC_POINT_POINT2BUF 281 +# define EC_F_EC_POINT_POINT2OCT 123 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES 294 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES 295 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125 +# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126 +# define EC_F_EC_POINT_SET_TO_INFINITY 127 +# define EC_F_EC_PRE_COMP_NEW 196 +# define EC_F_EC_SCALAR_MUL_LADDER 284 +# define EC_F_EC_WNAF_MUL 187 +# define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 +# define EC_F_I2D_ECPARAMETERS 190 +# define EC_F_I2D_ECPKPARAMETERS 191 +# define EC_F_I2D_ECPRIVATEKEY 192 +# define EC_F_I2O_ECPUBLICKEY 151 +# define EC_F_NISTP224_PRE_COMP_NEW 227 +# define EC_F_NISTP256_PRE_COMP_NEW 236 +# define EC_F_NISTP521_PRE_COMP_NEW 237 +# define EC_F_O2I_ECPUBLICKEY 152 +# define EC_F_OLD_EC_PRIV_DECODE 222 +# define EC_F_OSSL_ECDH_COMPUTE_KEY 247 +# define EC_F_OSSL_ECDSA_SIGN_SIG 249 +# define EC_F_OSSL_ECDSA_VERIFY_SIG 250 +# define EC_F_PKEY_ECD_CTRL 271 +# define EC_F_PKEY_ECD_DIGESTSIGN 272 +# define EC_F_PKEY_ECD_DIGESTSIGN25519 276 +# define EC_F_PKEY_ECD_DIGESTSIGN448 277 +# define EC_F_PKEY_ECX_DERIVE 269 +# define EC_F_PKEY_EC_CTRL 197 +# define EC_F_PKEY_EC_CTRL_STR 198 +# define EC_F_PKEY_EC_DERIVE 217 +# define EC_F_PKEY_EC_INIT 282 +# define EC_F_PKEY_EC_KDF_DERIVE 283 +# define EC_F_PKEY_EC_KEYGEN 199 +# define EC_F_PKEY_EC_PARAMGEN 219 +# define EC_F_PKEY_EC_SIGN 218 +# define EC_F_VALIDATE_ECX_DERIVE 278 + +/* + * EC reason codes. + */ +# define EC_R_ASN1_ERROR 115 +# define EC_R_BAD_SIGNATURE 156 +# define EC_R_BIGNUM_OUT_OF_RANGE 144 +# define EC_R_BUFFER_TOO_SMALL 100 +# define EC_R_CANNOT_INVERT 165 +# define EC_R_COORDINATES_OUT_OF_RANGE 146 +# define EC_R_CURVE_DOES_NOT_SUPPORT_ECDH 160 +# define EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING 159 +# define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 +# define EC_R_DECODE_ERROR 142 +# define EC_R_DISCRIMINANT_IS_ZERO 118 +# define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 +# define EC_R_FIELD_TOO_LARGE 143 +# define EC_R_GF2M_NOT_SUPPORTED 147 +# define EC_R_GROUP2PKPARAMETERS_FAILURE 120 +# define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 +# define EC_R_INCOMPATIBLE_OBJECTS 101 +# define EC_R_INVALID_ARGUMENT 112 +# define EC_R_INVALID_COMPRESSED_POINT 110 +# define EC_R_INVALID_COMPRESSION_BIT 109 +# define EC_R_INVALID_CURVE 141 +# define EC_R_INVALID_DIGEST 151 +# define EC_R_INVALID_DIGEST_TYPE 138 +# define EC_R_INVALID_ENCODING 102 +# define EC_R_INVALID_FIELD 103 +# define EC_R_INVALID_FORM 104 +# define EC_R_INVALID_GROUP_ORDER 122 +# define EC_R_INVALID_KEY 116 +# define EC_R_INVALID_OUTPUT_LENGTH 161 +# define EC_R_INVALID_PEER_KEY 133 +# define EC_R_INVALID_PENTANOMIAL_BASIS 132 +# define EC_R_INVALID_PRIVATE_KEY 123 +# define EC_R_INVALID_TRINOMIAL_BASIS 137 +# define EC_R_KDF_PARAMETER_ERROR 148 +# define EC_R_KEYS_NOT_SET 140 +# define EC_R_LADDER_POST_FAILURE 136 +# define EC_R_LADDER_PRE_FAILURE 153 +# define EC_R_LADDER_STEP_FAILURE 162 +# define EC_R_MISSING_PARAMETERS 124 +# define EC_R_MISSING_PRIVATE_KEY 125 +# define EC_R_NEED_NEW_SETUP_VALUES 157 +# define EC_R_NOT_A_NIST_PRIME 135 +# define EC_R_NOT_IMPLEMENTED 126 +# define EC_R_NOT_INITIALIZED 111 +# define EC_R_NO_PARAMETERS_SET 139 +# define EC_R_NO_PRIVATE_VALUE 154 +# define EC_R_OPERATION_NOT_SUPPORTED 152 +# define EC_R_PASSED_NULL_PARAMETER 134 +# define EC_R_PEER_KEY_ERROR 149 +# define EC_R_PKPARAMETERS2GROUP_FAILURE 127 +# define EC_R_POINT_ARITHMETIC_FAILURE 155 +# define EC_R_POINT_AT_INFINITY 106 +# define EC_R_POINT_COORDINATES_BLIND_FAILURE 163 +# define EC_R_POINT_IS_NOT_ON_CURVE 107 +# define EC_R_RANDOM_NUMBER_GENERATION_FAILED 158 +# define EC_R_SHARED_INFO_ERROR 150 +# define EC_R_SLOT_FULL 108 +# define EC_R_UNDEFINED_GENERATOR 113 +# define EC_R_UNDEFINED_ORDER 128 +# define EC_R_UNKNOWN_COFACTOR 164 +# define EC_R_UNKNOWN_GROUP 129 +# define EC_R_UNKNOWN_ORDER 114 +# define EC_R_UNSUPPORTED_FIELD 131 +# define EC_R_WRONG_CURVE_PARAMETERS 145 +# define EC_R_WRONG_ORDER 130 + +# endif +#endif diff --git a/libs/windows/include/openssl/engine.h b/libs/windows/include/openssl/engine.h index 26cf7148..0780f0fb 100644 --- a/libs/windows/include/openssl/engine.h +++ b/libs/windows/include/openssl/engine.h @@ -1,5 +1,6 @@ /* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -7,12 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECDH support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - #ifndef HEADER_ENGINE_H # define HEADER_ENGINE_H @@ -32,6 +27,7 @@ # include # include # include +# include # ifdef __cplusplus extern "C" { # endif @@ -405,7 +401,7 @@ int ENGINE_register_complete(ENGINE *e); int ENGINE_register_all_complete(void); /* - * Send parametrised control commands to the engine. The possibilities to + * Send parameterised control commands to the engine. The possibilities to * send down an integer, a pointer to data or a function pointer are * provided. Any of the parameters may or may not be NULL, depending on the * command number. In actuality, this function only requires a structural @@ -743,95 +739,10 @@ typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, */ void *ENGINE_get_static_state(void); -# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV) +# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) DEPRECATEDIN_1_1_0(void ENGINE_setup_bsd_cryptodev(void)) # endif -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_ENGINE_strings(void); - -/* Error codes for the ENGINE functions. */ - -/* Function codes. */ -# define ENGINE_F_DYNAMIC_CTRL 180 -# define ENGINE_F_DYNAMIC_GET_DATA_CTX 181 -# define ENGINE_F_DYNAMIC_LOAD 182 -# define ENGINE_F_DYNAMIC_SET_DATA_CTX 183 -# define ENGINE_F_ENGINE_ADD 105 -# define ENGINE_F_ENGINE_BY_ID 106 -# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170 -# define ENGINE_F_ENGINE_CTRL 142 -# define ENGINE_F_ENGINE_CTRL_CMD 178 -# define ENGINE_F_ENGINE_CTRL_CMD_STRING 171 -# define ENGINE_F_ENGINE_FINISH 107 -# define ENGINE_F_ENGINE_GET_CIPHER 185 -# define ENGINE_F_ENGINE_GET_DIGEST 186 -# define ENGINE_F_ENGINE_GET_FIRST 195 -# define ENGINE_F_ENGINE_GET_LAST 196 -# define ENGINE_F_ENGINE_GET_NEXT 115 -# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 193 -# define ENGINE_F_ENGINE_GET_PKEY_METH 192 -# define ENGINE_F_ENGINE_GET_PREV 116 -# define ENGINE_F_ENGINE_INIT 119 -# define ENGINE_F_ENGINE_LIST_ADD 120 -# define ENGINE_F_ENGINE_LIST_REMOVE 121 -# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150 -# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151 -# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 194 -# define ENGINE_F_ENGINE_NEW 122 -# define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR 197 -# define ENGINE_F_ENGINE_REMOVE 123 -# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 -# define ENGINE_F_ENGINE_SET_ID 129 -# define ENGINE_F_ENGINE_SET_NAME 130 -# define ENGINE_F_ENGINE_TABLE_REGISTER 184 -# define ENGINE_F_ENGINE_UNLOCKED_FINISH 191 -# define ENGINE_F_ENGINE_UP_REF 190 -# define ENGINE_F_INT_CTRL_HELPER 172 -# define ENGINE_F_INT_ENGINE_CONFIGURE 188 -# define ENGINE_F_INT_ENGINE_MODULE_INIT 187 - -/* Reason codes. */ -# define ENGINE_R_ALREADY_LOADED 100 -# define ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER 133 -# define ENGINE_R_CMD_NOT_EXECUTABLE 134 -# define ENGINE_R_COMMAND_TAKES_INPUT 135 -# define ENGINE_R_COMMAND_TAKES_NO_INPUT 136 -# define ENGINE_R_CONFLICTING_ENGINE_ID 103 -# define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 119 -# define ENGINE_R_DSO_FAILURE 104 -# define ENGINE_R_DSO_NOT_FOUND 132 -# define ENGINE_R_ENGINES_SECTION_ERROR 148 -# define ENGINE_R_ENGINE_CONFIGURATION_ERROR 102 -# define ENGINE_R_ENGINE_IS_NOT_IN_LIST 105 -# define ENGINE_R_ENGINE_SECTION_ERROR 149 -# define ENGINE_R_FAILED_LOADING_PRIVATE_KEY 128 -# define ENGINE_R_FAILED_LOADING_PUBLIC_KEY 129 -# define ENGINE_R_FINISH_FAILED 106 -# define ENGINE_R_ID_OR_NAME_MISSING 108 -# define ENGINE_R_INIT_FAILED 109 -# define ENGINE_R_INTERNAL_LIST_ERROR 110 -# define ENGINE_R_INVALID_ARGUMENT 143 -# define ENGINE_R_INVALID_CMD_NAME 137 -# define ENGINE_R_INVALID_CMD_NUMBER 138 -# define ENGINE_R_INVALID_INIT_VALUE 151 -# define ENGINE_R_INVALID_STRING 150 -# define ENGINE_R_NOT_INITIALISED 117 -# define ENGINE_R_NOT_LOADED 112 -# define ENGINE_R_NO_CONTROL_FUNCTION 120 -# define ENGINE_R_NO_INDEX 144 -# define ENGINE_R_NO_LOAD_FUNCTION 125 -# define ENGINE_R_NO_REFERENCE 130 -# define ENGINE_R_NO_SUCH_ENGINE 116 -# define ENGINE_R_UNIMPLEMENTED_CIPHER 146 -# define ENGINE_R_UNIMPLEMENTED_DIGEST 147 -# define ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD 101 -# define ENGINE_R_VERSION_INCOMPATIBILITY 145 # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/engineerr.h b/libs/windows/include/openssl/engineerr.h new file mode 100644 index 00000000..b4c036b2 --- /dev/null +++ b/libs/windows/include/openssl/engineerr.h @@ -0,0 +1,107 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ENGINEERR_H +# define HEADER_ENGINEERR_H + +# include + +# ifndef OPENSSL_NO_ENGINE + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_ENGINE_strings(void); + +/* + * ENGINE function codes. + */ +# define ENGINE_F_DIGEST_UPDATE 198 +# define ENGINE_F_DYNAMIC_CTRL 180 +# define ENGINE_F_DYNAMIC_GET_DATA_CTX 181 +# define ENGINE_F_DYNAMIC_LOAD 182 +# define ENGINE_F_DYNAMIC_SET_DATA_CTX 183 +# define ENGINE_F_ENGINE_ADD 105 +# define ENGINE_F_ENGINE_BY_ID 106 +# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170 +# define ENGINE_F_ENGINE_CTRL 142 +# define ENGINE_F_ENGINE_CTRL_CMD 178 +# define ENGINE_F_ENGINE_CTRL_CMD_STRING 171 +# define ENGINE_F_ENGINE_FINISH 107 +# define ENGINE_F_ENGINE_GET_CIPHER 185 +# define ENGINE_F_ENGINE_GET_DIGEST 186 +# define ENGINE_F_ENGINE_GET_FIRST 195 +# define ENGINE_F_ENGINE_GET_LAST 196 +# define ENGINE_F_ENGINE_GET_NEXT 115 +# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 193 +# define ENGINE_F_ENGINE_GET_PKEY_METH 192 +# define ENGINE_F_ENGINE_GET_PREV 116 +# define ENGINE_F_ENGINE_INIT 119 +# define ENGINE_F_ENGINE_LIST_ADD 120 +# define ENGINE_F_ENGINE_LIST_REMOVE 121 +# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150 +# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151 +# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 194 +# define ENGINE_F_ENGINE_NEW 122 +# define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR 197 +# define ENGINE_F_ENGINE_REMOVE 123 +# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 +# define ENGINE_F_ENGINE_SET_ID 129 +# define ENGINE_F_ENGINE_SET_NAME 130 +# define ENGINE_F_ENGINE_TABLE_REGISTER 184 +# define ENGINE_F_ENGINE_UNLOCKED_FINISH 191 +# define ENGINE_F_ENGINE_UP_REF 190 +# define ENGINE_F_INT_CLEANUP_ITEM 199 +# define ENGINE_F_INT_CTRL_HELPER 172 +# define ENGINE_F_INT_ENGINE_CONFIGURE 188 +# define ENGINE_F_INT_ENGINE_MODULE_INIT 187 +# define ENGINE_F_OSSL_HMAC_INIT 200 + +/* + * ENGINE reason codes. + */ +# define ENGINE_R_ALREADY_LOADED 100 +# define ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER 133 +# define ENGINE_R_CMD_NOT_EXECUTABLE 134 +# define ENGINE_R_COMMAND_TAKES_INPUT 135 +# define ENGINE_R_COMMAND_TAKES_NO_INPUT 136 +# define ENGINE_R_CONFLICTING_ENGINE_ID 103 +# define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 119 +# define ENGINE_R_DSO_FAILURE 104 +# define ENGINE_R_DSO_NOT_FOUND 132 +# define ENGINE_R_ENGINES_SECTION_ERROR 148 +# define ENGINE_R_ENGINE_CONFIGURATION_ERROR 102 +# define ENGINE_R_ENGINE_IS_NOT_IN_LIST 105 +# define ENGINE_R_ENGINE_SECTION_ERROR 149 +# define ENGINE_R_FAILED_LOADING_PRIVATE_KEY 128 +# define ENGINE_R_FAILED_LOADING_PUBLIC_KEY 129 +# define ENGINE_R_FINISH_FAILED 106 +# define ENGINE_R_ID_OR_NAME_MISSING 108 +# define ENGINE_R_INIT_FAILED 109 +# define ENGINE_R_INTERNAL_LIST_ERROR 110 +# define ENGINE_R_INVALID_ARGUMENT 143 +# define ENGINE_R_INVALID_CMD_NAME 137 +# define ENGINE_R_INVALID_CMD_NUMBER 138 +# define ENGINE_R_INVALID_INIT_VALUE 151 +# define ENGINE_R_INVALID_STRING 150 +# define ENGINE_R_NOT_INITIALISED 117 +# define ENGINE_R_NOT_LOADED 112 +# define ENGINE_R_NO_CONTROL_FUNCTION 120 +# define ENGINE_R_NO_INDEX 144 +# define ENGINE_R_NO_LOAD_FUNCTION 125 +# define ENGINE_R_NO_REFERENCE 130 +# define ENGINE_R_NO_SUCH_ENGINE 116 +# define ENGINE_R_UNIMPLEMENTED_CIPHER 146 +# define ENGINE_R_UNIMPLEMENTED_DIGEST 147 +# define ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD 101 +# define ENGINE_R_VERSION_INCOMPATIBILITY 145 + +# endif +#endif diff --git a/libs/windows/include/openssl/err.h b/libs/windows/include/openssl/err.h index 29a261ce..ea304b8e 100644 --- a/libs/windows/include/openssl/err.h +++ b/libs/windows/include/openssl/err.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -37,6 +37,7 @@ extern "C" { # define ERR_TXT_STRING 0x02 # define ERR_FLAG_MARK 0x01 +# define ERR_FLAG_CLEAR 0x02 # define ERR_NUM_ERRORS 16 typedef struct err_state_st { @@ -84,7 +85,7 @@ typedef struct err_state_st { # define ERR_LIB_COMP 41 # define ERR_LIB_ECDSA 42 # define ERR_LIB_ECDH 43 -# define ERR_LIB_STORE 44 +# define ERR_LIB_OSSL_STORE 44 # define ERR_LIB_FIPS 45 # define ERR_LIB_CMS 46 # define ERR_LIB_TS 47 @@ -93,6 +94,7 @@ typedef struct err_state_st { # define ERR_LIB_CT 50 # define ERR_LIB_ASYNC 51 # define ERR_LIB_KDF 52 +# define ERR_LIB_SM2 53 # define ERR_LIB_USER 128 @@ -123,7 +125,7 @@ typedef struct err_state_st { # define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) # define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) # define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define STOREerr(f,r) ERR_PUT_error(ERR_LIB_STORE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define OSSL_STOREerr(f,r) ERR_PUT_error(ERR_LIB_OSSL_STORE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) # define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) # define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) # define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) @@ -131,6 +133,7 @@ typedef struct err_state_st { # define CTerr(f,r) ERR_PUT_error(ERR_LIB_CT,(f),(r),OPENSSL_FILE,OPENSSL_LINE) # define ASYNCerr(f,r) ERR_PUT_error(ERR_LIB_ASYNC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) # define KDFerr(f,r) ERR_PUT_error(ERR_LIB_KDF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define SM2err(f,r) ERR_PUT_error(ERR_LIB_SM2,(f),(r),OPENSSL_FILE,OPENSSL_LINE) # define ERR_PACK(l,f,r) ( \ (((unsigned int)(l) & 0x0FF) << 24L) | \ @@ -160,6 +163,12 @@ typedef struct err_state_st { # define SYS_F_GETSOCKNAME 16 # define SYS_F_GETHOSTBYNAME 17 # define SYS_F_FFLUSH 18 +# define SYS_F_OPEN 19 +# define SYS_F_CLOSE 20 +# define SYS_F_IOCTL 21 +# define SYS_F_STAT 22 +# define SYS_F_FCNTL 23 +# define SYS_F_FSTAT 24 /* reasons */ # define ERR_R_SYS_LIB ERR_LIB_SYS/* 2 */ @@ -178,7 +187,9 @@ typedef struct err_state_st { # define ERR_R_PKCS7_LIB ERR_LIB_PKCS7/* 33 */ # define ERR_R_X509V3_LIB ERR_LIB_X509V3/* 34 */ # define ERR_R_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ +# define ERR_R_UI_LIB ERR_LIB_UI/* 40 */ # define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ +# define ERR_R_OSSL_STORE_LIB ERR_LIB_OSSL_STORE/* 44 */ # define ERR_R_NESTED_ASN1_ERROR 58 # define ERR_R_MISSING_ASN1_EOS 63 @@ -192,6 +203,7 @@ typedef struct err_state_st { # define ERR_R_DISABLED (5|ERR_R_FATAL) # define ERR_R_INIT_FAIL (6|ERR_R_FATAL) # define ERR_R_PASSED_INVALID_ARGUMENT (7) +# define ERR_R_OPERATION_FAIL (8|ERR_R_FATAL) /* * 99 is the maximum possible ERR_R_... code, higher values are reserved for @@ -234,8 +246,9 @@ void ERR_print_errors_fp(FILE *fp); void ERR_print_errors(BIO *bp); void ERR_add_error_data(int num, ...); void ERR_add_error_vdata(int num, va_list args); -int ERR_load_strings(int lib, ERR_STRING_DATA str[]); -int ERR_unload_strings(int lib, ERR_STRING_DATA str[]); +int ERR_load_strings(int lib, ERR_STRING_DATA *str); +int ERR_load_strings_const(const ERR_STRING_DATA *str); +int ERR_unload_strings(int lib, ERR_STRING_DATA *str); int ERR_load_ERR_strings(void); #if OPENSSL_API_COMPAT < 0x10100000L @@ -252,6 +265,7 @@ int ERR_get_next_error_library(void); int ERR_set_mark(void); int ERR_pop_to_mark(void); +int ERR_clear_last_mark(void); #ifdef __cplusplus } diff --git a/libs/windows/include/openssl/evp.h b/libs/windows/include/openssl/evp.h index 36e29344..dd1117d0 100644 --- a/libs/windows/include/openssl/evp.h +++ b/libs/windows/include/openssl/evp.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -14,6 +14,7 @@ # include # include # include +# include # define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ # define EVP_MAX_KEY_LENGTH 64 @@ -40,6 +41,7 @@ # define EVP_PKEY_NONE NID_undef # define EVP_PKEY_RSA NID_rsaEncryption # define EVP_PKEY_RSA2 NID_rsa +# define EVP_PKEY_RSA_PSS NID_rsassaPss # define EVP_PKEY_DSA NID_dsa # define EVP_PKEY_DSA1 NID_dsa_2 # define EVP_PKEY_DSA2 NID_dsaWithSHA @@ -48,10 +50,18 @@ # define EVP_PKEY_DH NID_dhKeyAgreement # define EVP_PKEY_DHX NID_dhpublicnumber # define EVP_PKEY_EC NID_X9_62_id_ecPublicKey +# define EVP_PKEY_SM2 NID_sm2 # define EVP_PKEY_HMAC NID_hmac # define EVP_PKEY_CMAC NID_cmac +# define EVP_PKEY_SCRYPT NID_id_scrypt # define EVP_PKEY_TLS1_PRF NID_tls1_prf # define EVP_PKEY_HKDF NID_hkdf +# define EVP_PKEY_POLY1305 NID_poly1305 +# define EVP_PKEY_SIPHASH NID_siphash +# define EVP_PKEY_X25519 NID_X25519 +# define EVP_PKEY_ED25519 NID_ED25519 +# define EVP_PKEY_X448 NID_X448 +# define EVP_PKEY_ED448 NID_ED448 #ifdef __cplusplus extern "C" { @@ -102,6 +112,9 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, /* digest can only handle a single block */ # define EVP_MD_FLAG_ONESHOT 0x0001 +/* digest is extensible-output function, XOF */ +# define EVP_MD_FLAG_XOF 0x0002 + /* DigestAlgorithmIdentifier flags... */ # define EVP_MD_FLAG_DIGALGID_MASK 0x0018 @@ -125,6 +138,7 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, # define EVP_MD_CTRL_DIGALGID 0x1 # define EVP_MD_CTRL_MICALG 0x2 +# define EVP_MD_CTRL_XOF_LEN 0x3 /* Minimum Algorithm specific ctrl value */ @@ -166,6 +180,7 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, * if the following flag is set. */ # define EVP_MD_CTX_FLAG_FINALISE 0x0200 +/* NOTE: 0x0400 is reserved for internal usage in evp_int.h */ EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len); EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher); @@ -364,6 +379,15 @@ typedef struct { # define EVP_CCM_TLS_FIXED_IV_LEN 4 /* Length of explicit part of IV part of TLS records */ # define EVP_CCM_TLS_EXPLICIT_IV_LEN 8 +/* Total length of CCM IV length for TLS */ +# define EVP_CCM_TLS_IV_LEN 12 +/* Length of tag for TLS */ +# define EVP_CCM_TLS_TAG_LEN 16 +/* Length of CCM8 tag for TLS */ +# define EVP_CCM8_TLS_TAG_LEN 8 + +/* Length of tag for TLS */ +# define EVP_CHACHAPOLY_TLS_TAG_LEN 16 typedef struct evp_cipher_info_st { const EVP_CIPHER *cipher; @@ -396,6 +420,15 @@ typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, # define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\ (char *)(eckey)) # endif +# ifndef OPENSSL_NO_SIPHASH +# define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),EVP_PKEY_SIPHASH,\ + (char *)(shkey)) +# endif + +# ifndef OPENSSL_NO_POLY1305 +# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),EVP_PKEY_POLY1305,\ + (char *)(polykey)) +# endif /* Add some extra combinations */ # define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a)) @@ -421,6 +454,7 @@ void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, # define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e)) # define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e)) EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx); +void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx); void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx); int EVP_CIPHER_nid(const EVP_CIPHER *cipher); @@ -455,8 +489,8 @@ void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); # endif # define EVP_CIPHER_CTX_mode(c) EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c)) -# define EVP_ENCODE_LENGTH(l) (((l+2)/3*4)+(l/48+1)*2+80) -# define EVP_DECODE_LENGTH(l) ((l+3)/4*3+80) +# define EVP_ENCODE_LENGTH(l) ((((l)+2)/3*4)+((l)/48+1)*2+80) +# define EVP_DECODE_LENGTH(l) (((l)+3)/4*3+80) # define EVP_SignInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) # define EVP_SignInit(a,b) EVP_DigestInit(a,b) @@ -472,13 +506,16 @@ void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); # ifdef CONST_STRICT void BIO_set_md(BIO *, const EVP_MD *md); # else -# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)md) +# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)(md)) # endif -# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)mdp) -# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(char *)mdcp) -# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(char *)mdcp) -# define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) -# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(char *)c_pp) +# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)(mdp)) +# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0, \ + (char *)(mdcp)) +# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0, \ + (char *)(mdcp)) +# define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) +# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0, \ + (char *)(c_pp)) /*__owur*/ int EVP_Cipher(EVP_CIPHER_CTX *c, unsigned char *out, @@ -518,14 +555,14 @@ __owur int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); __owur int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); __owur int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); +__owur int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, + size_t len); -#ifndef OPENSSL_NO_UI int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify); int EVP_read_pw_string_min(char *buf, int minlen, int maxlen, const char *prompt, int verify); void EVP_set_pw_prompt(const char *prompt); char *EVP_get_pw_prompt(void); -#endif __owur int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, const unsigned char *salt, @@ -579,9 +616,17 @@ __owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, __owur int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, EVP_PKEY *pkey); +__owur int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, + size_t *siglen, const unsigned char *tbs, + size_t tbslen); + __owur int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, unsigned int siglen, EVP_PKEY *pkey); +__owur int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, + size_t siglen, const unsigned char *tbs, + size_t tbslen); + /*__owur*/ int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); @@ -662,6 +707,14 @@ const EVP_MD *EVP_sha224(void); const EVP_MD *EVP_sha256(void); const EVP_MD *EVP_sha384(void); const EVP_MD *EVP_sha512(void); +const EVP_MD *EVP_sha512_224(void); +const EVP_MD *EVP_sha512_256(void); +const EVP_MD *EVP_sha3_224(void); +const EVP_MD *EVP_sha3_256(void); +const EVP_MD *EVP_sha3_384(void); +const EVP_MD *EVP_sha3_512(void); +const EVP_MD *EVP_shake128(void); +const EVP_MD *EVP_shake256(void); # ifndef OPENSSL_NO_MDC2 const EVP_MD *EVP_mdc2(void); # endif @@ -671,6 +724,9 @@ const EVP_MD *EVP_ripemd160(void); # ifndef OPENSSL_NO_WHIRLPOOL const EVP_MD *EVP_whirlpool(void); # endif +# ifndef OPENSSL_NO_SM3 +const EVP_MD *EVP_sm3(void); +# endif const EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */ # ifndef OPENSSL_NO_DES const EVP_CIPHER *EVP_des_ecb(void); @@ -797,6 +853,38 @@ const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void); const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void); const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void); const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void); +# ifndef OPENSSL_NO_ARIA +const EVP_CIPHER *EVP_aria_128_ecb(void); +const EVP_CIPHER *EVP_aria_128_cbc(void); +const EVP_CIPHER *EVP_aria_128_cfb1(void); +const EVP_CIPHER *EVP_aria_128_cfb8(void); +const EVP_CIPHER *EVP_aria_128_cfb128(void); +# define EVP_aria_128_cfb EVP_aria_128_cfb128 +const EVP_CIPHER *EVP_aria_128_ctr(void); +const EVP_CIPHER *EVP_aria_128_ofb(void); +const EVP_CIPHER *EVP_aria_128_gcm(void); +const EVP_CIPHER *EVP_aria_128_ccm(void); +const EVP_CIPHER *EVP_aria_192_ecb(void); +const EVP_CIPHER *EVP_aria_192_cbc(void); +const EVP_CIPHER *EVP_aria_192_cfb1(void); +const EVP_CIPHER *EVP_aria_192_cfb8(void); +const EVP_CIPHER *EVP_aria_192_cfb128(void); +# define EVP_aria_192_cfb EVP_aria_192_cfb128 +const EVP_CIPHER *EVP_aria_192_ctr(void); +const EVP_CIPHER *EVP_aria_192_ofb(void); +const EVP_CIPHER *EVP_aria_192_gcm(void); +const EVP_CIPHER *EVP_aria_192_ccm(void); +const EVP_CIPHER *EVP_aria_256_ecb(void); +const EVP_CIPHER *EVP_aria_256_cbc(void); +const EVP_CIPHER *EVP_aria_256_cfb1(void); +const EVP_CIPHER *EVP_aria_256_cfb8(void); +const EVP_CIPHER *EVP_aria_256_cfb128(void); +# define EVP_aria_256_cfb EVP_aria_256_cfb128 +const EVP_CIPHER *EVP_aria_256_ctr(void); +const EVP_CIPHER *EVP_aria_256_ofb(void); +const EVP_CIPHER *EVP_aria_256_gcm(void); +const EVP_CIPHER *EVP_aria_256_ccm(void); +# endif # ifndef OPENSSL_NO_CAMELLIA const EVP_CIPHER *EVP_camellia_128_ecb(void); const EVP_CIPHER *EVP_camellia_128_cbc(void); @@ -838,6 +926,15 @@ const EVP_CIPHER *EVP_seed_cfb128(void); const EVP_CIPHER *EVP_seed_ofb(void); # endif +# ifndef OPENSSL_NO_SM4 +const EVP_CIPHER *EVP_sm4_ecb(void); +const EVP_CIPHER *EVP_sm4_cbc(void); +const EVP_CIPHER *EVP_sm4_cfb128(void); +# define EVP_sm4_cfb EVP_sm4_cfb128 +const EVP_CIPHER *EVP_sm4_ofb(void); +const EVP_CIPHER *EVP_sm4_ctr(void); +# endif + # if OPENSSL_API_COMPAT < 0x10100000L # define OPENSSL_add_all_algorithms_conf() \ OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ @@ -848,14 +945,9 @@ const EVP_CIPHER *EVP_seed_ofb(void); | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) # ifdef OPENSSL_LOAD_CONF -# define OpenSSL_add_all_algorithms() \ - OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ - | OPENSSL_INIT_ADD_ALL_DIGESTS \ - | OPENSSL_INIT_LOAD_CONFIG, NULL) +# define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_conf() # else -# define OpenSSL_add_all_algorithms() \ - OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ - | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) +# define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_noconf() # endif # define OpenSSL_add_all_ciphers() \ @@ -897,15 +989,23 @@ int EVP_PKEY_id(const EVP_PKEY *pkey); int EVP_PKEY_base_id(const EVP_PKEY *pkey); int EVP_PKEY_bits(const EVP_PKEY *pkey); int EVP_PKEY_security_bits(const EVP_PKEY *pkey); -int EVP_PKEY_size(EVP_PKEY *pkey); +int EVP_PKEY_size(const EVP_PKEY *pkey); int EVP_PKEY_set_type(EVP_PKEY *pkey, int type); int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len); +int EVP_PKEY_set_alias_type(EVP_PKEY *pkey, int type); # ifndef OPENSSL_NO_ENGINE int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *e); +ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey); # endif int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); void *EVP_PKEY_get0(const EVP_PKEY *pkey); const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len); +# ifndef OPENSSL_NO_POLY1305 +const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len); +# endif +# ifndef OPENSSL_NO_SIPHASH +const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len); +# endif # ifndef OPENSSL_NO_RSA struct rsa_st; @@ -1114,6 +1214,38 @@ void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, X509_ALGOR *alg2, ASN1_BIT_STRING *sig)); +void EVP_PKEY_asn1_set_siginf(EVP_PKEY_ASN1_METHOD *ameth, + int (*siginf_set) (X509_SIG_INFO *siginf, + const X509_ALGOR *alg, + const ASN1_STRING *sig)); + +void EVP_PKEY_asn1_set_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_check) (const EVP_PKEY *pk)); + +void EVP_PKEY_asn1_set_public_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_pub_check) (const EVP_PKEY *pk)); + +void EVP_PKEY_asn1_set_param_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_param_check) (const EVP_PKEY *pk)); + +void EVP_PKEY_asn1_set_set_priv_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*set_priv_key) (EVP_PKEY *pk, + const unsigned char + *priv, + size_t len)); +void EVP_PKEY_asn1_set_set_pub_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*set_pub_key) (EVP_PKEY *pk, + const unsigned char *pub, + size_t len)); +void EVP_PKEY_asn1_set_get_priv_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*get_priv_key) (const EVP_PKEY *pk, + unsigned char *priv, + size_t *len)); +void EVP_PKEY_asn1_set_get_pub_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*get_pub_key) (const EVP_PKEY *pk, + unsigned char *pub, + size_t *len)); + void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, int (*pkey_security_bits) (const EVP_PKEY *pk)); @@ -1145,15 +1277,15 @@ void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, # define EVP_PKEY_CTX_set_signature_md(ctx, md) \ EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_MD, 0, (void *)md) + EVP_PKEY_CTRL_MD, 0, (void *)(md)) # define EVP_PKEY_CTX_get_signature_md(ctx, pmd) \ EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_GET_MD, 0, (void *)pmd) + EVP_PKEY_CTRL_GET_MD, 0, (void *)(pmd)) # define EVP_PKEY_CTX_set_mac_key(ctx, key, len) \ EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_SET_MAC_KEY, len, (void *)key) + EVP_PKEY_CTRL_SET_MAC_KEY, len, (void *)(key)) # define EVP_PKEY_CTRL_MD 1 # define EVP_PKEY_CTRL_PEER_KEY 2 @@ -1178,6 +1310,8 @@ void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, # define EVP_PKEY_CTRL_GET_MD 13 +# define EVP_PKEY_CTRL_SET_DIGEST_SIZE 14 + # define EVP_PKEY_ALG_CTRL 0x1000 # define EVP_PKEY_FLAG_AUTOARGLEN 2 @@ -1193,6 +1327,9 @@ void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src); void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); +int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth); +size_t EVP_PKEY_meth_get_count(void); +const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx); EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); @@ -1203,15 +1340,32 @@ int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, int cmd, int p1, void *p2); int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, const char *value); +int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype, + int cmd, uint64_t value); int EVP_PKEY_CTX_str2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *str); int EVP_PKEY_CTX_hex2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *hex); +int EVP_PKEY_CTX_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md); + int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx); void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen); EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, const unsigned char *key, int keylen); +EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *e, + const unsigned char *priv, + size_t len); +EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *e, + const unsigned char *pub, + size_t len); +int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv, + size_t *len); +int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub, + size_t *len); + +EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv, + size_t len, const EVP_CIPHER *cipher); void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx); @@ -1253,6 +1407,9 @@ int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); +int EVP_PKEY_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_public_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx); void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); @@ -1351,6 +1508,19 @@ void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, const char *type, const char *value)); +void EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth, + int (*check) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth, + int (*check) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth, + int (*check) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_digest_custom(EVP_PKEY_METHOD *pmeth, + int (*digest_custom) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx)); + void EVP_PKEY_meth_get_init(const EVP_PKEY_METHOD *pmeth, int (**pinit) (EVP_PKEY_CTX *ctx)); @@ -1443,156 +1613,20 @@ void EVP_PKEY_meth_get_ctrl(const EVP_PKEY_METHOD *pmeth, const char *type, const char *value)); +void EVP_PKEY_meth_get_check(const EVP_PKEY_METHOD *pmeth, + int (**pcheck) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_public_check(const EVP_PKEY_METHOD *pmeth, + int (**pcheck) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_param_check(const EVP_PKEY_METHOD *pmeth, + int (**pcheck) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_digest_custom(EVP_PKEY_METHOD *pmeth, + int (**pdigest_custom) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx)); void EVP_add_alg_module(void); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_EVP_strings(void); - -/* Error codes for the EVP functions. */ - -/* Function codes. */ -# define EVP_F_AESNI_INIT_KEY 165 -# define EVP_F_AES_INIT_KEY 133 -# define EVP_F_AES_OCB_CIPHER 169 -# define EVP_F_AES_T4_INIT_KEY 178 -# define EVP_F_AES_WRAP_CIPHER 170 -# define EVP_F_ALG_MODULE_INIT 177 -# define EVP_F_CAMELLIA_INIT_KEY 159 -# define EVP_F_CHACHA20_POLY1305_CTRL 182 -# define EVP_F_CMLL_T4_INIT_KEY 179 -# define EVP_F_DES_EDE3_WRAP_CIPHER 171 -# define EVP_F_DO_SIGVER_INIT 161 -# define EVP_F_EVP_CIPHERINIT_EX 123 -# define EVP_F_EVP_CIPHER_CTX_COPY 163 -# define EVP_F_EVP_CIPHER_CTX_CTRL 124 -# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 -# define EVP_F_EVP_DECRYPTFINAL_EX 101 -# define EVP_F_EVP_DECRYPTUPDATE 166 -# define EVP_F_EVP_DIGESTINIT_EX 128 -# define EVP_F_EVP_ENCRYPTFINAL_EX 127 -# define EVP_F_EVP_ENCRYPTUPDATE 167 -# define EVP_F_EVP_MD_CTX_COPY_EX 110 -# define EVP_F_EVP_MD_SIZE 162 -# define EVP_F_EVP_OPENINIT 102 -# define EVP_F_EVP_PBE_ALG_ADD 115 -# define EVP_F_EVP_PBE_ALG_ADD_TYPE 160 -# define EVP_F_EVP_PBE_CIPHERINIT 116 -# define EVP_F_EVP_PBE_SCRYPT 181 -# define EVP_F_EVP_PKCS82PKEY 111 -# define EVP_F_EVP_PKEY2PKCS8 113 -# define EVP_F_EVP_PKEY_ASN1_ADD0 168 -# define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 -# define EVP_F_EVP_PKEY_CTX_CTRL 137 -# define EVP_F_EVP_PKEY_CTX_CTRL_STR 150 -# define EVP_F_EVP_PKEY_CTX_DUP 156 -# define EVP_F_EVP_PKEY_DECRYPT 104 -# define EVP_F_EVP_PKEY_DECRYPT_INIT 138 -# define EVP_F_EVP_PKEY_DECRYPT_OLD 151 -# define EVP_F_EVP_PKEY_DERIVE 153 -# define EVP_F_EVP_PKEY_DERIVE_INIT 154 -# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155 -# define EVP_F_EVP_PKEY_ENCRYPT 105 -# define EVP_F_EVP_PKEY_ENCRYPT_INIT 139 -# define EVP_F_EVP_PKEY_ENCRYPT_OLD 152 -# define EVP_F_EVP_PKEY_GET0_DH 119 -# define EVP_F_EVP_PKEY_GET0_DSA 120 -# define EVP_F_EVP_PKEY_GET0_EC_KEY 131 -# define EVP_F_EVP_PKEY_GET0_HMAC 183 -# define EVP_F_EVP_PKEY_GET0_RSA 121 -# define EVP_F_EVP_PKEY_KEYGEN 146 -# define EVP_F_EVP_PKEY_KEYGEN_INIT 147 -# define EVP_F_EVP_PKEY_METH_ADD0 172 -# define EVP_F_EVP_PKEY_METH_NEW 173 -# define EVP_F_EVP_PKEY_NEW 106 -# define EVP_F_EVP_PKEY_PARAMGEN 148 -# define EVP_F_EVP_PKEY_PARAMGEN_INIT 149 -# define EVP_F_EVP_PKEY_SET1_ENGINE 187 -# define EVP_F_EVP_PKEY_SIGN 140 -# define EVP_F_EVP_PKEY_SIGN_INIT 141 -# define EVP_F_EVP_PKEY_VERIFY 142 -# define EVP_F_EVP_PKEY_VERIFY_INIT 143 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER 144 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145 -# define EVP_F_EVP_SIGNFINAL 107 -# define EVP_F_EVP_VERIFYFINAL 108 -# define EVP_F_INT_CTX_NEW 157 -# define EVP_F_PKCS5_PBE_KEYIVGEN 117 -# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 -# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 164 -# define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN 180 -# define EVP_F_PKEY_SET_TYPE 158 -# define EVP_F_RC2_MAGIC_TO_METH 109 -# define EVP_F_RC5_CTRL 125 - -/* Reason codes. */ -# define EVP_R_AES_KEY_SETUP_FAILED 143 -# define EVP_R_BAD_DECRYPT 100 -# define EVP_R_BUFFER_TOO_SMALL 155 -# define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 -# define EVP_R_CIPHER_PARAMETER_ERROR 122 -# define EVP_R_COMMAND_NOT_SUPPORTED 147 -# define EVP_R_COPY_ERROR 173 -# define EVP_R_CTRL_NOT_IMPLEMENTED 132 -# define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 -# define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 -# define EVP_R_DECODE_ERROR 114 -# define EVP_R_DIFFERENT_KEY_TYPES 101 -# define EVP_R_DIFFERENT_PARAMETERS 153 -# define EVP_R_ERROR_LOADING_SECTION 165 -# define EVP_R_ERROR_SETTING_FIPS_MODE 166 -# define EVP_R_EXPECTING_AN_HMAC_KEY 174 -# define EVP_R_EXPECTING_AN_RSA_KEY 127 -# define EVP_R_EXPECTING_A_DH_KEY 128 -# define EVP_R_EXPECTING_A_DSA_KEY 129 -# define EVP_R_EXPECTING_A_EC_KEY 142 -# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 -# define EVP_R_ILLEGAL_SCRYPT_PARAMETERS 171 -# define EVP_R_INITIALIZATION_ERROR 134 -# define EVP_R_INPUT_NOT_INITIALIZED 111 -# define EVP_R_INVALID_DIGEST 152 -# define EVP_R_INVALID_FIPS_MODE 168 -# define EVP_R_INVALID_KEY 163 -# define EVP_R_INVALID_KEY_LENGTH 130 -# define EVP_R_INVALID_OPERATION 148 -# define EVP_R_KEYGEN_FAILURE 120 -# define EVP_R_MEMORY_LIMIT_EXCEEDED 172 -# define EVP_R_MESSAGE_DIGEST_IS_NULL 159 -# define EVP_R_METHOD_NOT_SUPPORTED 144 -# define EVP_R_MISSING_PARAMETERS 103 -# define EVP_R_NO_CIPHER_SET 131 -# define EVP_R_NO_DEFAULT_DIGEST 158 -# define EVP_R_NO_DIGEST_SET 139 -# define EVP_R_NO_KEY_SET 154 -# define EVP_R_NO_OPERATION_SET 149 -# define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 -# define EVP_R_OPERATON_NOT_INITIALIZED 151 -# define EVP_R_PARTIALLY_OVERLAPPING 162 -# define EVP_R_PBKDF2_ERROR 176 -# define EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED 175 -# define EVP_R_PKEY_ASN1_METHOD_ALREADY_REGISTERED 164 -# define EVP_R_PRIVATE_KEY_DECODE_ERROR 145 -# define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146 -# define EVP_R_PUBLIC_KEY_NOT_RSA 106 -# define EVP_R_UNKNOWN_CIPHER 160 -# define EVP_R_UNKNOWN_DIGEST 161 -# define EVP_R_UNKNOWN_OPTION 169 -# define EVP_R_UNKNOWN_PBE_ALGORITHM 121 -# define EVP_R_UNSUPPORTED_ALGORITHM 156 -# define EVP_R_UNSUPPORTED_CIPHER 107 -# define EVP_R_UNSUPPORTED_KEYLENGTH 123 -# define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 124 -# define EVP_R_UNSUPPORTED_KEY_SIZE 108 -# define EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS 135 -# define EVP_R_UNSUPPORTED_PRF 125 -# define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118 -# define EVP_R_UNSUPPORTED_SALT_TYPE 126 -# define EVP_R_WRAP_MODE_NOT_ALLOWED 170 -# define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/evperr.h b/libs/windows/include/openssl/evperr.h new file mode 100644 index 00000000..84f03eb3 --- /dev/null +++ b/libs/windows/include/openssl/evperr.h @@ -0,0 +1,194 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_EVPERR_H +# define HEADER_EVPERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_EVP_strings(void); + +/* + * EVP function codes. + */ +# define EVP_F_AESNI_INIT_KEY 165 +# define EVP_F_AES_GCM_CTRL 196 +# define EVP_F_AES_INIT_KEY 133 +# define EVP_F_AES_OCB_CIPHER 169 +# define EVP_F_AES_T4_INIT_KEY 178 +# define EVP_F_AES_WRAP_CIPHER 170 +# define EVP_F_ALG_MODULE_INIT 177 +# define EVP_F_ARIA_CCM_INIT_KEY 175 +# define EVP_F_ARIA_GCM_CTRL 197 +# define EVP_F_ARIA_GCM_INIT_KEY 176 +# define EVP_F_ARIA_INIT_KEY 185 +# define EVP_F_B64_NEW 198 +# define EVP_F_CAMELLIA_INIT_KEY 159 +# define EVP_F_CHACHA20_POLY1305_CTRL 182 +# define EVP_F_CMLL_T4_INIT_KEY 179 +# define EVP_F_DES_EDE3_WRAP_CIPHER 171 +# define EVP_F_DO_SIGVER_INIT 161 +# define EVP_F_ENC_NEW 199 +# define EVP_F_EVP_CIPHERINIT_EX 123 +# define EVP_F_EVP_CIPHER_ASN1_TO_PARAM 204 +# define EVP_F_EVP_CIPHER_CTX_COPY 163 +# define EVP_F_EVP_CIPHER_CTX_CTRL 124 +# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 +# define EVP_F_EVP_CIPHER_PARAM_TO_ASN1 205 +# define EVP_F_EVP_DECRYPTFINAL_EX 101 +# define EVP_F_EVP_DECRYPTUPDATE 166 +# define EVP_F_EVP_DIGESTFINALXOF 174 +# define EVP_F_EVP_DIGESTINIT_EX 128 +# define EVP_F_EVP_ENCRYPTDECRYPTUPDATE 219 +# define EVP_F_EVP_ENCRYPTFINAL_EX 127 +# define EVP_F_EVP_ENCRYPTUPDATE 167 +# define EVP_F_EVP_MD_CTX_COPY_EX 110 +# define EVP_F_EVP_MD_SIZE 162 +# define EVP_F_EVP_OPENINIT 102 +# define EVP_F_EVP_PBE_ALG_ADD 115 +# define EVP_F_EVP_PBE_ALG_ADD_TYPE 160 +# define EVP_F_EVP_PBE_CIPHERINIT 116 +# define EVP_F_EVP_PBE_SCRYPT 181 +# define EVP_F_EVP_PKCS82PKEY 111 +# define EVP_F_EVP_PKEY2PKCS8 113 +# define EVP_F_EVP_PKEY_ASN1_ADD0 188 +# define EVP_F_EVP_PKEY_CHECK 186 +# define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 +# define EVP_F_EVP_PKEY_CTX_CTRL 137 +# define EVP_F_EVP_PKEY_CTX_CTRL_STR 150 +# define EVP_F_EVP_PKEY_CTX_DUP 156 +# define EVP_F_EVP_PKEY_CTX_MD 168 +# define EVP_F_EVP_PKEY_DECRYPT 104 +# define EVP_F_EVP_PKEY_DECRYPT_INIT 138 +# define EVP_F_EVP_PKEY_DECRYPT_OLD 151 +# define EVP_F_EVP_PKEY_DERIVE 153 +# define EVP_F_EVP_PKEY_DERIVE_INIT 154 +# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155 +# define EVP_F_EVP_PKEY_ENCRYPT 105 +# define EVP_F_EVP_PKEY_ENCRYPT_INIT 139 +# define EVP_F_EVP_PKEY_ENCRYPT_OLD 152 +# define EVP_F_EVP_PKEY_GET0_DH 119 +# define EVP_F_EVP_PKEY_GET0_DSA 120 +# define EVP_F_EVP_PKEY_GET0_EC_KEY 131 +# define EVP_F_EVP_PKEY_GET0_HMAC 183 +# define EVP_F_EVP_PKEY_GET0_POLY1305 184 +# define EVP_F_EVP_PKEY_GET0_RSA 121 +# define EVP_F_EVP_PKEY_GET0_SIPHASH 172 +# define EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY 202 +# define EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY 203 +# define EVP_F_EVP_PKEY_KEYGEN 146 +# define EVP_F_EVP_PKEY_KEYGEN_INIT 147 +# define EVP_F_EVP_PKEY_METH_ADD0 194 +# define EVP_F_EVP_PKEY_METH_NEW 195 +# define EVP_F_EVP_PKEY_NEW 106 +# define EVP_F_EVP_PKEY_NEW_CMAC_KEY 193 +# define EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY 191 +# define EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY 192 +# define EVP_F_EVP_PKEY_PARAMGEN 148 +# define EVP_F_EVP_PKEY_PARAMGEN_INIT 149 +# define EVP_F_EVP_PKEY_PARAM_CHECK 189 +# define EVP_F_EVP_PKEY_PUBLIC_CHECK 190 +# define EVP_F_EVP_PKEY_SET1_ENGINE 187 +# define EVP_F_EVP_PKEY_SET_ALIAS_TYPE 206 +# define EVP_F_EVP_PKEY_SIGN 140 +# define EVP_F_EVP_PKEY_SIGN_INIT 141 +# define EVP_F_EVP_PKEY_VERIFY 142 +# define EVP_F_EVP_PKEY_VERIFY_INIT 143 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER 144 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145 +# define EVP_F_EVP_SIGNFINAL 107 +# define EVP_F_EVP_VERIFYFINAL 108 +# define EVP_F_INT_CTX_NEW 157 +# define EVP_F_OK_NEW 200 +# define EVP_F_PKCS5_PBE_KEYIVGEN 117 +# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 +# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 164 +# define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN 180 +# define EVP_F_PKEY_SET_TYPE 158 +# define EVP_F_RC2_MAGIC_TO_METH 109 +# define EVP_F_RC5_CTRL 125 +# define EVP_F_S390X_AES_GCM_CTRL 201 +# define EVP_F_UPDATE 173 + +/* + * EVP reason codes. + */ +# define EVP_R_AES_KEY_SETUP_FAILED 143 +# define EVP_R_ARIA_KEY_SETUP_FAILED 176 +# define EVP_R_BAD_DECRYPT 100 +# define EVP_R_BUFFER_TOO_SMALL 155 +# define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 +# define EVP_R_CIPHER_PARAMETER_ERROR 122 +# define EVP_R_COMMAND_NOT_SUPPORTED 147 +# define EVP_R_COPY_ERROR 173 +# define EVP_R_CTRL_NOT_IMPLEMENTED 132 +# define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 +# define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 +# define EVP_R_DECODE_ERROR 114 +# define EVP_R_DIFFERENT_KEY_TYPES 101 +# define EVP_R_DIFFERENT_PARAMETERS 153 +# define EVP_R_ERROR_LOADING_SECTION 165 +# define EVP_R_ERROR_SETTING_FIPS_MODE 166 +# define EVP_R_EXPECTING_AN_HMAC_KEY 174 +# define EVP_R_EXPECTING_AN_RSA_KEY 127 +# define EVP_R_EXPECTING_A_DH_KEY 128 +# define EVP_R_EXPECTING_A_DSA_KEY 129 +# define EVP_R_EXPECTING_A_EC_KEY 142 +# define EVP_R_EXPECTING_A_POLY1305_KEY 164 +# define EVP_R_EXPECTING_A_SIPHASH_KEY 175 +# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 +# define EVP_R_GET_RAW_KEY_FAILED 182 +# define EVP_R_ILLEGAL_SCRYPT_PARAMETERS 171 +# define EVP_R_INITIALIZATION_ERROR 134 +# define EVP_R_INPUT_NOT_INITIALIZED 111 +# define EVP_R_INVALID_DIGEST 152 +# define EVP_R_INVALID_FIPS_MODE 168 +# define EVP_R_INVALID_KEY 163 +# define EVP_R_INVALID_KEY_LENGTH 130 +# define EVP_R_INVALID_OPERATION 148 +# define EVP_R_KEYGEN_FAILURE 120 +# define EVP_R_KEY_SETUP_FAILED 180 +# define EVP_R_MEMORY_LIMIT_EXCEEDED 172 +# define EVP_R_MESSAGE_DIGEST_IS_NULL 159 +# define EVP_R_METHOD_NOT_SUPPORTED 144 +# define EVP_R_MISSING_PARAMETERS 103 +# define EVP_R_NOT_XOF_OR_INVALID_LENGTH 178 +# define EVP_R_NO_CIPHER_SET 131 +# define EVP_R_NO_DEFAULT_DIGEST 158 +# define EVP_R_NO_DIGEST_SET 139 +# define EVP_R_NO_KEY_SET 154 +# define EVP_R_NO_OPERATION_SET 149 +# define EVP_R_ONLY_ONESHOT_SUPPORTED 177 +# define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 +# define EVP_R_OPERATON_NOT_INITIALIZED 151 +# define EVP_R_PARTIALLY_OVERLAPPING 162 +# define EVP_R_PBKDF2_ERROR 181 +# define EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED 179 +# define EVP_R_PRIVATE_KEY_DECODE_ERROR 145 +# define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146 +# define EVP_R_PUBLIC_KEY_NOT_RSA 106 +# define EVP_R_UNKNOWN_CIPHER 160 +# define EVP_R_UNKNOWN_DIGEST 161 +# define EVP_R_UNKNOWN_OPTION 169 +# define EVP_R_UNKNOWN_PBE_ALGORITHM 121 +# define EVP_R_UNSUPPORTED_ALGORITHM 156 +# define EVP_R_UNSUPPORTED_CIPHER 107 +# define EVP_R_UNSUPPORTED_KEYLENGTH 123 +# define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 124 +# define EVP_R_UNSUPPORTED_KEY_SIZE 108 +# define EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS 135 +# define EVP_R_UNSUPPORTED_PRF 125 +# define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118 +# define EVP_R_UNSUPPORTED_SALT_TYPE 126 +# define EVP_R_WRAP_MODE_NOT_ALLOWED 170 +# define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 + +#endif diff --git a/libs/windows/include/openssl/hmac.h b/libs/windows/include/openssl/hmac.h index 9f068960..458efc1d 100644 --- a/libs/windows/include/openssl/hmac.h +++ b/libs/windows/include/openssl/hmac.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -14,7 +14,9 @@ # include -# define HMAC_MAX_MD_CBLOCK 128/* largest known is SHA512 */ +# if OPENSSL_API_COMPAT < 0x10200000L +# define HMAC_MAX_MD_CBLOCK 128 /* Deprecated */ +# endif #ifdef __cplusplus extern "C" { diff --git a/libs/windows/include/openssl/kdf.h b/libs/windows/include/openssl/kdf.h index 9f87f788..5abd4c37 100644 --- a/libs/windows/include/openssl/kdf.h +++ b/libs/windows/include/openssl/kdf.h @@ -1,5 +1,5 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -10,64 +10,86 @@ #ifndef HEADER_KDF_H # define HEADER_KDF_H +# include #ifdef __cplusplus extern "C" { #endif -# define EVP_PKEY_CTRL_TLS_MD (EVP_PKEY_ALG_CTRL) -# define EVP_PKEY_CTRL_TLS_SECRET (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_TLS_SEED (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_HKDF_MD (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_HKDF_SALT (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_HKDF_KEY (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_HKDF_INFO (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_TLS_MD (EVP_PKEY_ALG_CTRL) +# define EVP_PKEY_CTRL_TLS_SECRET (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_TLS_SEED (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_HKDF_MD (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_HKDF_SALT (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_HKDF_KEY (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_HKDF_INFO (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_HKDF_MODE (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_PASS (EVP_PKEY_ALG_CTRL + 8) +# define EVP_PKEY_CTRL_SCRYPT_SALT (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_SCRYPT_N (EVP_PKEY_ALG_CTRL + 10) +# define EVP_PKEY_CTRL_SCRYPT_R (EVP_PKEY_ALG_CTRL + 11) +# define EVP_PKEY_CTRL_SCRYPT_P (EVP_PKEY_ALG_CTRL + 12) +# define EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES (EVP_PKEY_ALG_CTRL + 13) + +# define EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND 0 +# define EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY 1 +# define EVP_PKEY_HKDEF_MODE_EXPAND_ONLY 2 # define EVP_PKEY_CTX_set_tls1_prf_md(pctx, md) \ EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_MD, 0, (void *)md) + EVP_PKEY_CTRL_TLS_MD, 0, (void *)(md)) # define EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, sec, seclen) \ EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_SECRET, seclen, (void *)sec) + EVP_PKEY_CTRL_TLS_SECRET, seclen, (void *)(sec)) # define EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed, seedlen) \ EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_SEED, seedlen, (void *)seed) + EVP_PKEY_CTRL_TLS_SEED, seedlen, (void *)(seed)) # define EVP_PKEY_CTX_set_hkdf_md(pctx, md) \ EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_MD, 0, (void *)md) + EVP_PKEY_CTRL_HKDF_MD, 0, (void *)(md)) # define EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt, saltlen) \ EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_SALT, saltlen, (void *)salt) + EVP_PKEY_CTRL_HKDF_SALT, saltlen, (void *)(salt)) # define EVP_PKEY_CTX_set1_hkdf_key(pctx, key, keylen) \ EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_KEY, keylen, (void *)key) + EVP_PKEY_CTRL_HKDF_KEY, keylen, (void *)(key)) # define EVP_PKEY_CTX_add1_hkdf_info(pctx, info, infolen) \ EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_INFO, infolen, (void *)info) + EVP_PKEY_CTRL_HKDF_INFO, infolen, (void *)(info)) -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ +# define EVP_PKEY_CTX_hkdf_mode(pctx, mode) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_MODE, mode, NULL) -int ERR_load_KDF_strings(void); +# define EVP_PKEY_CTX_set1_pbe_pass(pctx, pass, passlen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_PASS, passlen, (void *)(pass)) -/* Error codes for the KDF functions. */ +# define EVP_PKEY_CTX_set1_scrypt_salt(pctx, salt, saltlen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_SCRYPT_SALT, saltlen, (void *)(salt)) -/* Function codes. */ -# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 100 -# define KDF_F_PKEY_TLS1_PRF_DERIVE 101 +# define EVP_PKEY_CTX_set_scrypt_N(pctx, n) \ + EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_SCRYPT_N, n) + +# define EVP_PKEY_CTX_set_scrypt_r(pctx, r) \ + EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_SCRYPT_R, r) + +# define EVP_PKEY_CTX_set_scrypt_p(pctx, p) \ + EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_SCRYPT_P, p) + +# define EVP_PKEY_CTX_set_scrypt_maxmem_bytes(pctx, maxmem_bytes) \ + EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES, maxmem_bytes) -/* Reason codes. */ -# define KDF_R_INVALID_DIGEST 100 -# define KDF_R_MISSING_PARAMETER 101 -# define KDF_R_VALUE_MISSING 102 # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/kdferr.h b/libs/windows/include/openssl/kdferr.h new file mode 100644 index 00000000..6437c271 --- /dev/null +++ b/libs/windows/include/openssl/kdferr.h @@ -0,0 +1,51 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_KDFERR_H +# define HEADER_KDFERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_KDF_strings(void); + +/* + * KDF function codes. + */ +# define KDF_F_PKEY_HKDF_CTRL_STR 103 +# define KDF_F_PKEY_HKDF_DERIVE 102 +# define KDF_F_PKEY_HKDF_INIT 108 +# define KDF_F_PKEY_SCRYPT_CTRL_STR 104 +# define KDF_F_PKEY_SCRYPT_CTRL_UINT64 105 +# define KDF_F_PKEY_SCRYPT_DERIVE 109 +# define KDF_F_PKEY_SCRYPT_INIT 106 +# define KDF_F_PKEY_SCRYPT_SET_MEMBUF 107 +# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 100 +# define KDF_F_PKEY_TLS1_PRF_DERIVE 101 +# define KDF_F_PKEY_TLS1_PRF_INIT 110 +# define KDF_F_TLS1_PRF_ALG 111 + +/* + * KDF reason codes. + */ +# define KDF_R_INVALID_DIGEST 100 +# define KDF_R_MISSING_ITERATION_COUNT 109 +# define KDF_R_MISSING_KEY 104 +# define KDF_R_MISSING_MESSAGE_DIGEST 105 +# define KDF_R_MISSING_PARAMETER 101 +# define KDF_R_MISSING_PASS 110 +# define KDF_R_MISSING_SALT 111 +# define KDF_R_MISSING_SECRET 107 +# define KDF_R_MISSING_SEED 106 +# define KDF_R_UNKNOWN_PARAMETER_TYPE 103 +# define KDF_R_VALUE_ERROR 108 +# define KDF_R_VALUE_MISSING 102 + +#endif diff --git a/libs/windows/include/openssl/lhash.h b/libs/windows/include/openssl/lhash.h index 8ecc5884..47b99d17 100644 --- a/libs/windows/include/openssl/lhash.h +++ b/libs/windows/include/openssl/lhash.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -127,52 +127,52 @@ void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); return (LHASH_OF(type) *) \ OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ } \ - static ossl_inline void lh_##type##_free(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline void lh_##type##_free(LHASH_OF(type) *lh) \ { \ OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ } \ - static ossl_inline type *lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ + static ossl_unused ossl_inline type *lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ { \ return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \ } \ - static ossl_inline type *lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ + static ossl_unused ossl_inline type *lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ { \ return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \ } \ - static ossl_inline type *lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ + static ossl_unused ossl_inline type *lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ { \ return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \ } \ - static ossl_inline int lh_##type##_error(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline int lh_##type##_error(LHASH_OF(type) *lh) \ { \ return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \ } \ - static ossl_inline unsigned long lh_##type##_num_items(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline unsigned long lh_##type##_num_items(LHASH_OF(type) *lh) \ { \ return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \ } \ - static ossl_inline void lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + static ossl_unused ossl_inline void lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ { \ OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ } \ - static ossl_inline void lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + static ossl_unused ossl_inline void lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ { \ OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ } \ - static ossl_inline void lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + static ossl_unused ossl_inline void lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ { \ OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ } \ - static ossl_inline unsigned long lh_##type##_get_down_load(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline unsigned long lh_##type##_get_down_load(LHASH_OF(type) *lh) \ { \ return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \ } \ - static ossl_inline void lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ + static ossl_unused ossl_inline void lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ { \ OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \ } \ - static ossl_inline void lh_##type##_doall(LHASH_OF(type) *lh, \ - void (*doall)(type *)) \ + static ossl_unused ossl_inline void lh_##type##_doall(LHASH_OF(type) *lh, \ + void (*doall)(type *)) \ { \ OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ } \ @@ -185,7 +185,7 @@ void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); int_implement_lhash_doall(type, argtype, type) #define int_implement_lhash_doall(type, argtype, cbargtype) \ - static ossl_inline void \ + static ossl_unused ossl_inline void \ lh_##type##_doall_##argtype(LHASH_OF(type) *lh, \ void (*fn)(cbargtype *, argtype *), \ argtype *arg) \ @@ -210,6 +210,31 @@ DEFINE_LHASH_OF(OPENSSL_CSTRING); # pragma warning (pop) # endif +/* + * If called without higher optimization (min. -xO3) the Oracle Developer + * Studio compiler generates code for the defined (static inline) functions + * above. + * This would later lead to the linker complaining about missing symbols when + * this header file is included but the resulting object is not linked against + * the Crypto library (openssl#6912). + */ +# ifdef __SUNPRO_C +# pragma weak OPENSSL_LH_new +# pragma weak OPENSSL_LH_free +# pragma weak OPENSSL_LH_insert +# pragma weak OPENSSL_LH_delete +# pragma weak OPENSSL_LH_retrieve +# pragma weak OPENSSL_LH_error +# pragma weak OPENSSL_LH_num_items +# pragma weak OPENSSL_LH_node_stats_bio +# pragma weak OPENSSL_LH_node_usage_stats_bio +# pragma weak OPENSSL_LH_stats_bio +# pragma weak OPENSSL_LH_get_down_load +# pragma weak OPENSSL_LH_set_down_load +# pragma weak OPENSSL_LH_doall +# pragma weak OPENSSL_LH_doall_arg +# endif /* __SUNPRO_C */ + #ifdef __cplusplus } #endif diff --git a/libs/windows/include/openssl/modes.h b/libs/windows/include/openssl/modes.h index a04c6a59..d544f98d 100644 --- a/libs/windows/include/openssl/modes.h +++ b/libs/windows/include/openssl/modes.h @@ -7,11 +7,14 @@ * https://www.openssl.org/source/license.html */ -#include +#ifndef HEADER_MODES_H +# define HEADER_MODES_H -#ifdef __cplusplus +# include + +# ifdef __cplusplus extern "C" { -#endif +# endif typedef void (*block128_f) (const unsigned char in[16], unsigned char out[16], const void *key); @@ -166,7 +169,7 @@ size_t CRYPTO_128_unwrap_pad(void *key, const unsigned char *icv, unsigned char *out, const unsigned char *in, size_t inlen, block128_f block); -#ifndef OPENSSL_NO_OCB +# ifndef OPENSSL_NO_OCB typedef struct ocb128_context OCB128_CONTEXT; typedef void (*ocb128_f) (const unsigned char *in, unsigned char *out, @@ -196,8 +199,10 @@ int CRYPTO_ocb128_finish(OCB128_CONTEXT *ctx, const unsigned char *tag, size_t len); int CRYPTO_ocb128_tag(OCB128_CONTEXT *ctx, unsigned char *tag, size_t len); void CRYPTO_ocb128_cleanup(OCB128_CONTEXT *ctx); -#endif /* OPENSSL_NO_OCB */ +# endif /* OPENSSL_NO_OCB */ -#ifdef __cplusplus +# ifdef __cplusplus } +# endif + #endif diff --git a/libs/windows/include/openssl/obj_mac.h b/libs/windows/include/openssl/obj_mac.h index f97f3eaa..31fad464 100644 --- a/libs/windows/include/openssl/obj_mac.h +++ b/libs/windows/include/openssl/obj_mac.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by crypto/objects/objects.pl * - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at @@ -54,10 +54,24 @@ #define NID_hmac_sha1 781 #define OBJ_hmac_sha1 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L +#define SN_x509ExtAdmission "x509ExtAdmission" +#define LN_x509ExtAdmission "Professional Information or basis for Admission" +#define NID_x509ExtAdmission 1093 +#define OBJ_x509ExtAdmission OBJ_identified_organization,36L,8L,3L,3L + #define SN_certicom_arc "certicom-arc" #define NID_certicom_arc 677 #define OBJ_certicom_arc OBJ_identified_organization,132L +#define SN_ieee "ieee" +#define NID_ieee 1170 +#define OBJ_ieee OBJ_identified_organization,111L + +#define SN_ieee_siswg "ieee-siswg" +#define LN_ieee_siswg "IEEE Security in Storage Working Group" +#define NID_ieee_siswg 1171 +#define OBJ_ieee_siswg OBJ_ieee,2L,1619L + #define SN_international_organizations "international-organizations" #define LN_international_organizations "International Organizations" #define NID_international_organizations 647 @@ -95,6 +109,19 @@ #define NID_X9cm 185 #define OBJ_X9cm OBJ_X9_57,4L +#define SN_ISO_CN "ISO-CN" +#define LN_ISO_CN "ISO CN Member Body" +#define NID_ISO_CN 1140 +#define OBJ_ISO_CN OBJ_member_body,156L + +#define SN_oscca "oscca" +#define NID_oscca 1141 +#define OBJ_oscca OBJ_ISO_CN,10197L + +#define SN_sm_scheme "sm-scheme" +#define NID_sm_scheme 1142 +#define OBJ_sm_scheme OBJ_oscca,1L + #define SN_dsa "DSA" #define LN_dsa "dsaEncryption" #define NID_dsa 116 @@ -567,6 +594,16 @@ #define NID_sha224WithRSAEncryption 671 #define OBJ_sha224WithRSAEncryption OBJ_pkcs1,14L +#define SN_sha512_224WithRSAEncryption "RSA-SHA512/224" +#define LN_sha512_224WithRSAEncryption "sha512-224WithRSAEncryption" +#define NID_sha512_224WithRSAEncryption 1145 +#define OBJ_sha512_224WithRSAEncryption OBJ_pkcs1,15L + +#define SN_sha512_256WithRSAEncryption "RSA-SHA512/256" +#define LN_sha512_256WithRSAEncryption "sha512-256WithRSAEncryption" +#define NID_sha512_256WithRSAEncryption 1146 +#define OBJ_sha512_256WithRSAEncryption OBJ_pkcs1,16L + #define SN_pkcs3 "pkcs3" #define NID_pkcs3 27 #define OBJ_pkcs3 OBJ_pkcs,3L @@ -932,6 +969,10 @@ #define NID_id_smime_aa_dvcs_dvc 240 #define OBJ_id_smime_aa_dvcs_dvc OBJ_id_smime_aa,29L +#define SN_id_smime_aa_signingCertificateV2 "id-smime-aa-signingCertificateV2" +#define NID_id_smime_aa_signingCertificateV2 1086 +#define OBJ_id_smime_aa_signingCertificateV2 OBJ_id_smime_aa,47L + #define SN_id_smime_alg_ESDHwith3DES "id-smime-alg-ESDHwith3DES" #define NID_id_smime_alg_ESDHwith3DES 241 #define OBJ_id_smime_alg_ESDHwith3DES OBJ_id_smime_alg,1L @@ -1123,6 +1164,21 @@ #define NID_hmacWithSHA1 163 #define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L +#define SN_sm2 "SM2" +#define LN_sm2 "sm2" +#define NID_sm2 1172 +#define OBJ_sm2 OBJ_sm_scheme,301L + +#define SN_sm3 "SM3" +#define LN_sm3 "sm3" +#define NID_sm3 1143 +#define OBJ_sm3 OBJ_sm_scheme,401L + +#define SN_sm3WithRSAEncryption "RSA-SM3" +#define LN_sm3WithRSAEncryption "sm3WithRSAEncryption" +#define NID_sm3WithRSAEncryption 1144 +#define OBJ_sm3WithRSAEncryption OBJ_sm_scheme,504L + #define LN_hmacWithSHA224 "hmacWithSHA224" #define NID_hmacWithSHA224 798 #define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L @@ -1139,6 +1195,14 @@ #define NID_hmacWithSHA512 801 #define OBJ_hmacWithSHA512 OBJ_rsadsi,2L,11L +#define LN_hmacWithSHA512_224 "hmacWithSHA512-224" +#define NID_hmacWithSHA512_224 1193 +#define OBJ_hmacWithSHA512_224 OBJ_rsadsi,2L,12L + +#define LN_hmacWithSHA512_256 "hmacWithSHA512-256" +#define NID_hmacWithSHA512_256 1194 +#define OBJ_hmacWithSHA512_256 OBJ_rsadsi,2L,13L + #define SN_rc2_cbc "RC2-CBC" #define LN_rc2_cbc "rc2-cbc" #define NID_rc2_cbc 37 @@ -1563,6 +1627,16 @@ #define NID_sendProxiedOwner 1030 #define OBJ_sendProxiedOwner OBJ_id_kp,26L +#define SN_cmcCA "cmcCA" +#define LN_cmcCA "CMC Certificate Authority" +#define NID_cmcCA 1131 +#define OBJ_cmcCA OBJ_id_kp,27L + +#define SN_cmcRA "cmcRA" +#define LN_cmcRA "CMC Registration Authority" +#define NID_cmcRA 1132 +#define OBJ_cmcRA OBJ_id_kp,28L + #define SN_id_it_caProtEncCert "id-it-caProtEncCert" #define NID_id_it_caProtEncCert 298 #define OBJ_id_it_caProtEncCert OBJ_id_it,1L @@ -2293,6 +2367,24 @@ #define NID_role 400 #define OBJ_role OBJ_X509,72L +#define LN_organizationIdentifier "organizationIdentifier" +#define NID_organizationIdentifier 1089 +#define OBJ_organizationIdentifier OBJ_X509,97L + +#define SN_countryCode3c "c3" +#define LN_countryCode3c "countryCode3c" +#define NID_countryCode3c 1090 +#define OBJ_countryCode3c OBJ_X509,98L + +#define SN_countryCode3n "n3" +#define LN_countryCode3n "countryCode3n" +#define NID_countryCode3n 1091 +#define OBJ_countryCode3n OBJ_X509,99L + +#define LN_dnsName "dnsName" +#define NID_dnsName 1092 +#define OBJ_dnsName OBJ_X509,100L + #define SN_X500algorithms "X500algorithms" #define LN_X500algorithms "directory services - algorithms" #define NID_X500algorithms 378 @@ -2723,6 +2815,16 @@ #define NID_id_aes256_wrap_pad 903 #define OBJ_id_aes256_wrap_pad OBJ_aes,48L +#define SN_aes_128_xts "AES-128-XTS" +#define LN_aes_128_xts "aes-128-xts" +#define NID_aes_128_xts 913 +#define OBJ_aes_128_xts OBJ_ieee_siswg,0L,1L,1L + +#define SN_aes_256_xts "AES-256-XTS" +#define LN_aes_256_xts "aes-256-xts" +#define NID_aes_256_xts 914 +#define OBJ_aes_256_xts OBJ_ieee_siswg,0L,1L,2L + #define SN_aes_128_cfb1 "AES-128-CFB1" #define LN_aes_128_cfb1 "aes-128-cfb1" #define NID_aes_128_cfb1 650 @@ -2771,14 +2873,6 @@ #define LN_aes_256_ocb "aes-256-ocb" #define NID_aes_256_ocb 960 -#define SN_aes_128_xts "AES-128-XTS" -#define LN_aes_128_xts "aes-128-xts" -#define NID_aes_128_xts 913 - -#define SN_aes_256_xts "AES-256-XTS" -#define LN_aes_256_xts "aes-256-xts" -#define NID_aes_256_xts 914 - #define SN_des_cfb1 "DES-CFB1" #define LN_des_cfb1 "des-cfb1" #define NID_des_cfb1 656 @@ -2817,6 +2911,66 @@ #define NID_sha224 675 #define OBJ_sha224 OBJ_nist_hashalgs,4L +#define SN_sha512_224 "SHA512-224" +#define LN_sha512_224 "sha512-224" +#define NID_sha512_224 1094 +#define OBJ_sha512_224 OBJ_nist_hashalgs,5L + +#define SN_sha512_256 "SHA512-256" +#define LN_sha512_256 "sha512-256" +#define NID_sha512_256 1095 +#define OBJ_sha512_256 OBJ_nist_hashalgs,6L + +#define SN_sha3_224 "SHA3-224" +#define LN_sha3_224 "sha3-224" +#define NID_sha3_224 1096 +#define OBJ_sha3_224 OBJ_nist_hashalgs,7L + +#define SN_sha3_256 "SHA3-256" +#define LN_sha3_256 "sha3-256" +#define NID_sha3_256 1097 +#define OBJ_sha3_256 OBJ_nist_hashalgs,8L + +#define SN_sha3_384 "SHA3-384" +#define LN_sha3_384 "sha3-384" +#define NID_sha3_384 1098 +#define OBJ_sha3_384 OBJ_nist_hashalgs,9L + +#define SN_sha3_512 "SHA3-512" +#define LN_sha3_512 "sha3-512" +#define NID_sha3_512 1099 +#define OBJ_sha3_512 OBJ_nist_hashalgs,10L + +#define SN_shake128 "SHAKE128" +#define LN_shake128 "shake128" +#define NID_shake128 1100 +#define OBJ_shake128 OBJ_nist_hashalgs,11L + +#define SN_shake256 "SHAKE256" +#define LN_shake256 "shake256" +#define NID_shake256 1101 +#define OBJ_shake256 OBJ_nist_hashalgs,12L + +#define SN_hmac_sha3_224 "id-hmacWithSHA3-224" +#define LN_hmac_sha3_224 "hmac-sha3-224" +#define NID_hmac_sha3_224 1102 +#define OBJ_hmac_sha3_224 OBJ_nist_hashalgs,13L + +#define SN_hmac_sha3_256 "id-hmacWithSHA3-256" +#define LN_hmac_sha3_256 "hmac-sha3-256" +#define NID_hmac_sha3_256 1103 +#define OBJ_hmac_sha3_256 OBJ_nist_hashalgs,14L + +#define SN_hmac_sha3_384 "id-hmacWithSHA3-384" +#define LN_hmac_sha3_384 "hmac-sha3-384" +#define NID_hmac_sha3_384 1104 +#define OBJ_hmac_sha3_384 OBJ_nist_hashalgs,15L + +#define SN_hmac_sha3_512 "id-hmacWithSHA3-512" +#define LN_hmac_sha3_512 "hmac-sha3-512" +#define NID_hmac_sha3_512 1105 +#define OBJ_hmac_sha3_512 OBJ_nist_hashalgs,16L + #define OBJ_dsa_with_sha2 OBJ_nistAlgorithms,3L #define SN_dsa_with_SHA224 "dsa_with_SHA224" @@ -2827,6 +2981,78 @@ #define NID_dsa_with_SHA256 803 #define OBJ_dsa_with_SHA256 OBJ_dsa_with_sha2,2L +#define OBJ_sigAlgs OBJ_nistAlgorithms,3L + +#define SN_dsa_with_SHA384 "id-dsa-with-sha384" +#define LN_dsa_with_SHA384 "dsa_with_SHA384" +#define NID_dsa_with_SHA384 1106 +#define OBJ_dsa_with_SHA384 OBJ_sigAlgs,3L + +#define SN_dsa_with_SHA512 "id-dsa-with-sha512" +#define LN_dsa_with_SHA512 "dsa_with_SHA512" +#define NID_dsa_with_SHA512 1107 +#define OBJ_dsa_with_SHA512 OBJ_sigAlgs,4L + +#define SN_dsa_with_SHA3_224 "id-dsa-with-sha3-224" +#define LN_dsa_with_SHA3_224 "dsa_with_SHA3-224" +#define NID_dsa_with_SHA3_224 1108 +#define OBJ_dsa_with_SHA3_224 OBJ_sigAlgs,5L + +#define SN_dsa_with_SHA3_256 "id-dsa-with-sha3-256" +#define LN_dsa_with_SHA3_256 "dsa_with_SHA3-256" +#define NID_dsa_with_SHA3_256 1109 +#define OBJ_dsa_with_SHA3_256 OBJ_sigAlgs,6L + +#define SN_dsa_with_SHA3_384 "id-dsa-with-sha3-384" +#define LN_dsa_with_SHA3_384 "dsa_with_SHA3-384" +#define NID_dsa_with_SHA3_384 1110 +#define OBJ_dsa_with_SHA3_384 OBJ_sigAlgs,7L + +#define SN_dsa_with_SHA3_512 "id-dsa-with-sha3-512" +#define LN_dsa_with_SHA3_512 "dsa_with_SHA3-512" +#define NID_dsa_with_SHA3_512 1111 +#define OBJ_dsa_with_SHA3_512 OBJ_sigAlgs,8L + +#define SN_ecdsa_with_SHA3_224 "id-ecdsa-with-sha3-224" +#define LN_ecdsa_with_SHA3_224 "ecdsa_with_SHA3-224" +#define NID_ecdsa_with_SHA3_224 1112 +#define OBJ_ecdsa_with_SHA3_224 OBJ_sigAlgs,9L + +#define SN_ecdsa_with_SHA3_256 "id-ecdsa-with-sha3-256" +#define LN_ecdsa_with_SHA3_256 "ecdsa_with_SHA3-256" +#define NID_ecdsa_with_SHA3_256 1113 +#define OBJ_ecdsa_with_SHA3_256 OBJ_sigAlgs,10L + +#define SN_ecdsa_with_SHA3_384 "id-ecdsa-with-sha3-384" +#define LN_ecdsa_with_SHA3_384 "ecdsa_with_SHA3-384" +#define NID_ecdsa_with_SHA3_384 1114 +#define OBJ_ecdsa_with_SHA3_384 OBJ_sigAlgs,11L + +#define SN_ecdsa_with_SHA3_512 "id-ecdsa-with-sha3-512" +#define LN_ecdsa_with_SHA3_512 "ecdsa_with_SHA3-512" +#define NID_ecdsa_with_SHA3_512 1115 +#define OBJ_ecdsa_with_SHA3_512 OBJ_sigAlgs,12L + +#define SN_RSA_SHA3_224 "id-rsassa-pkcs1-v1_5-with-sha3-224" +#define LN_RSA_SHA3_224 "RSA-SHA3-224" +#define NID_RSA_SHA3_224 1116 +#define OBJ_RSA_SHA3_224 OBJ_sigAlgs,13L + +#define SN_RSA_SHA3_256 "id-rsassa-pkcs1-v1_5-with-sha3-256" +#define LN_RSA_SHA3_256 "RSA-SHA3-256" +#define NID_RSA_SHA3_256 1117 +#define OBJ_RSA_SHA3_256 OBJ_sigAlgs,14L + +#define SN_RSA_SHA3_384 "id-rsassa-pkcs1-v1_5-with-sha3-384" +#define LN_RSA_SHA3_384 "RSA-SHA3-384" +#define NID_RSA_SHA3_384 1118 +#define OBJ_RSA_SHA3_384 OBJ_sigAlgs,15L + +#define SN_RSA_SHA3_512 "id-rsassa-pkcs1-v1_5-with-sha3-512" +#define LN_RSA_SHA3_512 "RSA-SHA3-512" +#define NID_RSA_SHA3_512 1119 +#define OBJ_RSA_SHA3_512 OBJ_sigAlgs,16L + #define SN_hold_instruction_code "holdInstructionCode" #define LN_hold_instruction_code "Hold Instruction Code" #define NID_hold_instruction_code 430 @@ -4000,6 +4226,30 @@ #define NID_id_tc26_cipher 990 #define OBJ_id_tc26_cipher OBJ_id_tc26_algorithms,5L +#define SN_id_tc26_cipher_gostr3412_2015_magma "id-tc26-cipher-gostr3412-2015-magma" +#define NID_id_tc26_cipher_gostr3412_2015_magma 1173 +#define OBJ_id_tc26_cipher_gostr3412_2015_magma OBJ_id_tc26_cipher,1L + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm "id-tc26-cipher-gostr3412-2015-magma-ctracpkm" +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm 1174 +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_magma,1L + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-magma-ctracpkm-omac" +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac 1175 +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_magma,2L + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik "id-tc26-cipher-gostr3412-2015-kuznyechik" +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik 1176 +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik OBJ_id_tc26_cipher,2L + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm" +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm 1177 +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,1L + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm-omac" +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac 1178 +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,2L + #define SN_id_tc26_agreement "id-tc26-agreement" #define NID_id_tc26_agreement 991 #define OBJ_id_tc26_agreement OBJ_id_tc26_algorithms,6L @@ -4012,6 +4262,26 @@ #define NID_id_tc26_agreement_gost_3410_2012_512 993 #define OBJ_id_tc26_agreement_gost_3410_2012_512 OBJ_id_tc26_agreement,2L +#define SN_id_tc26_wrap "id-tc26-wrap" +#define NID_id_tc26_wrap 1179 +#define OBJ_id_tc26_wrap OBJ_id_tc26_algorithms,7L + +#define SN_id_tc26_wrap_gostr3412_2015_magma "id-tc26-wrap-gostr3412-2015-magma" +#define NID_id_tc26_wrap_gostr3412_2015_magma 1180 +#define OBJ_id_tc26_wrap_gostr3412_2015_magma OBJ_id_tc26_wrap,1L + +#define SN_id_tc26_wrap_gostr3412_2015_magma_kexp15 "id-tc26-wrap-gostr3412-2015-magma-kexp15" +#define NID_id_tc26_wrap_gostr3412_2015_magma_kexp15 1181 +#define OBJ_id_tc26_wrap_gostr3412_2015_magma_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_magma,1L + +#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik "id-tc26-wrap-gostr3412-2015-kuznyechik" +#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik 1182 +#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik OBJ_id_tc26_wrap,2L + +#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 "id-tc26-wrap-gostr3412-2015-kuznyechik-kexp15" +#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 1183 +#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_magma,1L + #define SN_id_tc26_constants "id-tc26-constants" #define NID_id_tc26_constants 994 #define OBJ_id_tc26_constants OBJ_id_tc26,2L @@ -4020,6 +4290,30 @@ #define NID_id_tc26_sign_constants 995 #define OBJ_id_tc26_sign_constants OBJ_id_tc26_constants,1L +#define SN_id_tc26_gost_3410_2012_256_constants "id-tc26-gost-3410-2012-256-constants" +#define NID_id_tc26_gost_3410_2012_256_constants 1147 +#define OBJ_id_tc26_gost_3410_2012_256_constants OBJ_id_tc26_sign_constants,1L + +#define SN_id_tc26_gost_3410_2012_256_paramSetA "id-tc26-gost-3410-2012-256-paramSetA" +#define LN_id_tc26_gost_3410_2012_256_paramSetA "GOST R 34.10-2012 (256 bit) ParamSet A" +#define NID_id_tc26_gost_3410_2012_256_paramSetA 1148 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetA OBJ_id_tc26_gost_3410_2012_256_constants,1L + +#define SN_id_tc26_gost_3410_2012_256_paramSetB "id-tc26-gost-3410-2012-256-paramSetB" +#define LN_id_tc26_gost_3410_2012_256_paramSetB "GOST R 34.10-2012 (256 bit) ParamSet B" +#define NID_id_tc26_gost_3410_2012_256_paramSetB 1184 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetB OBJ_id_tc26_gost_3410_2012_256_constants,2L + +#define SN_id_tc26_gost_3410_2012_256_paramSetC "id-tc26-gost-3410-2012-256-paramSetC" +#define LN_id_tc26_gost_3410_2012_256_paramSetC "GOST R 34.10-2012 (256 bit) ParamSet C" +#define NID_id_tc26_gost_3410_2012_256_paramSetC 1185 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetC OBJ_id_tc26_gost_3410_2012_256_constants,3L + +#define SN_id_tc26_gost_3410_2012_256_paramSetD "id-tc26-gost-3410-2012-256-paramSetD" +#define LN_id_tc26_gost_3410_2012_256_paramSetD "GOST R 34.10-2012 (256 bit) ParamSet D" +#define NID_id_tc26_gost_3410_2012_256_paramSetD 1186 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetD OBJ_id_tc26_gost_3410_2012_256_constants,4L + #define SN_id_tc26_gost_3410_2012_512_constants "id-tc26-gost-3410-2012-512-constants" #define NID_id_tc26_gost_3410_2012_512_constants 996 #define OBJ_id_tc26_gost_3410_2012_512_constants OBJ_id_tc26_sign_constants,2L @@ -4039,6 +4333,11 @@ #define NID_id_tc26_gost_3410_2012_512_paramSetB 999 #define OBJ_id_tc26_gost_3410_2012_512_paramSetB OBJ_id_tc26_gost_3410_2012_512_constants,2L +#define SN_id_tc26_gost_3410_2012_512_paramSetC "id-tc26-gost-3410-2012-512-paramSetC" +#define LN_id_tc26_gost_3410_2012_512_paramSetC "GOST R 34.10-2012 (512 bit) ParamSet C" +#define NID_id_tc26_gost_3410_2012_512_paramSetC 1149 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetC OBJ_id_tc26_gost_3410_2012_512_constants,3L + #define SN_id_tc26_digest_constants "id-tc26-digest-constants" #define NID_id_tc26_digest_constants 1000 #define OBJ_id_tc26_digest_constants OBJ_id_tc26_constants,2L @@ -4099,6 +4398,24 @@ #define SN_grasshopper_mac "grasshopper-mac" #define NID_grasshopper_mac 1017 +#define SN_magma_ecb "magma-ecb" +#define NID_magma_ecb 1187 + +#define SN_magma_ctr "magma-ctr" +#define NID_magma_ctr 1188 + +#define SN_magma_ofb "magma-ofb" +#define NID_magma_ofb 1189 + +#define SN_magma_cbc "magma-cbc" +#define NID_magma_cbc 1190 + +#define SN_magma_cfb "magma-cfb" +#define NID_magma_cfb 1191 + +#define SN_magma_mac "magma-mac" +#define NID_magma_mac 1192 + #define SN_camellia_128_cbc "CAMELLIA-128-CBC" #define LN_camellia_128_cbc "camellia-128-cbc" #define NID_camellia_128_cbc 751 @@ -4259,6 +4576,137 @@ #define LN_camellia_256_cfb8 "camellia-256-cfb8" #define NID_camellia_256_cfb8 765 +#define OBJ_aria 1L,2L,410L,200046L,1L,1L + +#define SN_aria_128_ecb "ARIA-128-ECB" +#define LN_aria_128_ecb "aria-128-ecb" +#define NID_aria_128_ecb 1065 +#define OBJ_aria_128_ecb OBJ_aria,1L + +#define SN_aria_128_cbc "ARIA-128-CBC" +#define LN_aria_128_cbc "aria-128-cbc" +#define NID_aria_128_cbc 1066 +#define OBJ_aria_128_cbc OBJ_aria,2L + +#define SN_aria_128_cfb128 "ARIA-128-CFB" +#define LN_aria_128_cfb128 "aria-128-cfb" +#define NID_aria_128_cfb128 1067 +#define OBJ_aria_128_cfb128 OBJ_aria,3L + +#define SN_aria_128_ofb128 "ARIA-128-OFB" +#define LN_aria_128_ofb128 "aria-128-ofb" +#define NID_aria_128_ofb128 1068 +#define OBJ_aria_128_ofb128 OBJ_aria,4L + +#define SN_aria_128_ctr "ARIA-128-CTR" +#define LN_aria_128_ctr "aria-128-ctr" +#define NID_aria_128_ctr 1069 +#define OBJ_aria_128_ctr OBJ_aria,5L + +#define SN_aria_192_ecb "ARIA-192-ECB" +#define LN_aria_192_ecb "aria-192-ecb" +#define NID_aria_192_ecb 1070 +#define OBJ_aria_192_ecb OBJ_aria,6L + +#define SN_aria_192_cbc "ARIA-192-CBC" +#define LN_aria_192_cbc "aria-192-cbc" +#define NID_aria_192_cbc 1071 +#define OBJ_aria_192_cbc OBJ_aria,7L + +#define SN_aria_192_cfb128 "ARIA-192-CFB" +#define LN_aria_192_cfb128 "aria-192-cfb" +#define NID_aria_192_cfb128 1072 +#define OBJ_aria_192_cfb128 OBJ_aria,8L + +#define SN_aria_192_ofb128 "ARIA-192-OFB" +#define LN_aria_192_ofb128 "aria-192-ofb" +#define NID_aria_192_ofb128 1073 +#define OBJ_aria_192_ofb128 OBJ_aria,9L + +#define SN_aria_192_ctr "ARIA-192-CTR" +#define LN_aria_192_ctr "aria-192-ctr" +#define NID_aria_192_ctr 1074 +#define OBJ_aria_192_ctr OBJ_aria,10L + +#define SN_aria_256_ecb "ARIA-256-ECB" +#define LN_aria_256_ecb "aria-256-ecb" +#define NID_aria_256_ecb 1075 +#define OBJ_aria_256_ecb OBJ_aria,11L + +#define SN_aria_256_cbc "ARIA-256-CBC" +#define LN_aria_256_cbc "aria-256-cbc" +#define NID_aria_256_cbc 1076 +#define OBJ_aria_256_cbc OBJ_aria,12L + +#define SN_aria_256_cfb128 "ARIA-256-CFB" +#define LN_aria_256_cfb128 "aria-256-cfb" +#define NID_aria_256_cfb128 1077 +#define OBJ_aria_256_cfb128 OBJ_aria,13L + +#define SN_aria_256_ofb128 "ARIA-256-OFB" +#define LN_aria_256_ofb128 "aria-256-ofb" +#define NID_aria_256_ofb128 1078 +#define OBJ_aria_256_ofb128 OBJ_aria,14L + +#define SN_aria_256_ctr "ARIA-256-CTR" +#define LN_aria_256_ctr "aria-256-ctr" +#define NID_aria_256_ctr 1079 +#define OBJ_aria_256_ctr OBJ_aria,15L + +#define SN_aria_128_cfb1 "ARIA-128-CFB1" +#define LN_aria_128_cfb1 "aria-128-cfb1" +#define NID_aria_128_cfb1 1080 + +#define SN_aria_192_cfb1 "ARIA-192-CFB1" +#define LN_aria_192_cfb1 "aria-192-cfb1" +#define NID_aria_192_cfb1 1081 + +#define SN_aria_256_cfb1 "ARIA-256-CFB1" +#define LN_aria_256_cfb1 "aria-256-cfb1" +#define NID_aria_256_cfb1 1082 + +#define SN_aria_128_cfb8 "ARIA-128-CFB8" +#define LN_aria_128_cfb8 "aria-128-cfb8" +#define NID_aria_128_cfb8 1083 + +#define SN_aria_192_cfb8 "ARIA-192-CFB8" +#define LN_aria_192_cfb8 "aria-192-cfb8" +#define NID_aria_192_cfb8 1084 + +#define SN_aria_256_cfb8 "ARIA-256-CFB8" +#define LN_aria_256_cfb8 "aria-256-cfb8" +#define NID_aria_256_cfb8 1085 + +#define SN_aria_128_ccm "ARIA-128-CCM" +#define LN_aria_128_ccm "aria-128-ccm" +#define NID_aria_128_ccm 1120 +#define OBJ_aria_128_ccm OBJ_aria,37L + +#define SN_aria_192_ccm "ARIA-192-CCM" +#define LN_aria_192_ccm "aria-192-ccm" +#define NID_aria_192_ccm 1121 +#define OBJ_aria_192_ccm OBJ_aria,38L + +#define SN_aria_256_ccm "ARIA-256-CCM" +#define LN_aria_256_ccm "aria-256-ccm" +#define NID_aria_256_ccm 1122 +#define OBJ_aria_256_ccm OBJ_aria,39L + +#define SN_aria_128_gcm "ARIA-128-GCM" +#define LN_aria_128_gcm "aria-128-gcm" +#define NID_aria_128_gcm 1123 +#define OBJ_aria_128_gcm OBJ_aria,34L + +#define SN_aria_192_gcm "ARIA-192-GCM" +#define LN_aria_192_gcm "aria-192-gcm" +#define NID_aria_192_gcm 1124 +#define OBJ_aria_192_gcm OBJ_aria,35L + +#define SN_aria_256_gcm "ARIA-256-GCM" +#define LN_aria_256_gcm "aria-256-gcm" +#define NID_aria_256_gcm 1125 +#define OBJ_aria_256_gcm OBJ_aria,36L + #define SN_kisa "KISA" #define LN_kisa "kisa" #define NID_kisa 773 @@ -4284,6 +4732,41 @@ #define NID_seed_ofb128 778 #define OBJ_seed_ofb128 OBJ_kisa,1L,6L +#define SN_sm4_ecb "SM4-ECB" +#define LN_sm4_ecb "sm4-ecb" +#define NID_sm4_ecb 1133 +#define OBJ_sm4_ecb OBJ_sm_scheme,104L,1L + +#define SN_sm4_cbc "SM4-CBC" +#define LN_sm4_cbc "sm4-cbc" +#define NID_sm4_cbc 1134 +#define OBJ_sm4_cbc OBJ_sm_scheme,104L,2L + +#define SN_sm4_ofb128 "SM4-OFB" +#define LN_sm4_ofb128 "sm4-ofb" +#define NID_sm4_ofb128 1135 +#define OBJ_sm4_ofb128 OBJ_sm_scheme,104L,3L + +#define SN_sm4_cfb128 "SM4-CFB" +#define LN_sm4_cfb128 "sm4-cfb" +#define NID_sm4_cfb128 1137 +#define OBJ_sm4_cfb128 OBJ_sm_scheme,104L,4L + +#define SN_sm4_cfb1 "SM4-CFB1" +#define LN_sm4_cfb1 "sm4-cfb1" +#define NID_sm4_cfb1 1136 +#define OBJ_sm4_cfb1 OBJ_sm_scheme,104L,5L + +#define SN_sm4_cfb8 "SM4-CFB8" +#define LN_sm4_cfb8 "sm4-cfb8" +#define NID_sm4_cfb8 1138 +#define OBJ_sm4_cfb8 OBJ_sm_scheme,104L,6L + +#define SN_sm4_ctr "SM4-CTR" +#define LN_sm4_ctr "sm4-ctr" +#define NID_sm4_ctr 1139 +#define OBJ_sm4_ctr OBJ_sm_scheme,104L,7L + #define SN_hmac "HMAC" #define LN_hmac "hmac" #define NID_hmac 855 @@ -4475,6 +4958,7 @@ #define OBJ_jurisdictionCountryName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L #define SN_id_scrypt "id-scrypt" +#define LN_id_scrypt "scrypt" #define NID_id_scrypt 973 #define OBJ_id_scrypt 1L,3L,6L,1L,4L,1L,11591L,4L,11L @@ -4508,6 +4992,14 @@ #define NID_X448 1035 #define OBJ_X448 1L,3L,101L,111L +#define SN_ED25519 "ED25519" +#define NID_ED25519 1087 +#define OBJ_ED25519 1L,3L,101L,112L + +#define SN_ED448 "ED448" +#define NID_ED448 1088 +#define OBJ_ED448 1L,3L,101L,113L + #define SN_kx_rsa "KxRSA" #define LN_kx_rsa "kx-rsa" #define NID_kx_rsa 1037 @@ -4544,6 +5036,10 @@ #define LN_kx_gost "kx-gost" #define NID_kx_gost 1045 +#define SN_kx_any "KxANY" +#define LN_kx_any "kx-any" +#define NID_kx_any 1063 + #define SN_auth_rsa "AuthRSA" #define LN_auth_rsa "auth-rsa" #define NID_auth_rsa 1046 @@ -4575,3 +5071,128 @@ #define SN_auth_null "AuthNULL" #define LN_auth_null "auth-null" #define NID_auth_null 1053 + +#define SN_auth_any "AuthANY" +#define LN_auth_any "auth-any" +#define NID_auth_any 1064 + +#define SN_poly1305 "Poly1305" +#define LN_poly1305 "poly1305" +#define NID_poly1305 1061 + +#define SN_siphash "SipHash" +#define LN_siphash "siphash" +#define NID_siphash 1062 + +#define SN_ffdhe2048 "ffdhe2048" +#define NID_ffdhe2048 1126 + +#define SN_ffdhe3072 "ffdhe3072" +#define NID_ffdhe3072 1127 + +#define SN_ffdhe4096 "ffdhe4096" +#define NID_ffdhe4096 1128 + +#define SN_ffdhe6144 "ffdhe6144" +#define NID_ffdhe6144 1129 + +#define SN_ffdhe8192 "ffdhe8192" +#define NID_ffdhe8192 1130 + +#define SN_ISO_UA "ISO-UA" +#define NID_ISO_UA 1150 +#define OBJ_ISO_UA OBJ_member_body,804L + +#define SN_ua_pki "ua-pki" +#define NID_ua_pki 1151 +#define OBJ_ua_pki OBJ_ISO_UA,2L,1L,1L,1L + +#define SN_dstu28147 "dstu28147" +#define LN_dstu28147 "DSTU Gost 28147-2009" +#define NID_dstu28147 1152 +#define OBJ_dstu28147 OBJ_ua_pki,1L,1L,1L + +#define SN_dstu28147_ofb "dstu28147-ofb" +#define LN_dstu28147_ofb "DSTU Gost 28147-2009 OFB mode" +#define NID_dstu28147_ofb 1153 +#define OBJ_dstu28147_ofb OBJ_dstu28147,2L + +#define SN_dstu28147_cfb "dstu28147-cfb" +#define LN_dstu28147_cfb "DSTU Gost 28147-2009 CFB mode" +#define NID_dstu28147_cfb 1154 +#define OBJ_dstu28147_cfb OBJ_dstu28147,3L + +#define SN_dstu28147_wrap "dstu28147-wrap" +#define LN_dstu28147_wrap "DSTU Gost 28147-2009 key wrap" +#define NID_dstu28147_wrap 1155 +#define OBJ_dstu28147_wrap OBJ_dstu28147,5L + +#define SN_hmacWithDstu34311 "hmacWithDstu34311" +#define LN_hmacWithDstu34311 "HMAC DSTU Gost 34311-95" +#define NID_hmacWithDstu34311 1156 +#define OBJ_hmacWithDstu34311 OBJ_ua_pki,1L,1L,2L + +#define SN_dstu34311 "dstu34311" +#define LN_dstu34311 "DSTU Gost 34311-95" +#define NID_dstu34311 1157 +#define OBJ_dstu34311 OBJ_ua_pki,1L,2L,1L + +#define SN_dstu4145le "dstu4145le" +#define LN_dstu4145le "DSTU 4145-2002 little endian" +#define NID_dstu4145le 1158 +#define OBJ_dstu4145le OBJ_ua_pki,1L,3L,1L,1L + +#define SN_dstu4145be "dstu4145be" +#define LN_dstu4145be "DSTU 4145-2002 big endian" +#define NID_dstu4145be 1159 +#define OBJ_dstu4145be OBJ_dstu4145le,1L,1L + +#define SN_uacurve0 "uacurve0" +#define LN_uacurve0 "DSTU curve 0" +#define NID_uacurve0 1160 +#define OBJ_uacurve0 OBJ_dstu4145le,2L,0L + +#define SN_uacurve1 "uacurve1" +#define LN_uacurve1 "DSTU curve 1" +#define NID_uacurve1 1161 +#define OBJ_uacurve1 OBJ_dstu4145le,2L,1L + +#define SN_uacurve2 "uacurve2" +#define LN_uacurve2 "DSTU curve 2" +#define NID_uacurve2 1162 +#define OBJ_uacurve2 OBJ_dstu4145le,2L,2L + +#define SN_uacurve3 "uacurve3" +#define LN_uacurve3 "DSTU curve 3" +#define NID_uacurve3 1163 +#define OBJ_uacurve3 OBJ_dstu4145le,2L,3L + +#define SN_uacurve4 "uacurve4" +#define LN_uacurve4 "DSTU curve 4" +#define NID_uacurve4 1164 +#define OBJ_uacurve4 OBJ_dstu4145le,2L,4L + +#define SN_uacurve5 "uacurve5" +#define LN_uacurve5 "DSTU curve 5" +#define NID_uacurve5 1165 +#define OBJ_uacurve5 OBJ_dstu4145le,2L,5L + +#define SN_uacurve6 "uacurve6" +#define LN_uacurve6 "DSTU curve 6" +#define NID_uacurve6 1166 +#define OBJ_uacurve6 OBJ_dstu4145le,2L,6L + +#define SN_uacurve7 "uacurve7" +#define LN_uacurve7 "DSTU curve 7" +#define NID_uacurve7 1167 +#define OBJ_uacurve7 OBJ_dstu4145le,2L,7L + +#define SN_uacurve8 "uacurve8" +#define LN_uacurve8 "DSTU curve 8" +#define NID_uacurve8 1168 +#define OBJ_uacurve8 OBJ_dstu4145le,2L,8L + +#define SN_uacurve9 "uacurve9" +#define LN_uacurve9 "DSTU curve 9" +#define NID_uacurve9 1169 +#define OBJ_uacurve9 OBJ_dstu4145le,2L,9L diff --git a/libs/windows/include/openssl/objects.h b/libs/windows/include/openssl/objects.h index d4462fee..5e8b5762 100644 --- a/libs/windows/include/openssl/objects.h +++ b/libs/windows/include/openssl/objects.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -10,910 +10,10 @@ #ifndef HEADER_OBJECTS_H # define HEADER_OBJECTS_H -# define USE_OBJ_MAC - -# ifdef USE_OBJ_MAC -# include -# else -# define SN_undef "UNDEF" -# define LN_undef "undefined" -# define NID_undef 0 -# define OBJ_undef 0L - -# define SN_Algorithm "Algorithm" -# define LN_algorithm "algorithm" -# define NID_algorithm 38 -# define OBJ_algorithm 1L,3L,14L,3L,2L - -# define LN_rsadsi "rsadsi" -# define NID_rsadsi 1 -# define OBJ_rsadsi 1L,2L,840L,113549L - -# define LN_pkcs "pkcs" -# define NID_pkcs 2 -# define OBJ_pkcs OBJ_rsadsi,1L - -# define SN_md2 "MD2" -# define LN_md2 "md2" -# define NID_md2 3 -# define OBJ_md2 OBJ_rsadsi,2L,2L - -# define SN_md5 "MD5" -# define LN_md5 "md5" -# define NID_md5 4 -# define OBJ_md5 OBJ_rsadsi,2L,5L - -# define SN_rc4 "RC4" -# define LN_rc4 "rc4" -# define NID_rc4 5 -# define OBJ_rc4 OBJ_rsadsi,3L,4L - -# define LN_rsaEncryption "rsaEncryption" -# define NID_rsaEncryption 6 -# define OBJ_rsaEncryption OBJ_pkcs,1L,1L - -# define SN_md2WithRSAEncryption "RSA-MD2" -# define LN_md2WithRSAEncryption "md2WithRSAEncryption" -# define NID_md2WithRSAEncryption 7 -# define OBJ_md2WithRSAEncryption OBJ_pkcs,1L,2L - -# define SN_md5WithRSAEncryption "RSA-MD5" -# define LN_md5WithRSAEncryption "md5WithRSAEncryption" -# define NID_md5WithRSAEncryption 8 -# define OBJ_md5WithRSAEncryption OBJ_pkcs,1L,4L - -# define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" -# define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" -# define NID_pbeWithMD2AndDES_CBC 9 -# define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs,5L,1L - -# define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" -# define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" -# define NID_pbeWithMD5AndDES_CBC 10 -# define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs,5L,3L - -# define LN_X500 "X500" -# define NID_X500 11 -# define OBJ_X500 2L,5L - -# define LN_X509 "X509" -# define NID_X509 12 -# define OBJ_X509 OBJ_X500,4L - -# define SN_commonName "CN" -# define LN_commonName "commonName" -# define NID_commonName 13 -# define OBJ_commonName OBJ_X509,3L - -# define SN_countryName "C" -# define LN_countryName "countryName" -# define NID_countryName 14 -# define OBJ_countryName OBJ_X509,6L - -# define SN_localityName "L" -# define LN_localityName "localityName" -# define NID_localityName 15 -# define OBJ_localityName OBJ_X509,7L - -/* Postal Address? PA */ - -/* should be "ST" (rfc1327) but MS uses 'S' */ -# define SN_stateOrProvinceName "ST" -# define LN_stateOrProvinceName "stateOrProvinceName" -# define NID_stateOrProvinceName 16 -# define OBJ_stateOrProvinceName OBJ_X509,8L - -# define SN_organizationName "O" -# define LN_organizationName "organizationName" -# define NID_organizationName 17 -# define OBJ_organizationName OBJ_X509,10L - -# define SN_organizationalUnitName "OU" -# define LN_organizationalUnitName "organizationalUnitName" -# define NID_organizationalUnitName 18 -# define OBJ_organizationalUnitName OBJ_X509,11L - -# define SN_rsa "RSA" -# define LN_rsa "rsa" -# define NID_rsa 19 -# define OBJ_rsa OBJ_X500,8L,1L,1L - -# define LN_pkcs7 "pkcs7" -# define NID_pkcs7 20 -# define OBJ_pkcs7 OBJ_pkcs,7L - -# define LN_pkcs7_data "pkcs7-data" -# define NID_pkcs7_data 21 -# define OBJ_pkcs7_data OBJ_pkcs7,1L - -# define LN_pkcs7_signed "pkcs7-signedData" -# define NID_pkcs7_signed 22 -# define OBJ_pkcs7_signed OBJ_pkcs7,2L - -# define LN_pkcs7_enveloped "pkcs7-envelopedData" -# define NID_pkcs7_enveloped 23 -# define OBJ_pkcs7_enveloped OBJ_pkcs7,3L - -# define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" -# define NID_pkcs7_signedAndEnveloped 24 -# define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L - -# define LN_pkcs7_digest "pkcs7-digestData" -# define NID_pkcs7_digest 25 -# define OBJ_pkcs7_digest OBJ_pkcs7,5L - -# define LN_pkcs7_encrypted "pkcs7-encryptedData" -# define NID_pkcs7_encrypted 26 -# define OBJ_pkcs7_encrypted OBJ_pkcs7,6L - -# define LN_pkcs3 "pkcs3" -# define NID_pkcs3 27 -# define OBJ_pkcs3 OBJ_pkcs,3L - -# define LN_dhKeyAgreement "dhKeyAgreement" -# define NID_dhKeyAgreement 28 -# define OBJ_dhKeyAgreement OBJ_pkcs3,1L - -# define SN_des_ecb "DES-ECB" -# define LN_des_ecb "des-ecb" -# define NID_des_ecb 29 -# define OBJ_des_ecb OBJ_algorithm,6L - -# define SN_des_cfb64 "DES-CFB" -# define LN_des_cfb64 "des-cfb" -# define NID_des_cfb64 30 -/* IV + num */ -# define OBJ_des_cfb64 OBJ_algorithm,9L - -# define SN_des_cbc "DES-CBC" -# define LN_des_cbc "des-cbc" -# define NID_des_cbc 31 -/* IV */ -# define OBJ_des_cbc OBJ_algorithm,7L - -# define SN_des_ede "DES-EDE" -# define LN_des_ede "des-ede" -# define NID_des_ede 32 -/* ?? */ -# define OBJ_des_ede OBJ_algorithm,17L - -# define SN_des_ede3 "DES-EDE3" -# define LN_des_ede3 "des-ede3" -# define NID_des_ede3 33 - -# define SN_idea_cbc "IDEA-CBC" -# define LN_idea_cbc "idea-cbc" -# define NID_idea_cbc 34 -# define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L - -# define SN_idea_cfb64 "IDEA-CFB" -# define LN_idea_cfb64 "idea-cfb" -# define NID_idea_cfb64 35 - -# define SN_idea_ecb "IDEA-ECB" -# define LN_idea_ecb "idea-ecb" -# define NID_idea_ecb 36 - -# define SN_rc2_cbc "RC2-CBC" -# define LN_rc2_cbc "rc2-cbc" -# define NID_rc2_cbc 37 -# define OBJ_rc2_cbc OBJ_rsadsi,3L,2L - -# define SN_rc2_ecb "RC2-ECB" -# define LN_rc2_ecb "rc2-ecb" -# define NID_rc2_ecb 38 - -# define SN_rc2_cfb64 "RC2-CFB" -# define LN_rc2_cfb64 "rc2-cfb" -# define NID_rc2_cfb64 39 - -# define SN_rc2_ofb64 "RC2-OFB" -# define LN_rc2_ofb64 "rc2-ofb" -# define NID_rc2_ofb64 40 - -# define SN_sha "SHA" -# define LN_sha "sha" -# define NID_sha 41 -# define OBJ_sha OBJ_algorithm,18L - -# define SN_shaWithRSAEncryption "RSA-SHA" -# define LN_shaWithRSAEncryption "shaWithRSAEncryption" -# define NID_shaWithRSAEncryption 42 -# define OBJ_shaWithRSAEncryption OBJ_algorithm,15L - -# define SN_des_ede_cbc "DES-EDE-CBC" -# define LN_des_ede_cbc "des-ede-cbc" -# define NID_des_ede_cbc 43 - -# define SN_des_ede3_cbc "DES-EDE3-CBC" -# define LN_des_ede3_cbc "des-ede3-cbc" -# define NID_des_ede3_cbc 44 -# define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L - -# define SN_des_ofb64 "DES-OFB" -# define LN_des_ofb64 "des-ofb" -# define NID_des_ofb64 45 -# define OBJ_des_ofb64 OBJ_algorithm,8L - -# define SN_idea_ofb64 "IDEA-OFB" -# define LN_idea_ofb64 "idea-ofb" -# define NID_idea_ofb64 46 - -# define LN_pkcs9 "pkcs9" -# define NID_pkcs9 47 -# define OBJ_pkcs9 OBJ_pkcs,9L - -# define SN_pkcs9_emailAddress "Email" -# define LN_pkcs9_emailAddress "emailAddress" -# define NID_pkcs9_emailAddress 48 -# define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L - -# define LN_pkcs9_unstructuredName "unstructuredName" -# define NID_pkcs9_unstructuredName 49 -# define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L - -# define LN_pkcs9_contentType "contentType" -# define NID_pkcs9_contentType 50 -# define OBJ_pkcs9_contentType OBJ_pkcs9,3L - -# define LN_pkcs9_messageDigest "messageDigest" -# define NID_pkcs9_messageDigest 51 -# define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L - -# define LN_pkcs9_signingTime "signingTime" -# define NID_pkcs9_signingTime 52 -# define OBJ_pkcs9_signingTime OBJ_pkcs9,5L - -# define LN_pkcs9_countersignature "countersignature" -# define NID_pkcs9_countersignature 53 -# define OBJ_pkcs9_countersignature OBJ_pkcs9,6L - -# define LN_pkcs9_challengePassword "challengePassword" -# define NID_pkcs9_challengePassword 54 -# define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L - -# define LN_pkcs9_unstructuredAddress "unstructuredAddress" -# define NID_pkcs9_unstructuredAddress 55 -# define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L - -# define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" -# define NID_pkcs9_extCertAttributes 56 -# define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L - -# define SN_netscape "Netscape" -# define LN_netscape "Netscape Communications Corp." -# define NID_netscape 57 -# define OBJ_netscape 2L,16L,840L,1L,113730L - -# define SN_netscape_cert_extension "nsCertExt" -# define LN_netscape_cert_extension "Netscape Certificate Extension" -# define NID_netscape_cert_extension 58 -# define OBJ_netscape_cert_extension OBJ_netscape,1L - -# define SN_netscape_data_type "nsDataType" -# define LN_netscape_data_type "Netscape Data Type" -# define NID_netscape_data_type 59 -# define OBJ_netscape_data_type OBJ_netscape,2L - -# define SN_des_ede_cfb64 "DES-EDE-CFB" -# define LN_des_ede_cfb64 "des-ede-cfb" -# define NID_des_ede_cfb64 60 - -# define SN_des_ede3_cfb64 "DES-EDE3-CFB" -# define LN_des_ede3_cfb64 "des-ede3-cfb" -# define NID_des_ede3_cfb64 61 - -# define SN_des_ede_ofb64 "DES-EDE-OFB" -# define LN_des_ede_ofb64 "des-ede-ofb" -# define NID_des_ede_ofb64 62 - -# define SN_des_ede3_ofb64 "DES-EDE3-OFB" -# define LN_des_ede3_ofb64 "des-ede3-ofb" -# define NID_des_ede3_ofb64 63 - -/* I'm not sure about the object ID */ -# define SN_sha1 "SHA1" -# define LN_sha1 "sha1" -# define NID_sha1 64 -# define OBJ_sha1 OBJ_algorithm,26L -/* 28 Jun 1996 - eay */ -/* #define OBJ_sha1 1L,3L,14L,2L,26L,05L <- wrong */ - -# define SN_sha1WithRSAEncryption "RSA-SHA1" -# define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" -# define NID_sha1WithRSAEncryption 65 -# define OBJ_sha1WithRSAEncryption OBJ_pkcs,1L,5L - -# define SN_dsaWithSHA "DSA-SHA" -# define LN_dsaWithSHA "dsaWithSHA" -# define NID_dsaWithSHA 66 -# define OBJ_dsaWithSHA OBJ_algorithm,13L - -# define SN_dsa_2 "DSA-old" -# define LN_dsa_2 "dsaEncryption-old" -# define NID_dsa_2 67 -# define OBJ_dsa_2 OBJ_algorithm,12L - -/* proposed by microsoft to RSA */ -# define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" -# define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" -# define NID_pbeWithSHA1AndRC2_CBC 68 -# define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs,5L,11L - -/* - * proposed by microsoft to RSA as pbeWithSHA1AndRC4: it is now defined - * explicitly in PKCS#5 v2.0 as id-PBKDF2 which is something completely - * different. - */ -# define LN_id_pbkdf2 "PBKDF2" -# define NID_id_pbkdf2 69 -# define OBJ_id_pbkdf2 OBJ_pkcs,5L,12L - -# define SN_dsaWithSHA1_2 "DSA-SHA1-old" -# define LN_dsaWithSHA1_2 "dsaWithSHA1-old" -# define NID_dsaWithSHA1_2 70 -/* Got this one from 'sdn706r20.pdf' which is actually an NSA document :-) */ -# define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L - -# define SN_netscape_cert_type "nsCertType" -# define LN_netscape_cert_type "Netscape Cert Type" -# define NID_netscape_cert_type 71 -# define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L - -# define SN_netscape_base_url "nsBaseUrl" -# define LN_netscape_base_url "Netscape Base Url" -# define NID_netscape_base_url 72 -# define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L - -# define SN_netscape_revocation_url "nsRevocationUrl" -# define LN_netscape_revocation_url "Netscape Revocation Url" -# define NID_netscape_revocation_url 73 -# define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L - -# define SN_netscape_ca_revocation_url "nsCaRevocationUrl" -# define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" -# define NID_netscape_ca_revocation_url 74 -# define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L - -# define SN_netscape_renewal_url "nsRenewalUrl" -# define LN_netscape_renewal_url "Netscape Renewal Url" -# define NID_netscape_renewal_url 75 -# define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L - -# define SN_netscape_ca_policy_url "nsCaPolicyUrl" -# define LN_netscape_ca_policy_url "Netscape CA Policy Url" -# define NID_netscape_ca_policy_url 76 -# define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L - -# define SN_netscape_ssl_server_name "nsSslServerName" -# define LN_netscape_ssl_server_name "Netscape SSL Server Name" -# define NID_netscape_ssl_server_name 77 -# define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L - -# define SN_netscape_comment "nsComment" -# define LN_netscape_comment "Netscape Comment" -# define NID_netscape_comment 78 -# define OBJ_netscape_comment OBJ_netscape_cert_extension,13L - -# define SN_netscape_cert_sequence "nsCertSequence" -# define LN_netscape_cert_sequence "Netscape Certificate Sequence" -# define NID_netscape_cert_sequence 79 -# define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L - -# define SN_desx_cbc "DESX-CBC" -# define LN_desx_cbc "desx-cbc" -# define NID_desx_cbc 80 - -# define SN_id_ce "id-ce" -# define NID_id_ce 81 -# define OBJ_id_ce 2L,5L,29L - -# define SN_subject_key_identifier "subjectKeyIdentifier" -# define LN_subject_key_identifier "X509v3 Subject Key Identifier" -# define NID_subject_key_identifier 82 -# define OBJ_subject_key_identifier OBJ_id_ce,14L - -# define SN_key_usage "keyUsage" -# define LN_key_usage "X509v3 Key Usage" -# define NID_key_usage 83 -# define OBJ_key_usage OBJ_id_ce,15L - -# define SN_private_key_usage_period "privateKeyUsagePeriod" -# define LN_private_key_usage_period "X509v3 Private Key Usage Period" -# define NID_private_key_usage_period 84 -# define OBJ_private_key_usage_period OBJ_id_ce,16L - -# define SN_subject_alt_name "subjectAltName" -# define LN_subject_alt_name "X509v3 Subject Alternative Name" -# define NID_subject_alt_name 85 -# define OBJ_subject_alt_name OBJ_id_ce,17L - -# define SN_issuer_alt_name "issuerAltName" -# define LN_issuer_alt_name "X509v3 Issuer Alternative Name" -# define NID_issuer_alt_name 86 -# define OBJ_issuer_alt_name OBJ_id_ce,18L - -# define SN_basic_constraints "basicConstraints" -# define LN_basic_constraints "X509v3 Basic Constraints" -# define NID_basic_constraints 87 -# define OBJ_basic_constraints OBJ_id_ce,19L - -# define SN_crl_number "crlNumber" -# define LN_crl_number "X509v3 CRL Number" -# define NID_crl_number 88 -# define OBJ_crl_number OBJ_id_ce,20L - -# define SN_certificate_policies "certificatePolicies" -# define LN_certificate_policies "X509v3 Certificate Policies" -# define NID_certificate_policies 89 -# define OBJ_certificate_policies OBJ_id_ce,32L - -# define SN_authority_key_identifier "authorityKeyIdentifier" -# define LN_authority_key_identifier "X509v3 Authority Key Identifier" -# define NID_authority_key_identifier 90 -# define OBJ_authority_key_identifier OBJ_id_ce,35L - -# define SN_bf_cbc "BF-CBC" -# define LN_bf_cbc "bf-cbc" -# define NID_bf_cbc 91 -# define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L - -# define SN_bf_ecb "BF-ECB" -# define LN_bf_ecb "bf-ecb" -# define NID_bf_ecb 92 - -# define SN_bf_cfb64 "BF-CFB" -# define LN_bf_cfb64 "bf-cfb" -# define NID_bf_cfb64 93 - -# define SN_bf_ofb64 "BF-OFB" -# define LN_bf_ofb64 "bf-ofb" -# define NID_bf_ofb64 94 - -# define SN_mdc2 "MDC2" -# define LN_mdc2 "mdc2" -# define NID_mdc2 95 -# define OBJ_mdc2 2L,5L,8L,3L,101L -/* An alternative? 1L,3L,14L,3L,2L,19L */ - -# define SN_mdc2WithRSA "RSA-MDC2" -# define LN_mdc2WithRSA "mdc2withRSA" -# define NID_mdc2WithRSA 96 -# define OBJ_mdc2WithRSA 2L,5L,8L,3L,100L - -# define SN_rc4_40 "RC4-40" -# define LN_rc4_40 "rc4-40" -# define NID_rc4_40 97 - -# define SN_rc2_40_cbc "RC2-40-CBC" -# define LN_rc2_40_cbc "rc2-40-cbc" -# define NID_rc2_40_cbc 98 - -# define SN_givenName "G" -# define LN_givenName "givenName" -# define NID_givenName 99 -# define OBJ_givenName OBJ_X509,42L - -# define SN_surname "S" -# define LN_surname "surname" -# define NID_surname 100 -# define OBJ_surname OBJ_X509,4L - -# define SN_initials "I" -# define LN_initials "initials" -# define NID_initials 101 -# define OBJ_initials OBJ_X509,43L - -# define SN_uniqueIdentifier "UID" -# define LN_uniqueIdentifier "uniqueIdentifier" -# define NID_uniqueIdentifier 102 -# define OBJ_uniqueIdentifier OBJ_X509,45L - -# define SN_crl_distribution_points "crlDistributionPoints" -# define LN_crl_distribution_points "X509v3 CRL Distribution Points" -# define NID_crl_distribution_points 103 -# define OBJ_crl_distribution_points OBJ_id_ce,31L - -# define SN_md5WithRSA "RSA-NP-MD5" -# define LN_md5WithRSA "md5WithRSA" -# define NID_md5WithRSA 104 -# define OBJ_md5WithRSA OBJ_algorithm,3L - -# define SN_serialNumber "SN" -# define LN_serialNumber "serialNumber" -# define NID_serialNumber 105 -# define OBJ_serialNumber OBJ_X509,5L - -# define SN_title "T" -# define LN_title "title" -# define NID_title 106 -# define OBJ_title OBJ_X509,12L - -# define SN_description "D" -# define LN_description "description" -# define NID_description 107 -# define OBJ_description OBJ_X509,13L - -/* CAST5 is CAST-128, I'm just sticking with the documentation */ -# define SN_cast5_cbc "CAST5-CBC" -# define LN_cast5_cbc "cast5-cbc" -# define NID_cast5_cbc 108 -# define OBJ_cast5_cbc 1L,2L,840L,113533L,7L,66L,10L - -# define SN_cast5_ecb "CAST5-ECB" -# define LN_cast5_ecb "cast5-ecb" -# define NID_cast5_ecb 109 - -# define SN_cast5_cfb64 "CAST5-CFB" -# define LN_cast5_cfb64 "cast5-cfb" -# define NID_cast5_cfb64 110 - -# define SN_cast5_ofb64 "CAST5-OFB" -# define LN_cast5_ofb64 "cast5-ofb" -# define NID_cast5_ofb64 111 - -# define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" -# define NID_pbeWithMD5AndCast5_CBC 112 -# define OBJ_pbeWithMD5AndCast5_CBC 1L,2L,840L,113533L,7L,66L,12L - -/*- - * This is one sun will soon be using :-( - * id-dsa-with-sha1 ID ::= { - * iso(1) member-body(2) us(840) x9-57 (10040) x9cm(4) 3 } - */ -# define SN_dsaWithSHA1 "DSA-SHA1" -# define LN_dsaWithSHA1 "dsaWithSHA1" -# define NID_dsaWithSHA1 113 -# define OBJ_dsaWithSHA1 1L,2L,840L,10040L,4L,3L - -# define NID_md5_sha1 114 -# define SN_md5_sha1 "MD5-SHA1" -# define LN_md5_sha1 "md5-sha1" - -# define SN_sha1WithRSA "RSA-SHA1-2" -# define LN_sha1WithRSA "sha1WithRSA" -# define NID_sha1WithRSA 115 -# define OBJ_sha1WithRSA OBJ_algorithm,29L - -# define SN_dsa "DSA" -# define LN_dsa "dsaEncryption" -# define NID_dsa 116 -# define OBJ_dsa 1L,2L,840L,10040L,4L,1L - -# define SN_ripemd160 "RIPEMD160" -# define LN_ripemd160 "ripemd160" -# define NID_ripemd160 117 -# define OBJ_ripemd160 1L,3L,36L,3L,2L,1L - -/* - * The name should actually be rsaSignatureWithripemd160, but I'm going to - * continue using the convention I'm using with the other ciphers - */ -# define SN_ripemd160WithRSA "RSA-RIPEMD160" -# define LN_ripemd160WithRSA "ripemd160WithRSA" -# define NID_ripemd160WithRSA 119 -# define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L - -/*- - * Taken from rfc2040 - * RC5_CBC_Parameters ::= SEQUENCE { - * version INTEGER (v1_0(16)), - * rounds INTEGER (8..127), - * blockSizeInBits INTEGER (64, 128), - * iv OCTET STRING OPTIONAL - * } - */ -# define SN_rc5_cbc "RC5-CBC" -# define LN_rc5_cbc "rc5-cbc" -# define NID_rc5_cbc 120 -# define OBJ_rc5_cbc OBJ_rsadsi,3L,8L - -# define SN_rc5_ecb "RC5-ECB" -# define LN_rc5_ecb "rc5-ecb" -# define NID_rc5_ecb 121 - -# define SN_rc5_cfb64 "RC5-CFB" -# define LN_rc5_cfb64 "rc5-cfb" -# define NID_rc5_cfb64 122 - -# define SN_rc5_ofb64 "RC5-OFB" -# define LN_rc5_ofb64 "rc5-ofb" -# define NID_rc5_ofb64 123 - -# define SN_rle_compression "RLE" -# define LN_rle_compression "run length compression" -# define NID_rle_compression 124 -# define OBJ_rle_compression 1L,1L,1L,1L,666L,1L - -# define SN_zlib_compression "ZLIB" -# define LN_zlib_compression "zlib compression" -# define NID_zlib_compression 125 -# define OBJ_zlib_compression 1L,1L,1L,1L,666L,2L - -# define SN_ext_key_usage "extendedKeyUsage" -# define LN_ext_key_usage "X509v3 Extended Key Usage" -# define NID_ext_key_usage 126 -# define OBJ_ext_key_usage OBJ_id_ce,37 - -# define SN_id_pkix "PKIX" -# define NID_id_pkix 127 -# define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L - -# define SN_id_kp "id-kp" -# define NID_id_kp 128 -# define OBJ_id_kp OBJ_id_pkix,3L - -/* PKIX extended key usage OIDs */ - -# define SN_server_auth "serverAuth" -# define LN_server_auth "TLS Web Server Authentication" -# define NID_server_auth 129 -# define OBJ_server_auth OBJ_id_kp,1L - -# define SN_client_auth "clientAuth" -# define LN_client_auth "TLS Web Client Authentication" -# define NID_client_auth 130 -# define OBJ_client_auth OBJ_id_kp,2L - -# define SN_code_sign "codeSigning" -# define LN_code_sign "Code Signing" -# define NID_code_sign 131 -# define OBJ_code_sign OBJ_id_kp,3L - -# define SN_email_protect "emailProtection" -# define LN_email_protect "E-mail Protection" -# define NID_email_protect 132 -# define OBJ_email_protect OBJ_id_kp,4L - -# define SN_time_stamp "timeStamping" -# define LN_time_stamp "Time Stamping" -# define NID_time_stamp 133 -# define OBJ_time_stamp OBJ_id_kp,8L - -/* Additional extended key usage OIDs: Microsoft */ - -# define SN_ms_code_ind "msCodeInd" -# define LN_ms_code_ind "Microsoft Individual Code Signing" -# define NID_ms_code_ind 134 -# define OBJ_ms_code_ind 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L - -# define SN_ms_code_com "msCodeCom" -# define LN_ms_code_com "Microsoft Commercial Code Signing" -# define NID_ms_code_com 135 -# define OBJ_ms_code_com 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L - -# define SN_ms_ctl_sign "msCTLSign" -# define LN_ms_ctl_sign "Microsoft Trust List Signing" -# define NID_ms_ctl_sign 136 -# define OBJ_ms_ctl_sign 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L - -# define SN_ms_sgc "msSGC" -# define LN_ms_sgc "Microsoft Server Gated Crypto" -# define NID_ms_sgc 137 -# define OBJ_ms_sgc 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L - -# define SN_ms_efs "msEFS" -# define LN_ms_efs "Microsoft Encrypted File System" -# define NID_ms_efs 138 -# define OBJ_ms_efs 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L - -/* Additional usage: Netscape */ - -# define SN_ns_sgc "nsSGC" -# define LN_ns_sgc "Netscape Server Gated Crypto" -# define NID_ns_sgc 139 -# define OBJ_ns_sgc OBJ_netscape,4L,1L - -# define SN_delta_crl "deltaCRL" -# define LN_delta_crl "X509v3 Delta CRL Indicator" -# define NID_delta_crl 140 -# define OBJ_delta_crl OBJ_id_ce,27L - -# define SN_crl_reason "CRLReason" -# define LN_crl_reason "CRL Reason Code" -# define NID_crl_reason 141 -# define OBJ_crl_reason OBJ_id_ce,21L - -# define SN_invalidity_date "invalidityDate" -# define LN_invalidity_date "Invalidity Date" -# define NID_invalidity_date 142 -# define OBJ_invalidity_date OBJ_id_ce,24L - -# define SN_sxnet "SXNetID" -# define LN_sxnet "Strong Extranet ID" -# define NID_sxnet 143 -# define OBJ_sxnet 1L,3L,101L,1L,4L,1L - -/* PKCS12 and related OBJECT IDENTIFIERS */ - -# define OBJ_pkcs12 OBJ_pkcs,12L -# define OBJ_pkcs12_pbeids OBJ_pkcs12, 1 - -# define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" -# define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" -# define NID_pbe_WithSHA1And128BitRC4 144 -# define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids, 1L - -# define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" -# define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" -# define NID_pbe_WithSHA1And40BitRC4 145 -# define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids, 2L - -# define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" -# define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" -# define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 -# define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 3L - -# define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" -# define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" -# define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 -# define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 4L - -# define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" -# define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" -# define NID_pbe_WithSHA1And128BitRC2_CBC 148 -# define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids, 5L - -# define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" -# define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" -# define NID_pbe_WithSHA1And40BitRC2_CBC 149 -# define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids, 6L - -# define OBJ_pkcs12_Version1 OBJ_pkcs12, 10L - -# define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1, 1L - -# define LN_keyBag "keyBag" -# define NID_keyBag 150 -# define OBJ_keyBag OBJ_pkcs12_BagIds, 1L - -# define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" -# define NID_pkcs8ShroudedKeyBag 151 -# define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds, 2L - -# define LN_certBag "certBag" -# define NID_certBag 152 -# define OBJ_certBag OBJ_pkcs12_BagIds, 3L - -# define LN_crlBag "crlBag" -# define NID_crlBag 153 -# define OBJ_crlBag OBJ_pkcs12_BagIds, 4L - -# define LN_secretBag "secretBag" -# define NID_secretBag 154 -# define OBJ_secretBag OBJ_pkcs12_BagIds, 5L - -# define LN_safeContentsBag "safeContentsBag" -# define NID_safeContentsBag 155 -# define OBJ_safeContentsBag OBJ_pkcs12_BagIds, 6L - -# define LN_friendlyName "friendlyName" -# define NID_friendlyName 156 -# define OBJ_friendlyName OBJ_pkcs9, 20L - -# define LN_localKeyID "localKeyID" -# define NID_localKeyID 157 -# define OBJ_localKeyID OBJ_pkcs9, 21L - -# define OBJ_certTypes OBJ_pkcs9, 22L - -# define LN_x509Certificate "x509Certificate" -# define NID_x509Certificate 158 -# define OBJ_x509Certificate OBJ_certTypes, 1L - -# define LN_sdsiCertificate "sdsiCertificate" -# define NID_sdsiCertificate 159 -# define OBJ_sdsiCertificate OBJ_certTypes, 2L - -# define OBJ_crlTypes OBJ_pkcs9, 23L - -# define LN_x509Crl "x509Crl" -# define NID_x509Crl 160 -# define OBJ_x509Crl OBJ_crlTypes, 1L - -/* PKCS#5 v2 OIDs */ - -# define LN_pbes2 "PBES2" -# define NID_pbes2 161 -# define OBJ_pbes2 OBJ_pkcs,5L,13L - -# define LN_pbmac1 "PBMAC1" -# define NID_pbmac1 162 -# define OBJ_pbmac1 OBJ_pkcs,5L,14L - -# define LN_hmacWithSHA1 "hmacWithSHA1" -# define NID_hmacWithSHA1 163 -# define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L - -/* Policy Qualifier Ids */ - -# define LN_id_qt_cps "Policy Qualifier CPS" -# define SN_id_qt_cps "id-qt-cps" -# define NID_id_qt_cps 164 -# define OBJ_id_qt_cps OBJ_id_pkix,2L,1L - -# define LN_id_qt_unotice "Policy Qualifier User Notice" -# define SN_id_qt_unotice "id-qt-unotice" -# define NID_id_qt_unotice 165 -# define OBJ_id_qt_unotice OBJ_id_pkix,2L,2L - -# define SN_rc2_64_cbc "RC2-64-CBC" -# define LN_rc2_64_cbc "rc2-64-cbc" -# define NID_rc2_64_cbc 166 - -# define SN_SMIMECapabilities "SMIME-CAPS" -# define LN_SMIMECapabilities "S/MIME Capabilities" -# define NID_SMIMECapabilities 167 -# define OBJ_SMIMECapabilities OBJ_pkcs9,15L - -# define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" -# define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" -# define NID_pbeWithMD2AndRC2_CBC 168 -# define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs,5L,4L - -# define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" -# define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" -# define NID_pbeWithMD5AndRC2_CBC 169 -# define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs,5L,6L - -# define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" -# define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" -# define NID_pbeWithSHA1AndDES_CBC 170 -# define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs,5L,10L - -/* Extension request OIDs */ - -# define LN_ms_ext_req "Microsoft Extension Request" -# define SN_ms_ext_req "msExtReq" -# define NID_ms_ext_req 171 -# define OBJ_ms_ext_req 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L - -# define LN_ext_req "Extension Request" -# define SN_ext_req "extReq" -# define NID_ext_req 172 -# define OBJ_ext_req OBJ_pkcs9,14L - -# define SN_name "name" -# define LN_name "name" -# define NID_name 173 -# define OBJ_name OBJ_X509,41L - -# define SN_dnQualifier "dnQualifier" -# define LN_dnQualifier "dnQualifier" -# define NID_dnQualifier 174 -# define OBJ_dnQualifier OBJ_X509,46L - -# define SN_id_pe "id-pe" -# define NID_id_pe 175 -# define OBJ_id_pe OBJ_id_pkix,1L - -# define SN_id_ad "id-ad" -# define NID_id_ad 176 -# define OBJ_id_ad OBJ_id_pkix,48L - -# define SN_info_access "authorityInfoAccess" -# define LN_info_access "Authority Information Access" -# define NID_info_access 177 -# define OBJ_info_access OBJ_id_pe,1L - -# define SN_ad_OCSP "OCSP" -# define LN_ad_OCSP "OCSP" -# define NID_ad_OCSP 178 -# define OBJ_ad_OCSP OBJ_id_ad,1L - -# define SN_ad_ca_issuers "caIssuers" -# define LN_ad_ca_issuers "CA Issuers" -# define NID_ad_ca_issuers 179 -# define OBJ_ad_ca_issuers OBJ_id_ad,2L - -# define SN_OCSP_sign "OCSPSigning" -# define LN_OCSP_sign "OCSP Signing" -# define NID_OCSP_sign 180 -# define OBJ_OCSP_sign OBJ_id_kp,9L -# endif /* USE_OBJ_MAC */ - +# include # include # include +# include # define OBJ_NAME_TYPE_UNDEF 0x00 # define OBJ_NAME_TYPE_MD_METH 0x01 @@ -1068,28 +168,6 @@ int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid); int OBJ_add_sigid(int signid, int dig_id, int pkey_id); void OBJ_sigid_free(void); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_OBJ_strings(void); - -/* Error codes for the OBJ functions. */ - -/* Function codes. */ -# define OBJ_F_OBJ_ADD_OBJECT 105 -# define OBJ_F_OBJ_CREATE 100 -# define OBJ_F_OBJ_DUP 101 -# define OBJ_F_OBJ_NAME_NEW_INDEX 106 -# define OBJ_F_OBJ_NID2LN 102 -# define OBJ_F_OBJ_NID2OBJ 103 -# define OBJ_F_OBJ_NID2SN 104 - -/* Reason codes. */ -# define OBJ_R_OID_EXISTS 102 -# define OBJ_R_UNKNOWN_NID 101 # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/objectserr.h b/libs/windows/include/openssl/objectserr.h new file mode 100644 index 00000000..02308dfa --- /dev/null +++ b/libs/windows/include/openssl/objectserr.h @@ -0,0 +1,38 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OBJERR_H +# define HEADER_OBJERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_OBJ_strings(void); + +/* + * OBJ function codes. + */ +# define OBJ_F_OBJ_ADD_OBJECT 105 +# define OBJ_F_OBJ_ADD_SIGID 107 +# define OBJ_F_OBJ_CREATE 100 +# define OBJ_F_OBJ_DUP 101 +# define OBJ_F_OBJ_NAME_NEW_INDEX 106 +# define OBJ_F_OBJ_NID2LN 102 +# define OBJ_F_OBJ_NID2OBJ 103 +# define OBJ_F_OBJ_NID2SN 104 +# define OBJ_F_OBJ_TXT2OBJ 108 + +/* + * OBJ reason codes. + */ +# define OBJ_R_OID_EXISTS 102 +# define OBJ_R_UNKNOWN_NID 101 + +#endif diff --git a/libs/windows/include/openssl/ocsp.h b/libs/windows/include/openssl/ocsp.h index ba1b9731..19b9b6e5 100644 --- a/libs/windows/include/openssl/ocsp.h +++ b/libs/windows/include/openssl/ocsp.h @@ -45,6 +45,7 @@ # include # include # include +# include #ifdef __cplusplus extern "C" { @@ -119,18 +120,20 @@ typedef struct ocsp_service_locator_st OCSP_SERVICELOC; # define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p) # define PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \ - (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,bp,(char **)x,cb,NULL) + (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST, \ + bp,(char **)(x),cb,NULL) -# define PEM_read_bio_OCSP_RESPONSE(bp,x,cb)(OCSP_RESPONSE *)PEM_ASN1_read_bio(\ - (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,bp,(char **)x,cb,NULL) +# define PEM_read_bio_OCSP_RESPONSE(bp,x,cb)(OCSP_RESPONSE *)PEM_ASN1_read_bio(\ + (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE, \ + bp,(char **)(x),cb,NULL) # define PEM_write_bio_OCSP_REQUEST(bp,o) \ PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\ - bp,(char *)o, NULL,NULL,0,NULL,NULL) + bp,(char *)(o), NULL,NULL,0,NULL,NULL) # define PEM_write_bio_OCSP_RESPONSE(bp,o) \ PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\ - bp,(char *)o, NULL,NULL,0,NULL,NULL) + bp,(char *)(o), NULL,NULL,0,NULL,NULL) # define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o) @@ -203,6 +206,9 @@ const STACK_OF(X509) *OCSP_resp_get0_certs(const OCSP_BASICRESP *bs); int OCSP_resp_get0_id(const OCSP_BASICRESP *bs, const ASN1_OCTET_STRING **pid, const X509_NAME **pname); +int OCSP_resp_get1_id(const OCSP_BASICRESP *bs, + ASN1_OCTET_STRING **pid, + X509_NAME **pname); int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last); int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason, @@ -223,8 +229,8 @@ int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, int OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath, int *pssl); -int OCSP_id_issuer_cmp(OCSP_CERTID *a, OCSP_CERTID *b); -int OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b); +int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); +int OCSP_id_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); int OCSP_request_onereq_count(OCSP_REQUEST *req); OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i); @@ -244,6 +250,9 @@ int OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert); int OCSP_basic_sign(OCSP_BASICRESP *brsp, X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, STACK_OF(X509) *certs, unsigned long flags); +int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, + X509 *signer, EVP_MD_CTX *ctx, + STACK_OF(X509) *certs, unsigned long flags); int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); @@ -335,60 +344,6 @@ int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags); int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, X509_STORE *st, unsigned long flags); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_OCSP_strings(void); - -/* Error codes for the OCSP functions. */ - -/* Function codes. */ -# define OCSP_F_D2I_OCSP_NONCE 102 -# define OCSP_F_OCSP_BASIC_ADD1_STATUS 103 -# define OCSP_F_OCSP_BASIC_SIGN 104 -# define OCSP_F_OCSP_BASIC_VERIFY 105 -# define OCSP_F_OCSP_CERT_ID_NEW 101 -# define OCSP_F_OCSP_CHECK_DELEGATED 106 -# define OCSP_F_OCSP_CHECK_IDS 107 -# define OCSP_F_OCSP_CHECK_ISSUER 108 -# define OCSP_F_OCSP_CHECK_VALIDITY 115 -# define OCSP_F_OCSP_MATCH_ISSUERID 109 -# define OCSP_F_OCSP_PARSE_URL 114 -# define OCSP_F_OCSP_REQUEST_SIGN 110 -# define OCSP_F_OCSP_REQUEST_VERIFY 116 -# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 111 -# define OCSP_F_PARSE_HTTP_LINE1 118 - -/* Reason codes. */ -# define OCSP_R_CERTIFICATE_VERIFY_ERROR 101 -# define OCSP_R_DIGEST_ERR 102 -# define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD 122 -# define OCSP_R_ERROR_IN_THISUPDATE_FIELD 123 -# define OCSP_R_ERROR_PARSING_URL 121 -# define OCSP_R_MISSING_OCSPSIGNING_USAGE 103 -# define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 -# define OCSP_R_NOT_BASIC_RESPONSE 104 -# define OCSP_R_NO_CERTIFICATES_IN_CHAIN 105 -# define OCSP_R_NO_RESPONSE_DATA 108 -# define OCSP_R_NO_REVOKED_TIME 109 -# define OCSP_R_NO_SIGNER_KEY 130 -# define OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 110 -# define OCSP_R_REQUEST_NOT_SIGNED 128 -# define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA 111 -# define OCSP_R_ROOT_CA_NOT_TRUSTED 112 -# define OCSP_R_SERVER_RESPONSE_ERROR 114 -# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 -# define OCSP_R_SIGNATURE_FAILURE 117 -# define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 -# define OCSP_R_STATUS_EXPIRED 125 -# define OCSP_R_STATUS_NOT_YET_VALID 126 -# define OCSP_R_STATUS_TOO_OLD 127 -# define OCSP_R_UNKNOWN_MESSAGE_DIGEST 119 -# define OCSP_R_UNKNOWN_NID 120 -# define OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE 129 # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/ocsperr.h b/libs/windows/include/openssl/ocsperr.h new file mode 100644 index 00000000..7d93b12d --- /dev/null +++ b/libs/windows/include/openssl/ocsperr.h @@ -0,0 +1,74 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OCSPERR_H +# define HEADER_OCSPERR_H + +# include + +# ifndef OPENSSL_NO_OCSP + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_OCSP_strings(void); + +/* + * OCSP function codes. + */ +# define OCSP_F_D2I_OCSP_NONCE 102 +# define OCSP_F_OCSP_BASIC_ADD1_STATUS 103 +# define OCSP_F_OCSP_BASIC_SIGN 104 +# define OCSP_F_OCSP_BASIC_SIGN_CTX 119 +# define OCSP_F_OCSP_BASIC_VERIFY 105 +# define OCSP_F_OCSP_CERT_ID_NEW 101 +# define OCSP_F_OCSP_CHECK_DELEGATED 106 +# define OCSP_F_OCSP_CHECK_IDS 107 +# define OCSP_F_OCSP_CHECK_ISSUER 108 +# define OCSP_F_OCSP_CHECK_VALIDITY 115 +# define OCSP_F_OCSP_MATCH_ISSUERID 109 +# define OCSP_F_OCSP_PARSE_URL 114 +# define OCSP_F_OCSP_REQUEST_SIGN 110 +# define OCSP_F_OCSP_REQUEST_VERIFY 116 +# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 111 +# define OCSP_F_PARSE_HTTP_LINE1 118 + +/* + * OCSP reason codes. + */ +# define OCSP_R_CERTIFICATE_VERIFY_ERROR 101 +# define OCSP_R_DIGEST_ERR 102 +# define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD 122 +# define OCSP_R_ERROR_IN_THISUPDATE_FIELD 123 +# define OCSP_R_ERROR_PARSING_URL 121 +# define OCSP_R_MISSING_OCSPSIGNING_USAGE 103 +# define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 +# define OCSP_R_NOT_BASIC_RESPONSE 104 +# define OCSP_R_NO_CERTIFICATES_IN_CHAIN 105 +# define OCSP_R_NO_RESPONSE_DATA 108 +# define OCSP_R_NO_REVOKED_TIME 109 +# define OCSP_R_NO_SIGNER_KEY 130 +# define OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 110 +# define OCSP_R_REQUEST_NOT_SIGNED 128 +# define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA 111 +# define OCSP_R_ROOT_CA_NOT_TRUSTED 112 +# define OCSP_R_SERVER_RESPONSE_ERROR 114 +# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 +# define OCSP_R_SIGNATURE_FAILURE 117 +# define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 +# define OCSP_R_STATUS_EXPIRED 125 +# define OCSP_R_STATUS_NOT_YET_VALID 126 +# define OCSP_R_STATUS_TOO_OLD 127 +# define OCSP_R_UNKNOWN_MESSAGE_DIGEST 119 +# define OCSP_R_UNKNOWN_NID 120 +# define OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE 129 + +# endif +#endif diff --git a/libs/windows/include/openssl/opensslconf.h b/libs/windows/include/openssl/opensslconf.h index 620df999..2cf2eb89 100644 --- a/libs/windows/include/openssl/opensslconf.h +++ b/libs/windows/include/openssl/opensslconf.h @@ -10,6 +10,8 @@ * https://www.openssl.org/source/license.html */ +#include + #ifdef __cplusplus extern "C" { #endif @@ -35,12 +37,12 @@ extern "C" { #ifndef OPENSSL_NO_RC5 # define OPENSSL_NO_RC5 #endif -#ifndef OPENSSL_NO_UI -# define OPENSSL_NO_UI -#endif #ifndef OPENSSL_THREADS # define OPENSSL_THREADS #endif +#ifndef OPENSSL_RAND_SEED_OS +# define OPENSSL_RAND_SEED_OS +#endif #ifndef OPENSSL_NO_ASAN # define OPENSSL_NO_ASAN #endif @@ -53,12 +55,18 @@ extern "C" { #ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE # define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE #endif +#ifndef OPENSSL_NO_DEVCRYPTOENG +# define OPENSSL_NO_DEVCRYPTOENG +#endif #ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 # define OPENSSL_NO_EC_NISTP_64_GCC_128 #endif #ifndef OPENSSL_NO_EGD # define OPENSSL_NO_EGD #endif +#ifndef OPENSSL_NO_EXTERNAL_TESTS +# define OPENSSL_NO_EXTERNAL_TESTS +#endif #ifndef OPENSSL_NO_FUZZ_AFL # define OPENSSL_NO_FUZZ_AFL #endif @@ -86,12 +94,18 @@ extern "C" { #ifndef OPENSSL_NO_UBSAN # define OPENSSL_NO_UBSAN #endif +#ifndef OPENSSL_NO_UI_CONSOLE +# define OPENSSL_NO_UI_CONSOLE +#endif #ifndef OPENSSL_NO_UNIT_TEST # define OPENSSL_NO_UNIT_TEST #endif #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS # define OPENSSL_NO_WEAK_SSL_CIPHERS #endif +#ifndef OPENSSL_NO_STATIC_ENGINE +# define OPENSSL_NO_STATIC_ENGINE +#endif #ifndef OPENSSL_NO_AFALGENG # define OPENSSL_NO_AFALGENG #endif @@ -110,15 +124,11 @@ extern "C" { * functions. */ #ifndef DECLARE_DEPRECATED -# if defined(OPENSSL_NO_DEPRECATED) -# define DECLARE_DEPRECATED(f) -# else -# define DECLARE_DEPRECATED(f) f; -# ifdef __GNUC__ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif +# define DECLARE_DEPRECATED(f) f; +# ifdef __GNUC__ +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif # endif #endif @@ -142,6 +152,18 @@ extern "C" { # define OPENSSL_API_COMPAT OPENSSL_MIN_API #endif +/* + * Do not deprecate things to be deprecated in version 1.2.0 before the + * OpenSSL version number matches. + */ +#if OPENSSL_VERSION_NUMBER < 0x10200000L +# define DEPRECATEDIN_1_2_0(f) f; +#elif OPENSSL_API_COMPAT < 0x10200000L +# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_2_0(f) +#endif + #if OPENSSL_API_COMPAT < 0x10100000L # define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) #else @@ -160,8 +182,6 @@ extern "C" { # define DEPRECATEDIN_0_9_8(f) #endif - - /* Generate 80386 code? */ #undef I386_ONLY diff --git a/libs/windows/include/openssl/opensslv.h b/libs/windows/include/openssl/opensslv.h index 0e2992eb..b4b255ac 100644 --- a/libs/windows/include/openssl/opensslv.h +++ b/libs/windows/include/openssl/opensslv.h @@ -39,12 +39,8 @@ extern "C" { * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for * major minor fix final patch/beta) */ -# define OPENSSL_VERSION_NUMBER 0x101000b0L -# ifdef OPENSSL_FIPS -# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.0k-fips-dev xx XXX xxxx" -# else -# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.0k-dev xx XXX xxxx" -# endif +# define OPENSSL_VERSION_NUMBER 0x10101030L +# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1c-dev xx XXX xxxx" /*- * The macros below are to be used for shared library (.so, .dll, ...) diff --git a/libs/windows/include/openssl/ossl_typ.h b/libs/windows/include/openssl/ossl_typ.h index 129a67f0..7993ca28 100644 --- a/libs/windows/include/openssl/ossl_typ.h +++ b/libs/windows/include/openssl/ossl_typ.h @@ -1,5 +1,5 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -114,6 +114,7 @@ typedef struct ec_key_st EC_KEY; typedef struct ec_key_method_st EC_KEY_METHOD; typedef struct rand_meth_st RAND_METHOD; +typedef struct rand_drbg_st RAND_DRBG; typedef struct ssl_dane_st SSL_DANE; typedef struct x509_st X509; @@ -131,6 +132,8 @@ typedef struct x509_lookup_st X509_LOOKUP; typedef struct x509_lookup_method_st X509_LOOKUP_METHOD; typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; +typedef struct x509_sig_info_st X509_SIG_INFO; + typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; typedef struct v3_ext_ctx X509V3_CTX; @@ -169,6 +172,9 @@ typedef struct ctlog_st CTLOG; typedef struct ctlog_store_st CTLOG_STORE; typedef struct ct_policy_eval_ctx_st CT_POLICY_EVAL_CTX; +typedef struct ossl_store_info_st OSSL_STORE_INFO; +typedef struct ossl_store_search_st OSSL_STORE_SEARCH; + #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \ defined(INTMAX_MAX) && defined(UINTMAX_MAX) typedef intmax_t ossl_intmax_t; diff --git a/libs/windows/include/openssl/pem.h b/libs/windows/include/openssl/pem.h index f7ce3c61..2ef5b5d0 100644 --- a/libs/windows/include/openssl/pem.h +++ b/libs/windows/include/openssl/pem.h @@ -12,10 +12,10 @@ # include # include -# include +# include # include # include -# include +# include #ifdef __cplusplus extern "C" { @@ -54,56 +54,6 @@ extern "C" { # define PEM_TYPE_MIC_CLEAR 30 # define PEM_TYPE_CLEAR 40 -typedef struct pem_recip_st { - char *name; - X509_NAME *dn; - int cipher; - int key_enc; - /* char iv[8]; unused and wrong size */ -} PEM_USER; - -typedef struct pem_ctx_st { - int type; /* what type of object */ - struct { - int version; - int mode; - } proc_type; - - char *domain; - - struct { - int cipher; - /*- - unused, and wrong size - unsigned char iv[8]; */ - } DEK_info; - - PEM_USER *originator; - - int num_recipient; - PEM_USER **recipient; - -/*- - XXX(ben): don#t think this is used! - STACK *x509_chain; / * certificate chain */ - EVP_MD *md; /* signature type */ - - int md_enc; /* is the md encrypted or not? */ - int md_len; /* length of md_data */ - char *md_data; /* message digest, could be pkey encrypted */ - - EVP_CIPHER *dec; /* date encryption cipher */ - int key_len; /* key length */ - unsigned char *key; /* key */ - /*- - unused, and wrong size - unsigned char iv[8]; */ - - int data_enc; /* is the data encrypted */ - int data_len; - unsigned char *data; -} PEM_CTX; - /* * These macros make the PEM_read/PEM_write functions easier to maintain and * write. Now they are all implemented with either: IMPLEMENT_PEM_rw(...) or @@ -286,6 +236,14 @@ int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len, int PEM_read_bio(BIO *bp, char **name, char **header, unsigned char **data, long *len); +# define PEM_FLAG_SECURE 0x1 +# define PEM_FLAG_EAY_COMPATIBLE 0x2 +# define PEM_FLAG_ONLY_B64 0x4 +int PEM_read_bio_ex(BIO *bp, char **name, char **header, + unsigned char **data, long *len, unsigned int flags); +int PEM_bytes_read_bio_secmem(unsigned char **pdata, long *plen, char **pnm, + const char *name, BIO *bp, pem_password_cb *cb, + void *u); int PEM_write_bio(BIO *bp, const char *name, const char *hdr, const unsigned char *data, long len); int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, @@ -414,88 +372,6 @@ int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, # endif # endif -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_PEM_strings(void); - -/* Error codes for the PEM functions. */ - -/* Function codes. */ -# define PEM_F_B2I_DSS 127 -# define PEM_F_B2I_PVK_BIO 128 -# define PEM_F_B2I_RSA 129 -# define PEM_F_CHECK_BITLEN_DSA 130 -# define PEM_F_CHECK_BITLEN_RSA 131 -# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120 -# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121 -# define PEM_F_DO_B2I 132 -# define PEM_F_DO_B2I_BIO 133 -# define PEM_F_DO_BLOB_HEADER 134 -# define PEM_F_DO_PK8PKEY 126 -# define PEM_F_DO_PK8PKEY_FP 125 -# define PEM_F_DO_PVK_BODY 135 -# define PEM_F_DO_PVK_HEADER 136 -# define PEM_F_I2B_PVK 137 -# define PEM_F_I2B_PVK_BIO 138 -# define PEM_F_LOAD_IV 101 -# define PEM_F_PEM_ASN1_READ 102 -# define PEM_F_PEM_ASN1_READ_BIO 103 -# define PEM_F_PEM_ASN1_WRITE 104 -# define PEM_F_PEM_ASN1_WRITE_BIO 105 -# define PEM_F_PEM_DEF_CALLBACK 100 -# define PEM_F_PEM_DO_HEADER 106 -# define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 -# define PEM_F_PEM_READ 108 -# define PEM_F_PEM_READ_BIO 109 -# define PEM_F_PEM_READ_BIO_DHPARAMS 141 -# define PEM_F_PEM_READ_BIO_PARAMETERS 140 -# define PEM_F_PEM_READ_BIO_PRIVATEKEY 123 -# define PEM_F_PEM_READ_DHPARAMS 142 -# define PEM_F_PEM_READ_PRIVATEKEY 124 -# define PEM_F_PEM_SIGNFINAL 112 -# define PEM_F_PEM_WRITE 113 -# define PEM_F_PEM_WRITE_BIO 114 -# define PEM_F_PEM_WRITE_PRIVATEKEY 139 -# define PEM_F_PEM_X509_INFO_READ 115 -# define PEM_F_PEM_X509_INFO_READ_BIO 116 -# define PEM_F_PEM_X509_INFO_WRITE_BIO 117 - -/* Reason codes. */ -# define PEM_R_BAD_BASE64_DECODE 100 -# define PEM_R_BAD_DECRYPT 101 -# define PEM_R_BAD_END_LINE 102 -# define PEM_R_BAD_IV_CHARS 103 -# define PEM_R_BAD_MAGIC_NUMBER 116 -# define PEM_R_BAD_PASSWORD_READ 104 -# define PEM_R_BAD_VERSION_NUMBER 117 -# define PEM_R_BIO_WRITE_FAILURE 118 -# define PEM_R_CIPHER_IS_NULL 127 -# define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 -# define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 -# define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 -# define PEM_R_HEADER_TOO_LONG 128 -# define PEM_R_INCONSISTENT_HEADER 121 -# define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 -# define PEM_R_KEYBLOB_TOO_SHORT 123 -# define PEM_R_MISSING_DEK_IV 129 -# define PEM_R_NOT_DEK_INFO 105 -# define PEM_R_NOT_ENCRYPTED 106 -# define PEM_R_NOT_PROC_TYPE 107 -# define PEM_R_NO_START_LINE 108 -# define PEM_R_PROBLEMS_GETTING_PASSWORD 109 -# define PEM_R_PVK_DATA_TOO_SHORT 124 -# define PEM_R_PVK_TOO_SHORT 125 -# define PEM_R_READ_KEY 111 -# define PEM_R_SHORT_HEADER 112 -# define PEM_R_UNEXPECTED_DEK_IV 130 -# define PEM_R_UNSUPPORTED_CIPHER 113 -# define PEM_R_UNSUPPORTED_ENCRYPTION 114 -# define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 - # ifdef __cplusplus } # endif diff --git a/libs/windows/include/openssl/pem2.h b/libs/windows/include/openssl/pem2.h index cfe73f13..038fe790 100644 --- a/libs/windows/include/openssl/pem2.h +++ b/libs/windows/include/openssl/pem2.h @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -7,14 +7,7 @@ * https://www.openssl.org/source/license.html */ -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef HEADER_PEM_H -int ERR_load_PEM_strings(void); -#endif - -#ifdef __cplusplus -} +#ifndef HEADER_PEM2_H +# define HEADER_PEM2_H +# include #endif diff --git a/libs/windows/include/openssl/pemerr.h b/libs/windows/include/openssl/pemerr.h new file mode 100644 index 00000000..cd61b823 --- /dev/null +++ b/libs/windows/include/openssl/pemerr.h @@ -0,0 +1,99 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PEMERR_H +# define HEADER_PEMERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_PEM_strings(void); + +/* + * PEM function codes. + */ +# define PEM_F_B2I_DSS 127 +# define PEM_F_B2I_PVK_BIO 128 +# define PEM_F_B2I_RSA 129 +# define PEM_F_CHECK_BITLEN_DSA 130 +# define PEM_F_CHECK_BITLEN_RSA 131 +# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120 +# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121 +# define PEM_F_DO_B2I 132 +# define PEM_F_DO_B2I_BIO 133 +# define PEM_F_DO_BLOB_HEADER 134 +# define PEM_F_DO_I2B 146 +# define PEM_F_DO_PK8PKEY 126 +# define PEM_F_DO_PK8PKEY_FP 125 +# define PEM_F_DO_PVK_BODY 135 +# define PEM_F_DO_PVK_HEADER 136 +# define PEM_F_GET_HEADER_AND_DATA 143 +# define PEM_F_GET_NAME 144 +# define PEM_F_I2B_PVK 137 +# define PEM_F_I2B_PVK_BIO 138 +# define PEM_F_LOAD_IV 101 +# define PEM_F_PEM_ASN1_READ 102 +# define PEM_F_PEM_ASN1_READ_BIO 103 +# define PEM_F_PEM_ASN1_WRITE 104 +# define PEM_F_PEM_ASN1_WRITE_BIO 105 +# define PEM_F_PEM_DEF_CALLBACK 100 +# define PEM_F_PEM_DO_HEADER 106 +# define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 +# define PEM_F_PEM_READ 108 +# define PEM_F_PEM_READ_BIO 109 +# define PEM_F_PEM_READ_BIO_DHPARAMS 141 +# define PEM_F_PEM_READ_BIO_EX 145 +# define PEM_F_PEM_READ_BIO_PARAMETERS 140 +# define PEM_F_PEM_READ_BIO_PRIVATEKEY 123 +# define PEM_F_PEM_READ_DHPARAMS 142 +# define PEM_F_PEM_READ_PRIVATEKEY 124 +# define PEM_F_PEM_SIGNFINAL 112 +# define PEM_F_PEM_WRITE 113 +# define PEM_F_PEM_WRITE_BIO 114 +# define PEM_F_PEM_WRITE_PRIVATEKEY 139 +# define PEM_F_PEM_X509_INFO_READ 115 +# define PEM_F_PEM_X509_INFO_READ_BIO 116 +# define PEM_F_PEM_X509_INFO_WRITE_BIO 117 + +/* + * PEM reason codes. + */ +# define PEM_R_BAD_BASE64_DECODE 100 +# define PEM_R_BAD_DECRYPT 101 +# define PEM_R_BAD_END_LINE 102 +# define PEM_R_BAD_IV_CHARS 103 +# define PEM_R_BAD_MAGIC_NUMBER 116 +# define PEM_R_BAD_PASSWORD_READ 104 +# define PEM_R_BAD_VERSION_NUMBER 117 +# define PEM_R_BIO_WRITE_FAILURE 118 +# define PEM_R_CIPHER_IS_NULL 127 +# define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 +# define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 +# define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 +# define PEM_R_HEADER_TOO_LONG 128 +# define PEM_R_INCONSISTENT_HEADER 121 +# define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 +# define PEM_R_KEYBLOB_TOO_SHORT 123 +# define PEM_R_MISSING_DEK_IV 129 +# define PEM_R_NOT_DEK_INFO 105 +# define PEM_R_NOT_ENCRYPTED 106 +# define PEM_R_NOT_PROC_TYPE 107 +# define PEM_R_NO_START_LINE 108 +# define PEM_R_PROBLEMS_GETTING_PASSWORD 109 +# define PEM_R_PVK_DATA_TOO_SHORT 124 +# define PEM_R_PVK_TOO_SHORT 125 +# define PEM_R_READ_KEY 111 +# define PEM_R_SHORT_HEADER 112 +# define PEM_R_UNEXPECTED_DEK_IV 130 +# define PEM_R_UNSUPPORTED_CIPHER 113 +# define PEM_R_UNSUPPORTED_ENCRYPTION 114 +# define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 + +#endif diff --git a/libs/windows/include/openssl/pkcs12.h b/libs/windows/include/openssl/pkcs12.h index deaded9d..3f43dad6 100644 --- a/libs/windows/include/openssl/pkcs12.h +++ b/libs/windows/include/openssl/pkcs12.h @@ -12,6 +12,7 @@ # include # include +# include #ifdef __cplusplus extern "C" { @@ -216,66 +217,6 @@ PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); # endif int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_PKCS12_strings(void); - -/* Error codes for the PKCS12 functions. */ - -/* Function codes. */ -# define PKCS12_F_PKCS12_CREATE 105 -# define PKCS12_F_PKCS12_GEN_MAC 107 -# define PKCS12_F_PKCS12_INIT 109 -# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 106 -# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 108 -# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 117 -# define PKCS12_F_PKCS12_KEY_GEN_ASC 110 -# define PKCS12_F_PKCS12_KEY_GEN_UNI 111 -# define PKCS12_F_PKCS12_KEY_GEN_UTF8 116 -# define PKCS12_F_PKCS12_NEWPASS 128 -# define PKCS12_F_PKCS12_PACK_P7DATA 114 -# define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 -# define PKCS12_F_PKCS12_PARSE 118 -# define PKCS12_F_PKCS12_PBE_CRYPT 119 -# define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF 112 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 113 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 133 -# define PKCS12_F_PKCS12_SETUP_MAC 122 -# define PKCS12_F_PKCS12_SET_MAC 123 -# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 130 -# define PKCS12_F_PKCS12_UNPACK_P7DATA 131 -# define PKCS12_F_PKCS12_VERIFY_MAC 126 -# define PKCS12_F_PKCS8_ENCRYPT 125 -# define PKCS12_F_PKCS8_SET0_PBE 132 - -/* Reason codes. */ -# define PKCS12_R_CANT_PACK_STRUCTURE 100 -# define PKCS12_R_CONTENT_TYPE_NOT_DATA 121 -# define PKCS12_R_DECODE_ERROR 101 -# define PKCS12_R_ENCODE_ERROR 102 -# define PKCS12_R_ENCRYPT_ERROR 103 -# define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE 120 -# define PKCS12_R_INVALID_NULL_ARGUMENT 104 -# define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 -# define PKCS12_R_IV_GEN_ERROR 106 -# define PKCS12_R_KEY_GEN_ERROR 107 -# define PKCS12_R_MAC_ABSENT 108 -# define PKCS12_R_MAC_GENERATION_ERROR 109 -# define PKCS12_R_MAC_SETUP_ERROR 110 -# define PKCS12_R_MAC_STRING_SET_ERROR 111 -# define PKCS12_R_MAC_VERIFY_FAILURE 113 -# define PKCS12_R_PARSE_ERROR 114 -# define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 -# define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 -# define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 -# define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 -# define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 - # ifdef __cplusplus } # endif diff --git a/libs/windows/include/openssl/pkcs12err.h b/libs/windows/include/openssl/pkcs12err.h new file mode 100644 index 00000000..c7184ffe --- /dev/null +++ b/libs/windows/include/openssl/pkcs12err.h @@ -0,0 +1,77 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PKCS12ERR_H +# define HEADER_PKCS12ERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_PKCS12_strings(void); + +/* + * PKCS12 function codes. + */ +# define PKCS12_F_OPENSSL_ASC2UNI 121 +# define PKCS12_F_OPENSSL_UNI2ASC 124 +# define PKCS12_F_OPENSSL_UNI2UTF8 127 +# define PKCS12_F_OPENSSL_UTF82UNI 129 +# define PKCS12_F_PKCS12_CREATE 105 +# define PKCS12_F_PKCS12_GEN_MAC 107 +# define PKCS12_F_PKCS12_INIT 109 +# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 106 +# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 108 +# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 117 +# define PKCS12_F_PKCS12_KEY_GEN_ASC 110 +# define PKCS12_F_PKCS12_KEY_GEN_UNI 111 +# define PKCS12_F_PKCS12_KEY_GEN_UTF8 116 +# define PKCS12_F_PKCS12_NEWPASS 128 +# define PKCS12_F_PKCS12_PACK_P7DATA 114 +# define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 +# define PKCS12_F_PKCS12_PARSE 118 +# define PKCS12_F_PKCS12_PBE_CRYPT 119 +# define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF 112 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 113 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 133 +# define PKCS12_F_PKCS12_SETUP_MAC 122 +# define PKCS12_F_PKCS12_SET_MAC 123 +# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 130 +# define PKCS12_F_PKCS12_UNPACK_P7DATA 131 +# define PKCS12_F_PKCS12_VERIFY_MAC 126 +# define PKCS12_F_PKCS8_ENCRYPT 125 +# define PKCS12_F_PKCS8_SET0_PBE 132 + +/* + * PKCS12 reason codes. + */ +# define PKCS12_R_CANT_PACK_STRUCTURE 100 +# define PKCS12_R_CONTENT_TYPE_NOT_DATA 121 +# define PKCS12_R_DECODE_ERROR 101 +# define PKCS12_R_ENCODE_ERROR 102 +# define PKCS12_R_ENCRYPT_ERROR 103 +# define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE 120 +# define PKCS12_R_INVALID_NULL_ARGUMENT 104 +# define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 +# define PKCS12_R_IV_GEN_ERROR 106 +# define PKCS12_R_KEY_GEN_ERROR 107 +# define PKCS12_R_MAC_ABSENT 108 +# define PKCS12_R_MAC_GENERATION_ERROR 109 +# define PKCS12_R_MAC_SETUP_ERROR 110 +# define PKCS12_R_MAC_STRING_SET_ERROR 111 +# define PKCS12_R_MAC_VERIFY_FAILURE 113 +# define PKCS12_R_PARSE_ERROR 114 +# define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 +# define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 +# define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 +# define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 +# define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 + +#endif diff --git a/libs/windows/include/openssl/pkcs7.h b/libs/windows/include/openssl/pkcs7.h index 691f7220..9b66e002 100644 --- a/libs/windows/include/openssl/pkcs7.h +++ b/libs/windows/include/openssl/pkcs7.h @@ -16,6 +16,7 @@ # include # include +# include #ifdef __cplusplus extern "C" { @@ -312,92 +313,6 @@ PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_PKCS7_strings(void); - -/* Error codes for the PKCS7 functions. */ - -/* Function codes. */ -# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 -# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 135 -# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 118 -# define PKCS7_F_PKCS7_ADD_CERTIFICATE 100 -# define PKCS7_F_PKCS7_ADD_CRL 101 -# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 102 -# define PKCS7_F_PKCS7_ADD_SIGNATURE 131 -# define PKCS7_F_PKCS7_ADD_SIGNER 103 -# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 125 -# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 138 -# define PKCS7_F_PKCS7_CTRL 104 -# define PKCS7_F_PKCS7_DATADECODE 112 -# define PKCS7_F_PKCS7_DATAFINAL 128 -# define PKCS7_F_PKCS7_DATAINIT 105 -# define PKCS7_F_PKCS7_DATAVERIFY 107 -# define PKCS7_F_PKCS7_DECRYPT 114 -# define PKCS7_F_PKCS7_DECRYPT_RINFO 133 -# define PKCS7_F_PKCS7_ENCODE_RINFO 132 -# define PKCS7_F_PKCS7_ENCRYPT 115 -# define PKCS7_F_PKCS7_FINAL 134 -# define PKCS7_F_PKCS7_FIND_DIGEST 127 -# define PKCS7_F_PKCS7_GET0_SIGNERS 124 -# define PKCS7_F_PKCS7_RECIP_INFO_SET 130 -# define PKCS7_F_PKCS7_SET_CIPHER 108 -# define PKCS7_F_PKCS7_SET_CONTENT 109 -# define PKCS7_F_PKCS7_SET_DIGEST 126 -# define PKCS7_F_PKCS7_SET_TYPE 110 -# define PKCS7_F_PKCS7_SIGN 116 -# define PKCS7_F_PKCS7_SIGNATUREVERIFY 113 -# define PKCS7_F_PKCS7_SIGNER_INFO_SET 129 -# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 139 -# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137 -# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119 -# define PKCS7_F_PKCS7_VERIFY 117 - -/* Reason codes. */ -# define PKCS7_R_CERTIFICATE_VERIFY_ERROR 117 -# define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 144 -# define PKCS7_R_CIPHER_NOT_INITIALIZED 116 -# define PKCS7_R_CONTENT_AND_DATA_PRESENT 118 -# define PKCS7_R_CTRL_ERROR 152 -# define PKCS7_R_DECRYPT_ERROR 119 -# define PKCS7_R_DIGEST_FAILURE 101 -# define PKCS7_R_ENCRYPTION_CTRL_FAILURE 149 -# define PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 150 -# define PKCS7_R_ERROR_ADDING_RECIPIENT 120 -# define PKCS7_R_ERROR_SETTING_CIPHER 121 -# define PKCS7_R_INVALID_NULL_POINTER 143 -# define PKCS7_R_INVALID_SIGNED_DATA_TYPE 155 -# define PKCS7_R_NO_CONTENT 122 -# define PKCS7_R_NO_DEFAULT_DIGEST 151 -# define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 154 -# define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 115 -# define PKCS7_R_NO_SIGNATURES_ON_DATA 123 -# define PKCS7_R_NO_SIGNERS 142 -# define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE 104 -# define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR 124 -# define PKCS7_R_PKCS7_ADD_SIGNER_ERROR 153 -# define PKCS7_R_PKCS7_DATASIGN 145 -# define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 127 -# define PKCS7_R_SIGNATURE_FAILURE 105 -# define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND 128 -# define PKCS7_R_SIGNING_CTRL_FAILURE 147 -# define PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 148 -# define PKCS7_R_SMIME_TEXT_ERROR 129 -# define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE 106 -# define PKCS7_R_UNABLE_TO_FIND_MEM_BIO 107 -# define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST 108 -# define PKCS7_R_UNKNOWN_DIGEST_TYPE 109 -# define PKCS7_R_UNKNOWN_OPERATION 110 -# define PKCS7_R_UNSUPPORTED_CIPHER_TYPE 111 -# define PKCS7_R_UNSUPPORTED_CONTENT_TYPE 112 -# define PKCS7_R_WRONG_CONTENT_TYPE 113 -# define PKCS7_R_WRONG_PKCS7_TYPE 114 - # ifdef __cplusplus } # endif diff --git a/libs/windows/include/openssl/pkcs7err.h b/libs/windows/include/openssl/pkcs7err.h new file mode 100644 index 00000000..0ba418d7 --- /dev/null +++ b/libs/windows/include/openssl/pkcs7err.h @@ -0,0 +1,99 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PKCS7ERR_H +# define HEADER_PKCS7ERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_PKCS7_strings(void); + +/* + * PKCS7 function codes. + */ +# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 +# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 135 +# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 118 +# define PKCS7_F_PKCS7_ADD_CERTIFICATE 100 +# define PKCS7_F_PKCS7_ADD_CRL 101 +# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 102 +# define PKCS7_F_PKCS7_ADD_SIGNATURE 131 +# define PKCS7_F_PKCS7_ADD_SIGNER 103 +# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 125 +# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 138 +# define PKCS7_F_PKCS7_CTRL 104 +# define PKCS7_F_PKCS7_DATADECODE 112 +# define PKCS7_F_PKCS7_DATAFINAL 128 +# define PKCS7_F_PKCS7_DATAINIT 105 +# define PKCS7_F_PKCS7_DATAVERIFY 107 +# define PKCS7_F_PKCS7_DECRYPT 114 +# define PKCS7_F_PKCS7_DECRYPT_RINFO 133 +# define PKCS7_F_PKCS7_ENCODE_RINFO 132 +# define PKCS7_F_PKCS7_ENCRYPT 115 +# define PKCS7_F_PKCS7_FINAL 134 +# define PKCS7_F_PKCS7_FIND_DIGEST 127 +# define PKCS7_F_PKCS7_GET0_SIGNERS 124 +# define PKCS7_F_PKCS7_RECIP_INFO_SET 130 +# define PKCS7_F_PKCS7_SET_CIPHER 108 +# define PKCS7_F_PKCS7_SET_CONTENT 109 +# define PKCS7_F_PKCS7_SET_DIGEST 126 +# define PKCS7_F_PKCS7_SET_TYPE 110 +# define PKCS7_F_PKCS7_SIGN 116 +# define PKCS7_F_PKCS7_SIGNATUREVERIFY 113 +# define PKCS7_F_PKCS7_SIGNER_INFO_SET 129 +# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 139 +# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137 +# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119 +# define PKCS7_F_PKCS7_VERIFY 117 + +/* + * PKCS7 reason codes. + */ +# define PKCS7_R_CERTIFICATE_VERIFY_ERROR 117 +# define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 144 +# define PKCS7_R_CIPHER_NOT_INITIALIZED 116 +# define PKCS7_R_CONTENT_AND_DATA_PRESENT 118 +# define PKCS7_R_CTRL_ERROR 152 +# define PKCS7_R_DECRYPT_ERROR 119 +# define PKCS7_R_DIGEST_FAILURE 101 +# define PKCS7_R_ENCRYPTION_CTRL_FAILURE 149 +# define PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 150 +# define PKCS7_R_ERROR_ADDING_RECIPIENT 120 +# define PKCS7_R_ERROR_SETTING_CIPHER 121 +# define PKCS7_R_INVALID_NULL_POINTER 143 +# define PKCS7_R_INVALID_SIGNED_DATA_TYPE 155 +# define PKCS7_R_NO_CONTENT 122 +# define PKCS7_R_NO_DEFAULT_DIGEST 151 +# define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 154 +# define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 115 +# define PKCS7_R_NO_SIGNATURES_ON_DATA 123 +# define PKCS7_R_NO_SIGNERS 142 +# define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE 104 +# define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR 124 +# define PKCS7_R_PKCS7_ADD_SIGNER_ERROR 153 +# define PKCS7_R_PKCS7_DATASIGN 145 +# define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 127 +# define PKCS7_R_SIGNATURE_FAILURE 105 +# define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND 128 +# define PKCS7_R_SIGNING_CTRL_FAILURE 147 +# define PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 148 +# define PKCS7_R_SMIME_TEXT_ERROR 129 +# define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE 106 +# define PKCS7_R_UNABLE_TO_FIND_MEM_BIO 107 +# define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST 108 +# define PKCS7_R_UNKNOWN_DIGEST_TYPE 109 +# define PKCS7_R_UNKNOWN_OPERATION 110 +# define PKCS7_R_UNSUPPORTED_CIPHER_TYPE 111 +# define PKCS7_R_UNSUPPORTED_CONTENT_TYPE 112 +# define PKCS7_R_WRONG_CONTENT_TYPE 113 +# define PKCS7_R_WRONG_PKCS7_TYPE 114 + +#endif diff --git a/libs/windows/include/openssl/rand.h b/libs/windows/include/openssl/rand.h index d521ae19..38a2a271 100644 --- a/libs/windows/include/openssl/rand.h +++ b/libs/windows/include/openssl/rand.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -13,77 +13,65 @@ # include # include # include +# include #ifdef __cplusplus extern "C" { #endif -/* Already defined in ossl_typ.h */ -/* typedef struct rand_meth_st RAND_METHOD; */ - struct rand_meth_st { int (*seed) (const void *buf, int num); int (*bytes) (unsigned char *buf, int num); void (*cleanup) (void); - int (*add) (const void *buf, int num, double entropy); + int (*add) (const void *buf, int num, double randomness); int (*pseudorand) (unsigned char *buf, int num); int (*status) (void); }; -# ifdef BN_DEBUG -extern int rand_predictable; -# endif - int RAND_set_rand_method(const RAND_METHOD *meth); const RAND_METHOD *RAND_get_rand_method(void); # ifndef OPENSSL_NO_ENGINE int RAND_set_rand_engine(ENGINE *engine); # endif + RAND_METHOD *RAND_OpenSSL(void); -#if OPENSSL_API_COMPAT < 0x10100000L -# define RAND_cleanup() while(0) continue -#endif + +# if OPENSSL_API_COMPAT < 0x10100000L +# define RAND_cleanup() while(0) continue +# endif int RAND_bytes(unsigned char *buf, int num); +int RAND_priv_bytes(unsigned char *buf, int num); DEPRECATEDIN_1_1_0(int RAND_pseudo_bytes(unsigned char *buf, int num)) + void RAND_seed(const void *buf, int num); -#if defined(__ANDROID__) && defined(__NDK_FPABI__) +void RAND_keep_random_devices_open(int keep); + +# if defined(__ANDROID__) && defined(__NDK_FPABI__) __NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ -#endif -void RAND_add(const void *buf, int num, double entropy); +# endif +void RAND_add(const void *buf, int num, double randomness); int RAND_load_file(const char *file, long max_bytes); int RAND_write_file(const char *file); const char *RAND_file_name(char *file, size_t num); int RAND_status(void); + # ifndef OPENSSL_NO_EGD int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes); int RAND_egd(const char *path); int RAND_egd_bytes(const char *path, int bytes); # endif + int RAND_poll(void); -#if defined(_WIN32) && (defined(BASETYPES) || defined(_WINDEF_H)) +# if defined(_WIN32) && (defined(BASETYPES) || defined(_WINDEF_H)) /* application has to include in order to use these */ DEPRECATEDIN_1_1_0(void RAND_screen(void)) DEPRECATEDIN_1_1_0(int RAND_event(UINT, WPARAM, LPARAM)) -#endif - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_RAND_strings(void); - -/* Error codes for the RAND functions. */ - -/* Function codes. */ -# define RAND_F_RAND_BYTES 100 - -/* Reason codes. */ -# define RAND_R_PRNG_NOT_SEEDED 100 - -# ifdef __cplusplus -} # endif + + +#ifdef __cplusplus +} +#endif + #endif diff --git a/libs/windows/include/openssl/rand_drbg.h b/libs/windows/include/openssl/rand_drbg.h new file mode 100644 index 00000000..45b731b7 --- /dev/null +++ b/libs/windows/include/openssl/rand_drbg.h @@ -0,0 +1,130 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DRBG_RAND_H +# define HEADER_DRBG_RAND_H + +# include +# include +# include + +/* + * RAND_DRBG flags + * + * Note: if new flags are added, the constant `rand_drbg_used_flags` + * in drbg_lib.c needs to be updated accordingly. + */ + +/* In CTR mode, disable derivation function ctr_df */ +# define RAND_DRBG_FLAG_CTR_NO_DF 0x1 + + +# if OPENSSL_API_COMPAT < 0x10200000L +/* This #define was replaced by an internal constant and should not be used. */ +# define RAND_DRBG_USED_FLAGS (RAND_DRBG_FLAG_CTR_NO_DF) +# endif + +/* + * Default security strength (in the sense of [NIST SP 800-90Ar1]) + * + * NIST SP 800-90Ar1 supports the strength of the DRBG being smaller than that + * of the cipher by collecting less entropy. The current DRBG implementation + * does not take RAND_DRBG_STRENGTH into account and sets the strength of the + * DRBG to that of the cipher. + * + * RAND_DRBG_STRENGTH is currently only used for the legacy RAND + * implementation. + * + * Currently supported ciphers are: NID_aes_128_ctr, NID_aes_192_ctr and + * NID_aes_256_ctr + */ +# define RAND_DRBG_STRENGTH 256 +/* Default drbg type */ +# define RAND_DRBG_TYPE NID_aes_256_ctr +/* Default drbg flags */ +# define RAND_DRBG_FLAGS 0 + + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * Object lifetime functions. + */ +RAND_DRBG *RAND_DRBG_new(int type, unsigned int flags, RAND_DRBG *parent); +RAND_DRBG *RAND_DRBG_secure_new(int type, unsigned int flags, RAND_DRBG *parent); +int RAND_DRBG_set(RAND_DRBG *drbg, int type, unsigned int flags); +int RAND_DRBG_set_defaults(int type, unsigned int flags); +int RAND_DRBG_instantiate(RAND_DRBG *drbg, + const unsigned char *pers, size_t perslen); +int RAND_DRBG_uninstantiate(RAND_DRBG *drbg); +void RAND_DRBG_free(RAND_DRBG *drbg); + +/* + * Object "use" functions. + */ +int RAND_DRBG_reseed(RAND_DRBG *drbg, + const unsigned char *adin, size_t adinlen, + int prediction_resistance); +int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen, + int prediction_resistance, + const unsigned char *adin, size_t adinlen); +int RAND_DRBG_bytes(RAND_DRBG *drbg, unsigned char *out, size_t outlen); + +int RAND_DRBG_set_reseed_interval(RAND_DRBG *drbg, unsigned int interval); +int RAND_DRBG_set_reseed_time_interval(RAND_DRBG *drbg, time_t interval); + +int RAND_DRBG_set_reseed_defaults( + unsigned int master_reseed_interval, + unsigned int slave_reseed_interval, + time_t master_reseed_time_interval, + time_t slave_reseed_time_interval + ); + +RAND_DRBG *RAND_DRBG_get0_master(void); +RAND_DRBG *RAND_DRBG_get0_public(void); +RAND_DRBG *RAND_DRBG_get0_private(void); + +/* + * EXDATA + */ +# define RAND_DRBG_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DRBG, l, p, newf, dupf, freef) +int RAND_DRBG_set_ex_data(RAND_DRBG *drbg, int idx, void *arg); +void *RAND_DRBG_get_ex_data(const RAND_DRBG *drbg, int idx); + +/* + * Callback function typedefs + */ +typedef size_t (*RAND_DRBG_get_entropy_fn)(RAND_DRBG *drbg, + unsigned char **pout, + int entropy, size_t min_len, + size_t max_len, + int prediction_resistance); +typedef void (*RAND_DRBG_cleanup_entropy_fn)(RAND_DRBG *ctx, + unsigned char *out, size_t outlen); +typedef size_t (*RAND_DRBG_get_nonce_fn)(RAND_DRBG *drbg, unsigned char **pout, + int entropy, size_t min_len, + size_t max_len); +typedef void (*RAND_DRBG_cleanup_nonce_fn)(RAND_DRBG *drbg, + unsigned char *out, size_t outlen); + +int RAND_DRBG_set_callbacks(RAND_DRBG *drbg, + RAND_DRBG_get_entropy_fn get_entropy, + RAND_DRBG_cleanup_entropy_fn cleanup_entropy, + RAND_DRBG_get_nonce_fn get_nonce, + RAND_DRBG_cleanup_nonce_fn cleanup_nonce); + + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/libs/windows/include/openssl/randerr.h b/libs/windows/include/openssl/randerr.h new file mode 100644 index 00000000..599a2a18 --- /dev/null +++ b/libs/windows/include/openssl/randerr.h @@ -0,0 +1,89 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RANDERR_H +# define HEADER_RANDERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_RAND_strings(void); + +/* + * RAND function codes. + */ +# define RAND_F_DRBG_BYTES 101 +# define RAND_F_DRBG_GET_ENTROPY 105 +# define RAND_F_DRBG_SETUP 117 +# define RAND_F_GET_ENTROPY 106 +# define RAND_F_RAND_BYTES 100 +# define RAND_F_RAND_DRBG_ENABLE_LOCKING 119 +# define RAND_F_RAND_DRBG_GENERATE 107 +# define RAND_F_RAND_DRBG_GET_ENTROPY 120 +# define RAND_F_RAND_DRBG_GET_NONCE 123 +# define RAND_F_RAND_DRBG_INSTANTIATE 108 +# define RAND_F_RAND_DRBG_NEW 109 +# define RAND_F_RAND_DRBG_RESEED 110 +# define RAND_F_RAND_DRBG_RESTART 102 +# define RAND_F_RAND_DRBG_SET 104 +# define RAND_F_RAND_DRBG_SET_DEFAULTS 121 +# define RAND_F_RAND_DRBG_UNINSTANTIATE 118 +# define RAND_F_RAND_LOAD_FILE 111 +# define RAND_F_RAND_POOL_ACQUIRE_ENTROPY 122 +# define RAND_F_RAND_POOL_ADD 103 +# define RAND_F_RAND_POOL_ADD_BEGIN 113 +# define RAND_F_RAND_POOL_ADD_END 114 +# define RAND_F_RAND_POOL_ATTACH 124 +# define RAND_F_RAND_POOL_BYTES_NEEDED 115 +# define RAND_F_RAND_POOL_NEW 116 +# define RAND_F_RAND_WRITE_FILE 112 + +/* + * RAND reason codes. + */ +# define RAND_R_ADDITIONAL_INPUT_TOO_LONG 102 +# define RAND_R_ALREADY_INSTANTIATED 103 +# define RAND_R_ARGUMENT_OUT_OF_RANGE 105 +# define RAND_R_CANNOT_OPEN_FILE 121 +# define RAND_R_DRBG_ALREADY_INITIALIZED 129 +# define RAND_R_DRBG_NOT_INITIALISED 104 +# define RAND_R_ENTROPY_INPUT_TOO_LONG 106 +# define RAND_R_ENTROPY_OUT_OF_RANGE 124 +# define RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED 127 +# define RAND_R_ERROR_INITIALISING_DRBG 107 +# define RAND_R_ERROR_INSTANTIATING_DRBG 108 +# define RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT 109 +# define RAND_R_ERROR_RETRIEVING_ENTROPY 110 +# define RAND_R_ERROR_RETRIEVING_NONCE 111 +# define RAND_R_FAILED_TO_CREATE_LOCK 126 +# define RAND_R_FUNC_NOT_IMPLEMENTED 101 +# define RAND_R_FWRITE_ERROR 123 +# define RAND_R_GENERATE_ERROR 112 +# define RAND_R_INTERNAL_ERROR 113 +# define RAND_R_IN_ERROR_STATE 114 +# define RAND_R_NOT_A_REGULAR_FILE 122 +# define RAND_R_NOT_INSTANTIATED 115 +# define RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED 128 +# define RAND_R_PARENT_LOCKING_NOT_ENABLED 130 +# define RAND_R_PARENT_STRENGTH_TOO_WEAK 131 +# define RAND_R_PERSONALISATION_STRING_TOO_LONG 116 +# define RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED 133 +# define RAND_R_PRNG_NOT_SEEDED 100 +# define RAND_R_RANDOM_POOL_OVERFLOW 125 +# define RAND_R_RANDOM_POOL_UNDERFLOW 134 +# define RAND_R_REQUEST_TOO_LARGE_FOR_DRBG 117 +# define RAND_R_RESEED_ERROR 118 +# define RAND_R_SELFTEST_FAILURE 119 +# define RAND_R_TOO_LITTLE_NONCE_REQUESTED 135 +# define RAND_R_TOO_MUCH_NONCE_REQUESTED 136 +# define RAND_R_UNSUPPORTED_DRBG_FLAGS 132 +# define RAND_R_UNSUPPORTED_DRBG_TYPE 120 + +#endif diff --git a/libs/windows/include/openssl/rsa.h b/libs/windows/include/openssl/rsa.h index 9c28329f..cdce1264 100644 --- a/libs/windows/include/openssl/rsa.h +++ b/libs/windows/include/openssl/rsa.h @@ -20,6 +20,7 @@ # if OPENSSL_API_COMPAT < 0x10100000L # include # endif +# include # ifdef __cplusplus extern "C" { # endif @@ -44,6 +45,12 @@ extern "C" { # define RSA_3 0x3L # define RSA_F4 0x10001L +/* based on RFC 8017 appendix A.1.2 */ +# define RSA_ASN1_VERSION_DEFAULT 0 +# define RSA_ASN1_VERSION_MULTI 1 + +# define RSA_DEFAULT_PRIME_NUM 2 + # define RSA_METHOD_FLAG_NO_CHECK 0x0001/* don't check pub/private * match */ @@ -86,58 +93,75 @@ extern "C" { # endif # define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, EVP_PKEY_CTRL_RSA_PADDING, \ - pad, NULL) + RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_RSA_PADDING, pad, NULL) # define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, \ - EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad) + RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad) # define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ - (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_RSA_PSS_SALTLEN, \ - len, NULL) + RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ + EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) +/* Salt length matches digest */ +# define RSA_PSS_SALTLEN_DIGEST -1 +/* Verify only: auto detect salt length */ +# define RSA_PSS_SALTLEN_AUTO -2 +/* Set salt length to maximum possible */ +# define RSA_PSS_SALTLEN_MAX -3 +/* Old compatible max salt length for sign only */ +# define RSA_PSS_SALTLEN_MAX_SIGN -2 + +# define EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) # define EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ - (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, \ - 0, plen) + RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ + EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, 0, plen) # define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL) + RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL) # define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp) + RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp) -# define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ - EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)md) +# define EVP_PKEY_CTX_set_rsa_keygen_primes(ctx, primes) \ + RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES, primes, NULL) -# define EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)md) +# define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \ + RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)(md)) # define EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ - EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)pmd) + RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)(pmd)) # define EVP_PKEY_CTX_get_rsa_oaep_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)pmd) + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)(pmd)) # define EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, l, llen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)l) + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)(l)) -# define EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)l) +# define EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)(l)) + +# define EVP_PKEY_CTX_set_rsa_pss_keygen_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, \ + EVP_PKEY_OP_KEYGEN, EVP_PKEY_CTRL_MD, \ + 0, (void *)(md)) # define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) # define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) @@ -156,6 +180,8 @@ extern "C" { # define EVP_PKEY_CTRL_GET_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 11) # define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12) +# define EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES (EVP_PKEY_ALG_CTRL + 13) + # define RSA_PKCS1_PADDING 1 # define RSA_SSLV23_PADDING 2 # define RSA_NO_PADDING 3 @@ -178,15 +204,30 @@ int RSA_security_bits(const RSA *rsa); int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); int RSA_set0_crt_params(RSA *r,BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp); +int RSA_set0_multi_prime_params(RSA *r, BIGNUM *primes[], BIGNUM *exps[], + BIGNUM *coeffs[], int pnum); void RSA_get0_key(const RSA *r, const BIGNUM **n, const BIGNUM **e, const BIGNUM **d); void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q); +int RSA_get_multi_prime_extra_count(const RSA *r); +int RSA_get0_multi_prime_factors(const RSA *r, const BIGNUM *primes[]); void RSA_get0_crt_params(const RSA *r, const BIGNUM **dmp1, const BIGNUM **dmq1, const BIGNUM **iqmp); +int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[], + const BIGNUM *coeffs[]); +const BIGNUM *RSA_get0_n(const RSA *d); +const BIGNUM *RSA_get0_e(const RSA *d); +const BIGNUM *RSA_get0_d(const RSA *d); +const BIGNUM *RSA_get0_p(const RSA *d); +const BIGNUM *RSA_get0_q(const RSA *d); +const BIGNUM *RSA_get0_dmp1(const RSA *r); +const BIGNUM *RSA_get0_dmq1(const RSA *r); +const BIGNUM *RSA_get0_iqmp(const RSA *r); void RSA_clear_flags(RSA *r, int flags); int RSA_test_flags(const RSA *r, int flags); void RSA_set_flags(RSA *r, int flags); +int RSA_get_version(RSA *r); ENGINE *RSA_get0_engine(const RSA *r); /* Deprecated version */ @@ -196,6 +237,9 @@ DEPRECATEDIN_0_9_8(RSA *RSA_generate_key(int bits, unsigned long e, void /* New version */ int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +/* Multi-prime version */ +int RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes, + BIGNUM *e, BN_GENCB *cb); int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1, BIGNUM *q2, const BIGNUM *Xp1, const BIGNUM *Xp2, @@ -223,13 +267,14 @@ int RSA_flags(const RSA *r); void RSA_set_default_method(const RSA_METHOD *meth); const RSA_METHOD *RSA_get_default_method(void); +const RSA_METHOD *RSA_null_method(void); const RSA_METHOD *RSA_get_method(const RSA *rsa); int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); /* these are the actual RSA functions */ const RSA_METHOD *RSA_PKCS1_OpenSSL(void); -const RSA_METHOD *RSA_null_method(void); +int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, int p1, void *p2); DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) @@ -239,6 +284,8 @@ typedef struct rsa_pss_params_st { X509_ALGOR *maskGenAlgorithm; ASN1_INTEGER *saltLength; ASN1_INTEGER *trailerField; + /* Decoded hash algorithm from maskGenAlgorithm */ + X509_ALGOR *maskHash; } RSA_PSS_PARAMS; DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) @@ -247,6 +294,8 @@ typedef struct rsa_oaep_params_st { X509_ALGOR *hashFunc; X509_ALGOR *maskGenFunc; X509_ALGOR *pSourceFunc; + /* Decoded hash algorithm from maskGenFunc */ + X509_ALGOR *maskHash; } RSA_OAEP_PARAMS; DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) @@ -449,139 +498,12 @@ int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) int RSA_meth_set_keygen(RSA_METHOD *rsa, int (*keygen) (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb)); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_RSA_strings(void); - -/* Error codes for the RSA functions. */ - -/* Function codes. */ -# define RSA_F_CHECK_PADDING_MD 140 -# define RSA_F_ENCODE_PKCS1 146 -# define RSA_F_INT_RSA_VERIFY 145 -# define RSA_F_OLD_RSA_PRIV_DECODE 147 -# define RSA_F_PKEY_RSA_CTRL 143 -# define RSA_F_PKEY_RSA_CTRL_STR 144 -# define RSA_F_PKEY_RSA_SIGN 142 -# define RSA_F_PKEY_RSA_VERIFY 149 -# define RSA_F_PKEY_RSA_VERIFYRECOVER 141 -# define RSA_F_RSA_ALGOR_TO_MD 156 -# define RSA_F_RSA_BUILTIN_KEYGEN 129 -# define RSA_F_RSA_CHECK_KEY 123 -# define RSA_F_RSA_CHECK_KEY_EX 160 -# define RSA_F_RSA_CMS_DECRYPT 159 -# define RSA_F_RSA_ITEM_VERIFY 148 -# define RSA_F_RSA_METH_DUP 161 -# define RSA_F_RSA_METH_NEW 162 -# define RSA_F_RSA_METH_SET1_NAME 163 -# define RSA_F_RSA_MGF1_TO_MD 157 -# define RSA_F_RSA_NEW_METHOD 106 -# define RSA_F_RSA_NULL 124 -# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 -# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 -# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 -# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 -# define RSA_F_RSA_OSSL_PRIVATE_DECRYPT 101 -# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 102 -# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 103 -# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 104 -# define RSA_F_RSA_PADDING_ADD_NONE 107 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 154 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 152 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 -# define RSA_F_RSA_PADDING_ADD_SSLV23 110 -# define RSA_F_RSA_PADDING_ADD_X931 127 -# define RSA_F_RSA_PADDING_CHECK_NONE 111 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 153 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 -# define RSA_F_RSA_PADDING_CHECK_SSLV23 114 -# define RSA_F_RSA_PADDING_CHECK_X931 128 -# define RSA_F_RSA_PRINT 115 -# define RSA_F_RSA_PRINT_FP 116 -# define RSA_F_RSA_PRIV_ENCODE 138 -# define RSA_F_RSA_PSS_TO_CTX 155 -# define RSA_F_RSA_PUB_DECODE 139 -# define RSA_F_RSA_SETUP_BLINDING 136 -# define RSA_F_RSA_SIGN 117 -# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 -# define RSA_F_RSA_VERIFY 119 -# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 -# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 126 - -/* Reason codes. */ -# define RSA_R_ALGORITHM_MISMATCH 100 -# define RSA_R_BAD_E_VALUE 101 -# define RSA_R_BAD_FIXED_HEADER_DECRYPT 102 -# define RSA_R_BAD_PAD_BYTE_COUNT 103 -# define RSA_R_BAD_SIGNATURE 104 -# define RSA_R_BLOCK_TYPE_IS_NOT_01 106 -# define RSA_R_BLOCK_TYPE_IS_NOT_02 107 -# define RSA_R_DATA_GREATER_THAN_MOD_LEN 108 -# define RSA_R_DATA_TOO_LARGE 109 -# define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 110 -# define RSA_R_DATA_TOO_LARGE_FOR_MODULUS 132 -# define RSA_R_DATA_TOO_SMALL 111 -# define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE 122 -# define RSA_R_DIGEST_DOES_NOT_MATCH 158 -# define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 112 -# define RSA_R_DMP1_NOT_CONGRUENT_TO_D 124 -# define RSA_R_DMQ1_NOT_CONGRUENT_TO_D 125 -# define RSA_R_D_E_NOT_CONGRUENT_TO_1 123 -# define RSA_R_FIRST_OCTET_INVALID 133 -# define RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 144 -# define RSA_R_INVALID_DIGEST 157 -# define RSA_R_INVALID_DIGEST_LENGTH 143 -# define RSA_R_INVALID_HEADER 137 -# define RSA_R_INVALID_LABEL 160 -# define RSA_R_INVALID_MESSAGE_LENGTH 131 -# define RSA_R_INVALID_MGF1_MD 156 -# define RSA_R_INVALID_OAEP_PARAMETERS 161 -# define RSA_R_INVALID_PADDING 138 -# define RSA_R_INVALID_PADDING_MODE 141 -# define RSA_R_INVALID_PSS_PARAMETERS 149 -# define RSA_R_INVALID_PSS_SALTLEN 146 -# define RSA_R_INVALID_SALT_LENGTH 150 -# define RSA_R_INVALID_TRAILER 139 -# define RSA_R_INVALID_X931_DIGEST 142 -# define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 -# define RSA_R_KEY_SIZE_TOO_SMALL 120 -# define RSA_R_LAST_OCTET_INVALID 134 -# define RSA_R_MODULUS_TOO_LARGE 105 -# define RSA_R_NO_PUBLIC_EXPONENT 140 -# define RSA_R_NULL_BEFORE_BLOCK_MISSING 113 -# define RSA_R_N_DOES_NOT_EQUAL_P_Q 127 -# define RSA_R_OAEP_DECODING_ERROR 121 -# define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 148 -# define RSA_R_PADDING_CHECK_FAILED 114 -# define RSA_R_PKCS_DECODING_ERROR 159 -# define RSA_R_P_NOT_PRIME 128 -# define RSA_R_Q_NOT_PRIME 129 -# define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 -# define RSA_R_SLEN_CHECK_FAILED 136 -# define RSA_R_SLEN_RECOVERY_FAILED 135 -# define RSA_R_SSLV3_ROLLBACK_ATTACK 115 -# define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116 -# define RSA_R_UNKNOWN_ALGORITHM_TYPE 117 -# define RSA_R_UNKNOWN_DIGEST 166 -# define RSA_R_UNKNOWN_MASK_DIGEST 151 -# define RSA_R_UNKNOWN_PADDING_TYPE 118 -# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 162 -# define RSA_R_UNSUPPORTED_LABEL_SOURCE 163 -# define RSA_R_UNSUPPORTED_MASK_ALGORITHM 153 -# define RSA_R_UNSUPPORTED_MASK_PARAMETER 154 -# define RSA_R_UNSUPPORTED_SIGNATURE_TYPE 155 -# define RSA_R_VALUE_MISSING 147 -# define RSA_R_WRONG_SIGNATURE_LENGTH 119 +int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) + (RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb); +int RSA_meth_set_multi_prime_keygen(RSA_METHOD *meth, + int (*keygen) (RSA *rsa, int bits, + int primes, BIGNUM *e, + BN_GENCB *cb)); # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/rsaerr.h b/libs/windows/include/openssl/rsaerr.h new file mode 100644 index 00000000..d5bc01c1 --- /dev/null +++ b/libs/windows/include/openssl/rsaerr.h @@ -0,0 +1,162 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RSAERR_H +# define HEADER_RSAERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_RSA_strings(void); + +/* + * RSA function codes. + */ +# define RSA_F_CHECK_PADDING_MD 140 +# define RSA_F_ENCODE_PKCS1 146 +# define RSA_F_INT_RSA_VERIFY 145 +# define RSA_F_OLD_RSA_PRIV_DECODE 147 +# define RSA_F_PKEY_PSS_INIT 165 +# define RSA_F_PKEY_RSA_CTRL 143 +# define RSA_F_PKEY_RSA_CTRL_STR 144 +# define RSA_F_PKEY_RSA_SIGN 142 +# define RSA_F_PKEY_RSA_VERIFY 149 +# define RSA_F_PKEY_RSA_VERIFYRECOVER 141 +# define RSA_F_RSA_ALGOR_TO_MD 156 +# define RSA_F_RSA_BUILTIN_KEYGEN 129 +# define RSA_F_RSA_CHECK_KEY 123 +# define RSA_F_RSA_CHECK_KEY_EX 160 +# define RSA_F_RSA_CMS_DECRYPT 159 +# define RSA_F_RSA_CMS_VERIFY 158 +# define RSA_F_RSA_ITEM_VERIFY 148 +# define RSA_F_RSA_METH_DUP 161 +# define RSA_F_RSA_METH_NEW 162 +# define RSA_F_RSA_METH_SET1_NAME 163 +# define RSA_F_RSA_MGF1_TO_MD 157 +# define RSA_F_RSA_MULTIP_INFO_NEW 166 +# define RSA_F_RSA_NEW_METHOD 106 +# define RSA_F_RSA_NULL 124 +# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 +# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 +# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 +# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 +# define RSA_F_RSA_OSSL_PRIVATE_DECRYPT 101 +# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 102 +# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 103 +# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 104 +# define RSA_F_RSA_PADDING_ADD_NONE 107 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 154 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 152 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 +# define RSA_F_RSA_PADDING_ADD_SSLV23 110 +# define RSA_F_RSA_PADDING_ADD_X931 127 +# define RSA_F_RSA_PADDING_CHECK_NONE 111 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 153 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 +# define RSA_F_RSA_PADDING_CHECK_SSLV23 114 +# define RSA_F_RSA_PADDING_CHECK_X931 128 +# define RSA_F_RSA_PARAM_DECODE 164 +# define RSA_F_RSA_PRINT 115 +# define RSA_F_RSA_PRINT_FP 116 +# define RSA_F_RSA_PRIV_DECODE 150 +# define RSA_F_RSA_PRIV_ENCODE 138 +# define RSA_F_RSA_PSS_GET_PARAM 151 +# define RSA_F_RSA_PSS_TO_CTX 155 +# define RSA_F_RSA_PUB_DECODE 139 +# define RSA_F_RSA_SETUP_BLINDING 136 +# define RSA_F_RSA_SIGN 117 +# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 +# define RSA_F_RSA_VERIFY 119 +# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 +# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 126 +# define RSA_F_SETUP_TBUF 167 + +/* + * RSA reason codes. + */ +# define RSA_R_ALGORITHM_MISMATCH 100 +# define RSA_R_BAD_E_VALUE 101 +# define RSA_R_BAD_FIXED_HEADER_DECRYPT 102 +# define RSA_R_BAD_PAD_BYTE_COUNT 103 +# define RSA_R_BAD_SIGNATURE 104 +# define RSA_R_BLOCK_TYPE_IS_NOT_01 106 +# define RSA_R_BLOCK_TYPE_IS_NOT_02 107 +# define RSA_R_DATA_GREATER_THAN_MOD_LEN 108 +# define RSA_R_DATA_TOO_LARGE 109 +# define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 110 +# define RSA_R_DATA_TOO_LARGE_FOR_MODULUS 132 +# define RSA_R_DATA_TOO_SMALL 111 +# define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE 122 +# define RSA_R_DIGEST_DOES_NOT_MATCH 158 +# define RSA_R_DIGEST_NOT_ALLOWED 145 +# define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 112 +# define RSA_R_DMP1_NOT_CONGRUENT_TO_D 124 +# define RSA_R_DMQ1_NOT_CONGRUENT_TO_D 125 +# define RSA_R_D_E_NOT_CONGRUENT_TO_1 123 +# define RSA_R_FIRST_OCTET_INVALID 133 +# define RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 144 +# define RSA_R_INVALID_DIGEST 157 +# define RSA_R_INVALID_DIGEST_LENGTH 143 +# define RSA_R_INVALID_HEADER 137 +# define RSA_R_INVALID_LABEL 160 +# define RSA_R_INVALID_MESSAGE_LENGTH 131 +# define RSA_R_INVALID_MGF1_MD 156 +# define RSA_R_INVALID_MULTI_PRIME_KEY 167 +# define RSA_R_INVALID_OAEP_PARAMETERS 161 +# define RSA_R_INVALID_PADDING 138 +# define RSA_R_INVALID_PADDING_MODE 141 +# define RSA_R_INVALID_PSS_PARAMETERS 149 +# define RSA_R_INVALID_PSS_SALTLEN 146 +# define RSA_R_INVALID_SALT_LENGTH 150 +# define RSA_R_INVALID_TRAILER 139 +# define RSA_R_INVALID_X931_DIGEST 142 +# define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 +# define RSA_R_KEY_PRIME_NUM_INVALID 165 +# define RSA_R_KEY_SIZE_TOO_SMALL 120 +# define RSA_R_LAST_OCTET_INVALID 134 +# define RSA_R_MGF1_DIGEST_NOT_ALLOWED 152 +# define RSA_R_MODULUS_TOO_LARGE 105 +# define RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R 168 +# define RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D 169 +# define RSA_R_MP_R_NOT_PRIME 170 +# define RSA_R_NO_PUBLIC_EXPONENT 140 +# define RSA_R_NULL_BEFORE_BLOCK_MISSING 113 +# define RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES 172 +# define RSA_R_N_DOES_NOT_EQUAL_P_Q 127 +# define RSA_R_OAEP_DECODING_ERROR 121 +# define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 148 +# define RSA_R_PADDING_CHECK_FAILED 114 +# define RSA_R_PKCS_DECODING_ERROR 159 +# define RSA_R_PSS_SALTLEN_TOO_SMALL 164 +# define RSA_R_P_NOT_PRIME 128 +# define RSA_R_Q_NOT_PRIME 129 +# define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 +# define RSA_R_SLEN_CHECK_FAILED 136 +# define RSA_R_SLEN_RECOVERY_FAILED 135 +# define RSA_R_SSLV3_ROLLBACK_ATTACK 115 +# define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116 +# define RSA_R_UNKNOWN_ALGORITHM_TYPE 117 +# define RSA_R_UNKNOWN_DIGEST 166 +# define RSA_R_UNKNOWN_MASK_DIGEST 151 +# define RSA_R_UNKNOWN_PADDING_TYPE 118 +# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 162 +# define RSA_R_UNSUPPORTED_LABEL_SOURCE 163 +# define RSA_R_UNSUPPORTED_MASK_ALGORITHM 153 +# define RSA_R_UNSUPPORTED_MASK_PARAMETER 154 +# define RSA_R_UNSUPPORTED_SIGNATURE_TYPE 155 +# define RSA_R_VALUE_MISSING 147 +# define RSA_R_WRONG_SIGNATURE_LENGTH 119 + +#endif diff --git a/libs/windows/include/openssl/safestack.h b/libs/windows/include/openssl/safestack.h index 9fe733c2..38b55789 100644 --- a/libs/windows/include/openssl/safestack.h +++ b/libs/windows/include/openssl/safestack.h @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -24,88 +24,96 @@ extern "C" { typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ typedef void (*sk_##t1##_freefunc)(t3 *a); \ typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ - static ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \ + static ossl_unused ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \ { \ return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \ } \ - static ossl_inline t2 *sk_##t1##_value(const STACK_OF(t1) *sk, int idx) \ + static ossl_unused ossl_inline t2 *sk_##t1##_value(const STACK_OF(t1) *sk, int idx) \ { \ return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \ } \ - static ossl_inline STACK_OF(t1) *sk_##t1##_new(sk_##t1##_compfunc compare) \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new(sk_##t1##_compfunc compare) \ { \ return (STACK_OF(t1) *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \ } \ - static ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ { \ return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \ } \ - static ossl_inline void sk_##t1##_free(STACK_OF(t1) *sk) \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_reserve(sk_##t1##_compfunc compare, int n) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_reserve(STACK_OF(t1) *sk, int n) \ + { \ + return OPENSSL_sk_reserve((OPENSSL_STACK *)sk, n); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_free(STACK_OF(t1) *sk) \ { \ OPENSSL_sk_free((OPENSSL_STACK *)sk); \ } \ - static ossl_inline void sk_##t1##_zero(STACK_OF(t1) *sk) \ + static ossl_unused ossl_inline void sk_##t1##_zero(STACK_OF(t1) *sk) \ { \ OPENSSL_sk_zero((OPENSSL_STACK *)sk); \ } \ - static ossl_inline t2 *sk_##t1##_delete(STACK_OF(t1) *sk, int i) \ + static ossl_unused ossl_inline t2 *sk_##t1##_delete(STACK_OF(t1) *sk, int i) \ { \ return (t2 *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i); \ } \ - static ossl_inline t2 *sk_##t1##_delete_ptr(STACK_OF(t1) *sk, t2 *ptr) \ + static ossl_unused ossl_inline t2 *sk_##t1##_delete_ptr(STACK_OF(t1) *sk, t2 *ptr) \ { \ return (t2 *)OPENSSL_sk_delete_ptr((OPENSSL_STACK *)sk, \ (const void *)ptr); \ } \ - static ossl_inline int sk_##t1##_push(STACK_OF(t1) *sk, t2 *ptr) \ + static ossl_unused ossl_inline int sk_##t1##_push(STACK_OF(t1) *sk, t2 *ptr) \ { \ return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \ } \ - static ossl_inline int sk_##t1##_unshift(STACK_OF(t1) *sk, t2 *ptr) \ + static ossl_unused ossl_inline int sk_##t1##_unshift(STACK_OF(t1) *sk, t2 *ptr) \ { \ return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr); \ } \ - static ossl_inline t2 *sk_##t1##_pop(STACK_OF(t1) *sk) \ + static ossl_unused ossl_inline t2 *sk_##t1##_pop(STACK_OF(t1) *sk) \ { \ return (t2 *)OPENSSL_sk_pop((OPENSSL_STACK *)sk); \ } \ - static ossl_inline t2 *sk_##t1##_shift(STACK_OF(t1) *sk) \ + static ossl_unused ossl_inline t2 *sk_##t1##_shift(STACK_OF(t1) *sk) \ { \ return (t2 *)OPENSSL_sk_shift((OPENSSL_STACK *)sk); \ } \ - static ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \ + static ossl_unused ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \ { \ OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \ } \ - static ossl_inline int sk_##t1##_insert(STACK_OF(t1) *sk, t2 *ptr, int idx) \ + static ossl_unused ossl_inline int sk_##t1##_insert(STACK_OF(t1) *sk, t2 *ptr, int idx) \ { \ return OPENSSL_sk_insert((OPENSSL_STACK *)sk, (const void *)ptr, idx); \ } \ - static ossl_inline t2 *sk_##t1##_set(STACK_OF(t1) *sk, int idx, t2 *ptr) \ + static ossl_unused ossl_inline t2 *sk_##t1##_set(STACK_OF(t1) *sk, int idx, t2 *ptr) \ { \ return (t2 *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr); \ } \ - static ossl_inline int sk_##t1##_find(STACK_OF(t1) *sk, t2 *ptr) \ + static ossl_unused ossl_inline int sk_##t1##_find(STACK_OF(t1) *sk, t2 *ptr) \ { \ return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr); \ } \ - static ossl_inline int sk_##t1##_find_ex(STACK_OF(t1) *sk, t2 *ptr) \ + static ossl_unused ossl_inline int sk_##t1##_find_ex(STACK_OF(t1) *sk, t2 *ptr) \ { \ return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ } \ - static ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ + static ossl_unused ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ { \ OPENSSL_sk_sort((OPENSSL_STACK *)sk); \ } \ - static ossl_inline int sk_##t1##_is_sorted(const STACK_OF(t1) *sk) \ + static ossl_unused ossl_inline int sk_##t1##_is_sorted(const STACK_OF(t1) *sk) \ { \ return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk); \ } \ - static ossl_inline STACK_OF(t1) * sk_##t1##_dup(const STACK_OF(t1) *sk) \ + static ossl_unused ossl_inline STACK_OF(t1) * sk_##t1##_dup(const STACK_OF(t1) *sk) \ { \ return (STACK_OF(t1) *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk); \ } \ - static ossl_inline STACK_OF(t1) *sk_##t1##_deep_copy(const STACK_OF(t1) *sk, \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_deep_copy(const STACK_OF(t1) *sk, \ sk_##t1##_copyfunc copyfunc, \ sk_##t1##_freefunc freefunc) \ { \ @@ -113,7 +121,7 @@ extern "C" { (OPENSSL_sk_copyfunc)copyfunc, \ (OPENSSL_sk_freefunc)freefunc); \ } \ - static ossl_inline sk_##t1##_compfunc sk_##t1##_set_cmp_func(STACK_OF(t1) *sk, sk_##t1##_compfunc compare) \ + static ossl_unused ossl_inline sk_##t1##_compfunc sk_##t1##_set_cmp_func(STACK_OF(t1) *sk, sk_##t1##_compfunc compare) \ { \ return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \ } @@ -158,6 +166,41 @@ DEFINE_SPECIAL_STACK_OF_CONST(OPENSSL_CSTRING, char) typedef void *OPENSSL_BLOCK; DEFINE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) +/* + * If called without higher optimization (min. -xO3) the Oracle Developer + * Studio compiler generates code for the defined (static inline) functions + * above. + * This would later lead to the linker complaining about missing symbols when + * this header file is included but the resulting object is not linked against + * the Crypto library (openssl#6912). + */ +# ifdef __SUNPRO_C +# pragma weak OPENSSL_sk_num +# pragma weak OPENSSL_sk_value +# pragma weak OPENSSL_sk_new +# pragma weak OPENSSL_sk_new_null +# pragma weak OPENSSL_sk_new_reserve +# pragma weak OPENSSL_sk_reserve +# pragma weak OPENSSL_sk_free +# pragma weak OPENSSL_sk_zero +# pragma weak OPENSSL_sk_delete +# pragma weak OPENSSL_sk_delete_ptr +# pragma weak OPENSSL_sk_push +# pragma weak OPENSSL_sk_unshift +# pragma weak OPENSSL_sk_pop +# pragma weak OPENSSL_sk_shift +# pragma weak OPENSSL_sk_pop_free +# pragma weak OPENSSL_sk_insert +# pragma weak OPENSSL_sk_set +# pragma weak OPENSSL_sk_find +# pragma weak OPENSSL_sk_find_ex +# pragma weak OPENSSL_sk_sort +# pragma weak OPENSSL_sk_is_sorted +# pragma weak OPENSSL_sk_dup +# pragma weak OPENSSL_sk_deep_copy +# pragma weak OPENSSL_sk_set_cmp_func +# endif /* __SUNPRO_C */ + # ifdef __cplusplus } # endif diff --git a/libs/windows/include/openssl/srp.h b/libs/windows/include/openssl/srp.h index f2b6ec75..aaf13558 100644 --- a/libs/windows/include/openssl/srp.h +++ b/libs/windows/include/openssl/srp.h @@ -1,10 +1,14 @@ /* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2004, EdelKey Project. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html + * + * Originally written by Christophe Renou and Peter Sylvester, + * for the EdelKey project. */ #ifndef HEADER_SRP_H diff --git a/libs/windows/include/openssl/ssl.h b/libs/windows/include/openssl/ssl.h index 56e20562..48e1152a 100644 --- a/libs/windows/include/openssl/ssl.h +++ b/libs/windows/include/openssl/ssl.h @@ -1,5 +1,7 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * Copyright 2005 Nokia. All rights reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -7,38 +9,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECC cipher suite support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ -/* ==================================================================== - * Copyright 2005 Nokia. All rights reserved. - * - * The portions of the attached software ("Contribution") is developed by - * Nokia Corporation and is licensed pursuant to the OpenSSL open source - * license. - * - * The Contribution, originally written by Mika Kousa and Pasi Eronen of - * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites - * support (see RFC 4279) to OpenSSL. - * - * No patent licenses or other rights except those expressly stated in - * the OpenSSL open source license shall be deemed granted or received - * expressly, by implication, estoppel, or otherwise. - * - * No assurances are provided by Nokia that the Contribution does not - * infringe the patent or other intellectual property rights of any third - * party or that the license provides you with all the necessary rights - * to make use of the Contribution. - * - * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN - * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA - * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY - * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR - * OTHERWISE. - */ - #ifndef HEADER_SSL_H # define HEADER_SSL_H @@ -49,9 +19,9 @@ # if OPENSSL_API_COMPAT < 0x10100000L # include # include -# include # include # endif +# include # include # include # include @@ -59,6 +29,7 @@ # include # include # include +# include #ifdef __cplusplus extern "C" { @@ -155,6 +126,10 @@ extern "C" { # define SSL_TXT_CAMELLIA "CAMELLIA" # define SSL_TXT_CHACHA20 "CHACHA20" # define SSL_TXT_GOST "GOST89" +# define SSL_TXT_ARIA "ARIA" +# define SSL_TXT_ARIA_GCM "ARIAGCM" +# define SSL_TXT_ARIA128 "ARIA128" +# define SSL_TXT_ARIA256 "ARIA256" # define SSL_TXT_MD5 "MD5" # define SSL_TXT_SHA1 "SHA1" @@ -193,8 +168,18 @@ extern "C" { /* * The following cipher list is used by default. It also is substituted when * an application-defined cipher list string starts with 'DEFAULT'. + * This applies to ciphersuites for TLSv1.2 and below. */ # define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" +/* This is the default set of TLSv1.3 ciphersuites */ +# if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) +# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ + "TLS_CHACHA20_POLY1305_SHA256:" \ + "TLS_AES_128_GCM_SHA256" +# else +# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ + "TLS_AES_128_GCM_SHA256" +#endif /* * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always * starts with a reasonable order, and all we have to do for DEFAULT is @@ -241,34 +226,95 @@ typedef struct srtp_protection_profile_st { DEFINE_STACK_OF(SRTP_PROTECTION_PROFILE) -typedef int (*tls_session_ticket_ext_cb_fn) (SSL *s, - const unsigned char *data, - int len, void *arg); -typedef int (*tls_session_secret_cb_fn) (SSL *s, void *secret, - int *secret_len, - STACK_OF(SSL_CIPHER) *peer_ciphers, - const SSL_CIPHER **cipher, void *arg); +typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data, + int len, void *arg); +typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, + STACK_OF(SSL_CIPHER) *peer_ciphers, + const SSL_CIPHER **cipher, void *arg); + +/* Extension context codes */ +/* This extension is only allowed in TLS */ +#define SSL_EXT_TLS_ONLY 0x0001 +/* This extension is only allowed in DTLS */ +#define SSL_EXT_DTLS_ONLY 0x0002 +/* Some extensions may be allowed in DTLS but we don't implement them for it */ +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x0004 +/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ +#define SSL_EXT_SSL3_ALLOWED 0x0008 +/* Extension is only defined for TLS1.2 and below */ +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 +/* Extension is only defined for TLS1.3 and above */ +#define SSL_EXT_TLS1_3_ONLY 0x0020 +/* Ignore this extension during parsing if we are resuming */ +#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 +#define SSL_EXT_CLIENT_HELLO 0x0080 +/* Really means TLS1.2 or below */ +#define SSL_EXT_TLS1_2_SERVER_HELLO 0x0100 +#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 +#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 +#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 +#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 +#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 +#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 /* Typedefs for handling custom extensions */ -typedef int (*custom_ext_add_cb) (SSL *s, unsigned int ext_type, - const unsigned char **out, - size_t *outlen, int *al, void *add_arg); +typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type, + const unsigned char **out, size_t *outlen, + int *al, void *add_arg); -typedef void (*custom_ext_free_cb) (SSL *s, unsigned int ext_type, - const unsigned char *out, void *add_arg); +typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type, + const unsigned char *out, void *add_arg); -typedef int (*custom_ext_parse_cb) (SSL *s, unsigned int ext_type, - const unsigned char *in, - size_t inlen, int *al, void *parse_arg); +typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type, + const unsigned char *in, size_t inlen, + int *al, void *parse_arg); + + +typedef int (*SSL_custom_ext_add_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char **out, + size_t *outlen, X509 *x, + size_t chainidx, + int *al, void *add_arg); + +typedef void (*SSL_custom_ext_free_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *out, + void *add_arg); + +typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *in, + size_t inlen, X509 *x, + size_t chainidx, + int *al, void *parse_arg); /* Typedef for verification callback */ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); +/* + * Some values are reserved until OpenSSL 1.2.0 because they were previously + * included in SSL_OP_ALL in a 1.1.x release. + * + * Reserved value (until OpenSSL 1.2.0) 0x00000001U + * Reserved value (until OpenSSL 1.2.0) 0x00000002U + */ /* Allow initial connection to servers that don't support RI */ # define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004U + +/* Reserved value (until OpenSSL 1.2.0) 0x00000008U */ # define SSL_OP_TLSEXT_PADDING 0x00000010U +/* Reserved value (until OpenSSL 1.2.0) 0x00000020U */ # define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040U +/* + * Reserved value (until OpenSSL 1.2.0) 0x00000080U + * Reserved value (until OpenSSL 1.2.0) 0x00000100U + * Reserved value (until OpenSSL 1.2.0) 0x00000200U + */ + +/* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ +# define SSL_OP_ALLOW_NO_DHE_KEX 0x00000400U /* * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in @@ -299,6 +345,17 @@ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); # define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000U /* Disable encrypt-then-mac */ # define SSL_OP_NO_ENCRYPT_THEN_MAC 0x00080000U + +/* + * Enable TLSv1.3 Compatibility mode. This is on by default. A future version + * of OpenSSL may have this disabled by default. + */ +# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT 0x00100000U + +/* Prioritize Chacha20Poly1305 when client does. + * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE */ +# define SSL_OP_PRIORITIZE_CHACHA 0x00200000U + /* * Set on servers to choose the cipher according to the server's preferences */ @@ -311,16 +368,23 @@ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); */ # define SSL_OP_TLS_ROLLBACK_BUG 0x00800000U +/* + * Switches off automatic TLSv1.3 anti-replay protection for early data. This + * is a server-side option only (no effect on the client). + */ +# define SSL_OP_NO_ANTI_REPLAY 0x01000000U + # define SSL_OP_NO_SSLv3 0x02000000U # define SSL_OP_NO_TLSv1 0x04000000U # define SSL_OP_NO_TLSv1_2 0x08000000U # define SSL_OP_NO_TLSv1_1 0x10000000U +# define SSL_OP_NO_TLSv1_3 0x20000000U # define SSL_OP_NO_DTLSv1 0x04000000U # define SSL_OP_NO_DTLSv1_2 0x08000000U # define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv3|\ - SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2) + SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2|SSL_OP_NO_TLSv1_3) # define SSL_OP_NO_DTLS_MASK (SSL_OP_NO_DTLSv1|SSL_OP_NO_DTLSv1_2) /* Disallow all renegotiation */ @@ -381,7 +445,7 @@ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); # define SSL_OP_PKCS1_CHECK_1 0x0 /* Removed from OpenSSL 1.0.1. Was 0x10000000L */ # define SSL_OP_PKCS1_CHECK_2 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x20000000L */ +/* Removed from OpenSSL 1.1.0. Was 0x20000000L */ # define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 /* Removed from OpenSSL 1.1.0. Was 0x40000000L */ # define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0 @@ -406,8 +470,7 @@ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); # define SSL_MODE_NO_AUTO_CHAIN 0x00000008U /* * Save RAM by releasing read and write buffers when they're empty. (SSL3 and - * TLS only.) "Released" buffers are put onto a free-list in the context or - * just freed (depending on the context's setting for freelist_max_len). + * TLS only.) Released buffers are freed. */ # define SSL_MODE_RELEASE_BUFFERS 0x00000010U /* @@ -431,6 +494,19 @@ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); */ # define SSL_MODE_ASYNC 0x00000100U +/* + * When using DTLS/SCTP, include the terminating zero in the label + * used for computing the endpoint-pair shared secret. Required for + * interoperability with implementations having this bug like these + * older version of OpenSSL: + * - OpenSSL 1.0.0 series + * - OpenSSL 1.0.1 series + * - OpenSSL 1.0.2 series + * - OpenSSL 1.1.0 series + * - OpenSSL 1.1.1 and 1.1.1a + */ +# define SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG 0x00000400U + /* Cert related flags */ /* * Many implementations ignore some aspects of the TLS standards such as @@ -496,13 +572,16 @@ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); # define SSL_CONF_TYPE_DIR 0x3 # define SSL_CONF_TYPE_NONE 0x4 +/* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */ +# define SSL_COOKIE_LENGTH 4096 + /* * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they * cannot be used to clear bits. */ unsigned long SSL_CTX_get_options(const SSL_CTX *ctx); -unsigned long SSL_get_options(const SSL* s); +unsigned long SSL_get_options(const SSL *s); unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op); unsigned long SSL_clear_options(SSL *s, unsigned long op); unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op); @@ -587,7 +666,7 @@ __owur int SRP_Calc_A_param(SSL *s); * bytes. The callback can alter this length to be less if desired. It is * also an error for the callback to set the size to zero. */ -typedef int (*GEN_SESSION_CB) (const SSL *ssl, unsigned char *id, +typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id, unsigned int *id_len); # define SSL_SESS_CACHE_OFF 0x0000 @@ -635,8 +714,7 @@ int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, void (*remove_session_cb) (struct ssl_ctx_st *ctx, - SSL_SESSION - *sess)); + SSL_SESSION *sess)); void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx, SSL_SESSION *sess); void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, @@ -649,8 +727,7 @@ SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, const unsigned char *data, int len, int *copy); void SSL_CTX_set_info_callback(SSL_CTX *ctx, - void (*cb) (const SSL *ssl, int type, - int val)); + void (*cb) (const SSL *ssl, int type, int val)); void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type, int val); void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, @@ -669,32 +746,52 @@ void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, *cookie_len)); void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, int (*app_verify_cookie_cb) (SSL *ssl, - const unsigned char - *cookie, + const unsigned + char *cookie, unsigned int cookie_len)); + +void SSL_CTX_set_stateless_cookie_generate_cb( + SSL_CTX *ctx, + int (*gen_stateless_cookie_cb) (SSL *ssl, + unsigned char *cookie, + size_t *cookie_len)); +void SSL_CTX_set_stateless_cookie_verify_cb( + SSL_CTX *ctx, + int (*verify_stateless_cookie_cb) (SSL *ssl, + const unsigned char *cookie, + size_t cookie_len)); # ifndef OPENSSL_NO_NEXTPROTONEG + +typedef int (*SSL_CTX_npn_advertised_cb_func)(SSL *ssl, + const unsigned char **out, + unsigned int *outlen, + void *arg); void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s, - int (*cb) (SSL *ssl, - const unsigned char - **out, - unsigned int *outlen, - void *arg), void *arg); + SSL_CTX_npn_advertised_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_advertised_cb SSL_CTX_set_next_protos_advertised_cb + +typedef int (*SSL_CTX_npn_select_cb_func)(SSL *s, + unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg); void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, - int (*cb) (SSL *ssl, - unsigned char **out, - unsigned char *outlen, - const unsigned char *in, - unsigned int inlen, - void *arg), void *arg); + SSL_CTX_npn_select_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_select_cb SSL_CTX_set_next_proto_select_cb + void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, unsigned *len); +# define SSL_get0_npn_negotiated SSL_get0_next_proto_negotiated # endif __owur int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, - const unsigned char *in, unsigned int inlen, - const unsigned char *client, - unsigned int client_len); + const unsigned char *in, unsigned int inlen, + const unsigned char *client, + unsigned int client_len); # define OPENSSL_NPN_UNSUPPORTED 0 # define OPENSSL_NPN_NEGOTIATED 1 @@ -704,13 +801,15 @@ __owur int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, unsigned int protos_len); __owur int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, unsigned int protos_len); -void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, - int (*cb) (SSL *ssl, +typedef int (*SSL_CTX_alpn_select_cb_func)(SSL *ssl, const unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, - void *arg), void *arg); + void *arg); +void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, + SSL_CTX_alpn_select_cb_func cb, + void *arg); void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, unsigned int *len); @@ -721,87 +820,71 @@ void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, */ # define PSK_MAX_IDENTITY_LEN 128 # define PSK_MAX_PSK_LEN 256 -void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, - unsigned int (*psk_client_callback) (SSL - *ssl, - const - char - *hint, - char - *identity, - unsigned - int - max_identity_len, - unsigned - char - *psk, - unsigned - int - max_psk_len)); -void SSL_set_psk_client_callback(SSL *ssl, - unsigned int (*psk_client_callback) (SSL - *ssl, - const - char - *hint, - char - *identity, - unsigned - int - max_identity_len, - unsigned - char - *psk, - unsigned - int - max_psk_len)); -void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, - unsigned int (*psk_server_callback) (SSL - *ssl, - const - char - *identity, - unsigned - char - *psk, - unsigned - int - max_psk_len)); -void SSL_set_psk_server_callback(SSL *ssl, - unsigned int (*psk_server_callback) (SSL - *ssl, - const - char - *identity, - unsigned - char - *psk, - unsigned - int - max_psk_len)); +typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl, + const char *hint, + char *identity, + unsigned int max_identity_len, + unsigned char *psk, + unsigned int max_psk_len); +void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb); +void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb); + +typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl, + const char *identity, + unsigned char *psk, + unsigned int max_psk_len); +void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb); +void SSL_set_psk_server_callback(SSL *ssl, SSL_psk_server_cb_func cb); + __owur int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); __owur int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint); const char *SSL_get_psk_identity_hint(const SSL *s); const char *SSL_get_psk_identity(const SSL *s); # endif +typedef int (*SSL_psk_find_session_cb_func)(SSL *ssl, + const unsigned char *identity, + size_t identity_len, + SSL_SESSION **sess); +typedef int (*SSL_psk_use_session_cb_func)(SSL *ssl, const EVP_MD *md, + const unsigned char **id, + size_t *idlen, + SSL_SESSION **sess); + +void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb); +void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx, + SSL_psk_find_session_cb_func cb); +void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb); +void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx, + SSL_psk_use_session_cb_func cb); + /* Register callbacks to handle custom TLS Extensions for client or server. */ __owur int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx, unsigned int ext_type); -__owur int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type, - custom_ext_add_cb add_cb, - custom_ext_free_cb free_cb, - void *add_arg, - custom_ext_parse_cb parse_cb, - void *parse_arg); +__owur int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, + unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); -__owur int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, unsigned int ext_type, - custom_ext_add_cb add_cb, - custom_ext_free_cb free_cb, +__owur int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, + unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); + +__owur int SSL_CTX_add_custom_ext(SSL_CTX *ctx, unsigned int ext_type, + unsigned int context, + SSL_custom_ext_add_cb_ex add_cb, + SSL_custom_ext_free_cb_ex free_cb, void *add_arg, - custom_ext_parse_cb parse_cb, + SSL_custom_ext_parse_cb_ex parse_cb, void *parse_arg); __owur int SSL_extension_supported(unsigned int ext_type); @@ -812,18 +895,48 @@ __owur int SSL_extension_supported(unsigned int ext_type); # define SSL_X509_LOOKUP 4 # define SSL_ASYNC_PAUSED 5 # define SSL_ASYNC_NO_JOBS 6 +# define SSL_CLIENT_HELLO_CB 7 /* These will only be used when doing non-blocking IO */ -# define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) -# define SSL_want_read(s) (SSL_want(s) == SSL_READING) -# define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) -# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) -# define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) -# define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) +# define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) +# define SSL_want_read(s) (SSL_want(s) == SSL_READING) +# define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) +# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) +# define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) +# define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) +# define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB) # define SSL_MAC_FLAG_READ_MAC_STREAM 1 # define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 +/* + * A callback for logging out TLS key material. This callback should log out + * |line| followed by a newline. + */ +typedef void (*SSL_CTX_keylog_cb_func)(const SSL *ssl, const char *line); + +/* + * SSL_CTX_set_keylog_callback configures a callback to log key material. This + * is intended for debugging use with tools like Wireshark. The cb function + * should log line followed by a newline. + */ +void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb); + +/* + * SSL_CTX_get_keylog_callback returns the callback configured by + * SSL_CTX_set_keylog_callback. + */ +SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx); + +int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data); +uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx); +int SSL_set_max_early_data(SSL *s, uint32_t max_early_data); +uint32_t SSL_get_max_early_data(const SSL *s); +int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data); +uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx); +int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data); +uint32_t SSL_get_recv_max_early_data(const SSL *s); + #ifdef __cplusplus } #endif @@ -846,14 +959,22 @@ DEFINE_STACK_OF_CONST(SSL_CIPHER) DEFINE_STACK_OF(SSL_COMP) /* compatibility */ -# define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)arg)) +# define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)(arg))) # define SSL_get_app_data(s) (SSL_get_ex_data(s,0)) -# define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0,(char *)a)) +# define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0, \ + (char *)(a))) # define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0)) # define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) -# define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0,(char *)arg)) +# define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0, \ + (char *)(arg))) DEPRECATEDIN_1_1_0(void SSL_set_debug(SSL *s, int debug)) +/* TLSv1.3 KeyUpdate message types */ +/* -1 used so that this is an invalid value for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NONE -1 +/* Values as defined for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NOT_REQUESTED 0 +#define SSL_KEY_UPDATE_REQUESTED 1 /* * The valid handshake states (one for each type message sent and one for each @@ -904,7 +1025,20 @@ typedef enum { TLS_ST_SW_SESSION_TICKET, TLS_ST_SW_CERT_STATUS, TLS_ST_SW_CHANGE, - TLS_ST_SW_FINISHED + TLS_ST_SW_FINISHED, + TLS_ST_SW_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_CERT_VRFY, + TLS_ST_SW_CERT_VRFY, + TLS_ST_CR_HELLO_REQ, + TLS_ST_SW_KEY_UPDATE, + TLS_ST_CW_KEY_UPDATE, + TLS_ST_SR_KEY_UPDATE, + TLS_ST_CR_KEY_UPDATE, + TLS_ST_EARLY_DATA, + TLS_ST_PENDING_EARLY_DATA_END, + TLS_ST_CW_END_OF_EARLY_DATA, + TLS_ST_SR_END_OF_EARLY_DATA } OSSL_HANDSHAKE_STATE; /* @@ -937,9 +1071,9 @@ typedef enum { /* Is the SSL_connection established? */ # define SSL_in_connect_init(a) (SSL_in_init(a) && !SSL_is_server(a)) # define SSL_in_accept_init(a) (SSL_in_init(a) && SSL_is_server(a)) -int SSL_in_init(SSL *s); -int SSL_in_before(SSL *s); -int SSL_is_init_finished(SSL *s); +int SSL_in_init(const SSL *s); +int SSL_in_before(const SSL *s); +int SSL_is_init_finished(const SSL *s); /* * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you @@ -959,13 +1093,14 @@ size_t SSL_get_finished(const SSL *s, void *buf, size_t count); size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); /* - * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options are + * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 3 options are * 'ored' with SSL_VERIFY_PEER if they are desired */ # define SSL_VERIFY_NONE 0x00 # define SSL_VERIFY_PEER 0x01 # define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 # define SSL_VERIFY_CLIENT_ONCE 0x04 +# define SSL_VERIFY_POST_HANDSHAKE 0x08 # if OPENSSL_API_COMPAT < 0x10100000L # define OpenSSL_add_ssl_algorithms() SSL_library_init() @@ -1030,6 +1165,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR # define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED # define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION +# define SSL_AD_MISSING_EXTENSION TLS13_AD_MISSING_EXTENSION +# define SSL_AD_CERTIFICATE_REQUIRED TLS13_AD_CERTIFICATE_REQUIRED # define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION # define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE # define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME @@ -1052,6 +1189,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_ERROR_WANT_ACCEPT 8 # define SSL_ERROR_WANT_ASYNC 9 # define SSL_ERROR_WANT_ASYNC_JOB 10 +# define SSL_ERROR_WANT_CLIENT_HELLO_CB 11 # define SSL_CTRL_SET_TMP_DH 3 # define SSL_CTRL_SET_TMP_ECDH 4 # define SSL_CTRL_SET_TMP_DH_CB 6 @@ -1130,10 +1268,10 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 83 # define SSL_CTRL_CHAIN 88 # define SSL_CTRL_CHAIN_CERT 89 -# define SSL_CTRL_GET_CURVES 90 -# define SSL_CTRL_SET_CURVES 91 -# define SSL_CTRL_SET_CURVES_LIST 92 -# define SSL_CTRL_GET_SHARED_CURVE 93 +# define SSL_CTRL_GET_GROUPS 90 +# define SSL_CTRL_SET_GROUPS 91 +# define SSL_CTRL_SET_GROUPS_LIST 92 +# define SSL_CTRL_GET_SHARED_GROUP 93 # define SSL_CTRL_SET_SIGALGS 97 # define SSL_CTRL_SET_SIGALGS_LIST 98 # define SSL_CTRL_CERT_FLAGS 99 @@ -1146,7 +1284,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTRL_SET_VERIFY_CERT_STORE 106 # define SSL_CTRL_SET_CHAIN_CERT_STORE 107 # define SSL_CTRL_GET_PEER_SIGNATURE_NID 108 -# define SSL_CTRL_GET_SERVER_TMP_KEY 109 +# define SSL_CTRL_GET_PEER_TMP_KEY 109 # define SSL_CTRL_GET_RAW_CIPHERLIST 110 # define SSL_CTRL_GET_EC_POINT_FORMATS 111 # define SSL_CTRL_GET_CHAIN_CERTS 115 @@ -1165,11 +1303,13 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG 129 # define SSL_CTRL_GET_MIN_PROTO_VERSION 130 # define SSL_CTRL_GET_MAX_PROTO_VERSION 131 +# define SSL_CTRL_GET_SIGNATURE_NID 132 +# define SSL_CTRL_GET_TMP_KEY 133 # define SSL_CERT_SET_FIRST 1 # define SSL_CERT_SET_NEXT 2 # define SSL_CERT_SET_SERVER 3 # define DTLSv1_get_timeout(ssl, arg) \ - SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)arg) + SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)(arg)) # define DTLSv1_handle_timeout(ssl) \ SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL) # define SSL_num_renegotiations(ssl) \ @@ -1179,19 +1319,19 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_total_renegotiations(ssl) \ SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) # define SSL_CTX_set_tmp_dh(ctx,dh) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)dh) + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) # define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh) + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) # define SSL_CTX_set_dh_auto(ctx, onoff) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL) # define SSL_set_dh_auto(s, onoff) \ SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL) # define SSL_set_tmp_dh(ssl,dh) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)dh) + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) # define SSL_set_tmp_ecdh(ssl,ecdh) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh) + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) # define SSL_CTX_add_extra_chain_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509) + SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509)) # define SSL_CTX_get_extra_chain_certs(ctx,px509) \ SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509) # define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \ @@ -1199,13 +1339,13 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTX_clear_extra_chain_certs(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL) # define SSL_CTX_set0_chain(ctx,sk) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk) + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk)) # define SSL_CTX_set1_chain(ctx,sk) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk) + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk)) # define SSL_CTX_add0_chain_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509) + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) # define SSL_CTX_add1_chain_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509) + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) # define SSL_CTX_get0_chain_certs(ctx,px509) \ SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) # define SSL_CTX_clear_chain_certs(ctx) \ @@ -1213,25 +1353,25 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTX_build_cert_chain(ctx, flags) \ SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) # define SSL_CTX_select_current_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509) + SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) # define SSL_CTX_set_current_cert(ctx, op) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) # define SSL_CTX_set0_verify_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st) + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) # define SSL_CTX_set1_verify_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st) + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) # define SSL_CTX_set0_chain_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st) + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) # define SSL_CTX_set1_chain_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st) + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) # define SSL_set0_chain(ctx,sk) \ - SSL_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk) + SSL_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk)) # define SSL_set1_chain(ctx,sk) \ - SSL_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk) + SSL_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk)) # define SSL_add0_chain_cert(ctx,x509) \ - SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509) + SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) # define SSL_add1_chain_cert(ctx,x509) \ - SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509) + SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) # define SSL_get0_chain_certs(ctx,px509) \ SSL_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) # define SSL_clear_chain_certs(ctx) \ @@ -1239,92 +1379,119 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_build_cert_chain(s, flags) \ SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) # define SSL_select_current_cert(ctx,x509) \ - SSL_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509) + SSL_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) # define SSL_set_current_cert(ctx,op) \ SSL_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) # define SSL_set0_verify_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st) + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) # define SSL_set1_verify_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st) + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) # define SSL_set0_chain_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st) + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) # define SSL_set1_chain_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st) -# define SSL_get1_curves(ctx, s) \ - SSL_ctrl(ctx,SSL_CTRL_GET_CURVES,0,(char *)s) -# define SSL_CTX_set1_curves(ctx, clist, clistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist) -# define SSL_CTX_set1_curves_list(ctx, s) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s) -# define SSL_set1_curves(ctx, clist, clistlen) \ - SSL_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist) -# define SSL_set1_curves_list(ctx, s) \ - SSL_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s) -# define SSL_get_shared_curve(s, n) \ - SSL_ctrl(s,SSL_CTRL_GET_SHARED_CURVE,n,NULL) + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) +# define SSL_get1_groups(ctx, s) \ + SSL_ctrl(ctx,SSL_CTRL_GET_GROUPS,0,(char *)(s)) +# define SSL_CTX_set1_groups(ctx, glist, glistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist)) +# define SSL_CTX_set1_groups_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s)) +# define SSL_set1_groups(ctx, glist, glistlen) \ + SSL_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist)) +# define SSL_set1_groups_list(ctx, s) \ + SSL_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s)) +# define SSL_get_shared_group(s, n) \ + SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL) # define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)slist) + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) # define SSL_CTX_set1_sigalgs_list(ctx, s) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s) + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(s)) # define SSL_set1_sigalgs(ctx, slist, slistlen) \ - SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)slist) + SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) # define SSL_set1_sigalgs_list(ctx, s) \ - SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s) + SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(s)) # define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)slist) + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) # define SSL_CTX_set1_client_sigalgs_list(ctx, s) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s) + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(s)) # define SSL_set1_client_sigalgs(ctx, slist, slistlen) \ - SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,clistlen,(int *)slist) + SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,clistlen,(int *)(slist)) # define SSL_set1_client_sigalgs_list(ctx, s) \ - SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s) + SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(s)) # define SSL_get0_certificate_types(s, clist) \ - SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)clist) + SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)(clist)) # define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist) + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen, \ + (char *)(clist)) # define SSL_set1_client_certificate_types(s, clist, clistlen) \ - SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist) + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)(clist)) +# define SSL_get_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_SIGNATURE_NID,0,pn) # define SSL_get_peer_signature_nid(s, pn) \ SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn) -# define SSL_get_server_tmp_key(s, pk) \ - SSL_ctrl(s,SSL_CTRL_GET_SERVER_TMP_KEY,0,pk) +# define SSL_get_peer_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_TMP_KEY,0,pk) +# define SSL_get_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_TMP_KEY,0,pk) # define SSL_get0_raw_cipherlist(s, plst) \ SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,plst) # define SSL_get0_ec_point_formats(s, plst) \ SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,plst) -#define SSL_CTX_set_min_proto_version(ctx, version) \ +# define SSL_CTX_set_min_proto_version(ctx, version) \ SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) -#define SSL_CTX_set_max_proto_version(ctx, version) \ +# define SSL_CTX_set_max_proto_version(ctx, version) \ SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) -#define SSL_CTX_get_min_proto_version(ctx) \ +# define SSL_CTX_get_min_proto_version(ctx) \ SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) -#define SSL_CTX_get_max_proto_version(ctx) \ +# define SSL_CTX_get_max_proto_version(ctx) \ SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) -#define SSL_set_min_proto_version(s, version) \ +# define SSL_set_min_proto_version(s, version) \ SSL_ctrl(s, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) -#define SSL_set_max_proto_version(s, version) \ +# define SSL_set_max_proto_version(s, version) \ SSL_ctrl(s, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) -#define SSL_get_min_proto_version(s) \ +# define SSL_get_min_proto_version(s) \ SSL_ctrl(s, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) -#define SSL_get_max_proto_version(s) \ +# define SSL_get_max_proto_version(s) \ SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) -#if OPENSSL_API_COMPAT < 0x10100000L +/* Backwards compatibility, original 1.1.0 names */ +# define SSL_CTRL_GET_SERVER_TMP_KEY \ + SSL_CTRL_GET_PEER_TMP_KEY +# define SSL_get_server_tmp_key(s, pk) \ + SSL_get_peer_tmp_key(s, pk) + +/* + * The following symbol names are old and obsolete. They are kept + * for compatibility reasons only and should not be used anymore. + */ +# define SSL_CTRL_GET_CURVES SSL_CTRL_GET_GROUPS +# define SSL_CTRL_SET_CURVES SSL_CTRL_SET_GROUPS +# define SSL_CTRL_SET_CURVES_LIST SSL_CTRL_SET_GROUPS_LIST +# define SSL_CTRL_GET_SHARED_CURVE SSL_CTRL_GET_SHARED_GROUP + +# define SSL_get1_curves SSL_get1_groups +# define SSL_CTX_set1_curves SSL_CTX_set1_groups +# define SSL_CTX_set1_curves_list SSL_CTX_set1_groups_list +# define SSL_set1_curves SSL_set1_groups +# define SSL_set1_curves_list SSL_set1_groups_list +# define SSL_get_shared_curve SSL_get_shared_group + + +# if OPENSSL_API_COMPAT < 0x10100000L /* Provide some compatibility macros for removed functionality. */ -# define SSL_CTX_need_tmp_RSA(ctx) 0 -# define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 -# define SSL_need_tmp_RSA(ssl) 0 -# define SSL_set_tmp_rsa(ssl,rsa) 1 -# define SSL_CTX_set_ecdh_auto(dummy, onoff) ((onoff) != 0) -# define SSL_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +# define SSL_CTX_need_tmp_RSA(ctx) 0 +# define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 +# define SSL_need_tmp_RSA(ssl) 0 +# define SSL_set_tmp_rsa(ssl,rsa) 1 +# define SSL_CTX_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +# define SSL_set_ecdh_auto(dummy, onoff) ((onoff) != 0) /* * We "pretend" to call the callback to avoid warnings about unused static * functions. */ -# define SSL_CTX_set_tmp_rsa_callback(ctx, cb) while(0) (cb)(NULL, 0, 0) -# define SSL_set_tmp_rsa_callback(ssl, cb) while(0) (cb)(NULL, 0, 0) -#endif - +# define SSL_CTX_set_tmp_rsa_callback(ctx, cb) while(0) (cb)(NULL, 0, 0) +# define SSL_set_tmp_rsa_callback(ssl, cb) while(0) (cb)(NULL, 0, 0) +# endif __owur const BIO_METHOD *BIO_f_ssl(void); __owur BIO *BIO_new_ssl(SSL_CTX *ctx, int client); __owur BIO *BIO_new_ssl_connect(SSL_CTX *ctx); @@ -1340,18 +1507,24 @@ __owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); __owur long SSL_CTX_get_timeout(const SSL_CTX *ctx); __owur X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); +void SSL_CTX_set1_cert_store(SSL_CTX *, X509_STORE *); __owur int SSL_want(const SSL *s); __owur int SSL_clear(SSL *s); void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); __owur const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); +__owur const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s); __owur int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits); __owur const char *SSL_CIPHER_get_version(const SSL_CIPHER *c); __owur const char *SSL_CIPHER_get_name(const SSL_CIPHER *c); +__owur const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); +__owur const char *OPENSSL_cipher_name(const char *rfc_name); __owur uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c); +__owur uint16_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *c); __owur int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c); __owur int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c); +__owur const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c); __owur int SSL_CIPHER_is_aead(const SSL_CIPHER *c); __owur int SSL_get_fd(const SSL *s); @@ -1373,6 +1546,8 @@ void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); __owur BIO *SSL_get_rbio(const SSL *s); __owur BIO *SSL_get_wbio(const SSL *s); __owur int SSL_set_cipher_list(SSL *s, const char *str); +__owur int SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str); +__owur int SSL_set_ciphersuites(SSL *s, const char *str); void SSL_set_read_ahead(SSL *s, int yes); __owur int SSL_get_verify_mode(const SSL *s); __owur int SSL_get_verify_depth(const SSL *s); @@ -1382,17 +1557,28 @@ void SSL_set_verify_depth(SSL *s, int depth); void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); # ifndef OPENSSL_NO_RSA __owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); -__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const unsigned char *d, long len); +__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const unsigned char *d, + long len); # endif __owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); __owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, - long len); + long len); __owur int SSL_use_certificate(SSL *ssl, X509 *x); __owur int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); +__owur int SSL_use_cert_and_key(SSL *ssl, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); + + +/* serverinfo file format versions */ +# define SSL_SERVERINFOV1 1 +# define SSL_SERVERINFOV2 2 /* Set serverinfo data for the current active cert. */ __owur int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, - size_t serverinfo_length); + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version, + const unsigned char *serverinfo, + size_t serverinfo_length); __owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); #ifndef OPENSSL_NO_RSA @@ -1403,24 +1589,27 @@ __owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); __owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type); #ifndef OPENSSL_NO_RSA -__owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); +__owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, + int type); #endif -__owur int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type); -__owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type); +__owur int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, + int type); +__owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, + int type); /* PEM type */ __owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); __owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file); __owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); __owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, - const char *file); + const char *file); int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, const char *dir); -#if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_load_error_strings() \ +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_load_error_strings() \ OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) -#endif +# endif __owur const char *SSL_state_string(const SSL *s); __owur const char *SSL_rstate_string(const SSL *s); @@ -1431,24 +1620,40 @@ __owur long SSL_SESSION_set_time(SSL_SESSION *s, long t); __owur long SSL_SESSION_get_timeout(const SSL_SESSION *s); __owur long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); __owur int SSL_SESSION_get_protocol_version(const SSL_SESSION *s); +__owur int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version); + __owur const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s); +__owur int SSL_SESSION_set1_hostname(SSL_SESSION *s, const char *hostname); +void SSL_SESSION_get0_alpn_selected(const SSL_SESSION *s, + const unsigned char **alpn, + size_t *len); +__owur int SSL_SESSION_set1_alpn_selected(SSL_SESSION *s, + const unsigned char *alpn, + size_t len); __owur const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s); +__owur int SSL_SESSION_set_cipher(SSL_SESSION *s, const SSL_CIPHER *cipher); __owur int SSL_SESSION_has_ticket(const SSL_SESSION *s); __owur unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s); void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick, - size_t *len); + size_t *len); +__owur uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *s); +__owur int SSL_SESSION_set_max_early_data(SSL_SESSION *s, + uint32_t max_early_data); __owur int SSL_copy_session_id(SSL *to, const SSL *from); __owur X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); -__owur int SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx, - unsigned int sid_ctx_len); +__owur int SSL_SESSION_set1_id_context(SSL_SESSION *s, + const unsigned char *sid_ctx, + unsigned int sid_ctx_len); __owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid, unsigned int sid_len); +__owur int SSL_SESSION_is_resumable(const SSL_SESSION *s); __owur SSL_SESSION *SSL_SESSION_new(void); +__owur SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *src); const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len); const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s, - unsigned int *len); + unsigned int *len); __owur unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); # ifndef OPENSSL_NO_STDIO int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); @@ -1459,12 +1664,13 @@ int SSL_SESSION_up_ref(SSL_SESSION *ses); void SSL_SESSION_free(SSL_SESSION *ses); __owur int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); __owur int SSL_set_session(SSL *to, SSL_SESSION *session); -int SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c); -int SSL_CTX_remove_session(SSL_CTX *, SSL_SESSION *c); -__owur int SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB); -__owur int SSL_set_generate_session_id(SSL *, GEN_SESSION_CB); -__owur int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, - unsigned int id_len); +int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session); +int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session); +__owur int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb); +__owur int SSL_set_generate_session_id(SSL *s, GEN_SESSION_CB cb); +__owur int SSL_has_matching_session_id(const SSL *s, + const unsigned char *id, + unsigned int id_len); SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length); @@ -1487,14 +1693,16 @@ void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), # ifndef OPENSSL_NO_RSA __owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); __owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, - long len); + long len); # endif __owur int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); __owur int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, - const unsigned char *d, long len); + const unsigned char *d, long len); __owur int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); __owur int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, - const unsigned char *d); + const unsigned char *d); +__owur int SSL_CTX_use_cert_and_key(SSL_CTX *ctx, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb); void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u); @@ -1508,19 +1716,20 @@ void *SSL_get_default_passwd_cb_userdata(SSL *s); __owur int SSL_CTX_check_private_key(const SSL_CTX *ctx); __owur int SSL_check_private_key(const SSL *ctx); -__owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx, - unsigned int sid_ctx_len); +__owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, + const unsigned char *sid_ctx, + unsigned int sid_ctx_len); SSL *SSL_new(SSL_CTX *ctx); int SSL_up_ref(SSL *s); int SSL_is_dtls(const SSL *s); __owur int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, - unsigned int sid_ctx_len); + unsigned int sid_ctx_len); -__owur int SSL_CTX_set_purpose(SSL_CTX *s, int purpose); -__owur int SSL_set_purpose(SSL *s, int purpose); -__owur int SSL_CTX_set_trust(SSL_CTX *s, int trust); -__owur int SSL_set_trust(SSL *s, int trust); +__owur int SSL_CTX_set_purpose(SSL_CTX *ctx, int purpose); +__owur int SSL_set_purpose(SSL *ssl, int purpose); +__owur int SSL_CTX_set_trust(SSL_CTX *ctx, int trust); +__owur int SSL_set_trust(SSL *ssl, int trust); __owur int SSL_set1_host(SSL *s, const char *hostname); __owur int SSL_add1_host(SSL *s, const char *hostname); @@ -1580,6 +1789,28 @@ __owur char *SSL_get_srp_username(SSL *s); __owur char *SSL_get_srp_userinfo(SSL *s); # endif +/* + * ClientHello callback and helpers. + */ + +# define SSL_CLIENT_HELLO_SUCCESS 1 +# define SSL_CLIENT_HELLO_ERROR 0 +# define SSL_CLIENT_HELLO_RETRY (-1) + +typedef int (*SSL_client_hello_cb_fn) (SSL *s, int *al, void *arg); +void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb, + void *arg); +int SSL_client_hello_isv2(SSL *s); +unsigned int SSL_client_hello_get0_legacy_version(SSL *s); +size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_compression_methods(SSL *s, + const unsigned char **out); +int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen); +int SSL_client_hello_get0_ext(SSL *s, unsigned int type, + const unsigned char **out, size_t *outlen); + void SSL_certs_clear(SSL *s); void SSL_free(SSL *ssl); # ifdef OSSL_ASYNC_FD @@ -1593,15 +1824,34 @@ __owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, size_t *numdelfds); # endif __owur int SSL_accept(SSL *ssl); +__owur int SSL_stateless(SSL *s); __owur int SSL_connect(SSL *ssl); __owur int SSL_read(SSL *ssl, void *buf, int num); +__owur int SSL_read_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); + +# define SSL_READ_EARLY_DATA_ERROR 0 +# define SSL_READ_EARLY_DATA_SUCCESS 1 +# define SSL_READ_EARLY_DATA_FINISH 2 + +__owur int SSL_read_early_data(SSL *s, void *buf, size_t num, + size_t *readbytes); __owur int SSL_peek(SSL *ssl, void *buf, int num); +__owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); __owur int SSL_write(SSL *ssl, const void *buf, int num); +__owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written); +__owur int SSL_write_early_data(SSL *s, const void *buf, size_t num, + size_t *written); long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg); long SSL_callback_ctrl(SSL *, int, void (*)(void)); long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void)); +# define SSL_EARLY_DATA_NOT_SENT 0 +# define SSL_EARLY_DATA_REJECTED 1 +# define SSL_EARLY_DATA_ACCEPTED 2 + +__owur int SSL_get_early_data_status(const SSL *s); + __owur int SSL_get_error(const SSL *s, int ret_code); __owur const char *SSL_get_version(const SSL *s); @@ -1610,8 +1860,8 @@ __owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); # ifndef OPENSSL_NO_SSL3_METHOD DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_method(void)) /* SSLv3 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_server_method(void)) /* SSLv3 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_client_method(void)) /* SSLv3 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_client_method(void)) # endif #define SSLv23_method TLS_method @@ -1625,57 +1875,73 @@ __owur const SSL_METHOD *TLS_client_method(void); # ifndef OPENSSL_NO_TLS1_METHOD DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void)) /* TLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void)) /* TLSv1.0 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void)) # endif # ifndef OPENSSL_NO_TLS1_1_METHOD DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(void)) /* TLSv1.1 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_client_method(void)) /* TLSv1.1 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_client_method(void)) # endif # ifndef OPENSSL_NO_TLS1_2_METHOD DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(void)) /* TLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_client_method(void)) /* TLSv1.2 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_client_method(void)) # endif # ifndef OPENSSL_NO_DTLS1_METHOD DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_method(void)) /* DTLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_server_method(void)) /* DTLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_client_method(void)) /* DTLSv1.0 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_client_method(void)) # endif # ifndef OPENSSL_NO_DTLS1_2_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_method(void)) /* DTLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_server_method(void)) /* DTLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_client_method(void)) /* DTLSv1.2 */ -#endif +/* DTLSv1.2 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_client_method(void)) +# endif __owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ __owur const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ __owur const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ +__owur size_t DTLS_get_data_mtu(const SSL *s); + __owur STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); __owur STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx); __owur STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s); __owur STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s); __owur int SSL_do_handshake(SSL *s); +int SSL_key_update(SSL *s, int updatetype); +int SSL_get_key_update_type(const SSL *s); int SSL_renegotiate(SSL *s); -__owur int SSL_renegotiate_abbreviated(SSL *s); -__owur int SSL_renegotiate_pending(SSL *s); +int SSL_renegotiate_abbreviated(SSL *s); +__owur int SSL_renegotiate_pending(const SSL *s); int SSL_shutdown(SSL *s); +__owur int SSL_verify_client_post_handshake(SSL *s); +void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val); +void SSL_set_post_handshake_auth(SSL *s, int val); -__owur const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx); -__owur const SSL_METHOD *SSL_get_ssl_method(SSL *s); +__owur const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx); +__owur const SSL_METHOD *SSL_get_ssl_method(const SSL *s); __owur int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); __owur const char *SSL_alert_type_string_long(int value); __owur const char *SSL_alert_type_string(int value); __owur const char *SSL_alert_desc_string_long(int value); __owur const char *SSL_alert_desc_string(int value); +void SSL_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set0_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +__owur const STACK_OF(X509_NAME) *SSL_get0_CA_list(const SSL *s); +__owur const STACK_OF(X509_NAME) *SSL_CTX_get0_CA_list(const SSL_CTX *ctx); +__owur int SSL_add1_to_CA_list(SSL *ssl, const X509 *x); +__owur int SSL_CTX_add1_to_CA_list(SSL_CTX *ctx, const X509 *x); +__owur const STACK_OF(X509_NAME) *SSL_get0_peer_CA_list(const SSL *s); + void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); __owur STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); @@ -1688,19 +1954,20 @@ void SSL_set_accept_state(SSL *s); __owur long SSL_get_default_timeout(const SSL *s); -#if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_library_init() OPENSSL_init_ssl(0, NULL) -#endif +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_library_init() OPENSSL_init_ssl(0, NULL) +# endif __owur char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); -__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk); +__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(const STACK_OF(X509_NAME) *sk); __owur SSL *SSL_dup(SSL *ssl); __owur X509 *SSL_get_certificate(const SSL *ssl); /* * EVP_PKEY - */ struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); + */ +struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); __owur X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); __owur EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); @@ -1717,7 +1984,7 @@ __owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); __owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); __owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); __owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, - const char *CApath); + const char *CApath); # define SSL_get0_session SSL_get_session/* just peek at pointer */ __owur SSL_SESSION *SSL_get_session(const SSL *ssl); __owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ @@ -1737,8 +2004,11 @@ __owur size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen); __owur size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen); -__owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *ssl, +__owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *sess, unsigned char *out, size_t outlen); +__owur int SSL_SESSION_set1_master_key(SSL_SESSION *sess, + const unsigned char *in, size_t len); +uint8_t SSL_SESSION_get_max_fragment_length(const SSL_SESSION *sess); #define SSL_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, l, p, newf, dupf, freef) @@ -1805,33 +2075,37 @@ void SSL_set_tmp_dh_callback(SSL *ssl, int keylength)); # endif -__owur const COMP_METHOD *SSL_get_current_compression(SSL *s); -__owur const COMP_METHOD *SSL_get_current_expansion(SSL *s); +__owur const COMP_METHOD *SSL_get_current_compression(const SSL *s); +__owur const COMP_METHOD *SSL_get_current_expansion(const SSL *s); __owur const char *SSL_COMP_get_name(const COMP_METHOD *comp); __owur const char *SSL_COMP_get0_name(const SSL_COMP *comp); __owur int SSL_COMP_get_id(const SSL_COMP *comp); STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); __owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) - *meths); -#if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_COMP_free_compression_methods() while(0) continue -#endif + *meths); +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_COMP_free_compression_methods() while(0) continue +# endif __owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c); int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c); +int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len, + int isv2format, STACK_OF(SSL_CIPHER) **sk, + STACK_OF(SSL_CIPHER) **scsvs); /* TLS extensions functions */ __owur int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); -__owur int SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb, - void *arg); +__owur int SSL_set_session_ticket_ext_cb(SSL *s, + tls_session_ticket_ext_cb_fn cb, + void *arg); /* Pre-shared secret session resumption functions */ __owur int SSL_set_session_secret_cb(SSL *s, - tls_session_secret_cb_fn tls_session_secret_cb, - void *arg); + tls_session_secret_cb_fn session_secret_cb, + void *arg); void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx, int (*cb) (SSL *ssl, @@ -1840,8 +2114,27 @@ void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx, void SSL_set_not_resumable_session_callback(SSL *ssl, int (*cb) (SSL *ssl, - int - is_forward_secure)); + int is_forward_secure)); + +void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg); +void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx); +int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size); + +void SSL_set_record_padding_callback(SSL *ssl, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg); +void *SSL_get_record_padding_callback_arg(const SSL *ssl); +int SSL_set_block_padding(SSL *ssl, size_t block_size); + +int SSL_set_num_tickets(SSL *s, size_t num_tickets); +size_t SSL_get_num_tickets(const SSL *s); +int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); +size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx); + # if OPENSSL_API_COMPAT < 0x10100000L # define SSL_cache_hit(s) SSL_session_reused(s) # endif @@ -1853,7 +2146,8 @@ __owur __owur SSL_CONF_CTX *SSL_CONF_CTX_new(void); int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx); void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx); unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags); -__owur unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags); +__owur unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, + unsigned int flags); __owur int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre); void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl); @@ -1870,7 +2164,6 @@ int SSL_CTX_config(SSL_CTX *ctx, const char *name); # ifndef OPENSSL_NO_SSL_TRACE void SSL_trace(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg); -__owur const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); # endif # ifndef OPENSSL_NO_SOCK @@ -1885,8 +2178,8 @@ int DTLSv1_listen(SSL *s, BIO_ADDR *client); * May return a negative integer if an error occurs. * A connection should be aborted if the SCTs are deemed insufficient. */ -typedef int(*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx, - const STACK_OF(SCT) *scts, void *arg); +typedef int (*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx, + const STACK_OF(SCT) *scts, void *arg); /* * Sets a |callback| that is invoked upon receipt of ServerHelloDone to validate @@ -2036,21 +2329,22 @@ const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx); void SSL_set_security_level(SSL *s, int level); __owur int SSL_get_security_level(const SSL *s); void SSL_set_security_callback(SSL *s, - int (*cb) (const SSL *s, const SSL_CTX *ctx, int op, - int bits, int nid, void *other, - void *ex)); -int (*SSL_get_security_callback(const SSL *s)) (const SSL *s, const SSL_CTX *ctx, int op, - int bits, int nid, - void *other, void *ex); + int (*cb) (const SSL *s, const SSL_CTX *ctx, + int op, int bits, int nid, + void *other, void *ex)); +int (*SSL_get_security_callback(const SSL *s)) (const SSL *s, + const SSL_CTX *ctx, int op, + int bits, int nid, void *other, + void *ex); void SSL_set0_security_ex_data(SSL *s, void *ex); __owur void *SSL_get0_security_ex_data(const SSL *s); void SSL_CTX_set_security_level(SSL_CTX *ctx, int level); __owur int SSL_CTX_get_security_level(const SSL_CTX *ctx); void SSL_CTX_set_security_callback(SSL_CTX *ctx, - int (*cb) (const SSL *s, const SSL_CTX *ctx, int op, - int bits, int nid, void *other, - void *ex)); + int (*cb) (const SSL *s, const SSL_CTX *ctx, + int op, int bits, int nid, + void *other, void *ex)); int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s, const SSL_CTX *ctx, int op, int bits, @@ -2061,10 +2355,10 @@ void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex); __owur void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx); /* OPENSSL_INIT flag 0x010000 reserved for internal use */ -#define OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000L -#define OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000L +# define OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000L +# define OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000L -#define OPENSSL_INIT_SSL_DEFAULT \ +# define OPENSSL_INIT_SSL_DEFAULT \ (OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS) int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); @@ -2073,493 +2367,70 @@ int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); __owur const struct openssl_ssl_test_functions *SSL_test_functions(void); # endif +__owur int SSL_free_buffers(SSL *ssl); +__owur int SSL_alloc_buffers(SSL *ssl); + +/* Status codes passed to the decrypt session ticket callback. Some of these + * are for internal use only and are never passed to the callback. */ +typedef int SSL_TICKET_STATUS; + +/* Support for ticket appdata */ +/* fatal error, malloc failure */ +# define SSL_TICKET_FATAL_ERR_MALLOC 0 +/* fatal error, either from parsing or decrypting the ticket */ +# define SSL_TICKET_FATAL_ERR_OTHER 1 +/* No ticket present */ +# define SSL_TICKET_NONE 2 +/* Empty ticket present */ +# define SSL_TICKET_EMPTY 3 +/* the ticket couldn't be decrypted */ +# define SSL_TICKET_NO_DECRYPT 4 +/* a ticket was successfully decrypted */ +# define SSL_TICKET_SUCCESS 5 +/* same as above but the ticket needs to be renewed */ +# define SSL_TICKET_SUCCESS_RENEW 6 + +/* Return codes for the decrypt session ticket callback */ +typedef int SSL_TICKET_RETURN; + +/* An error occurred */ +#define SSL_TICKET_RETURN_ABORT 0 +/* Do not use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE 1 +/* Do not use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE_RENEW 2 +/* Use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE 3 +/* Use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE_RENEW 4 + +typedef int (*SSL_CTX_generate_session_ticket_fn)(SSL *s, void *arg); +typedef SSL_TICKET_RETURN (*SSL_CTX_decrypt_session_ticket_fn)(SSL *s, SSL_SESSION *ss, + const unsigned char *keyname, + size_t keyname_length, + SSL_TICKET_STATUS status, + void *arg); +int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx, + SSL_CTX_generate_session_ticket_fn gen_cb, + SSL_CTX_decrypt_session_ticket_fn dec_cb, + void *arg); +int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len); +int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len); + extern const char SSL_version_str[]; -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ +typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us); -int ERR_load_SSL_strings(void); +void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb); -/* Error codes for the SSL functions. */ -/* Function codes. */ -# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 -# define SSL_F_CT_MOVE_SCTS 345 -# define SSL_F_CT_STRICT 349 -# define SSL_F_D2I_SSL_SESSION 103 -# define SSL_F_DANE_CTX_ENABLE 347 -# define SSL_F_DANE_MTYPE_SET 393 -# define SSL_F_DANE_TLSA_ADD 394 -# define SSL_F_DO_DTLS1_WRITE 245 -# define SSL_F_DO_SSL3_WRITE 104 -# define SSL_F_DTLS1_BUFFER_RECORD 247 -# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 318 -# define SSL_F_DTLS1_HEARTBEAT 305 -# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 -# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 -# define SSL_F_DTLS1_PROCESS_RECORD 257 -# define SSL_F_DTLS1_READ_BYTES 258 -# define SSL_F_DTLS1_READ_FAILED 339 -# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 390 -# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 -# define SSL_F_DTLSV1_LISTEN 350 -# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 371 -# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 385 -# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 370 -# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 386 -# define SSL_F_DTLS_WAIT_FOR_DRY 592 -# define SSL_F_OPENSSL_INIT_SSL 342 -# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 417 -# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 418 -# define SSL_F_READ_STATE_MACHINE 352 -# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 -# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 -# define SSL_F_SSL3_CTRL 213 -# define SSL_F_SSL3_CTX_CTRL 133 -# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 293 -# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 -# define SSL_F_SSL3_FINAL_FINISH_MAC 285 -# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 -# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 -# define SSL_F_SSL3_GET_RECORD 143 -# define SSL_F_SSL3_INIT_FINISHED_MAC 397 -# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 -# define SSL_F_SSL3_READ_BYTES 148 -# define SSL_F_SSL3_READ_N 149 -# define SSL_F_SSL3_SETUP_KEY_BLOCK 157 -# define SSL_F_SSL3_SETUP_READ_BUFFER 156 -# define SSL_F_SSL3_SETUP_WRITE_BUFFER 291 -# define SSL_F_SSL3_TAKE_MAC 425 -# define SSL_F_SSL3_WRITE_BYTES 158 -# define SSL_F_SSL3_WRITE_PENDING 159 -# define SSL_F_SSL_ADD_CERT_CHAIN 316 -# define SSL_F_SSL_ADD_CERT_TO_BUF 319 -# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298 -# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277 -# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 307 -# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 215 -# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 216 -# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 299 -# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278 -# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 308 -# define SSL_F_SSL_BAD_METHOD 160 -# define SSL_F_SSL_BUILD_CERT_CHAIN 332 -# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161 -# define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 346 -# define SSL_F_SSL_CERT_DUP 221 -# define SSL_F_SSL_CERT_NEW 162 -# define SSL_F_SSL_CERT_SET0_CHAIN 340 -# define SSL_F_SSL_CHECK_PRIVATE_KEY 163 -# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280 -# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279 -# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 230 -# define SSL_F_SSL_CIPHER_STRENGTH_SORT 231 -# define SSL_F_SSL_CLEAR 164 -# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165 -# define SSL_F_SSL_CONF_CMD 334 -# define SSL_F_SSL_CREATE_CIPHER_LIST 166 -# define SSL_F_SSL_CTRL 232 -# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168 -# define SSL_F_SSL_CTX_ENABLE_CT 398 -# define SSL_F_SSL_CTX_MAKE_PROFILES 309 -# define SSL_F_SSL_CTX_NEW 169 -# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 343 -# define SSL_F_SSL_CTX_SET_CIPHER_LIST 269 -# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 290 -# define SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK 396 -# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 -# define SSL_F_SSL_CTX_SET_SSL_VERSION 170 -# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 173 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY 174 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 175 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 176 -# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 272 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179 -# define SSL_F_SSL_CTX_USE_SERVERINFO 336 -# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 337 -# define SSL_F_SSL_DANE_DUP 403 -# define SSL_F_SSL_DANE_ENABLE 395 -# define SSL_F_SSL_DO_CONFIG 391 -# define SSL_F_SSL_DO_HANDSHAKE 180 -# define SSL_F_SSL_DUP_CA_LIST 408 -# define SSL_F_SSL_ENABLE_CT 402 -# define SSL_F_SSL_GET_NEW_SESSION 181 -# define SSL_F_SSL_GET_PREV_SESSION 217 -# define SSL_F_SSL_GET_SERVER_CERT_INDEX 322 -# define SSL_F_SSL_GET_SIGN_PKEY 183 -# define SSL_F_SSL_INIT_WBIO_BUFFER 184 -# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 -# define SSL_F_SSL_MODULE_INIT 392 -# define SSL_F_SSL_NEW 186 -# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 300 -# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 302 -# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 310 -# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 301 -# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 303 -# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 311 -# define SSL_F_SSL_PEEK 270 -# define SSL_F_SSL_READ 223 -# define SSL_F_SSL_RENEGOTIATE 516 -# define SSL_F_SSL_RENEGOTIATE_ABBREVIATED 546 -# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 -# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 -# define SSL_F_SSL_SESSION_DUP 348 -# define SSL_F_SSL_SESSION_NEW 189 -# define SSL_F_SSL_SESSION_PRINT_FP 190 -# define SSL_F_SSL_SESSION_SET1_ID 423 -# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 -# define SSL_F_SSL_SET_ALPN_PROTOS 344 -# define SSL_F_SSL_SET_CERT 191 -# define SSL_F_SSL_SET_CIPHER_LIST 271 -# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 399 -# define SSL_F_SSL_SET_FD 192 -# define SSL_F_SSL_SET_PKEY 193 -# define SSL_F_SSL_SET_RFD 194 -# define SSL_F_SSL_SET_SESSION 195 -# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 218 -# define SSL_F_SSL_SET_SESSION_TICKET_EXT 294 -# define SSL_F_SSL_SET_WFD 196 -# define SSL_F_SSL_SHUTDOWN 224 -# define SSL_F_SSL_SRP_CTX_INIT 313 -# define SSL_F_SSL_START_ASYNC_JOB 389 -# define SSL_F_SSL_UNDEFINED_FUNCTION 197 -# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 244 -# define SSL_F_SSL_USE_CERTIFICATE 198 -# define SSL_F_SSL_USE_CERTIFICATE_ASN1 199 -# define SSL_F_SSL_USE_CERTIFICATE_FILE 200 -# define SSL_F_SSL_USE_PRIVATEKEY 201 -# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 202 -# define SSL_F_SSL_USE_PRIVATEKEY_FILE 203 -# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 273 -# define SSL_F_SSL_USE_RSAPRIVATEKEY 204 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 205 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206 -# define SSL_F_SSL_VALIDATE_CT 400 -# define SSL_F_SSL_VERIFY_CERT_CHAIN 207 -# define SSL_F_SSL_WRITE 208 -# define SSL_F_STATE_MACHINE 353 -# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 -# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 -# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 341 -# define SSL_F_TLS1_ENC 401 -# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 -# define SSL_F_TLS1_GET_CURVELIST 338 -# define SSL_F_TLS1_PRF 284 -# define SSL_F_TLS1_SETUP_KEY_BLOCK 211 -# define SSL_F_TLS1_SET_SERVER_SIGALGS 335 -# define SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 354 -# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 372 -# define SSL_F_TLS_CONSTRUCT_CKE_DHE 404 -# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 405 -# define SSL_F_TLS_CONSTRUCT_CKE_GOST 406 -# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 407 -# define SSL_F_TLS_CONSTRUCT_CKE_RSA 409 -# define SSL_F_TLS_CONSTRUCT_CKE_SRP 410 -# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 355 -# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 356 -# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 357 -# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 358 -# define SSL_F_TLS_CONSTRUCT_FINISHED 359 -# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 373 -# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 428 -# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 374 -# define SSL_F_TLS_CONSTRUCT_SERVER_DONE 375 -# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 376 -# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 377 -# define SSL_F_TLS_GET_MESSAGE_BODY 351 -# define SSL_F_TLS_GET_MESSAGE_HEADER 387 -# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 378 -# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 384 -# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 360 -# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 361 -# define SSL_F_TLS_PROCESS_CERT_STATUS 362 -# define SSL_F_TLS_PROCESS_CERT_VERIFY 379 -# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 363 -# define SSL_F_TLS_PROCESS_CKE_DHE 411 -# define SSL_F_TLS_PROCESS_CKE_ECDHE 412 -# define SSL_F_TLS_PROCESS_CKE_GOST 413 -# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 414 -# define SSL_F_TLS_PROCESS_CKE_RSA 415 -# define SSL_F_TLS_PROCESS_CKE_SRP 416 -# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 380 -# define SSL_F_TLS_PROCESS_CLIENT_HELLO 381 -# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 382 -# define SSL_F_TLS_PROCESS_FINISHED 364 -# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 365 -# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 366 -# define SSL_F_TLS_PROCESS_NEXT_PROTO 383 -# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 367 -# define SSL_F_TLS_PROCESS_SERVER_DONE 368 -# define SSL_F_TLS_PROCESS_SERVER_HELLO 369 -# define SSL_F_TLS_PROCESS_SKE_DHE 419 -# define SSL_F_TLS_PROCESS_SKE_ECDHE 420 -# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 421 -# define SSL_F_TLS_PROCESS_SKE_SRP 422 -# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 220 - -/* Reason codes. */ -# define SSL_R_APP_DATA_IN_HANDSHAKE 100 -# define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 -# define SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE 143 -# define SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE 158 -# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 -# define SSL_R_BAD_DATA 390 -# define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 -# define SSL_R_BAD_DECOMPRESSION 107 -# define SSL_R_BAD_DH_VALUE 102 -# define SSL_R_BAD_DIGEST_LENGTH 111 -# define SSL_R_BAD_ECC_CERT 304 -# define SSL_R_BAD_ECPOINT 306 -# define SSL_R_BAD_HANDSHAKE_LENGTH 332 -# define SSL_R_BAD_HELLO_REQUEST 105 -# define SSL_R_BAD_LENGTH 271 -# define SSL_R_BAD_PACKET_LENGTH 115 -# define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 -# define SSL_R_BAD_RSA_ENCRYPT 119 -# define SSL_R_BAD_SIGNATURE 123 -# define SSL_R_BAD_SRP_A_LENGTH 347 -# define SSL_R_BAD_SRP_PARAMETERS 371 -# define SSL_R_BAD_SRTP_MKI_VALUE 352 -# define SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST 353 -# define SSL_R_BAD_SSL_FILETYPE 124 -# define SSL_R_BAD_VALUE 384 -# define SSL_R_BAD_WRITE_RETRY 127 -# define SSL_R_BIO_NOT_SET 128 -# define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG 129 -# define SSL_R_BN_LIB 130 -# define SSL_R_CA_DN_LENGTH_MISMATCH 131 -# define SSL_R_CA_KEY_TOO_SMALL 397 -# define SSL_R_CA_MD_TOO_WEAK 398 -# define SSL_R_CCS_RECEIVED_EARLY 133 -# define SSL_R_CERTIFICATE_VERIFY_FAILED 134 -# define SSL_R_CERT_CB_ERROR 377 -# define SSL_R_CERT_LENGTH_MISMATCH 135 -# define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 -# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 -# define SSL_R_CLIENTHELLO_TLSEXT 226 -# define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 -# define SSL_R_COMPRESSION_DISABLED 343 -# define SSL_R_COMPRESSION_FAILURE 141 -# define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE 307 -# define SSL_R_COMPRESSION_LIBRARY_ERROR 142 -# define SSL_R_CONNECTION_TYPE_NOT_SET 144 -# define SSL_R_CONTEXT_NOT_DANE_ENABLED 167 -# define SSL_R_COOKIE_GEN_CALLBACK_FAILURE 400 -# define SSL_R_COOKIE_MISMATCH 308 -# define SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED 206 -# define SSL_R_DANE_ALREADY_ENABLED 172 -# define SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL 173 -# define SSL_R_DANE_NOT_ENABLED 175 -# define SSL_R_DANE_TLSA_BAD_CERTIFICATE 180 -# define SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE 184 -# define SSL_R_DANE_TLSA_BAD_DATA_LENGTH 189 -# define SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH 192 -# define SSL_R_DANE_TLSA_BAD_MATCHING_TYPE 200 -# define SSL_R_DANE_TLSA_BAD_PUBLIC_KEY 201 -# define SSL_R_DANE_TLSA_BAD_SELECTOR 202 -# define SSL_R_DANE_TLSA_NULL_DATA 203 -# define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 145 -# define SSL_R_DATA_LENGTH_TOO_LONG 146 -# define SSL_R_DECRYPTION_FAILED 147 -# define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281 -# define SSL_R_DH_KEY_TOO_SMALL 394 -# define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 148 -# define SSL_R_DIGEST_CHECK_FAILED 149 -# define SSL_R_DTLS_MESSAGE_TOO_BIG 334 -# define SSL_R_DUPLICATE_COMPRESSION_ID 309 -# define SSL_R_ECC_CERT_NOT_FOR_SIGNING 318 -# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374 -# define SSL_R_EE_KEY_TOO_SMALL 399 -# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354 -# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 -# define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 -# define SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN 204 -# define SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE 194 -# define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 -# define SSL_R_EXTRA_DATA_IN_MESSAGE 153 -# define SSL_R_FAILED_TO_INIT_ASYNC 405 -# define SSL_R_FRAGMENTED_CLIENT_HELLO 401 -# define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 -# define SSL_R_HTTPS_PROXY_REQUEST 155 -# define SSL_R_HTTP_REQUEST 156 -# define SSL_R_ILLEGAL_SUITEB_DIGEST 380 -# define SSL_R_INAPPROPRIATE_FALLBACK 373 -# define SSL_R_INCONSISTENT_COMPRESSION 340 -# define SSL_R_INCONSISTENT_EXTMS 104 -# define SSL_R_INVALID_COMMAND 280 -# define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 -# define SSL_R_INVALID_CONFIGURATION_NAME 113 -# define SSL_R_INVALID_CT_VALIDATION_TYPE 212 -# define SSL_R_INVALID_NULL_CMD_NAME 385 -# define SSL_R_INVALID_SEQUENCE_NUMBER 402 -# define SSL_R_INVALID_SERVERINFO_DATA 388 -# define SSL_R_INVALID_SRP_USERNAME 357 -# define SSL_R_INVALID_STATUS_RESPONSE 328 -# define SSL_R_INVALID_TICKET_KEYS_LENGTH 325 -# define SSL_R_LENGTH_MISMATCH 159 -# define SSL_R_LENGTH_TOO_LONG 404 -# define SSL_R_LENGTH_TOO_SHORT 160 -# define SSL_R_LIBRARY_BUG 274 -# define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 -# define SSL_R_MISSING_DSA_SIGNING_CERT 165 -# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 -# define SSL_R_MISSING_RSA_CERTIFICATE 168 -# define SSL_R_MISSING_RSA_ENCRYPTING_CERT 169 -# define SSL_R_MISSING_RSA_SIGNING_CERT 170 -# define SSL_R_MISSING_SRP_PARAM 358 -# define SSL_R_MISSING_TMP_DH_KEY 171 -# define SSL_R_MISSING_TMP_ECDH_KEY 311 -# define SSL_R_NO_CERTIFICATES_RETURNED 176 -# define SSL_R_NO_CERTIFICATE_ASSIGNED 177 -# define SSL_R_NO_CERTIFICATE_SET 179 -# define SSL_R_NO_CIPHERS_AVAILABLE 181 -# define SSL_R_NO_CIPHERS_SPECIFIED 183 -# define SSL_R_NO_CIPHER_MATCH 185 -# define SSL_R_NO_CLIENT_CERT_METHOD 331 -# define SSL_R_NO_COMPRESSION_SPECIFIED 187 -# define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER 330 -# define SSL_R_NO_METHOD_SPECIFIED 188 -# define SSL_R_NO_PEM_EXTENSIONS 389 -# define SSL_R_NO_PRIVATE_KEY_ASSIGNED 190 -# define SSL_R_NO_PROTOCOLS_AVAILABLE 191 -# define SSL_R_NO_RENEGOTIATION 339 -# define SSL_R_NO_REQUIRED_DIGEST 324 -# define SSL_R_NO_SHARED_CIPHER 193 -# define SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS 376 -# define SSL_R_NO_SRTP_PROFILES 359 -# define SSL_R_NO_VALID_SCTS 216 -# define SSL_R_NO_VERIFY_COOKIE_CALLBACK 403 -# define SSL_R_NULL_SSL_CTX 195 -# define SSL_R_NULL_SSL_METHOD_PASSED 196 -# define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 -# define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 -# define SSL_R_PACKET_LENGTH_TOO_LONG 198 -# define SSL_R_PARSE_TLSEXT 227 -# define SSL_R_PATH_TOO_LONG 270 -# define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE 199 -# define SSL_R_PEM_NAME_BAD_PREFIX 391 -# define SSL_R_PEM_NAME_TOO_SHORT 392 -# define SSL_R_PIPELINE_FAILURE 406 -# define SSL_R_PROTOCOL_IS_SHUTDOWN 207 -# define SSL_R_PSK_IDENTITY_NOT_FOUND 223 -# define SSL_R_PSK_NO_CLIENT_CB 224 -# define SSL_R_PSK_NO_SERVER_CB 225 -# define SSL_R_READ_BIO_NOT_SET 211 -# define SSL_R_READ_TIMEOUT_EXPIRED 312 -# define SSL_R_RECORD_LENGTH_MISMATCH 213 -# define SSL_R_RECORD_TOO_SMALL 298 -# define SSL_R_RENEGOTIATE_EXT_TOO_LONG 335 -# define SSL_R_RENEGOTIATION_ENCODING_ERR 336 -# define SSL_R_RENEGOTIATION_MISMATCH 337 -# define SSL_R_REQUIRED_CIPHER_MISSING 215 -# define SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING 342 -# define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345 -# define SSL_R_SCT_VERIFICATION_FAILED 208 -# define SSL_R_SERVERHELLO_TLSEXT 275 -# define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277 -# define SSL_R_SHUTDOWN_WHILE_IN_INIT 407 -# define SSL_R_SIGNATURE_ALGORITHMS_ERROR 360 -# define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 220 -# define SSL_R_SRP_A_CALC 361 -# define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES 362 -# define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG 363 -# define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE 364 -# define SSL_R_SSL3_EXT_INVALID_SERVERNAME 319 -# define SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE 320 -# define SSL_R_SSL3_SESSION_ID_TOO_LONG 300 -# define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042 -# define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046 -# define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030 -# define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040 -# define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047 -# define SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041 -# define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 -# define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043 -# define SSL_R_SSL_COMMAND_SECTION_EMPTY 117 -# define SSL_R_SSL_COMMAND_SECTION_NOT_FOUND 125 -# define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION 228 -# define SSL_R_SSL_HANDSHAKE_FAILURE 229 -# define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS 230 -# define SSL_R_SSL_NEGATIVE_LENGTH 372 -# define SSL_R_SSL_SECTION_EMPTY 126 -# define SSL_R_SSL_SECTION_NOT_FOUND 136 -# define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED 301 -# define SSL_R_SSL_SESSION_ID_CONFLICT 302 -# define SSL_R_SSL_SESSION_ID_TOO_LONG 408 -# define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG 273 -# define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH 303 -# define SSL_R_SSL_SESSION_VERSION_MISMATCH 210 -# define SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049 -# define SSL_R_TLSV1_ALERT_DECODE_ERROR 1050 -# define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021 -# define SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051 -# define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060 -# define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 -# define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 -# define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 -# define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 -# define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 -# define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 -# define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 -# define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 -# define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 -# define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 -# define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 -# define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 -# define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 -# define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT 365 -# define SSL_R_TLS_HEARTBEAT_PENDING 366 -# define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL 367 -# define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 -# define SSL_R_TOO_MANY_WARN_ALERTS 409 -# define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 314 -# define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 239 -# define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES 242 -# define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 243 -# define SSL_R_UNEXPECTED_MESSAGE 244 -# define SSL_R_UNEXPECTED_RECORD 245 -# define SSL_R_UNINITIALIZED 276 -# define SSL_R_UNKNOWN_ALERT_TYPE 246 -# define SSL_R_UNKNOWN_CERTIFICATE_TYPE 247 -# define SSL_R_UNKNOWN_CIPHER_RETURNED 248 -# define SSL_R_UNKNOWN_CIPHER_TYPE 249 -# define SSL_R_UNKNOWN_CMD_NAME 386 -# define SSL_R_UNKNOWN_COMMAND 139 -# define SSL_R_UNKNOWN_DIGEST 368 -# define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 250 -# define SSL_R_UNKNOWN_PKEY_TYPE 251 -# define SSL_R_UNKNOWN_PROTOCOL 252 -# define SSL_R_UNKNOWN_SSL_VERSION 254 -# define SSL_R_UNKNOWN_STATE 255 -# define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 338 -# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 -# define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE 315 -# define SSL_R_UNSUPPORTED_PROTOCOL 258 -# define SSL_R_UNSUPPORTED_SSL_VERSION 259 -# define SSL_R_UNSUPPORTED_STATUS_TYPE 329 -# define SSL_R_USE_SRTP_NOT_NEGOTIATED 369 -# define SSL_R_VERSION_TOO_HIGH 166 -# define SSL_R_VERSION_TOO_LOW 396 -# define SSL_R_WRONG_CERTIFICATE_TYPE 383 -# define SSL_R_WRONG_CIPHER_RETURNED 261 -# define SSL_R_WRONG_CURVE 378 -# define SSL_R_WRONG_SIGNATURE_LENGTH 264 -# define SSL_R_WRONG_SIGNATURE_SIZE 265 -# define SSL_R_WRONG_SIGNATURE_TYPE 370 -# define SSL_R_WRONG_SSL_VERSION 266 -# define SSL_R_WRONG_VERSION_NUMBER 267 -# define SSL_R_X509_LIB 268 -# define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS 269 +typedef int (*SSL_allow_early_data_cb_fn)(SSL *s, void *arg); +void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx, + SSL_allow_early_data_cb_fn cb, + void *arg); +void SSL_set_allow_early_data_cb(SSL *s, + SSL_allow_early_data_cb_fn cb, + void *arg); # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/ssl3.h b/libs/windows/include/openssl/ssl3.h index 115940ad..8d01fcc4 100644 --- a/libs/windows/include/openssl/ssl3.h +++ b/libs/windows/include/openssl/ssl3.h @@ -1,5 +1,6 @@ /* * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -7,12 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECC cipher suite support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - #ifndef HEADER_SSL3_H # define HEADER_SSL3_H @@ -74,6 +69,18 @@ extern "C" { # define SSL3_CK_ADH_DES_64_CBC_SHA 0x0300001A # define SSL3_CK_ADH_DES_192_CBC_SHA 0x0300001B +/* a bundle of RFC standard cipher names, generated from ssl3_ciphers[] */ +# define SSL3_RFC_RSA_NULL_MD5 "TLS_RSA_WITH_NULL_MD5" +# define SSL3_RFC_RSA_NULL_SHA "TLS_RSA_WITH_NULL_SHA" +# define SSL3_RFC_RSA_DES_192_CBC3_SHA "TLS_RSA_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_DHE_DSS_DES_192_CBC3_SHA "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_DHE_RSA_DES_192_CBC3_SHA "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_ADH_DES_192_CBC_SHA "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_RSA_IDEA_128_SHA "TLS_RSA_WITH_IDEA_CBC_SHA" +# define SSL3_RFC_RSA_RC4_128_MD5 "TLS_RSA_WITH_RC4_128_MD5" +# define SSL3_RFC_RSA_RC4_128_SHA "TLS_RSA_WITH_RC4_128_SHA" +# define SSL3_RFC_ADH_RC4_128_MD5 "TLS_DH_anon_WITH_RC4_128_MD5" + # define SSL3_TXT_RSA_NULL_MD5 "NULL-MD5" # define SSL3_TXT_RSA_NULL_SHA "NULL-SHA" # define SSL3_TXT_RSA_RC4_40_MD5 "EXP-RC4-MD5" @@ -170,7 +177,8 @@ extern "C" { * practice the value is lower than this. The overhead is the maximum number * of padding bytes (256) plus the mac size. */ -# define SSL3_RT_MAX_ENCRYPTED_OVERHEAD (256 + SSL3_RT_MAX_MD_SIZE) +# define SSL3_RT_MAX_ENCRYPTED_OVERHEAD (256 + SSL3_RT_MAX_MD_SIZE) +# define SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD 256 /* * OpenSSL currently only uses a padding length of at most one block so the @@ -186,12 +194,14 @@ extern "C" { # define SSL3_RT_MAX_COMPRESSED_LENGTH SSL3_RT_MAX_PLAIN_LENGTH # else # define SSL3_RT_MAX_COMPRESSED_LENGTH \ - (SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD) + (SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD) # endif # define SSL3_RT_MAX_ENCRYPTED_LENGTH \ - (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH) + (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH) +# define SSL3_RT_MAX_TLS13_ENCRYPTED_LENGTH \ + (SSL3_RT_MAX_PLAIN_LENGTH + SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD) # define SSL3_RT_MAX_PACKET_SIZE \ - (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH) + (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH) # define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54" # define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52" @@ -220,8 +230,9 @@ extern "C" { # define TLS1_RT_CRYPTO_IV (TLS1_RT_CRYPTO | 0x7) # define TLS1_RT_CRYPTO_FIXED_IV (TLS1_RT_CRYPTO | 0x8) -/* Pseudo content type for SSL/TLS header info */ +/* Pseudo content types for SSL/TLS header info */ # define SSL3_RT_HEADER 0x100 +# define SSL3_RT_INNER_CONTENT_TYPE 0x101 # define SSL3_AL_WARNING 1 # define SSL3_AL_FATAL 2 @@ -262,6 +273,7 @@ extern "C" { # endif # endif +/* No longer used as of OpenSSL 1.1.1 */ # define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001 /* Removed from OpenSSL 1.1.0 */ @@ -278,10 +290,14 @@ extern "C" { # define TLS1_FLAGS_ENCRYPT_THEN_MAC_WRITE 0x0400 +# define TLS1_FLAGS_STATELESS 0x0800 + # define SSL3_MT_HELLO_REQUEST 0 # define SSL3_MT_CLIENT_HELLO 1 # define SSL3_MT_SERVER_HELLO 2 # define SSL3_MT_NEWSESSION_TICKET 4 +# define SSL3_MT_END_OF_EARLY_DATA 5 +# define SSL3_MT_ENCRYPTED_EXTENSIONS 8 # define SSL3_MT_CERTIFICATE 11 # define SSL3_MT_SERVER_KEY_EXCHANGE 12 # define SSL3_MT_CERTIFICATE_REQUEST 13 @@ -289,11 +305,15 @@ extern "C" { # define SSL3_MT_CERTIFICATE_VERIFY 15 # define SSL3_MT_CLIENT_KEY_EXCHANGE 16 # define SSL3_MT_FINISHED 20 +# define SSL3_MT_CERTIFICATE_URL 21 # define SSL3_MT_CERTIFICATE_STATUS 22 +# define SSL3_MT_SUPPLEMENTAL_DATA 23 +# define SSL3_MT_KEY_UPDATE 24 # ifndef OPENSSL_NO_NEXTPROTONEG -# define SSL3_MT_NEXT_PROTO 67 +# define SSL3_MT_NEXT_PROTO 67 # endif -# define DTLS1_MT_HELLO_VERIFY_REQUEST 3 +# define SSL3_MT_MESSAGE_HASH 254 +# define DTLS1_MT_HELLO_VERIFY_REQUEST 3 /* Dummy message type for handling CCS like a normal handshake message */ # define SSL3_MT_CHANGE_CIPHER_SPEC 0x0101 @@ -301,10 +321,13 @@ extern "C" { # define SSL3_MT_CCS 1 /* These are used when changing over to a new cipher */ -# define SSL3_CC_READ 0x01 -# define SSL3_CC_WRITE 0x02 -# define SSL3_CC_CLIENT 0x10 -# define SSL3_CC_SERVER 0x20 +# define SSL3_CC_READ 0x001 +# define SSL3_CC_WRITE 0x002 +# define SSL3_CC_CLIENT 0x010 +# define SSL3_CC_SERVER 0x020 +# define SSL3_CC_EARLY 0x040 +# define SSL3_CC_HANDSHAKE 0x080 +# define SSL3_CC_APPLICATION 0x100 # define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE) # define SSL3_CHANGE_CIPHER_SERVER_READ (SSL3_CC_SERVER|SSL3_CC_READ) # define SSL3_CHANGE_CIPHER_CLIENT_READ (SSL3_CC_CLIENT|SSL3_CC_READ) diff --git a/libs/windows/include/openssl/sslerr.h b/libs/windows/include/openssl/sslerr.h new file mode 100644 index 00000000..a50a075b --- /dev/null +++ b/libs/windows/include/openssl/sslerr.h @@ -0,0 +1,768 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SSLERR_H +# define HEADER_SSLERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_SSL_strings(void); + +/* + * SSL function codes. + */ +# define SSL_F_ADD_CLIENT_KEY_SHARE_EXT 438 +# define SSL_F_ADD_KEY_SHARE 512 +# define SSL_F_BYTES_TO_CIPHER_LIST 519 +# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 +# define SSL_F_CIPHERSUITE_CB 622 +# define SSL_F_CONSTRUCT_CA_NAMES 552 +# define SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS 553 +# define SSL_F_CONSTRUCT_STATEFUL_TICKET 636 +# define SSL_F_CONSTRUCT_STATELESS_TICKET 637 +# define SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH 539 +# define SSL_F_CREATE_TICKET_PREQUEL 638 +# define SSL_F_CT_MOVE_SCTS 345 +# define SSL_F_CT_STRICT 349 +# define SSL_F_CUSTOM_EXT_ADD 554 +# define SSL_F_CUSTOM_EXT_PARSE 555 +# define SSL_F_D2I_SSL_SESSION 103 +# define SSL_F_DANE_CTX_ENABLE 347 +# define SSL_F_DANE_MTYPE_SET 393 +# define SSL_F_DANE_TLSA_ADD 394 +# define SSL_F_DERIVE_SECRET_KEY_AND_IV 514 +# define SSL_F_DO_DTLS1_WRITE 245 +# define SSL_F_DO_SSL3_WRITE 104 +# define SSL_F_DTLS1_BUFFER_RECORD 247 +# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 318 +# define SSL_F_DTLS1_HEARTBEAT 305 +# define SSL_F_DTLS1_HM_FRAGMENT_NEW 623 +# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 +# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 +# define SSL_F_DTLS1_PROCESS_RECORD 257 +# define SSL_F_DTLS1_READ_BYTES 258 +# define SSL_F_DTLS1_READ_FAILED 339 +# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 390 +# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 +# define SSL_F_DTLS1_WRITE_BYTES 545 +# define SSL_F_DTLSV1_LISTEN 350 +# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 371 +# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 385 +# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 370 +# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 386 +# define SSL_F_DTLS_RECORD_LAYER_NEW 635 +# define SSL_F_DTLS_WAIT_FOR_DRY 592 +# define SSL_F_EARLY_DATA_COUNT_OK 532 +# define SSL_F_FINAL_EARLY_DATA 556 +# define SSL_F_FINAL_EC_PT_FORMATS 485 +# define SSL_F_FINAL_EMS 486 +# define SSL_F_FINAL_KEY_SHARE 503 +# define SSL_F_FINAL_MAXFRAGMENTLEN 557 +# define SSL_F_FINAL_RENEGOTIATE 483 +# define SSL_F_FINAL_SERVER_NAME 558 +# define SSL_F_FINAL_SIG_ALGS 497 +# define SSL_F_GET_CERT_VERIFY_TBS_DATA 588 +# define SSL_F_NSS_KEYLOG_INT 500 +# define SSL_F_OPENSSL_INIT_SSL 342 +# define SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION 436 +# define SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION 598 +# define SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE 430 +# define SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE 593 +# define SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE 594 +# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 417 +# define SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION 599 +# define SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION 437 +# define SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION 600 +# define SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE 431 +# define SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE 601 +# define SSL_F_OSSL_STATEM_SERVER_POST_WORK 602 +# define SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE 603 +# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 418 +# define SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION 604 +# define SSL_F_PARSE_CA_NAMES 541 +# define SSL_F_PITEM_NEW 624 +# define SSL_F_PQUEUE_NEW 625 +# define SSL_F_PROCESS_KEY_SHARE_EXT 439 +# define SSL_F_READ_STATE_MACHINE 352 +# define SSL_F_SET_CLIENT_CIPHERSUITE 540 +# define SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET 595 +# define SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET 589 +# define SSL_F_SRP_VERIFY_SERVER_PARAM 596 +# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 +# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 +# define SSL_F_SSL3_CTRL 213 +# define SSL_F_SSL3_CTX_CTRL 133 +# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 293 +# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 +# define SSL_F_SSL3_ENC 608 +# define SSL_F_SSL3_FINAL_FINISH_MAC 285 +# define SSL_F_SSL3_FINISH_MAC 587 +# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 +# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 +# define SSL_F_SSL3_GET_RECORD 143 +# define SSL_F_SSL3_INIT_FINISHED_MAC 397 +# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 +# define SSL_F_SSL3_READ_BYTES 148 +# define SSL_F_SSL3_READ_N 149 +# define SSL_F_SSL3_SETUP_KEY_BLOCK 157 +# define SSL_F_SSL3_SETUP_READ_BUFFER 156 +# define SSL_F_SSL3_SETUP_WRITE_BUFFER 291 +# define SSL_F_SSL3_WRITE_BYTES 158 +# define SSL_F_SSL3_WRITE_PENDING 159 +# define SSL_F_SSL_ADD_CERT_CHAIN 316 +# define SSL_F_SSL_ADD_CERT_TO_BUF 319 +# define SSL_F_SSL_ADD_CERT_TO_WPACKET 493 +# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298 +# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277 +# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 307 +# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 215 +# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 216 +# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 299 +# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278 +# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 308 +# define SSL_F_SSL_BAD_METHOD 160 +# define SSL_F_SSL_BUILD_CERT_CHAIN 332 +# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161 +# define SSL_F_SSL_CACHE_CIPHERLIST 520 +# define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 346 +# define SSL_F_SSL_CERT_DUP 221 +# define SSL_F_SSL_CERT_NEW 162 +# define SSL_F_SSL_CERT_SET0_CHAIN 340 +# define SSL_F_SSL_CHECK_PRIVATE_KEY 163 +# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280 +# define SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO 606 +# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279 +# define SSL_F_SSL_CHOOSE_CLIENT_VERSION 607 +# define SSL_F_SSL_CIPHER_DESCRIPTION 626 +# define SSL_F_SSL_CIPHER_LIST_TO_BYTES 425 +# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 230 +# define SSL_F_SSL_CIPHER_STRENGTH_SORT 231 +# define SSL_F_SSL_CLEAR 164 +# define SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT 627 +# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165 +# define SSL_F_SSL_CONF_CMD 334 +# define SSL_F_SSL_CREATE_CIPHER_LIST 166 +# define SSL_F_SSL_CTRL 232 +# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168 +# define SSL_F_SSL_CTX_ENABLE_CT 398 +# define SSL_F_SSL_CTX_MAKE_PROFILES 309 +# define SSL_F_SSL_CTX_NEW 169 +# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 343 +# define SSL_F_SSL_CTX_SET_CIPHER_LIST 269 +# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 290 +# define SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK 396 +# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 +# define SSL_F_SSL_CTX_SET_SSL_VERSION 170 +# define SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH 551 +# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 173 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY 174 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 175 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 176 +# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 272 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179 +# define SSL_F_SSL_CTX_USE_SERVERINFO 336 +# define SSL_F_SSL_CTX_USE_SERVERINFO_EX 543 +# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 337 +# define SSL_F_SSL_DANE_DUP 403 +# define SSL_F_SSL_DANE_ENABLE 395 +# define SSL_F_SSL_DERIVE 590 +# define SSL_F_SSL_DO_CONFIG 391 +# define SSL_F_SSL_DO_HANDSHAKE 180 +# define SSL_F_SSL_DUP_CA_LIST 408 +# define SSL_F_SSL_ENABLE_CT 402 +# define SSL_F_SSL_GENERATE_PKEY_GROUP 559 +# define SSL_F_SSL_GENERATE_SESSION_ID 547 +# define SSL_F_SSL_GET_NEW_SESSION 181 +# define SSL_F_SSL_GET_PREV_SESSION 217 +# define SSL_F_SSL_GET_SERVER_CERT_INDEX 322 +# define SSL_F_SSL_GET_SIGN_PKEY 183 +# define SSL_F_SSL_HANDSHAKE_HASH 560 +# define SSL_F_SSL_INIT_WBIO_BUFFER 184 +# define SSL_F_SSL_KEY_UPDATE 515 +# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 +# define SSL_F_SSL_LOG_MASTER_SECRET 498 +# define SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE 499 +# define SSL_F_SSL_MODULE_INIT 392 +# define SSL_F_SSL_NEW 186 +# define SSL_F_SSL_NEXT_PROTO_VALIDATE 565 +# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 300 +# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 302 +# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 310 +# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 301 +# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 303 +# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 311 +# define SSL_F_SSL_PEEK 270 +# define SSL_F_SSL_PEEK_EX 432 +# define SSL_F_SSL_PEEK_INTERNAL 522 +# define SSL_F_SSL_READ 223 +# define SSL_F_SSL_READ_EARLY_DATA 529 +# define SSL_F_SSL_READ_EX 434 +# define SSL_F_SSL_READ_INTERNAL 523 +# define SSL_F_SSL_RENEGOTIATE 516 +# define SSL_F_SSL_RENEGOTIATE_ABBREVIATED 546 +# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 +# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 +# define SSL_F_SSL_SESSION_DUP 348 +# define SSL_F_SSL_SESSION_NEW 189 +# define SSL_F_SSL_SESSION_PRINT_FP 190 +# define SSL_F_SSL_SESSION_SET1_ID 423 +# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 +# define SSL_F_SSL_SET_ALPN_PROTOS 344 +# define SSL_F_SSL_SET_CERT 191 +# define SSL_F_SSL_SET_CERT_AND_KEY 621 +# define SSL_F_SSL_SET_CIPHER_LIST 271 +# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 399 +# define SSL_F_SSL_SET_FD 192 +# define SSL_F_SSL_SET_PKEY 193 +# define SSL_F_SSL_SET_RFD 194 +# define SSL_F_SSL_SET_SESSION 195 +# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 218 +# define SSL_F_SSL_SET_SESSION_TICKET_EXT 294 +# define SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH 550 +# define SSL_F_SSL_SET_WFD 196 +# define SSL_F_SSL_SHUTDOWN 224 +# define SSL_F_SSL_SRP_CTX_INIT 313 +# define SSL_F_SSL_START_ASYNC_JOB 389 +# define SSL_F_SSL_UNDEFINED_FUNCTION 197 +# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 244 +# define SSL_F_SSL_USE_CERTIFICATE 198 +# define SSL_F_SSL_USE_CERTIFICATE_ASN1 199 +# define SSL_F_SSL_USE_CERTIFICATE_FILE 200 +# define SSL_F_SSL_USE_PRIVATEKEY 201 +# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 202 +# define SSL_F_SSL_USE_PRIVATEKEY_FILE 203 +# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 273 +# define SSL_F_SSL_USE_RSAPRIVATEKEY 204 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 205 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206 +# define SSL_F_SSL_VALIDATE_CT 400 +# define SSL_F_SSL_VERIFY_CERT_CHAIN 207 +# define SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE 616 +# define SSL_F_SSL_WRITE 208 +# define SSL_F_SSL_WRITE_EARLY_DATA 526 +# define SSL_F_SSL_WRITE_EARLY_FINISH 527 +# define SSL_F_SSL_WRITE_EX 433 +# define SSL_F_SSL_WRITE_INTERNAL 524 +# define SSL_F_STATE_MACHINE 353 +# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 +# define SSL_F_TLS12_COPY_SIGALGS 533 +# define SSL_F_TLS13_CHANGE_CIPHER_STATE 440 +# define SSL_F_TLS13_ENC 609 +# define SSL_F_TLS13_FINAL_FINISH_MAC 605 +# define SSL_F_TLS13_GENERATE_SECRET 591 +# define SSL_F_TLS13_HKDF_EXPAND 561 +# define SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA 617 +# define SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA 618 +# define SSL_F_TLS13_SETUP_KEY_BLOCK 441 +# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 +# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 341 +# define SSL_F_TLS1_ENC 401 +# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 +# define SSL_F_TLS1_GET_CURVELIST 338 +# define SSL_F_TLS1_PRF 284 +# define SSL_F_TLS1_SAVE_U16 628 +# define SSL_F_TLS1_SETUP_KEY_BLOCK 211 +# define SSL_F_TLS1_SET_GROUPS 629 +# define SSL_F_TLS1_SET_RAW_SIGALGS 630 +# define SSL_F_TLS1_SET_SERVER_SIGALGS 335 +# define SSL_F_TLS1_SET_SHARED_SIGALGS 631 +# define SSL_F_TLS1_SET_SIGALGS 632 +# define SSL_F_TLS_CHOOSE_SIGALG 513 +# define SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 354 +# define SSL_F_TLS_COLLECT_EXTENSIONS 435 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES 542 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 372 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS 429 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY 494 +# define SSL_F_TLS_CONSTRUCT_CERT_VERIFY 496 +# define SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC 427 +# define SSL_F_TLS_CONSTRUCT_CKE_DHE 404 +# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 405 +# define SSL_F_TLS_CONSTRUCT_CKE_GOST 406 +# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 407 +# define SSL_F_TLS_CONSTRUCT_CKE_RSA 409 +# define SSL_F_TLS_CONSTRUCT_CKE_SRP 410 +# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 484 +# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 487 +# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 488 +# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 489 +# define SSL_F_TLS_CONSTRUCT_CTOS_ALPN 466 +# define SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE 355 +# define SSL_F_TLS_CONSTRUCT_CTOS_COOKIE 535 +# define SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA 530 +# define SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS 467 +# define SSL_F_TLS_CONSTRUCT_CTOS_EMS 468 +# define SSL_F_TLS_CONSTRUCT_CTOS_ETM 469 +# define SSL_F_TLS_CONSTRUCT_CTOS_HELLO 356 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE 357 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE 470 +# define SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN 549 +# define SSL_F_TLS_CONSTRUCT_CTOS_NPN 471 +# define SSL_F_TLS_CONSTRUCT_CTOS_PADDING 472 +# define SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH 619 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK 501 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES 509 +# define SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE 473 +# define SSL_F_TLS_CONSTRUCT_CTOS_SCT 474 +# define SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME 475 +# define SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET 476 +# define SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS 477 +# define SSL_F_TLS_CONSTRUCT_CTOS_SRP 478 +# define SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST 479 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS 480 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS 481 +# define SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP 482 +# define SSL_F_TLS_CONSTRUCT_CTOS_VERIFY 358 +# define SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS 443 +# define SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA 536 +# define SSL_F_TLS_CONSTRUCT_EXTENSIONS 447 +# define SSL_F_TLS_CONSTRUCT_FINISHED 359 +# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 373 +# define SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST 510 +# define SSL_F_TLS_CONSTRUCT_KEY_UPDATE 517 +# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 428 +# define SSL_F_TLS_CONSTRUCT_NEXT_PROTO 426 +# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 490 +# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 491 +# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 492 +# define SSL_F_TLS_CONSTRUCT_STOC_ALPN 451 +# define SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE 374 +# define SSL_F_TLS_CONSTRUCT_STOC_COOKIE 613 +# define SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG 452 +# define SSL_F_TLS_CONSTRUCT_STOC_DONE 375 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA 531 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO 525 +# define SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS 453 +# define SSL_F_TLS_CONSTRUCT_STOC_EMS 454 +# define SSL_F_TLS_CONSTRUCT_STOC_ETM 455 +# define SSL_F_TLS_CONSTRUCT_STOC_HELLO 376 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE 377 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE 456 +# define SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN 548 +# define SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG 457 +# define SSL_F_TLS_CONSTRUCT_STOC_PSK 504 +# define SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE 458 +# define SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME 459 +# define SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET 460 +# define SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST 461 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS 544 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS 611 +# define SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP 462 +# define SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO 521 +# define SSL_F_TLS_FINISH_HANDSHAKE 597 +# define SSL_F_TLS_GET_MESSAGE_BODY 351 +# define SSL_F_TLS_GET_MESSAGE_HEADER 387 +# define SSL_F_TLS_HANDLE_ALPN 562 +# define SSL_F_TLS_HANDLE_STATUS_REQUEST 563 +# define SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES 566 +# define SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT 449 +# define SSL_F_TLS_PARSE_CTOS_ALPN 567 +# define SSL_F_TLS_PARSE_CTOS_COOKIE 614 +# define SSL_F_TLS_PARSE_CTOS_EARLY_DATA 568 +# define SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS 569 +# define SSL_F_TLS_PARSE_CTOS_EMS 570 +# define SSL_F_TLS_PARSE_CTOS_KEY_SHARE 463 +# define SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN 571 +# define SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH 620 +# define SSL_F_TLS_PARSE_CTOS_PSK 505 +# define SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES 572 +# define SSL_F_TLS_PARSE_CTOS_RENEGOTIATE 464 +# define SSL_F_TLS_PARSE_CTOS_SERVER_NAME 573 +# define SSL_F_TLS_PARSE_CTOS_SESSION_TICKET 574 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS 575 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT 615 +# define SSL_F_TLS_PARSE_CTOS_SRP 576 +# define SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST 577 +# define SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS 578 +# define SSL_F_TLS_PARSE_CTOS_USE_SRTP 465 +# define SSL_F_TLS_PARSE_STOC_ALPN 579 +# define SSL_F_TLS_PARSE_STOC_COOKIE 534 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA 538 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO 528 +# define SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS 580 +# define SSL_F_TLS_PARSE_STOC_KEY_SHARE 445 +# define SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN 581 +# define SSL_F_TLS_PARSE_STOC_NPN 582 +# define SSL_F_TLS_PARSE_STOC_PSK 502 +# define SSL_F_TLS_PARSE_STOC_RENEGOTIATE 448 +# define SSL_F_TLS_PARSE_STOC_SCT 564 +# define SSL_F_TLS_PARSE_STOC_SERVER_NAME 583 +# define SSL_F_TLS_PARSE_STOC_SESSION_TICKET 584 +# define SSL_F_TLS_PARSE_STOC_STATUS_REQUEST 585 +# define SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS 612 +# define SSL_F_TLS_PARSE_STOC_USE_SRTP 446 +# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 378 +# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 384 +# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 360 +# define SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST 610 +# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 361 +# define SSL_F_TLS_PROCESS_CERT_STATUS 362 +# define SSL_F_TLS_PROCESS_CERT_STATUS_BODY 495 +# define SSL_F_TLS_PROCESS_CERT_VERIFY 379 +# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 363 +# define SSL_F_TLS_PROCESS_CKE_DHE 411 +# define SSL_F_TLS_PROCESS_CKE_ECDHE 412 +# define SSL_F_TLS_PROCESS_CKE_GOST 413 +# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 414 +# define SSL_F_TLS_PROCESS_CKE_RSA 415 +# define SSL_F_TLS_PROCESS_CKE_SRP 416 +# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 380 +# define SSL_F_TLS_PROCESS_CLIENT_HELLO 381 +# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 382 +# define SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS 444 +# define SSL_F_TLS_PROCESS_END_OF_EARLY_DATA 537 +# define SSL_F_TLS_PROCESS_FINISHED 364 +# define SSL_F_TLS_PROCESS_HELLO_REQ 507 +# define SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST 511 +# define SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT 442 +# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 365 +# define SSL_F_TLS_PROCESS_KEY_UPDATE 518 +# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 366 +# define SSL_F_TLS_PROCESS_NEXT_PROTO 383 +# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 367 +# define SSL_F_TLS_PROCESS_SERVER_DONE 368 +# define SSL_F_TLS_PROCESS_SERVER_HELLO 369 +# define SSL_F_TLS_PROCESS_SKE_DHE 419 +# define SSL_F_TLS_PROCESS_SKE_ECDHE 420 +# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 421 +# define SSL_F_TLS_PROCESS_SKE_SRP 422 +# define SSL_F_TLS_PSK_DO_BINDER 506 +# define SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT 450 +# define SSL_F_TLS_SETUP_HANDSHAKE 508 +# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 220 +# define SSL_F_WPACKET_INTERN_INIT_LEN 633 +# define SSL_F_WPACKET_START_SUB_PACKET_LEN__ 634 +# define SSL_F_WRITE_STATE_MACHINE 586 + +/* + * SSL reason codes. + */ +# define SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY 291 +# define SSL_R_APP_DATA_IN_HANDSHAKE 100 +# define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 +# define SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE 143 +# define SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE 158 +# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 +# define SSL_R_BAD_CIPHER 186 +# define SSL_R_BAD_DATA 390 +# define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 +# define SSL_R_BAD_DECOMPRESSION 107 +# define SSL_R_BAD_DH_VALUE 102 +# define SSL_R_BAD_DIGEST_LENGTH 111 +# define SSL_R_BAD_EARLY_DATA 233 +# define SSL_R_BAD_ECC_CERT 304 +# define SSL_R_BAD_ECPOINT 306 +# define SSL_R_BAD_EXTENSION 110 +# define SSL_R_BAD_HANDSHAKE_LENGTH 332 +# define SSL_R_BAD_HANDSHAKE_STATE 236 +# define SSL_R_BAD_HELLO_REQUEST 105 +# define SSL_R_BAD_HRR_VERSION 263 +# define SSL_R_BAD_KEY_SHARE 108 +# define SSL_R_BAD_KEY_UPDATE 122 +# define SSL_R_BAD_LEGACY_VERSION 292 +# define SSL_R_BAD_LENGTH 271 +# define SSL_R_BAD_PACKET 240 +# define SSL_R_BAD_PACKET_LENGTH 115 +# define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 +# define SSL_R_BAD_PSK 219 +# define SSL_R_BAD_PSK_IDENTITY 114 +# define SSL_R_BAD_RECORD_TYPE 443 +# define SSL_R_BAD_RSA_ENCRYPT 119 +# define SSL_R_BAD_SIGNATURE 123 +# define SSL_R_BAD_SRP_A_LENGTH 347 +# define SSL_R_BAD_SRP_PARAMETERS 371 +# define SSL_R_BAD_SRTP_MKI_VALUE 352 +# define SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST 353 +# define SSL_R_BAD_SSL_FILETYPE 124 +# define SSL_R_BAD_VALUE 384 +# define SSL_R_BAD_WRITE_RETRY 127 +# define SSL_R_BINDER_DOES_NOT_VERIFY 253 +# define SSL_R_BIO_NOT_SET 128 +# define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG 129 +# define SSL_R_BN_LIB 130 +# define SSL_R_CALLBACK_FAILED 234 +# define SSL_R_CANNOT_CHANGE_CIPHER 109 +# define SSL_R_CA_DN_LENGTH_MISMATCH 131 +# define SSL_R_CA_KEY_TOO_SMALL 397 +# define SSL_R_CA_MD_TOO_WEAK 398 +# define SSL_R_CCS_RECEIVED_EARLY 133 +# define SSL_R_CERTIFICATE_VERIFY_FAILED 134 +# define SSL_R_CERT_CB_ERROR 377 +# define SSL_R_CERT_LENGTH_MISMATCH 135 +# define SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED 218 +# define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 +# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 +# define SSL_R_CLIENTHELLO_TLSEXT 226 +# define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 +# define SSL_R_COMPRESSION_DISABLED 343 +# define SSL_R_COMPRESSION_FAILURE 141 +# define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE 307 +# define SSL_R_COMPRESSION_LIBRARY_ERROR 142 +# define SSL_R_CONNECTION_TYPE_NOT_SET 144 +# define SSL_R_CONTEXT_NOT_DANE_ENABLED 167 +# define SSL_R_COOKIE_GEN_CALLBACK_FAILURE 400 +# define SSL_R_COOKIE_MISMATCH 308 +# define SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED 206 +# define SSL_R_DANE_ALREADY_ENABLED 172 +# define SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL 173 +# define SSL_R_DANE_NOT_ENABLED 175 +# define SSL_R_DANE_TLSA_BAD_CERTIFICATE 180 +# define SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE 184 +# define SSL_R_DANE_TLSA_BAD_DATA_LENGTH 189 +# define SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH 192 +# define SSL_R_DANE_TLSA_BAD_MATCHING_TYPE 200 +# define SSL_R_DANE_TLSA_BAD_PUBLIC_KEY 201 +# define SSL_R_DANE_TLSA_BAD_SELECTOR 202 +# define SSL_R_DANE_TLSA_NULL_DATA 203 +# define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 145 +# define SSL_R_DATA_LENGTH_TOO_LONG 146 +# define SSL_R_DECRYPTION_FAILED 147 +# define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281 +# define SSL_R_DH_KEY_TOO_SMALL 394 +# define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 148 +# define SSL_R_DIGEST_CHECK_FAILED 149 +# define SSL_R_DTLS_MESSAGE_TOO_BIG 334 +# define SSL_R_DUPLICATE_COMPRESSION_ID 309 +# define SSL_R_ECC_CERT_NOT_FOR_SIGNING 318 +# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374 +# define SSL_R_EE_KEY_TOO_SMALL 399 +# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354 +# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 +# define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 +# define SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN 204 +# define SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE 194 +# define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 +# define SSL_R_EXTENSION_NOT_RECEIVED 279 +# define SSL_R_EXTRA_DATA_IN_MESSAGE 153 +# define SSL_R_EXT_LENGTH_MISMATCH 163 +# define SSL_R_FAILED_TO_INIT_ASYNC 405 +# define SSL_R_FRAGMENTED_CLIENT_HELLO 401 +# define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 +# define SSL_R_HTTPS_PROXY_REQUEST 155 +# define SSL_R_HTTP_REQUEST 156 +# define SSL_R_ILLEGAL_POINT_COMPRESSION 162 +# define SSL_R_ILLEGAL_SUITEB_DIGEST 380 +# define SSL_R_INAPPROPRIATE_FALLBACK 373 +# define SSL_R_INCONSISTENT_COMPRESSION 340 +# define SSL_R_INCONSISTENT_EARLY_DATA_ALPN 222 +# define SSL_R_INCONSISTENT_EARLY_DATA_SNI 231 +# define SSL_R_INCONSISTENT_EXTMS 104 +# define SSL_R_INSUFFICIENT_SECURITY 241 +# define SSL_R_INVALID_ALERT 205 +# define SSL_R_INVALID_CCS_MESSAGE 260 +# define SSL_R_INVALID_CERTIFICATE_OR_ALG 238 +# define SSL_R_INVALID_COMMAND 280 +# define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 +# define SSL_R_INVALID_CONFIG 283 +# define SSL_R_INVALID_CONFIGURATION_NAME 113 +# define SSL_R_INVALID_CONTEXT 282 +# define SSL_R_INVALID_CT_VALIDATION_TYPE 212 +# define SSL_R_INVALID_KEY_UPDATE_TYPE 120 +# define SSL_R_INVALID_MAX_EARLY_DATA 174 +# define SSL_R_INVALID_NULL_CMD_NAME 385 +# define SSL_R_INVALID_SEQUENCE_NUMBER 402 +# define SSL_R_INVALID_SERVERINFO_DATA 388 +# define SSL_R_INVALID_SESSION_ID 999 +# define SSL_R_INVALID_SRP_USERNAME 357 +# define SSL_R_INVALID_STATUS_RESPONSE 328 +# define SSL_R_INVALID_TICKET_KEYS_LENGTH 325 +# define SSL_R_LENGTH_MISMATCH 159 +# define SSL_R_LENGTH_TOO_LONG 404 +# define SSL_R_LENGTH_TOO_SHORT 160 +# define SSL_R_LIBRARY_BUG 274 +# define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 +# define SSL_R_MISSING_DSA_SIGNING_CERT 165 +# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 +# define SSL_R_MISSING_FATAL 256 +# define SSL_R_MISSING_PARAMETERS 290 +# define SSL_R_MISSING_RSA_CERTIFICATE 168 +# define SSL_R_MISSING_RSA_ENCRYPTING_CERT 169 +# define SSL_R_MISSING_RSA_SIGNING_CERT 170 +# define SSL_R_MISSING_SIGALGS_EXTENSION 112 +# define SSL_R_MISSING_SIGNING_CERT 221 +# define SSL_R_MISSING_SRP_PARAM 358 +# define SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION 209 +# define SSL_R_MISSING_TMP_DH_KEY 171 +# define SSL_R_MISSING_TMP_ECDH_KEY 311 +# define SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA 293 +# define SSL_R_NOT_ON_RECORD_BOUNDARY 182 +# define SSL_R_NOT_REPLACING_CERTIFICATE 289 +# define SSL_R_NOT_SERVER 284 +# define SSL_R_NO_APPLICATION_PROTOCOL 235 +# define SSL_R_NO_CERTIFICATES_RETURNED 176 +# define SSL_R_NO_CERTIFICATE_ASSIGNED 177 +# define SSL_R_NO_CERTIFICATE_SET 179 +# define SSL_R_NO_CHANGE_FOLLOWING_HRR 214 +# define SSL_R_NO_CIPHERS_AVAILABLE 181 +# define SSL_R_NO_CIPHERS_SPECIFIED 183 +# define SSL_R_NO_CIPHER_MATCH 185 +# define SSL_R_NO_CLIENT_CERT_METHOD 331 +# define SSL_R_NO_COMPRESSION_SPECIFIED 187 +# define SSL_R_NO_COOKIE_CALLBACK_SET 287 +# define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER 330 +# define SSL_R_NO_METHOD_SPECIFIED 188 +# define SSL_R_NO_PEM_EXTENSIONS 389 +# define SSL_R_NO_PRIVATE_KEY_ASSIGNED 190 +# define SSL_R_NO_PROTOCOLS_AVAILABLE 191 +# define SSL_R_NO_RENEGOTIATION 339 +# define SSL_R_NO_REQUIRED_DIGEST 324 +# define SSL_R_NO_SHARED_CIPHER 193 +# define SSL_R_NO_SHARED_GROUPS 410 +# define SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS 376 +# define SSL_R_NO_SRTP_PROFILES 359 +# define SSL_R_NO_SUITABLE_KEY_SHARE 101 +# define SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM 118 +# define SSL_R_NO_VALID_SCTS 216 +# define SSL_R_NO_VERIFY_COOKIE_CALLBACK 403 +# define SSL_R_NULL_SSL_CTX 195 +# define SSL_R_NULL_SSL_METHOD_PASSED 196 +# define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 +# define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 +# define SSL_R_OVERFLOW_ERROR 237 +# define SSL_R_PACKET_LENGTH_TOO_LONG 198 +# define SSL_R_PARSE_TLSEXT 227 +# define SSL_R_PATH_TOO_LONG 270 +# define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE 199 +# define SSL_R_PEM_NAME_BAD_PREFIX 391 +# define SSL_R_PEM_NAME_TOO_SHORT 392 +# define SSL_R_PIPELINE_FAILURE 406 +# define SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR 278 +# define SSL_R_PRIVATE_KEY_MISMATCH 288 +# define SSL_R_PROTOCOL_IS_SHUTDOWN 207 +# define SSL_R_PSK_IDENTITY_NOT_FOUND 223 +# define SSL_R_PSK_NO_CLIENT_CB 224 +# define SSL_R_PSK_NO_SERVER_CB 225 +# define SSL_R_READ_BIO_NOT_SET 211 +# define SSL_R_READ_TIMEOUT_EXPIRED 312 +# define SSL_R_RECORD_LENGTH_MISMATCH 213 +# define SSL_R_RECORD_TOO_SMALL 298 +# define SSL_R_RENEGOTIATE_EXT_TOO_LONG 335 +# define SSL_R_RENEGOTIATION_ENCODING_ERR 336 +# define SSL_R_RENEGOTIATION_MISMATCH 337 +# define SSL_R_REQUEST_PENDING 285 +# define SSL_R_REQUEST_SENT 286 +# define SSL_R_REQUIRED_CIPHER_MISSING 215 +# define SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING 342 +# define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345 +# define SSL_R_SCT_VERIFICATION_FAILED 208 +# define SSL_R_SERVERHELLO_TLSEXT 275 +# define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277 +# define SSL_R_SHUTDOWN_WHILE_IN_INIT 407 +# define SSL_R_SIGNATURE_ALGORITHMS_ERROR 360 +# define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 220 +# define SSL_R_SRP_A_CALC 361 +# define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES 362 +# define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG 363 +# define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE 364 +# define SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH 232 +# define SSL_R_SSL3_EXT_INVALID_SERVERNAME 319 +# define SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE 320 +# define SSL_R_SSL3_SESSION_ID_TOO_LONG 300 +# define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042 +# define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 +# define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045 +# define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044 +# define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046 +# define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030 +# define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040 +# define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047 +# define SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041 +# define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 +# define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043 +# define SSL_R_SSL_COMMAND_SECTION_EMPTY 117 +# define SSL_R_SSL_COMMAND_SECTION_NOT_FOUND 125 +# define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION 228 +# define SSL_R_SSL_HANDSHAKE_FAILURE 229 +# define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS 230 +# define SSL_R_SSL_NEGATIVE_LENGTH 372 +# define SSL_R_SSL_SECTION_EMPTY 126 +# define SSL_R_SSL_SECTION_NOT_FOUND 136 +# define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED 301 +# define SSL_R_SSL_SESSION_ID_CONFLICT 302 +# define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG 273 +# define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH 303 +# define SSL_R_SSL_SESSION_ID_TOO_LONG 408 +# define SSL_R_SSL_SESSION_VERSION_MISMATCH 210 +# define SSL_R_STILL_IN_INIT 121 +# define SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED 1116 +# define SSL_R_TLSV13_ALERT_MISSING_EXTENSION 1109 +# define SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049 +# define SSL_R_TLSV1_ALERT_DECODE_ERROR 1050 +# define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021 +# define SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051 +# define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060 +# define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 +# define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 +# define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 +# define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 +# define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 +# define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 +# define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 +# define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 +# define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 +# define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 +# define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 +# define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT 365 +# define SSL_R_TLS_HEARTBEAT_PENDING 366 +# define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL 367 +# define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 +# define SSL_R_TOO_MANY_KEY_UPDATES 132 +# define SSL_R_TOO_MANY_WARN_ALERTS 409 +# define SSL_R_TOO_MUCH_EARLY_DATA 164 +# define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 314 +# define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 239 +# define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES 242 +# define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 243 +# define SSL_R_UNEXPECTED_CCS_MESSAGE 262 +# define SSL_R_UNEXPECTED_END_OF_EARLY_DATA 178 +# define SSL_R_UNEXPECTED_MESSAGE 244 +# define SSL_R_UNEXPECTED_RECORD 245 +# define SSL_R_UNINITIALIZED 276 +# define SSL_R_UNKNOWN_ALERT_TYPE 246 +# define SSL_R_UNKNOWN_CERTIFICATE_TYPE 247 +# define SSL_R_UNKNOWN_CIPHER_RETURNED 248 +# define SSL_R_UNKNOWN_CIPHER_TYPE 249 +# define SSL_R_UNKNOWN_CMD_NAME 386 +# define SSL_R_UNKNOWN_COMMAND 139 +# define SSL_R_UNKNOWN_DIGEST 368 +# define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 250 +# define SSL_R_UNKNOWN_PKEY_TYPE 251 +# define SSL_R_UNKNOWN_PROTOCOL 252 +# define SSL_R_UNKNOWN_SSL_VERSION 254 +# define SSL_R_UNKNOWN_STATE 255 +# define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 338 +# define SSL_R_UNSOLICITED_EXTENSION 217 +# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 +# define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE 315 +# define SSL_R_UNSUPPORTED_PROTOCOL 258 +# define SSL_R_UNSUPPORTED_SSL_VERSION 259 +# define SSL_R_UNSUPPORTED_STATUS_TYPE 329 +# define SSL_R_USE_SRTP_NOT_NEGOTIATED 369 +# define SSL_R_VERSION_TOO_HIGH 166 +# define SSL_R_VERSION_TOO_LOW 396 +# define SSL_R_WRONG_CERTIFICATE_TYPE 383 +# define SSL_R_WRONG_CIPHER_RETURNED 261 +# define SSL_R_WRONG_CURVE 378 +# define SSL_R_WRONG_SIGNATURE_LENGTH 264 +# define SSL_R_WRONG_SIGNATURE_SIZE 265 +# define SSL_R_WRONG_SIGNATURE_TYPE 370 +# define SSL_R_WRONG_SSL_VERSION 266 +# define SSL_R_WRONG_VERSION_NUMBER 267 +# define SSL_R_X509_LIB 268 +# define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS 269 + +#endif diff --git a/libs/windows/include/openssl/stack.h b/libs/windows/include/openssl/stack.h index 23ad3b89..cfc07505 100644 --- a/libs/windows/include/openssl/stack.h +++ b/libs/windows/include/openssl/stack.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -27,9 +27,13 @@ void *OPENSSL_sk_set(OPENSSL_STACK *st, int i, const void *data); OPENSSL_STACK *OPENSSL_sk_new(OPENSSL_sk_compfunc cmp); OPENSSL_STACK *OPENSSL_sk_new_null(void); +OPENSSL_STACK *OPENSSL_sk_new_reserve(OPENSSL_sk_compfunc c, int n); +int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n); void OPENSSL_sk_free(OPENSSL_STACK *); void OPENSSL_sk_pop_free(OPENSSL_STACK *st, void (*func) (void *)); -OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *, OPENSSL_sk_copyfunc c, OPENSSL_sk_freefunc f); +OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *, + OPENSSL_sk_copyfunc c, + OPENSSL_sk_freefunc f); int OPENSSL_sk_insert(OPENSSL_STACK *sk, const void *data, int where); void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc); void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p); @@ -40,7 +44,8 @@ int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data); void *OPENSSL_sk_shift(OPENSSL_STACK *st); void *OPENSSL_sk_pop(OPENSSL_STACK *st); void OPENSSL_sk_zero(OPENSSL_STACK *st); -OPENSSL_sk_compfunc OPENSSL_sk_set_cmp_func(OPENSSL_STACK *sk, OPENSSL_sk_compfunc cmp); +OPENSSL_sk_compfunc OPENSSL_sk_set_cmp_func(OPENSSL_STACK *sk, + OPENSSL_sk_compfunc cmp); OPENSSL_STACK *OPENSSL_sk_dup(const OPENSSL_STACK *st); void OPENSSL_sk_sort(OPENSSL_STACK *st); int OPENSSL_sk_is_sorted(const OPENSSL_STACK *st); diff --git a/libs/windows/include/openssl/store.h b/libs/windows/include/openssl/store.h new file mode 100644 index 00000000..7b43e8bd --- /dev/null +++ b/libs/windows/include/openssl/store.h @@ -0,0 +1,266 @@ +/* + * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OSSL_STORE_H +# define HEADER_OSSL_STORE_H + +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * The main OSSL_STORE functions. + * ------------------------------ + * + * These allow applications to open a channel to a resource with supported + * data (keys, certs, crls, ...), read the data a piece at a time and decide + * what to do with it, and finally close. + */ + +typedef struct ossl_store_ctx_st OSSL_STORE_CTX; + +/* + * Typedef for the OSSL_STORE_INFO post processing callback. This can be used + * to massage the given OSSL_STORE_INFO, or to drop it entirely (by returning + * NULL). + */ +typedef OSSL_STORE_INFO *(*OSSL_STORE_post_process_info_fn)(OSSL_STORE_INFO *, + void *); + +/* + * Open a channel given a URI. The given UI method will be used any time the + * loader needs extra input, for example when a password or pin is needed, and + * will be passed the same user data every time it's needed in this context. + * + * Returns a context reference which represents the channel to communicate + * through. + */ +OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, + void *ui_data, + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); + +/* + * Control / fine tune the OSSL_STORE channel. |cmd| determines what is to be + * done, and depends on the underlying loader (use OSSL_STORE_get0_scheme to + * determine which loader is used), except for common commands (see below). + * Each command takes different arguments. + */ +int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, ... /* args */); +int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args); + +/* + * Common ctrl commands that different loaders may choose to support. + */ +/* int on = 0 or 1; STORE_ctrl(ctx, STORE_C_USE_SECMEM, &on); */ +# define OSSL_STORE_C_USE_SECMEM 1 +/* Where custom commands start */ +# define OSSL_STORE_C_CUSTOM_START 100 + +/* + * Read one data item (a key, a cert, a CRL) that is supported by the OSSL_STORE + * functionality, given a context. + * Returns a OSSL_STORE_INFO pointer, from which OpenSSL typed data can be + * extracted with OSSL_STORE_INFO_get0_PKEY(), OSSL_STORE_INFO_get0_CERT(), ... + * NULL is returned on error, which may include that the data found at the URI + * can't be figured out for certain or is ambiguous. + */ +OSSL_STORE_INFO *OSSL_STORE_load(OSSL_STORE_CTX *ctx); + +/* + * Check if end of data (end of file) is reached + * Returns 1 on end, 0 otherwise. + */ +int OSSL_STORE_eof(OSSL_STORE_CTX *ctx); + +/* + * Check if an error occured + * Returns 1 if it did, 0 otherwise. + */ +int OSSL_STORE_error(OSSL_STORE_CTX *ctx); + +/* + * Close the channel + * Returns 1 on success, 0 on error. + */ +int OSSL_STORE_close(OSSL_STORE_CTX *ctx); + + +/*- + * Extracting OpenSSL types from and creating new OSSL_STORE_INFOs + * --------------------------------------------------------------- + */ + +/* + * Types of data that can be ossl_stored in a OSSL_STORE_INFO. + * OSSL_STORE_INFO_NAME is typically found when getting a listing of + * available "files" / "tokens" / what have you. + */ +# define OSSL_STORE_INFO_NAME 1 /* char * */ +# define OSSL_STORE_INFO_PARAMS 2 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_PKEY 3 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_CERT 4 /* X509 * */ +# define OSSL_STORE_INFO_CRL 5 /* X509_CRL * */ + +/* + * Functions to generate OSSL_STORE_INFOs, one function for each type we + * support having in them, as well as a generic constructor. + * + * In all cases, ownership of the object is transfered to the OSSL_STORE_INFO + * and will therefore be freed when the OSSL_STORE_INFO is freed. + */ +OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name); +int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(EVP_PKEY *params); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); + +/* + * Functions to try to extract data from a OSSL_STORE_INFO. + */ +int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *info); +const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *info); +char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *info); +const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO *info); +char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *info); +X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *info); +X509 *OSSL_STORE_INFO_get1_CERT(const OSSL_STORE_INFO *info); +X509_CRL *OSSL_STORE_INFO_get0_CRL(const OSSL_STORE_INFO *info); +X509_CRL *OSSL_STORE_INFO_get1_CRL(const OSSL_STORE_INFO *info); + +const char *OSSL_STORE_INFO_type_string(int type); + +/* + * Free the OSSL_STORE_INFO + */ +void OSSL_STORE_INFO_free(OSSL_STORE_INFO *info); + + +/*- + * Functions to construct a search URI from a base URI and search criteria + * ----------------------------------------------------------------------- + */ + +/* OSSL_STORE search types */ +# define OSSL_STORE_SEARCH_BY_NAME 1 /* subject in certs, issuer in CRLs */ +# define OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 2 +# define OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 3 +# define OSSL_STORE_SEARCH_BY_ALIAS 4 + +/* To check what search types the scheme handler supports */ +int OSSL_STORE_supports_search(OSSL_STORE_CTX *ctx, int search_type); + +/* Search term constructors */ +/* + * The input is considered to be owned by the caller, and must therefore + * remain present throughout the lifetime of the returned OSSL_STORE_SEARCH + */ +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_name(X509_NAME *name); +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_issuer_serial(X509_NAME *name, + const ASN1_INTEGER + *serial); +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_key_fingerprint(const EVP_MD *digest, + const unsigned char + *bytes, size_t len); +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_alias(const char *alias); + +/* Search term destructor */ +void OSSL_STORE_SEARCH_free(OSSL_STORE_SEARCH *search); + +/* Search term accessors */ +int OSSL_STORE_SEARCH_get_type(const OSSL_STORE_SEARCH *criterion); +X509_NAME *OSSL_STORE_SEARCH_get0_name(OSSL_STORE_SEARCH *criterion); +const ASN1_INTEGER *OSSL_STORE_SEARCH_get0_serial(const OSSL_STORE_SEARCH + *criterion); +const unsigned char *OSSL_STORE_SEARCH_get0_bytes(const OSSL_STORE_SEARCH + *criterion, size_t *length); +const char *OSSL_STORE_SEARCH_get0_string(const OSSL_STORE_SEARCH *criterion); +const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH *criterion); + +/* + * Add search criterion and expected return type (which can be unspecified) + * to the loading channel. This MUST happen before the first OSSL_STORE_load(). + */ +int OSSL_STORE_expect(OSSL_STORE_CTX *ctx, int expected_type); +int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search); + + +/*- + * Function to register a loader for the given URI scheme. + * ------------------------------------------------------- + * + * The loader receives all the main components of an URI except for the + * scheme. + */ + +typedef struct ossl_store_loader_st OSSL_STORE_LOADER; +OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); +const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); +const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +/* struct ossl_store_loader_ctx_st is defined differently by each loader */ +typedef struct ossl_store_loader_ctx_st OSSL_STORE_LOADER_CTX; +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn)(const OSSL_STORE_LOADER + *loader, + const char *uri, + const UI_METHOD *ui_method, + void *ui_data); +int OSSL_STORE_LOADER_set_open(OSSL_STORE_LOADER *loader, + OSSL_STORE_open_fn open_function); +typedef int (*OSSL_STORE_ctrl_fn)(OSSL_STORE_LOADER_CTX *ctx, int cmd, + va_list args); +int OSSL_STORE_LOADER_set_ctrl(OSSL_STORE_LOADER *loader, + OSSL_STORE_ctrl_fn ctrl_function); +typedef int (*OSSL_STORE_expect_fn)(OSSL_STORE_LOADER_CTX *ctx, int expected); +int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader, + OSSL_STORE_expect_fn expect_function); +typedef int (*OSSL_STORE_find_fn)(OSSL_STORE_LOADER_CTX *ctx, + OSSL_STORE_SEARCH *criteria); +int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader, + OSSL_STORE_find_fn find_function); +typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn)(OSSL_STORE_LOADER_CTX *ctx, + const UI_METHOD *ui_method, + void *ui_data); +int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *loader, + OSSL_STORE_load_fn load_function); +typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); +int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *loader, + OSSL_STORE_eof_fn eof_function); +typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); +int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *loader, + OSSL_STORE_error_fn error_function); +typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); +int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, + OSSL_STORE_close_fn close_function); +void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); + +int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader); +OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme); + +/*- + * Functions to list STORE loaders + * ------------------------------- + */ +int OSSL_STORE_do_all_loaders(void (*do_function) (const OSSL_STORE_LOADER + *loader, void *do_arg), + void *do_arg); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/libs/windows/include/openssl/storeerr.h b/libs/windows/include/openssl/storeerr.h new file mode 100644 index 00000000..33d0ab79 --- /dev/null +++ b/libs/windows/include/openssl/storeerr.h @@ -0,0 +1,87 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OSSL_STOREERR_H +# define HEADER_OSSL_STOREERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_OSSL_STORE_strings(void); + +/* + * OSSL_STORE function codes. + */ +# define OSSL_STORE_F_FILE_CTRL 129 +# define OSSL_STORE_F_FILE_FIND 138 +# define OSSL_STORE_F_FILE_GET_PASS 118 +# define OSSL_STORE_F_FILE_LOAD 119 +# define OSSL_STORE_F_FILE_LOAD_TRY_DECODE 124 +# define OSSL_STORE_F_FILE_NAME_TO_URI 126 +# define OSSL_STORE_F_FILE_OPEN 120 +# define OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO 127 +# define OSSL_STORE_F_OSSL_STORE_EXPECT 130 +# define OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT 128 +# define OSSL_STORE_F_OSSL_STORE_FIND 131 +# define OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT 100 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT 101 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL 102 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME 103 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION 135 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS 104 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY 105 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT 106 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL 107 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED 123 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME 109 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS 110 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY 111 +# define OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION 134 +# define OSSL_STORE_F_OSSL_STORE_INIT_ONCE 112 +# define OSSL_STORE_F_OSSL_STORE_LOADER_NEW 113 +# define OSSL_STORE_F_OSSL_STORE_OPEN 114 +# define OSSL_STORE_F_OSSL_STORE_OPEN_INT 115 +# define OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT 117 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS 132 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 133 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 136 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME 137 +# define OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT 116 +# define OSSL_STORE_F_TRY_DECODE_PARAMS 121 +# define OSSL_STORE_F_TRY_DECODE_PKCS12 122 +# define OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED 125 + +/* + * OSSL_STORE reason codes. + */ +# define OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE 107 +# define OSSL_STORE_R_BAD_PASSWORD_READ 115 +# define OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC 113 +# define OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST 121 +# define OSSL_STORE_R_INVALID_SCHEME 106 +# define OSSL_STORE_R_IS_NOT_A 112 +# define OSSL_STORE_R_LOADER_INCOMPLETE 116 +# define OSSL_STORE_R_LOADING_STARTED 117 +# define OSSL_STORE_R_NOT_A_CERTIFICATE 100 +# define OSSL_STORE_R_NOT_A_CRL 101 +# define OSSL_STORE_R_NOT_A_KEY 102 +# define OSSL_STORE_R_NOT_A_NAME 103 +# define OSSL_STORE_R_NOT_PARAMETERS 104 +# define OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR 114 +# define OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE 108 +# define OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES 119 +# define OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED 109 +# define OSSL_STORE_R_UNREGISTERED_SCHEME 105 +# define OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE 110 +# define OSSL_STORE_R_UNSUPPORTED_OPERATION 118 +# define OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE 120 +# define OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED 111 + +#endif diff --git a/libs/windows/include/openssl/tls1.h b/libs/windows/include/openssl/tls1.h index 732e87ab..e13b5dd4 100644 --- a/libs/windows/include/openssl/tls1.h +++ b/libs/windows/include/openssl/tls1.h @@ -1,5 +1,7 @@ /* * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * Copyright 2005 Nokia. All rights reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -7,46 +9,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * Portions of the attached software ("Contribution") are developed by - * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. - * - * The Contribution is licensed pursuant to the OpenSSL open source - * license provided above. - * - * ECC cipher suite support in OpenSSL originally written by - * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories. - * - */ -/* ==================================================================== - * Copyright 2005 Nokia. All rights reserved. - * - * The portions of the attached software ("Contribution") is developed by - * Nokia Corporation and is licensed pursuant to the OpenSSL open source - * license. - * - * The Contribution, originally written by Mika Kousa and Pasi Eronen of - * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites - * support (see RFC 4279) to OpenSSL. - * - * No patent licenses or other rights except those expressly stated in - * the OpenSSL open source license shall be deemed granted or received - * expressly, by implication, estoppel, or otherwise. - * - * No assurances are provided by Nokia that the Contribution does not - * infringe the patent or other intellectual property rights of any third - * party or that the license provides you with all the necessary rights - * to make use of the Contribution. - * - * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN - * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA - * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY - * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR - * OTHERWISE. - */ - #ifndef HEADER_TLS1_H # define HEADER_TLS1_H @@ -65,7 +27,8 @@ extern "C" { # define TLS1_VERSION 0x0301 # define TLS1_1_VERSION 0x0302 # define TLS1_2_VERSION 0x0303 -# define TLS_MAX_VERSION TLS1_2_VERSION +# define TLS1_3_VERSION 0x0304 +# define TLS_MAX_VERSION TLS1_3_VERSION /* Special value for method supporting multiple versions */ # define TLS_ANY_VERSION 0x10000 @@ -80,10 +43,10 @@ extern "C" { # define TLS1_2_VERSION_MINOR 0x03 # define TLS1_get_version(s) \ - ((SSL_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_version(s) : 0) + ((SSL_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_version(s) : 0) # define TLS1_get_client_version(s) \ - ((SSL_client_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_client_version(s) : 0) + ((SSL_client_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_client_version(s) : 0) # define TLS1_AD_DECRYPTION_FAILED 21 # define TLS1_AD_RECORD_OVERFLOW 22 @@ -98,6 +61,9 @@ extern "C" { # define TLS1_AD_INAPPROPRIATE_FALLBACK 86/* fatal */ # define TLS1_AD_USER_CANCELLED 90 # define TLS1_AD_NO_RENEGOTIATION 100 +/* TLSv1.3 alerts */ +# define TLS13_AD_MISSING_EXTENSION 109 /* fatal */ +# define TLS13_AD_CERTIFICATE_REQUIRED 116 /* fatal */ /* codes 110-114 are from RFC3546 */ # define TLS1_AD_UNSUPPORTED_EXTENSION 110 # define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111 @@ -123,9 +89,15 @@ extern "C" { # define TLSEXT_TYPE_cert_type 9 /* ExtensionType values from RFC4492 */ -# define TLSEXT_TYPE_elliptic_curves 10 +/* + * Prior to TLSv1.3 the supported_groups extension was known as + * elliptic_curves + */ +# define TLSEXT_TYPE_supported_groups 10 +# define TLSEXT_TYPE_elliptic_curves TLSEXT_TYPE_supported_groups # define TLSEXT_TYPE_ec_point_formats 11 + /* ExtensionType value from RFC5054 */ # define TLSEXT_TYPE_srp 12 @@ -162,6 +134,17 @@ extern "C" { /* ExtensionType value from RFC4507 */ # define TLSEXT_TYPE_session_ticket 35 +/* As defined for TLS1.3 */ +# define TLSEXT_TYPE_psk 41 +# define TLSEXT_TYPE_early_data 42 +# define TLSEXT_TYPE_supported_versions 43 +# define TLSEXT_TYPE_cookie 44 +# define TLSEXT_TYPE_psk_kex_modes 45 +# define TLSEXT_TYPE_certificate_authorities 47 +# define TLSEXT_TYPE_post_handshake_auth 49 +# define TLSEXT_TYPE_signature_algorithms_cert 50 +# define TLSEXT_TYPE_key_share 51 + /* Temporary extension type */ # define TLSEXT_TYPE_renegotiate 0xff01 @@ -217,6 +200,17 @@ extern "C" { # define TLSEXT_curve_P_256 23 # define TLSEXT_curve_P_384 24 +/* OpenSSL value to disable maximum fragment length extension */ +# define TLSEXT_max_fragment_length_DISABLED 0 +/* Allowed values for max fragment length extension */ +# define TLSEXT_max_fragment_length_512 1 +# define TLSEXT_max_fragment_length_1024 2 +# define TLSEXT_max_fragment_length_2048 3 +# define TLSEXT_max_fragment_length_4096 4 + +int SSL_CTX_set_tlsext_max_fragment_length(SSL_CTX *ctx, uint8_t mode); +int SSL_set_tlsext_max_fragment_length(SSL *ssl, uint8_t mode); + # define TLSEXT_MAXLEN_host_name 255 __owur const char *SSL_get_servername(const SSL *s, const int type); @@ -233,6 +227,22 @@ __owur int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, const unsigned char *context, size_t contextlen, int use_context); +/* + * SSL_export_keying_material_early exports a value derived from the + * early exporter master secret, as specified in + * https://tools.ietf.org/html/draft-ietf-tls-tls13-23. It writes + * |olen| bytes to |out| given a label and optional context. It + * returns 1 on success and 0 otherwise. + */ +__owur int SSL_export_keying_material_early(SSL *s, unsigned char *out, + size_t olen, const char *label, + size_t llen, + const unsigned char *context, + size_t contextlen); + +int SSL_get_peer_signature_type_nid(const SSL *s, int *pnid); +int SSL_get_signature_type_nid(const SSL *s, int *pnid); + int SSL_get_sigalgs(SSL *s, int idx, int *psign, int *phash, int *psignandhash, unsigned char *rsig, unsigned char *rhash); @@ -244,40 +254,43 @@ int SSL_get_shared_sigalgs(SSL *s, int idx, __owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain); # define SSL_set_tlsext_host_name(s,name) \ -SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,(char *)name) + SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,\ + (void *)name) # define SSL_set_tlsext_debug_callback(ssl, cb) \ -SSL_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_CB,(void (*)(void))cb) + SSL_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_CB,\ + (void (*)(void))cb) # define SSL_set_tlsext_debug_arg(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_ARG,0, (void *)arg) + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_ARG,0,arg) # define SSL_get_tlsext_status_type(ssl) \ -SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0, NULL) + SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) # define SSL_set_tlsext_status_type(ssl, type) \ -SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type, NULL) + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type,NULL) # define SSL_get_tlsext_status_exts(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg) + SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS,0,arg) # define SSL_set_tlsext_status_exts(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg) + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0,arg) # define SSL_get_tlsext_status_ids(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg) + SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0,arg) # define SSL_set_tlsext_status_ids(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg) + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0,arg) # define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \ -SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0, (void *)arg) + SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0,arg) # define SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen) \ -SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen, (void *)arg) + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen,arg) # define SSL_CTX_set_tlsext_servername_callback(ctx, cb) \ -SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,(void (*)(void))cb) + SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,\ + (void (*)(void))cb) # define SSL_TLSEXT_ERR_OK 0 # define SSL_TLSEXT_ERR_ALERT_WARNING 1 @@ -285,40 +298,42 @@ SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,(void (*)(void))cb) # define SSL_TLSEXT_ERR_NOACK 3 # define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \ -SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0, (void *)arg) + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0,arg) # define SSL_CTX_get_tlsext_ticket_keys(ctx, keys, keylen) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_GET_TLSEXT_TICKET_KEYS,(keylen),(keys)) + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_TLSEXT_TICKET_KEYS,keylen,keys) # define SSL_CTX_set_tlsext_ticket_keys(ctx, keys, keylen) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_SET_TLSEXT_TICKET_KEYS,(keylen),(keys)) + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_TICKET_KEYS,keylen,keys) # define SSL_CTX_get_tlsext_status_cb(ssl, cb) \ -SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB,0, (void (**)(void))cb) + SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB,0,(void *)cb) # define SSL_CTX_set_tlsext_status_cb(ssl, cb) \ -SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,(void (*)(void))cb) + SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,\ + (void (*)(void))cb) # define SSL_CTX_get_tlsext_status_arg(ssl, arg) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg) + SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG,0,arg) # define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg) + SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0,arg) -#define SSL_CTX_set_tlsext_status_type(ssl, type) \ - SSL_CTX_ctrl(ssl, SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE, type, NULL) +# define SSL_CTX_set_tlsext_status_type(ssl, type) \ + SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type,NULL) -#define SSL_CTX_get_tlsext_status_type(ssl) \ - SSL_CTX_ctrl(ssl, SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE, 0, NULL) +# define SSL_CTX_get_tlsext_status_type(ssl) \ + SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) # define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ -SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) + SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,\ + (void (*)(void))cb) # ifndef OPENSSL_NO_HEARTBEATS # define SSL_DTLSEXT_HB_ENABLED 0x01 # define SSL_DTLSEXT_HB_DONT_SEND_REQUESTS 0x02 # define SSL_DTLSEXT_HB_DONT_RECV_REQUESTS 0x04 # define SSL_get_dtlsext_heartbeat_pending(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING,0,NULL) + SSL_ctrl(ssl,SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING,0,NULL) # define SSL_set_dtlsext_heartbeat_no_requests(ssl, arg) \ - SSL_ctrl((ssl),SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) + SSL_ctrl(ssl,SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) # if OPENSSL_API_COMPAT < 0x10100000L # define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT \ @@ -336,7 +351,7 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) # define SSL_get_tlsext_heartbeat_pending(ssl) \ SSL_get_dtlsext_heartbeat_pending(ssl) # define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ - SSL_set_dtlsext_heartbeat_no_requests(ssl, arg) + SSL_set_dtlsext_heartbeat_no_requests(ssl,arg) # endif # endif @@ -345,12 +360,10 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) # define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008B # define TLS1_CK_PSK_WITH_AES_128_CBC_SHA 0x0300008C # define TLS1_CK_PSK_WITH_AES_256_CBC_SHA 0x0300008D - # define TLS1_CK_DHE_PSK_WITH_RC4_128_SHA 0x0300008E # define TLS1_CK_DHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008F # define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA 0x03000090 # define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA 0x03000091 - # define TLS1_CK_RSA_PSK_WITH_RC4_128_SHA 0x03000092 # define TLS1_CK_RSA_PSK_WITH_3DES_EDE_CBC_SHA 0x03000093 # define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA 0x03000094 @@ -363,17 +376,14 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) # define TLS1_CK_DHE_PSK_WITH_AES_256_GCM_SHA384 0x030000AB # define TLS1_CK_RSA_PSK_WITH_AES_128_GCM_SHA256 0x030000AC # define TLS1_CK_RSA_PSK_WITH_AES_256_GCM_SHA384 0x030000AD - # define TLS1_CK_PSK_WITH_AES_128_CBC_SHA256 0x030000AE # define TLS1_CK_PSK_WITH_AES_256_CBC_SHA384 0x030000AF # define TLS1_CK_PSK_WITH_NULL_SHA256 0x030000B0 # define TLS1_CK_PSK_WITH_NULL_SHA384 0x030000B1 - # define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA256 0x030000B2 # define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA384 0x030000B3 # define TLS1_CK_DHE_PSK_WITH_NULL_SHA256 0x030000B4 # define TLS1_CK_DHE_PSK_WITH_NULL_SHA384 0x030000B5 - # define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA256 0x030000B6 # define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA384 0x030000B7 # define TLS1_CK_RSA_PSK_WITH_NULL_SHA256 0x030000B8 @@ -391,7 +401,6 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) # define TLS1_CK_DHE_DSS_WITH_AES_128_SHA 0x03000032 # define TLS1_CK_DHE_RSA_WITH_AES_128_SHA 0x03000033 # define TLS1_CK_ADH_WITH_AES_128_SHA 0x03000034 - # define TLS1_CK_RSA_WITH_AES_256_SHA 0x03000035 # define TLS1_CK_DH_DSS_WITH_AES_256_SHA 0x03000036 # define TLS1_CK_DH_RSA_WITH_AES_256_SHA 0x03000037 @@ -536,7 +545,6 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) # define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022 /* ECDH HMAC based ciphersuites from RFC5289 */ - # define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023 # define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024 # define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025 @@ -566,7 +574,6 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) # define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA384 0x0300C038 /* NULL PSK ciphersuites from RFC4785 */ - # define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA 0x0300C039 # define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA256 0x0300C03A # define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA384 0x0300C03B @@ -599,6 +606,233 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) # define TLS1_CK_DHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAD # define TLS1_CK_RSA_PSK_WITH_CHACHA20_POLY1305 0x0300CCAE +/* TLS v1.3 ciphersuites */ +# define TLS1_3_CK_AES_128_GCM_SHA256 0x03001301 +# define TLS1_3_CK_AES_256_GCM_SHA384 0x03001302 +# define TLS1_3_CK_CHACHA20_POLY1305_SHA256 0x03001303 +# define TLS1_3_CK_AES_128_CCM_SHA256 0x03001304 +# define TLS1_3_CK_AES_128_CCM_8_SHA256 0x03001305 + +/* Aria ciphersuites from RFC6209 */ +# define TLS1_CK_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C050 +# define TLS1_CK_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C051 +# define TLS1_CK_DHE_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C052 +# define TLS1_CK_DHE_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C053 +# define TLS1_CK_DH_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C054 +# define TLS1_CK_DH_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C055 +# define TLS1_CK_DHE_DSS_WITH_ARIA_128_GCM_SHA256 0x0300C056 +# define TLS1_CK_DHE_DSS_WITH_ARIA_256_GCM_SHA384 0x0300C057 +# define TLS1_CK_DH_DSS_WITH_ARIA_128_GCM_SHA256 0x0300C058 +# define TLS1_CK_DH_DSS_WITH_ARIA_256_GCM_SHA384 0x0300C059 +# define TLS1_CK_DH_anon_WITH_ARIA_128_GCM_SHA256 0x0300C05A +# define TLS1_CK_DH_anon_WITH_ARIA_256_GCM_SHA384 0x0300C05B +# define TLS1_CK_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 0x0300C05C +# define TLS1_CK_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 0x0300C05D +# define TLS1_CK_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 0x0300C05E +# define TLS1_CK_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 0x0300C05F +# define TLS1_CK_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C060 +# define TLS1_CK_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C061 +# define TLS1_CK_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C062 +# define TLS1_CK_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C063 +# define TLS1_CK_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06A +# define TLS1_CK_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06B +# define TLS1_CK_DHE_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06C +# define TLS1_CK_DHE_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06D +# define TLS1_CK_RSA_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06E +# define TLS1_CK_RSA_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06F + +/* a bundle of RFC standard cipher names, generated from ssl3_ciphers[] */ +# define TLS1_RFC_RSA_WITH_AES_128_SHA "TLS_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_AES_128_SHA "TLS_DHE_DSS_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_SHA "TLS_DHE_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ADH_WITH_AES_128_SHA "TLS_DH_anon_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_RSA_WITH_AES_256_SHA "TLS_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_AES_256_SHA "TLS_DHE_DSS_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_SHA "TLS_DHE_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ADH_WITH_AES_256_SHA "TLS_DH_anon_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_RSA_WITH_NULL_SHA256 "TLS_RSA_WITH_NULL_SHA256" +# define TLS1_RFC_RSA_WITH_AES_128_SHA256 "TLS_RSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_AES_256_SHA256 "TLS_RSA_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_AES_128_SHA256 "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_SHA256 "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_AES_256_SHA256 "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_SHA256 "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_AES_128_SHA256 "TLS_DH_anon_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_AES_256_SHA256 "TLS_DH_anon_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_AES_128_GCM_SHA256 "TLS_RSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_RSA_WITH_AES_256_GCM_SHA384 "TLS_RSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_GCM_SHA256 "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_GCM_SHA384 "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_DHE_DSS_WITH_AES_128_GCM_SHA256 "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_AES_256_GCM_SHA384 "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_ADH_WITH_AES_128_GCM_SHA256 "TLS_DH_anon_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_ADH_WITH_AES_256_GCM_SHA384 "TLS_DH_anon_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_RSA_WITH_AES_128_CCM "TLS_RSA_WITH_AES_128_CCM" +# define TLS1_RFC_RSA_WITH_AES_256_CCM "TLS_RSA_WITH_AES_256_CCM" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_CCM "TLS_DHE_RSA_WITH_AES_128_CCM" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_CCM "TLS_DHE_RSA_WITH_AES_256_CCM" +# define TLS1_RFC_RSA_WITH_AES_128_CCM_8 "TLS_RSA_WITH_AES_128_CCM_8" +# define TLS1_RFC_RSA_WITH_AES_256_CCM_8 "TLS_RSA_WITH_AES_256_CCM_8" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_CCM_8 "TLS_DHE_RSA_WITH_AES_128_CCM_8" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_CCM_8 "TLS_DHE_RSA_WITH_AES_256_CCM_8" +# define TLS1_RFC_PSK_WITH_AES_128_CCM "TLS_PSK_WITH_AES_128_CCM" +# define TLS1_RFC_PSK_WITH_AES_256_CCM "TLS_PSK_WITH_AES_256_CCM" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CCM "TLS_DHE_PSK_WITH_AES_128_CCM" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CCM "TLS_DHE_PSK_WITH_AES_256_CCM" +# define TLS1_RFC_PSK_WITH_AES_128_CCM_8 "TLS_PSK_WITH_AES_128_CCM_8" +# define TLS1_RFC_PSK_WITH_AES_256_CCM_8 "TLS_PSK_WITH_AES_256_CCM_8" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CCM_8 "TLS_PSK_DHE_WITH_AES_128_CCM_8" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CCM_8 "TLS_PSK_DHE_WITH_AES_256_CCM_8" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM "TLS_ECDHE_ECDSA_WITH_AES_128_CCM" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM "TLS_ECDHE_ECDSA_WITH_AES_256_CCM" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM_8 "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM_8 "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8" +# define TLS1_3_RFC_AES_128_GCM_SHA256 "TLS_AES_128_GCM_SHA256" +# define TLS1_3_RFC_AES_256_GCM_SHA384 "TLS_AES_256_GCM_SHA384" +# define TLS1_3_RFC_CHACHA20_POLY1305_SHA256 "TLS_CHACHA20_POLY1305_SHA256" +# define TLS1_3_RFC_AES_128_CCM_SHA256 "TLS_AES_128_CCM_SHA256" +# define TLS1_3_RFC_AES_128_CCM_8_SHA256 "TLS_AES_128_CCM_8_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_NULL_SHA "TLS_ECDHE_ECDSA_WITH_NULL_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_NULL_SHA "TLS_ECDHE_RSA_WITH_NULL_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_DES_192_CBC3_SHA "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_CBC_SHA "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_CBC_SHA "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDH_anon_WITH_NULL_SHA "TLS_ECDH_anon_WITH_NULL_SHA" +# define TLS1_RFC_ECDH_anon_WITH_DES_192_CBC3_SHA "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDH_anon_WITH_AES_128_CBC_SHA "TLS_ECDH_anon_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDH_anon_WITH_AES_256_CBC_SHA "TLS_ECDH_anon_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_SHA256 "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_SHA384 "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_SHA256 "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_SHA384 "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_PSK_WITH_NULL_SHA "TLS_PSK_WITH_NULL_SHA" +# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA "TLS_DHE_PSK_WITH_NULL_SHA" +# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA "TLS_RSA_PSK_WITH_NULL_SHA" +# define TLS1_RFC_PSK_WITH_3DES_EDE_CBC_SHA "TLS_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_PSK_WITH_AES_128_CBC_SHA "TLS_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_PSK_WITH_AES_256_CBC_SHA "TLS_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_PSK_WITH_3DES_EDE_CBC_SHA "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA "TLS_DHE_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA "TLS_DHE_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_RSA_PSK_WITH_3DES_EDE_CBC_SHA "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA "TLS_RSA_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA "TLS_RSA_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_PSK_WITH_AES_128_GCM_SHA256 "TLS_PSK_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_PSK_WITH_AES_256_GCM_SHA384 "TLS_PSK_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_GCM_SHA256 "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_GCM_SHA384 "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_AES_128_GCM_SHA256 "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_AES_256_GCM_SHA384 "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_PSK_WITH_AES_128_CBC_SHA256 "TLS_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_PSK_WITH_AES_256_CBC_SHA384 "TLS_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_PSK_WITH_NULL_SHA256 "TLS_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_PSK_WITH_NULL_SHA384 "TLS_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA256 "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA384 "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA256 "TLS_DHE_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA384 "TLS_DHE_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA256 "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA384 "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA256 "TLS_RSA_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA384 "TLS_RSA_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA256 "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA384 "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA "TLS_ECDHE_PSK_WITH_NULL_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA256 "TLS_ECDHE_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA384 "TLS_ECDHE_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_SRP_SHA_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_SRP_SHA_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_SRP_SHA_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_CHACHA20_POLY1305 "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_CHACHA20_POLY1305 "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_PSK_WITH_CHACHA20_POLY1305 "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_CHACHA20_POLY1305 "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_CHACHA20_POLY1305 "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_CHACHA20_POLY1305 "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA256 "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_RSA_WITH_SEED_SHA "TLS_RSA_WITH_SEED_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_SEED_SHA "TLS_DHE_DSS_WITH_SEED_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_SEED_SHA "TLS_DHE_RSA_WITH_SEED_CBC_SHA" +# define TLS1_RFC_ADH_WITH_SEED_SHA "TLS_DH_anon_WITH_SEED_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_RC4_128_SHA "TLS_ECDHE_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_ECDH_anon_WITH_RC4_128_SHA "TLS_ECDH_anon_WITH_RC4_128_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_RC4_128_SHA "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_RC4_128_SHA "TLS_ECDHE_RSA_WITH_RC4_128_SHA" +# define TLS1_RFC_PSK_WITH_RC4_128_SHA "TLS_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_RSA_PSK_WITH_RC4_128_SHA "TLS_RSA_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_DHE_PSK_WITH_RC4_128_SHA "TLS_DHE_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DHE_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DH_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DH_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DHE_DSS_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DH_DSS_WITH_ARIA_128_GCM_SHA256 "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DH_DSS_WITH_ARIA_256_GCM_SHA384 "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DH_anon_WITH_ARIA_128_GCM_SHA256 "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DH_anon_WITH_ARIA_256_GCM_SHA384 "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_PSK_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_PSK_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384" + + /* * XXX Backward compatibility alert: Older versions of OpenSSL gave some DHE * ciphers names with "EDH" instead of "DHE". Going forward, we should be @@ -783,7 +1017,6 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) # define TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384 "ADH-AES256-GCM-SHA384" /* CCM ciphersuites from RFC6655 */ - # define TLS1_TXT_RSA_WITH_AES_128_CCM "AES128-CCM" # define TLS1_TXT_RSA_WITH_AES_256_CCM "AES256-CCM" # define TLS1_TXT_DHE_RSA_WITH_AES_128_CCM "DHE-RSA-AES128-CCM" @@ -805,14 +1038,12 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) # define TLS1_TXT_DHE_PSK_WITH_AES_256_CCM_8 "DHE-PSK-AES256-CCM8" /* CCM ciphersuites from RFC7251 */ - # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM "ECDHE-ECDSA-AES128-CCM" # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM "ECDHE-ECDSA-AES256-CCM" # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM_8 "ECDHE-ECDSA-AES128-CCM8" # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM_8 "ECDHE-ECDSA-AES256-CCM8" /* ECDH HMAC based ciphersuites from RFC5289 */ - # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256 "ECDHE-ECDSA-AES128-SHA256" # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384 "ECDHE-ECDSA-AES256-SHA384" # define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256 "ECDH-ECDSA-AES128-SHA256" @@ -868,6 +1099,34 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) # define TLS1_TXT_DHE_PSK_WITH_CHACHA20_POLY1305 "DHE-PSK-CHACHA20-POLY1305" # define TLS1_TXT_RSA_PSK_WITH_CHACHA20_POLY1305 "RSA-PSK-CHACHA20-POLY1305" +/* Aria ciphersuites from RFC6209 */ +# define TLS1_TXT_RSA_WITH_ARIA_128_GCM_SHA256 "ARIA128-GCM-SHA256" +# define TLS1_TXT_RSA_WITH_ARIA_256_GCM_SHA384 "ARIA256-GCM-SHA384" +# define TLS1_TXT_DHE_RSA_WITH_ARIA_128_GCM_SHA256 "DHE-RSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_ARIA_256_GCM_SHA384 "DHE-RSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_DH_RSA_WITH_ARIA_128_GCM_SHA256 "DH-RSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_DH_RSA_WITH_ARIA_256_GCM_SHA384 "DH-RSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_DHE_DSS_WITH_ARIA_128_GCM_SHA256 "DHE-DSS-ARIA128-GCM-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_ARIA_256_GCM_SHA384 "DHE-DSS-ARIA256-GCM-SHA384" +# define TLS1_TXT_DH_DSS_WITH_ARIA_128_GCM_SHA256 "DH-DSS-ARIA128-GCM-SHA256" +# define TLS1_TXT_DH_DSS_WITH_ARIA_256_GCM_SHA384 "DH-DSS-ARIA256-GCM-SHA384" +# define TLS1_TXT_DH_anon_WITH_ARIA_128_GCM_SHA256 "ADH-ARIA128-GCM-SHA256" +# define TLS1_TXT_DH_anon_WITH_ARIA_256_GCM_SHA384 "ADH-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 "ECDHE-ECDSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 "ECDHE-ECDSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 "ECDH-ECDSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 "ECDH-ECDSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 "ECDHE-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 "ECDHE-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 "ECDH-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 "ECDH-ARIA256-GCM-SHA384" +# define TLS1_TXT_PSK_WITH_ARIA_128_GCM_SHA256 "PSK-ARIA128-GCM-SHA256" +# define TLS1_TXT_PSK_WITH_ARIA_256_GCM_SHA384 "PSK-ARIA256-GCM-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_ARIA_128_GCM_SHA256 "DHE-PSK-ARIA128-GCM-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_ARIA_256_GCM_SHA384 "DHE-PSK-ARIA256-GCM-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_ARIA_128_GCM_SHA256 "RSA-PSK-ARIA128-GCM-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_ARIA_256_GCM_SHA384 "RSA-PSK-ARIA256-GCM-SHA384" + # define TLS_CT_RSA_SIGN 1 # define TLS_CT_DSS_SIGN 2 # define TLS_CT_RSA_FIXED_DH 3 diff --git a/libs/windows/include/openssl/ts.h b/libs/windows/include/openssl/ts.h index a5659825..3b58aa52 100644 --- a/libs/windows/include/openssl/ts.h +++ b/libs/windows/include/openssl/ts.h @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -17,12 +17,12 @@ # include # include # include -# include # include # include # include # include # include +# include # ifdef __cplusplus extern "C" { # endif @@ -61,6 +61,11 @@ typedef struct ESS_signing_cert ESS_SIGNING_CERT; DEFINE_STACK_OF(ESS_CERT_ID) +typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; +typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; + +DEFINE_STACK_OF(ESS_CERT_ID_V2) + typedef struct TS_resp_st TS_RESP; TS_REQ *TS_REQ_new(void); @@ -156,6 +161,21 @@ ESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a, const unsigned char **pp, long length); ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a); +ESS_CERT_ID_V2 *ESS_CERT_ID_V2_new(void); +void ESS_CERT_ID_V2_free(ESS_CERT_ID_V2 *a); +int i2d_ESS_CERT_ID_V2(const ESS_CERT_ID_V2 *a, unsigned char **pp); +ESS_CERT_ID_V2 *d2i_ESS_CERT_ID_V2(ESS_CERT_ID_V2 **a, + const unsigned char **pp, long length); +ESS_CERT_ID_V2 *ESS_CERT_ID_V2_dup(ESS_CERT_ID_V2 *a); + +ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_new(void); +void ESS_SIGNING_CERT_V2_free(ESS_SIGNING_CERT_V2 *a); +int i2d_ESS_SIGNING_CERT_V2(const ESS_SIGNING_CERT_V2 *a, unsigned char **pp); +ESS_SIGNING_CERT_V2 *d2i_ESS_SIGNING_CERT_V2(ESS_SIGNING_CERT_V2 **a, + const unsigned char **pp, + long length); +ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_dup(ESS_SIGNING_CERT_V2 *a); + int TS_REQ_set_version(TS_REQ *a, long version); long TS_REQ_get_version(const TS_REQ *a); @@ -316,6 +336,7 @@ int TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key); int TS_RESP_CTX_set_signer_digest(TS_RESP_CTX *ctx, const EVP_MD *signer_digest); +int TS_RESP_CTX_set_ess_cert_id_digest(TS_RESP_CTX *ctx, const EVP_MD *md); /* This parameter must be set. */ int TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, const ASN1_OBJECT *def_policy); @@ -528,113 +549,8 @@ int TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_ess_cert_id_chain(CONF *conf, const char *section, TS_RESP_CTX *ctx); - -/* -------------------------------------------------- */ -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_TS_strings(void); - -/* Error codes for the TS functions. */ - -/* Function codes. */ -# define TS_F_DEF_SERIAL_CB 110 -# define TS_F_DEF_TIME_CB 111 -# define TS_F_ESS_ADD_SIGNING_CERT 112 -# define TS_F_ESS_CERT_ID_NEW_INIT 113 -# define TS_F_ESS_SIGNING_CERT_NEW_INIT 114 -# define TS_F_INT_TS_RESP_VERIFY_TOKEN 149 -# define TS_F_PKCS7_TO_TS_TST_INFO 148 -# define TS_F_TS_ACCURACY_SET_MICROS 115 -# define TS_F_TS_ACCURACY_SET_MILLIS 116 -# define TS_F_TS_ACCURACY_SET_SECONDS 117 -# define TS_F_TS_CHECK_IMPRINTS 100 -# define TS_F_TS_CHECK_NONCES 101 -# define TS_F_TS_CHECK_POLICY 102 -# define TS_F_TS_CHECK_SIGNING_CERTS 103 -# define TS_F_TS_CHECK_STATUS_INFO 104 -# define TS_F_TS_COMPUTE_IMPRINT 145 -# define TS_F_TS_CONF_INVALID 151 -# define TS_F_TS_CONF_LOAD_CERT 153 -# define TS_F_TS_CONF_LOAD_CERTS 154 -# define TS_F_TS_CONF_LOAD_KEY 155 -# define TS_F_TS_CONF_LOOKUP_FAIL 152 -# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 146 -# define TS_F_TS_GET_STATUS_TEXT 105 -# define TS_F_TS_MSG_IMPRINT_SET_ALGO 118 -# define TS_F_TS_REQ_SET_MSG_IMPRINT 119 -# define TS_F_TS_REQ_SET_NONCE 120 -# define TS_F_TS_REQ_SET_POLICY_ID 121 -# define TS_F_TS_RESP_CREATE_RESPONSE 122 -# define TS_F_TS_RESP_CREATE_TST_INFO 123 -# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 124 -# define TS_F_TS_RESP_CTX_ADD_MD 125 -# define TS_F_TS_RESP_CTX_ADD_POLICY 126 -# define TS_F_TS_RESP_CTX_NEW 127 -# define TS_F_TS_RESP_CTX_SET_ACCURACY 128 -# define TS_F_TS_RESP_CTX_SET_CERTS 129 -# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 130 -# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 131 -# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 132 -# define TS_F_TS_RESP_GET_POLICY 133 -# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 134 -# define TS_F_TS_RESP_SET_STATUS_INFO 135 -# define TS_F_TS_RESP_SET_TST_INFO 150 -# define TS_F_TS_RESP_SIGN 136 -# define TS_F_TS_RESP_VERIFY_SIGNATURE 106 -# define TS_F_TS_TST_INFO_SET_ACCURACY 137 -# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 138 -# define TS_F_TS_TST_INFO_SET_NONCE 139 -# define TS_F_TS_TST_INFO_SET_POLICY_ID 140 -# define TS_F_TS_TST_INFO_SET_SERIAL 141 -# define TS_F_TS_TST_INFO_SET_TIME 142 -# define TS_F_TS_TST_INFO_SET_TSA 143 -# define TS_F_TS_VERIFY 108 -# define TS_F_TS_VERIFY_CERT 109 -# define TS_F_TS_VERIFY_CTX_NEW 144 - -/* Reason codes. */ -# define TS_R_BAD_PKCS7_TYPE 132 -# define TS_R_BAD_TYPE 133 -# define TS_R_CANNOT_LOAD_CERT 137 -# define TS_R_CANNOT_LOAD_KEY 138 -# define TS_R_CERTIFICATE_VERIFY_ERROR 100 -# define TS_R_COULD_NOT_SET_ENGINE 127 -# define TS_R_COULD_NOT_SET_TIME 115 -# define TS_R_DETACHED_CONTENT 134 -# define TS_R_ESS_ADD_SIGNING_CERT_ERROR 116 -# define TS_R_ESS_SIGNING_CERTIFICATE_ERROR 101 -# define TS_R_INVALID_NULL_POINTER 102 -# define TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE 117 -# define TS_R_MESSAGE_IMPRINT_MISMATCH 103 -# define TS_R_NONCE_MISMATCH 104 -# define TS_R_NONCE_NOT_RETURNED 105 -# define TS_R_NO_CONTENT 106 -# define TS_R_NO_TIME_STAMP_TOKEN 107 -# define TS_R_PKCS7_ADD_SIGNATURE_ERROR 118 -# define TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR 119 -# define TS_R_PKCS7_TO_TS_TST_INFO_FAILED 129 -# define TS_R_POLICY_MISMATCH 108 -# define TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 120 -# define TS_R_RESPONSE_SETUP_ERROR 121 -# define TS_R_SIGNATURE_FAILURE 109 -# define TS_R_THERE_MUST_BE_ONE_SIGNER 110 -# define TS_R_TIME_SYSCALL_ERROR 122 -# define TS_R_TOKEN_NOT_PRESENT 130 -# define TS_R_TOKEN_PRESENT 131 -# define TS_R_TSA_NAME_MISMATCH 111 -# define TS_R_TSA_UNTRUSTED 112 -# define TS_R_TST_INFO_SETUP_ERROR 123 -# define TS_R_TS_DATASIGN 124 -# define TS_R_UNACCEPTABLE_POLICY 125 -# define TS_R_UNSUPPORTED_MD_ALGORITHM 126 -# define TS_R_UNSUPPORTED_VERSION 113 -# define TS_R_VAR_BAD_VALUE 135 -# define TS_R_VAR_LOOKUP_FAILURE 136 -# define TS_R_WRONG_CONTENT_TYPE 114 +int TS_CONF_set_ess_cert_id_digest(CONF *conf, const char *section, + TS_RESP_CTX *ctx); # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/tserr.h b/libs/windows/include/openssl/tserr.h new file mode 100644 index 00000000..3e049256 --- /dev/null +++ b/libs/windows/include/openssl/tserr.h @@ -0,0 +1,128 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_TSERR_H +# define HEADER_TSERR_H + +# include + +# ifndef OPENSSL_NO_TS + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_TS_strings(void); + +/* + * TS function codes. + */ +# define TS_F_DEF_SERIAL_CB 110 +# define TS_F_DEF_TIME_CB 111 +# define TS_F_ESS_ADD_SIGNING_CERT 112 +# define TS_F_ESS_ADD_SIGNING_CERT_V2 147 +# define TS_F_ESS_CERT_ID_NEW_INIT 113 +# define TS_F_ESS_CERT_ID_V2_NEW_INIT 156 +# define TS_F_ESS_SIGNING_CERT_NEW_INIT 114 +# define TS_F_ESS_SIGNING_CERT_V2_NEW_INIT 157 +# define TS_F_INT_TS_RESP_VERIFY_TOKEN 149 +# define TS_F_PKCS7_TO_TS_TST_INFO 148 +# define TS_F_TS_ACCURACY_SET_MICROS 115 +# define TS_F_TS_ACCURACY_SET_MILLIS 116 +# define TS_F_TS_ACCURACY_SET_SECONDS 117 +# define TS_F_TS_CHECK_IMPRINTS 100 +# define TS_F_TS_CHECK_NONCES 101 +# define TS_F_TS_CHECK_POLICY 102 +# define TS_F_TS_CHECK_SIGNING_CERTS 103 +# define TS_F_TS_CHECK_STATUS_INFO 104 +# define TS_F_TS_COMPUTE_IMPRINT 145 +# define TS_F_TS_CONF_INVALID 151 +# define TS_F_TS_CONF_LOAD_CERT 153 +# define TS_F_TS_CONF_LOAD_CERTS 154 +# define TS_F_TS_CONF_LOAD_KEY 155 +# define TS_F_TS_CONF_LOOKUP_FAIL 152 +# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 146 +# define TS_F_TS_GET_STATUS_TEXT 105 +# define TS_F_TS_MSG_IMPRINT_SET_ALGO 118 +# define TS_F_TS_REQ_SET_MSG_IMPRINT 119 +# define TS_F_TS_REQ_SET_NONCE 120 +# define TS_F_TS_REQ_SET_POLICY_ID 121 +# define TS_F_TS_RESP_CREATE_RESPONSE 122 +# define TS_F_TS_RESP_CREATE_TST_INFO 123 +# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 124 +# define TS_F_TS_RESP_CTX_ADD_MD 125 +# define TS_F_TS_RESP_CTX_ADD_POLICY 126 +# define TS_F_TS_RESP_CTX_NEW 127 +# define TS_F_TS_RESP_CTX_SET_ACCURACY 128 +# define TS_F_TS_RESP_CTX_SET_CERTS 129 +# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 130 +# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 131 +# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 132 +# define TS_F_TS_RESP_GET_POLICY 133 +# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 134 +# define TS_F_TS_RESP_SET_STATUS_INFO 135 +# define TS_F_TS_RESP_SET_TST_INFO 150 +# define TS_F_TS_RESP_SIGN 136 +# define TS_F_TS_RESP_VERIFY_SIGNATURE 106 +# define TS_F_TS_TST_INFO_SET_ACCURACY 137 +# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 138 +# define TS_F_TS_TST_INFO_SET_NONCE 139 +# define TS_F_TS_TST_INFO_SET_POLICY_ID 140 +# define TS_F_TS_TST_INFO_SET_SERIAL 141 +# define TS_F_TS_TST_INFO_SET_TIME 142 +# define TS_F_TS_TST_INFO_SET_TSA 143 +# define TS_F_TS_VERIFY 108 +# define TS_F_TS_VERIFY_CERT 109 +# define TS_F_TS_VERIFY_CTX_NEW 144 + +/* + * TS reason codes. + */ +# define TS_R_BAD_PKCS7_TYPE 132 +# define TS_R_BAD_TYPE 133 +# define TS_R_CANNOT_LOAD_CERT 137 +# define TS_R_CANNOT_LOAD_KEY 138 +# define TS_R_CERTIFICATE_VERIFY_ERROR 100 +# define TS_R_COULD_NOT_SET_ENGINE 127 +# define TS_R_COULD_NOT_SET_TIME 115 +# define TS_R_DETACHED_CONTENT 134 +# define TS_R_ESS_ADD_SIGNING_CERT_ERROR 116 +# define TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR 139 +# define TS_R_ESS_SIGNING_CERTIFICATE_ERROR 101 +# define TS_R_INVALID_NULL_POINTER 102 +# define TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE 117 +# define TS_R_MESSAGE_IMPRINT_MISMATCH 103 +# define TS_R_NONCE_MISMATCH 104 +# define TS_R_NONCE_NOT_RETURNED 105 +# define TS_R_NO_CONTENT 106 +# define TS_R_NO_TIME_STAMP_TOKEN 107 +# define TS_R_PKCS7_ADD_SIGNATURE_ERROR 118 +# define TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR 119 +# define TS_R_PKCS7_TO_TS_TST_INFO_FAILED 129 +# define TS_R_POLICY_MISMATCH 108 +# define TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 120 +# define TS_R_RESPONSE_SETUP_ERROR 121 +# define TS_R_SIGNATURE_FAILURE 109 +# define TS_R_THERE_MUST_BE_ONE_SIGNER 110 +# define TS_R_TIME_SYSCALL_ERROR 122 +# define TS_R_TOKEN_NOT_PRESENT 130 +# define TS_R_TOKEN_PRESENT 131 +# define TS_R_TSA_NAME_MISMATCH 111 +# define TS_R_TSA_UNTRUSTED 112 +# define TS_R_TST_INFO_SETUP_ERROR 123 +# define TS_R_TS_DATASIGN 124 +# define TS_R_UNACCEPTABLE_POLICY 125 +# define TS_R_UNSUPPORTED_MD_ALGORITHM 126 +# define TS_R_UNSUPPORTED_VERSION 113 +# define TS_R_VAR_BAD_VALUE 135 +# define TS_R_VAR_LOOKUP_FAILURE 136 +# define TS_R_WRONG_CONTENT_TYPE 114 + +# endif +#endif diff --git a/libs/windows/include/openssl/txt_db.h b/libs/windows/include/openssl/txt_db.h index 0e6c943e..ec981a43 100644 --- a/libs/windows/include/openssl/txt_db.h +++ b/libs/windows/include/openssl/txt_db.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -12,7 +12,7 @@ # include # include -# include +# include # include # define DB_ERROR_OK 0 diff --git a/libs/windows/include/openssl/ui.h b/libs/windows/include/openssl/ui.h index 49e763de..7c721ec8 100644 --- a/libs/windows/include/openssl/ui.h +++ b/libs/windows/include/openssl/ui.h @@ -1,5 +1,5 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -12,17 +12,24 @@ # include -# ifndef OPENSSL_NO_UI +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# include +# include +# include +# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include +/* For compatibility reasons, the macro OPENSSL_NO_UI is currently retained */ +# if OPENSSL_API_COMPAT < 0x10200000L +# ifdef OPENSSL_NO_UI_CONSOLE +# define OPENSSL_NO_UI # endif -# include -# include +# endif -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif /* * All the following functions return -1 or NULL on error and in some cases @@ -110,7 +117,7 @@ int UI_dup_error_string(UI *ui, const char *text); * each UI being marked with this flag, or the application might get * confused. */ -# define UI_INPUT_FLAG_DEFAULT_PWD 0x02 +# define UI_INPUT_FLAG_DEFAULT_PWD 0x02 /*- * The user of these routines may want to define flags of their own. The core @@ -122,7 +129,7 @@ int UI_dup_error_string(UI *ui, const char *text); * #define MY_UI_FLAG1 (0x01 << UI_INPUT_FLAG_USER_BASE) * */ -# define UI_INPUT_FLAG_USER_BASE 16 +# define UI_INPUT_FLAG_USER_BASE 16 /*- * The following function helps construct a prompt. object_desc is a @@ -157,17 +164,24 @@ char *UI_construct_prompt(UI *ui_method, * methods may not, however. */ void *UI_add_user_data(UI *ui, void *user_data); +/* + * Alternatively, this function is used to duplicate the user data. + * This uses the duplicator method function. The destroy function will + * be used to free the user data in this case. + */ +int UI_dup_user_data(UI *ui, void *user_data); /* We need a user data retrieving function as well. */ void *UI_get0_user_data(UI *ui); /* Return the result associated with a prompt given with the index i. */ const char *UI_get0_result(UI *ui, int i); +int UI_get_result_length(UI *ui, int i); /* When all strings have been added, process the whole thing. */ int UI_process(UI *ui); /* - * Give a user interface parametrised control commands. This can be used to + * Give a user interface parameterised control commands. This can be used to * send down an integer, a data pointer or a function pointer, as well as be * used to get information from a UI. */ @@ -179,7 +193,7 @@ int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); * OpenSSL error stack before printing any info or added error messages and * before any prompting. */ -# define UI_CTRL_PRINT_ERRORS 1 +# define UI_CTRL_PRINT_ERRORS 1 /* * Check if a UI_process() is possible to do again with the same instance of * a user interface. This makes UI_ctrl() return 1 if it is redoable, and 0 @@ -191,7 +205,7 @@ int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); # define UI_set_app_data(s,arg) UI_set_ex_data(s,0,arg) # define UI_get_app_data(s) UI_get_ex_data(s,0) -#define UI_get_ex_new_index(l, p, newf, dupf, freef) \ +# define UI_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef) int UI_set_ex_data(UI *r, int idx, void *arg); void *UI_get_ex_data(UI *r, int idx); @@ -202,9 +216,19 @@ const UI_METHOD *UI_get_default_method(void); const UI_METHOD *UI_get_method(UI *ui); const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth); +# ifndef OPENSSL_NO_UI_CONSOLE + /* The method with all the built-in thingies */ UI_METHOD *UI_OpenSSL(void); +# endif + +/* + * NULL method. Literally does nothing, but may serve as a placeholder + * to avoid internal default. + */ +const UI_METHOD *UI_null(void); + /* ---------- For method writers ---------- */ /*- A method contains a number of functions that implement the low level @@ -278,20 +302,26 @@ int UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui)); int UI_method_set_reader(UI_METHOD *method, int (*reader) (UI *ui, UI_STRING *uis)); int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui)); +int UI_method_set_data_duplicator(UI_METHOD *method, + void *(*duplicator) (UI *ui, void *ui_data), + void (*destructor)(UI *ui, void *ui_data)); int UI_method_set_prompt_constructor(UI_METHOD *method, char *(*prompt_constructor) (UI *ui, const char *object_desc, const char *object_name)); -int (*UI_method_get_opener(UI_METHOD *method)) (UI *); -int (*UI_method_get_writer(UI_METHOD *method)) (UI *, UI_STRING *); -int (*UI_method_get_flusher(UI_METHOD *method)) (UI *); -int (*UI_method_get_reader(UI_METHOD *method)) (UI *, UI_STRING *); -int (*UI_method_get_closer(UI_METHOD *method)) (UI *); -char *(*UI_method_get_prompt_constructor(UI_METHOD *method)) (UI *, - const char *, - const char *); +int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data); +int (*UI_method_get_opener(const UI_METHOD *method)) (UI *); +int (*UI_method_get_writer(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_flusher(const UI_METHOD *method)) (UI *); +int (*UI_method_get_reader(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_closer(const UI_METHOD *method)) (UI *); +char *(*UI_method_get_prompt_constructor(const UI_METHOD *method)) + (UI *, const char *, const char *); +void *(*UI_method_get_data_duplicator(const UI_METHOD *method)) (UI *, void *); +void (*UI_method_get_data_destructor(const UI_METHOD *method)) (UI *, void *); +const void *UI_method_get_ex_data(const UI_METHOD *method, int idx); /* * The following functions are helpers for method writers to access relevant @@ -311,6 +341,7 @@ const char *UI_get0_output_string(UI_STRING *uis); const char *UI_get0_action_string(UI_STRING *uis); /* Return the result of a prompt */ const char *UI_get0_result_string(UI_STRING *uis); +int UI_get_result_string_length(UI_STRING *uis); /* * Return the string to test the result against. Only useful with verifies. */ @@ -321,58 +352,17 @@ int UI_get_result_minsize(UI_STRING *uis); int UI_get_result_maxsize(UI_STRING *uis); /* Set the result of a UI_STRING. */ int UI_set_result(UI *ui, UI_STRING *uis, const char *result); +int UI_set_result_ex(UI *ui, UI_STRING *uis, const char *result, int len); /* A couple of popular utility functions */ int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, int verify); int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, int verify); +UI_METHOD *UI_UTIL_wrap_read_pem_callback(pem_password_cb *cb, int rwflag); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -int ERR_load_UI_strings(void); - -/* Error codes for the UI functions. */ - -/* Function codes. */ -# define UI_F_CLOSE_CONSOLE 115 -# define UI_F_ECHO_CONSOLE 116 -# define UI_F_GENERAL_ALLOCATE_BOOLEAN 108 -# define UI_F_GENERAL_ALLOCATE_PROMPT 109 -# define UI_F_NOECHO_CONSOLE 117 -# define UI_F_OPEN_CONSOLE 114 -# define UI_F_UI_CREATE_METHOD 112 -# define UI_F_UI_CTRL 111 -# define UI_F_UI_DUP_ERROR_STRING 101 -# define UI_F_UI_DUP_INFO_STRING 102 -# define UI_F_UI_DUP_INPUT_BOOLEAN 110 -# define UI_F_UI_DUP_INPUT_STRING 103 -# define UI_F_UI_DUP_VERIFY_STRING 106 -# define UI_F_UI_GET0_RESULT 107 -# define UI_F_UI_NEW_METHOD 104 -# define UI_F_UI_PROCESS 113 -# define UI_F_UI_SET_RESULT 105 - -/* Reason codes. */ -# define UI_R_COMMON_OK_AND_CANCEL_CHARACTERS 104 -# define UI_R_INDEX_TOO_LARGE 102 -# define UI_R_INDEX_TOO_SMALL 103 -# define UI_R_NO_RESULT_BUFFER 105 -# define UI_R_PROCESSING_ERROR 107 -# define UI_R_RESULT_TOO_LARGE 100 -# define UI_R_RESULT_TOO_SMALL 101 -# define UI_R_SYSASSIGN_ERROR 109 -# define UI_R_SYSDASSGN_ERROR 110 -# define UI_R_SYSQIOW_ERROR 111 -# define UI_R_UNKNOWN_CONTROL_COMMAND 106 -# define UI_R_UNKNOWN_TTYGET_ERRNO_VALUE 108 - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif # endif #endif diff --git a/libs/windows/include/openssl/uierr.h b/libs/windows/include/openssl/uierr.h new file mode 100644 index 00000000..72fd9a9d --- /dev/null +++ b/libs/windows/include/openssl/uierr.h @@ -0,0 +1,61 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_UIERR_H +# define HEADER_UIERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_UI_strings(void); + +/* + * UI function codes. + */ +# define UI_F_CLOSE_CONSOLE 115 +# define UI_F_ECHO_CONSOLE 116 +# define UI_F_GENERAL_ALLOCATE_BOOLEAN 108 +# define UI_F_GENERAL_ALLOCATE_PROMPT 109 +# define UI_F_NOECHO_CONSOLE 117 +# define UI_F_OPEN_CONSOLE 114 +# define UI_F_UI_CONSTRUCT_PROMPT 121 +# define UI_F_UI_CREATE_METHOD 112 +# define UI_F_UI_CTRL 111 +# define UI_F_UI_DUP_ERROR_STRING 101 +# define UI_F_UI_DUP_INFO_STRING 102 +# define UI_F_UI_DUP_INPUT_BOOLEAN 110 +# define UI_F_UI_DUP_INPUT_STRING 103 +# define UI_F_UI_DUP_USER_DATA 118 +# define UI_F_UI_DUP_VERIFY_STRING 106 +# define UI_F_UI_GET0_RESULT 107 +# define UI_F_UI_GET_RESULT_LENGTH 119 +# define UI_F_UI_NEW_METHOD 104 +# define UI_F_UI_PROCESS 113 +# define UI_F_UI_SET_RESULT 105 +# define UI_F_UI_SET_RESULT_EX 120 + +/* + * UI reason codes. + */ +# define UI_R_COMMON_OK_AND_CANCEL_CHARACTERS 104 +# define UI_R_INDEX_TOO_LARGE 102 +# define UI_R_INDEX_TOO_SMALL 103 +# define UI_R_NO_RESULT_BUFFER 105 +# define UI_R_PROCESSING_ERROR 107 +# define UI_R_RESULT_TOO_LARGE 100 +# define UI_R_RESULT_TOO_SMALL 101 +# define UI_R_SYSASSIGN_ERROR 109 +# define UI_R_SYSDASSGN_ERROR 110 +# define UI_R_SYSQIOW_ERROR 111 +# define UI_R_UNKNOWN_CONTROL_COMMAND 106 +# define UI_R_UNKNOWN_TTYGET_ERRNO_VALUE 108 +# define UI_R_USER_DATA_DUPLICATION_UNSUPPORTED 112 + +#endif diff --git a/libs/windows/include/openssl/x509.h b/libs/windows/include/openssl/x509.h index 780386d5..39ca0ba5 100644 --- a/libs/windows/include/openssl/x509.h +++ b/libs/windows/include/openssl/x509.h @@ -1,5 +1,6 @@ /* * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -7,12 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECDH support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - #ifndef HEADER_X509_H # define HEADER_X509_H @@ -22,7 +17,6 @@ # include # include # include -# include # include # include # include @@ -34,11 +28,19 @@ # endif # include +# include #ifdef __cplusplus extern "C" { #endif + +/* Flags for X509_get_signature_info() */ +/* Signature info is valid */ +# define X509_SIG_INFO_VALID 0x1 +/* Signature is suitable for TLS use */ +# define X509_SIG_INFO_TLS 0x2 + # define X509_FILETYPE_PEM 1 # define X509_FILETYPE_ASN1 2 # define X509_FILETYPE_DEFAULT 3 @@ -252,9 +254,8 @@ typedef struct X509_info_st { DEFINE_STACK_OF(X509_INFO) /* - * The next 2 structures and their 8 routines were sent to me by Pat Richard - * and are used to manipulate Netscapes spki structures - - * useful if you are writing a CA web page + * The next 2 structures and their 8 routines are used to manipulate Netscape's + * spki structures - useful if you are writing a CA web page */ typedef struct Netscape_spkac_st { X509_PUBKEY *pubkey; @@ -302,6 +303,16 @@ typedef struct PBKDF2PARAM_st { X509_ALGOR *prf; } PBKDF2PARAM; +#ifndef OPENSSL_NO_SCRYPT +typedef struct SCRYPT_PARAMS_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *costParameter; + ASN1_INTEGER *blockSize; + ASN1_INTEGER *parallelizationParameter; + ASN1_INTEGER *keyLength; +} SCRYPT_PARAMS; +#endif + #ifdef __cplusplus } #endif @@ -549,6 +560,14 @@ X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length); int i2d_re_X509_tbs(X509 *x, unsigned char **pp); +int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid, + int *secbits, uint32_t *flags); +void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid, + int secbits, uint32_t flags); + +int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits, + uint32_t *flags); + void X509_get0_signature(const ASN1_BIT_STRING **psig, const X509_ALGOR **palg, const X509 *x); int X509_get_signature_nid(const X509 *x); @@ -641,7 +660,7 @@ int X509_get_signature_type(const X509 *x); /* * This one is only used so that a binary form can output, as in - * i2d_X509_NAME(X509_get_X509_PUBKEY(x), &buf) + * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf) */ X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x); const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x); @@ -773,6 +792,7 @@ int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag, unsigned long cflag); int X509_print(BIO *bp, X509 *x); int X509_ocspid_print(BIO *bp, X509 *x); +int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag); int X509_CRL_print(BIO *bp, X509_CRL *x); int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, unsigned long cflag); @@ -805,7 +825,7 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, const unsigned char *bytes, int len); X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, - int type, + int type, const unsigned char *bytes, int len); int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, @@ -959,6 +979,9 @@ X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name); DECLARE_ASN1_FUNCTIONS(PBEPARAM) DECLARE_ASN1_FUNCTIONS(PBE2PARAM) DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) +#ifndef OPENSSL_NO_SCRYPT +DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS) +#endif int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, const unsigned char *salt, int saltlen); @@ -1018,106 +1041,6 @@ int X509_TRUST_get_flags(const X509_TRUST *xp); char *X509_TRUST_get0_name(const X509_TRUST *xp); int X509_TRUST_get_trust(const X509_TRUST *xp); -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -int ERR_load_X509_strings(void); - -/* Error codes for the X509 functions. */ - -/* Function codes. */ -# define X509_F_ADD_CERT_DIR 100 -# define X509_F_BUILD_CHAIN 106 -# define X509_F_BY_FILE_CTRL 101 -# define X509_F_CHECK_NAME_CONSTRAINTS 149 -# define X509_F_CHECK_POLICY 145 -# define X509_F_DANE_I2D 107 -# define X509_F_DIR_CTRL 102 -# define X509_F_GET_CERT_BY_SUBJECT 103 -# define X509_F_NETSCAPE_SPKI_B64_DECODE 129 -# define X509_F_NETSCAPE_SPKI_B64_ENCODE 130 -# define X509_F_X509AT_ADD1_ATTR 135 -# define X509_F_X509V3_ADD_EXT 104 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140 -# define X509_F_X509_ATTRIBUTE_GET0_DATA 139 -# define X509_F_X509_ATTRIBUTE_SET1_DATA 138 -# define X509_F_X509_CHECK_PRIVATE_KEY 128 -# define X509_F_X509_CRL_DIFF 105 -# define X509_F_X509_CRL_PRINT_FP 147 -# define X509_F_X509_EXTENSION_CREATE_BY_NID 108 -# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 -# define X509_F_X509_GET_PUBKEY_PARAMETERS 110 -# define X509_F_X509_LOAD_CERT_CRL_FILE 132 -# define X509_F_X509_LOAD_CERT_FILE 111 -# define X509_F_X509_LOAD_CRL_FILE 112 -# define X509_F_X509_LOOKUP_METH_NEW 160 -# define X509_F_X509_NAME_ADD_ENTRY 113 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131 -# define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 -# define X509_F_X509_NAME_ONELINE 116 -# define X509_F_X509_NAME_PRINT 117 -# define X509_F_X509_OBJECT_NEW 150 -# define X509_F_X509_PRINT_EX_FP 118 -# define X509_F_X509_PUBKEY_DECODE 148 -# define X509_F_X509_PUBKEY_GET0 119 -# define X509_F_X509_PUBKEY_SET 120 -# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 -# define X509_F_X509_REQ_PRINT_EX 121 -# define X509_F_X509_REQ_PRINT_FP 122 -# define X509_F_X509_REQ_TO_X509 123 -# define X509_F_X509_STORE_ADD_CERT 124 -# define X509_F_X509_STORE_ADD_CRL 125 -# define X509_F_X509_STORE_CTX_GET1_ISSUER 146 -# define X509_F_X509_STORE_CTX_INIT 143 -# define X509_F_X509_STORE_CTX_NEW 142 -# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134 -# define X509_F_X509_TO_X509_REQ 126 -# define X509_F_X509_TRUST_ADD 133 -# define X509_F_X509_TRUST_SET 141 -# define X509_F_X509_VERIFY_CERT 127 - -/* Reason codes. */ -# define X509_R_AKID_MISMATCH 110 -# define X509_R_BAD_SELECTOR 133 -# define X509_R_BAD_X509_FILETYPE 100 -# define X509_R_BASE64_DECODE_ERROR 118 -# define X509_R_CANT_CHECK_DH_KEY 114 -# define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 -# define X509_R_CRL_ALREADY_DELTA 127 -# define X509_R_CRL_VERIFY_FAILURE 131 -# define X509_R_IDP_MISMATCH 128 -# define X509_R_INVALID_DIRECTORY 113 -# define X509_R_INVALID_FIELD_NAME 119 -# define X509_R_INVALID_TRUST 123 -# define X509_R_ISSUER_MISMATCH 129 -# define X509_R_KEY_TYPE_MISMATCH 115 -# define X509_R_KEY_VALUES_MISMATCH 116 -# define X509_R_LOADING_CERT_DIR 103 -# define X509_R_LOADING_DEFAULTS 104 -# define X509_R_METHOD_NOT_SUPPORTED 124 -# define X509_R_NAME_TOO_LONG 134 -# define X509_R_NEWER_CRL_NOT_NEWER 132 -# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 -# define X509_R_NO_CRL_NUMBER 130 -# define X509_R_PUBLIC_KEY_DECODE_ERROR 125 -# define X509_R_PUBLIC_KEY_ENCODE_ERROR 126 -# define X509_R_SHOULD_RETRY 106 -# define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107 -# define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108 -# define X509_R_UNKNOWN_KEY_TYPE 117 -# define X509_R_UNKNOWN_NID 109 -# define X509_R_UNKNOWN_PURPOSE_ID 121 -# define X509_R_UNKNOWN_TRUST_ID 120 -# define X509_R_UNSUPPORTED_ALGORITHM 111 -# define X509_R_WRONG_LOOKUP_TYPE 112 -# define X509_R_WRONG_TYPE 122 - # ifdef __cplusplus } # endif diff --git a/libs/windows/include/openssl/x509_vfy.h b/libs/windows/include/openssl/x509_vfy.h index 131b6cf7..adb8bce7 100644 --- a/libs/windows/include/openssl/x509_vfy.h +++ b/libs/windows/include/openssl/x509_vfy.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -180,6 +180,10 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_V_ERR_NO_VALID_SCTS 71 # define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 +/* OCSP status errors */ +# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ +# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ +# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ /* Certificate verify flags */ @@ -358,7 +362,11 @@ X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); # define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted # define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack # define X509_STORE_get_by_subject X509_STORE_CTX_get_by_subject +# define X509_STORE_get1_certs X509_STORE_CTX_get1_certs +# define X509_STORE_get1_crls X509_STORE_CTX_get1_crls +/* the following macro is misspelled; use X509_STORE_get1_certs instead */ # define X509_STORE_get1_cert X509_STORE_CTX_get1_certs +/* the following macro is misspelled; use X509_STORE_get1_crls instead */ # define X509_STORE_get1_crl X509_STORE_CTX_get1_crls #endif diff --git a/libs/windows/include/openssl/x509err.h b/libs/windows/include/openssl/x509err.h new file mode 100644 index 00000000..b1d6a870 --- /dev/null +++ b/libs/windows/include/openssl/x509err.h @@ -0,0 +1,125 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_X509ERR_H +# define HEADER_X509ERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_X509_strings(void); + +/* + * X509 function codes. + */ +# define X509_F_ADD_CERT_DIR 100 +# define X509_F_BUILD_CHAIN 106 +# define X509_F_BY_FILE_CTRL 101 +# define X509_F_CHECK_NAME_CONSTRAINTS 149 +# define X509_F_CHECK_POLICY 145 +# define X509_F_DANE_I2D 107 +# define X509_F_DIR_CTRL 102 +# define X509_F_GET_CERT_BY_SUBJECT 103 +# define X509_F_I2D_X509_AUX 151 +# define X509_F_LOOKUP_CERTS_SK 152 +# define X509_F_NETSCAPE_SPKI_B64_DECODE 129 +# define X509_F_NETSCAPE_SPKI_B64_ENCODE 130 +# define X509_F_NEW_DIR 153 +# define X509_F_X509AT_ADD1_ATTR 135 +# define X509_F_X509V3_ADD_EXT 104 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140 +# define X509_F_X509_ATTRIBUTE_GET0_DATA 139 +# define X509_F_X509_ATTRIBUTE_SET1_DATA 138 +# define X509_F_X509_CHECK_PRIVATE_KEY 128 +# define X509_F_X509_CRL_DIFF 105 +# define X509_F_X509_CRL_METHOD_NEW 154 +# define X509_F_X509_CRL_PRINT_FP 147 +# define X509_F_X509_EXTENSION_CREATE_BY_NID 108 +# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 +# define X509_F_X509_GET_PUBKEY_PARAMETERS 110 +# define X509_F_X509_LOAD_CERT_CRL_FILE 132 +# define X509_F_X509_LOAD_CERT_FILE 111 +# define X509_F_X509_LOAD_CRL_FILE 112 +# define X509_F_X509_LOOKUP_METH_NEW 160 +# define X509_F_X509_LOOKUP_NEW 155 +# define X509_F_X509_NAME_ADD_ENTRY 113 +# define X509_F_X509_NAME_CANON 156 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131 +# define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 +# define X509_F_X509_NAME_ONELINE 116 +# define X509_F_X509_NAME_PRINT 117 +# define X509_F_X509_OBJECT_NEW 150 +# define X509_F_X509_PRINT_EX_FP 118 +# define X509_F_X509_PUBKEY_DECODE 148 +# define X509_F_X509_PUBKEY_GET0 119 +# define X509_F_X509_PUBKEY_SET 120 +# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 +# define X509_F_X509_REQ_PRINT_EX 121 +# define X509_F_X509_REQ_PRINT_FP 122 +# define X509_F_X509_REQ_TO_X509 123 +# define X509_F_X509_STORE_ADD_CERT 124 +# define X509_F_X509_STORE_ADD_CRL 125 +# define X509_F_X509_STORE_ADD_LOOKUP 157 +# define X509_F_X509_STORE_CTX_GET1_ISSUER 146 +# define X509_F_X509_STORE_CTX_INIT 143 +# define X509_F_X509_STORE_CTX_NEW 142 +# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134 +# define X509_F_X509_STORE_NEW 158 +# define X509_F_X509_TO_X509_REQ 126 +# define X509_F_X509_TRUST_ADD 133 +# define X509_F_X509_TRUST_SET 141 +# define X509_F_X509_VERIFY_CERT 127 +# define X509_F_X509_VERIFY_PARAM_NEW 159 + +/* + * X509 reason codes. + */ +# define X509_R_AKID_MISMATCH 110 +# define X509_R_BAD_SELECTOR 133 +# define X509_R_BAD_X509_FILETYPE 100 +# define X509_R_BASE64_DECODE_ERROR 118 +# define X509_R_CANT_CHECK_DH_KEY 114 +# define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 +# define X509_R_CRL_ALREADY_DELTA 127 +# define X509_R_CRL_VERIFY_FAILURE 131 +# define X509_R_IDP_MISMATCH 128 +# define X509_R_INVALID_DIRECTORY 113 +# define X509_R_INVALID_FIELD_NAME 119 +# define X509_R_INVALID_TRUST 123 +# define X509_R_ISSUER_MISMATCH 129 +# define X509_R_KEY_TYPE_MISMATCH 115 +# define X509_R_KEY_VALUES_MISMATCH 116 +# define X509_R_LOADING_CERT_DIR 103 +# define X509_R_LOADING_DEFAULTS 104 +# define X509_R_METHOD_NOT_SUPPORTED 124 +# define X509_R_NAME_TOO_LONG 134 +# define X509_R_NEWER_CRL_NOT_NEWER 132 +# define X509_R_NO_CERTIFICATE_FOUND 135 +# define X509_R_NO_CERTIFICATE_OR_CRL_FOUND 136 +# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 +# define X509_R_NO_CRL_FOUND 137 +# define X509_R_NO_CRL_NUMBER 130 +# define X509_R_PUBLIC_KEY_DECODE_ERROR 125 +# define X509_R_PUBLIC_KEY_ENCODE_ERROR 126 +# define X509_R_SHOULD_RETRY 106 +# define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107 +# define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108 +# define X509_R_UNKNOWN_KEY_TYPE 117 +# define X509_R_UNKNOWN_NID 109 +# define X509_R_UNKNOWN_PURPOSE_ID 121 +# define X509_R_UNKNOWN_TRUST_ID 120 +# define X509_R_UNSUPPORTED_ALGORITHM 111 +# define X509_R_WRONG_LOOKUP_TYPE 112 +# define X509_R_WRONG_TYPE 122 + +#endif diff --git a/libs/windows/include/openssl/x509v3.h b/libs/windows/include/openssl/x509v3.h index c93b112f..fe1791c6 100644 --- a/libs/windows/include/openssl/x509v3.h +++ b/libs/windows/include/openssl/x509v3.h @@ -13,6 +13,7 @@ # include # include # include +# include #ifdef __cplusplus extern "C" { @@ -319,8 +320,9 @@ struct ISSUING_DIST_POINT_st { /* onlysomereasons present */ # define IDP_REASONS 0x40 -# define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \ -",name:", val->name, ",value:", val->value); +# define X509V3_conf_err(val) ERR_add_error_data(6, \ + "section:", (val)->section, \ + ",name:", (val)->name, ",value:", (val)->value) # define X509V3_set_ctx_test(ctx) \ X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) @@ -862,145 +864,70 @@ int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, #endif /* OPENSSL_NO_RFC3779 */ -/* BEGIN ERROR CODES */ +DEFINE_STACK_OF(ASN1_STRING) + /* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. + * Admission Syntax */ +typedef struct NamingAuthority_st NAMING_AUTHORITY; +typedef struct ProfessionInfo_st PROFESSION_INFO; +typedef struct Admissions_st ADMISSIONS; +typedef struct AdmissionSyntax_st ADMISSION_SYNTAX; +DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY) +DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO) +DECLARE_ASN1_FUNCTIONS(ADMISSIONS) +DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX) +DEFINE_STACK_OF(ADMISSIONS) +DEFINE_STACK_OF(PROFESSION_INFO) +typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS; -int ERR_load_X509V3_strings(void); +const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId( + const NAMING_AUTHORITY *n); +const ASN1_IA5STRING *NAMING_AUTHORITY_get0_authorityURL( + const NAMING_AUTHORITY *n); +const ASN1_STRING *NAMING_AUTHORITY_get0_authorityText( + const NAMING_AUTHORITY *n); +void NAMING_AUTHORITY_set0_authorityId(NAMING_AUTHORITY *n, + ASN1_OBJECT* namingAuthorityId); +void NAMING_AUTHORITY_set0_authorityURL(NAMING_AUTHORITY *n, + ASN1_IA5STRING* namingAuthorityUrl); +void NAMING_AUTHORITY_set0_authorityText(NAMING_AUTHORITY *n, + ASN1_STRING* namingAuthorityText); -/* Error codes for the X509V3 functions. */ - -/* Function codes. */ -# define X509V3_F_A2I_GENERAL_NAME 164 -# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 166 -# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 -# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 -# define X509V3_F_BIGNUM_TO_STRING 167 -# define X509V3_F_COPY_EMAIL 122 -# define X509V3_F_COPY_ISSUER 123 -# define X509V3_F_DO_DIRNAME 144 -# define X509V3_F_DO_EXT_I2D 135 -# define X509V3_F_DO_EXT_NCONF 151 -# define X509V3_F_GNAMES_FROM_SECTNAME 156 -# define X509V3_F_I2S_ASN1_ENUMERATED 121 -# define X509V3_F_I2S_ASN1_IA5STRING 149 -# define X509V3_F_I2S_ASN1_INTEGER 120 -# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 -# define X509V3_F_NOTICE_SECTION 132 -# define X509V3_F_NREF_NOS 133 -# define X509V3_F_POLICY_SECTION 131 -# define X509V3_F_PROCESS_PCI_VALUE 150 -# define X509V3_F_R2I_CERTPOL 130 -# define X509V3_F_R2I_PCI 155 -# define X509V3_F_S2I_ASN1_IA5STRING 100 -# define X509V3_F_S2I_ASN1_INTEGER 108 -# define X509V3_F_S2I_ASN1_OCTET_STRING 112 -# define X509V3_F_S2I_SKEY_ID 115 -# define X509V3_F_SET_DIST_POINT_NAME 158 -# define X509V3_F_SXNET_ADD_ID_ASC 125 -# define X509V3_F_SXNET_ADD_ID_INTEGER 126 -# define X509V3_F_SXNET_ADD_ID_ULONG 127 -# define X509V3_F_SXNET_GET_ID_ASC 128 -# define X509V3_F_SXNET_GET_ID_ULONG 129 -# define X509V3_F_V2I_ASIDENTIFIERS 163 -# define X509V3_F_V2I_ASN1_BIT_STRING 101 -# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139 -# define X509V3_F_V2I_AUTHORITY_KEYID 119 -# define X509V3_F_V2I_BASIC_CONSTRAINTS 102 -# define X509V3_F_V2I_CRLD 134 -# define X509V3_F_V2I_EXTENDED_KEY_USAGE 103 -# define X509V3_F_V2I_GENERAL_NAMES 118 -# define X509V3_F_V2I_GENERAL_NAME_EX 117 -# define X509V3_F_V2I_IDP 157 -# define X509V3_F_V2I_IPADDRBLOCKS 159 -# define X509V3_F_V2I_ISSUER_ALT 153 -# define X509V3_F_V2I_NAME_CONSTRAINTS 147 -# define X509V3_F_V2I_POLICY_CONSTRAINTS 146 -# define X509V3_F_V2I_POLICY_MAPPINGS 145 -# define X509V3_F_V2I_SUBJECT_ALT 154 -# define X509V3_F_V2I_TLS_FEATURE 165 -# define X509V3_F_V3_GENERIC_EXTENSION 116 -# define X509V3_F_X509V3_ADD1_I2D 140 -# define X509V3_F_X509V3_ADD_VALUE 105 -# define X509V3_F_X509V3_EXT_ADD 104 -# define X509V3_F_X509V3_EXT_ADD_ALIAS 106 -# define X509V3_F_X509V3_EXT_I2D 136 -# define X509V3_F_X509V3_EXT_NCONF 152 -# define X509V3_F_X509V3_GET_SECTION 142 -# define X509V3_F_X509V3_GET_STRING 143 -# define X509V3_F_X509V3_GET_VALUE_BOOL 110 -# define X509V3_F_X509V3_PARSE_LIST 109 -# define X509V3_F_X509_PURPOSE_ADD 137 -# define X509V3_F_X509_PURPOSE_SET 141 - -/* Reason codes. */ -# define X509V3_R_BAD_IP_ADDRESS 118 -# define X509V3_R_BAD_OBJECT 119 -# define X509V3_R_BN_DEC2BN_ERROR 100 -# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR 101 -# define X509V3_R_DIRNAME_ERROR 149 -# define X509V3_R_DISTPOINT_ALREADY_SET 160 -# define X509V3_R_DUPLICATE_ZONE_ID 133 -# define X509V3_R_ERROR_CONVERTING_ZONE 131 -# define X509V3_R_ERROR_CREATING_EXTENSION 144 -# define X509V3_R_ERROR_IN_EXTENSION 128 -# define X509V3_R_EXPECTED_A_SECTION_NAME 137 -# define X509V3_R_EXTENSION_EXISTS 145 -# define X509V3_R_EXTENSION_NAME_ERROR 115 -# define X509V3_R_EXTENSION_NOT_FOUND 102 -# define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103 -# define X509V3_R_EXTENSION_VALUE_ERROR 116 -# define X509V3_R_ILLEGAL_EMPTY_EXTENSION 151 -# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 152 -# define X509V3_R_INVALID_ASNUMBER 162 -# define X509V3_R_INVALID_ASRANGE 163 -# define X509V3_R_INVALID_BOOLEAN_STRING 104 -# define X509V3_R_INVALID_EXTENSION_STRING 105 -# define X509V3_R_INVALID_INHERITANCE 165 -# define X509V3_R_INVALID_IPADDRESS 166 -# define X509V3_R_INVALID_MULTIPLE_RDNS 161 -# define X509V3_R_INVALID_NAME 106 -# define X509V3_R_INVALID_NULL_ARGUMENT 107 -# define X509V3_R_INVALID_NULL_NAME 108 -# define X509V3_R_INVALID_NULL_VALUE 109 -# define X509V3_R_INVALID_NUMBER 140 -# define X509V3_R_INVALID_NUMBERS 141 -# define X509V3_R_INVALID_OBJECT_IDENTIFIER 110 -# define X509V3_R_INVALID_OPTION 138 -# define X509V3_R_INVALID_POLICY_IDENTIFIER 134 -# define X509V3_R_INVALID_PROXY_POLICY_SETTING 153 -# define X509V3_R_INVALID_PURPOSE 146 -# define X509V3_R_INVALID_SAFI 164 -# define X509V3_R_INVALID_SECTION 135 -# define X509V3_R_INVALID_SYNTAX 143 -# define X509V3_R_ISSUER_DECODE_ERROR 126 -# define X509V3_R_MISSING_VALUE 124 -# define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142 -# define X509V3_R_NO_CONFIG_DATABASE 136 -# define X509V3_R_NO_ISSUER_CERTIFICATE 121 -# define X509V3_R_NO_ISSUER_DETAILS 127 -# define X509V3_R_NO_POLICY_IDENTIFIER 139 -# define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 154 -# define X509V3_R_NO_PUBLIC_KEY 114 -# define X509V3_R_NO_SUBJECT_DETAILS 125 -# define X509V3_R_OPERATION_NOT_DEFINED 148 -# define X509V3_R_OTHERNAME_ERROR 147 -# define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED 155 -# define X509V3_R_POLICY_PATH_LENGTH 156 -# define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED 157 -# define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159 -# define X509V3_R_SECTION_NOT_FOUND 150 -# define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122 -# define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123 -# define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111 -# define X509V3_R_UNKNOWN_EXTENSION 129 -# define X509V3_R_UNKNOWN_EXTENSION_NAME 130 -# define X509V3_R_UNKNOWN_OPTION 120 -# define X509V3_R_UNSUPPORTED_OPTION 117 -# define X509V3_R_UNSUPPORTED_TYPE 167 -# define X509V3_R_USER_TOO_LONG 132 +const GENERAL_NAME *ADMISSION_SYNTAX_get0_admissionAuthority( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_admissionAuthority( + ADMISSION_SYNTAX *as, GENERAL_NAME *aa); +const STACK_OF(ADMISSIONS) *ADMISSION_SYNTAX_get0_contentsOfAdmissions( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_contentsOfAdmissions( + ADMISSION_SYNTAX *as, STACK_OF(ADMISSIONS) *a); +const GENERAL_NAME *ADMISSIONS_get0_admissionAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_admissionAuthority(ADMISSIONS *a, GENERAL_NAME *aa); +const NAMING_AUTHORITY *ADMISSIONS_get0_namingAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_namingAuthority(ADMISSIONS *a, NAMING_AUTHORITY *na); +const PROFESSION_INFOS *ADMISSIONS_get0_professionInfos(const ADMISSIONS *a); +void ADMISSIONS_set0_professionInfos(ADMISSIONS *a, PROFESSION_INFOS *pi); +const ASN1_OCTET_STRING *PROFESSION_INFO_get0_addProfessionInfo( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_addProfessionInfo( + PROFESSION_INFO *pi, ASN1_OCTET_STRING *aos); +const NAMING_AUTHORITY *PROFESSION_INFO_get0_namingAuthority( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_namingAuthority( + PROFESSION_INFO *pi, NAMING_AUTHORITY *na); +const STACK_OF(ASN1_STRING) *PROFESSION_INFO_get0_professionItems( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionItems( + PROFESSION_INFO *pi, STACK_OF(ASN1_STRING) *as); +const STACK_OF(ASN1_OBJECT) *PROFESSION_INFO_get0_professionOIDs( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionOIDs( + PROFESSION_INFO *pi, STACK_OF(ASN1_OBJECT) *po); +const ASN1_PRINTABLESTRING *PROFESSION_INFO_get0_registrationNumber( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_registrationNumber( + PROFESSION_INFO *pi, ASN1_PRINTABLESTRING *rn); # ifdef __cplusplus } diff --git a/libs/windows/include/openssl/x509v3err.h b/libs/windows/include/openssl/x509v3err.h new file mode 100644 index 00000000..6b3df12b --- /dev/null +++ b/libs/windows/include/openssl/x509v3err.h @@ -0,0 +1,158 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_X509V3ERR_H +# define HEADER_X509V3ERR_H + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_X509V3_strings(void); + +/* + * X509V3 function codes. + */ +# define X509V3_F_A2I_GENERAL_NAME 164 +# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 166 +# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 +# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 +# define X509V3_F_BIGNUM_TO_STRING 167 +# define X509V3_F_COPY_EMAIL 122 +# define X509V3_F_COPY_ISSUER 123 +# define X509V3_F_DO_DIRNAME 144 +# define X509V3_F_DO_EXT_I2D 135 +# define X509V3_F_DO_EXT_NCONF 151 +# define X509V3_F_GNAMES_FROM_SECTNAME 156 +# define X509V3_F_I2S_ASN1_ENUMERATED 121 +# define X509V3_F_I2S_ASN1_IA5STRING 149 +# define X509V3_F_I2S_ASN1_INTEGER 120 +# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 +# define X509V3_F_LEVEL_ADD_NODE 168 +# define X509V3_F_NOTICE_SECTION 132 +# define X509V3_F_NREF_NOS 133 +# define X509V3_F_POLICY_CACHE_CREATE 169 +# define X509V3_F_POLICY_CACHE_NEW 170 +# define X509V3_F_POLICY_DATA_NEW 171 +# define X509V3_F_POLICY_SECTION 131 +# define X509V3_F_PROCESS_PCI_VALUE 150 +# define X509V3_F_R2I_CERTPOL 130 +# define X509V3_F_R2I_PCI 155 +# define X509V3_F_S2I_ASN1_IA5STRING 100 +# define X509V3_F_S2I_ASN1_INTEGER 108 +# define X509V3_F_S2I_ASN1_OCTET_STRING 112 +# define X509V3_F_S2I_SKEY_ID 115 +# define X509V3_F_SET_DIST_POINT_NAME 158 +# define X509V3_F_SXNET_ADD_ID_ASC 125 +# define X509V3_F_SXNET_ADD_ID_INTEGER 126 +# define X509V3_F_SXNET_ADD_ID_ULONG 127 +# define X509V3_F_SXNET_GET_ID_ASC 128 +# define X509V3_F_SXNET_GET_ID_ULONG 129 +# define X509V3_F_TREE_INIT 172 +# define X509V3_F_V2I_ASIDENTIFIERS 163 +# define X509V3_F_V2I_ASN1_BIT_STRING 101 +# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139 +# define X509V3_F_V2I_AUTHORITY_KEYID 119 +# define X509V3_F_V2I_BASIC_CONSTRAINTS 102 +# define X509V3_F_V2I_CRLD 134 +# define X509V3_F_V2I_EXTENDED_KEY_USAGE 103 +# define X509V3_F_V2I_GENERAL_NAMES 118 +# define X509V3_F_V2I_GENERAL_NAME_EX 117 +# define X509V3_F_V2I_IDP 157 +# define X509V3_F_V2I_IPADDRBLOCKS 159 +# define X509V3_F_V2I_ISSUER_ALT 153 +# define X509V3_F_V2I_NAME_CONSTRAINTS 147 +# define X509V3_F_V2I_POLICY_CONSTRAINTS 146 +# define X509V3_F_V2I_POLICY_MAPPINGS 145 +# define X509V3_F_V2I_SUBJECT_ALT 154 +# define X509V3_F_V2I_TLS_FEATURE 165 +# define X509V3_F_V3_GENERIC_EXTENSION 116 +# define X509V3_F_X509V3_ADD1_I2D 140 +# define X509V3_F_X509V3_ADD_VALUE 105 +# define X509V3_F_X509V3_EXT_ADD 104 +# define X509V3_F_X509V3_EXT_ADD_ALIAS 106 +# define X509V3_F_X509V3_EXT_I2D 136 +# define X509V3_F_X509V3_EXT_NCONF 152 +# define X509V3_F_X509V3_GET_SECTION 142 +# define X509V3_F_X509V3_GET_STRING 143 +# define X509V3_F_X509V3_GET_VALUE_BOOL 110 +# define X509V3_F_X509V3_PARSE_LIST 109 +# define X509V3_F_X509_PURPOSE_ADD 137 +# define X509V3_F_X509_PURPOSE_SET 141 + +/* + * X509V3 reason codes. + */ +# define X509V3_R_BAD_IP_ADDRESS 118 +# define X509V3_R_BAD_OBJECT 119 +# define X509V3_R_BN_DEC2BN_ERROR 100 +# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR 101 +# define X509V3_R_DIRNAME_ERROR 149 +# define X509V3_R_DISTPOINT_ALREADY_SET 160 +# define X509V3_R_DUPLICATE_ZONE_ID 133 +# define X509V3_R_ERROR_CONVERTING_ZONE 131 +# define X509V3_R_ERROR_CREATING_EXTENSION 144 +# define X509V3_R_ERROR_IN_EXTENSION 128 +# define X509V3_R_EXPECTED_A_SECTION_NAME 137 +# define X509V3_R_EXTENSION_EXISTS 145 +# define X509V3_R_EXTENSION_NAME_ERROR 115 +# define X509V3_R_EXTENSION_NOT_FOUND 102 +# define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103 +# define X509V3_R_EXTENSION_VALUE_ERROR 116 +# define X509V3_R_ILLEGAL_EMPTY_EXTENSION 151 +# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 152 +# define X509V3_R_INVALID_ASNUMBER 162 +# define X509V3_R_INVALID_ASRANGE 163 +# define X509V3_R_INVALID_BOOLEAN_STRING 104 +# define X509V3_R_INVALID_EXTENSION_STRING 105 +# define X509V3_R_INVALID_INHERITANCE 165 +# define X509V3_R_INVALID_IPADDRESS 166 +# define X509V3_R_INVALID_MULTIPLE_RDNS 161 +# define X509V3_R_INVALID_NAME 106 +# define X509V3_R_INVALID_NULL_ARGUMENT 107 +# define X509V3_R_INVALID_NULL_NAME 108 +# define X509V3_R_INVALID_NULL_VALUE 109 +# define X509V3_R_INVALID_NUMBER 140 +# define X509V3_R_INVALID_NUMBERS 141 +# define X509V3_R_INVALID_OBJECT_IDENTIFIER 110 +# define X509V3_R_INVALID_OPTION 138 +# define X509V3_R_INVALID_POLICY_IDENTIFIER 134 +# define X509V3_R_INVALID_PROXY_POLICY_SETTING 153 +# define X509V3_R_INVALID_PURPOSE 146 +# define X509V3_R_INVALID_SAFI 164 +# define X509V3_R_INVALID_SECTION 135 +# define X509V3_R_INVALID_SYNTAX 143 +# define X509V3_R_ISSUER_DECODE_ERROR 126 +# define X509V3_R_MISSING_VALUE 124 +# define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142 +# define X509V3_R_NO_CONFIG_DATABASE 136 +# define X509V3_R_NO_ISSUER_CERTIFICATE 121 +# define X509V3_R_NO_ISSUER_DETAILS 127 +# define X509V3_R_NO_POLICY_IDENTIFIER 139 +# define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 154 +# define X509V3_R_NO_PUBLIC_KEY 114 +# define X509V3_R_NO_SUBJECT_DETAILS 125 +# define X509V3_R_OPERATION_NOT_DEFINED 148 +# define X509V3_R_OTHERNAME_ERROR 147 +# define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED 155 +# define X509V3_R_POLICY_PATH_LENGTH 156 +# define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED 157 +# define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159 +# define X509V3_R_SECTION_NOT_FOUND 150 +# define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122 +# define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123 +# define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111 +# define X509V3_R_UNKNOWN_EXTENSION 129 +# define X509V3_R_UNKNOWN_EXTENSION_NAME 130 +# define X509V3_R_UNKNOWN_OPTION 120 +# define X509V3_R_UNSUPPORTED_OPTION 117 +# define X509V3_R_UNSUPPORTED_TYPE 167 +# define X509V3_R_USER_TOO_LONG 132 + +#endif diff --git a/libs/windows/lib/x64/libcrypto-1_1-x64.dll b/libs/windows/lib/x64/libcrypto-1_1-x64.dll index ddb3d002aa53895ac4656f8eb2b88fa70d346924..5d2bdf7e3028d332586dcc927455f3860cd57988 100644 GIT binary patch literal 2822848 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 XzK)${YZ%oPJI#v7ZtOH` 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 z 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

E+5$L$4PKo>ekkY#~!ZaXHaIjn)?FUN0HPX-3kv z#mQdjjt;5_C@an91_Ses(?qo3Hc_FWYshNB_dSMLe0!@J;@C_JdRBfOn^4cnm0${= z3m+;KbJB7i)%r&}4{4DSjWRi8ql1~~g|rxJQgB|Q^8pan@Z`9Zj6eq*Z_V*sr;3s2L%s=aDAe8l!LyV%+( zqElf+_Gq~nyQsFs$JB8%dgergA5BAKFeU_zqpiUi4x^OQ)%%l;iQ!42#__!3jF{yi z+$L7o3|h}?WKFizEzH7v~)pUOcVyL^zxZw=!gYX;WMZ=OcUR z&39=A+`!K(tk>csqZwdFC}?-1bTLa+7bc5)5Skneby?Yk4l7#@oy~)fd75Oe(xoy7 z)gqN@$w<95@J+%<%#kzm67#_gLL*n3L+bTcxQKlJbBht zPA?oWBdE4B4zXeKVJ#}@C0$TDn2kMwc}0F2m_sgu3IenAdZx+KH0K5N$asx8QgvPk zFLt@1QT2-7OV*V(jjAGKNh^uot@!&$Q|ZQteMUH#-~ZAsi(AuK^)#9t#rm`NDRE%l z6@CinzZ6dPtaUq{SmCu*=v-rFc*Tmn7=xl(2M)O@*3T%MyXNhK9WiutjR+Oy+lv%U zFVj|`>e*XwYR9FA02TkGHpk~gyKmXam*F;88=U=5Kuf-2j53wxSQSDih;IBaK4n?a z3;MR&tiM(b-)0DpSt1`W?Yfj-YalZIm4;PFrS;N$lhQdJ3>`*oCi2sQgHlOBzgmQ4trY}#!2THVq;Z- zX3+Op=xW4*J!)O4pODzJQz%*Yp8G3Q5)j4%D%~8jk>k70w{=$AOkc=_)k)OJQNfqX zEm^r-$cnVYCo3<&BcZZ>jBH|FTCMG|)_jWc&wB4%wVAI|JcuII^YKo!Am5SBMsKI9zjUxkgnd~n(2iZh->;YPw%qA<6zaNUhC z=7r48iin+^`7%4QV40mrlh|39vmPPcQWac2vPVv;&)3gB#J;^EeGE^U;-4x1>8siV z$DPHafp3;>mb>4G0csCaZSRo(;AkOfb;HveUpaN#jc-_#jc=ng&M2uCRpX*SLxS%R>1FrT2^LH-_XD^GCr+*i~V)ph;MHy+@~yN~%TXcuXk zO65*!$Q86iFfQ=j9*zEoO+WKnCEZM3<_+#9IgH{y8YdDC26bV{nGEtR30W9z5V67!-S(cuC?lS&D)9g+PUvg`66^;`2tP7_rfWTwKB_(iEg zX|YU>4B^{o;{DO5o`1{`dh$l*eW37+^gxPOF}BEbvXdd^vf#Iv2eFW4N8@{=xktVs zq~qiOaLMZYW?S{aCoO;BQ6ueyURE1V6sYG~^pGM#pR zdg|lD*T0hP#^1n)!_hto8!=aAg_&10N#n!{7+5*pvN&CuoAVLLnX1ayCh#%?cRX?%ns3k&zRGG%Q^S*G zB;A(IS~5H#>rr#a5$_`D&{I^AXvL8LJ;BzX4w4UXl#sdp%hY~}VLpycmnPz;rL8MI z&q5YsXETLaL+3RChD^MUGy{t?z03cQvLBMle4|FXu}x<7^Rkw=634_g_$B!J`9Lj5 zu9HX^B9%xJd7Vs#Ug@?xYt|$%-@A!6^yy1=(UeA-c1m1oNHHbL{=DY)tbzD|INS6A ze#Kq4SSo%s%n`gdi>h6eh1_pkqc6un!-eUND;cjl3{{Da`jED>Z24DGe&<-M$#l7P zj^ZmlQeZt89Jzvy-c9nwFA_Gz5Ao`o44MqXEBq3BJ+Yb#D~%>|04Z4FS$*E0mHh8X zYxR#KFJYF&`l+G_a#hs%JhN`wW8)9c#G6$=5sYZnbho2(>)CFbzUxcr^2~qR^yVw1 zJu3$R@Y(~La%3*3Xz5w?d;w@?JS{+?0Mw@e9ee?(Ndp=!pvnh)w|L3AZJN1fQ}!CN z?HiYApV)H^GVh|B6^f1-g_h*+J6V=Pwm98CJgdMyekmA3v2XlR%3$SRaKHR22Z9CE z82Ikyx`WKo_W?zjC$$80$7nV8szG!e`h+&K#d0~iZRn06z|8>d7Qv{<0I`$owObzw z%x>@GFH)K}%kFcgm$p~-xozfMX&rVqpONMrBMXS-#47w5LR;xdwu?Jj{Bu;VadLdB z`_@M{%8vKu>P*doUzecCw@vo>)kpmln_x^fHcM-Ia3SAg03ynT9C!vRQg$Nq-3N8O ziE@2u+-*)X4vXh!why8{bZjKTwr`|gyNCZSoRQ6D;}7@aCl>KwHP;{M!>{`6)xU{Y zpP8R+i2a=ui*zWuS0TG{`kmNu zK;Wi>MGbVx5+^nAYvbX`@0h#j*Zp(2q22v*j9z?QnAfsW&OxF=*4LUleU^c>8kqMo zr8@2b`mKA|9E3X&X#(?BXw({W3M40rmpsau%IV_iAh$$|)dma?=WAb~O?;KfVDsLg z9AKCq_`|>wtP;+xnt2Fcyi}U>Cr8@Cve2ff_-F0W65sPm5;8K*HmkPW{2z=DrAf62 zmTSz9S!h|!`RTpNBpjhlX_{^epm4t_oi(y6@uy2ayD8j*>s5CsLn1UGE28sLa2d2S z(4ZUap7D?5vwBvDjZaRRJI%_^N&g!20i$%*9XRTGRGu_ld^KO1HV|EvgkbfkP%>0p zveEQwlGe8>8w?EPW{+f@L++6HHReU6eeEFbI95bb=j834@J5V06z2I#PmlgRzwDp$ zJ+R|b{K@Yrzp}rN^Sgt;F~DZ=XR+^-|G($|Xd2!1_ghZeR9ABHsa6_4REA$HxL~4V zDQBZ@EV^>bL?AEgJQnu&!+L7z)#cgcL#y6~jN2Tx{&9YM1nTb;fV_1Ow#c=+i`zN%LPCTy!?M9Gq&kSjL5%f0I zMK&v>LLKX`61{sIMi=xE$2;6j5;R*AVMh{#DapuKouR$f(6dgjKL0-IZl)Whw(`== z5d;L(0CVIjD!28Zj6<}t{I7+45>k#~~0Jjxvah}M6B@<3~k zlfZ)zB)44&nl6L2=9^Gsx%?*iM4{X8UfoHO@{6MDBipA%qDCXS)?7aih$nO0NlGVm z)`}qq=X4E8?1J?_tBr4zFoR2BYjFk`QO*g|Hc_!2xKJt0m&A_3JSs$pTb4uCeJ}{Y z53|PA=2>J96e1BM+Q7VTQ8;@>=$s($0pMM5$i`EIRbFj=X;WcyOOqn0>u~{#IT7o9 zwYfo+jCB{KS?AjXZ}sHjOXObs0%e*ve=I$Sb1sqU69 zeUliop6!?C#yjOEuhdrwXHrJf8mj!JReDYPlx4Ts}PnY|-gxHFtq(k;e$2FqX}PFFb?jHq0U@5(!TBP(fkQk%@eDyUJIAdDqL> zxwmLM=JSDhU(+&0Fl%@{Fi(b745p?^X<;eoE(#JYZI$fOW%4k1BM|p(6H^5qFmn$& z$g}PuXP{w|#NDEq65G3Lk4|jwQ#({9J!}>qBt_e+p)|X0Oy_S%EGy?TtW8~D-&257 zWDfeCt~zrE+PSPeRvDsacC99Gn=YEK3VJ_sj||dk4AIOnGbM|)bFQt7fssxOWMh@0 zJF%V)%&TCdEZ!5%6`-26%&tA!ae2>MThMC0@NI#!IM5g?xjJ%D`OY)o>)L zgIjRw*PL*I`P$uv3j{?f9oXlt{X$yn^|KERk;d9) zi_b;Lc#xM-b{S^6LnfGc_D+%l^X5qPcmXt@W!WI-rYi9Q`J_1*q9DCJpJ*|vn|6te zbF1LSvTO9y{6UbzBY7ar48b|XKEoIFrsUJ*7T+0Q)ubNL;UuanpPphy~py;YT+!(XzJ+ z!m=k-nZ-X+^q9AV2u^66vt%vS<)Q2io~4ViLAG+0@Z{X6h(M0Fs$_Yy$oy4>9_lf4 z1R%)QcTc(J!WFI6tv2;I7`rO7?P{6ZR+A??ABc47?(0{!G^yNM!{i@t^QUjZqp3_5UZEOk{b+5@OAiAjC3^ zB{7zHl1cKNQEn~Em2w99QD1suC_Kv3| zs7Pqd|NS}l`+c5gCKFrfudn~_=k=0#zIQ$M+;h)8=iGD8ecXIch0N*UD-u!$yI-B9 zvFKO#U*|-V#lTM5bjc;#OD@^Ugi*HxI=RML%BbrrTYp9|F{i7qH9RC5=a7K%HP~Hv zwOU>6+K|@c3UwEml(5*%x?GsAJ5|!i;2)~sQi@)S?4Y7Uh0!runJ_ScO3)fswwnM3 zm9>}q^G&L=QXgD^(Mch5@khxi@*G~~=CG;7cW)2JKqGi5@d##lO{JznYSu)_)!yg# zt3BnGKh`*Z#QC!neM?FH&Dj$dC;TpUe-RA`EV(dsTp_ev!1v3dW-hkUT@s68*whQJ`ZZMo^2GY->9F%lY@BT64j#XV}%3U`4F z%A!_SsL2Pl+fg^)kbB#d!xa(x7hs`R<0}svSA!9; z%+;xoi!JMFG_j9>k!ncg7sg)1bMPFu$zCj8TIue9#$ZI4L|WV%;o^s2ltu2Y zBXFTiZ-h#kOb^VA_$Zrlk02g<6}9eQJ1=F1-a!pZ_vEw``C_>{2)XPbCfFvzpO!8_ zyZP(aHY*BS{IOjf=X}gWK_m+<1KYg@rjm`qkBTc5#PVci+#28{xSA zn*#PU>SoVxShrFA>F)k-=kod~?>zD_!zHtLe=T#>)MS!QLCuYjJHb5o#D-qJO^Mjo zTFh0HxjIy6J{q+-kWAM8y1LrFgtn7STGF8E+)^wjf8w{{%dJD`Q&aUP=OByRiO}LG8bHZTHPNz(Gef zm4XEK#z@Ak4eWXCOIso1<5p7aO8Aj%3Q@|idObQ=B5;d)MeMcV6GP?LKy}@PMMAXd zuB^Gbo^>FPDT$x~%`^C|M+URUY zX1G7en)X?gYF0R_-1)zR7h{i~eBxF}?}ns#Ra6uwSqs4nRSa++4Q&r0?RB&eL)we{ zh<4=iAbl~LM?2fE(Po*atH|S~JzZ?*t0~Y-Rd^tDh;yQAmHq_)$7n^|bE~nbYU0f? z?m_VSqU#s30NV)1X|h(gN6McfKA!d$9TL^r=IzGLz)BOB!KLR2lTxYW7Vpm5G2mcTx)#FDsFCe54k6ASgC9X=c zZJr{THq7Ha#}7BUB+I#1_xj#Vw}XAZMo8#N!mn}()c*{Nhw(@Bm$UzSrdts~#}tbm zSdnXGc^jB)Q<1lJ8 zIfE)m4k(`fe6w#9UUF>cr%<58DvKu1rL4+)s+#-(We}t#v}&U*F8=eIk1wj|b`QSqnFvip4K$xPD zA;$JuZU?ra7y%~6AX{2^nJ*HLs*pbJJJ<$kXN~NGOX?=NvrhEG3oudm;q7L_8w9uv zX*-P%j{pYHHG;l?IGP`chOw_7#(4NxJdBxcg0?wPlJU;Zx?BWrY2kC?CbWKZPy~6h zxE!MS-JqHD$Q*@lhaXghf2|7NhKdr6|LQ^Nu%U^@f7p-d1oeGWzrtjR<*%?0eq+#j z)P5TsCmJ8%BNbK_o0{<}KB|YQ@?3s}o3eShDVz}dW7zt=G;v3>a{TQ`8*p<^77+_; z+&~t?$yaFLuT+H}v|ewWj3_ZBH7E`V%~M_McC^N%;?{4h#*U-0>^%}gB$D*PNNH1% zn7xWt1Av7~( zhgg1pjevZxHnsZm`34V5{Aj*K63|}iK`my_eK?qXIw&$*dCU-W*D}59AZ6gp`@QjNdqit z98MsdA4X~2eHs{E<}QuWR>PP45zE<8%FCo+SnwfWR5S@gtCD8k8mr?s*@zl7qArXG zw4DUw%A@VzUs9lcTZFQ6G_pJSa<#K_IJ|-$lzxv!e7#We1132!dk4}r)n-;>| zD3j@5X{oCWj-Vu%)XOzW9_FzuII9LU1T1btA@%Vp#SEMAp0rt`koS_7(->=lHpAMI z)TFM2h%0udot_ZlNK@13EhC2p!!9l*#FAe;l0~3Peb}1*z9lbpzt<||Sa&8f89Pe6 zVtI<|as(5xG;#l?4X=IdehhzQs z+~|8Lrlw@(ur3wzXY7%iKv|o>^<7&>utB9~xZhlsgRhm!b~OPC+)u%-Zp8AI3g5OU zy^neXxN5Vq)bEpPb#q!3SyUUJdB)ujY6gI<4y0l%~CfE?#2h}1?QHJ+@0q~K|$>AQg;)718k`?0l>Wk#uZ^&hE=@)Wab^t z!;j}g{Dl8|eCa&6LH4Z32-f1BxAPcpQGkes+TEQ4 zt&uCv&DGvCx4aHk6XE=_X1Yuz9%mMU9PT0d4-^uGo4uK~EFNbhFTFlnst z1;l?3jouzGq1@vS`@yD>{op0U`%aq1K6E`ra=MeRzfD}f?botHOLy6sW1YV)wK8-!h{em2#m-XKZ_QW8102{^F%?e|0- zCR`*b_1(=q{U0s*motjri|gGLqV7!pU1)_`A11w`(jjK9m?=x6(tQULe6$wIX?0lC zsvKYnTD{cm?OS~^!O##~ernBTcazoulTNs6I8X`F1L^qJQIVMx(OF_(7X7^8814K^ zjNL2pRlKz((?KpMqt79$k_y#;ekkjW_vHv04lKgyPg^^~u9aei^stp4Avnl=ds+?$ zdx3-fHuIR>1#z@_P7bq4w+E7h)@N;`EwP~})DUsAAy^%aOw?Qv@{{n2TqWfOCUOW* z2TU8_)_hl0ZM*H=q$$I4RG;OP7za&EDPFj#pV1_|^IXZLH2P~+8O@a1G#ImRcgVbx z>2K?Un%h?vT#wolXuVWZPep^+E?>UBrcgPn9T8kSCzYIt~o5d&pHxg`x^ZN^;*_SX3R{Kq%PB>CxtyknidjQCITJ1SSOYC3QpH zZq_DW+<^T#;#O+XJaasIT3zgCT@;9#@+{F_h`%0V38A}LleO@$RbWnE-nN1tsfNSL zIK03L!>Jo|wyRh&d}XZ6AELABG{+i?vZF;>KcT^7)3*RA-ZQU;$M`9^o{_7a9@WDR z5s5E%y`{Hg`ajp(x47;g&j2k>ik7~SeIytDPv6wW|cA-S0X0;#=oz(QDZX866z?CPdODP38wAP3QC~%MT zq)Drpq9?>$8W#3UHkr;f|E+E!fj;}knn|MZpUio(>D#KA>3@^)qGc|-U(7JQ%M+$) z0t!mMIt39Cz^=THYL;rD2M>!5O35x5^ai8-b z4ixX91elsevNXf1*xZv%zwwDDSmJVbA&ElPH&55!W$t+XT1ZW~_h=7ehf^dA3rI?2 zBW-e|r-wu^Zfmh0V5jw2>k^#hwaxd(dFwX1 zkZrp9c)h7Y?YW}i#7KgjM0N&b8<0bxF~-jJpj^T0-N>*@TM^|6X2W?unT z1x+e~VQ>sX{V`R;CIxkehtpE*3;`dt^~2pO+FG=EGDC*qO5bR*RY;LPK2E5tbfHU* zdO}x~FVeU59TM7^(rpDI<;-kdMb@m3z0p)Y5CZ8zGeazP*TT!Z$^JwG={OJ4k>Q!O zJP|UsDx7w-d}@c2IllfN=HQ*SO^e(u8c+nODX5ZLMGV=qtJ1KT(Ix507*6>!r8wz1 z$rb1rdrD*aM%-Ab6;sk)N@B-0ll3G%l1&Ya#PW@JA?Sg{P{$C= zZ1MrD6@d-nG}I(XMc_4=9zG#|U2%?Y=#dycb8Lfz|5^s|B?A`ezdM2}?cY6q*Dcz= zclk!A`*)=O=E|SNLbUz z%&Umg-6#Fp4Cb9J20xh9>(^ezWI-pzZg5XfU^Zf!kJ0IDH^hvO2XND z-8~rV;VdiXVa{W%-g0-mObo1?%D7GP&W-Yt9rM0CA{G7M&quI2{GYiO7VnG0z6LmY zvCniQ69tGYL_D^ta1BAM!?*M#5c1Ear|17EbCgoG2f+$Mj5{0ViOpH z`_l*wF0cQ*00G&KCT=6y3SD`k-$ic5E*@#edAae=D$kDQol_}mZVsG~9fFv)W<(jb zJwU7_meY(GGb8Cb|b0D2m8`QKw#}V zv?|D%0x_MToTh%{xXTVBIn#gM$6OUfOL|RPtQhpj*{_SEPv`lAHTZbMav$dM|5|?S z`DM60BQXB@w|_Av=|_vkZIE9Yy${fAl*UH4F}?vp>Y0+nUE{aJM@9J{L1HeiiL^*KTXGF8>Hj6ZPJPS9dm#C-NBAsewEJ zxR`1Yy<4g$;hDV9U2~Ml%H=ssjLu1va}Je;#1>Q%s@1X`5)=UCRINokOa^_rv$s z6m_jD&W!BRYKN!zs_o|*21zVi9kE_fb0ceB;BLb}n{`zzrloJ3iY{`5c(&j8$HRxA z8P%zc>g>?I&iQVz>TG9q@OPufU93s9KbW#q?N8Mh9gEyrq(plI*shzmxceunk4y8l zcK5YjVG+l*=DSB!>j82kP2bP5^Y*z!<4=8>-5Pd7_SR6f#UvVMTgGBnzNgx+8`sBdv-3qt9y)$H9tTzB`acG}1$8vjCG9 zxlPqx4_lLVV^@mx+Xgny*4Sb&3A1p?JeK zU|+elLS}@;bB1j~v?AOw8|Ie=4Qr2_`gV43Fn?7KyLvG^QPRDLe^NyRPpcYa@zN^Y z4WbWlHmF&?hr-xFeT+7i@N{52%TK#MO^T$l@t_m>P$+~22Y$dmOw>4!by?>H#;uWp-PO_#)AO-y~lvyI{fHQkmB535?RL?WZN z?>3L{4!?Mw#-8aFN2_8<;c#EEB1jB>1Qgco$ymz?cT@mhIK~B;BTJL%;+jk)vd@@R z)#-rfSFTI_>(7XVAyfR z^*ctcT6I0zR!G?hTZne1rWE<~_zA5)ll{&|pyo!69f7#F2Wp|N5=lr*UvRwN-2T{` zWpo!+V}{fsOI!F}>%B-msc=TI3?7q4cdyQzTT(OWg5sc?3&N%NF6l{(?=KfG9(PCA@3zz>qau~w!6nhCfZKs0x`XvoHMYg> z1x$^ek=E^;3PCloYq(COn@5=Y2sfdDmL}Vd94xEB?-_{^w+OzKvH9)x8D8+SQM$ju z`#@^=UWzfUz=)BYb*St=_C66ejtC>IR)^MCxUKEL#iZxcb8WtrYjakv&Fc!=yo5I0 z-f+N(`|p{n`a!Phs9e?K3#%rn8gd}9+)X!aZMi!X!@j(4<}s}3cw|Vfy&~4LAKsb? z@$mXudm7t67!(LUza7F?=oEpY7sQ9vHZ3yw4A1nDwH6Z>Q?n$Rnx91_YpqxyW)faw za3Jikr5n}->J!ivG?m}lH_m}|Vh*hHPZU1xwfbRJ;2q<^yT2WHd()|pAdqPMIS?ho zWBbS+-Pd-5MC12K<1(|w^7f4Z0b7K72@{|QJBORiazMQB^%ytrU^fi2t-7L{Z1`7E z-67RO{*DVS(Aoh(40arbxdsb53gpQB%u?s(-nZNhBnYEBe%Tw!B&tk4WDcE6L!+x%$ic3@>lnkr32 zZ`dz(ccF|y(yXBtcRrksk^TL>CzRYyXx-w(txnAE(zZC=)e5#Rl(e+fRg~aX zjeS(5yXMQVp$`xaHVZ;YZFRlZ6m_rP$Tx&2wcb2zIMbx1%)(^@m0!i_A@NU?jTsN?$>rAzmPli0~fJjUF(u~tAc{3>bkaZh{>rn zSlHYTV!AJm4+TfpWMY7-#r7hV!`_rwG`bj&X~+)C6OAwELt>M=*QkpZe>gSY!q{Jn zOYZ?Vh=vGN)=Q$X+Mv+WDqOv+^$qW*w1ydAvfK{sd$P@`1G_v+%~Ie?G$wq_Qq|na zpK&&RWT1>2tg#%$Ncb_YehYV$ti(R>Xrl4CxD554lg&(xJz|M^!3EKE))X5wj}w{- zWJmUiMxCFAqsmg5QI+Y@WkKfHN~{kLYV_&R`yw}S$PkV?C_VZhcfd{>N8NdN#{?BU z>yQ`^LseW-$6Y>_B00DQjDq8E!b1t2^z&d>WvOob5&ndenB__H5-5`kCtM=dyMIGp zBAXO{A((?^=9P)>x$nxVr@}@wpY<+7drJChzKmZ*q3xdO4V3anS!d3KW!PCF77FT( z?M&F+ro=~tJ%ov4JWxy-D}l(b(M6l+t8;ikb)xZZa1`CUJ1Oq-`Iu8AhoUSbzUxoW zx`^6w;wo4H+)zE!%ouh}tdphC(ne^`5tSIfjR4$V57aou2JTMTDP)ZuWK!4IQa47N zj8N)sTc|tv;3%8B9y4diblyT7$c^2HeJR1{J|#?R=Yu8H^P`J5rWNxKt=kPYggFSh z>%y=qwHSI9a2?6%$tIb7vc{U4?0bX(*7vX9f(!kY-zF+Kxd?t57lQk>Q}x6R3)m4d zeXf%SL< z@tEugF;e0(A7cjs_EmR)s25>C<|@ep_)@uj%r2&2bBrb|Uel#(eXqp*JsVbioF1{S z?US87ab>o`4HE4qWO#bMy{Ex1V$uQyt|I;2D-~WTjfenydZA%Blq!}utgEraT`z`u z+eFWqV41rF(K(uN&3<*;XM5K$n*X?eLzf;G7a=J4#o*Sp?5go(mZP&$GvJ*{cPh23;)w_8saAZG{g{korZQha|Vxz;js1xnV9ec7j zVC;bJ6=}s#%a+Ne8x=VP%mGAJCMr+&`;O@n5-7P;J2z)=i531}X&!hw7a<_G+R@YZ*;St!KUP{GnUzDnI4n+sn@F*vSgL&ydc zOz-pH411!57aa=UasTLQ0E{euJyyVUjWy9&to1$YBo2*r&6}+%(Wr~zz?NwIn^NE( zlifmzD*n(I*^?9|Y^dT{63!A3#c3wG!M3oO?3-A*u`x+gElYFA%yywGzh40%cv9;mZXQJ^PumiO)$1IlD`Eb4b;g$~Q4xQ$=vu#Lk z*0g16hyy$F40i>buk{v{zEBcSbUdb*$|4hY`e91+2G~n1@hFTos9EG~JyK+P=`OkX z(PE&lr>8PMo-~pZ%tf#@X;nwqk#l7#oWi@T%iIIZIb>BLve7GY{_bG5E(P_<)+#cE zvRPAu{W1Ao2dF}UV?`OYFe_(AMP=QVD9n`DSWU_cFiR+1o~sZ?QHWo?YkdResM+(T z@2VmPTd$XqV`BjJEo0c-Iq=@rMzXjls#Cv0aP0Wc&E@EV&UVa=f4B#SW>%aRp}_4z zGg*c_0<>ZOwIR8adZ}jJpj=IP!cgt{xEhpwru!R54!Ki8J5yfnmelz5vLov!d@P%9 zVGG~Fu>~!ZyI;|Q5V_tV{1-T8{*SF8?GF*rKl@K3dhzjEC?84~ugEFu!uMSZ@-)NEjg_nvbHiQxaHF}2Zcn(Ox7XJZ++6(9jqGEyfZ?OX4Jom?d?N@i zU;(YEho^Gu;Y@f-BsK1#1js;}#b66%4rOu(>~1hy3YLiUiG$6~9;7c|u3=?d%qT6Y z$7r$4)k$X^286J-@#1r}{(?>7AX&1PyLah`?L+daLNR}-xc2g4_>rMfT9qi`2v!&* zjpW4<3$7?E2Dd^o>-q*XlNU^Ak7lLPHzhr_AO;h+Cf#f))#(wEQtJ1Co|l~CxlWaY zX!$nBLi8q_o_NBn^g^_0KfK5yqsB7#M;SE=+L;x#Q{BFuZf*%IX#I9X@Rg=$6*T^Z zaT<+3ws%KJsQA#6Ca-ErUj&iiyY7DT4;(v~&`;MB?Wx-%gn0@kt<`3Gpn`{_f{M4N za$w2?JnP;-_G(z$R(}A9ntQfK)E*jOcSF=Bc)xwqxvGKzo~6SuS-}lky72OsFEA=E ze_y;Vf?twq2`%#A{Vn6^dA%0(T3|`^uINZ#t6DO{JBlbYnWYDZtPOajy?)o`HGGM& z%2dR#e!{SlnK6nuev8}A4}}*}aQ2I?6W+fO(M9p$4t4nDTvm~)9BUOQ< z_*^P6dO?asFy6g6IDvPZ4$W|Bc=fED$7Ul$?<=b>s%sV)$$IGew-fyQy!e65&zfX$ zm%1&IP4dG*iL4bsQmJ3t+16@1Ls8VTw_k-x4&lveAAciLvsJ!O}YNLu$Ak7BK;SlF|I$k zp!}4AfOTgC%}O=0#jHC_4Xpq_H|2aQj{neTaws> zhxoE@;&ig5~jRM%9MtnxQlPD!)Vw44AMsg z?ZyMyfKt7iQU%ealMr4N4gqPQ@raUCI>{DQ-Oj|gy4vTS~ze`3Zyv@*}Hj7u%5912q@a=U#@%jpq;CT2J-TpqP>Ove`1pcEyW z#*s|l6Dg(b`Mn)GG|Qj{F(`9^Y^xh7RpJ2?N9&V<>jbJNn|9{kSg_lImJCvNEgh)M zP1ye9y~99tfwmnaUq)S{$evjVZT+XtAlQu{k#VPi*~G~C zLAu9_R~1l4d;7pK??vzbDD!!z&j)~i6O8}{LqY74`VlC zHYL93pX#<%oiuGprVU74jm|sH%k?CC4Oe`e0b$yLTh_8QJ!Nf;7cuyg!Q_J{vDLH1{Pesqxb&t9_J&M@{_#rmZ$TPUEK?0XlpA24`29@ zqyTxb|5v4Yt$HV#mUpFzZc;6eu66j9awb<52HmTMjp?44J(8huXaOB0!oy10W{QdU zGn*L3Y#*Vm@WVuH&|gUmkA{Y!F1xY7&g^@(I=lqAu(Oe%frpqcc}GLp?^s5jWu zN+V_+pX&e0a5KUGlpE5Of_7}2waQh-SqKfTJpVD>?aW84Nz_4EOd6h5DI$HV4XiiJ zjKqx6w%Rh;bhfoJ8)5O0G%?+z3Hk6B6j^7$lBjEyyP8g#nEiT`NR23zcOuGp-1_16 z=@agsupl~_{eTrtq;&8Z9$TCWzqgVU30Zaqbu!Lp@Q~rz89~Ly^=F2oh3tM+1o0aQ zx_cxm=GTv_t|+cQg5*9)qIi=^*sc0xDr8-9UWz@ZejF-INf2Jj`2``rC~+a4;l{A0 zxH^NQzC5~w@J;)y+cmp`*59f0o^1Li05zY-KP<(SlXQ>&W;cw3J+A~YF+2Y2J#*9P z55o-~ll^CCD)cic4;|5GJj0sDf1vEiEbtesTz2x9eIjNUaj^ob{O|oKLWund`o9$| zmxzA`4bxEx_h>!?v`?(DFckr{!@&Wl*!@fK?oi_@uU&6O^+CaTZB~6VHcFuO;0vy z8M;&K*!pmuPU!#gMBRdTUa7ORBcw;LeaK!`kLyFry8JtLNqHZ`uUIha>~ zj8r&!sBx2H%iN@GiGha3_&f%Qq1i;T=~eacx2i3{Fy z=mavYm*PVE!m2l;Me~lB5@*4~6e45q=CeS7khv9qtHMV>?@9QFbKAx}qN4~yCB&6; z0KxuJT*O0GalP%RN2T3WY0RxGwr8`CC7ZrRD)YF7T+M&MZ|D48q$#vJ`8)b*@1H=m z+Owi5%!WaF=$f8gq5YkTG%0r9ziwx@rT>DT5;2w8Su|o0YoTb-h`|yO+m0=!*S>SPm>q{!< zNQDf&q_VS@R0;)@reoNz0q9?NUrRQbGQhwsaTByw1^1Eu2TFPWl@v-goe4NDpj@&^ zI46CcRc>+RBz86$%@wy9VF>?83Ahs?EJ!l>a3SzV^5GFKB1d?5PCm44vNN%8?B6>@ zc9)$#6SC*vZ7pPX6F(J^ytPY&>^J-mA^S`UMaX_}ivnaHWtCgpLK4430Z=Xlh4MPz z9sO5II^?%Iunm)g3bXYdaj6Jp-CrWS>Omqbk}R30>UI)OpRx}F@aqRMn}ek-|Dbe( zWLikc{uazy{-@U;eiXOf1?v>&t54Zgf->B^#X|08O*ZeyKO^xml!eM&y0=kiUVnHk z-(ve;zWs_$+h2jdbLZ_3{G9E-_(n{1h44?=VEYf3eOCB8xD!SGP-o`)Lt_~#jb(82 zolKKPqi_%~&i9Tped}7&w+?ULA0C?Rv6TP9K~Vd8js|k`|9UjS7npooPwdYvZW;}1 z^0(B-HETcL+^bg%Sh>FREqhgALS+Apd&jKPv>Nz|P|;*rONfD^)-h%gq&&eejlO0i z*S=vj&VL>4DV33hc&oUFb#N5!y~W#5e*3y*yx+dMp)*?hxk~IMlwJ6hJP>Vj*pDB%P3^&B{ie3N9nBQ>_a9*Xe!j!k;`QVwbYi8Sz4(3d zGYj(D(ZgJ{7#ug&f;m|}j2^Hq#Hz{qB#}O%J-_q(qIa%+)-ygSo*&J{d0X@HGw~w{ z3ORoCHe0;SN^H;A;QI3I-~MVmzQXn^H`xAnKWF=6J8gf}F&lz^ug~0m`iRoP<(YqP zp+rIa zrdsrKX_;%hUQvg;HoE>|*ArJZW*V_%ENrQb+l)Mr_$OL}E!FqT-tPWk8?2lt)+qB? z_i!%rD)*evEOCSV@%AOIv{h@-TZ+Qf^7g))y#{&)@9TxkNeDw?$Y`O z(Rkwp@D=|}AJKk|tS9fUemR=jm66|lrvH^kiD6WiC7Z5bQr$l|K4me;k35ZzghBrz z;l7?{gvf^RjkoeG?qi`^#Xy-3AS+4N`uZ-#nzt8y1RO?HCfyulS6cMMk<%EWb6sfQ z&;1mGnvi`bqG*Y^7N`~ajMY=tzdV?@u0UI*&w#tZi>|s9N8YmZ=r0Zgy{>o|zfUF#9>M70JIZ#+XTk z!DKnl+Pt5JQa3V_9G*P{vr_#K;!+gzR9IETyt-Z^nb_{En=OKh$Llwa_qTZac~uj8 z4z(l0-&8-buN*FDf9xuOHrlQ}Z7yT{u6w~C%;C4G5Wjo6Q9bj7V%1DI8Mzh%6k4On(`%9udBa1|9jK}Qr zpY4i9JCv%YVKMzbAJ4L<|M3!8MfS1we&}Id^7@UOyE>rwm0)#2l`&Z*0vMJ5mB$wY@;TK_d7lOMUQ27P8S$&ESMFFN>N zJhUnZEER56rN6*HTn+lht!a4I8 zZ|-+`umGbDTX9(txd{#F#?PvH$d z2mZ$ALA=0&SZp9(?@llMyx5EH8*S48zEy?ro%{LVo0f-fx`%IawNQASTQczT!`D$? z_wV_g`Ns&K=2XN#x)7y(6VE=TwK!>S^JTl4+nkR5@D{=t7nL5YUpTC=d|h%oW3|DC zw(QtGujv}phEm2y32D6 zl`~_02(wz^ep65**>o_?iHXWWuotBsETg9D@@KlwTL`v@`aab9zA%=PC(}}U3qdHu zOpq?&%n`k*?Z{ebC&{MK>Lk;D`Dnl243}TO*plC3bKBfkVCMDf;r6HU>w*1i{Pf)B z^-~}lnfc6{*Doj@tyi71Gc6yD5@xS<-(X@tql}a1hTfkdJ`e1XgVI0g2IJEqvl!o= z^z=P?(v&U+hGuzF%QUHl>{dyEGqE8)IjbNF>TA@Ew=)ynZ998{R6F5gUy*1+r?-j~p5CN&ZL6^YmIdMgA>2BX(RW)aY$; zmhpnjnD2q1Z&e|7yvo5}M0z?7-lbW7A1eC;kCO2eqRL;W;_fRbYkTAdJz+e|>*?bY zW6-w3y*Cv;h58tTzjY!UJfn52**e10>7_8{Ozn8js5W&KzUL15a``;STgP~P76lbs z)gP4Pjsgknn8|p@Tv5L>k&>z_9+}FGtwq%#5sA?$A-Hy$H`-;hR*S~nNY4N=5kN9y zu4L#hx!)@yRm5`g+IoIozUVLE2U8U9e-Z}i*rrM#a0f55*(-mMNEbDDjOp>ucQlD- zNz*zFE{)fc&8jY6G!OUa(!^$ty)<(;Hi*%~T^|4r7qmVp#CA5R4OC-7HLq?J2WXVN zjk362g)3Ws#IF?Hhz)EFr@*5dq$a|VTCsXyqG<3m^lx+;D>t9T?1S~k3HiVD$p3Sa zwYvko_|2lqRoE$?_kCv~CM$l~6hxuQ7tK

_A(o_KS|*STsZDW!1Da2Py&qld7X~KEZ{k0qhay6R=d8eLg`UURY+!-%tb6 z_4x$k&EcEreyeMc^9la;M>euxGQQHKIq7@?e$-hzaX!H#Gkd4a2Vr#dSB|uYZ|pez zXGmXx^m$gE|FM4GM!i2Z-q;y4y7G`&v}p@%JQOdg8x%H(`O6Xvg1w z3X45gOdWquLLxwjV%PEa{Lp^<{a+u1E@sEy>uiqrd%L~MQ`?(qwYL@ZHVWag1;$JL zQr6!EWWRfezb^qYbrk(MGEeOIdv>2S0i+J%?;D}n>yl}Z657V!a~j6u@2}^!E@m0y z@0maVS8@Z1;)WG}zyB+O`;_?mm9!Nk#0H7KCwk&4i{#*e}3}&T`BqfW0KPcq@=G%dA}*2q*_8JyQsCKiPI7(CDfu_0z}uVx-*ux?%BR5F>a4G}5Hmt;HbH5gEuoot zlWB1~@e{mC06eZynkaT$9ET<1U}#xkgL-&a`HB1<|Ebcp0F_q8>2<2mtIELQ zgFYC0v2W}8H`mzppVHa-Pm6qq`frHW{{~dmPQl-^lkgAX{5{yJACacbL9~#NRBYF2 zEsx|f^XE59XW^=@L;eg1AooK?37ETlFHlyOh`-}NHaM;g7LgAz14SzyiyN)Ta#ie-=lk&@wV{zGQ)A1cvaWRxLe# zAo8+7T1F0(3=Yf4C75KGI<$ftHc2RMpC802%8`tlfCDZ6wsS1L>>%Nih_5r9DrIy~Tf7`efof%0+W^({l5gTEY!oa~1Xs zOECzd`YuQC!Y{ye9998rJ{1y8o!ES0d-iz=yjsN(cX*U;+3AdF$3|U6XQ?u{+8Onq zBN&50ObEtMuEW67aVZ1@O#A}KD99d9v=rTo`3&bPI9=gBE#&vI2JEeoFRl*bY@5eAJ0D@qb&-83@p<_@|;KaehLPulYtqN5JqPAW9b+x!SMocM#Pbd+g;jBX#W4 zFaunQxVPL0ll|G`G6APQoAse%Bz=bz;im$!MT)t=g}VDD3$NDQE8I)Z$M6QqCnCV< zi|OYRxn95L3))`{iE`RK$#qyU(YQ{T&=T+qBJ2-g3CAqJ?0ZJB32WOrRX{$N@r{9i zP>4W*%>)ahrA#`<8$4AqK)6{-{2R8ZcPRjnk?m5a!d&IFgZ9RbC~kK;YRUbeRNG$x*3Ey6O;|U- zRiCXC>n5Vc)~Xp0E*XKl>v1arH)6y>t?Ae9hf`B}7pw^F>VjSkfL}*6$9@}4CEl_G zM*98vcX-3qRGP7cE&qmnV(BFPI`E_In~p^yeKtTz*)9491t38d?uVjPKy_bB6DLeG z*8NZ$gl5~nABqL!eyIK|`51B%25fb#6TwrqJg}!?-4C@81A~}|o9fx5eMtv-{a6z8 z#2=jDr{Ke}Z?^MB3lom}p{Dx`=JI& zZ^Xyy38;ox1f)0Duaajh2qR=(-x2TE-tLF$g^d&2+v+f@Z$F^7RR{Nvm2nNc(8UaoAid-+EYbRcm*R1zc|-Ve1E^PGdq_J57`|1aGS z^*|-yl|3|lq5v;LdT*nkLkM6PMJWnGEr$81tTlh)QmI9wt1vypkd3XLPTUVQ3i`6# z4<+n?(IVRKQafE@`H9~oWeHS*(f-eJNbIF&pWhD!f4yPJ_Q!EX@_X~}E;IlFR#3-dj`N{iVtI$EDQw zSkk+eZxZ@;{tO{FIV@$98X=}r>f3K)636xJKitcg_%1wFv>!mD!M( znZue5AaB5IuvYKm0B?u-_5%2}>|NhJH(u`%iF#iLGqLJT(YH@SrKtk{KGwHG!8R!S zZ}e@R0Ri;c`u4dEHeQc_J|K8)QLjVH(EZ<|zWodqEQh|m{b>T)VGO}fP2cuhW8u}I zZ`a*}j(1AmKA0+|EXt2UW=Yn!e*vB6N7uI}Oiz$W=k@LDVQ#@ff@Nm1I$UNymYI#} zwd;id_M~sufLyTPioV?n6=3iBc5g>pi!sBj1#Gfzt3!SJFh@fR(NOC2+b8;VYbw7^ z;rFd6?@8-LEqz+ls;M#{0dq9YQh7BvHW0b6ixD1}S8A^Edp4LGC&755?P0i4BOQPK zbh$MRPrjHuo#k4b*+ZWEX1(9j;1AVj8uhA+FPw7|4kk;lz?HSA4~FLROCv@X-*cI0 z*KfX3>Zx}f=1q&&?^@i&wRnWC-L?2ET{)V`bW7!ixzz8eH$qFT$^$p$`dNEZEo4A= z@SQakKXgpX{+_l(y`MLx){AP?(^CX3hB*xf-E1s2hfOsiv#{TSKvk>?xO2D!{V~Ad zf`{WCYwtA!eP*36R_9tA$j?8irx9!L)%5nqmdkNc?-Yk|<~oie<{`GsUEyl%Mqoq3 za?>j^V#D&dZBU7;7ITZuk9ebM6%vchLB7z3X9mL0%kfAh<~M%NR$k+bP}bdE*GFti}~Cr3HLF=qhYTY?Z&OzFfotDjp3tn@iz#6`S>d|%vaR;Xpp6U zZg{o_JljbSHodtP7ay8`QiiW4^H3u)KHbklf1<_VpL1iPGGJ=7$lznpy}pb8x6kaS zP?`(>T}?pOTx}6h*6ByYH-oWNF%Bo*HT!Wdmt5e@TN81gL!GO7Bhgr}8F#fc;fZ@w zf$-gr;t@Yj>L1$bxz%}o!3stn0hc&X3zrBk!*^U+I2#w0)!Qx^eovFS_TC&&(V774 zgBUT{;>m_5xj8g1JhajrIw(AJraAQ3aHtC9qvHdn9~>YS92JP1)x{@~0)Fgad3Ghn zqn-JQ>3Lvcde$YTXU-gd=#%t{l_lYEw$=(y5#F_M4O9Vg$4U+x2JL%J*S(r0?frR& zf6_Zw+Jo}vpT!5o%Sm3axs;oPTQIZXrDT|YxeqKP30?VLlmqvCMHAsB5o6dy)CF=MWi_uRPc+XzWIQ6}}kEjmO`SAbmwD7fBo>8G&Dd zJzR{G(&LIWj!|%UplEmSEGZJ~<#NwsA)l*H*XU@wVu>nzO)Z0PhN*rUHc-UOy0+j| z^*?tZ;Dcz79wjwY3=EXdt3wS|>*9;0ek&y_-r&KSrsZChM%DcPn0wV;=XYub@42

jNc_EWp5o0uc9bS>mmRKI{p%U(EgJG|#5)xNCvBks0p2P4O( zD{fbYPeJIb16?=A$Pdbw8j)T{TtJ0m&Zm#}#`*ED#NG#`R*Y7a0K!+h8?=fkl{*wZ z3qzK8}tup8E>4Y;ZPl45(^5xlcnJ29{dObnnw|8%%p8ZZfLv}~?&-R@6aF9p-`D2iwIxi;-!8FkIV~?tYku0=Ia*Emlc1?l&A2>LE(`znXv~m_KYWYk3VJ0 zQ)Kv;;gQFN%_@M@Jj#aD<+}MHhOzNlf%otLX$WV(bAB>h_1N3(AjIeDSnNPYv8#}q z{LWSVOS{}3bh)+ai`%Sn%^#tdTuwX$ndl6jj?3y~Jbb1vTMr3=J5LRRU5ybH{% zzv2+Nmv}d$*6MjLvB`|QnmEM$F0B1wksZvTmEoazuEn9-@zu51yo0%T(J?;p0u%e0 zv>?v~BWD76NafYWC~&u(fKPNEwF}&7KNkq@3hIc)5SJ|plZ*RwwzK=y{AlmAS1}(t z`U^kSJMCTkb(CKBm)>b%{C%C0=Rf#18{blS!T%TDu`{`1NV0uxK-YuP;^LGSXIIlV zk$!;c!(VEqXlDISe@pVI&TGNY8RivJY0rf$X+Zdquy(_Ifh)Wb8IC2r$-d)eIRbBu z@I84n?Q+k#%m_c7*I!=xEdn6MPMjO`aGo1qsKaFQH*#4nR#vJvxdl4{5nSsT$WXrU zFL1F9F4llsQVBExxVZTv7kS}=<#pY>6~$_+(0VasWU(usR8AWPF3yMuyZjh-cb9vv za58wq<%cV#Vg*G#jdRHZMO+HMKt4Els+$*<;R2s2s1#-p2pfh6z6LuD&xT10A-WF8 z&u}fysL4Et3I?39(knh`9*VqD=rleMrkl2+G9z*}ytKx|jEq%A#+ydbTh~JPSnCRH zK$;)C&d6v)3^hNlbA?{S$3RgF-`;eE2n$c;4sEIPn~jXB^E8xt))E@9SkHz)qzpRT z*xW#5V*aFrzP;TwCEbW*_JO0A*NFJN+s|@M>6<;tHD%=_*Vd-(uGypOkj1xtyU#V{ zyqf#b4AiJ%lSn zt~tFlQsOPeEzcRtOU-vmJ#Pd&o9RXB!RGtUNejW9(ndyd`a}Qk+s9YqE{%B8Pg+_7 zMXfo#;(fz>#~&&68ap>5_Br%{tKe1m!l+Lc<^YqK1%Ze+cSIy-Q1fQsMug`0a1XsS zX}EV`t>$GX7z~uWP0Pe?ykOjIk~jwTFnUHp?`(9CfjD0XC2%P(Bsq}ogc_mxs!bCq zV}i{KVNnu&4;vQI!|iG};LXm@@nihpTJ?}!s^8YBe zJBIOPlggPy5?F=1nyWB+{7%g6W*N2nub!npi9LF$G}Tj;Bf#0^mePr)Ku>%Y3`-k0Nx9+f4yXS#uJ7urFk~V3v zSMT~23Ek-*_A1=#esp{F6XPvp(v?Au!tRWJ7|#;5?bXw%Fz8LtJn0i0a52J||LysQ zodN;cwpaVX*7k0%zSz-L*F;;jST(UZ(xJV2&6A0Swg?MKcF)`g_G&O;*Z^@zKF=Jt z!e0XyTKJ8795k!llvSV%g+vZW!|ekw8+b5BaJz-&c*I>~&`InMRX}C4SS4WkEHmbO zOVm!kf~WqE4VXLpaEkTYPO&Ylr#p0V{9=c0lT0x=oZLi)v1&Mlbub3DJHQ?%F*|sFenAuL39F6x07stgo$Bg^$ z9@)HGUzuy!DA$d(kZ;`)U_hbOS1!12;zCO-LO9%(ghfTax#n8-HoiUg^q=JwTQb!k zar%}4zo%d!CsM(=Y5C4#ICH!l8nG7W^f1O-csg z#5f4)2@sx=wK@p|*(ptF|E1fL+JEIv_95luPF@N7!;gt`L@9#jQvS}COJ~lnos1z+ z9vBmBuRd5OVa#upebrx50Dv@3rHu3sOFNwG^iiHd{jluIIi6*<{Z{;$Gf}Jr*FZ)x zd6pB+$*$@Ze25$?9~|;0CkOcSUeLl%e)TfonT9-evBj*SP^b-6|ULAUP-{bwU##dF3^+Rj=9uIq(>!x!c0T~dA zC~C>pt{f2x9Yj9h4hhI&uAvb8H*p(g?sierF?scJ2dbJ#KOAC`=Y{gHsL4Di6t~gX z3!?q*9It)-Ec4Y`WHC#e_cR=Eeu5~h!xC-(grLwtNAUnXAI8)Y|Aft$8hGM1Y6QXv z#w6eOEHL0@v*3c+c&4ikw{*a1mEJscazTS!@Gsi86O-~xii?jwWY>Q~qWY@{QZN#-L!fV6*auUO`tu3N`t#ruli$1NC%<2plKxmq`rxE@ATryM_bxkE z1`ICD>M#mOl914qbs``8NN_RbzwhY-&at%nH}@Q? ze_yFHDKUxU$~D~4zsqDZL{@Al)7k2L{hkJ3@a|S6eD8#uYtK7p`&qhuhH;p!6nowA z(^v9!7gY~zbPL+mm9TU|`t7AJJ+jg%0)HxY;&tj>Y)Xc9xo38lad^Y}xZx&hl1FNZW%aQ2iaCE59h5%mg~xQ*s%;DejqkWyOxxQ)ht1vyk*Afsi{LiWN3DHp%C8_~aoHX-u0s5>e9 zfFW6^3EQuCR-poQJzgQZ*pj*q=AjWvj8*!CYFMtgkOAsk^*lCM;u6dnwO}FeuA`^? zb9fYMPvF(h_Eq*eVV4b0cxB z81FHHS+fSM8IgZh;fGDWMor9Ijd{ZXtImZ=?O~}AYI_f{gY+Z&I%vPA6 zpUUSC2UU>_uwq~!T{)IlpB>ojAG2kVfgjd7; zu)O0aFjw_&k-!SLhl^h@A7)Vt{wS}2{}N1I3;sSfz?wsMv0pX(+aWf@;n&raz+kDF z5M;A9@OLBpw@Q12pc}eC(RLBqx97%0n^Es`g{GZ3@B9=%H((C{{hTXH;RUsoMAK;_ zgmxt4fLz_&$YWz(gP9VWkJ+Olr|(8C=rA7&u6ZJ<0ZD%mzR5z!!JJG5Xd+aGWpVxG zizNL8gYG*#^H58FvBqcXog9@lAgY%jUW@&bFJQCgk(drsSGp%$OHnmSJz6djHd_X(T|&uUxY>FSRyvlO1L zr9~gRZu*(5Bciu3idOVuumU2%9_C66GgjjccekA*@%^6LpZ{fmLCr8ap8wAwL%Z|e zo=TwziQC( zEYM1z#9>FKjm(IqHWb;P6U^|9$9M-c9aJ0%+f0=<(W?@jx7eBXE z>RQypEelwl;83%qFUyCEPt8_?VU%Lc|Dw2UHi<=CU4Dfq1UWP?m1z%~8O-!gWC}o4 z2}Fiv8<8>D`uG*5cz0qA05I4QLErvO%?)2~W_~m4hCFx=L8F1=0KNvofOfg+%@V91 zrK0`0rXw_5GAJG{72iC^HY}awMsb4x9y=K6eK>`aCO-7xFd&c1?|5%LGWmT)O8VfV zlGD4V5KSUnxiDu@WXjksEDFirMmZQj(D%%0Y376Fq>?q zVMxQEk~J##OIW0ewpa8mjSPc_5O~#?Y?T$n=4U7havF+E*a#fe!n|L6fs^ zD*iq&k|e6|7#FIKQtKdkms$+b;z{h3H0+DrM#(xlme<18pp!P+t&=IX1~TzN6sJs# zlUs=)@&?R1RzSf@Du&om_@>LhdL{cL;i_q)OA&$pq`ziS73&mm;Ic$>iHxFOP z-wD0tHaD4*a0Qj*Im<{t6qJvFEtW zCT@505)=U8lAU^C5fIbN_-UG*<_hy(qXvl_38qbw$hFyNQMUR-^wqU05^x~6KMe4& zuXNL#bSyD^HPQnxYJq2hlU@Mwhvwj7%8qRy%uoY3sW8NK>aNMGYOOkrMa-<@4+Aqb zVJoBmvhdPIwG?FlF}NupW^5qF>JTdMp=HJo$1u4b_rIW)Ha7LhnKnXy^QDE*>O9dU ziOo$Vb5~USN*#@5gog<{j@c*Id53mo21{vJa#<#&WC>wv7k;|hHcx+ z_k4cNW)MDwyj|*Xza`{tR2M-S;>H%3o2^j724rpQJpuD>^5&J;$y3hH3B~I@H&Jg^ zqTZBvz6-==oV-B`Gtv)xeog{^j`LBTI6Z;6@38+3g9Zp23&CVHU5HxZwem3Z4yzhc zMI3jYk8&$!NPPeMMxrv=h|>0al#3m0bxpKYTP$sLxc}{OG_++V!A(YQNS{pf9q4aw zd^-7jqH~K9h_$wG{+oEovD!Fd8#<4`Ssj{gw}YrG<>V2FK$>pj8?x=4Pjm^Eb2D)# zd&3O`^rsjviT#^HlI6hxhbF(TNO>RUd>3XDmv&dLt{p^H@!Vi*Tcg`oQa&acAz0=3*`VHC1Rr`q`gvrsOel2X9 z=O^s;@rah*@cXBBV`QpRYczf4Tm11VEP1l{fk}3rKrPk?^Q5&YwZ2fgirruWLy;gD z3}EdkB;@%e1$B|K_tod3g3US-%2eTyDqyH0D^j^6+K*vucq)wc4DA~9>>?z%id(sE ze<{}GwdlthESg~aINphiH>~ccmFK}=(S}b4Is7Hfy)jMY8x=+SYaE4pn^H;Xgqrs! z)QSmW`>E17$otQK78ijG>8luJq`$7}S^%!j0?6h@?D)(W;HwSc3q15M&ZTJI>stJ% ze?q@QFDR+Pz{3C!$dnJlAYtw*YH-bc3MC+hI$s4_;4msW~qyZi4Jg2UKJVxV#{bCSaLO9sA&iB3r+hL5NBk>UC<1 zT0DC`35P%Ai$(v5c>al}$dJIo@1xGu3VQQ~KIsz74}Fy$?C03910fU&c{I%3Jo^}X zn=bKHZH5$LW`}!6`>FyC18Q4W|3QXo!1r)}A+)$CVb%2Adq(&>kSA_G+3HDKdE#nH zOt2rfe;%I+RYvpW@tEYomp7_jggP!v$fmo<6YBz;{8vN7ZbzW_JEuz-y9WHnkn7PFL zkA5Iuf`41CAi3z5>RDjn)!}csXaX3o%faIgi#&8 zB5!uVXyTcUEl;0@M=WTQZ806=uXoSbwv4~3zZior2L!B98>gegDFP>A0`6tEG1Ybi z18nRwZTOJJZlhwM8yjvnX6@6pY3Tw-OTR%&sngGrIDfFsSNgZ~cgiD?tZ^ytD-K9b zA8=su`-+tJan5&rp0=5fp5Q!ftbN%L-!QQ4!UisXcxjRsYX!u6jl8EWOJ4#eu1Q#$ z)H#qf#V5JF^R`ntxR%#?>h?u$5s~FBRRkjv*2jW`$kLN?eD_lt^SG=`*3L- zhME?2Kl;c6#{mPPEJh+%0A z{>qA4@F*3@P#`T0kgzH@e#7(nYfJi~Ijz`zK^eKQBdyqQSV zK_M>p0uGF>7GcZCBBRr1lp9GL9ao=Wx%euB(`QsZaJ)c9r_V4i&^xLuJZ!9L6`5b! zIR@?c5nCiTaM1b)d(pAiZ;Lfk>reW60KQ7Z)LQnq= zTl>8M_d45}g0>L;biBrl*z#2G-*5e2ZrRdnu3LewXM0 zu4;zTg}#Q%#0Pi)YYmq?iN9L>@wo|q>+!b{e_QaULf?94!7{OctU?{(q4EgtCV6FW z)>7)qkvoKuL`t7jpO1k>)FpXJpJaxcFU-MdGE@3(*q^GKl*8*%D`KwXNrbqSGE9z7 z{JgbfJ^neLk#Hr9l#|5sx2Q+aN9!bq$oWs&01ZX+to=4!JEz9?s(nOi?W{?C1gU+A z7Z^6!wLgGvgjkyYicfMO<{~`!Gj?FUyB1&kt!weH7;d`kiEG~~NpcnYhrV`CpB-vw zF&kd&0b{<5%dtnvWzF=fKW_CAC9)^y^rb+fg4=?9tmR?0Op@fLrxe=z0U?)E=ovisA&pSyjne zpKLJwfwf2YADnOLIkKg7#8EN|PL%yO_R>M~q?@+>xE(s5#%sfgR{vX61>~C)dugD& z?RoCQu&g@N$3ILWpdG4@KehAaR^?fEb?A>1VF9-F$336t{@gXh7WGF1!c20!-UrY^ zlhj9e$ozonJ8}xW z7v2j*PUg;qs6v#T;|`~cWCPo9IQa%Lw#bQVfyj}^qKNCTDrBK3t)f$HdVUV{j4wR# z_-cTf*tVj8ybdR(^bx0AZky+-+aRn!6u~hEgY<_RIYO4>ucip`|Gh__T^2d{87PN5 z52%!l&WJZUOgBo$)?G&(#cZ4!|@(IQurT)`w;g#W(&(9@!ciI$Kl{`riTv&;(O z*u75|-(-G$O|Fc38-D#EFwL23+56BLuMS$HCS7SDXpN30Rmg>*9dR`(;WZrd@DBd0 zrd4rN;%2|oG4z^k=V1EaiQ4CjgD_mES9~#T+aK{r^B-0+jw;zW2d)XKxr2AVIgvnj z$h)VB=}$vvp_wpaUt=o$Q@p^nA=3PWMC4ff!(Qjxcg@hgJ@D&8Exc=f{yt^$h1eDi zluyO|96P38MC8LBxFg{Chz2#oFyBtx&k+T}fgi{hl@L*24;%=d4uud-kKNSs*fPZd z|E(jClJSmg;LAN7@G<%!`MQk<;qP$a(pMaKK>_Me-8szLe83V96~GZp@!4)7ANw`6 zT|?oCvw)pMJjffEWS04^hVq4FEapVc7jgmFkg9+(_%ESmFU*HZ!BlDy4efys!mgLf z_F*+#NUR`Sbw?04O~98Bo7s+*CnQ?#y@!?q<&1BT_SLlHW<6+@q-WWoZAEgzJ`=GC zMG`-bUwn7-K!9T3JOT3;X|5602v8ENq+WIGk@5_+Q2haWg80nUbsXlY5$QGQ3Ub$V zM0X){X4-4LWO;apEktk+7Kd#twcs3C0xd;4rb3FLS>uZp9O{V!2Az9YB8 zdiPkj-}&aP$dUz+6z9c{qKX2*|P;6O~LLcG^lww6did; z2aE}5uwO3lm^we;xtAHyG3<`Eb4lG(;Iw-NLg>rdnm*a8RlKXzr(EkLq)_E@8wm!g zP52Zr;YH`AAxmkqat{S`o3}1bqygSY*!KqDVGh%C|n(r2yIL3Fy ztU_4ZK>A`-!P^;G!S&L_!Mm@CVyg}LiSRFrBoPg7-vSqh#jY@~TtC+%k zBMjs3HK;K`W-;~U@?(ex4;jz!lw`R)Jqv&-E@2v{tIBd}jXGvQgeILit)!V%bD@#o_m zyDL5~-myjFFWcjaqvzwuzA_(+Bi@VQb+bMbw8i;&A&lcG9oG2|j^`hT{ELu3V$j87 zP;(7be`gUhJ-K;n{_o%Z{Kp773**^Z4-)%(i*!*;eLwFwu^fMcCkq3(4;AbfIw8Fx z+iZ%}Ezca>!)(I8X%++Ms#m3i4@=_RVk+oE=lFsRCJq4gWper_aS1zB!|zTg2^Ub1 z);?%&?k6}f%5jZnLChB}gaNqu-{Otkfqohl_{Y%CL@M$`nb=tRSn~*gE(b1jW?x%eY&MlL@Im5^x=Q&mnVjSQ@qA)rY&0@jY|2INy*{d@RQjn>rIZ zA$26i>%V=fUU6NZZG6@9{qwt9x)2NcKFED`^`)1lUC6U54&S- zo;sRVT~~RaYjNFKRj0eRRP-Xh6P6lV5q-~Jj>WPyW7csl-sgzS#o4jyI^pYJ=yf;< zFw>p0|LNN+a(uBB2L4Cp*&BUk{gD`isvEn-nnF$Aa7lopo>(oYsENfSAAEUkJ@8#3 zigp~j4!ulqvFGx5^%P5$$Wxw5|5 zUDKOC*)^lmYsPfJ*^C(_McZ7rl!5dRI%0)!F*E^UFgiz?$R&03_wDn5>=XhDk4`>| zLErbVxwqzjIBMQO1yAnA`Ld*f3-Ew3cg_C{1AwK}2oKD&>|?|t0%uw?W{$z?jkh!d zC&L;&`RGlzo-wy^_rrcd3N>ByTTW=pnfk+7>H14odf51(83{t6qP`_p2 zv4nA&xX0*Ir;pU7XhZ$eX{bQ&LH$XTp%$LXeB6@1qb_=T4#Y3KJwL}l>Qke?P+wml zZZ*QAAZy@M1nSjbTLqidRi)xJFn=YAX^!a?dqlrAsDNiLm`1jmGb9JnZABS(xxwMq zsWK=7n6lN6p%hfxvb0$@!~qzj0k|6FpC!wNbI%S{2@p6TypU=WaKy_TtIG^_l-Z?< zr3}uXjr7`bW-sVcQ1>GJn(_E77F)=mGzuI|eHiCIG^hvRbpo;OmQ!SG(Ucaq+i8uQ z9hI*7CIR72^#-<++d}vQjeTdT(ezQ&6JWqvPKjpyNC!Ds{^km>EX7kq>Cj^wr)D5HQG7zjmjoa6fb+JbWr#nn>cf zPox{5^AXa!kS%%{OPc3S4U~KH)o)MBL9a4)dfjOtj-Us=V6-Zkt9+5N>=?ZF>M9O2 z8oQxc?0nC|zpUm#R&!{aPQ1W+{v{1exfv^GZK9!$6eE5HTsueTDu z+vwZ)^LMlH#~BHt=Ew#yl4XM!l93a86$9N>&GpmM95%Ix=SEcT}b5b zZxdpqY^IK(h)%Kb-IVjPwtz#$!Dz!5mt9)U>NjlNn^XY{ziqbCP@ z&3$#&{=OY`*}-1n(bfTR9EByOd~!v2&6249*TJlKFW4OG29c1v8<1CY;5AKb-N?UI!Wm+s(eIiHbd zKl75SD1m%|U8v&lweB!pp`e}2J(gbQ%UV`Is<;%5X+|$h8^kg2OU&ib73wo=`9i@x z7Gz`gRz-b?2*o-Eng_6!`wrz7k*a#Jrl};wr{#dPDcJuw)hHhZb%m$CBIdr|@-H~! zs*p!@qkVwu73M?VK=|kOVnxo}to=S*(Qbk8#RQ5g?&f#yn(K+& z{2afd8oyP|s^eK5Ha#D8yXHQ^#*uiemH1aATEWj*uA6UV(MZ2O|7nStx7@V8w+lC- ztc<-^9KL)k3o*bR-I;|>Ji~e-{jS|EoycV;yxcOtPWyq(dLOa|%IgrG-XEI1y89$9 z_v_Tn_>6$^{?Wctr=5E$KbsqLfkEnOJ_hUv2A_~op#(j1)`TN%Cpr?r7xIa>gE{Nx?mayOx2(!wd|9sgpzTxnlhe`n*p z;~DjTJ4LStW*RUJ|9|j1avRFzxFKs|cZ?>vv|31)IX<=Nti}Iyd0~)!K=+AkX($=L86M6KBm0`7#Ji`)YagSM&S$C$u}=HIMg(G1FWn50$R!cO@y8afSsb0D_;_A_Tt`Jy2)E z+dEQ%b8v6XuR=zO?c5wHdfg?`GuV2r<9y!8)yR3v$;?@_vSMtkvFNLrQN!$NR%Uv> zGRoJ@jm^r%t$L386{`xBH3g=rc<$Ln5>0BP+({5vGrLfGf0`uJimZG06XmPwlU#&+Tp@ zJ-1y?L&dnvt2mF^EmYApTu=343jVQ5O%%^i=mec#Pxbs6soUe8=|sDFt=abKaOP;F zX(=GtD{A*Q0zGFVU82gL&#MBsFjtqDTY0;S*&4*%8@>8`uII}#EUJ;R8TNeHfE`}W zmo{!gm?v@`8%2Q0pnX*W*%xb|+ZP$$?XJ-K(94eP;;Y}CL7Yx3nH!tkr(iRF!iTzU zZ7>^}|BiM7=7GMQXX(jyb-`v#kczYXxlKV?lV3xHau5`5Qz@0J<-o*!v2!?iyN3_O^gRPP!d;tB z!q3j(GI4_kmzt}KDZ0RCoR(=UAGOdGoA*ba&~BNOAL0>{a@(geDK7+?)Dk#^hGthn zai-Q-TJ%M5JZxv>2r#P$?10)_zDK|T*D0TT#AICk>N1c3A=LVfhS)e^((>+fID|Ybyrl4WM|&QK8v= z(<*Y0#(jdqLmG!yvY}Gg=gSZ9XS|`#0T9uQ@FkTYO)F`^F6qZxJON`#a-Q4{Mf@+$ z+s-zv*OzFk%m`Uu9v{@s`U3l`y}rDp^Xl1y^#xJ!n<}`zy!VNoFMj~;B4uaW^W`D1 zg!uYG!GPibt!wdB_8^cMe`3njG)KgF>GU8^i+ny>z;ERIRJ?o2>Uo$`! zJ|l8NA+|t_@|D<%-H!9Sh3RMDP%5|>z~cZhIICn84EFJbPl;kDgho7T4N@64Yc->K=x=FhBN^Jlt+wlCS} zj%xmXr7lmJs(`CNuiKR-rCF#bQZ@y0%7loqR*gMNNQr_H>uf#@&FlqVWXApDXXuK6 z^z9A}ti|_n@~W_Hal!;WZ&MNMk%DUa#MyQZ*mi41G(&dB4-ocUT7G?|=HPR&H)wJ2 zW`Jw6Z#q{_4qk>cw9+fiEZB@)Az|Xe3zr2vFFTmHlZ7v(<^BGKxedV{q}S6?V|0=n zgeTGIIPF0Ax2uNx@|Y^kS0YEC{5O3QO^|KjmNC!Er5Sr%D$ov>ilf<%AGIvuHB&(T zfR7X0v{8NNCC;0>BLnX__RO6%v*M_>00pxlB{jbzKyhW+#HUa!ms-mOD2tg||8JS8 zOHsZ0t%o-ne-^w_ZZde?=UEfJC9eu)iq_4-J!7LV%NqR|Yt*JAbJEgh^#z8TZ$he3 zzKMxQ!8us!c_c!V!)|DyNAqPYbnsoJ;XWfO)6-Qw6^8E8jE{ZhyQst$xg>VPyPmHh z^&P^J=F5R{tAv%^$1SS#GoT{vXOzFm#*B>D;R&nGMq}ZN`wG*iA1nC1#rYH7!#HxX ztpvXp0{xMbOQ1Y^R+gA6{pIU%SvUyAC~ESVOMR|8>T%gMNU<1uRY;h-!sjZf#|7R# z*ZoUQcj^GS@jD$`XPX4ZhmtXR70yoE>!;FRcGP!>(t&kIL0H$t(>gG(#*E8GG?U!Z)r zz0w`1kRCW*xN+dJpx-`=o_t zL#zSfAXlk_iorf}WC4NlYPm8H(im?+%U4ZS;$cXnR9uLLgXl;$LDf!x zk62m0!6zQdlFP!}no^ap4zuR>kz)BbeK6w!?cZ#}y-xMD;C^1lRoK32zDGCl-9_!-j& zTA5<;Ob6mJ6J+{~nRdWc=(FI#2|%wrMA-F#n2&>+pAa()huRBDBR%lULgJi~Z2f?E z03pvz9GxT9KU|$;-Nb^3ysyv&90*6+`>Dp9?ulho4H>)=8>ST*1$8(gGwV3KB+W7| zUc7%@+~Ufhe5$Qm^>S!t)jkrRVAN$xcyetErjfbrC2&QAV$@aaS6rC2X$7)HPJR_X zaBgc+r+iD&-$)9)v6k2I&e_fV1_UO65Drut&`h2L1Zi-!gq)n8f=|gyJe??Ww^ER~A9Uv=Wcs>mWL^!_ zB_s1g8qnt~V;?Ofwj0g4C(3L;O|KtUex}g|yK2vxUX_hN36}?Wp89IfMyIfPl;dNp z-`kHIoVGmc5j^W0Z7PLYVR|zYByU7~NmezaClXP5=c_*(?cAj>eaTKihUuH=EP(f^ zN$(L~(lRFP=Ol8V{iJl$H#w1r_L<)~L(RA+tL_@g_jeXB!lT>3gKu$|x+nE!_3H5G zvCiVFv0an2mZ$0u33u5yqcSD|?6gtG+h(2oYkIw$>D^=N&5a_H`LM&~TCyd_6(ZNS ztlC|t9~9cvZN~H=>97U{uM|^y@S-6Ze7lHVHJ=6jKC?0>6m!owusAZ5ZjF9;8epJ* zi68ZAI8XCf?8q1xve&4`L8<1(qQ(lWle64(h>MIG#6(qlFq|$n&ptESN2H4AnY6>l zq8X6)YOe%5WF({U8~XZNh_?U6j=8Uvdt%(Bij-X%G457fum|WXde`R)yvy^%;(D7H zur1s5p0<42(BOCZfUSy@@kyaS@M}jriQZJQJQPp&==aLspedh&F&{Y_K$_dLxBT7}2ywimcw`Ax5gMVYbn(O)O1l-B2DDh+BXy;@W0 za80F`kV<300-rfH2ge4`7)?h9(CGuMg3wR!qn2_T40I?b(XCTge~K-fjiAS|(LugB zg*#B7!i9wovIjQOv($8qn5NS+G@W)a->&@-xk#qR<5!dEnW$QmskUkftv0K11@PT@ z+ZA|Q4~dsU0#kG+b|pJCH0@@h{nTy6o4ow7=F(y!CADGS48Hdujy5>D5nJpay5;y$ z_d!16?vp;P&mt!Kke%k!$Y#)oLSP9rwYQ1pwO|>nVKE2Ki9G_5V|Gb!T4eawLmmJQ zT{m+t5U%)jZ=mWs;Urg`mUD~?hgRQG_07>P91zhId$0CLRJb=+F>B!2xF>tpZNvSq7|#}beKlXyHdUNdBGB1%I|334duB9sHNBzjxVlatEpUb6Q7* z_gE?=vCE`|e+HcYz~4RiBkTfqW@ctO{{CP4A2y2dKatVy9QrALwCukhfGXinXQr2! z66#~bCg!#aHsvMf3dOB((KRf&3i461ykh!toeaHuQfVuGz?##SX(-@Q;?_PI@F>~R zV|p*c^yjJzF>#8`p>8;v7~vao;cLL_;1p~c*;F^|@>761E}S2(%oM*t zc>M8XFT?U1^yX^6L4!xh4CNUz5V`acY;#Q~M%x{x_(wgyJvC6i+VSK~k$&&|2kaRV zc5{C?cEt1Y!StP;R5`{oX~D*O68`Y+br!&T(s;MQSBijbCX457)_>HOOiz@D?D)s` zG^*c%_hzJD5A;dn7|2$OS~Qxo!iC|nnVq2wjfU{((`A9S`viK?=fYVZNI%XDc-Jnp ziS%4&dU$k>^A+;TXt(o2cyyuj74mv^(mV3^cYa8f7q$J|vqdn$$v6mNZVcPylqhIA zij@5t=JU&GJ|6(1t3E)M7Ia8jAc17+P9g<)Nl};deK*`rt=)*VP5t9t-7xNRxh<~m z(ssg2*Lb!*Hdy5xTWSz$7UG&|czTdjX!dG(c0gJI&tCPyPE!ovgNM*S8ckg3lib<6vd{}aTtS>m-=lw7YV9D(bOCIA!XCF@aby_0-uq45kdvnTAGXAzy|8(_qzuK>iO}q6 zeVizPlgM;7YEgGVPR1s|4hUOqN$w~0B}G5B^{;&P?U{cG@kc7Lg}~zoi}mr~Ifl7X zRl{gywnV!i^b>mtJt*Hz!B!Y7#GxTO7t=yV^Y|$2tgFMRLxi*5$5$>4HCe zl2;E?+SNv((=jpr$*ksj9cNn{o|+k+njNmpF~XDGYBrc6M)|zBv)EG35;T8YPgr{v z0d5W{?-%3vBhB78e?YY&ra|x2dL60-wm$7WTcM5UJ3r(A?Fql+k&x_vDm@#`j@iaOf>GupK zzB-ya^Nm@z;S>Mk0&g#4@gWm@Tc^K&xk+k~8*g^ekLqre(t9So&O;>#<^2V@GWaX^ z9KIsCo4rm$3b^u_vf&{y2PecC^KSqKpy`Iq_&8(E7skArN+9$ej1iRbSTGCA4+6e1 zH}I4b&M?ed^Qs6m)JnvGLjnxzKw2){6Va8jOT-Q_QPf1d#C!DJ9s(u;+IAf>oigjl zNTwH)aGZD$Bx09ct82zzQvufLCP)Z-D!x(a=;(7}~Sy+-=n!!m2x zKXrLuZ3|Hl>DT)+AdvD|C694*h-+ zaG=InIn1oXBcSjCT&AbD{TQmlV0x}TxPC$V1LJ}unYVOF+)Wh1?WdO2-1>8p9rq?G zjsU-V2ZTxXN5=v973g)(r_vA`&`g#{_K>gMgh5cpjx|9=N6`@|`jAyL&slVadKrew z05;(AMF!Dp-ViVxu6bU2%^OeWlt(_o!Z_N13KM`06`Lu+!}UFUzSw%SAwepP@bcCE z4*&8NqlW0Q1eR-!uXZ8+T|x^KU^x)=MMm7A3^Y#WG?tcxI&OBb)08cko3h2R+>e;E zY!P0+_moKtPA8r${z915ZLe!8!$CLWu=rTx;6Vq*Sgt}oWQ&wdv&W$l=1H4{!tlx& zKOCZ3UGOxZ3{fg|!K0ig>nVq;K)M|f1uBI-crj~Gt~P**kx(4%E*D+k@u(%!@Qrg4 z?Z44X1m32)p+O?>ye|CxA%d0k{JHxzYkt)is!1@iYBSGmIs_((DQo_5rIkOUi5@h< zI39AR6l-5n*X2EJ%l{q=R#LNjDj(gT;dQh>9ui(>$`9g5KW>#b{e{A|o(Envv1ojl zDd~?xZE&VvnUa1RHfEjaBU94*yOPsADd{D!vpUQ7)amM#FVRn|Lgah5z?!P_IRCZi zHvgHJ`VVQjy}bU#UGsT_e+BR^)ICFZQx%R$5p%%$Ab<3idQs+ z0RCH~q6GXV_J89g0DmidKH~7(<-@wXI$J|Q`{yKp2gYXyZAC^-(D+yiH8oye>Vx#p zX_U^_6p$?z_}=a92j7Jrh)d_AZ!UL`GV05QOFsW@w_~4xYT{;@$^g{%V-r zT$XE|wIoU?5jK`vU}6e=bx5#BEqA|~DGl^&h3bT)D3S%#%(e;7@YcSU#WNSc8?0{}`%7vEQ!h zBiKHM084b4x(XZG{MegK@uE*whX|Dk>a%xr3XiYR_xXP$qI9gU{(4ws%odFU1uBe;K@N6sGhc?i679mJ&Ke|`1*!-wb-{~{v_jMmQ=C|fgkFSxLpr%2Vv-#_ExPi5;+BttJbSZ1< zo~+9{C#6i2jJNkRA8r0}w62T%^;6kmSs&-G8xC*)0{90c!4IlTa4VeGwwHI5ADmQP zuYaqp{#&~{Twm71^0Alx>r!_Ab=fxkzb?-Kewzy8{nvF#|0(l{{HposuQ5sD`zgv=i5wFO4u;IT#*G2e6W_7?n zKGOk+7gv{6V#rjXT_7ucPMjM~g!3P`p@S86B`bo>81aTHT-DoHay149>yPliE%-pz zChLWo0JWNoV@nCYfBrE);GC-B9%T~{4S-ARQsvBxi2KiI)M)I*J#u3lc z?B-Uf&!B%}$NiE7kLp}g&q%o-LMOp=01o&Ln$jQlv)GKGg3veOY=#IB(+7A9TF;>w&`@yRM7$ zwK_^568zy~=qB;}8s5!K8r}yatDX;QvG~NZ#UGsTKB7xm@Ls0Nwt@GJxNIA*#PMLm zJ5JX{cn7Ay`!&WdUP8m`vEbcCj}S|~eJ#z=t(5#vhx4V zkv|xh!Q+|n;Kavmx|D^F^L5!a__zX^zO#npXB!`WT^I3@BNZja?|LY2@j@EjgDrU9 z!%}PG9vk@ z!B=XKyXBAch%RNAD$(Tmxwpp8Mpf%c&1FN~I`~hPZK^iI*%N z5HJxX&?pCkuTuAj=A?K#D8ruy&F3?f66EWZia(S{*+wN}) zKCPY2@yld<409UX-#%fy`#cTWi^L~-74Xyvf_*7xlI3Jy_2~S4r(Q1+cg(*Dn029}(~u`YI!+ zT>`xQ{pC$YxQ4Bz3RYG@(7Qi{-oq*HD^lLOJL#F_Q{I#4y?y+Cz0|^Qx@$3ZCdUEG ztw#COLSxRij{??f&)`uYL^X+Q{C3brg2;^UQ#z#^4&>3BwMN)v7rix)a|E%YvY#NDx?_Z zb-DI^g_{iX)E&bzGlQ4H)?R^Id{;oxijApk?hgd+^vQuW_!7iM;wpTGt7(jNZ-Z`V zM_GJ|4?qMmfKSK)1x<*JszfQ+7LJ8FfRI`dbtx&+K8fH}@Hw`F5C_)bE zVDoR73g@xFaEp1xZRj$rO!#!ETEH$za7PeZ!idFfQnY|W#mC0pI&~!&d~_mf>Svf| z=VH>?5T(b;Dx>@9Ds}XQSA9j7G61Pm0T%}BpN;}Q8bKSfIBnxN8lXvfM0ry^4Y_A- z-R#RadOAjm3gWrkF@V8W*n*`fT6YJTFGpXuyCp|u#NLR$h{HqFUxW@S7aMoNZjL4> z$L2~7b+$Az>u#B)(c2vZ{3AbVd*=9;&^!7gfr2qsgE&?Kt@;->{XpgI8#4hb&TphM z{*x%6`q{N)y%S8KL?2MROJcpZ>B&Sqax!5AtMgjy=6taY%}0VF1J*~(CT=Y}%Gyg> zWn6lQM@92aeA+q8qT5lqHi6L!vq);w2TRjo(tNZAUxLSQ8FC?-6bD0NMT@;|Zj4@U zkqS<{CIPN{jqaq;D^zdxL=)hFvY<7o(_R+>bddl*fkg2f3_r0brqgFZa5JGoT``)B zEo6(Sgg6bglMpwmzo0xlB8~t84s#IVC}4@OY1F^Cj?fq|Rosc%Xk@ec1~Mc@oaFg5 zpo9H_!@zif@8Kx?J?XA3KXSbQP)JKz8>gpGL34bV;9;f-VrPjph8QO~bX>CtoEE(X z{9#vogx2U0Iu1rye7!bv z(_#E+z{SPjyHqyHlT{o6#_k-U(xed@xE7443uT@Jqc}!Jxm`x_JyE>JVtW4G{hWn! zYyM&iS@U-wpY||+IeystMbK`NtHlVrLau`Fwa{~S6ZiFS91*N)T<0!_Mq-4A=2E_# zV3=t;yqTF5S7I%!n530onN%+1g4R6%rM#*Kyj94~50DKY`twwrw&Vf82+GJk2EW)W zdhdY_ub~s2gC6 zW9I#khtYc7*pffol|P1=y~790{z8Os7}{4U1@fej{{alhR{zm^)=HpZ2Pe?YjYyRR zruhXt?U9Urv_ws>(ORKb4E7hV=^f&}fIU)HfsMoK=sNcf3^^F}wuGzorN?!7H4U~d zkQ4F^YJL%Fd)sb^d}m4d6}ptAZ=S5nw$V2qY*&xBYqs^xqjg=>H$SCwh{L|&Ma6b@ z>YIbn#kf#!!IO{fs*nCDSkN+N!K)GDHFbPCwznY>j7>TUZZFpG9ovhKzugvi;)>v@koHc%9xG@O^t1$Rq^Zw=I!wla zW>57cSLZ|$$Q9d=YmqJ_zQ^MZo%H+6GgkjLp}9Kjd9W>_jZ*-N)=b^vrD!pfXi@Nb zsZJVZj?4tOzQH|%L)0wPAW$_fNv{IHLv)_Qkw*=+%j+}_iT3nvK2U=l|Ii5e@orWdgTL118jt(b++$O+GjF=)rB^ub&M!d7KzXCMB=VS`yEe{pTs^?GIMp z3`&or(stw0afB@X~GmG9}!>6Gx;y5 z<*8z7sBQ8cKc3(q6& zaPlN*0~K-Y3qbg9!7pZHMOI{5dbFE*8PbE<;^)y5le0~_qrk%suE+(Oqy6ZL?6zEy z;f7pwx+kq-r`n%g7SX?g-oCG`)e!ic5ct#?!l%}$E#UnW;G-3w1bu3s8i{$u#rX?> z$2;99ovu^!KGk2}k*|P5jw@KFeq()Kj_Pn6~WZZ+WsWz>(u$& z_9<65Qfe^WoUIs>2QV9qj*Cscz8m%!Uu4k0MoK5NvZg$b~4 zeOot#;5-a3Zc4BKSc7$y08lS;0`?#P<@a9r9&0FiXC_XgT&+%n=7ihqc?`)o0ubr< z`!(>bi}ZR5KPuzn7K90|R(+96jzMG_5$!&uE_x59M^ zm}@w4;nyhNs7}Wtu2&Fstc-yN;#2TvznuXT8RE|Z;5A^ zVA1tzz3Ui+#ei`aF7aAbm8m;dwb&OSTfolamv~$1TD+3#(EyOYPBm@RbkTevB(EhE z_)2l_X#9evs#en*>UZ#B-L1a-N=SL+PewpXu!eo|q~rGy&md-lJAn}O&R;>GqA>pX zS8*m&g%m2h`q1xfG`-MNWteMS(EQ5x0&%X+0F?&Hw}2pPHh{ON${l1R z5-?D`6d$O}^~5O(zx-1UVjwX2V>0<0$uDtZN7d&->IR(wG9FYy6Xzb`ihnn*IboXVD17p@VUi6+XI7}n>1vBYHD`_K=tU2lB_tn^{ zVv#z050vj@elHDAP#I!x_e>L14Sphzyuda8QvAD6c-C5Vs0G8#_*QBzlY*?UNj6kn z)l=}@*-*LF5RV#yaSP_Y`Rf2+DCTwDv>XqS;b2mjk(^W+^+u%c0HbK*wY~L+qV=xO z1IT2qoAch8`VNj2p%rzpdZ3(K2NM?sCmPt&^#;l}8lF`Fe4c7}HUvBk0T1kf4e|3M zx4WibO{w?dHz(bQc)hqhy$RQ*8@N+_iWe8CPYHCXv%m4xyJfo%AJgI=ant$~Z;O0P zGE{GL}Bw_@KXg-F$$wES$eoNk0ZNw3%%d%4I$ z@GXllsV(}z)s(z`qtMgni@glbT8n1pu934{*Qy)AOi61M_!X5cx*yR$$@+XTez7Jv z%nS__T<0v~1fszw9>}s!ChbqCQjv!f`(YQc(RWMw-Sv`n#JYZ@k z_hR11cOGx6Yb?fbK9%Mh#dyU`!nJT<|5(7M;x|_<6PJqA0|~sH(X(t65kA;ccoep9 zxH5wG&0_){9REwew|Ga>wt|=%V2eE){vYN}q#Aql%E(Wszn4Hz2KNKk|E zV{ftxcVVLeL{LOg)MB-YumLRcxk0nNUd6UPirR`*t5u(Ztzw8@Spp^yg#aobenhQ0 zF;*Jimv>96n8~{c>ldm4T>X5uknf0XVc_@L}mm7Ul3{D>T!WBu@W=f=mTJejuTZ0yJ1=rbruDqu3e&&K8I}ED(Q*2XU>PW=JDobRm3t_GNh&mWbn0FAnKVsx@wj4$4zuRZ8Kk7oQ+Grk6^ zFrXGZxv!zWCDq~Dhmnh9;xQzUY0qkqNk?avzAKi2l&w3#8I&O_uq}*8TkUSfP-sGC zC}FQ6GnBB8@FV6z(G&l~>Okt;o5c*t^--PsPsqb+Hld`f)7H92uoAQ?e#-Vie2m3d;)s%|5fUMIOd&)g=d?m&<}!SY?PUh~AGoiXK7fCnJFL6IC=xC&P3@!wIqs3lT z)YYpNwsnRwg-{+uDq__Ii&Fx5(bnulB4~aKO4_Y?Qw&A+wn|)X0hT@ws}Mv4l4WP5 z8@Xa6Rx*$^9?oJFa$y81L>A_5a_CAbov%uvbG~%1P-QVh`eVj$fkLD}1u`&>Q_&_# z6n3r&#nM9|qJnH;ZNYqER~=irUJQS6CvJSggdaPSu;c}NTCkejr)G*vu>$x39R1T4 z-A~>Zq8;LihtVdgj4(|@fq$#-mbIY-D!OU9NqMH$dtcdr4EdPy7Ajesqn0+e2OAe=pX8#D737=k+-J=Z0hW zZxUe)SOm3}$ba$`S$luvpQeY>4@DkbE$Ot=5l)OWc6mBWliJEo4{~UcI{D%WCB^tl zw%@Y9e)T8WYU!&Y&1NpK1xq(D{gIrzX6Iw;z;Rby%-DprGwe?I7VOq9B5MCpu#Mgv z4~3$~DpUo)eYngk#Bi*EeF>{U0Ga@(NW(2t567i-$JNSyQ=*_#VjU$9%K@|#ccDyD z$LE5y0KG5q>~PowKs&VmLD_x-H;_RE*fumVu;0zBHt-^t^EoTfoS&w4GWugL0K4z* zLZ;!g5;p>3r1C{tq%V3bCDsSswTR(jymBTmsP-4u z&|nNnkFlzi(_%?Du$IGR6rQ!3tMIqA8h=PJ;*VpfQAmgm(Ig>3KT-9}MC+KFbiFo4 zS2r3;=Z+R5ZD?}k$u_M1akKz0uouuj!S+OT{6LkeCo&TyGE4AR;tVmg0L4oH3QA6Rz$m>L(b5S0%|`h)uRsMgYhB5_`kAT6N>Vt;NqvKS+ap)%YFLyH*3 z`J`qNR;EbF1^Vo)G3${@j--QBj?eb^-2F$ZZpIqnK4Jj-h>IU%z3ASakxhC-Sw7x~ zMy}{7MKAXC8p?8+D0V}=z>AA72do+_+kqq1e$#AKyO9`d?;AMz?0c}O0##)ufU%=^ zO9Fal=<`l&#+7E6BkmBF!c|0$XGA^*L{!<02ZVxujDjB=8sN>#**l(73I;VYv%(F1 z+s93wKGl!AY)f*%~(Ljph7 z0{*(hR|D|j1b)#W00(t)<0XKCpK0Sij+7=z-h#1=w0>AtF%MNB!2f#j^~W9YpA0n$ zk^vf3HxyU!pSa(mPk)$20w)6g%@%wH^{=I_gBq@54Zr`cHQ1C=zpB0xyS@RekL}5_ z>Z7Fv5gkz5Ox8BwyVj=QZ@*8r=fM2AWMzy$U&P?F`4cP7Lip5S_S_zTCfX$A*)RHw zs7;%0I5)n16IA^+|DJ-H*jb(U*LR>wdlAIJD^=}nySFocKM%t#tL((zZ(yUl+jhS6 z{2^7@p+i;u*Q)xX{BKp>ng0(|`JFhnb|~$oP!oHX$oAUvDHgPgxm3VCaDiMdd5m=k zSJxAFj=@nP4JK<&t6i!S9ooVdHGkjN5q`fo_`Rd>lL^*`FlsPM$xWg7accus^cfk0 z=QpZpgT+=(<-l6{_pz7M0wp``*_c}Tiun0IqJ5=BHezl+F`8fcbYcEmVJ}%f72m+h zZuP9x8oL|tHe%MV!taTDqVxoQG^Q#1xY{Ltry>P|^cSelUamEX-^6OP@w4-vuJWG| z#jj0V63hKv@ar7ENA=I%yQBC@eJV~LNn@{cr#;H~Q|eAD6$Ho`hVH!m84@yA{G8SV zb=-ac+B*};Z2p}f1L6?b$Gq=+-y(J41aMVDSs_{rn@w^<8GANC+)TYJROSY1l_daE zXo0!6BbX5Yqt!5G1u)1$9?F{GFUMeWI6!CmL95G7>m})mz&paRBPr?d)PG4z%Dchg zl=ME9fZ{j^T~I+(t>7;V88~@Kt?(sj+=r@hF>F)xq0nmP(w%}Ea!um>EO{ZxIgFc( zb-8lvVk~>{XRPa?j4q;St2T^3q^V!ANS~)c`SWqLOz9V5=zBXOSQ^bv5AH~ucRFGA z+9myQ++x+AiHg*td~ZXK+J_D0s27uMar3vL`k`CJ4pF= z7-d|iE4B($h^S-s`oOI4kM$rVNAUka6Th>EnOebvef3`pp|{XoigUA%jG zZ~5JR^d1I@dT@Fl)w2V=6Tqm7-gOqeGZpJz^ps8SH>B@JN7fzlrA6;F+Ex_n-j3C| zDEnI+y>kGA^rn~m{w&))y=_z|s?qi9m)rFI@~5D;?f>;#Nnzb6b$V%=ev_vVARe%c zn@@uapAr1fc6HGsE$R+M&DbQ~g*^p+H3c9B%q@O1bvl{=Ihe;E7>oWJa!?kvCyPTo z$PsTJc>T_<@xw~VU2!1fN)>XqKV>8L@-m6st^5IU&hLpFSU4WP(++@N@qzH8s{n}i zPb@AK@s3dVef(F2-&83GLHF-SJm5!_IZ&C2sELa<&B9%*h4p9O10Dr9C^>l{#B>Oh|y3#zp4aN#}JtoTNJiN=Gm2GGDIV;no~ zs^@tT_^56W@1W%|r5QX^w7tV?S54@U7T-U2-C^+$txHz@7l^=t>K~6H9V+}G_2+c1 ze@HF+Li`Kt*DVG1fGK_e1|8ae`~L0!NCXa4d(&$_sP^dikTYhEUB416n*#F~nJybs z8|ECwDBSXd($D6DDz%J%q%^bvVh7A$N}O8uBLm#gBo3zCd+vu=2W| z1lgpWH^s<@BmNFrb}Pgyuv_5PTo{5UiEp_Z2F+j0rd{sBh4KT0M z!y{CN(*v`eMp`I2G#$ZTkyZ7!RB2`II1>DzM{E7}8(>t>!VOaw*i3GbiQecwi1Lo+ z4#lstRsQ|#_v7OQy)_YZM9;Qg4pk6ftp+8F#h?E|x>@@R#n@jM|B)0VL3@9p82byJ zxU`N?V{g)b7n;~8c)mtf1@|Q4lCb!ROX2@qNVeA=X0ZOx=P)A%*80)1{&Oaa0mqY+ zj~qAXp$qbyyog3Eq^2m4*ml-U-mAK3lZ@pcz=A%9_iK`Bh=1sf`QXChPr!xOrd0Oy z51kG-POdH`<6SA212|X{nw~4h;RO#a?(SoDbMPLbsj!cW*I+1VOEX><(;g!mN$%tA z+1&f}=ZzP~5(-!_uQLn&<x9f ze@V5XKgio!^k}>%twrBhJZh)P%COnSo7lmwnGbT|HX7)f;$B$Op$B~g2+)I|J%03v z6Z?(WuH7K6lg6y54n$`mG~%FIB=}R#Jxgx2IAoicgfR`qI0_3hiWV2@=e{}*9yW=` zXr{x6>~4`BrTgkyf^nfzxk0jC z3`VWo-r>rR;$ap$Jl!0g*h)76HvfSQYU{Iq?bS#j+5_+lL39jAWR6%0L6jmIH)4PO z4y!~VT-N-PcY=!T4?98O^;%5BhOf|83jCOO`cWsl%!zCwfEG2=xG%6CyBjHDG_@<&=`Q zZ*Df;u60YS09)LM4K`Q~veenok1Uzwha7|-cJKQ^*#)cTBeyc?T=r8qVyOONZ;?o1 zTF_#H)RLi5_amYNuQZGjiW2mhyrfDCA*w{HywaTBYEP|{r0Pp|NN7&hiP=9uL$wEX z+hp+u!K<;yO_F&Jsg%MZ66#Mmu_97F7yA&gl=MA6$B5k|WQMPhMypk?I?U;4YTd<|A7ySW6I{KO8A|CVn zL}dzWm(@3kgq1Sq$r$JAKsZq-mSbHy$2N&S{Z;13LXP5>pk(kKP~vn3^nE&+#SVX- z#C?UBSLRRB!yUy&r~Y2J00>Fn>XB!3>hFJfjdt15cE6*yrDGyAm(@!6b?WTpcasi| zs?8t)I=hvyW1aoC2UKUf@YSrq-W&Z4HPPo4+1Yd*v^skyz;xBwqhvY>`hIx<^H_r_pHo(Y_yAU%-ZT;cv>SI zDGWpOAZijHOE2bD!%x?xyh9TTmB-T8$l>W@5QA$m=qH|@2VB^j&&xOj=r}i$ zp$0|*W9cE^B44%#bUHpZ^Ch@1Y1)~(ISd-s%ax}VZQ{oNx%#eM@W!5T3a7=tB3JD* z_=Dl<{9|n4vr9}^Cl@{{*1=_1{9u~a!|$c&!QJQ1JW|QF%`JM#&S^afXeD5@Jrj+B zh_#qwS(_gIFpbKmt}lS2b7bBOnU%XPZD+%&%^a4bOIHMZO9WQ9qgUm4ojH#2JC-&0 z!Yye&=u*3y^%5~-AZvOHA8nK;{vjUa$JR<->y15f-Kdh&4$(@2RGx*h?pCPEt3x6joonzzS+pF#M5!3%3+1q2#S~lOA7M3s?`KwM z(%y1o*GO~FAkNVQjrory^UE2@2jMEPD*^?M6XheY>6a&esR!E@PKH~#LEf^WohII=AsFNSX>O6^+ynoqEG~14k_DU+=;o}1W z2JW*uTGThd9=$S+1T#}7A{oB<^o(rA;J^TP^RnPs^pBhmSj2J)vBXlu3jG*k=#G-} z|IRlm;&H0{SY9Q<-89|2E^lp39Y`cDooz{#)Dus&<_PbJ4yO;r%HMT36ZHn~7Pvhm zIC_`wLNac;7z_TpYOlwbv&+%j`?15Rxjcrq&6xNxvK(o6k25My@EGOC80ANXyw4&_ zn&Hhf#vX3WfhsjIE#&>X;Y|*CpD?^%guIU$-W?(DL!rw1LSvVO<~-mDdGEgZ>gf3n zk2xe$3%{J^E!s8QJj-xdz zqz|qxUxP|pweTubHFjC4c~%CpJrv&1t7y&xWoA}B@|T)J4l8O5ukTfaW|u!2D*vL? zOc{u5JHm~K))g6jhI=f@i|}* zY|HCGd{lRMXzbyHT7+{Fb2g)+Lf%X*xgNlZ0QLc6&I2K@1E^-mOsl~KfcI?3dz>a~ zEP7cF{%T92u`}eoFXTPJvFIGQ8idM^^qbxjbff%Td0@^HDnG^(nwW;0HqY{vG|tSz zauFFm_LbC4_u(u~BL0={y4tbN`!UY(@J(~#jfZ-CPQJOAA!u?Dz4v2(L3o6j5|YPuJP_FiE;#3L9n51muCue&4bIlh@{h&S+ea3`hpE2F-GiK{P;{*G&&BTs&mj64Y2mBAlj-jZisiD`tD4J=Dif;zlqQZ&k znF`BP9aA+o)gb9-(eN+{l*LtB9%r4y>323m4m9(v1wx{QDLY4+DG(~&ok)Ob*E=86 zG(v_Zqd#z?wmVqTmNo5w#ll!4=RcyTgp9{=1> z=Hly4zT(dfWjG37&x2;(1Sa9n4Oj8cM1CC00_AA!Rdt59(PLD;0@=9Q7|VmE#g5(+ zmmA)vjmjFMe7U3d*rgb+k9mw=Jq)?H6l7QovH5#r&SK;pVtAj#Pod$xA3uW(?>!Xd zQ;dnv<29f39Z#X`fhyy|zdXlr^GR=ydDfA`&AfpWl-?o?bxO1=^M+t>p9^USQR2xv z3nDEIQV5a+HeiT`bjZs=QF-~UCQrqBATU!XFug@#%{(gs!@dYYObVoLi+~bj@L-BW zPtkRG#ifv$l$SVG1-WxF<&-}!A2Je{NcpHlBW2>|QnPPvxE^wCE977Xr6BMh29c=Y z*@G9?Ff-*CR1L`#Mx*_qiNE)-)tDRZ0d&Zk?4m~CJ}6XvKN^;92~AJl1tITZ)lw-n z5hFX~eM~l%ViOujsQgI}td4#(Ii5THQa?Jas&BK9VaiRplp3D7`h za8ZLo2M2V_tYe{6TmXD3Lf(f}L(js&KqV59JS60O+7gF&%Y*Wf7xLDCd`U9P8V?i{ zp6nU+eJlip9C}$`iz^+@wP5Ciy{!S=gX*IK9om_Y$G5 z!%*RHmScGVK10|8eWTDLs}L%Zmg7lK{d<%;dZ%O{|4uykGjM%gc>_TO^UT~w5*ih?X3&92xjIVH>;^G2*yiE^(lv-{GYW*&lfc)6s zfMvcEQPM1Vg7d9O<>u&=P#T^_d>ei*J+m?7!1L&R;rE@H8$(Cpxik`P$<17a`-OrH zDZXH9VkMSXS0YGM@Y}>0C;E&X<>sUa*Me6s#(IJag95lcR$AM3sKdT`ZzpJUk;JsHO}#Z2TY`m7wbz$(QxH|I_D8Sm=h57Nqw4|yCnsxOur z9%;{VATci`BXmES=BRofLK4ejr(@xRd@|3&y=qz22#5a-PAUIQFWEga z12cys7{phfc^*=;o?>dMujGyCHxe~-oKr8@V9^Id4CjwmIq~c74P*3ZH|7QCDmS>1 zG;ajPBhoPjRho-wbuz8lPQzqU=Vp4dOm9)?^G3AzOWv5a6n~}A~BODgaaBFUL*}m$L5xwM})3)lt)%l1s z_dot9S*QIB%Zu>Z>*c6Wq0Qv5;J&M)>TR+FLIzS1*(e#MhDQ_<)D;K|ZgM5Sv=I1t z?G&V826nB%FBYe}ZsQ)sAF)SqipYaGQQ9%HBfdpaK(jvcQJKFk3p@bEbv!hT>7QY0P=ouonT;$Ueu>xIvNTH^_m+Z3l zC$?Ru9^M=HZhajo; zH^@aIFT*d$b%7Bx6lIBdFbLXyJ>71Fb=e+^pJMT1T?%nK0JGwwzL>IXKBCJTno$Eh zz(+}VBOgI`3!G8Q!$Cxn(c^&Rvfspz+$Y|IJFDa*4qEgF_M%i*kf|J1JRB|=>qKrW zNX8l*1$d$Ycqsr%OH*l2VE~-kz>kMTMms_=TIXuWc0)Qt%!)%XNu1F&Oe5K1KSQ2S zi>ptMEF~eLP+bbo6`@$ezZLHxI+H}k;>KvhyX=u4H__%t-!Hr4N7<2zAJK{6M;hD? z&X07aW>-_JpsQC`$6EZ2*nus%AHa{6RJ-dM3unv!%Tcu&}3xza1=YkSX>7T;lSglx&`kD)M+kAfPMBa5$JV}MVx;Z>`uTU4FON^jIA_mqEf_| z6-m<5$8mcl(u3__(PTWpQvhf1*22Stp5vrIyQ09VTVoW6h|jR66UXdQ0-&Z26P&phML2DvCp!YEjKCF-m+R zK7fm9XG%m%{6m$vC9cF?@f1tQLmja?e%w*<{h@U||F&H%IrUKH-+R#FxcL{P#Qb{= z(#T2=DRRtQ#QFCR=#Z1e!%tb{>pcG^aF@uQf3IQbKch6toC!8KjSw*ZUX9Y-%)fS> zEQJ!u(K-ifP(Tum5upH;uCm6#&si&>_6T7d(l;v?2ry<@$;|j z0449_a9+F^s2^P38OTKm9r+;trQeG5-rXaK}v<1qM zA{XVsO>^V5xf?mH4(MF!8I-aeIUS{*1L$+3^|lkEK+aTEPmKf8Q``q2KRG+` zyl)|}5gC)?`KiRx=Za(p1O`EwOGhraTDuRXx}NxrA|IQje;V-~9gjC%)*b&$ zQT*cq&fuR(2j?I9f3l0NRju4JC)UbT(f@I~m4`MS;nLb+Fv$B%B9$qIrq|;{hqGjq zJ}(pJU)=iSbw)}x&M$V{chN(mI+R!A+ql$fZJ6Sk>gT}PS_|!`6xx&H&~6de|Am~P z2D1S=EN($AkV3lG7UOuP?RtyL=Iw8l|A@kTUcq$4!F)>`4VbFKDI*Rv$m71r@nq@q zYbIK)Q0EC?pI}%Udp_d?3vpVE@iQNfkXk8FmVb*!cFrXHLQ9!*bA0Di!xOHvYDqtU zHr+Uk{q7X6K}g|bC_{H)`He_>X;5M#6~*+|ndi{qym|?b1vWtc$JziUhL}=o*K7&D z-hG--QR~@82P3ynKY`y*)K2 z3-6<`PCXRMLD%xJZGyyBGd}kj0?u`Ax#Fewnxl&MtRR@ad?v5zLuVB`svad$Wv;kZ z1bSl)A}t^3q1mq1$C1GbF@GKQhY)KD`zVMl&!eiT;uv^10r>3{idf08bA1FHC=1R8 z-yGh7Z&;$uFQu)Dgd2dPhvW%bk}8V93g>cdGYUJVh^2|m;yf37T>@##wrN*OLTWX% zQ-Bk{xXB`;NcuB*p-HrJ5n%JsPb3asvF87aEpCaE4=(^uqW-SJx6H;D)OcH*_edxC zuoJnulMmK6$OjwdCkp0{Sus}HCidW<9*=A#-J#Jd6XP&S7E_3k)M{emI$l1w#nX^!QTb2_f644)0D%C90-%I0CtEoF z9n%#sOP=J%ECC@XqO~jdXUt9;5FLxm)DVD1m_U4RO!xF`Z@I8*UsXHhAIB}`?`Mz-$c5(dtqE$_!s%Cmz zHE)TzsHVewCy=WNEvFT{$97R;H zz0mp)P7TC0RX$qtql={;QKb+}YL5>tp_gI`KzuAW9G4Ll+#R|JCy^S-Br0+}Lbexo zhKBeV#e_6LLGnuLv!jY4z#c}jsc}ZJdVCA+i3C!HIxA0w?W`T|36)a}%?0z)&uc?? zW9QDpS{W4TS7~dXS)%8I_UNKMpat6_fm1aU8Wb&5r3#5aj3Y9|W*DDhOAYSYPSK3b zJYF-2#3+Q(4VSC7@58BfyYkxgf<*J%tGy*0c zcTipSCvF!h_IPT&!0PdJ>dc#?s~irasftJ5m|YgL~2{KV=}VGszLl!9bkqPO>IOxDY7!U~YF}3X)f^BpAy1m(Zoo zTKkyQhiepRE}90feS&-dE|oo6oez=Abcy50Kq2ip{NjD zP_g?Y#m~kVB@f`q4kkgfi41T`5QlM3{Q#ZnwscRQ1p$+ZIwX&+7)biSU?|k-JREka z7y zeXo4~FC_IvR{XYSMxjx3|3;r+8j=_NRG?{_0!fIU21B=aDa2;OV!c8=q>DNz^jgie zB)pk($5fuTZxX+qk8D96RXiwSSoh?{=i)l3(|cj3_YNlzAs6F6+vgEu=jB=|WTVvC zSA_Y7k6okaJC^NeM;mcNgOuRd{j$!(L4Ab{p7KwfCr~DMt%jExpp8%5AY%$39L$q& z2&MtGI41WFdYo=QdRY2aXF8 z)RoOYD>0$+YwIxij1KW9xxtI*NK5N5FgszQUhVm0iK+o{m5&|>&qO&sD$6ikOvr?Y zIR*ZldMGuLk5AyK0(K1jk+d2OfFX1$f8|W5U4>^v99|}7x_YM~jb9iBt8cyw$Af{{RaX^>u}5LOJ1SPI#sK{l1T@aw{FK7O&F zD+On1h4{tUB&`^~Zv29gN_G6|_^rTi1%AilcRYR}`L#*-or2#f_??R1sra3R-&wk` za6X!=hZe{mV_~&=lRw77#p+G|7z^)FZ}P`jxKzE#A7ddWOF)r7#=_<5P5u}QYt)0A4^OetMTt z$mYq@eqs?u!lJra2)UBI5jl)z@iKQt7OW2?4zb`(=8`w&^%; zo?VZR7z)hW`u8iX@p14Ogz!=|+`I#Sj!l6cn&D1~4-bs^q=^2h8w*-U*A8D4sW|_{ zr*r;^e^;crZ-gWb(Cllq!71{I|2=T7I!scg<}lWs0+z9f=Ov(iiH27w!B@ zJLZ4vVENU+NV4H`NE{G;yMn)8huZbakr|4@yQf=t24qVdU0EJBJqQw2n9s#=nAq@l z9-w}famAI-@1ndoNO^Z$dA(D4!iTVujpOsIF1}a9eIMV&_epWzr*!(x4xX>@v-_hO zuW`9z!_-=D7UH`&O_yATS#&Or_V32vJLeZT@@?v)#e-acV}76lI}nMSCfMb*TrTn) zBsZ5cXfLaaQznB=iJ{`qc&t;Y5=i|rR&&=+ir=3YZt**o9@ztbhFR!MNGZ(Su<_j$ zHsILal`J4cJ#=RaP>S*u=I@UBU1(HC{VsH89rF7_a!5prMUex%rRqC}K$qW12b3qv zcln*H9{m7#i&cKIbTm1xzESD%snkFGm=EnVl;0U&5Z_(+9+iyvPS&)ugC3*Y_^#Ut zc%O>*S#j?bcpo44J_+wrV()j(2RyWoEM%uf(Y5Rgd%dc^%+ya|C$eS{&Kn}{AnP&J z-_Kd)jqI}!(w;Ka3GS=1q<-sC$m4Fhocs%c$@@rZsPTxY3Y3hP&)7P&LsX^_w zMn7C;;0k&e0?N8z`m4lx54W}BVIT~?+pu!wN)7j{Nk3d3Ayg-9uc20Kh}I`T1gGx4eR5BOuR4fou^;m|se6R?pz`8YI8&dr#V$0H4EbQtT`298$~ z^QT~WOw62$ijfr)^GS03CE7}&v+^ATW#-%?;$~%nlCyGcHBh91eWAn=;c`C<{F;9% zwHmS<3f?eT4(B?tiK}0={(vUXBz_Hh2(Dn!IIL;DYa6GB#-}5iS13O;9-?q6_L#or ze7|12DiwAw*2pr%^@d0@%;ktG2d|;yL@LPCb}EeCZ3vl!h!X&-)o{H`z;s36`u7T` zqNJ1DbP%uIu7rjnIS(bV8*wNJr}L+~a3JZs+)fkY%OC5>&&6nxW~3LS8{z%g|CNJ% zSNy%b6!gZ*7GkT_iM`_(b{7A~eg6Oq-1+-`ao@|T_WwRR?z=y}m(^ulHGpoN1f6mzb!K@LW8i1Tw=9Lrkl*$h z4tUf3?P7cjrMweqz{QEalDBRa7?!8@#XK|~c0J@(j;{23VH}7v0FNAg9Kf3wUT>b~ z@R-9iu^Sp11i;&c+P+UPmtq zi5xL>0pfaXos)$&8=FOMAlL@e&>CvzQ1`R;G1p+fG0H_BkAcuC(p9JlTF0}T@0WYtNcfvqI}8eT@; z)Df8FV=&~>qri|2Fq+Bij@y?4CXW_Uvncvn*^hbIb`PJ?_v^L+C~-YY^!g=7js&}o zYMqfi4#}AJ#B3ViFzI;^jx9HVb{_*oCWj>T5yl{Mxf4M zE<3?H`~@+=9aV>uL4w5z zm2UBM8M5MF7HHIq?AR#QyQON@zxGOypHi7R8-(<4FUD@sh$rNB_hqnCwuX_e)kqfv z=#LfDkC0_$K9WUn7zrqQ%7wBQ;sZhb9pB7~D@`2&9$Ub<0Mj@Ya@FJb`(WjIWr(KoH7QFM<>Y0+W&6t$$g=cpz;`t_+luqpannmc^Y5T zygna|;(eyZClH^nq{PJM_3Xw@veOqjT}ssFrL^$dlC%U%0smy&Il2SF^a3pyv1WHj zQ_Sw)q6T#3`}hm${bf9)=_-%ifr0)-n6V>sk1g6R=Tj;8Hjc*U&hoUP4+uFEY5}tI zgeT?H+@IT%{AhqB575`ayl|>L$@hUehDrW6NL5n%GN{c)$~)vp#JS|2QW@rKB}W4{ z*>bcOgu0(d7*dY=3jT-GB0@>ZuT+bl9jEx^ z-e1_JTAW8+%5RonrPNi@_qM$GOo!aOoJ$%@Zp!;LFa1x5O$K3!uHS%}Sbhf3lAAz2 zL&z-%P_puDk&PjwBQ6zQ=$5hiLTl9p9+F}2)QG$Vsvu1e9evBWPtI*Q@#RdYEn7<( z=JmDD%R|f-Z4&oFvZ23D!adLL&ixc=eq#+f=p2l1OT&?S8Xck5UJZQ75p#h9P&yST znIrxJ0kd7~gSG}w%!cnHayyh!>x27FmqdZk83YDz9E4t`+kp6An4!g)l-QvXoc&MNaozQY5H05*r+7okLJD>{m4wdD zN2(O^hrlq_`sXx>f6=C*wW0t@5jruIEvOeQ=YUWMrF~YtyS+cNdx&hIK6zVkuVdzD z&~!Al9-N~<{o*=^?;;%Hb9i%hIgUzz6`~gz=PWP~*hOmtX|p%s1EoZ<_|+u9GP5-% zm?)tnHd_(B{H$}l&Z3Rj2FW%;r(Z7uub(OpXXd?is!up507ZakHk zVRU0{y+Parodp|ArZ-U!!ONmk<%nrFhPlS5T>8*n)5@e34Va2^Wa3u&eyn&D?SY=) zr)u}AIO6h5%#?LKBJ*r{f^6I z<qwd@A)0NAq?h>cEeoxtx3>JUUh>piddosH5M!) zblnF(W~wcJTL+{*mtX3hx6biO`4h1sHV z1@#}w+L85l5Y;;i0EP{}5%O>=Jcoda2x3a3WS)gOu*p$^eQP+jK?L^2&C*z4d#GG) z5uZWv0cHBqFo_INHt8U>f#MGkaLRvhq(YM6V9-Gbloq%=_(^KuG{mRJ{jgETP%Olp zei%A%NF1)uXb*i^JUDh>B*`1zkH?y%tuHSlO7&tF}@LZ2N;kxJr1Nc zM;j8)j~@<{Sc4771KC)S%P9<2A{`9sbBPi2$rfO_qO~#2|G;c#$LE$o9#zcexvCl% z9frT#!RVkHRe9-TcJs7HQjUVv_Q^a3tI!Og)!a(?y{Ha|`HlBLj!Q;5VWiltJG?uw zmwl>O4lR#&2gq5@QS}J38@f{zT}_nXf%tRvkS>nLgFG4M4;AU=$UF}&2@u1j`JqXi z4QnyF>l)4TRp1jK)m!?W>GF?_Bg5d|;|ZKxjI=umZN18?VS))^V8`9YX>2inHZ#`=cH# zNeJBI2el{~WKigl>EaoP4GhNl{OYKhA#J!LtxW~^F}lS9%to}vO^~0)d`?dFsYE(j-^BYb8paGsa=21fkX`;?Hn6hvzwZ zm*qK}=MQo89ytW>9=v<-egWPu!26YWzY^~Oyayc4TdM%v(K{%AoOkdXiKDk6f1I~I ztiJIl>gXFUN|kjMiX@Qzh18yb;HByzU5v#8_$B}J*dM*^913ht5q%`(*i;V~n|RP_9s)5i#BUl- z1)@m=EmmpJOdzsg^?YzG!=fLg z0i8Z~oSz#3L%egm-LOZuMCa$__`+z3boP+*EcT~y&q%upR^~PKdClt+>3n{qzoZc^ zi&#g@g^o4rCa>`=G^sY}e{vmMa=0WuY3k0%V@Z`0VXAjjJrBr8L_QJJcSg>p6@Ol7 zNyD5g+4^z=j?J%&TVeeGK?)Q>Fg?B@)=ZE|avIak=`PaA9Fr&RmCKpRGE&G2?+xqu z2_Q6x#0GYle-}hp-^@)65QR}qz*mjJf*k-u=NP>f?B?e{o)K0~Ii7+r)+@}I+$c(s zu`L6e4~{B%ZH$Rf`8=Ib5XRoUZq9-W@6`S>8elAbv@SCxLt9&w1Xa#4;Oj%3 z4ABZ3p9~uxCFc9073k1hakzR&7d_doy11E*s)Vem_2(EnQG#@Ou;vqcQ%GJH5py0Y z1k;M!`zc~WU!5U3ZD(`3z9y=$vEPEfY@bYtpr%_3-G&sONY{M5{gUB64X4f|n!aZdl}2qwWTT zuB(f=p%=4gQ`w=X6me2S$ zxUbz&^&T2$4oeTdoJQC9U{jw3)wzxhb3px=(&tGpZKcyvvc`OAbd`(A0qpUWAC~P>W;xjhIwZHF=*M9RdoV#gA@^f*u z3)fNb#fPxjt$R2dnN!;R<}YyB+m(6w^v0?dAd1(#D%ROv^SU*NOsy_lkoPe}&-*x5 zR4SQ?wqZ(p-LYa0nGF1xxikE6ln=mi-~;|8A7r+}04SM&6a;^Q1KP;}@Da@uX~$q0 z2o^v;ht@KOfoq{AK4?kBRGh?oTm3 zD!jw&hJX>^I0rV^O5R^l4#%NQXaF9)m{cldLq5*UY{zIql4R(1v<%P55^LF(ojiOh zo6wl~x#V3mE>CDjqZQ~>&Gf=!$it>=0grhRQ$Kl|7F?5tn$u=p0zSJa1Aab}*O1Td zxA{zuGhlw|>SS;A^hD}@lW6LnLQNaWn{~bUMD3Ex>K8Bh(ve`|-va#mHU3?Xe^=n& zh4^TtDNxXmfAw1h4Sw@3r3%d^cGWS)X%P4Ze>50A0QTd+|}o}J<| zN2Yj<30e4nX5*qfNxC}Z$Gsp5-}q8%WvO@q zc?z0fTLz7Qj`0ot=Kcu}o z7cSxY^H6(n3C-MW=t?eUWnYG9?>yx0Tta*7_vz86mdb*4QCagnhvO0&WDmJtm&;1g z+{dg^$qVSjdg#6Tv;+WITZcNMq9=Y#cP&?+s*wf1zi9OsOK5*l5*9OFCo#Fdz{8Y< zGIg@rIxjRq%2p$^nhD08jr>X8py3veWsR6hdK+OikrXtm*)~}#z^?lxdFchs)VQ!V z#v~3H^%|E~nRQzDJtuCnB+$%8Z|J-f-j(L+xWxVuw21!?;(sdzsQ=~SIuUt1NgX9W zIa}HnxHiI7BCXgigi#WzpJw#UgA(Sb+JaRgEClnxobX@fHG%juo=1G9D$AX};9rZj zI~H-%5c{jVO=Nf?{)|hJ*Nea=z?3Agrd%-dB{{Q^KdD&nPQ}CdJ&=Pegj1{n6WX zgb#;MCfAobR%8{IR`)3$ys`QS*+9E-YBy5e^@vW?LVaPgrQ-!p$?6Ba?~AgR2Rv1X?k}}?tQqe^ z$YX_KF=_w{6-xH0mRv+b6M3f)yi+}r3^t^?Oz{`34PZuE8<=B=%+aH|3ylowaeheZi07`7w1PDD{vnk?1O&e zS6G>UjsceHH{M4w%--Wt^^jM1iz1E{X__%HK@#wN5U?3@2q-A+hj^1l4;l`e{h{)$ zNLR+gI)CU_Eg)cGW}_!Gw%L;z_EeAk0{Q|jsCtc-7&sItD})ykL>gke|H8y9KYb}5 zoYmg1v3555=aAFk<~2P(rFbN zi@GX&~a&V|QV=I9B*mcMk5QRc8&c2MchjTnKzxXsACM7YPd4 zn%rub9;KNH#ABmiAxZaCk4yAG0zvp#4IGY})&$arr&f>ap@k-5>!G}zrx3Q&DveVL zRP4Yi6>*y>|08DUPWEVud+f=4qMK4@K|sHvuRX@$SRPlVz~8^TD54=wQzE>&&rg*0 zU@WwkXuI}!3f?rus*isqEct%WuvSQ9{Tu#b-BTP z8IIesF&h}=DF%*!Q}LqO1zS7F67r@Pi>R@M%F_*#8eC|R{A)6iR7Ed_#%>s>8}m9rfE3tE3#ueP#!*N?NI7ITse_#ZA zc}Hv*9(f?js`{1C)DVt>1IoVd%?M*WwtEWJ!Sn^g6knuy43p@xFcunKqmk2Bnoe@A&2fl-O4xzQw zUS25sD89qu{GGP!)qZ4&!ajKRKi-kE%a=ah{qyL9Ga+58=?S+}(Mk_< z%x5h)|8fQLGU7zPQFsuSAGR|xwBMgtKGbhGegdiDI*?#!zf0B2`|$cRQirl$sw;5I zENn;}fLAad0#3tWPL$&$i?|gkrMNK#f8K?LAj(eS>!tX!0B#9l1vdA^6lU%P4_r|V zprL*(Z?Q3GDX7_LJNAbOCzQ74lbFAEU4mqs;Mt>4E2_m_{qDdSx})~J!=@bzcKG6F ziXEncUS@>{env-_`n%!}BPBZkOE)F3<=+en-v?h$bVxd&iLc;qUG(*$I^1^X&F+O1 zOg-xW`s2eK3%Akj*UbKAJKBnr!>6Bw!sjuV+)F5Bm3bduF_umRtea?wsM_|T<)(M5_z;aX9e6Ofy_MSb*sE@;H=b4=EX%# zhpW6vGVi?#?il9n6N5X_g8MQ21pwD6^Zr%kEn;5bmCYjD6D_#Usk|vN@1Nwj%uZw8 z=T%;kZSR{TfurgUmDeTn&QNeaz&Eit26qed0^i9hZ@SF;xPtpE^IjQ)`-BDe4CG}8 z^q!tAKFcGDj;a$_zAADPNi$MaHJ`=%$EuoTRn`8jY_2=t#}GP>nNFdvu$dEtBNc|u z1xNyAHGcUBe2!eZw*kvK;~hP8+UZDkc>5Lb>)hU`e7ocJKLa8WN}tZ^FHzX%Fvp)! z-eQbwypt+7S(!6s=66}Anf)ay5I4m#3s#8Cek*f^%zT())D6t+k7cg6G9PDU?l~PB z;5q#j)qg1CTudXL7%wHG$Kp-jMnR()pkG2Ggh1IB-n&EzIlm<_@Jc{4rM@0c=Qp z8acb8dv{|+;n%cV(hK-qCkHn1`vYh#@q3lZNGNr*gi8xx1$={A0s0KbORBI{KW zOALwPc^vR;NbPN**pQlOJ$1z--64x~h3_#IzD9Nmz=+9C*8JIPhtPagetWxWuaUhP zg~SOcA4+`&j}57h9vF%$f1fHZ!Wh>FV5TU(*IN1SME-`B zXAiJ7F3X2rD!w%=;h{$wq+cPg`+&XcJ9x<3_Pmu}O9~ZjSBIg@oC%whye>5L4&EW;L*;M# zO7-_l@$6rP2$L__NNT~=p} z=aDvk$ls8fXJu_jJ+|vYaq?k*eAYKBYIKM1y&bzIuaP>g*2i^zdN-$@Q+az`^2%YaH?X zIreaKqasG8H*;R%ed=cRAQTrzK{YAb4t2B%O8Q`=pkW-V+o?~R*?G+K6}s2Tk*jk2 zH*##Fx@cziWRA@;2UOq$e%~H2@!`X}@nH^WqmDR_w#3FYIZABY#rerP+Ho=0I#P5j zW2us(r0C$GW{3_hc!!{nNP>c8FQH^xuL(}IL zCj?%Nvp1YCUu=8BrT?V_AnXlA_&|b)kAa~SyBa@2bzOHP`=UvlCi|h^5y;rV-tf%f z9qbJ^xsctmH~i}r%ii!F9>nK~v@Hx~`B1+tNWplZ0yMPWKh?`LG}}mBdlxdq>GxHxy@h2BRL;a?r z2B|z-+EzThe(1AppSozLq&NmTcr$rraf;OAKLUBg8Yo_z9%+1f9SIzaLqKh_;yUET zp{60?loH9n;9VM@%2e0{GUY*SP4;}WZHHC=Mfo06$C2OEU&^kL=T@BJ3$mUuCLige zW%@{$wo+r4ZY5zbLZV%3Zv4X+kDuGN7ua*MbJ9^`2h zhNfal^*eZ|;kD=mx3VoITOD^aAxSsSM-0Y#J^2pVLL3)4{Wu&KNqm5>tuNW7molqy zzKg>Z5nIQRPy-J`G}o2a;fr`0<4Ie2Jsy$X8|gCC#(HrXoNo2da1^TxOyVK_wyAU@ zycVbhuEx`>kpPPG0}5y^3cuEyKrbcG%OucA3h47lw}AFkK;^N6OaRSoJBBf`4pR~i zI#84%dT6HHB(OtOL_Zv~n|`zm@%=3gwH2R9Mr4q#&*2;cdH=1GaR%F!{T&;{DLs9W zaOs(z3|t4!E8cv;-KmuygWFn=ktgLvzf2zLO)=`*1|#`BD|w?zwoX*x&`Zu1>&vt1 z%NaG8tmPs+U*4FZtxN-_$p~MPGZ}kMrQE zm7n4)Q*BDuK(2sbP(YGVEA}V%E1!PA@s#3&o)* zB=WqX3SM}+jZ$g^wgW48;bMu?MVK4lOn|6E({X-E1^sN@C zNWsBh!~>kn34jq%urqvOG*TQlLNUwUfTHGz^$7iyBwm9ufc!rMY>t>qlOsLWKK>L;VfW@d;x=&JbDYAX{Q@}AwbUY7S188FXhc+SZ zhVjHA1nc2>U}|0P#nFr%Jo=~m(TZZs)Qk%57DKU)ViXS^8b-*~$vb_<8sDz3F~;cJ zqdPq9(j8A<5QzYsSvnLw=0yCNV@Mj|AW-jLmXk892jdrksqkdV0aPJ~L~O zuVjtP;d2bzhgnAK?UR`RcemsnsJ+CKSK+v&9P>uG@lCY1CyD>&C_yc4`1KhL>g4xr zc}v++_~VS^&cTA!?5H?boP(m6$~Hr$$G&O!UkieK8R zu?NA(;0?7JYjC>~5->kDxbxFVh6XoB2Y-u^4jO%z)mrR)??4+rxn3KBS-3Wnv#_;Z zE8`e8WO%ec$@ENZo5d+wj5Vr`)KwV;3EdO=Xpev+4Cd zbA%Hl%Wv(8WFLY$VS1f$o^EQOcDT~(3ypBa`pt)1A7E~scCs&28eQz>1F}j!63Nz@ zh8_Y|^7J&>DR>W+7RO-4!Y6Gz*_p5d|9SxD0r+<|{#}572dB!R=io4KUZ{Lhu4<7~ zl<}87=iRfge9+>yGec=E)TYdeVpC56XPquazSVk8WGsWaDsR=_P5BR?y#VEeGgEhMGbfBRQ|9Ytp9IH?;h-oq8vSOL(_gZ7TB#4+zw3QH{7JH}q`9)lv0`K* zmMP^%xN2=BB;>GsANf7QA95GU81q!EI&@`y?KP;H>y-b-FSzJ&h(2>f6O`Cw;lP&h z{w2UVFCdc-f#06##U-<2(Z3)4;zLBg4NEc`{R-|H?%!bQNo??Is=+H|iC56zh&UD{ zB!QxqAZyGV`bhoXnX_g*h#@lHvg9+4CDiGV(z<~VEo&?Lo1=b3iqY8RF}3T>5e?v! z`B;35Pu2EWaP|0lKf>xUh}{6qtdQA1kl9OF_l8M-xz_V zi&PAGX{1yFO6A-SJaDZfydjzD5)HZNCD!=;X)WzXa3`gMLYNc}l`*e!(HB_--_)wQ%DVE9 z6^jEhGaUmFe~aqA1HQD~IqX@ihn#f~(IW<6fBV;)vg_a}?kw64A4s^H!3^fD+JtEJ zFWSx0%u2-w=M(hMqzP zbf_(KSvoJ?P3YoNC(G%*0A^v*KOU2XOeZF%NK9~NGnW@P(x3y|X*a-Ob4+yHvKSTn zprQB{g&m86c#*mNq4Qn)qr(!@uCO!YcawqM>1cZB{K9TBxaEfyOHWT};#%y;a48^`VABnU z4$^(0W0krYo3Y_+U%{Rl&sBo<18#P(*DFW8Aqk@PkJ?wdpr>Gz4M>EjUc|M4wPMLZ z0x=zkrkWMk+bfnG*msMrSiaMW#I_eMdEKgCu1ETSjE_q)T5+WQz7?O1-{nfQ5QeA$ z+g)1C>FgXcXTHp7EkkBt^>zUEikFuz6c;YL;@JKWz+r#rANa~0pOP ztst5=nNocZ9;~e(BFwEI8vU>pl&iLaWHYc8RFEpSg814to7**)W4i_hNVQ$#1Q8yI zIKXFKlord$vc}zt1n1|9)mVvYD|G^HxRt5=4@IV-h_#dB<`zH**UQ5^(F4-R*_NXg z03A1R&Y)EMiS}?f6rJ{cjzCx}-7Gs^##Y~>8?79M41WE@K8NJA%aO^f7-BDC7GV>R zZRmJahukl@2*G67z3$3O)TW6K36&LU)8rgJW6z$Ulh=!J+~OijM=ufLv;wO+VeG1B|SH z&!-wPxR?!N0Q_B{j7lXnbGPVC@Ko#^HFCZ*Gkd@ z+k?~>t}-lmapK`E~5!2^lQ3KgrG5%FKDiGrv_Ang&C99u=5gKft z=2+A!`Ra?{2Z_Fo|2)qeR3v^2Dw8Rel2k?`cTr?#!^nf*Lk$He5}9~BQ7_~mVr*}g<4bJZOVlc%i1tKX&;+JP zj1UTZy_mjXN2Kiz`XD0sD2+~fFyeMBq*T*!YpHGykLbx;^knQSh?%K+$s5ye1poPh zEkF^&Z;f8?y4wH#!f^x2hTZthO43cY`)bFI#xET6^g5)toAJk=)NH5m)!ib~TI@8w zx_8R7op#zz9~RP&=p`GbA1|Y_rVR8K$ROqg8+oulp%B+gxM7<8B(ZXbwvtXbXx(oR zF--D%q#9FFo9mL^rD*SG2opkE9(n{$Bxv zRJU7s%;#YI_@Dm1pFUf$PL2b0&`kWA3k}%k=3wv2x(xSX>^u1(yo^SeXMQPW_W>hr zA9`8tjG@#YbR&%d+eqO)S|EF|Zn)F6NSNIGB?9w+&)<|>wO-7|1|sfLyDWDaV67MT zy~7$X*^sA;!N%XkOFBly|HIz9z(-k~iT_Dv0wD>^fJDKfM2R&zYD1>hU{L2JGs!zL zgHbM0Ma)*EcxgpQ6ff1_fX?*ov~26TcDvoR_v`N3ZcD-IOae&&g@A&ftp=_7Myf=u zfLNXX_c`aCNy0_J)?R-9^<$X#J@2_b=Q+>qJm)zFjHgv>3ceok=Rr$*XVPcK+!&ZQ zAU^Jg_V-k$zw0>`lk4wC?x#b4I1`;!C7S0^=*^mQjGrjxED=|@h|0+Iws|GHhz?4L;kKgzsk%c%Kx&dY>WtEmrK1|34T z=G;u#zwZ*bZL}Z3b}K$TB>lok`l(Km`Rs6#{#7T*d_L-p0P1Q*d;9tpKVUk|LP=}&!=^gW@Ey^dhg|97PKGBZ_fVJrshiYfT~Vo zJ{*H-+HU_&4o-9afJ?|xMoThvvz1D#ZVfazWv|q}1cF%EL(+FdLUfUd_6@l9T6I;K zx*5dm&U7W}s$%bWJ$K1Q7ojoyoA~wcY zA1q>e@(f+7n{3|4#skdGtz?U%&BWQNxRlHa5aQaQZ!|2+*+WcWkOW=_ z8hWS6?>5e7N0K5 z5e;I5X_dYsMMq+RqR+!JqSMNL{Vp@MEC1%-Ig*o_y^TRl9bS-x_F(QCD{`tiq?_XH7sNP zpzQSDv-DqpqXW%YvmcZ0GRa4+Ov_ z#Qwu9QCMdg4sHI)qk5dyc0Wd!HxoC{7g=UAio%1$+b&A^SM_D%a+vS^!U=0SPu)_WM@>&UbeTrkXnc zW>Q4hNRlWPgu$u|3VvtZm?D+6aQthSjq1jE#VEH z!@ZdAeVuiu$uTT5vB>M}09NH_@ev$({Xi%RBDoPrvYXgB{`Zgq+X4I!o1%)xElvUe zhLHN{>1wuxIpoRP9L;GC(Q4wt!RryXQiYt&>_2eTg~#67)QpiYCMPp^`RZ zNt=K}MK~)k{1T))73=YMR!Atv{3qKCe>Xe)8&q^Oe_M7yhv-K(S>cO=DnEEojoC8T zaNTZQSf1%}b#osT{I?ta+s&-ySw=aen1P?8`R^8cApiX>b`OXDvOeIyf(y{C%MXL^ zmcn<}wv14GH&@JLNdxBQf&8{hR49S{A9ekSn~QWC*&!X#FO7PZ{;MD)G_hRbayr1c zZG|g)KMGb7QSeHJ7s=V_LJ}Uq#Da zYlaYQH8M}{ED&DXF1+?d#mKN$i=GOs0wO$^LO*6Z^kdEu6Ax$oXZ2IzTe8Vq&Is)_ zEA^0WU=Ftjts5$=o5v;Vq2e72r!uR_)6TQDK*RH28AQW}iXjtl7crx~cTkTQf^!sn zFBE*AtthxZmAJJcajj5qsP$(Q`Q|u<`%S1g_|ryFh;xp7SA+QT9QwVdcI)BLZ)ew8 zQJCB{#0q9d%=Zt4B>Tbd;(iW!_iq&Ru=ywlM{dU4m$}%>-Hs~g7cn2x7X5*Jk(A)Q}(>4OdRO*4uJS?iDmB z!7^`Twu;${>zu%%OF{c*Tb^)GMTwZ;jp*z$e7Ma=Ac`{HEUWmz3N=D8Z7Jb!mL^FT z2s^2IRA|q<<#-#}aZGe2_?zF6Z*?u{ko0tKfxk=0(GJg(?S6t)4uujuCBz!P52AGX zA&zsj48y@{dDLpdhj-YS4+*slDvOb;95k}`{aT~)CFobTur(nL6CLi_R<;`1WURUI zBtuZf zQt^gK@;EBqaJKv&6>q4O-_h}g$?{tkZ#YMOkB&E-E5FCY8_u)uq!G3IVRY8drYXq5 zM*CarXBpNAQ5+N|qhiEI$R#87`8uR&eL=c+One%#ET<9VG(OF(J{Iz^cZ`HQtsfGf zM)b>RMe?yoeH_;Ru~^|yd|HWN%__Cl#b=dDY}9GPB?zB4K5c~DO)|@qW28qWE+1;y z95P+Zj3O_gjU?b52?M`5)c=Hm$ZrJrGxnV&x)^!ZN1o%q=kyE=`c_ka7~ zeVs<>jWenb70S_x|M0&G9gtGCvlj5VekQ9X@3)=@(ZgTsQrV+c;&G#mqX?B&c=VLy z=u~a@q5{lyR%c?C*G${Txzg6O*@^nmA~xI>Nn(X$-(t~m=O^9bsU28!RM>^pYKy(& z#p1mD+h_NRKKxKXP5c(qx1FzeT-fb=)hMQf(GB(`7;3T@;@WBY-u0)#i6P-cJz{LV zm%lOmmGf80Ulo5K=JRHH=MbSKpg(I0?P!BNN(?^f7l)Xt61nhr6c=HSN!&hLh&KHS z)3QQ41#Tf8)FcYtUzUpYql1F!D?^39Mkm>kZNlIKV2)C=BTtwT|PjVNR;p!q>agcIx`bS1?$7q+lTy0X)<=Q~XP*tES zop$juEI1)8mHOKW&?`}mxuIxEamYoYm%B~q$0enFA+dyTt5VXxmUkna8cN#m(1b2k zdSkF;TQD)Yg0vAK*E(s?wVtx{5h^;x6SBHh*-g9~>2wKcBPl3_=2VR4Z4^aR)}zQ* zvMurNYF{Zdfe_78%7WZM;#qM`dC2vowB~x+v*MP~A!}R7UL(D3I600E`L|1lCp=TK zHzag>$}vILv$W5>Dts72>`%$tE+Zam_~~DfF=0K;+*aWw=~%&1wfnyQi;?}7-6>gG_5Bb~FNZVx<6hNSd*8N>vN@WRtc(vZZSp7KelpZWBx_*^BgClmOV zKAy(CCBUO9IDt!MR^0Mw;3J)NZ6PZ#BI7AQM=FsPdt_QmNjz0m)?=jG1P(r+C8hk^ z$ifW*B%Q9H1ro1U(2`-F5fW$tS(1W&rgX}uLaxVEYh98_P31(1xhmsZr-nC%T-C+| z0jWw7xK8oA$O1sy8SYvc?wKLK!n_G-?vw+#Bz-36S|g3Q+SE03Q_i9UPe4&R%)LSk zeqoKqhJ~0#FAC6VXhL^MAGg$yV_(R{U2v3tvZRkuO8?&tT7m$Kl1vkb^gZRhpx_Ev z^c)w~>2Y&uX8fBs-+762*m}nBZv$0I_-af5ho)pmP#qy4b-Uqu&b3{JyMB1d`U&mE z1h#zISy*3D>n-S7%e@h-EJhz97_OBvCbXBN3#D?G-YN~cSUhcop$UvJZ7fO2r;uw+ z$R&*qqh@KOWUVnFP2DA3OVX2{AQv3^NfYI6xh>EpoqS0A$e z9ANjWyaVv-E^jlE52{{DJB&~|mu*U6Pqr;V3D-7Iku@O&IQ%C!q0nExc!SArsNU^O zcb0G~RBjl-JZEM(u!8Volbj#`Oqeuzc@C{LW^)0p7o9}JVH4Wx7pebovR?Z(r~R4npaNPW|n`} zBY~7k6hP0i<$L7@KiIKotn3^Mi{{b_rGtpZ+Vtlf-0c?`{_p7@7y|12xk$bC#XnXe z9&Ul>kkw<lsznr3kE*4cO46c=8WU1dM>>?Wo?TF0K^9n+{V(g+$eJ6jjka zmCAa{7z$i74pCBSn^RGWK<-Z$zP{lRWJqbPOezsw>ypu;(yl8e?dXsTMNI3l#|X@j z>_m=nv{_>UvQElCt4@CNe>}Intt7v-lyg+loYHk{$c1X=6%}u_S$J$K4Io z>5?=xjN{Nw=>&qQ)+%MDj#neG(`kXucth!2sH|i_)FtTzWZ0wXt9~4Gby5`F5uF-^ z)<|~=C{EPilsk!)HYyL7R3K;P|4aRQz~gh3NZQ-(YrUH1g&fsnlF()a(mcta_TUqv z#9%5AB~~D_Rv`094P>QTpR6FGWJgi{6=02I{1=yIG9o?-a8D87mWZY*sB)?XD+#># z)C~1#z-oxP&>b&14QTTDbf?vJ0l*m=j;hs9IrBlM+i12D{Xj{Ws}(FKss{Vg3L~l& z+`x!F>hP=fl&QS&7J*wutg7xTn0z%|njiK+zDEbhZW%&Cv?68HD^r8Eb@-ACw-?-tv_ox7k zSF~8s`FSlWv4NQk{e1@&ZJskSbgmszBDKQ7!mrld{6i70mH3@z*oe%s=+cEJ6#XhJ zQftkMJ!MKANGR5xFKV#f(Q%RspUN_0Uwu!%Nx z|F#Z2OR$3hKz6ixwjM><>7jHjhz6?ql`hQoOFG2-ad%>h^N#;^_wX%$q(i}EqOkYH zp8z81JX0M?F5mmTU4L@9E2QRBx_yM<+U9Q;=%-wrM)IN8Mx%M|4JN;}z2N%Kr#F^b z?XGvZu2+*Y7D$)qS7`>zmFDRQ?HJ!H{hf5kQSpa4u;%s|K6mnuT9RU3&_EUo19!cI z05#)XlKOJw)MQ9{PPJW(Qgl7Tk7;4bqcHeL}4WgmSD7ljrs>`ZSaY4D6WPvXCsFs#qkBh49D&syt|;%! zf@^IF9aV5Dyz}qhm}<;X|9BK2^_M4h%Gu zR$xdM{_~S}?c^&oCcPG4Yi$9ctzf=4NHC@`Rt=S7>OeqwMv@baVgbR}f%G&^OeA2N zhL1v2@PA$Z8$h7nUh|`Sm5zkH zWd@9X^`w6(O#qa-w3C* zU-_48{~ws@^gmb;(8i|E9HjGK|J}hmKV7u+Z09e2p3awx-X}&XyXOI?^AWa8u{0(B zi}%>-#=|!=Df@uqVsvJ<$IoC0vqo8U<2VyMG`6>(Wzx<<`5D>~Jl5TsY2)Baa;n={ zsl4T&TD~?s8kVj>wN6gYCSw_E6=ylCu2jO0aEqdLFW|Vn-s@F?mkpj3nCr6*bRynR5_7rMNjQ=<`!qtBF8-Q&3%5ECAFZ_lY zGpp*@aBfvSAYDrQT!-EyBo1Ls`$!5W=i_ksunNK{p-#It!Kp|x0$@ONVFOB&$@l0QOm=-qQ=OBQgr%cFP)e7<+Hq0@{%!H zKl!}Tdh%mN>xh8S>M55ZeHcb6_&d#BCEhkH2|UL)*s-6BAybe-CCS35w3A<#W4{~i zul48LXn*#=oaOcv^$!JB@a z5)DK6z;(fL`(>sV61A+u!Th|qB3Taqo^%+;dlu$-D-=VbP$h|JJ@DG7*ZhNt7B7q=X+zYBjyYk?6+$ zO$UcFeBx_r{@A8daY(ikEQ0$XKF7`nz1`&3qdu8Yk5Ro%H-AEo2g)%C&b}(Avh0~x znPzK!rtIfI`Z@U1VRc!$hWi%hOP#K@epPi%?k}z zE#qY?6PMc#`;33idYli+Q`^4i1k<-IEL)&Y+NaAB72phRRdq{2jFU#!aUEDb9X1I{ zL0>rZ&3+Q+)Vu7lj}~)AQnx1u+aYl)1y^-#oC&AsfUz9joF7RpaWpGt(jT7)a1!}~ z2=cl{y%xZ2)a#?Xa`fRKGa5T5!MD5?7eU$*!>3&BT&9-G89V3d+;{4|O6py<*7StZ z66H8iI71Sw!kO~p3AKqhl_+e`i6%en+eykfJSv`$tN0Lu93=mIMWGVazg{J+C~@E@ zkf#N?Qr0qJ%*IUj&XaItYZ=bcQ~0Zph7a7+MJf3&Q?}I*?AAxb@pO~;$X)go56j*I zGnsQIKSZAfCTn{1Ei2ozX4;Tjx3i>YU|xA182j#U-eo@P4p{F#-Cl0J+c*7CxTLeB z?P_t%SHoc0sFOg4bewhQ|Ce?DAxyn*ugdOCN&ocshX#BvLhhF@`oAL`&;I#!{g)1? ze=7?sTl?dWEBWX@IN*URAkOwPap;}R6xydaC9J|X&jT0yt0fKs?ghV6yf$j>kT5JO z$tk;Mh)(zO$lkGd2jYLQ-K<^L9En=*6IIl^a8j6coPN!1Ub_Z?a&OdHtx2Pi*%G#f zniGeFtp?5ny=zXa=jcE?VR}3Gdo90Zi{bHd&Gg72J1@bn)4OnnY3&+NkvJYoWk^C0 zob^qV+^@kJF_@#|URmh7LbWvS(X+d4Qw8(_!RYF1Q;-d>B4#v%V zH1mz>$dG*Uj>(Ug4v{QXWHI71hU8103nWj01 z84Bd1i<`XNxX*e$cU~sZXFR;SI9U}-73_4GnUu`MjidW#YM0luY_w#omO_h83;Uj< zogoi;6~MX&`G*pJswAFoa)L&M>*y0H?tU3Qek>qP1m}6=xHbRDdLeKp2evMgBU^tb z!d(BdIqWC3zEWV<^qDNMnc7?a@w*&yc3s5+iAEzHwo$8BoOc$hlh{OS-h$t}cj0W) z+S!ls+vY8g__jh&BR;gL4G*$xS$|yE;?EB!2+N%0;Hv~d*{Q<5z%Vx&nWrLfPPL#q z^`d%2nB)Q+l|4&G(l2r9WxMsZiY67`K1z%;im51&#-q{zZAE+=BEIJ$zTFtqACqMe z@x7nJ-}XhEn_&5uWh3ho^($!AG&fh2>H zLkmbgMv{+}WS1m^h(mKYxbWLMCm(=+VA;tL-_x8FsOiVDRyro`8}8x(2)640P`vBC zaa2D*c7nS_a-I-Mj#D;ZfaVk^H!9D_kcg7y#$|uQ@J9-NVnUs?;Fk?l=}3QfE_E>J zYHldm);cTz`b6YBfAT^vM=)e^t00S+dQ{9=UeAhYBh4l6=5ag1qA|jXQNpU*6dJ|r zz18b`R{=qG2B(cOg|y2_5_z3<)b7pv%pGmkZsWJUjH2;b-i4P^zGn9(qdNT{8~l0k z`cb;hDxQr2n=gXL?`lEHSx2paa{Zv#{Kc;H#*qwg) z-ulM-Qa1-f`|I`&thXlg^ z+vi>Qa>S|!OdKOfPV;IIAyjal=Mh1LDo3KcPF(TzwL2dzUd>?>3MZqQW+4@d7jyV6 z!07F7-RVqo;gvNxZd~J80cVA3+(4KoJ7V3;9W5^e;+PX)z}zYrXekynh@!`5w)%Gm zJS#G>SB9?iP@%6g5U+)6RahHhdp(OzAc6o}uj4sCO{By?oLj9f$~Q~8%=8Wj%C7vD zUThK`5<2QUu$Cv9i&wH_GQGnDFJtd{7eck(Hq)=e;XB~)_JH_1v@ZO)Qt{`l%3_x3 zY7LGl%5QO_JiMjO=Ou~a37@XSss>{Y!PGm=iFMvEs)}OZoUjNLkurvXgk!6{;n*5z z+3Wc&-{GR0=DNXcNYVtTBP^Klz)IaGWIC#YrIl0S?o+CQW4+b}hOqEuX-rC5o2V7W zQ$YxXMI%=#rj?vr;!9gy{?uDP-LG=GR4IKkd8m>uc~&4L#1ZF(dDRH>DpH!uzboHb z=tqCJuDO?em^6N**mC6g2geJXFUWOnYZkeNekO-pv$M!`PlZ@hKrqgJR)S!HXW&;v zE@X)$!(Kr+&JQ8HD3lusywEN)-6HCcVX8NWdB&rHdO_bFaL?Lc#NPKTsx;7%T~7|c zmm|Wzr>W26Hk9-(x16mxOQM6*$4(X5YmNk0M8JGp)ZFwd?uhG^h-;VW+tvI}s(`5G zPuqVQMipR8R8HIww1j(E6jH3uJT1wmBB>6NUj&~{6nq+Of={Pb1&{SIgxW0w@hS5( zgYzyLwMuZwu--R(8%(yo`;o~M6Mzz0B@m*6O^sP>s>)*1Y{8}nWgCD!tX$ByxtIMd zrJ;k5^j93qG#&(B%dxLRT5a|RLX;3EPS#%PC4HU6jN;XBWf`jN)SmIqBf?ic1 z&zQ*&@@!WT48~>V6TU=oI%+C6C)JhTSgc~3_U>~io9E8E_!P0;3xi|fYdeLy4Z;VG zlVbGus!0UdO*9#iI25gVN}h7W@2Nq=Z>SJIbsl-BCVfPERwTtwINlhdT2@aH^80T= zkh21O)DbXQG#Gw0eFGgQ!P|ta5pMp8g}XFa!x92n+phz%*kbPy*6&x0DH+Ph^$>2Q zxKx_1v{~DC6Y~Lmi`1q(vE}432_z=T!y=-k+^!(8MuPqstIBy1K)f}@bA9mB1ba97 zVr_x94A1qY=jyP1*9YB|yx&p!nV|J1@%&0_oN#`nRc!K;Am0ZkCk?OR#15>{8FEFU zwS5b}p@z7qT-wc^*VW?}@*a0j)FAi+c+$W6GKOzsZuJeE4gvRvk@9n7x4`;4CFMs> z{0~y%ApGErTe6FJ&!=*W8Gdj|*m@^oW%)s$@B`8K)w0(7AP^Vxo8|>;0xg_%6!BwC zrdt-bVhCLA1yxuh%iDNZ7J7&%ZE=@@$`SjM;s;M1zz>4)vj@l{2U*`6v+~GJS+&WA z!&u*G$>|sqAoJ&$$vS%agi`AxI;Jf0Hgsx(;vO%#P1oBI*W28?r>dJTA&*j?%Y|Zpum*(uhTynzQ+fz zQw-w%&G$TB7|ir> zqg3bh#*N|nsVHuYAOgBQ_lKOoz;+~U9yT~0&yMGtEowYOK;R-uST_VDIWDB^6O4yD zQ*^~banzpjTKn}MXmj%iH%P2ga5~)C&RHsq0P7;Y?SuHcSjRHaWPtFuX`VNkt~M@u zVY?FY(H&(Q1r<8Xfqt{?L);go2{1Ml`sH(*H|@;vm}=X}wVU z(BIvx$+Y8?9pQFTai7ODD>gORF%_XptUFMeAcor%Nd%J;3$5&}KEUg|grz89L+)Apf|>=@!<+*b z{P#X;VS?vtYv5oA9X>7{ET@9+e@gX2?@_$9!hPx@1zfSrH7O?d{fbsHi8Kq8=4130 zQ@HAu=t8$)Q1fw}^uuZ-1LYHCfx$j@ya=)ACQoQD38|R%yq;y!7??rqsu^+%Co@TlS4%;XDn)4(40)oX_zRmiLJYi%uVGvz( z%7Y>`SnGXHnyx3f%`8I%GIyytG2g_ECE?~OB*zA7XS)zaniivh|JktE`~O=i2fi~Z z7H5a6xc9k?4&$eCQjx|S`w@y-yXbrqvx9U`RCD!8?{E!{PYO6r031hW!6C4~0H&c4 zAAO1dgxJ42YPi_WvjBMon1s`Ra07|(wX0Dr*hvvg0t*&rMEV5~_vuqzz^gPBan+xHrFLhuZp30O?Qw z`9prox1~L>ZZJTaCk_C{mi~Ck4m?IrbVli($OsigUNW=?Pm@sM0ov+E#oU9f){j3e zFjF?dE;g+{=zB*`xL#9PtMJtdM;H#VI9eLH2?%~MvneDOL+?YOjqSa|bN6DFv&TCm z3cp0z!VhR!Q<7B8Odc|9&4>qz@ULr(D z@pY>w-?rTN00qV+oo$(m7Bi31L?0oHSFrsyZDnj=RsMiraP=R;Qj9s|$(3*Oq?A zMd)ku3PRzAx2%Y*Q z59>DDuP1_ps!4*(Wy=@0kyVOIa3t~+syx!uV!B0>LnK|*vQ3HwiD5LL zm$TSo)!ig`29;+EszUMlB31AiDd-f6&l)DJJ*!%6lWhHkXsuWkltKP>Kp}z0tP=So zWq&uQB?^`13OzTtkfg_F5ou$_anCzrXD)-s^{6&Czfjyp=@IdILMTP|ip4A*W68!= zHyW3-arluL=f_WK{wggf*01&+C6Znx%h;ZFjYHC$)g*lX`&qtE6g4hcvW|z*e^SwyUA>1?Ua^RN5$jOhukn%E}u~$4T&pYKJoaGRyU0som-L|PT znp|8OL011UsYd$uMXcMv@L=+b1fc1W=Mj?VJbRpH+2i)y`7$L|^5-?I_vFHN1mh>U zsTM&IV?wv-Y3L5R*mrorN~-}8k11Q+C>rw+Xb!3`l=_l(@= zqy}E7@_+|wV7Pk1pEWQd6mRl`mi@lvbewvu4g&jS@r|fQxYk~jai!x0;-VT$Wm($j7R)*|CPxFS*0M-$h+-hh49!0maTji$RobC9CmBDgS1nuXf%4jRZN!BJ#1^ zAx)bdz~C;$NCb@q#zuy54;l>0wH^z)buj)eix8#KwrHh=8VzUFTStL8C+Z@N?aE?p>g_} z4{n#HI zVN$}nQN{9PdwqlQ@iKHxV&E2mo!@}`W6G|HdMcOF_!NlNmW<%Vdi6Jo(JD7&8!?ps zk5>Mra+QfPkz|7x>ZKaA&!h}iY!c|Zh}vu{H;Q2MKVq2AnmOluJd6hYCub%QC1?Sl zvB!NbI|(lxlU0IxB34V2@&o+B{HW+a;(45deOPwdM4ML-gX_m$2KIe9*muC?36zL{ z0B}2%cwj$@V|m!c|IbIosc&Yt@?YBG@rDrWF9xQBIE|*zs8aT*uM1cu6O$B8;rS=C z72Oz4&hkWR-?(X*q?)yx76q`hs}yvVCl^%%XAe6`qPaZ1sDk1f&Dv)qH}%x6TQn+M zyX~gaFkmk{xt||I3R6aPDQkT6(0D0_7e=GlV{OE*@x`6xvf(vCjS;0KlyWTVLs4Ez zWbbQ;ax_ZL>ND98_T2SH!N}M?cHmwWj7!#MRMCj5T{g-=hBF`Ivi6$@FB|QS)TTYL zb}5jYhVgNu^Wg%nU*^M4`4D^Iyoj|S;#()##Xs7IAjb_%l=Wc>(DIWQ=?j5PX#r1> z;oW#!5v)!Uh2r_12Qkq7%BLz+IfS^$radHTw%G3=QR)C*scbvMRySp*=+7on0Y#1kSW2e-`eh1O>J~pt zus~yb)ap^t@TffiEwjww#ILf3J5X`%&J%)UDq19zXMxz{M4W>#DN1De-j_n?00FUU{ zsou>FDq(jPR@pLIS*!&hYNp$Je=Zq5fO|SQbKJA^T#yT=E@5Mz-%Of`l9Q=bp5qD|N7N5ck|;Iowkir!deg_q;(&`kH&t|(MVoN_H51X5YE$9O+;sdn%R)8Awj3)vKseHDRN{lZ z{M%G&b@tvS*_=sHI<>C@jk@_0DmTE)6}X%N5f}gO2`9&$CA-dIq?_5DnYmI}tixVK z6%r2nz?TK|_)BOGOC~f6gz6B?&|P7~;fL@-cLgbFqdHiTABPQlR$P!Trv>pAkuIP@F>lrJOS<~%t`4n^N89DA95qCu zuH%QHAq+96+u z@)dc$j^AK~*uro-tPXX>qn+|q&Oajg*YQg_HLsPLhsC2}fxBQBU(pfj_$86A>*Q;3 zJi1oC;tpMpHc`hfiK^z3>d^Xlbe()H;VW`^9lyZ}v5XORp*r+#5^6STRC<^;Cy8#-khLtB0>l zB_5rk=t&ljrjxF|cod1KW6=aHMZ7U@`9S`BeqVL*lz61tD;ygCNjS6%=By~2=Fr0z zs5Q1YOa3qaf6n}tqqjN!otc$g-Cd|Vb>N_f#@xYMylzhF2$;0**Sha=Zk8> z{(}5k?K0;0^$Rlc)6oHxPLF^FFagAQBxG>;5^5}}7? zWkED4o;`p=AMu?Z16hOc1Lux}tur*D#BQ#kSuMTvHjmJksmq?(T$T%$msRzubUCjgeNq@M5+*0LSn`AvCxM|CTjz>JIuFL z?y;E;w6K;P?C=2R_1HM=uO81q{jtk-w_GzI@n%Wn^!`;%fOgQ#RU-L0=;;7il zkowl!?s3Sbuo54eV1iII`AKU}#P_xUeSrUy(4ON{Ra`E0DJOo|2X4J zUPy=uz%>MNt|cqTqYzi}ZrUC)TMMDM|ESJE&dw`nbD1*%G~4WsM7sa9Or zwboqOgFYiWuxehuh+#NfyVi5(RXoTsII-zjKU?6;$ZWAtCZ>wJSAdUV%TsJQIO%&b zY0XojoYXxA|IsGfeH_NXR4}1F^u7;M_jvOk@lwJm=ouM{t7=b(B(5->j5tz>P#}Cj zSvou`ZY@o}Lc9T4A&tTSg4Sy)LCC#&Fk&xxg0gg)ua&8i+smujybfnJ!0oZ}u8H3> zMjB$`BFA~F*J)e7fzdx(ux0(uVIh1`m(|nDNK$nxD8>seUSgnj?^uS3)P-~RAA*VR z>tQGBn!@P73s1n??l^Kg<#3|0SCM}}*6@<|^RStE?v&dIWmQ(1D}VM={a<*`%NT}B z%&Xh-{)k$se9&D8@4r%3XBm&NN(xI~ltJ|g`%={#eC~{gQ&gx9cMQN!Fq+J$n(H%L zGM$0=tsV(=FeYACszM&b>xRp3QM`^5gn0e?xddXUDd!5=PB8s-+yl{2q&*DSO8=!9 z;^DJwk&^4v&i2v`$4{xLzTm^9etjq-z7x>%IU8CKVv{Au@u}X5j2#K zoH$G1A`r$u0LO^zNYyBmz4tHM|ATfH47ogl>lq581{9v_nNCXq>)@ao0AIt}0`B1F zxCYIsI{p=fThN4~ywzz8&}WC`7zd^!Bz2()U~NJzAEExTn1oD7ENkWe&N;v=b;!Q| zC1}Dwaveg?WM^+au(F${W$BqvFLYzL2`5_L5b6~eM7>a&Wv5SgOG%c76&ygr6ixB7 z&JG}9HIp7v6f7VVjHnP$uqhxfS5B$)UO7>GZ~|tszmT}q)cG|1;viGqaG_YUgPs-F zmKy1o*e9~ZDCm%|x1A&*V$P!hD-(ycDsI~ZK|c+-I>r_4{8rxqGGW8&oOs%=O}(@HB-T3?e9slzb^mN}72P zk+f-m03^a>W6*j?gri_~O^Ni9m4<@-($Mas21-Mts10IbJSO5$w&;h;Ll5gs?SUc@ zrx@x+gsfeM5{W*)T;!pNTJ}LC()-_W{FgiM6f!dW-!BI_xYqKxBM!~%7l%UDMzwfE z9D0UcD=r_h{&avibYcj>nE=Qe2gpM|p}>H=IeF*_SvW9C^n-!&5S!%bUPPj_7KvnW z_6rKj1>+sj$B`E>uc?*BsmH?+ctVJ*98C%#@vKo2PyfjzB%TM<$Rf$Rr15^*Wxs@o ztc4-ZvYQ9UL0K1BB?zH=X{y8W_bmNihNp#}uV)8(XyKPc6qByE8}wXLh#JNEk&turd7mC0$_K|{nC+oJ&g7L|9X}|^3jY?mcV_ud<5HjK@qj0EK$p_z6a}g zM!f0fxLjlhbJT*APRBZN)GrsVvrEse!)T0Bg6-Y1gUH%?-p6e&qX5;xU^d6ZnB zJ~vbAr!kR|bnXSeOvx+>{dp?~=BRRVaOe?LtxMQ8?Ri#oJL!l^q|i)>O5whF>cc6o zLp$@)vNJBHaEY9n8Y9^TCY0}=P`Q5s!&F7gl1(U2HS#7P3YTo9N7#bcYP`6~rxO&QJm|-&7nBhLk&}Z35XatW!$jZ@1i2$N!8UKvXCH;?=_CL<)f4r>!ac=+P z<^7Kr5=4ZGE>e+2)Z_I2#~J;PGy5NB^*>(hJVp|s*%-SU*`;E3RD4A_RLf)qn5Xi~ zd+#Nx!$B7FM@Z^l`VMHl=Qs;qJTZt*>ATL8w@Sckth^Xxv%@Cefjj3imiDn=2`a7sdsz*KntJ3z3CmR}wERq6OUVD4Y|kVl zTm=E`t_HC<;`b9F>1{|K2eigem)0?X5Fo;Zrl-K81)j?nD3##g1;`Oeo zx;lQ`RdwJ;ePLByh@T-LsV!kU4)jhFOEOsNih92psDmtZ~D(RPgDyM7uX$-y7PhL8xpBT+F z`xP+&tdKt68WD}BTtpSbA^@G$I5`>jP%O#Siyc*A?}jUyCHJ6;o3=za~ci zh!vBimr+)y4>oE;St=zI*x$EF$l(Xv&+gExrkZ|M@FrWx&?9TRJ)u#8Mq_Bm0~mpD zEqr1_#8c1eRn!!lfhMFsnP2?Dgmgdtla-H@e;aPjo@jCbJ11{MlBa)eo+mHtV*?gH zeRjdO>+_x9_ACNszmFuKBfpq_ycpYJFL+GXX5tvIX&l)CaS3iI3R`R0F2dO1mal2s z9Zv6<94<*mtvOrrBL3}B|G3JqKUi5bP`_4AE2Gaf@rbA9u*~?naQel`s)}9?ozlpT zzDUx&MOL4x-g@>w2P%A{*ROo#xEU81?6%Kg-hV4ySO_Z>DwDG;W#_@z)#JW-y%8? zpIX2HEI!8xF)t5%EL0Cg@u@?k4k=%vG88$5hpEExsl`^8N-vdP$_`1CD6_Q_+l$ccwjPtz}{r z>aBIKVk0zy3-u;Ptrxolq-?y#CGHZ>hr>TwxfeY61b&#M^}hSK;Bow zn_i2(kZZ86e-($$DeUPkMDbq;ZFrye^I`X=Rha&F zqW;%K94JzS{Vzuo*HlFlpJT;w#&P5nZ`6{%--WG<#z4QqiCdaPhoo5Ik_FMkEsYS$ zd7eevi=@Ra({Br6C9atrPF#Y^{ZkQtw=zu53wv${8jXuRBbT=Vqo_X}^}iAI_fqy5 zRhF-<%lQ(qQjx?1_sdh_#}Dvh`q>+NKz3wIKWBs_
@(8oVg2g;5jI!@^wd6TqC!m~WdHW%V}O~8idC4%4Zacq1j z)j@^)u+VR3ut+9OTL8F=h>yHjA|jjCw8i3cKmGD>m8ss!{BAh1Mi-U9li?*sV@x>;Q*6AO9 z<>KnUx&c7PbnHYiZ0~&Oux9Je&m?hNjOi=O>5P5Sr<~counL{xb8|iPZ#z~8$bWdY zvFdbexc1rATu7sq5>8PU$_5$==m&_1ioZF|>}$?&>X)N4=oF|E9`E@~Y1r%WPQi#_ zl=EK2dll~i-UGZh^4`dM6Yp3%rYzuhfyevhR=VsNnNUC8J7u|hMlMl5-Y?&;zsU~) zPnzA4gyChkO&-FCA-BxVYre{~&PPj?O(wK#H=6AYmwEE+TPD%R1iBva>U`W;F^5Fl z49ho=FWGo=()4iYu3?Y3IUD+4H1Mj++ap#TB1V^KO`px#dkg?>`?9%sDZ-)xda6~n zKYzmZt3lSQ@ROW-X4B~okPABMDUhj+*QjkdM(6Yjy$+|-VcHP#;*t9@BOD{@%QSUL*s9c zJ_~bX`1^ot;|Tu#;sE@GoPQYpa{f`_?^8#JzmF@#R`|QYz6?X%q44+gOO70Wzar-N z?D?aQfWO~nLr8(-Kh#oD{P*Das}M@ztYB&yS!){%S|OoET?Z2#RMl82Ygm>)CWtJ8 zW{8umksQ39C`-U{5PAUix+`RrDD<5y=qp+r=v(-AhrZ5z7CTQ?NE<@h5d+-G{pQ&H z^gDc`tAMoqpe~>c)^Ccz`T?N~*xjr*Y~O6TEnOxg+*w~$C=-(`duo=4KsV+u?d>q& zaH3u@sFPq&5Ai`5ln|g~<1JYR^#y`m0kLBhrUxsUIH*-av7&Ht8sd0RB0_cWULH;y zA5Ppz6zbc@WF$n(+?r^z-c0QrDj9b_`yl1>T3@`|z6WcUQ8o8sl1<5GsxM*d_SxiR zD{%L-lIx4)s=D0ce4Bn}N8pzKSfI1V_j@S7LiK$q8BLRAn}( zrwFB1mwj$PE*orC=PHgdR(@3@)g4rUHg8{qr@jci3L4i5G;kXekccPhk%2_VlbU5_ zk5X@{P-8%Y__t>qavtJfZ2%k5cCk9kk;XSTT|B~bx9s#`v2;@~ zIi=A)dZt8EOudMp7EQ%3d%z^hZ6fpwFeMRM1^1tq2t5)HJ!ac8vf_E@G1JFxmpaeY z(^{18sSG_Z&vQqpN0BZ~v(k1=MJkS$#L*rvN3B9Kiep7T7{EBcnt3lI9GfR{FT zsaD@y@lZF>dF18xbUd^vo6SuyqiXWq-WCsS&L(m`E0^=hY$E5gayg&MCUPt*mvf6} zr1VK;LMe`iwo+|ZbvpLSdGXNG*7LC!v9RsJ{v1tVU*W`b@-7j<>|XxSQTHCq$fMPz zkp9&5!Bg8+?4_;~XPnc$`PHI(g=XaT0Hb{(5Y@__Ky38_4kP?s1QXIb71oIgi-JjW zyCSe1EM~pd_M@-t5`>kl%-W}xjhs76Z|-@hNB|KJcuswW4TR}(Laa?9NUb+EV+Pnr zBn%0XLh5wRm}S3UwB<`1Uxrf%$5IIhC51N2mtwAbkfiCHXv>zcRS9l71H7pujLGAR%P-YeABx3sN|}&9yL83Je)gK>8!^(^=yi4^p5|3b+RpaK<1>(>aBB zKnpG@AZHe{U6QClD zmLbSY#)P)ljJ=YITF(fx_MynOnZ9QR`2Q1U07WXTBZIpnT*3?&{4L;w3AjF>Vi34e zL=E8S`aq9l!9AGh0yA9QI+noofj(VO#T;-!up}?v`y^BY@e3!TOVFWkZP%iTh!1th zJ(92p5np=Va;K9A_|J6SVDf1x>0>&@9}dHZ+;Tw(IoKE>nPc0ZeJ z+#!;{m4C`)V9V0aDw;p!Wg=2ve;Cs5=^Eh{*FBXJ{;On4469cQOJb5x45C%$#aeQ| z{3xrDUuplQ-!QomhS@?W;=9uO{7Xdh;!~rx)$pxS38Jkeiz5?)D4Ao*IKy)#F7Kmt ztr)59nO3YXm)ps;F2wf3Xk;gv2Dnc+Mx4x%}96FVOk5AM9mR)Nbwr1mXhA7Zvf*S@X76w7X7#ClPkl9Rj6xMU*g z!?pjd0r)S~YVpqn6`EuwZ}0|EyO0n&0=u6Nw7zn;eg3{oCQx-d`!f=!6rbA1)rmTF zK2AuAl0E`@SeMDLB8isDT)zgw<}dN=Pwh_Uw;a_UpK()fMv|I$AAG?aB);71pHTB6 zA=U(ch(DG+%Bch#?kC!Du=sK;RPGAGD$hZU{o~6iQ;OO>|Fs|}W_k>+dj4QfzS;RWczD_JpuB-31~LyS)dWjWQbdj%feIC z;sb1`AB5);FJzVutTJzGc0ixnm>UqQ>EVj|>ASM|-J_f`p&r~_Gt{%J3_eNZr9KlM zpA6Al3+0{lj@X~^wp2%m>dNprQMFcX1wd<57V{cq)l1&AS5g8P2E&OVcKxTJhaA;Z zUTFd{un>LiroHwpXs}$W;aR3gumHzcsg$o|*~un^iSx^V|YyUo0xwCaIsvJ)Ol9+mj}@aF~QcH{iH?&D!lZaUtPb;biIYVtP!LZTsUf zd3F!MD4=ZYc>;A6V_Ph4fc`>Joy2r9SAwU=Jq8=>R<`1pqOJTr{XtOw=-<@&Xtq~o zGbQ$~j>*p0m!8PY7!H+s#$c*h?|fXZly9M-rcI2sVKr?8_F~%hP?t$qbfG?S(=9XD zs4lb7+=_WFUrbY6i(ih z!CK7qhaHMQWcPE_{V!U-RA?aBUdhplsyP*(;;J=KIBq;aV2#IQRj}d={pjWKbp1Gn z$I}FJs$`pn!=2m17QZ*e?UINflBTWJX^o%g*S}*5_uF0sKluG$Ig!6Yr5*%$8Q9C_xm- zp&U2gt5xDm*tgd_2V)nr`ftp#Rp<_}M39l@%gwt5R)NgX)Fh4{7Ex`3z+BG0S(|t~ zjU?W@Jf5x}i+DT($Iqgc^TNq!k^O2&HY5bJ$*Dz1J#zJ!f3y7%$;w>7Kdcyv>%BJqNU2osb%Rm(DVJP8b2)==%64y{Er!Wi;Ae_cT%eJr0 zHm`7wfmEsZ-G_y5Rdi7BO%Wg>F$un%br5{}Oh3LsLj(&2--!6Bwk19Y->Q&D0LpcO zbNE>at!Pq^5GVl$ZUq&%aG{I5IEWVzLQ-^^LOdr-*WXzPkSx8K&ji`Qqq5jJd~FUp zVR=7SM--H_^02z(mYZUkO3d9@oC3Soz$#>66C)Z{p=r)8c?U0>!pRHOtOGG|x^^*9 zN>GG?3*}*RV_YC?<(sZ&6@9UBqZx1=fXm_I(EbLp171GXLd`J z8y%s2))*kl&P(qb&;0_!mb@T+3#aY#On-N{q)Q+mzz`r1#@>H4KR}4TMAVihvanGVa}^#< ziyluLLYkG%b4yqk^bgB75#)*5GSS*3gBYHwj|Yb{fUbDy*^%1y3!jss^teC1VW?YL z)`m?P3U`a$L6|B%5#6R=E=0#?BE&oZZsIivlhoF|%VgU@%RGM<*1bb8)d9)b`*0E? z9K7Ey9t%~bHB5dH5)zHzc&2R5V`D*`l1y3M>aki`H#;#Bf=_6)m$qlho+Q09?`Tp0 zhe{jJ%Ap?vGud3%48D=FcD~b(Byx$FkeDMXW2SZt#)Kjqh?6+sCmoJp^?@_!?-{wld2ip(igP$ z8lDIDjEC7~%yZsVl0lp@t7bF0Oxb1a44d<+NVp?2WxIG&$KdmNJ>-#nCCMfm09((2 zVP`s_*p5_QZs;juRVeG)?ZFXV5_U*}DTXz2jzM9dg2B1-a=E+`*OLIL z3%?WQaE_MYll+C}Gi`jlts3jH+4 zv-IaYS%r1Ap1efxg7-bYDV)sXJe~`BzsV;f87lZ-cqK~|yar5`f}2FOsZ@GartGzc z$L29{%f1MZL9I;L6mHZPPH*p_Rd4Hv__bTC9>4yDYi;2x|WKa_h!m&Q4R1VZzrZnY#+{we2`*jzX=m! zWxYFZ((KbB$pxo1A7w7dh%m9Jm|KzN8I#7{-twB@RE=3UTdL;~PTeV?z48>35DXR3 zq1?ZDl^|}WY__VoWt^B8j)4KV=hCV8(y^*MN=5DS3$f}C>1e%JD1fxDs_uOc!TQiE z{r?|d{HdD!=8>ApFauDT)=7CSyF3r}jX$Wt%byyYys`$6+V2)Aj3gFHQPLpJ)#{q| z2fx4v*@zYr%f9rbHKJTj*_%B7yLJz8rxew#8C)44Khpk)JgdE(6ggg~J7PkPF*#h; z1Ua4$DL&)TEGhO%L^W) zWh14CkWXX{( zg@$s9eycitlPP;~rJ@8&ze0^6oUW{nV9khTg5@tI0cx}49sX@yRKno7K}kmc2N=v7 z<7L6gpb_#3N0N4&x3YuDlv%3YW)!fQsDt$T7D&Igfwg=xQ`Y>**t}RxfoJJSLg&k_ zQm?~2OOI9rsePv_Y^_EL@e28QTCDsQlVvek$*anhGwhs?SB^g1)!mleSab>qJ@PvH z@r6Sa){Am2(ZAmi38aOq?-=48i>?b{EyL&)5a)XK)F+CduFl1^;7vLFwllSx#uPxD zY+RIe)9Bz_iWt2EBBS9?%u=eFi!&hxDZvhV>}Nz}$2y}b&Sg+})runb;SNpZ%gR%e z3e{L-H$_%)Rwnv@<(M?{?KxgbLDaduzMG4ikY7D3O5&x*O0>JBYg^v@aKS3z1P5H@ zR_!ZT3Lvvx&~Xuw?}&>ihvcz(aEgCjYi*wRBDVA1(r5af6JXPY69W0|qGw~R4X3fE7X zu)aA=KQnlF??0hwC*5}#D@B!nyW1zyOWe`vrE)9%0)>TGKCaNAC5sNfnbz-!A@#H` z%iKO0+aw4yff5?tDzqSnGGwc7Se!G(Q!|{$&~IjbN1)(r#21&c-0LoN1TrjHk$S1| zh_L0r%xtH}Qr)q=pSkH4VDKMrzMe7f^Q>4}P(EU0p7oVGe>;3+p6Obb*#X~BUI*TsY)qRQW%5L7i60a#zIOWa1_@(hL4txANT>XouCC|8^ z@~_aC_T`Id>{kAk@OL+VN&ddU-#7XDPyT+u-_Q8_1%JQc?-Bmm`CH51M*g<&mzQ7Q zau*I6S~Se7|0^yj9X`V2yd305e?Jf~A2B5`UAgX7F)aHB`D#r_*rt787L0n7qYn(= z)c6=D%g&ex?rrKdR{lHXmh1o;=h-Qw>IfSYVA!ePO9@#7!@f<9WaEul44WBoSg|_Y zt)qrFDw}`U+AT}2$+Mz1ur$+bI{JU6JWU8(P%8`>tg&w0^D+mUGED# zE_-e9xyw?E&rbEY1I269U4XitmPf^$JjC$rHWFvaNqTLASI0qVOmI@jKi9IZ{BP=I zY!_8=ZVp@gBY2}fcq3^tivQu4L4AgA$@9O7T+wG+QS!jw=PTDrEmEEuPLl`qpC&U8tp zn_iHL3gY=S1gK|8f zM)3q_s^SR;zkBur7}`O{r~QpS@ji6T*8|aH{(_3vunCqa>-ZJg`&tyOd(tGvR#zTS zN0z^Ce^1q*1O=$@`b^m~D|A_QTZmJrHtP?v=STSf=xTq{DW41?*y3t}A#=Xcg4F%n z;>3J~(vC1muY6?4wUdk`?b|s+GbLFn3qEg8Z;&%~>32L_J)gG62VGsp)#+cHU62Q7 z-~vFGT+CRoXIs#<%}CbeU)^;-bamzLUU=v?6vUfk)p+W_E;rh+QmS~$xH|P~=ytBG zuWRMlbGnWVy0+IPOTWbd3Tbh(k=|EiSZ%6E_sY-X7hqhy?rYHXJ-z9Dh3bQ=du8u; ztuunYXN*0sZrbOhabNet*LGd$T4%Vrmb~*ln)lp&Cw&Nt;Wp{MDBV*K^mQkuj$XOu zf4}?B!NjGd#-3gy(`L9f1ryV~>3t>H$`kQ;JTbk9&nx9I#Ap}@2TC~^3LMhL9`5_= zGF;vL9lEw{vaidyHZ?gh)g5GD0G6OrCCqQ&QWmEE%`V7~`B%vsLXSDm9H1Ze@^>9X z!n})e5UH4~0$j@87%%K>Ac=N`>H$kM3wM~M)ohs8Pznk_ceC{1D6P_$BPL^Jj-T_K% zGGeb5fMeG)G!P=0sNg_Z&}uU_?aiU?%JIu~UN{f|!KWM^2Yo3cxg<3zFHa*l*xbKB z3V(fPhMUojWHg$7Jo}EGwEvI2cY&+2*#3us4Z0C=lZj$hQc+@9QFKw!Vk_iEH;Q@B zN{cc}D^qr95@H)V?jE;UzplqFb~&BO?iWL{L{UNUUYSZ6T}}<{G`lILN8ayu=6Rm| zut6kGo%i>?|9|ImT8)~s2xX3d&4Yi6J!Tn%T|zSUKaR@{I?Ft8_O|8lZTKvPTG zW}UkVQi=7c6UtosDa(IyoO9(Nybf0(2htAbO%?2jEZeS>9aEh4el}<1l&XF((!P!7fOYw3&}~Rt=u-Kz0+1Pt0RSljDW<%adDFX8N$E3c@OJQne0oD z15v{LkskPCq8HL1a1~_wAJ8@F!x(=sMe1|3ol?ghsMB_>JmiqwV%u?3MRWRei_$X(>k+I7@5rFULzN$__pY7tkaiL2L>)R(_7+ z5<+OP|K8RG;ZoD=c%wJ0h-GezgKx*-8x-m5E}|Gkti^5x43D!tDOcz+h-U_p*E1O_ z`Xuq;#XmM^C#J6|L|kL++ej7<%GKMzI1PtahS(c&dUtw zQDi2IbdP3bAelBV-J6VLAhWr~N0=T2K6VfRe{{0x`Kz3z^vnR|O%mm1u^gfEfj9n` zIR9a2!(Qq6o9ZB#Cb4g9m7H)CFC;-^yYH0cNE073WJ-%&i0`y*TD?f1n$u#72=9-7 z2J^hQw?QV|f+T37%Y{Y)ROYz*5W{d`WHkki!koWwggfZ#??b=@?YVDwoJP*j#2@bLLz}^PAeEZuO5So==+MK1=VcrsL z$TQTLjJ2Dicrlr-#io!bf7BCNv`M0V5$Y6)vM@K_SZCVX(DAIn?0vM<` zhDuKP2VC=AVgcoll zJIeMu=6*-TfnSLt!v@v9};kbkc z6Wbvia`loGTZiAxu3+STCl3=#KmUme5Bw1bVgo#@L;qkoRFE{ypB2t9lT=^SXk-c-;wjUkhTv1Hzq=5(@QlD+ zSgN8o5p3ryy_uEx@o7;Bm7cH)>EY!cy=u6inOmUvi0~3W*>+7MS zy-L4I2fRQ22kfWdkhVYeM8w;PUlE1M;a|z&AB7YQe~)f#V)U8I6R`KA^??6{A+uWS z3Vh4aOk07nm5f>wMOV%eD#~{-pk5-BG!ULdsG(^fJV->hV{3+oT`dMecW6vV+M-jG zfv^|SzXD0!&A}zp*p6VZzK0?)X6;S0t94dc_B|j6hWN5x-$$uJgyP^40tofJ%Li2}M z@(*IfhvuhP@_&R`7@8kr$)AL-4$Th)g6(_ztfu+Zmi+P`o7TU?lE40N(|pa6|6DWW zr>J~qX`vFjv${d($n2T0*n-63OHQ2MLJXB5bb%^}`&|%C1_!P^9U-_Clv0dS~S#}JxmjNj>=vjR#d5R@58+(;(&t~?b&T?Gch;PfdD$vK(%6;az%ED+E zPAEC9vQjMLsxJ|B#g3)F1T&zsM#GwIpIEjfRDKDqCY{Wt!I^A$aHYf$|(j5dRwS|+?qcyIq| zd@Fj^@vAcGBm6;Q!aVINqbiw%{~D``X6cgpSw9ctvk-oCk>Afn@QXTts3~7pGNeHpKJE^#utMUAPXkBsN=NNTQOLn(rhh zza8^TFdzJxh@KUFbO%ct3Okvr9f89wLo(mvn{ovbyoQ>)R9P3U)@A;zM zWZWC(S*(rS7A!VGz?0x`GwNi)Tj(gx=4l%qHaa^@^uMghb8_(NRSvN)2| zKw}e&8kYq60!iM&PGR}IT;ACUVfkk|OP8w>H<=|i>LqZ84bZ;IZ11HKbcF)F)C7H2 z2gQyuKJ2yY58~}2@&^BZGTBk z;mz`Db}p@PM6m!z%C(JhNu5hfOupSb$$rGp-X_Oq&(Y^wb!lv#`V`&@>d>Mz{4E4?erQaUdnA| zQ|1paj`}cxSM17d-9+}+rmtm#(`wQhvT%U|gS4@ns-tPziQUHa43v&sF5$ja98$pU zXxbimgo2^y(*RkRsqfeMBhSTQ48?*SV8B{eUOgU>hd&F?UCP$~B3nNtJbiD$Ht;oO ze`eCma8KW~hQP)AjL1I^96rrIy8)$-EOh1J;M2xzn=0;!Zm4#q94V=p^Br<`yYdbJ zw|*W1R;t{!4JG#vFsB(%wa#4fm1Gh89iMfDZdeAR9u^2jhWHrP6u8qga7@Rg%1<%N zABKLimVc;Kh(v1DmAUfIJaC!y#Z5vy(q%O zg5E!YTPtY{^GU$5A@o&`vg^@sYJ@T@hM^G(zoSNY9vUG+Eb7HkUUwpLK5&j($o^tISd_wr+%(>D}% z!d#4NVHn`&i~4s-m#{{2!5Pp=sdya=b3t}Ig!}^@g7roH19+r{9jX&@o%FOQz0YI$ zrrv+rUt-KumF4fC*SlZ)!G*y_X z`0v8<2?J*Ggum*=?`8(^pO{4bsrC<`L=krfu@(N^#=sg4$BML7ijxwN<17uszjB2E zuVC69Y$W^&mkeh31s6cp~Pb+3)x;ri}VWTq1KkxP8Oc?_5t5x+L&*F(A3YjtfZ2*bR;khlC?T#7Nlu&I|Pf znJIp2FUNTR7>djJ$lM|1SE;<6Di61Z3<8GA;&RV7MVE!;U$(Zbfq59y#hVh20h~ps z4;9K}h2vozf7n_BF4DsSp!T_n+ABtwn{E zgvSP_giCWKa4lf|&U1F+?~F0Zz8&|OE;9#dfnfI~w%szSrgc!b^rTbCqFG9Ks7;c^ za5_!EqF8!D=--9;GyxSc3=vW}jkkMYYM$vVdlvHH!XvCj62UpHvmMwoP^bTKZ?o?J z!uySQ+kyVbc5=4P)OPsWbC(L?fLN1k&bIB=KuV{jcx~o@Bw`z!#xPL zS_zrhhm*)r(gB0HJt|B4DA1-bItyWsS?TKwaQ)^DgujX_KvsL+Gcj0f-)miCGR4l4@$=;ZI@MUoB&I{fCs7^f{ z@EYWIb>(fv8L$VP-h%SDFi(4SOIM7&UAPJM}X|+(f{@idzs9%chJGl;@ z*|Z5QGD5X4u+!SUG_>!+ry>IT+LN%pIaL|=^}4oj;#r}*gE_YPEUgDlB0ld-$=ukkLMs7^t@fa;9LHyp92Wz7i0i|3A9FXgP3E}Cx3tonT(BlWW{SYJZ1oZ?hdf4`u zpVWq)jL76t=+E5P)5R-;&-ZeFsUBPqZ*SN68&xnL!a*-YaS}IQaB9Py_d8EkV8+3M zNygf@E!kFR%ba(b+@iSg8vFp4jO z*^T8AXZx{C@}ILH$q_cUK`JG5Tl*C_th^DW!ZQ0@p8_Aasf|WJkEYlIebCVrZ&8ZZ z<&`()L@=*C9UkY8+Ht zgSc3beWAx*T;rH`1f@YDE*tv@3m)%Rb3_*W&+NxX#Sh?o}F@X9K!6t-%2k(oH7<2ZUp8YhSQAj#e@eP zb=LzUKURL%wr(uGy|42?AXAiLT{Dw6!34Zy*tb!5$8hbUq$@E$o$@2LSaDBJZ65A=d>7InbDpaJYKOX>jlU z-T!WA$b<_dRk9R4=EhwGwWtQd$ZHGaP{*Aha_Gaa#vxA&mMVl6>@Dp2xvQyb)Nb@O z@U{m&Z+@!#zp2e|z_6#Iw}O)?wLC-ziAR6Lmc6PJVbGq2$Vf$qiI4VlIGrj`f=%t| z)Ryh((w&X$>AF)}V^6zmpDTMhM~mDJbJ|!h{SkYbv*1k3m2uRHF*K%~TIMF*n$~S- z8q|i}4a)>8gl4#Q{7K{t&Ko6ymEz&elIMu*?RF4fFmn-ebr%#1h9x2n0`L>?pjeAr zBk=bZ5m&at1(!a~qL)-L>33L7vatwXdlUnl>Wb$q`pfwcSGUFAhP`WaU;>XP`y+kc zf>nl%{x#qN6R;pcGWdjBzE)zK6(N;A|JbLNDA`b!I`qFZ%$2oHQyub=E55{vl=2bh z(p;E|f(SUnG%{!J{5WXNK7{?gv~?C}xxe6CMwKsL`osLo=A=U3FFUC^H|0t5~CcnjT7eD4vYjt5!Lj)+qb8g`CxvY_rZutE|-x~!xe zzgYfhCH4KU4WKloHd6~nbZbh4qhu9YhFc3E23OeO?sgPEL~g(c$j_Ajp5Vm!70>xF zzEcLsNCrq5?lgh)^kNZuRxd*E!lZ?I_`*;#d;w!L8NlIy^{87>^puV~H)7d_W$Xjb zGs^G>ynwEUKS*e~0+(NI_!&s^fKG7V;vE|hjmreE(?0ufG*>FE-N!u|Lyi5*$EziW z>0N1C`Fn(Zm_mjS+i*6*v2;MgN41%0 zcz`Mp?y1&n&bhS^vddQ1p6ZO@0v17FmbJj5zc*`rm2yx)Ng>VPaxKM(_q% zgFmy@>->QfXgj@=VjukHieBJ*%e0uwNaOe{hKF{a-2R zBQxVq>I~}!*Vp*l7lEg8S(lxc-AP+HASJV7C(o&Ha7IZ*GFThgF#&flW*aIdq5jw^ zM%6doQs2w*$6Mcv2aa8zl#fBEqLF-rK|Bn9=5ff!flhxKKE;nAYbF1eg)MAj7f00M z+>?MYowETG{eA3if9#k1F2r{!X4a$Wa)s~E8j0_ylfkX~kH$IZuT)?c%M=FccXYVY z<*DN<_B#`$BE#g}w^0rQ#NGCt0fFJ(cDTX=uE{u9CQLlrNx{0{7k9^6#X_1H*7XN~h153NW z?3}?#%^$ycGr0Zm&wE*dOR~#U3Gu#!%zqC_Nk|gkL8aq6k>54=RsxQNLk3qoF4~F+ z{rMAa2WZ+sYJa|ZmEx~I>M;C2&SgB;&qZRQ_!ZGjsQMWD`Cj6RgE&gH*e{TwZ4vW16<`&H zPB>3*gFh+-4MJD^x(B%CKJAH#(u4~$!`M@ z3FaeYXc;uA$q@YB39V@T-6!PtxUG%zU)t38_cF|n*79A^z1H84Ly)b%cdl>z`*AD0 z;!pJlia&^_M&+^_ayD6;VKxZ#-(;mvmDh~&v2LUMO|{LISMcKv`1l_{oUHHjMrOTP zpMp;@;A58?@X;;dKeXIv&r~o^;=j8k{M810Y(E43r7v2be~|$n{{vTW6suF3#}9t3 zv-ZEUfUh>-;|mP@ zIW6H|WWdL|4ft6t;h$o_$Imz5_rQS=B-{L=d;!FiU%mg0^1=F|TdMC+nbH4deRnrs zpTb{lz{g%?(D%~k&C;jf7a8#Juh3YP{ofM)DF%FOfdQZ068>}pKK>Pho)6#xFu4@` zQ1rwY@Udq9)qU0ie9bb0Kc5-$adq?f(I3kI64D=wjPkKh80BZRRNoW>KHijz{hVe`0H;TKicz>Re$RJUuuk(`9}GdYFgmmA_G3YV2#oL z&DW>!Pch(Q-3EMiOZd|b_~3Z_05-G9rQnC&{|0<;eAMk~0lwxv*Y!m*6Djk1OOYlQXc$1#omf*XY@FyGeB(?+}SZcP{fZvBB zKxQk0AF93YoA93*@Z~MRYbN~3YxVXnYzcn62|v{sKNDMmPch-2Fz~0g1b^sVqrHa> z`omg+uQuUdG4OA}j&6`G=9l8nA`{-!my271pJKwhu|*^0ZCXq4=_Y(Zr4FCb5`2sS zAGN`dw?TValK*#f{zOeR=;_iD{1Ox1?BDNxXaWCh6W*lfy_VpInD8cl{?-zFHxqt? zLI0SR-~(?P?QLJ7^Rq`w@b8=OZUg>6poR8oCcG)1l`X-KH{mxJ_#bTvKE;IZWx(Iq z68xdJjP`zJz+ci5e6Mq3cVdyXJhCHY|=06Ws#khn_yoxKJM3E?r9-~C$TMdGkyig~&g#c+g=z(;RLOiZBkbYZF2k`|bY@hta z9Z^I$Rf%_@!~l89=L_BEY;$=^fO_@zjOyPezo z+eM9}%X1QZn4$=VRZ~V*+TcOT$0E!j^9zrNK$G7h9m9d8z6og9* zLVwEP&Cu)RF`e&4*>4DX$6XN45X$+&{Ar4ET)I{*){^7e&_q!P!xT-ZygU(DL3C&| zWdxt9&OyTEv(ok_Wg@E=PZ7nL*6?2>hIts5*B$reJh#57ma(KsX}v z*oJ#6n33O8wc&Mup+9%3ahlO+%Rru5#5Kh=GrvR-aw4?ljX&b)8VFaZ8<917 zLIM)BN(MCBoW8b7+OC8IH{sELlAz=%=4Df!a48w32+Cd;r#rx`U=4^@a9Jlcc=|Dr z@ouOS=jn`xNw8&rTZ|deA~V1RNqu%D)58#=XvGl3%`YI5=U$9d#7#8A)!dKQ`$CvK%UW2?e=LFKYAPm1dORJ1*Df+T&f1YPn8L2a%| zo~VMQhI_i9QlO!gzLwAit*!ZM?2kVFqT;wV4uVnRISZO^9ZYfR!oQ;;f9_>)zW4LH z4hZirQvYK6ilJvQVjON9>wgQ3ko@Gb+W^WUPvI{x{0$gjY#sCuE){M|G0_u?f4ScY zokm1;T@PA2wFSbJd<6cfQ_BZblk4VThgmN}{Q}7?NJ=oS!dszWa}d)muStM7dpc1` zforfH)WsF*f;hysF#J|a^&ScLU|M(K(x7rVa3D*ZFBpC#2Tru;ggSj~18piJFa&Vh z(0&e@ArQI_9Cf)IaZJFVX(wyqsR7`&R@g!_kD8^o{{_{4HvUp5&>*RmVM8-pfQ-)ueKRwaIesepha%uLNjA}RPGI=q%me93jYOdhEGl#u+xzc;QgCM5qg zlSg{{pI7~F;C~!Pp%o8ResxIxJs&mBUlNkv4lJ~m*Fy5w?J)CuV`z&hdcJoh4~zA# z%f{l&T7F0{U#!N)%h4I8=!Ty z=ck0^-?ZJ#m;8#+^Svu+LiVn!GdIUn{efpx`;jlM-*9Yxy|2R?HpF1ec2;^9h2&2? z&^Ui~NdBqI8|RM?$q#PkD0%38#`%X98~v?J>OQanRQV?M^cDkj zCr)Sgrp2M&>bRUS1m`W(BZ$rtUqU1>xpl$9^&vvxJ4P-sHj5vqeY_QR&o&$$!7EVH zFu9A#RLQ)GF#c<-UbrZ^8A?evvE|&RugVo&t^KzN{c#5UKczK@J3eC-as_^xyfm{) za5Vv1`Sb`#n@-X;l3uhDtHfe3R;Q`5Rcma0{6CFiSijh+r24rN%VE6%I(@ugobd%58)dhG5EusuqJt!PXtGRk%5@0dY^cZXh_<6-&#aE{-L#c&bOf%Dk8}iv z;NI4@5-tE+e^>(UFI>UxA8lwd7Yg;_P5G-z%&TMSX7EGYEkCR1Er|sw!7K9RS{;5L z7&d%H{tugjO}b6CUq2t=c}j6f+ts+$LlQ&++J~0K$(E@Okag1nLNv?XQk3)$OIG}V zn2Fb<1xR0rbuNXe+k}F~2_gMKOE1x|^gek~(wB`h1oGNa2+$++J}CjZi#A%Kc(5EP zFrXnrlQZ$iAN&k--qc`*M$#xQk4_d2xS-(PfvH!XKY-7&Rf#ipN`MRbbm}SMbNm7T z4z85vLo#84SBWevrSMaiOy21&(x}&!WbTpUhprUfKUlyhFl#scSr?Kjd9Ho}^+KN2 ze3M-F0*Fz34B;Pqus9nkW%^OQ3>|fKI3kAs)riikq<03*bQJT}Bzi{6(V2LHT&9&X zjR)tR;Rmh-=_poXF3-mOoicwhlHGkSbrjFVhme;-$=<+8KO`*Ujj|%1!&mjlbkUc> zu5?lAb{7ISf|=C3M#{RSBLz8$UQt6tikPbCX^~*pfT6l z9VK_rO6S{)%Vw}=9!I8ItLG&_)MX!ILZ|*10jI zS7`sJ=(0n92RS?q#=c3bk#9xAIpTB-tH)4$NBb0~R0_Vtf&^Z0Dj3{b^DG&{b42kE zEJs9SX&bh>J%tcJy(za-gZJ*t#4#BL?(q=08@GoIkZxLhaX7@f^T31c;@|6|!vZll zDHDrcp&tXM8o1cw>RR5GtSiBdqOTk)%TQyOe0&2HI!pPkHK?(H8jhBs>!1;_fDCot z{Rgpl&2@ts5AQ#&_($6^3ARNLQrG{M{Jqd}q4~2d`QJctLi5L4@<(8JgyyGP@)tD1 zZ`H5y3Q9T$5T?8>|5nT>iQ*#|17P>HT!5xPp(5ll{-<5-(5K|QI3EGU-ueiSQ)Z!i zo>TDfr%TY6D^1WgI%wxgTQrV!|zZN z*&b*m6*-QqDqPBny1vJ)cj9swi+E7bJj-KcMC)7-ESHJYN*l*bphO<5#r-e1DhPW~Th;lAezEzH{n~lr zUH-xFmU7Qd+bUr^{|ZEB^giEFG8hv{r44)mZ6UP3{>5G%2g7J|%zsY$=b?{rV#kGB zPk0zJwdi1~qof=~9ZMsM%V%AUQ+90}^JfAS?>JRCyh)-Ddfjg$!w%#^J%NE(uefA^SS~4$moF0v9#P<9^o69 zY;1)LNrc9hd>(ESHqe?rFxfHxcbvefwAroFXSE*LNOk+sj55jMl6A5G#YXuktI7?tfS+J%W*VbfEEy`)9~ zvn-U3+l`5htsuT8JWoe1Bq79R4ByqjDm6yDYoO)TjGf`UjZZEb7cyki6gkT z4*%zv<-rN&fBBbg&jj^l>Vs1MD18ZKDVD(UrfWW%Jw#RDf{6NaBgC~>Nx8A!!Opx3 zqY5TYdzvNE^7LQ|qXbIbXwi(8Debt_rHoH#q%Vseko0Q5!_YdNkC5WN(YLuJ7$<(< zQdKu+pW$%DF_+X2NR}_TGNV`6!tgM079*Wt?i8#f=>sY9J`{KPW+aqg9vq5dj-mf{ z@O=UQ*1ZZhADP8 z5~UofndHw{8&dR|^l$D$)I(F1Pb!L9Sb2DcQ_hI+9*DWh@lQ6K^p=_w--d4pQ?h<* zJoK$O%~__&Gv)HE5PPJ?*0iB2xT2EQOX~)LPA}H;GX5kH{1;E&FG)5;5-+l$r~UC? zz8QymarU#PBc3Mn=!b9=mvagUV=o(hJOJC&?BmD4;w=B=L-l@s2IXD8DGAFY?7%qw z5%=QT&xDxb5Lbs?t9?H_&r)7XFRdLKBMQVUZX(*`VZ z<9${0{?4w_p7O*xmJZ|%puE2`z^g*>kwPy7*BSC@TJ&g-R~YB_CbpjcEk6EO@=I=4 z^S%k=KG1boro#ymZ^1`2wLlYiPvLE6CcHpDV{W7SM18WnC*(d+&pGDvxOKn;S{5w{ z(&7Rw^!??c10_MYe3ZH}!zo{3=CTrfnRG z3;3zOFYowpow7F%z9-uQ{>TeU@s`Lpfyun#G!Ki>wDSHaQ#8Z!uCb$RUw2s&VPXv~ z+h#6yG8`X9i#HUaUTQtW_W?5`9Oe%BgZI0_g#=i;D3-9EU2~7{hMW8uX5%9{i2boo zy=*l8uo!|pNYI1f^#)SmzW1CgA4(AYFi<(KyC~LVvt$iQF9e))@XGtCMW<%rWJ%rZ zGYf|((f>t14Sz+?ze#zgjg-a}uU5s-F^uK$b;B^9n-t6YuHoQb2>yy+@6`)Meb7%o zWLlh5gq&;*uaycn-Ge`gFHN&F{{qHXrmZFZP2y=tAGXOar&RYvA#nK8m(V{v(%u6) zd8T-ADOsboOg;gd*4)M4MuH(=UPE<|1D-T(&yip)q zuF7-l^f_j@fGZiOASevGo2x0{i!FGP6`q4ns;q9r13RJXv9K`wpbxB&Mtl;cIX>=thCC9w0h zN)x-9F_quK-vmQ0fE&R!is2iiC6>0IKW>mysSxk7U**KBWTh>PaXPPNY$H!RBP_Dg z@t>BSnkfpTd#hT!@jsLm-q0nfz+Y0u3zmxb7qT<<3E-T&dNF=ZP=a%YA1O+3mWzE~ z@P`td*P03ruFKyfHeo*oNp({#9j*(G9raRhMzddA5*%zH371a+_q5>A z1*aUw3Gs9w9{9s`!Pzd}hh4*r-{ca%qV53x{?+nwEd0`5)LoNn?g3{FQ_-b$-L?EM<8;1s3Csv^Dxx>8N+jYJrNTo z-k0m0dbzZF8nc$uKdLVmb3NXQh7>E4lvj{t&ST+oP}r$$48G@x=j9!^I=XLWy9Q53 zm-k?lXAkZB?pTh0 z4ZA=mXX!tfi~+SqC1uWoFB-UV`kbq_@QTvMLj`)e!NMxLTEbR~Q-~j?(k!x|p}dT9 z2RRg_r?-`?nH=sc{ZLjKFPI3ShTTAlKc9t>}6ODLP zW^NX#Sl7r&z3zTwly1R4=(CpsF{K;u=`3~P-?HiW2bM@8CNdAo`3Ju%zFkj~`6FZi z*+d=L*ROF?uLDwsBE?zCjZCo#i8;P=k=O@`*;@M~XDP3z6Yt85Ubvq&zPrqEI7@dh z;|XM>mFM{2EXFJFTsuyqsiNKy`AaVEJ%;QbPqrMN!TVU${<*p#IF*fjpimAQw{}-z z7RHSXaQGUm7zq*Pg0ljVI?#CwCP7lcQ}H}ZhD;bQYFuIJKsSYpFXXO54Zsm(`GSC$8@s9G}_K-Cl^M(3D`#m%+&#ZL3wQK#-;7ieiQe7NID8fG68#& z*TOb*mda~NWP}8xs<$FU7H^r^Q76Y^mbQVjnGPeKR#@fh0z}fVR$L66>H7*^$tIfg@cMtda7sZkE4_ix0le!@)`;d9o>aS2eQ;J08I} z&N7szgi%=QLx$8%OT!AJ1i7^7c8E_J)M0!j#*y}K$P>-o$bTvcY7eGTf_PRR5=2EA zwf8CL=05iP&QPf?Z+RS*o$ru7RDjaeMd-2PEUX4fb?8b4vtq;A7(8 zuOXe?As~TxCODUMx7`CDq)a{s#xoG5>xc?;{CsEzu+sEPkXDiGqF{`-<1*}+|*i%8;&GHIv`)OHD;)u)D%0(J^o7b0MGDPY%I zX}C~ZM5vG zsd|A!&}vR4aQ^sjr?r!fzgo3q!ER(i8zll)3@UG=!mv!!+goZy@tlt0Bpt;fWXk@+ z+a{yPiu8KN{Ig)Gy0t;c!28i+6R+NpqF5Hqza9`7F8`QRw(lpXDkwInp;YE<3$^`aY1gZIPsUKx3+P`z5%aSnGjc zagp;o%)r&RVEp*w9Vm*I?&u5|g+MWH1@3{2eGz$hs2tgLWYY-lgFHSjh|iigu{id} z7Mn1K!4zi16UMLW=1szji5_rQnQ*`AaC@+o0=Q(UtT&1A3hqJ^?gt%ije^S{?imScA&fEctB~G|iu4$q#F$ z{18k2TC6xj@uyhw%in35A7jbCw^4a%Z|F}`|7(V7g%#^&mGbG`lMumq>eX zrWc3k@R{uCh$ltT;h^$F%f*_uGH?N}#}4$uy6Y@iU4D0>{tAA2B4V)X1<-?LjIOfi z@QML_BmLm7VxLb$S7aPB_%+DJqkdWWvt~Mwb7({@NDlHx-#J<}n>AawQ7snClHBMe zauLF*dxg3qaE~(xTycq9^u2u_VLaFg$0g=4hG?7UZJCBFOIs@2Qok!%#xdf+r$?o^ zr3}Mgdhm9=Er{w`FG?^0(VX_9qYmFGDQW`_B7RIAp;NWWgqDyaPwErhU-Ga~htp*^ z+<4ae7qA64aJslsbdZ(TD$MF1Qo+}+9{zib3 za-5~M=l92ACXtco??MxUMd!eQ5V*jF2RkN)d9uoGM4eoB&BR}5&Vt9dP%p>UOdHV$ zmM3|(9=l(Pkr~pPFLwd>%HCLM1Wc$99(v0eQw+Z+s#woPOytN~zDg33U+VN8!5s{@ z!$l{q!e}#YOkM0$;oYO9Xx9xx{xJmNKg`zq(>O1n*4O$y7Z=?I!cuCpwVill$E9&A zRD8oU@P{3azLCvKqIRMn@P2&^JSe0p5qM5YTzl%4m$BN#6{J1jD4&VgIJfLl?Gr3e z=nfGBi-1!;SuhuXD##XwTj=^R<9K4u)qaF>803OvG4WQ}C@7hpNv4u<$y3m^@VUWf zfC=7F%$qQ>(Tp4C0h|ff%Y+SLG!u}q3)6_qNJj>`HXH4{?S8h|QJjpVOn8>xK!s_0 zocq^?d#=z|-ffg=U3`fwwMqM2Oq14m;rVL+iozYGO< ze%|RQ`?lSTiQ+|!Z2-%VX7mIJ$;W&|LbkHS7eHJM&tN$cf*MkG)C2J2Lqo#nUM)Nj z&$=f7Pf%w*7&Lcf^!1lu|2AQ7ayUk7tVy4HzdQQM~+P`4prL<2F{{XmK z8>SoMxN+e6Bxz_sV{n>BeE& zAyQaW{`ipmZQ!HI59)V)l1Vi{e}*sQlE)|qa?oD~V*^U`RViutBk9lRC*I^p)-Qi{ zF5@9<@g0pGcn;8Rmo~vJcFS28(h5fxB)vVSb?^frV~8*2)C4`MpUk4_@Pl%h&R#cj ztQ=|iTeWw}&A_7Dk6}xUwz8zkA7aU0>us8!V#$99R!Xo=RX)a&e+@KbXnx?PVErST zDPL{LpZIdq@=GlFN1(t$@oSd+HjU_aL&K`j7ODNN(*fZHo5|A|@T|ZKHQdf2n&H&y z=xXVWATqo^E$<0I7g5_!!zhGbr$NLbF4?Wsvd7vu{e=;M8w;{q4?I`g zC$41A>+pjv0sN4<_b5?=;6}^QvNBK?6_}i|a^Swd3W|kM;B!u-PU#2K&QcHlty_Xp zz#Hc%;cLeDvU?`vXdW0y`}0Thl+{qW%6_ETq-}y*26~#cu zm{=`2hfg8na>0F#Mh~L|n0w5nn$jJMF1Co2=d^PIc#;E&A zM7%CXT?b%Nqpo(NG3tK8To5?hxg5p90;dzhWZ90nB!NhQ>?9!b4}M#`53`RI&V

K>3PiK@HQ{;sA#-4V@@KJ&QP{T)S=gvx4MjciX@=6?M4drI1)I=o!n zkXpn07VAiA`V9D2VBc`k0CCB^NdFJ|! zwMh?fB)_pCiEIOi+CcJpSSx!RFchSri{}O&ZQ9yd8=}-ry$gB{4%8M6sg@VpwLXcT zHtc$j;2RmgILPL%;;$Op>i9xdgQ1V*aTY%6E+IfnQp^}Ujrq};asJ@gG+XqQMmtZV&%@JMmc-t0=?s(ZzX z4aKz4)W!ZPrA&(}i@Sc_?f0Y*R$%Jy)dSMZoB9uNUF2<=^OVw)eU|H8rOBp~ zwF)x*zg^*#jF-$^_VA(ZROr;p?Bt$hxy#+dma8sckDusqoTnxI^77k+g%Q-y)0|&K z3pvv3U&|Xu+gG)(Li#8ZeU#*yGI!Z`u~X6Jb$RB{PRfBfRENYWXmOYR&6e%%3L=QT z3EhutYXsb5lLJxxqa%oRl_}$Ou75)S68y2ga?E2f7HYy3vC4AYTm$_@G-G=6`UsXk zQ#ood1k$&_MT|4W!%oBicsDbd0im=A_ZwtljiOUM!V*0rkJOz`@Vudw?2Bq)XJe}1r+#4 z1$MWl4lile?7Ph{CGi;Z0RPp)f0g>L4~)!eqLQutD=PV-|B6a3wXe9%hy7Pn@*e*c zmHa7Ra-2RMsZdx5SGgnOpU#bztjLsCM%3L`sGbL$t!Dx)4(7xz;6B_q1gqd9wVHCutic$_U!3cIp^+))QB>#nJrFa7-2;)n$^f&wpu*aj z&~xrpBgaJJ0syrkA&LtRt_g;qRq`t`czal6lx%yV96_bwl0id@;t_s#5Gtug;z8pj zY+^3AxEXkrbr{2$KB;gF<4MYm!LOY1#f%^aek{=p-M~DRYM$zCo~{JItnT`jo@(E> z=zA#N3b0U=tx}Hec1N#}ZLjaAHK-;QN_2*0gKSFjZM>8HVd37<{@{9`5$Xh_vqXMj6OrNDEWhvf@zBIjKL-NG`rGK>;hzuO{B|*c3bD7wp zx=#ou3MeL@TDUsJB|kcP$8ZG|-OrjKp&_eys!i{8hSe}Vf{XudkX#Fr;RpITm!H*P zt3-v#HK8++K?*xrk|L`3E5@eu=}Hv!>+ekadx;NG9#oM%)U83jV>`K^TH;Kr|2U(D z7cvI(+-CjhGFvJ37Dq-F8;Etmdu-aNSHebHr%0-3_*a+2Y!!+NQzC`^O#-Ct<&A@e zDi{7mtl3^QVUhchDwk84o)V3+@~O$L@{eO{)=(vHDscMAdwO~ES;{o)u7DR}&-3?U z!nazx+RlFeT&uGt(fBj{7&fCM(P&a!I0}ZiLf{BOdQtbcAy(7=j37LL*Gq|li=of$ zgXJ%A|6zJ4DV$LTq@Vf#yL5nc5)JeXnFw zkv5{twh~_A z1)Tf2Rqbw7{k1@9caLg+TeT5vL@8=HkPk+;RQf=>9*9vm(Kx*qS(>eL?FaFBPPHFo z9nTLou%XqM+1L#xV~nYC_3&!VEKJ)1V7W_Bpw zr68YgsI7=+9A>RkoF2ZRo1!c)&#oKAhq3wId~69y4P74y6*ayd?TJCRS5P9u&4;>&<_p2!@uN+5A7-*nmEojY(8jhJjl5w| zaZsTH*~F;$5I3m6XqC9Em$^bhCBk%!W`BEgb{jA4h{8D9*rH)wmqg?3e2Fl3Wx88W z{ui6D=t~E|O5I1PDN>0^OTezB)#>glStFS$G>=UIlxwI4->t#`-PHyasXtORX}<|6!RYQg zgXRLRTP8yV-Dz#?OqpcUMgZW>r zY_e%{U-f*ey3{TCvmZl1hbNPkY}!JQ{)S|Gc<{zS14KEq9@U0nX5r(Lyk5n#rQJ~F znV&4n!lvo`((3T<0gqf%tV}e_qEd=QK9gFhOeOe;7CdEx>LE{64|yaNEwgxGR%f<- zAxK|iL|t96cG?!HbnohlC5g+VR#p!o+91@C?G~haLjhYCCz~$R?AX&vzZ?v|+UH@9 zc3Twb?pqmI>1;Qp8()Z$i`~Jm_oGI)j#QuGapMa`QN|zI7I_lt)*7VuWz8-yV$)_9 zWcFPcR9rHsGSTo8eHytkF!iYW&yw0&ldPQ_ZJp(5s~7OaDtg*g5!xZybT(P7H?uHu zg&Te0KkZUjcuOlhTZN|<7QWaQzN?_{rlNHug_BL+;U^QDrj!WyPv~8? zhGZw1NX8U0l1(}k4KjURDh7U+{XJ-8VzD%8W!iH^)fCfGxsHMcZfxDTkPch__D`*D z1!~H4e~BiFf^IOGmvZwOzMaD61G%3lJJs~mkhk<~X^!5m4?jRVmSr()DoUof(Ug)p$Ur~V-~brmb?cF&>nmjKJU&g@)>&c*)} zk(@QCtaX2&R-X^B(go^V0nWO4m0c2G6OB?}&0v>eGnITH+NLT4$Oc2QIr!NXg0NRm zaj$Jg(>59tZoXF*nz_bg3)hORm1e&kG#s>7m&D~3=_l+-&#{~kEBO)@p1}624e&UK zh&OTeGBpkips_RliWjDhJr#Q|Jj06^YQo@VX|VcevTEhpAl!VV`+gKqu_S892dNh> z+ZI$my{fum<p}aNNJLukQ~m%- ziiRwNRE8$5{HgFmbKtrp)-Y+!I zq)AThwABQuA+4z)^MmV5UzHIK12~R^bH)toJ|uDZ5-Zs)@rOP=!zUZDpo>c+?w=p7 z`{0#>)l6deI%`PUF$iLwG#8^DPwVh8Ig27*O)(i!=trc7}Mzjf>>F6redl_ zb$Zl*)LbRvWApDQ5G&8e&|K?vk~&fHw{XJ&!vse!UnCm8r7VP# zyPLE%FLU?K(_il=agycn77juQo9Hgqu<%k#2A$r$eSUMl-(~+nPkUOG7Pnj;{HCLs zPWH`MS?d=p@(3}V?XXy9%O#uYc0dQ!ZJ?=cxiWN7l-;aAgNuWG)+En|98Bp zvPt&xVE&uk*nF#{+nb^PF_ij8nEto7L&i7mp6T)BNWCxKXy%}Vz9qm4n2u7V6b_$OZUcL!m*#mNuR0php z-W$+k>36mp1-yuRturW_@b+l0kEX(%=*)G#$q(pQ?huX>Xa~kAp zzw!`GRb@fJ@+^@EAw@!KnD_b8`*RFZot}Xi{dZn9S~SWIPpi`>l%~>Vi{iQCMVD($ zigq(ox@7mtO~J)}3a;Fya0(V6BtRn)xaLwrFZ3>Tw~6kcpGtQvEJjviwO9kII@|jp zBop&TnIppS)!_-H@$DDZ-n`kGqAvbE zp04?@4-U_suA5ck@QE$eEs}gFuaQLUI+Wr#R`AMb-LA8ycmF}Oyv#gUTHo8fY@9@Q zDqZ?HI&IL;4tFxop`*yH{UUzC#!eX^_tGD@*?5O}=ZG(MCsW)gx~iRj9DduM+TdC6 z7~*^@Em_FuTA7T9vP`>$0>yJx)~ zy1t8KZ5yi4ycLLuHTQ@Au2E!@;yY8M=c&^w|GXSZT&dR3H1$YBTP2&mr>=-EX}z?# z@8dII54NS*UIYNj#dvA=6NOAkCZEHB=u?P0rjK<$F%;o`27Qb)`j{)I+R;af6r+!6 zqK}E4(?_+ZkCD(vc>#TxehHtIRwmR#DbujNc=B)`$ic8PN|DSLQOd>q1nCEEAxgQ{ zO~5JHXK1P1R`q=xCc&Kjl)A7#^>tnmzs2Ol| ze@-BFfx2v)ca!{`O+(hFOl~LH-k+>@G};F43v}niAYahuXK(h{Q2y({o6rBe{)sVu zua8;`pU1P}U#t`8eK7-bJ@29`mVv~u2T0I*+LPfoZ(XpS&V4gK*QYM39MFdKdc3LUh>MEi?g%@GRTiN4{P};60+vWGYplTz4&2^<>kD zf;!XxHqs^8%#^8p(dcL}pTmt(@Z|1GjB6@W4}D{}k|i}dnLQ7;ZZlk*`$-%I0({^fB&^*y*bSJS7fZ-DMZQS+la4XfF{fGyxzB>hdy#x(PN*-uJ+Gx&AfQ4F7+F`k9uQ&|0Tr`hk0;jO?@AtaTB7oORL_R zsUB98n7yZoBuQ2no4FnS4LhB;d)~K7V~KIiX*(mV@6J#MyXIFkhQ;m~R3}2^C!3a1 z&Iing00(WdS&_xfU#t_7iEg)_#Tr}vfv|`kWQ!`6QKwnYnZy#n?^*Tb^P;zZzX1Wr zw#^P_!9y3MGHip9r_pWyH=p;Xq`*LOL&V+p`QC)>hVCs*g?hICw4%)PZ|E67;FdmvtxU^F18m4xX#eBlY>Z zK7XRm5&C>apSS39-{!|6+>NFwCVcZm9(Rwq=QzmggzFOIGq;i}J>NA>%ls7+U%t~k zrtEw2nlKr(exF>wfAw>AV?W!XU^$E3NuBo!YdsU0$hWTO*X_5bS&w}Dc3WG+hsB92 z>KIypedmf8jl~z|(AZlmBR}lbzWeRyJ|>xkZWZC9)*m)jgcDG1I~`p^+sE~XB<>$E z;Gnj;%@Ti@*Acktu(HHf<4b6o^Ie~YRrqGKho3+}4Qsn5u6TfnsJ!yx0Sz4DG|mJ( zUv~ml=2y{Z2;hBV=M>K{ahIg4o~y@cOOYzy~)l z0{1Aay3?_-g_XD?5FL2KBt14C>b7v^HU7;Lf6(6Eaa53Om&6sXG7v_!Rp&jVrYM==^eMXK!aha6XEE#l_;>ubWBTtYf8z8$MGxqI z>b=kZ{iwGa|BvPWQ~Cd={QqU}tN-8ISdSmC{yxh?h62PPWTWNmft4G}fV9%x{b;`; zw$#~DcO{fP=9kwP{r;BsMn6Qqw_aq+ZlC6b6x6qu6a{`b+e6!g9ZV*NLP`Zt!;;yzp;sCfW2)Bmn0 z>93ZQnBAXF{L<*qZ`bwuy{Pkk&yM=N)>^Eu*YID!m@jUVAOD5X_>1H5Kk06IsnhXm zmygEY0~mxn2F@ZZ!pTY8>s?*%T7UfS)3lA>!*M8ZwDn&xYWpH2HWna9eSAN!wVC z6=^Y4x&!_w6q}KUJ*hpr4lLk=yB%r>*FsfWU~l#)W^TI5DoUze*=liz{vw(wm}S0; z&x=Hf#^^8k(1W#e{2&`HEMdmE9djOoU02V|yF-dB%G}hA{BR}vG%qR`?rvOi(s0{L z>VC{4WQnjb*KNzgSJ9A`y1o1oAE*JH^Ya3d?a+uqnd4}Ml&0P^@7$G%Py?7*(3`UyHm7z z0BDQ#p*y)lNkb-(_&ax1*Vrzx5oVaZvtu4dq3=e2T@Q(Fe17L@18RWg4Qi*wIaGBobHv`-pkf?E?<5WMA+BUaGfCl*EH)LMq{8=5 zID1?W{!4dJxGBTL5?{mg*2|Vz^MitlfBA`>fbl*zu{%*)OKgf7$WLp(DET;&|pz#du&l3e=RHt%*ofC(n$r=FGL#$b=t zr0Bu0N}ZfA4Cp>w;l>)#ibgX1x9uX)Ty|nspF8P6jay+asqu*;i2Lv5`?s45zH=tO zjOL2m5*eudl8#}>^wBFiEdEOd)h3(9>u09_^+n9&*4L`=S^>=HiS@LD36-`agRo_W2lEY_cmc`RNY z+(AROOZ~G5le9aCcCDXe)2RaXH0y$eOfR2d_@9UyWme`daonx;U%is?NgVF+t3!C< ztNc+N<;!K~j6D%KW(3RlBz4o-LF*al0LV;vShJ9H{bT%qu>JT|Cu zi7PJRqk7gl|8cf*qRUpUES;Nx-6J<)JFCNgZYITp@+aIWGT_g8R3PTuhT#hS$QkFk zAbqd*BUy;vrsr!Xtv26+7IU9)0aj;mhiBECUfT;Fo9~Lb7jk9QAf~Y;e5~@yvj*)r z-<6Q?HDwOqN2xmr(onr0t6y`52{K3P4eAy*D#{WI&^f;lLb^TO=XSNsx-;w{-4=NE z)IIh3?MPhI5e|+DhJ0KXkmo^6bz9T+n7i$_*46Ce(H66NtD8#K-=P&^CY!I0do7oIm%7bVN^7<$LLTh$sBPP5t6weXf!F;%f z)u*laM5FFh=pEk-y1jr>4#3`N}_{atCT!`>@ZN zNtTgNO~}pK7PrdM>(1&xNdGiPk-B5@gd`9>A$`MxIQwJ~Qn@FjCwzJ0h~)`s#(f2Z zG@A7#EP@PCvAYhV5xi?qOisE2G?zRd;U&K=pSaQ1rDig>E@NURQU~Bqp~i%mbuMPB=ixkb`Qb^63wgnOxw-K;90SOy#O0lvY%afWz&3CQo^&$ z8i}Pr__E6E#&zn*r*3QYTSLFCAMuYqM(N`%K@zc9watFV*^qpHO>T1)52-=_qW6)M z&F-KGj9xP3R@7-W!c2T3pQpSeK@V>on)0_$Q26xj^2B@e9yF*5=#T+qFG`cy&s3_%gS9hP;HFj{xE({e}gS*?fpFdxf^eNqBX&7Q7oi z*@N?wf~MYc_o^w(o;n0egG?@#ao^1|=~NoYhRKyTw#Y+r8~*E0xYJClSnke|h6l|} zd{Q#t`F=P_+L!8a*4-qsfOV*HVp11pj{juY=c`?5Ury`({Qb=c^$p>7t06?y9F2)>@08tpI|vQ{&Zr|$7IBiiv=a@>}*-HBR{ zyhnQqci^`4(y2@ESCJ@s>buYvlOu#vVNo@+U+40pxSiPE(Vl6!4_QgJp9=Fk+e#5E z;uOT$0J`ViXVGY^ZW#ulRv*V;sjIbK7qisd&oT3bDM-HP>pQ)(-K?ojA8Lol zLXCpQ$8502KcX3hmA>cJV#qFElbx2E`m-tOr~Xgx#Z&*ZFLYS0kl3K&uv~|jsrD!G z-8z$xT#4bNfc)#?Ht1|`7t)SyHu-tb{QaDLPUF9szo`&(U0-&ex;W%Q=SV;32N zv<+>fuBLOh7HgVaKT0az6qD~tO*J=(2V)|~{%IVKL9(18(P5a*7Pr#M;9ijCFs;P} zx5g)pR_qgz?DvZb4@vnv>6^aa9d(mTTS5EkIZ5y+8KL~Wit$i`TYF(Nm>cbOJZ|Tb zpy8qffZuKHIdaSg&{{fqTu}_60*D$WS%U0*!&C+qT5N`KW z_mkD^1~u9Ze&&9_E@J2yAB)R&;o@FfwC*rWgprAA800#cifZQ`+ObAs<6^CEg|$DI zEJoeFHB1Ap?{@|3My`kcqUxka6$iuiOf((@>out5^zOP{rd($U+bH2#SxOlqMhn_bBG>a4j0I)+6@}__wHH`HamnqkHD0Ikp_-n)yT9fe&fwF8UR% z!@x?K9w*m_C~3V9UP}RMt@~1IZP5%E8=N!QRLpn7Uy&3auNtz*En$bY>dW)h&(Bwv z=Y9>R+B?Y4oN%4}(7CxB;C>ugm_{`HiF&PvP(vE!96scjG89F@wi2L_fkAr#BQ13+ zKF~!zC_=c<1zW6KT~1 zQHe5<%|Gu{19j62Tegr&$6L#FM@Fq$SRP(Gz;#H~eu-v5H6n(!xGcskwSN`uN2ml3 ziAFt41TGSdFT#zRq^w}Ax-mPdNkUZ=A!b;Ulz`}C_og@V9|N17v5(#OH@j)mAM~e3 z(*u^4MFits$XM7pik+&X33|W*WyQTNh6m*4O5TD}MrEXWOX9RNM ziqDjKv>}r0Twp2r5Y(X-7)^-93X>&0P=!}Jn#CU1V&7#0edOG=_u8_H= z3pDxatM2Oj=;CfBt7qoU9>$C~NZ^{q4Xj4c0qX3EdK|6f)3 znjN0K9`WwmFssHFlU77&C!&NIyEk6gZ0w#zbx)Li^DnjN>Ma^qz`&ACH-pdCxn#TB zFVPrn6SRnEhxw(KY`x4^mcdC3&-F3}+~NlMzv^zN+cf_Hhj6ZI{2krBdv}%xEYL*i zEaT8O{YD|PSF_BmexvB-c46~sU140@j!kOat=L*4eIp-9?|6ZS1ZR)VB02sD`xyLW zwxSB)*XzmvK;Nb@gxsHc)=guCB&Ge8s>6%jX;B?Lh=2ocvHJ)pRcUaPpjrn zI9kQJDiA&+iV4tf7)@W1?HPd6I*)%O>m9=^gl>4I`x}g_sN%61iOfjbXsR-Ux+drU zvzv^s5`hUqmfL7HL81_HthstMcOL%~G_pq!UK8D@vn}Qgzr{S}PDLz;E6QTsI+TAz zornY60%J4a`g&X$Ugqs2Ykrfjb*XA~wOU(7BEHVRq`@yQDAuTAI-S?(XJQ%j%B9Wc zxz5jLnlc6RnRLhgj`@@YM=K87JJ$Jc$YLWD`mHAIsWPvowX)ufEkC4+)t6>r z-9o58ptieO6^C(@tgT=Ol3e+k+4CwB*DTBqvT`DUQ>ab(Qz;)cGW-^I92LvgNDGEv zw74X?l>U~3JV_}TEeq_FT3DtANGh`UA`=#<%@MRoJPTnj)3;AN4r|_h%t2bmI-iH_ z{I4nN-6 z{q1UIy%ahHQD+g785Ut@Q9p z)Z}pB;Tapl;7v^`o<~I($oHKRp;|KQo zpYsEo>mGRE)8^E-f3a`B+S=!(hJyBWf+NI5G;?b~`!~8{KV$pb`1Un_lRdI{Oz8iy zcP8*rR@dJTLXgEUL5ZTc#EKeE+iUz$|fk&;xXgOx)K#%eb!ohvB!RE99HxWP8M@Z4dejO|-q5iw|F(m}!8>Hmk-E ztxt73lUsQn`S3T&Pm9IMPU*>s#>rTl>g&hI;e>gaQ1{ip1E$0uXYe<8r9_%xi5qaI z)Jd%RfUv^N$oycrQg$VUqX^a4O8w1ArVB>>MZWGO?gLCi3S8AeRni4Jo}>psm$+BM zooh_)y}rl#{K>eQ{yK*U|0V_Q;(6*Gl5hvfuHGXNgur#>0 z)Q6UqnDTN<>?*MN!904ua@!~KLA|bJf>zY_Rp*3Nuf)N?32^gFLd}x!geEK{u&&fX zjfP}brv9LmU;e_UOjAmpQXUb?DO1sg#-nf7kWxR!E-819;=uIu{M9N?&mB3PA)HTy zo+UMZO&z7SZi5z{5A*;?hIk#UDbFsHIyKYS)UdIox2kytrxt%A^OAe#$!pre4>?_M z7QYxIKH@?dNpQrihVoeT1hYm#J9Ww_1$U^FVPuIrKP;tHun5N`R0aFAw55i|hD8)< zs3Pp+TR-F_s=nT=vU4&h*uDMsIZZwIvKwDW?SS|U3U=m)>k(GJBCO65t6=$?8EDnR zM{GEPN^Y>!9unVn2)pnot*5k#J@1PR5v_S|i~9{n!?HDNE;%qUcug{WW$zhu!Ns_- z(QC>kKIg8xp&K&exn$a3qox*yKc$W?%`^;-Ka=C&hJ&gO_2)Xt!xySzKx#VEjby)1N4t+MlTh>SkZDgZP}=7&0K04t_m$nFN);vWoIA9p^>K2>NO>O~g*u<3$gm< z!6iH=cDnlz*Iu#W@JuQF?YC-EJ7b4VL-3JoF}i2S9hi9>{kx(m98b&nvO+%;doJQ5 zH)6UU$0)>37`CQu#^+x1ZVEFS;&$MxI1J+4MOV6)pNy8UPvke6YfgYj=(7_gUlG z(ZY}zdNL<{tE z!Tmp#;9KObWw%zjw*Hrw_@@-}qP#5KZ`t@*&Zxehl|B&(^-}a_Yni^6WI85;7wBcZ zcdjp_1-GxDFoC|vyA2(S4uBqAf+XLmG`$7?CCL}@%o!|rC>;S+&h7LUD_-QjVy01g zXS+=3&2z8F2<#uIAaLJg&0X4oX_gxXsE7V~4A^336o#wtn`OBE8zPa2FSXI%cS12+z1ShaA+m?eQM8} z=8nZ=EQ_ixcBA+y-slgsOkLNL8n(32g{0U;lOt+Dt~zpCvJfEHN6d|mx3!^@mgjMAg9a6vZr<^N32}^-J#!r zt?p65)1^B0(IDQN(D)TO5%{*Wn|-pcR_(3`rFXaCceeOC?ERarW@oZb#_qob|{ z5?b=298!g)ApJVJp~Hx4&xKN>R(}|MdMmFy6+OY^ot>BNy>VxQ=0l4lF?VPx+n8ab`t}U6HpF-x5?wN}-nVniPzXJNEfo^w6NZ)J| zy@$a8GIJ$K9r_8PA52VZgU_5ahp0!Bf;OYvNGQ_8Qq|%yq&3|Y?F(CKP;og?wlDW zgA${HVTdvIFIn92zS8x=D~0>mag3%P7~X`-OFb?pEMwzr0pBg8;i@}?!$s}_1eIZs zxL(5?M$34AoGUU~{xux7!Oysspn=bh2r*;gezh_6=ZJeyQ7+7k6lR8be5{nUAs#n; zjJ1eH4cmQaktZpTF+3X?H?%=Uy)M`mGPE}bV;#0Mo3UnMvI-feBl9xIXp4t`QnSPQ zD;8(T2Q#n<40Ht(yKzIMCGD!D6JWpXl2y&^d|F?njdYh{h&4XVcZ{&O8;bbIKKV%VVZ2rH zMs$U|vje$+KPMS0S(&*yj=1kjFxEYxRXGs>E$6zlvY7xSKD|;4eDS-&1aeFV0`~Hc7 zY2ro#AK7KMzv{t}<~dR4?H9PURn~dx7~b5YV>}p)k&cZ5N6~Rp4K%9c?e!(@9m)=N z{^5}cWHp|O9}yYarrUoQ=&4SCu7$b@|GQ7nE(7=7A~IR`z*3-0{!{Sh*+i=o9pH=D zr;S+qU;A?%c@nuc;tbvWvOJtj&53mU8v-f0aMCm$@O9|N9Ct2mMP;GZ!??igsWU<0;Xf!?IUZ&wei|~=Bho9_@xCJiQm&zqq9AajF zqn?T(;w0{V$Wk+VVsKyskGvv+m=7H~GanX|rB7>T5phpIsD&#z)rh`Vj2OBj$9SnP(Is^I-c|Eby6-<9*jpS0b zBmdV&-#gaVr_k_j$e;YP?v4(~9Qz~9mRLx>jxdy!wc zMTi^p+k|-u#R#3zduk1yn7ewbABigdF7uz*3@#CUT^;30 zUGyb2@)_h=w1of$^j^aEiLerKrA(YS&(xyGtw%tF+Avp|eRnfDVWx>dJ*qS$o7rDM^pRL&E;z3iUrntph zbbd2Mh$YL$ez6pqO#67%00#sG+3}Jlx{wlKkX}f&3vml zhEo3gY)pnVa8R9A4;V?CHFd5#+kgETOjT$WF;nxL`B=ib(a>E%tBs19R2S#}h=w0E z9vZwlH9|>SnM@taK5wco;m=}=U0DHDt^Fo-2DgY+cCEYEx4*jSwmQX1&}&oEwdTcK z?7lu#qe%@>OWV>oty-{VKtX>&M&oHFQ3&$EU)i!IYH)=Nqh^j>H&`4i;r#Iu_mUQZ z62)#F0!1EH*|( z2%FUoovii6j>)R&6*;MGw7A-G{?MslFT9tkN}h6ezPY7GR=6|$m&xvAzL>eaK}ULs z&Iq1uGw_(r+&gNqSJ)ziDxA=m$FJ6Oi0ZEx9*xK9Z-G?64_V>b`!BjtgZiH`H(S>? z`zZ9EUKh3Tny!Nl4riKSzUONzj)5PT48~Sqw^X=qCy3R8p~XLZ8j9X9u|)6b5=cQ{Y3Bqn+Z5J6ea!+D^lG%c-1io0qM;* zrg@>DWAqvwFoz~AYn3852QxSXNTtEAii!fHL zjVf7iNND#F;U1RwWSBT$nY)_pzgBDTFKx3ZR(+F|A-H061(L1^2rU*d87#GxIj;df zXTna`Gri)j_f4lJ3CB@;FT01VF&4eS=2?vpzA;XP%H-4XB0AMiLEu2jtv&eGq1g5m zitG2&m+5zcAlBmA3#NvF5sdQZT3sSpuSU{oSwA_!iHGHc`qb;BgA5|+OoZZ<&$O(F z=eo0JsW?b9B4?qoHM9K(eywBwABCM!$Qax`#lUROzv^C78Ok7TMTy=&TbAmc490+{ z1#U}?49x8-i=#8QAjPV+|15Pi=wT_v)Ug_Pg>Kd9;U;3c*a}pBhe~bzO{ZRJJJW6) z(jHo&od>CTRi)W6w20F}%1_zMCT}PB?4}>8Hn3>oEpb1-+QYKFDk+uXT(uLXcJzTB z(jH5hvf;K8gUH&jFO=ciP@k1AMu% z;KX>z0669gFwUh0V7ziaw_6#FXlB~>xONkEf7<&p6f0W)EB>&PXLlDgBh?yb*#w72 z!Hw+1soIyD<|d6%GfUi${3q)lcaHz6;IlB-Lc-k9QTl3kn7(Rm%Y^|wg!3$8WN)Tb zTYE(3lZKs8I`)w+Ct3)mjcWrY&}R3P`R$^6aL7qp2n- z6z4uoh(FpS>>@Yv8qbAQwwuZ6{|)UaeFK7L zi+UvcP(usnhc~uk7HorA&@(5MFZs~b>pX7{Ov2@g_U-A8^IrMmqLyWH8+~AFlyFnAP}Q!9T0*Xb`zNctoGK39(It32 z+$A!TB&WPF&=oPD1DpglY6U{r(P(ajc*SkbJl8Z`MYAR*GWs4YjmxK`sp@ETGn-;M z40=dQGd#5Ts+)t!re?e>Ku=_vk;d=Yx|!7ZI_`!tT9%sB(oUh9ZjGeI8!^`6j^NRx z)-VkyVF>7{8S=V{oJ78iD>Sjv(EMT(q}H!&kW*bS9f}fiOfkMi?pVf~kc4U-C5CTi zyqMKo7XRAbKnvA3{O#N5``d#;PH8t_CH}rr(UIM;&x?b%lY?%Q@b-e$?{3(J*;OT? z_ws1NtWM*_3BF^g>@Q^hFp#4IO_5TMRsY0j2|hDLASF9jnIfqv89K3-95z#!RiJ5z zxDiNPhwsyeO4aw@xf z`^aF+C#5MSIZC@S-9{enWwE^n1-v^^nGi9J+8gezTwbX&HCrnvBl~Ee_wq&k^uWmC zKEKG`H?QB8p*Jnu9~yI^G1Tq`A(A&jTI)_)?c=<`%+MP6MI?ZC;d@4r&qwYbG1&}# zW-;J~W$AxIPMqoKZ^_WO+_L>)94+eJPci{3NPloiERgCu=-1T9l z2Mi_%zTP>Jw%lriT)|NIjM?3@DW;6Vj@11TUKBH4I1UY8^(C%Dv=7P;-20M67^k0h!7V>S?KM_z03W%4ZX)* zaJ*4{r&0_+H*yjrPZ#%YS5kXQ5f(xPn$fN!n3oJXmT}MQ9kf^$oF7jHSF}-W{e92^ zrt8-3gn@L4Zb997wRSm@R61=I)nTB_T_R5&EcRii%703|Er`B47v`#^qeBWQR*-xF&g0|=6iq5xQ~%sk?U%aD>ipkton6J#f*wL{*us`n@0wVxC&Zm z{2}wac+jM&vFciYm5xK}N9}6QSIQ^6B!g)*IBY_DzG04LMv_k4qv#(&bFwvWiQti& zn!MJd(Sgb?A=`kJ_t4!yjGI#TvPy!q@dgh__5dZCTLw5WtfR$71e%}HxHQ$+Uo0b3 z*K{MnXNX!zhSwVctR-EcB4xp06^5&IAimaeH5Pi)a%{h_A6-9U1R*X&inzhO%vKB( zYuYvx?oyfbV>pNqP)secpC6FBjtvL_-H&8bhX82&s148IJtNS&k?qM2MNv9-zeptg zqNW=Sb&DfUDBJW)+)4ZS_H}U=U8)Lz?iBW_%c4qIgBVs2sfGb86pX=G_05(!O7yo4 zn|baX!mJwHW!741f7vAB zl89ABFL))j1871`f(K$RUvguuc(mvHmS)nMgEXUbqIt=5ee-vV*t*|OKWziw0kExR z_kXv*`<|iC_IK9&5G2YcEPtnKG=*Ntatt?WpF>1LLLd2oYb?&fS&lF7$!r{8%Wi&V zoWdL2bMgMmUQtgY3L#BVFSekJ|&u8)?}4~vugU(oK#uVicKh< zN@3qZ1-8j*!)#4@U*tx!JEh#u!Gl>`NM~Fai(SJ-c%ufebgux;sP8s?KGU{RyRbFc zf1Dx#6Wlz3hs%@$E@6XI*W-oOHw|lZ&)S+so zrTBDTybqz_J=@?pg?E`I7r6uX*1ht7wasFjyV!q7Pzjm1JN*KE^ZX!TGsEEZ9tVVu zgkO0UAAZj>_21K+-fj=~-qey7VWmNb-kRZe02uGax0%>U4PhXzC~UKNdjb~Iup)|MyW6TSc6+0f z%I23;UlCkQ9m;|;^M!~?_EJiGD+q?HcHS`#!#_cqcf7M;&T8ga!vGr) zO&yZK@v@oZwtM+Rn-yK`q(kGKl!-uP1lE#PtQ<=t(lykzmulYmyb=UF_rPZ7o@k)< zG*Az=rK7bnO0CG-JkS?r5=)zBz_o@#aFw^6K}o7XxtBqi2%6)u>j)j=g;a@RYFD^+ zDJ}3lfddXB6B1e)Oc+=iOo^8UZ~L7ULi+zbGvfR0Ma*gE5B&SW{UMIa+l7I128I(3 z%WXb=6nr!2+@e^G&S$w3y}4N2_!g{aj&q$gIb<)~b6<;Y9T%<*n4GK?SY zH2*0#`SE=9vHvM1!vcW;!y(`-d{7WTpkWe~t#cmhXE}R_OMg&5iLT`6zY8ZB-sTJL zROIsgL@vMKjy)5#kZUZbu8aE%gvDjC+2fbDn|b->3`P2XfdNq*yk8uAs#uKf=^;Gq6W!7q?NVs{rc)+cyC2D1Vfx3T zJkTc^?x;!otsj=rab~17s$bwE*N|VSM8m#hp^*C z%4w9+3smfh_HrNK*Db9r{u+uSEp$C)vUz^#;O2AR$?Ti(o_kPQ=&m+7HA))*$jxoo zK`V5l&Y*kNA$`o1euXRmouFd3jJPWlFA8^QQpJU8&>aqDBq=ELNrM zS7Nu5Rr5O~`&Re9gP$4@2H%{u`jU+8G=nrC_F!}Z3_#d3To01i-XiJCf(~3Ih)5U( zu*skY8DY>b@a?QCbowhqsPE5w7r_>rj|h(V;ac~TDK>=E*wW_b1Oz~xdu_|u*;ZLR zIw<~nEjty~qTd6F)o7~%&iwOjejnshkX^5}ZL|;a`_ttr{8aS16V~>M{hG5y2Dp=J zdQyW#ft_MIRcmM3pJfQsLX!+V zrXftB$LU571-NKeM#iCpK19i;1H>odtt^O{Kxpp)vw|X8OGNWCb_EtS&B%oJ-Z{;P z6sx{pIaMEaDy{mUU94uBMeT;$dm(=~47Sl>18s_| zv?AkJd~UFnI^T*wD+@M0!+KiWQLMU#D)WaI0VxCU*nzn<+b+{Z(0=kYo*>&Hh)vA)*k(EnS+g{*@czdoJrYiG`b$1`WViyHT5JNK24>s*q7O>r6cgbqe<{M5l|5V0zOC&x~ z)Jt4xk)U7X1|w?aBq+Dg%*=UFi~&Vw|CpczBU_NJUu4~DjY>P%DGMJ-5Q#i-K*kxnzWS*%OcW9c$;lg}ztJwE zgj0vfduc0}^;X_1QG0fg?TIwmy}@@ddhgqVYtFxcqar)O0(N%9jc2(g%{p9*MNwYP z=M3RPns3lG)H12Q$8ToNX5as5(&3hEjP|8L98Uz%Ea!q0ZtFQ0JTOl$%Evk^4aV@{ zwYk|Y7(J{);>>g2i{c9eds_aU8AhCT-pOmnnZyT&nuQ2P*{0MEUu&A}Y`I6$1g_N# z+L>3;RE<@C16DoVw2+Kw77=|_b}r4^9`e+d^Hy_wKJH%cs3A-q@Y}$63x#|L1{}!^ z@pR(epX~Yg(w01uB`ppi7DywDHXqsgS^|K!1caL+$cFiz0g0w3`)=`G8I~kDT1Kc_ zCujiNlm(+S1`V_gh-(eGV2EQ-S6U<9gWaZ>7D^h4XH1I7^?mA&9$;Ohl^G^yiEu0D zyWDV`+HL>{_+OT>_eXhJdC8W#(8dUezIy|+Eh#i4E{b2i9z@5ysB}EB1tB6nYlK7YW!gt6bacSFA|JARGnLKWJSe%i2VRotX1t zCX5g0o)NaO>M5R7R_Ikxp6dZe?XX9}le{E421o&A1ON#>0*i zYGMwQmOho0rl$3>FwfQi#Bnf*+{iHRG3{tdPO+VD)#RUUGX;Mdm64ulE3PWT#{FbK zXX4wHNA;QQeCJ2{$~Ft3fUn-BgT1Ydp>d-I;kVdNf_uBLX}rT$ZIQb!-15o^b8vUF zOppl6X9cG^?`DMadSG2hrYJ9^E0rk`Cv|P$v?ly*){ZX3*IS^$TeL zl4P)fB=g-x=H!f3muI!+^>J2H5hspm-R$;OM`}iFYv zgCur^kl0#IOB{K4S)8hwBlFFFDoknv!#D#q=cQkkD#+3yrT`b)K`~YHIz(rC@jxMN z7rV-nJZVOTof+oYMHU+#9p>$2dH5dIuX&__3>K}SZ48FttVyDmbgYE&aolIO8Lh6^ z(P(Wq@(ckmikbGZ`;)mVS?Y%Q#yRlCBDd=R5BjXAb!frrUOW?#B6WdK%y3b(nxhet ztw^Y7j))*zuNuOyD%Lk#ooEc6+Qoy(WRoNI758(N`~w!6R|g!IJkPxf{Us@9Z|{R6 z6}n zwUu8quyUHrmG2W8yKXH#NTl0U2+i3any0C=jMp%E zWSXKX#$lFu1CGb9!@6>8l;E!+w4qhqeS9bzE}3`7(KDb?khw2@cbDM?Bc+>}FcGZt z>?DwZ&Fh+Xg@G}Pb%w1%I|uAFuyf{qjxvxa_?`chE*|LaZu!yQ-Q<7hT-#MG>2WtR zN?+y9kG`&TQ}`O~``ndL9zL>jpxfRYWSm_fCmOQQrO+BSVOouus1~d5g|LMyd;AhF zBiyuhlMVDO+TIU_ixo$EXtO1=Jm?XX;dnaA)`*~3$kwGk@X}pdN0Egb_Sn+W^N|KX z>Y)L>H#9QFe@&(Y2j;MpuG`%^(W|~uunE0wkQ2*P1_TTgE|;0$!TZ$DVO#La$(gN7V%4u^X1JR6lbDdx z)|h|93XOv|rE|)H=hyB3>ad7%Y!&KxF}od;6qaw>CXxv(>D!7EVsz;NaRPVBR&LRI zdzA%SnPnsw1G?U$AoLpzSZ2{YQdUcA!waZ_#jZ1wEfdm!V36u0UR1(@u>Mekd1>-* z659U{cfb2F) z^{ZU{QS1&F<4-C1yR|r*lnjO-GT6W#uu}Y+3_8vHybDX2)V4D}*YYRTedgy~`3zo) zUH5dd>gj<^xptd%V)o^T2!3Jnx=GviaRP|NO4@e45z(7@nVLa_g|kZobLb zb@Qs`(ca^Q6m>JYDePk*pfHvfZ7yNkm828R?v|J)W#!;RolTf@!4>o=MKzs0FYShk zC8Ntz&LGc*Y;Wie=f171`>^e#AfuF1Opzkr^>Efd!H4+6;~L+69gJ2uwsZqgVKRLL z=RFserLhsqh@Yz9%@G@AN5G0JhH7L!OFd>>nI17g_6F=OHZa;ETC+DL-QHWFIj!_Y z;PU?TzP@)>xJBBC9M3Lgkq&K+P6i31f8l_Y89Ma}>9m!n6BqO+xW1^gYRj)}TL zx-ShDy2-;#RQ_z9ztG;|$mZ3t{i7Rpvkt&+1U6+w_^ECGE%@2jyh)WIe)KG3MTkT# zAj(~Z`4Z&JugrsyH;u;I4V4867w>D6PvoM>jvfmjrbH+7=Xc%d4F;imDU+Y@?9NIxuLfGaT@!kT-gh{q0?e1cZ(=D7Oq#<*k5 zg^5IXFVO6KH8ERvthx8#JQaPDAJH6LK#6)CW41Z^OUNPQ>MoDy=9H>uD!4IHiQbTH zm2Sw!l%*TU;Z7U34=XEI%|m^@|> zHv>Jze%Yqr-RPe+N`Ig7gyxT>`NRY?oZ}wTRIOUy#ooSr-qw&sS9U*9cuQkL(TrRY4$G_|5Y^~O>FQM5B{w3uteQ3HIXjZ0dTmEdNVgw z3uW6Yt?VYWC&|a8NHh^xg7u7n%#C(?b^`_TWr1>oV((9y9~W`_wpD^}i8{qEF=OXn zjsWOFrcGscXHsnoQ0DxxZSME|_ik6cQ1wOoR7a!eyu^HgpJV$684mRPwDK!s2;msZ z9(~w$dJG6etFhR+_GyN_LG(d{RwYfpxqM{9jpEgFwFeYNY``b zmqxmLo(^W{J!K-66m+=`A57`}uf)jomQt+X!844Z@4Th2)5z=VkBXkmO zD^B`J6stPa2#qDJ0hnQgip}Fm6YnNN7==zFw^f>5afY z$~}VRfKm2~O_~1RTE^QqBfm6yaC!WwU;$StX%<$Nw33CphO(H)!saB1H}fJjvTR1x zDgdo$p0{uK#r>>rS&Gc0>B*{#;yJ058WepaBYC^9%`L;m0&ZuYLxfgDk&E@v(mbvY%$opZHoRgrf8(^xApMPmOSBF442c+)?ZqC1r4_By2k=!j%A@lEcy0U(7lG0 z0Q6aTsSXPQ^*S%}&IBYOFH%V&nY0n0Q*Mu;j&CKGi6#_i6gSLD82_oa>q{-b>h zv*RKB@pT~k+X13P27VQE+pSY-E~UOZ{43YAfj=>O6{AShSudxsKd_+@gyZ-1?fqEc zKyQHOc(xEm_@PBLdSn#Q9MlB}Tg<39m6PClNm}DrCg{k9{K^&uQ zP70Y=&IaqU6mjzjq$H1Qs>5H>f1<92ZkrNXAa0=*-W}#if@?FCUZB3^G%mD{b# zbX75f;3oThCBI?UcQ1uqb%lmk@N?oJzfv~>d=o#T@tyW*IN!d%@!f4JSR3EK?>N4W zt;e^DBg(ec`0nGY`eHM)Hp~+jE1ugHKe88ypK5u(uHqkt2)jdYIc^_UgXbg}Br!x} zw>Pu6uNoXbZ@)y{$qY)AdLPO_lfy58CR$S>LLPMeJjl!sw7gs*<_#$g68yv?tktz& zFBiIGCoS+&ORb#eg8A*^G_Khd_Z2shnwj_OY&>ei&HALxcz$n|X3Ka^W<2L+k7qN) z4dc1&V#ZStjpsNH$jNHad=G7v_zCkg5Unc_wX9?9Mjw{i#NRPYiC=fRIpkCLRIzWO zu}S3nmXNUD(f-V)SE0uD@W9n__H{p!n}++-f0!{K_wcm7emb<4yB-7b zB6rR~Ez>PaDs3E)FgM%&CN?8HrVtmUI(iV36TS1GI6ZZh-N?qZ`&W>^ncjP9OkIr7 zObwBlDZP&#AF$A!gon};e5#Ko++a%E2;kD!F9LEcbGV|61&9`D zt!(=PeE;_X4|n@(RF!NG%(L~|Vs~X>x12_ust&>0Zl(uoOAi+QSRNlrR?P)4qB#E{z1ZCLewqcjueV3dR zz(Rj6QT5!wg!bMW+&^$y@g^_gZJh6YI=v|4V)hf0wP(c>br<@KlPqJgI}*nsI9C*! z@1!zs#x84TOx)?v86$U!Hx2PURUSBFm#=1wJYYuC-s>j{t7J}NJZoeBpiEnRw&6N{ zr*1jHl9`Q0$Nj4s+ogI}HSU|*vg-48mF(2&Y_^+6OjXma;g8}G{OB3}SiKcLx`sdA z#ROyGD|l{^dyYDuw~-7Lnsbx2M4qa3*)%3<++QQqR$Xk;9QfZJ=fg|Tx|s|nZ&zmEuNQe_lvVLA1_Xi z?w~&QD=@d{)TW*3;nqwKe?Q-Y(9eT#^+SN*bwFJ7O-c|W_WdP>w%ShT9Us=l>&mUa zypUD!2CXzb&X-TsoN2Px3)SBxzoWN3Grg^O){o~YpLu<&@npP{enpBWDcQ0iqhZ(` zG3Lyf3^&RPeK<~FD%JpREwv>-?qTxTD7&jF29e5+U6ieWPr@6zhgiwZc-ZRZ=r9wF}K zUQ*=VFB#CBE?>-vP~9{bw`D}5yLvmO5IF8omY&?s0-ze)dAR(=b#SXm`#tNQpb6pb zU_Rl%^HUs5Ozy_P#1(EHyL5&kyWd4GW$1YSEDCbpwa!hBFA4spFqCq)D^5?%ONC7& z)B7FUH^x0b+PHTgu~kyPryAF}%kiC*_UX1EWXbe+oF`}HgO?rXSa}6NjT-7y7QEm1 z02+;~EyJuYs76*E;Ks?xX$*Y+W?}woK7U#=o!5LGn(cu-7;Jb-A#4l4E&T^?j&0K^%3NTQ1%-5aVj9R({Kl_B>< zqDVUL@^iTgb2q+2@Re>Enz#w{73A3XIUCaxLIq1eI_b%tnTtl}yp2vXvdbFXhA5fNo|Y~+(gbKd#s9DV z75QuKdnc6GE8K$?)tow%2fh!xqnCtBWq0?DbbW2^!9GDZ17kWZa7&R>@J9A+*W!zt z6QNA`w&yOw`&_19VryI;LFY$P{-#V71|$k{D&Gr%b* z5s_J(%T$WPV*^&Yuh?8c+3z`Nme91sE&KXonT{yEd|UyYT*oh(g|=PDYo6y8Q+n|7 zA0bF-AY)X9OMXji)z81gk6yn${B7RbW~H&zrMuT(6%J9cKn$@D zJ*7w7$PoYG9zwUVDElQjRo`^+L9^*$pH{8i{DLvsLEUxD3RI5xe)i zjJiKtkiGUNUO^@yIk1np=tIZfh?6NSmLby+yy)sIHy*ovzM>Xs!IZJ>&BFHmkDtei zYjRF%3%4he&g;JA^^ee}I9bau$UJ09i^6@?J&Q@lX5S;3QuBSO?XyZ<<8G&vbtOR* z#%6s#VHgVBpFvu%FpwRAE z5elzGcm%6ur`}J#>=;FC76)uA9<`;k)43F2j_=!cju)LScg;L*kVuc&(rw{;ksVto*I1+8iMh8!YN(vR``3%jmDQ6h zsPf=xEmZll+l$V<%qOr@{snn|c`t+EHCm7zcXREKX+oRZG;tbDq(=+-*PEWace7M4 z9j?^SspXwB7b0bF&Ya%#%X`~Z+G*7TZ5U?(i`j>?vJ0(P%Z=wVITLkV$dfCrT)L`Y zzn|`aU@7C*;LlTg6c60Ha(56Ljo$aNmGu(4YB2SU2O9_QEd#BLdir^Ma?5~UYwSV^ z?v{wTN~FE7^bN6UnM%z-L8TvOReGcG+Lh3A0n@KjPO4k+;HS@{ zeK{Hno8IP^wV7DY-iVs18kCb_8Kj!+2h5pgq|NTy`wRN6w7EY@m(Dz2^+nf8B3)~3 z3CdaH>t=NJ;?6Oh>LpA2TJE8575)zt7!6ZA|1Wgx(;MAg8YR7HgSy+?WM zPugVsTm3>KKx*5Pnq|{^lump)Id@fV&|#n?I2Xo*ZVmZM6Lr$XjW;tzY&BKI7obQ6 z+!D4dwo|dfmB7eWWrNB)rScMk7o69X2a-kTzwskhGnVp5%PVwBEIDymqH69xl5_u( zn{59oqw5&ET$kvv{ylZ!$IYb^=O%(HXMA-)UQTKI1d4ljaJD9Tg^ z!kRh7vErp<7^ob+=@g<+_mIGI#RGe^tNg5GFe*_RyabAXH}+V&WV*E76`Li~hqtSq zQ~6=0uGWV1&^)JPV2}1~>gPv9s#%zf73Y1H>J_b**WVv|sxP50RJMV#$-YZl=103L zI&={TbpCPF?7E!>L$EHg$ssRwqE3?0@1LGzzkkACIP9B=2uX34NliCn7pX_p&f={} zv+mnJFX#8*cPXEr@P7c`C-VPZ{%1|G|LU(^USa=4L3z=8%KgEP8~duw>*Cw>z{Dvj6+cLZ@T!P=^|&6RuC|DM89 zn9KNt1cRC6URSSlIfOP9r-w~dwr=lkT*$VR?B73P|6Yx2D#-oQxxMf}kajI;vE=;P z+^0!#pEuG$!5{dlvo{^Imh`Tqn!{)(QD=rUagnFcS#rGV^6tlUbSi!}r}g39!0|h> z)bAaDRj!WHw6!Jae8gM#+=F|)l*^hUuCMxEf-I?J*b|j zyPIU3ABRy&M=AT{Dsd`_nW4TR!zi6wMv3CuQwTjS;j!r4QL0c|5@*1_c#?7cq#Z~o zSaOaZ=k_dJ!(hQ3gM!(l;#(2|&VGyW1*;IZ9l2^N8GJzflT?2xY8mHtsx#LPmb*IK z)rq=4de|O0*~6CZKB zBoa4Rhb4jbN+Eu-gn&hSwcVD$ofv?Q7*v1W~m)Lu~N zEfRA?(&+Xf9HIPM2bLnbyA=tMs8i6XODS~T!y+dlnU|6&Lv(ZomZA_AnQ|FeqQtF8 zOjLcd*#+HrVaeYi+bDxbJTO9ecJQL{Pojsv+Tm_yRO9RX&QweKAuI^1Nl}E=ey(bO zchUN=d+y1Jx)TIby5RYfJkU35INq;pfhF>qTBPYX$bgmjl6zvg%*S9IHB@-*C9Q(AbL2+9Ye3C zg7Qg=CFj-V9!iQkU(3~keFYL)FOHa(Rho1c*yUF8L&j=$vdIuCql9%i-d)UsIeh`T z$o6;?SFk%dg8L5OZl#Of$NNg_XrTM4l+i#hP)bC( zhfsT3x`viO+AE~io`=#IDy6erWomT{Kd;{(7+C>Pzd^wWB5(6ewIfsV8YzHvhW2<*n+hZe3 z4A42q%c4OmZurmtXv?4Ru^eLP33=V_i;X*z!DhDn!vQG2``LdIwc3jds-KcoqbDZ0 zMzU%;mtt4{nv{A}rpzZ?nR1q2g{J2$a}lq3xr5Bu7|H?l2YdIYj{)yjO;2u?w22PF#e!1G)ns`p371YhH; zIzq`@L-9VwkyD!HCU0sD{ zJI{8i1L7;YCTpkgZYCA1X=F zBDy8GQN3zG}rRDUapn z#PYdoFV=nYSbn^aPjHZ*WTf3eLVi51l>VeJ((WK3KVG2}>LnRwcaV@jV+If?acV68 z3O~T^mn)5|JABsFN+wqWrR3#NvVJ$NW^=P@djFhD4$vr%Wm3UXeMxC|Nuii%ji=mw zM`NUjZEa^gern_IsORp2*FX~EbMmJdIN|xgLeB1^U-*2@? z94)+3G&QI3L5!vAK z*s!A1Sd!vveA2!M2$GO41wa4LCskqVkkqffgQ!k5c??O|o-zv$_Y~5KnI!B5odUK! zzy`Mz(~U`IzrXuvEk3qT%v1ZEAMZh?VPtW|svj~~3Qjx8k9Xwj0?EJj%9xL_WWr$B zIR~r@fVBBDKbmb(jU=5+QrV|IDZb1~jUnm24}8+qCTLQJWX5~|h7#5KQRd|_e#`?| ziIc>3e1n^326%&eLlMOqaAT1;K4|bi=10k`4dm~L6u-Ya{aM2Xlk;$ZdH4u`(N^+L z;QKc1Mf_6gYgAo`{SmB4{eVMY-qh$UQ{$1|OcBPB9Y=tv!lXI_O@moH(C?R>W){e8 zctHXu1LWudjQ*0bp#gG+%$*hkWQ{FU%>daO{S(^t7$C*!jkwsc!l4-;oPae0WFg$r zJb&=lKl-)wzq)01;UNAI^UPQ%v@`CcoC)=&6>Y}*U4MFf_LaW_c_$=Jh^@OH-Zd*f z^+Gn1ef_3+E%j&MRA_<1=Qm{K&qGVM&3_;(|Cre6dvvVr8*v;*z zU=D;GE5W=!GdJD+GKkW7CmzZ7+xTvn(^%KTi4nhS>sxf^XS@xmQ{-=1Q>A_9PL-JW z4Q>jX_4?delatTO%=T??UrT-Pdz|)S`FtHOpFWqG>S%D+$}P$7H*7LDxUnqU!e!L$ z5pbKh?2O<&?P;2n##-TCHaob%%@E7e%inFW+u-DN*YCO7=;U))2-V;as;^)1=}Dm4 zWGGC3j`QpBcjnSS-&OWJ(VC~@T**Ef|7j$Ws#jjPg|_Bj0kcfCi`L9*m$HOKz)8Ys zYvyg{6P^G762`BY*TE-D1dk*PkJZ23^*pQd4Gc-jerx7+@AdOK5dfDSyGL<)Xgha*gP^V~u746XlSy$DpA@S;4(r3>KUTPFIH}9_5F+F% zOWn-X!qt9M@vML##7231&HQ*OUvWkA)~e-LwfHw)-F%@XmclkltWx5d`9_h&Zm`Gh zIiwg#7P~$yr9tKiq!>*WyCq&bjEdF&&1kaNo$d)cm@-C`#qPHj7M$us86(PKn|`#j z4Jlnjrp4~B{`63;odq}GQJ-d5{5#Bv7qaP92ohZ3Q${a4jH4hJ-d~bWc;d&P`z8JRAXgjM6w*{xse)Oq8j(L)WGUn zZw(V3k*YSbw`ivSo!>%v-CwM}-xJ2_VX#-XbOK+VEP9)GxWU{nSq;31j?+IQ2qf@t}xX&yx@6{k-~jAw%nr9BKktU?q+zsF z{}g}xQuTEA$BwL%JHko3MvkpHD|>M9 zN`+agXz}J3Z3WjO2;`k@p4(idlC|~=bnZ$s?q`eqYRy}bn-(XyA@0qVmxid-vkg%O zTJUk7+3FrEq!QCLF*RHqrWQ*xVgdwjcEGB4#)c^y8q21nNA^``KTJlJPQDeAV;xE?V7OZc zRYr+9Atme=uQ4JWHf1Bhf>~C_=C*5IQ0qm1Ya=y+=fb)y{!ASeRhy~4t6aNFi`@WL zbTadP@VTLUyl8=k8@!jLtL`-_y);|VRc>oGR}*y=N=g?@!Ae%OLzu%}=4~S69-GO) zTzDCv;ex4|9~9yD`0U?)eel2^{Agy*HNdnCxw3QiG9p7NaaDHxV5aPumK2W6xBT$^ zRb(enzg6fF+XkK4ea{rh%>NLgbip|Q!i;{2U269;yba-up3iRrR!&LO{lFt`A6B8W z=kVQ~Y|8V@?*ZMl9UMrM+Qxs{3Tg?%`Dn9N(%|e+A;o4tq>#p_UE3% z-=1Dy{(c>LP2T{$YR62@G*0`q*N9#%DL(${fv`OSad%~Se`D3A(LO`bba^Ql>Y7e| z;BI0eVu*HVU!Uy$#)O8?w;bj2 z_*wa=;b*`yBD(v2V|31il11~}swc%koMZ@YMZlvQuA6JZVSQ^+!SCA(vf5h-585hb zVQt=!vuVWIy&`INK&IW=yj`MfwY2_!kv!?+dq`Ft{LxvQWRL{!?rLQq)aI@tMa+!O zZ*UE=hWW7#a(g}*+NIHZCrr{$~Hqb5Pa6Gh6!G*7r9x?C)UpH$nZ` z79)`h@TVE1J6}>VE0l zJR!Tyey#i#5jH)2njZ0^3GyC2Q@C0PdeQ}VuzBMCBp=xP+#5;PKZbD4&7NqDXR=_5 z+KE0Rcy5YXl>L#Kf)4H8O2#)YXzCW2v`10cC)g-R{lf`^0xUSv+{34_O;|E43n#i zu{aXVbL>ZP?PeKu=-0<#gnX`VB|VL+KFln(=aydac-X4(OnEYhw~bXFY2PmF#8<@! z!Sg@A0qt3XO;;A=-FbR1B4~Au%=wdMf!R|^gLY+HP~3M8?`MVa#5q~<#G``RI{Fwe zhj@vfsb1ytOozRaLGB5(Bw4h5*`O;_q;jid?Tz}9tgU*OkH%~HQzwJHY1_I(`G8(U zO+Au>a(AU>>iD`6(tMC*{WQLYE}1LJq+K6!eehn@YvCc9zsV;oaE9eQiRR69oylix zbFXJS&2CRzDbbz?^vAQ5&O2)h!Lq||P6JL4l1o9}$XHL#uM)KSm$BH-qcy5jQ^l>s zq1LKN0rDE96Ln|s*I)ytEGhvF_aa*_8hIdO8xq2 zAD|Tc+rbg(@&lvw(=)iGJiOfK$uUbgD_Qptnv+*C86514PhVd4UPl?R_d`fJxdLoWR;xibUO7RNL6xk#P|ybEyJqfsiHiaW7mXR_TXQWKKSdremhW2`9<`elc?F;l z8zMrSwGg{5S~6guz0WL%A=E2&7E|9xWT=)oT+mMoiF1U;`0(JYaK#4Cv&T^~G z_GW`?Ht%Gtx+qh-DQUHPs}Tyk5f<1yQ+sQ2%qYUs9%kzKPVm@RNTE%iO8*rly*=G@ z9~5Bs0sqHWe8d02F0-4o8iI!Y4}LRoi@4<`A(prtf}=U#sh`Iec%xuA)Sa!Vu9Xb- zeUNwhHGbCiccWeweRnvGHpG|fvhAT1bq`5VduEkuf8)!74dT|1r&ne?=b_md&&w0( z;d=Ni9M3|2XOHLRXgpf7FrJcOjHeMJtYthm&x*!#@tlHFMiIO>-P0D{kBdFLa}8cD1oQ_{t3M8r?BU%v1MfB-UfBWb$8u-E zI}M>DCuN_165eco>N|HE%q{kj^wi)G>?Q+yWCZr2j|}WcvT7eHZ`xG=RIy9|75wN# z@J>XXDWAdfbXDIBk9y9q)a!7FrqNVB>EqR*lB~Z*vaWV18m^xn=CAhof3W-q$p6G0 zp^oVxuZw!S5R2KwJ7$JAS}>>XNCtuL%ig3mQwkMgm<$4sP@iL^YG>NV;Fl^n3vC7s zYsM!kfPc^qPx4{OR;xDm*Zh`OxWOgnf85+y`9CfY{d^wzE2B)3r8eBJh@HEJcy1bx zZmL&wi}yqib^A(ac_CzX?%|8OLcW`5#qlk2Md6du`a?pkKP1%pLqe@Tq!2A#NPejG zhlE;xNT~IP#L177A8P#}q1GQ#L3#!0q1GP~YW*Rh*1v29FlMy=WwZP*eFT@?$lr}F zvNk9UTh>RN?=lR68E^XI$<}r8h5OSsPI)kTc!CokI^^~-K{kd#)J1!~cW}aXU+p_g*c-T4w(G zf)9>uEsf6Em^3P-;Yb?2`}cLFQ6J0q(&#zz>FW~p_5P#!zQbkKmu~!v)s!P2Ji%RxN)LX3&+F@5dvgJ|%zr9?#k7Zn=o_pUQivOhyFOMF-!&3)gWM^1Tg*5UyHgUW* zcjg40l47At@WQO*;JGQnc3Wh>*mNqz6LngdnkImlFCT0;cjprd8<`x`N77#7CHb-x z!r6=P+RGj`PPoQCP%z5zlKe7#lntIM)Pza7A0H!(<$c13C0ni9+_(A73Au|{qHdyS z+$6k(`%9VgeBL_~+-~^d@SdH`|CoqOyEs!14YIH+)KVhgCbCY=1tZ7lgt#pqHYG4I z^0)QzJ)n8_87y93;l6?$wQzXDkX5jYCG)U1&V41z{e!*xLaruNgFAo)jgo~O_o{6G zyr}fG=Kb|i7jBE^#o?BIG;4L0pP};mnek!iUxH5vcZR#mmXwzEybrY)@A~LgE?@r; zs!*;N5I%43L70qYCuwhz9t)w`4u2j=JCgLvj=t1x>)x1S46|wOzHg;rgwGW}H;TC{ z%?i`nELPneT?>Mj4ibVFxLbZF;9}J}IZyJ_mfYYPJK-QYIIG$1KX(vcxlv){BNg+vYsasDiAP|89gAC|`q;2RWrRV5dB zf$Z=oB=XTHxy9f1tqA^(1tNNs-b%lHSGlj2s((+9&xGNiATiL>qw6CAJXXEjC+}m) z4es|A))T9i-OVsphR7K9i7&0g8SY)mgm~MW1)y4yws*ZS^1}4VHbGLCxTHZ~wCIMX z0aTst{s0;yyyGM!?I?E;8<1hz7^;vqgzoiPl`uLTjZD&BBuL?OBULEHv6 zh&CwIIwbcHnB@Cp`BoIMtMu$rJ$poX>`~$RYvIj|M(eLHl4-lJbA|g5O)GbW&KfJ6 zOII}^zgr)vua^VQug_NL7CD)YId&cuQrw3OL~uT33;f*7C4iBHeZ z?Z_7hlQX|V6@PPBx76+=Asoio1qJUML10LmRIUWbt?cQJ5j?f+y%K4uL+**>ZZAmI z&9%lM;(U3Igf1faTG8R3{o(!Ty>1GrmA5Z|yG|eTGsw%~J6kzB@S%V18in=+c^{3n zEvHHk=9(W;;V9&*EpR)U^2kFOva-w+zs`1TSg zjIZ2Xmn|S(dE3UfExFd0{iO}_-9}b_rI<)O0Xq#GVOrWSk0B7 zXf~n+p2a{c4(6uI+qrS_>v>P{QDTS%Zl~XxhDg>E2x&|-&#R0B;H!A3SlXecp;K>? z7KvuC+V1SLlGMGvXJ`og!<3IMuxxM_;)x`ft#*f3M+;x(1S{NR3DBBGetf~t!tv!* z)1>PuSLgiP6yNo4V@><|BcuAc2MHwMC!iuIG3=z1xvW0&-9R%=%#j|VCkF$Dakil6 zE`$sTLeI`2F8(q3Qo;FQ5PP9-%HB^{t8?XlxFhM<0gEr4iiE@(GGD;DmHFPPsSukoSgL0#;gGTU)+a^i9~1`sG=$F^Q| zx%0SEfXL~=mbw^;=dSf-k!rgcwDYkg1nJYi*>p%-^Ih~SvL8D~V87;GcvOwbfYYca zG=9mdCMq7%W92nANOz|dT_6T+?2G8l6w7=u{Di3gm9J%?*I&3(d|f~27CG1W*&XX^ zCu-31`vl(-@*q_f^7{kE?}?D#<8G}2yu2v5sJ;i8k_IchIe%Jx+!7kx$!tBq?&Iqx zM+sg$4EN50k*spa9t7>$%T>YT{}pqHq}@o;c8`(Ns2aIk{*~3C-YtZHYP8KkDHclN#O^WL6uArzprTZ8|jLxv(0*a z<<-`IX~3fvtCPWdq0`WO9S2bzX|q++S%6n_0pOhp$A=-6B%MoAWr2GW2Ueo4lEU(M z4B@lsVE4SdTH5IZch*?aH+C_%sB_s|=mj9eQ3dRRxx*-ssGGsx`s?|Ft7KU}xk_fa zk+0b@fO#DM9?vj_^Suo|8m`(fJ|+N`;RB~yUgi1V<2b}u3qDRF34AQMGaDZ#QmHBK z>Pd`td?S=h^6hOHB?=u#)Xn5?{SEv9B~R@klw9owvOSJb{e7Zj9el*;(mkGDFFxd$ z9{?<(xFR0wpXN_G`7Y>b?`~mBnFFx(B!Q^1N)WX#yB95p8bnfMUw1e1!78d1jgm&+ z=-YC>{&#MSwbXQ;n@-WP;94=X?f_Nj;iHsPMVVOEN+LaiyW56b?0WfH1f^Bm%NXW+ zD(*edxURbQ3@Rk?LD|`KL?c&);+ikk<0!l_W2b%WrcgWmb4JS}hVk!d;Svf!;vJ`% zS_)?@@tuM!lf-WgH}e||N21d{gWO5Ov%+CtsLea7)$gEP->m4M7hY%+ZmW2zLfUsL z0;8}devo(jc@XPz6S!R!&ejV__z8xS8!ro!D+^A!ozMCBv5dA;DehIvYqxDo)(c=Y zw}*GCP71s9?)U#Y8*v2={ zZn3OhQ(>{{yQn`u-jg0_qPD$TEPY)|?1=z*nbfk{^YU>q(6GCU-7r3_BR4_q51tpR znMENEvI6PL?pQMf{r9twg735!2eF?j8A7fakWqEn1#3dICQ=8)s?k7W& zi!SC5HBgdO^E)ugn%&TZi9ZTBU3@+jY+iW|Eb%2ysj@UPf_H36g9+TEK82B=H?TB# zTQ@0bQ*>k}_xztE`OZ~O>4JlbeB8zDb!<~SlBk>FlXnf1uTb(W^>Slt7GI_w(|Mbd z8(r=2dv`ePHKzW@Jp8Su)3^Qz<)hi3aiDc~Tmc6AuHwCIyxgBB2W?v!z5!LP!*Szb zVI+p@F_%(7-ms})aZfXpVvrzKZGlHHP@$Yk?ozoi!lwx&>h%nmC>3-2JY+=WmbDY| zo2Csqp=af%+@9453f^NXWw{Xx=1ENm1?;7r*W`{E$||ms6B|6Z@M|+*hyotnDR{-5 zL#<|f@W!W$ns!SLIw3z*sDcZuV2VR4qcdExxiRMn`SXW+E(!83KAVC39siX(*ZS8; z{lcl-kN8^=`A-%w{D=1Eu9q9?O=f)ocHLP3_2MJKp^2@SKXlm#K6cx(!lB5s6v?tp zf5-?n4v5fS9LmVw|G1^U(oXI#OVwn{TzU&5E>Y(xT2Q>J=lgqpPob&}pCt+H-~Yqj zm%v9=Wb1e60AUFo#9$DSD5$}>piu!EG)+2iBh8}7;tFGwL17djVHpsDoe1rvfv1i- z>Zs$m>$r?F7#1}FAs~d{3XG0}E7i8hHb5dm|G)3l?e5!2*p&C)%=`WQ8T!_K>eQ)I z=bSoKrEB)_u1s90iDyZ1-aW-^fs$E9B+~|BlwWtVV1fT8HT=%l7NQ87ii_gG*V^Mp z{k;NBgCg3*tUvvPI&xiJ3 zKYf3x?gY!b8cF}umL7PxVfm%D^!Dg#{rVrZr5D0TUO#=hE&UO!0`=3cv!#EXu!dUw zx1~>jOkKZxM_YOxW<~w<{r-6Wvuhfre`-tj&TE*y)Rx{R&@lZ`TY7uwShn_il8B~T z>8580DY7GO?WM~duLO#0Km^P%c)bPG-gCv0N)+H)a1DO37IZnCZVG*$hWA;e>c3tD z-iBg9tU-;hR=Pd&eawX`E)(e_D|GX_cEGF>ad~1mWC<+`Ro^Yx!t38y=r-YjDr{du z-gK2d36T8zBgL6K`nbI3$wloJ&fbr>l1VLb&unBxNl!=d53VJ9JX#Kh=Van?q?PDAy$;o2nD2yd4dF`-sS!FFZ+#i{nyKSZ zgIpkmrUpYIRppqUymGudS$8|@%teJhbD`q{ur}j9anx}(#UJ2?_8?UKGth$mcL$W} z_a&$a`*nLOSfiNau9JKD=)09CRDX#@6}e)IAl=XG;sc<$fc%ywaQT@50ew}W%a!~T9;ElppH%s8-@QHF?QPd|6j=*wm6qe0cFEIhL z&@D)CsV!~r_y`a7x~|g~bL-E;VlCSKw4-nT8moQ$u>E^4jpJh-DCgMPhki9AraS>s z%^$)uEo_iMbVCEEG%HjKEw_GWaw;$x+s0;LC1znSYZf+2F7SuU1l%eRZGrfP4`)Tu z^}sg`m$=0jlOX2<7(IkBTuv60oAar@|C-b&cct|d{!jz{@Ni_r5X~d`4E4X>2Ivvo zSNi!3>_3VzL?5L+x(yMl|99#B2UE}CESBjR$=XuPmaH*M+7 zpflUjWj!2crJFc7fT2C?dbk*v;Cgrkez6|9JIZ>v8GP{p)q|Y00^K^Km!pPf|8#*@ zuZKOX5x+VCa0^5*h=jVL^LMeXLA76oni}vo>BZsr+wU-$E&lf2CGq+E(+bwMRyBc& z_sjTO2Mr&=KN5fAArc#ZyVM5Hc*1i`{0;o2r=7n<@fG+jYNG$Zk>Q!92bfnmli$5~ zaU4INEk9Ox^mw<5wod+b4Jwo=o{=EA=>gaIKb@wb1wV*pz6l78lWpt^9m=#bK3)D% zT|PKuGuo@W$ZBu*l7>}i)6Y1oJ^!>!N703t^S1F=g5soiq674PM+OwBV0saPs=89p z(KELCB#>$hM*Bx}JnE)O57qF+_|^0~K<;b6`rK=JW>Gg%Cz^AhIjp`>0MIfy5qi}H zU@0E~0KHx%svlSR;!3W^ojzDvciUsC_UsP;A7NDf{&X4 zm3oW91}DGNC|`$YHWsbND?CN80Z|h@D?kH6AGOdaV;QXvoqws7KbU$-G;?1JVg1Yq z>;9P0`r#UVB>qMNG0|=DH-GyWf4g6e0R0~gf9t5*lkVJmq1BzD@DtF+KzDDjUK&1ve~kR?w-?0WnMdK_ znD|>1KZ}b|Qux^s+Yjggjqcy_xET(=(i`d;QAz~ z>34sTh92iZqnYmpLhENn7zoa=(}zX>y1eFZy`ojLThy=$i~gEE2}+W2mv%8^pOF*zW$Kw{GU$L@C8$^ zk7m9J2(6!4(?^11m@faQF0bjMTeOPZZ#1kz)5kcgJ^!?<2K4dWxe54qv~8R|sQwr^zrv| z67XTB#p&ZMF6PHJU-Wo|C!ip?8TrRFG$8a*+lUIJ^DnjX<6iM-=DrxhM(D$u|Izw! z5co*zUxl^)`S1$?D;UoA*TK`@E;Xt5>+Am%_ zI}Xo0uI@i?{kvW8b2RO9zk%&r^n13g{np3aKGr`YVZP|~FA5FmcTKnG`UeHQK1oLH z5p}<@!T*cx5hQBZY-x{}^%N@prS^#HEa-x%KV?~+`4U~M-x0>u1*Vk=Bqt_TMJ`)AX@8 zTE$R|Mg1x?KGy2|SdY>g(8q64+=h?rmT~$x7YqI|;v-5Q*XS12q8Cv`gY`KrMjy*s z9D+W+Is^3avaIfF)n8~gkXn9*ewvoRZ$y4udaK|s5g!(P+=hm2_~-}#qx8{<;QSo= z7+|$0^w9zh2z`u%mfT>xgdcXa@&{8t>uP0w3J9&Ane@S3_upZu9j5KHUyRi~gAKMj z-wl9)7Ejaso{rmM9tcj@!8cK{k+HZ0rQk}k*NNR3gYFpV&$Z#ZMSN^Wz4H)UBLY3V zfgJcyq!|7c$%g-jq~Z@e<>Gc5OrMUt20SqyWJbCDQ0xY>4+=A`oV>WfPPvT$-$)dm z`-P43>aJuh@~f~<;tS&G-{9B`)swQa(2A?{ zALt@c&^>1_d!J=J2fKF_dS3RmYyMoM7x=4cjbDW24)N=0J;odXz%;4=OdKQlcD8YOjz+P(<;-bT*R|7`%E{%CuVy*{VzCyfZ zyb*R_$`P-c*kX^Y%6I>3#yv|=5*WoJ0iE!OWkqqir~EcVp`U4}g9+IWvS-{?0hYTH z>6xTPxT;)_w{bn?Hz9ktrV*qb$0%CHGlz}vT&>A%;uuYCa3vnwU60C5SYU$21$tD} ziW15U<8RPW&o#O`q}P_+Y=~VLjn7`QJ_xtkb3!6hG7`>h=DNZT7za&hII&;Owuw zKRWxpfj1m*Rl-j$etdy9D_9*^LY1FihyzEon8O>|bQog+zQEsj*RkdfK+w-%2iE>p zE33CN|3LIta3BX5g$t$j!nw(41e-NJ_j^UB?oFPXgq!!v*34`kdC!Qf2{&Kj0-Q`; zQ~aeDSx&%#5RboW$w65b$cR^nN|K-kCnDVz!upnp`qZ>S!9Py9;WX3~Y(aR+1?8^% zzw-&eUNBA5fe5`mycrdztX-w2Vd4(=3@e{X+;_HWHk+yp@cx{4jX-s!$ z@b31PyH3E@KvR*$Uk!GSx2(n@2HfJe?H!KFZG3!S*{RSJ0#A1xjRbfY=K7Fn2)@<8 z7odiHiaV{=;!djl=ovPv4$OynAW;DFMDHS9e z=ByO+hstfOXMYm`4e(jc(=~kCn}bD-$R%_YgsvCGvEVWZc+G=+5NxDI=D7gWGkdF) z52lVoJ1Q*>?;Y4&0P1D})T=E}fjUpCDnL6#jigdzruMa<9ik>c#YRLoMEJ}d>MmGh z2IBd)OAwciI4^mjI$f7)9V>OIF17mRn(%u?8jBAxNAN<&x1{~(We;BNs6kF zB3Q7rtI#DN>W*CL$R#VG*TlgMY`hon*gBp`zZtvp7qWm^#RtCFeIMLHNjg0{7oE`1 zEyQcCC7m$Sli!;Qx-OW3CEzwIaab&7RH_l!~KFW#@H!wmWB z2{J?KP6ow24u4sht{=j~WIxRD@G!9+k;nyy(H9SWh@7*xIyhBk0LP*M!9NhOoGO`W zx1KvMGXhh^L8`*k#Vi?>V!1k6l^qkVv{*LoMu9x1LVN;XE5MdGyh1qIK_f}^KM9?o z+}yBgT|PTn-UmjFOL9;!%T~Vmk;;c}koI}xIg3@WVcB~R8f(-VFvLT&9`&DiNtXxS zd$$$5&+Y)cpZPTKuI~>k!=?i+%ZT3ei5Xjn93l*<^T6xPPD3Ln<06`*K^Fm(L*NLQo4pJl0KqMCr8c)iye++2Zrw2XT>9-l(z)~;zu;4tiWQSivARX zcq6R()D51OT&XWJIfH11Fou^rU8TI3fc)b|BRGT(P4_a#cQ7eqah>cb|BQ=jF#Ulh za9vKpw`xO;UnIGr0)1iLUg3mAIXpQIzciMAQI`kugI6?BuYqv+-oq2AJYgp15Ums0 zl%+ho@g5wO&(t)QoPd(z$tsKS(K&xKB&P;3_W8B)I-wGoUsrQQz+THqX!^3JZ1d|; z>>D&Tza}9k<`^v^A?6hw$ND^Q}0=O9_uDh@=>hJRfA|2HHQlDg2 z2raF-C+A<0=65@a72-?S$VQr?aE^<4f}Mgtp6pP4r2K4r>hhzl^6MxL*vjX!{6i>j zHeFc@2!fs7=8w4+6n2v359nH=I^e#lU_qLh1Y+EQrdqJrW_ZB*`vj5SQPgEjTt7ql z&U6j#4fUFPAMq-S;08N=jO8;Y5=rmWijkjqjAq<5IKB^@9ufa0YRFwGZ@Sssx6rwd2_&HR-HldfE_9D z&rET60?k}yk7CpYnk#`-Uv`xT_q&}3J2bjoL``ySPiI4a$fzflxw;^5V~T6Z&d&Ns zu(PhfeW1YA|A67#?0S0uIyWhzPMIsUbsDqK_4XhP&*w&Dz0Mw~Q4u)I0+rvaayn?p zj8q9&=-9|PZ5+kP1%W{+9!9Q8^Y|mPT=Orb3~#31cOvW_P3Lh`Npk;$Oyn`wMbf`) zAt;=LWR+LSQJI2IEZ9H+MSI{w-UtK2icVgLimpVmfkPZ`Q8@FjO!GspE8dEP?yO=C zWi6B#$&(n`)x=U8NUQ#L6Ri0Srt`mjgq?p68-cFMog28$=VlmhF)H?p0dUsFtf~Ae z19Z{e)wxvg-fD$yHo#H0MxC7s(xgSD95l*>?6ABss-J8gZneExefMW+xfzSn-E^(m z*gAfn+!6E>y*`_|w#L?X+%P|uytMJ<-SVFp5G~(ueMkAMBbINa%Qsx#QTjV_#6z?m z_1{=KOt6s%KfD(ypWs;jbBC_N>VLGn9sYRvUmvOb09`%-{@{=`5OvUjZig-{{>Yh} zjxBTzYQ}s{AKKeprC}tP3#t8@B~*po8(gIuNh9D+5W6dKB4ZX76t3QzY$mzNctC4! zsYzuZsR*XQd236UHJJXFAKOBCErSZG-t(jKLO<(*Lb-w&yru*T3M&H3{Gv(d^gwUF zl`}BIpKB|WOHQiuRF(QG5TcDh*8&gWWLzBIv>XGD>*?4Iz%=h?7XWW?YuAX674x~I#qI4OHbrIkN>?Li1G#`(JW#2ym0euAE`J)GBuB^_OIR%sR;O)q}9uU z!sV6Uw4VJf*OFETDz~<_?y_lhupyqIpspaEp=u2=3QgiMP-+s_R^GjMPz|9Z%4YLq z95K*qYB|tvAYOez?{;gTt4bvUdgIWeWIT+4V{!f`oQM1xZiujWiOxty;`wjV$2cCi z3PF6()2|Zzi@f%9Q@|2T4W(iUng6g&UJJvT9+%gw7k9AOtUyk#;<@HNjZ`hXwK~WV zR?9>ZPJNb{L_PZGCXQ?>Y!c{lt@?rnCm0MaM%*;Sp`uJRM;E#?R_F;`Xrxu>WnCz$ zQwh36=(V6aX5wt5fZjjaKSVHtfyfFiX>LD4tJ6Q#>1q&+n>3bnG79ICN_vT{tf-B@ z^<3*2xFearqU%Y(Y7vhs22%@L6K&~f$sna9*#9jdbTsxVAcUqwCn|8)2RT(Lyn`WA z7Il>KRjC)SG{ntI$<%G)Vq4}N3+q>Gp*xDXe$4*tLutDf@>(=lBQeH!_IqMsDeWe!I1aFJ7#Ku5yIoS*CP`J#?i+p zFg}90mLM=5fbN8mn-mooPtx|<2Kx_3B`R67;zr zjrA+gNF$Tte=sWNy`U$u@BK>ExiZwbOXa>z^=ukPN;zRhN3tX8wK%X|Aa zc)C=y(sA{}dcKE!Ldx>qkNZIx>;7sFMTS7rB`H8JDCrW+*i$tZ?SUUmq!>%na*kn%M`fu=unw(6^D`cHgv%_2{X zVeiOZc2!MB zTHzx#ALXaLbc;|7UW87?>vu3jr&xO$!Mq3vY~P2K;m%!FKvvk&q($<7q2@+p^=N&e zE2IYie0ehfdmaZs8*4g>jpb#=wwBE}>)M>7Wp>cB$AldPn}W>$|rY7S8J;=}*_45;IwDQqTRD@TAdzDy#?a#AG0MC8n1pJ7i&d z16wJVfq;{k^c$j~YB_ZWBY-<8Qo~Nf4!B+F$-pau=~tiyt1s7UcLUznfKM%c{LE`j zyk?Tu-K5x=Q?WwcyIMk8clBQ$9XTYM6`o4f+M6Rkp4nR{u_IKzc3jr0o_$+9NHdSC6Yq^`OQ^&}sPVB1M^+%FpO;;g4Q$`HBo@AMZBI;U9$*3A)>6=j%4FXNCgKY{YZf6S&?*5WWY{(H5CowypRCPcSzrQLn@xc+Da+ z*9hL4#xZZ970p2JmpJ0*aInw9H9~8pUGSwgpobOTwdG|ofy=_J@ndRrGSJKi9dk4` zsf&BFqRB?^B6IIOF<#R;j2V3=N_xtB5ElWO`~tnhxKAbUHgnNHm>V8on8{&KQgJ34 z>fXBz8Uoj`sO$7VPh{5_PdCh~yN+cl?tf@u&J%M*pk*w*38mrKX>io79WUSj^E0P= zBQx@UH!8Y*b;tuIX*=ZoMf(oI>fVAHn3=j8-(0P_TrI)RB)Ca+r!sXE4hNdkEbXgn z=i>baxOTkHI{i^wdI4&#pFZ7|{t4v8`svr%(z`&tsGsh(rC$pxOa1hYI$fRrd-8i% z>17}#H9{5|kK`Oda@& zf&I|jnZi52)er#0z#0b1v2Du0G6wWDAg@}+L1L~`Z)@58D%J8ai78M$KnKX2t15Nz9_lam zNz8d_si2_f4An;`ouUj~yqz*IW+-KQrcf5eV-bwwLvl=Cntra!)$}F)jv)+$h=~_m zV;^Z%bR$tSeE1o2fE!D-}E_zB>L~F3N9SxJ*V27cgDM z9W<>v;QH+i5Jj>`$3@)CfL9|mhR|goYWZp)(pclKYr`uNURB*sP^W=0Q-Z_{L%*_?7f)A1!gs1RJ`ZY#|x(LyvUCbbg{;` zN_XNTINXISsz3Hk{nOKuirV8EpUkSfG>{@z>72l%6g3>YW%l&s&!G#?fDh>?QfV;# zv#&u5!PMe!+B(!TldyH^o*iM9nH@dlqji?WI?E%>a<^nL^OD`Qcb)1f|CP@1kk0WM ze$;5@$V)ce*|lX6*ZfBT02PoZeHw*BlfAgw)xR9$TVpssRChvOHgUs>Yd-yA+*LCH z+^xFa%XPhD*>Vc%O`4R9s{06hr{FF!ovVY+brW-a2{#X9>E*l&wT##4bzeyrPat&5 zk)C}JfGwB=3Z$28HvG6;rGLh1o{yW;=0A;(a`+uM7E=`Wx_6lGd(4Btt!r?tx)ZF{ zwPZ_*%YPoK#?47^IG9hi>92Fn1VGbugL8F*9SG2s1ZY4?ImXC=in1#U%#S?oRjxs` zMq#B9G@CVp&`?-qI9IDbj8DY`%}a4^_d2V*xJ%CCuXVcSwE;v%@P1}Af&;QtHTHA^ zPK^W%(!ILP6Lp(=@T2|#wbyjI^OA`KQ>XvyOF=>^)89fmC?d2DFp+9nV2jdR6?zFd z{SmY{1|Q|ahYcIX_V#TzA=Y^LvX97{0~SE z4Dbzyz2V)da%&+7Ekb-Eiris!+c z+l|61Z}vW)b4vhplEcvqqKBH|R@o>n0+wpllHzztn|l>0?ytJi>MsOMds*p&s5EJM za`rwu&AqAfJ)`sezGa3(qXu!c+Z(6291z+}cj!SVh8%fK13;~M z?6y>gb9-QVin%g;8V6>=tth$8<=u{mw6blYpt-yXAxkhEP5pQ*ZHp7YZ@TjmKhF*S zcZ9=4)_Gh);%jfv>wf64;W6f$3p!8__LL;7eAnRb`v#M{ z2`iX^GD7Xa^cK3zwJh@i7B`d;UNbbSpb%aa8{}r~YIWXNu$!cD$%b<~s5d|R8+zGN zgzM!jb_#UM5CAd&{6j=HL*ht_6 zo0Tn28t~_R81*8LIv>I_`daolDhN!^=#`g(J1y~zMv|td_@|%fFvlT^R){5Jz(n7E zn54*cC$%8LLN6nY8C|6h;7eRCeZe=_bb-0Iz&wZvGyf$tr}qzBi<-kDq<72W0{`^Z zj-nP-dGG}QKk5m<;-5mw#^mUtDMRx{J3n}OfWZGuesiry<*Hlk84qB%8zxC$Xq)8BpLqi zl8VD@TfG63Z&e;|!iKVYz*R<#UD|Y&@r@VMU3`WC*VGaOK$BD$d(J+DdD(AOE|#QBHFs4q`;BL5%`X8x7@M%}6V=o{NoR z4ulh5a8j0xWwE)(TGagC{sd%s%~k4_K_nah!6q|18ilJ$mSr>rV*3=giPYdbS-zV@ zYTSE@PRsrQ8LaX=VB&<>CQGTBd`qe$Fb*D`F~pU@t*6R0xGLZbXAb zaTM?bkHgsne>4^OaP#9w>!6lg^0>8B&p!J!--~tuiV{dzS0#rbw#JJqIJKHRYcKu3UC-2g@1A)3q^1# zIwQ6}pdFbp_lLq;6`Xo5?V6IQ`0LnAz7@KW%;GaBujV6LX&S1tOQ~mJ2?)TdIz2i3 z7(jQGZpRc5@Jk@evBc+A1cgGLH=mxYMh}H+;%%r&&ajXJO$JLyK%)=!A^|Q7Lr0@i zRZ&SOmy(b{NoWY|`%ydDjh^dQEKK@5)o~{Nrr__-`0I?n^YGUXW7ZnKj-=-Lzb4M) zrq<{2{%Q6fGEZgxSlVdW`M@=8a&@=}yTjs?mO`N~egcZxNkvtZ=Hhd4$ofIV@eC>N z09vvN{{)R@DC1GXu_3N)nB2vI=e~7kc2(|)AX6BXu0lNlJk3sHDN0;Ll{=W;k8PZD zW4*F41JXgT=cTxCo~0Ss!#xC;NcAN%x{Y6gYODX51g`8ntN)w1MKD+;(R?r0JL73I z6BmNJU<&t?|C*o#)9?EjGZzpQL&U)rB-{=c^oo8B29(EV@5T<_H|Gj`c)!E^QB}~z z30Sl{Tw+@BLf_T0O$6LzjtZ@Su6H>6z);ldqqdHioueK4Y}>56(J@sHNe6;bxEBL2Az-cwpUdwj@a=VPD{AJ=-sUm)Ai8}N8_I-n4Hg@K zL>~l@^yq&F**|DSr3;5ujm41qYm>~?9+!7rV4g^Aq>ITQIL|U}&1ikVKRpHdi&(ZyupM)H zmf@}{z5q)XPh&x!A?-k!2@K7|UzS<}rOPOUE;F;8ku*IEr?n^#hMUm3HLJJviq(2G zVu(;w85<%zzF;A4*8d11B@G>GV4gN}0(rQmUnn&6d(`1^e?N1$PXtn}ADLC=p6s0k zas_vW`=D#^D$z#@w8~UkgEB_pJQ2>b4|<(Dea^b<5TL+C9(h@0qTvaYij(r7e+mv*Mk!vXN z?uBV3`v;7G#wnB?9H_wIYzr?U^TNCVjbWcf*wyMU*r=s7E#IyjLfbpK@C%e3Rg`ZeGWqixrNa)w;1Dd#UB6&i8P^|0o7;L5g$ z_PI^wiqIpRL_8HTb65Bu9`jUB_KnG9pU(OwyusQp_n7^XJ-wQ_N@oKw_(yVLzW^fz ze#tR@guI}I@1kqLD2j$zV_&1jd(lK}rRWpm&$OaO88qeW)4_9uLASB36`Qfii-t0} zO|*Avo&`kl-2k<dW**7%jFs!}17dIJ5@%uSdx3;IAfmA!S? zOJ6|`yk=?F68r)W^d;y{WV}Fo;HJ<5M0?B|(}0yye8xKRC+u(`JMf3hlyRpaKcGYJ zOJFE6SA<96sA~qF4yh>!BzILOTrRPFxq!?ZPyB3BFCizUJPv+W6rELI4#zB9t%{%+ z2$-c4AzO=x#4;a1Rzt0p$#4Q!m8sN^$;j+eZPW^k$6pm}kRiy$_{+rKbs&-s_-li| zeEfxw?np|}|3O}EVtpR(pQg47o7ukk+5B(<%zt>ACEs<&*r=vmW#Vi3`^3dVxK|cT zpI8mq_|6=m0}Q{&-!~$T@^?N7tqT7{YcKC*A__RFU z9bA;da|C%j2U_gmNEY&Vi?xTA$L;nFp_%tj6CA<5G0-w%Z&n4cBZwr9MSnh!L*3+M z_+!epf!1eE_bev60}W;22W~7Y>1~CKp5T>DWIuPLHO6bz-O#_tF~P)OEkHg{!^d($ zP@NAa4R9oQ+`!2zUL{DVL6zYaq7X&d614W%BVEwn$5N9MBjfckRpfAJI%FEhCjJev1Lq6ej)YO_E*3D?p!aZOpW5_MkY+vn+UIK~Xic4_VS*Q9 za3t)JaAX9#R}aDP4i-zNtnOku6M4$UnU`ih_>xWX2EY`>8cZ(=D7e6A((ExET zXdIZouE1=M`AHqR4yq*ugPA8_lOrE`#>bQkl4xFp&?fwvm{R1!glN z&@8+*=hJYNFK~&r$4tBgZ-A9ETbj=H1s`rja6uLlp0LKaM!g8WVQ+u7OfJejbK$)m z;)XonMOlK}&jQ&s|2odKnw+^J3(yL6#NY9A?9xxjfbIZ{4;A;s$(p$ zasvJ?!`}x8e}}(1{5^p`N8G>{wf@Cpj?-6@SUt{U>+^8t#eYi^p?&@oca-@<0zLN> z5-5*lCM%n#xmCh&g3U1k2ZiEVctajb6P~(qU|ky#7f=uE7rDJJqIaTFXP=% zzy1n=2x5&K;w+WDKhK)UO2zjKTF^ZhABOoBjDPw?4p-?nGJ~pBZ>a=)eFB#4^{Sw|;L``5 z?uK@RC|}_gbq&~YUa)mn8gHf=h3^~AlMFoR0o#ac&I71O_=+emkLT-#3egY`#!vN_ zA5qy4p$0Cf0|;4gaL<9}yM_}!O3)Pxz^f1g(*k1Dqu7u2C7lJXM!dm)U*KG?9)z6A z9?-4P2#%2FQ~(7)z7=L^rtCmYmaOXE9eL3D&0WU=Ar`->R+oZTzzvDp%D5%;B5nV{ za&$Hn#-3b~oI}CTYSa$sU-FcTYrfc6k|w2OA7q(gSaDlH!pZAyxCf-bYq-iuAt`7i zLxAS}PepeX6s~$Z8EDDgX*es5KKw+#Jg$D&nyTyx1B&6~OV+B=K&O-3-t4_F(ZEB+ znC)iXiFoLwT0IZLIv92rIv|OL8SBE7i)F;suls9*qPCc@%neA%sUXHNjM%9r>&8k6 z(vgb_Y~+N@StxFqs;bq?5GgQioiG@|2J_b8i22_z4fe>md1N6*L;bToa73-3>GSJi z4wNNG$XO?~4ecGGQDEfPNj;46VK`@G zdjsPzg$)7YK6TafCs zud%R*GI|3urNi~4x>}z(HH-7(%ySrAtvW(GbS)a(%e81q&&qF8TJ7`|DugeUZ+y7r z!y6ovobUX`*Xyi_Q?RLzsoR^CR6&4cYb#`6D(JO==V(AWlDv9nJK%$BrX{b+{&`4!3%OpFrdrhlVjTol zy<2|Al%C-1Tbm$Nw)jtd4ygB@?e-=3Y+h*tNQ7N!Kt`5J!h+<*3?xwcQa z4PXvT#cDMGlpeZNGFGc^Ph<{U`d|*uQY#@RL#z&ULSoJub93lKe83iW{sA1d#@{ad z-Gje}@V63wKjNCKYox?_H-kJE%UwY_ZQ zVu!Yu-Mti+Ee|vkOJ3!E_3enGy^LOVOIG8bsJ-l2Y|tfGz^ZaHDO^Ks?FjZT9u_$qpMredZE=Ep-N<|56WDrH8w(>%7rtxB1w6y#OsO!&!g z!N>c%u(awm&0UozQmy4Rz+;M7jZ&fO@B!}$jlSMpl}EHY!fRvvs|R=v7Nd6#htXq8 ztG7N_XECp%K|-iceFnMRhTKpWjoi;O@kmtDb*YcVHLU_&Ccd( z7$?~_0S}H7Ge!t15PaqeizsT zBQJCH#)c1Uk$qi@hB^y^gCgix9y>Y!oe!b&m9EZS=!1)#bK9ZE=zRrxUx^Gj`T`%* zZ|4q0=kt>0<~8vpO+n@99Tvs)yK1$_QXF4Mm@w7KgaMlZp|Doo)hQAowkR;60Gjf< zQyn?mt_Yr(1Djl6M2cDMdZ5x@mxOyA&E|nSE;8K9as5m7aw!Ml+hhrT?VjXf=k8M&NL+<+XFYej6v4ur1AvJOc z$p8#)DhQ-T-6D(MYFZOV^kYg5)Lm5!$rjYX<3v>O+gS?!l$oO3ivh0^N+xF7B+6hl zs{OeP&Adev5)g^A6?_%c)?Pp?IU8(#&Q@yOPq57;T%ea5qknl*co1IE?27}ns+K>&9vDlVMU@iel!-?V?ZvlYJXERMR2JO^d-7*H0SDF z5mhr*2Np7L4+wxMeg<|yI%Qxo19FlTfm<0!hW^Er>lru$B+tNL25zz#V_ydTaH&qY zm;t%`64|mC=mTk*WjZ2&1v~u>EZ9v-D0QUrTdjuni}(Y7iN`l({A-9;YaoZR@aN#k z$W&{~#BXKl!dq#m*3{?7b$`l6n zw9`uHOX()Qp0Z5M2jU+V&SXu~u@o}Uj)A9z&97F? z7|0ZZ-fC5MrL?jC^*AN)TRn?v(Dqlh`00Ok;Z`xWaqbvh?J^WrU!gj-@hSr!U7`a| zF|gli@OKPc3p)t2%|!qeKV_?!-|AxB;Jvo^`Hb(x1~VXJvG4%a^eEOS1}aP37p+er*`X{Q4%5kTv`ZLRQIy@_VCMSTlJX1LwmC%9I-s08Hw&_|SZfZ`De-vB4J4 zZ?*db$zN`ZU&i=P5wCI~)3H*Xk5_{))PbKcKh;f0X3BO3vPbE_mk6NkdA7RvtrqAu zifr*S7(YeFUvG<_!1z%*-fN2=%lQ6?S8rO>SfIF>i)LKbmdT8yi#ZS(3WW~iS9RSdjfjc`5#?JQjOWS|u4 zDa&Lt(9P=bsSK>MI@}fkz-+z}AJm8Nt=@JalgEPjd$43=ns3W=A2ay+CW_|`(wuNb(^ z>f_Z6+$2VT)v7-OZ&}meQU>0!+BuhjZKvznG8w4M(t&mepaUQOIo|ut_*NBdB>pX1 z{QHc59`Wi~3zSa=AaKHYx~4S@WLYW882G^wNnT~(i5#8nDF$A^B$xg((AOf+xeT;v zqEn_bFwuheb_4+AXd5s$6PS(~NW&I?J>#7O(gUT9ZCt>bzIWOcj$?8=zSZPZiT}_Rzm@Sf zB3^xEp=cg!DzMnhEC$vhncz=kV8tLExP^g(7Q#m|u-c**-Vlb?|6pt71-4S#TH?!W z@qc9e7R0NQEGE~6HSM!nPhw!YH4Og(ZK@s?v2A5wyfvZz&cKYbHC)vQp!E^9Rtnk5 zZ*}XJ+v2Zd{7r0qJpN%17qX@yy>!6Ozyym&PiEj=i-vDyVD<$%+w}~rv<7uB0%*Oh zt(8t}<)>B>U-wdcMA8}mHR4rkvAnKUC$Od#)^gF5fxlRsrPe^;Nh=U$;BWn)Z zh5n9+V^anGfA0T}f&X(D(E9C5bvtRVQv)paUxfLjA{Jl&H3FEPFFucHn50$BXYs9W zNI|AoF&D`M`m)4Ki|bshOU$#C;J3;~3DmUE7XJX_+p#8>wF=fkMp36{>1x9Wpu|jD z34W_Dz|s&u#uk4&jIaXzq|8B}5ViGUV6CMRox?zGGhIPv2KHQ~11B(Wtpyt$ zdsPSe*r9@2G_G#YY)d%RRz&=d(OrFelI8!mPw2y(mVz^RyUaUbyH0QUTw90P4IYz0 zqo>-*KEiU-GmsUSkQ|tr;!1P6+B#fm1JYb=jWkzUUZ$&UZYILr5$=v~F2cFH5HVyI zVur}3!q0H;)ASqOEAZiJLI8H>v)Fwhi{B42tdBT6_?vJGRQ>mp5ze$*@et0f7fyIj z9_b0s`dIiY;w9dhFlDMC8Z-}fD}OY15`6%1{WEQ`#ne+RX{ynd66hY7nj9Dj!z}h^ zwC@H?T1R2d!h6CA?{C+CUl`#`F>6|#2wa))94Pi@uGD)^v2^X1740+96W)IhT-n-Q z9n0%SEUW@?`}Od+Dblw`hG!ry$1r!nVht>`0~XZNxN^@71&uWIdNPTh{$oW`=;o9Q zle0e0yiw);xD%VMUfyf6miOb0R=va~jC}yuqtoPa1)OSJ8yT8K+o8|$!(FR}fHz@7 zr3r5~z_XGNJv`;TFeYgFH)xuXn=rSqX#)oVv>3Zs&$1>Sk1O7V9xPJG|CgYF{&Ih7 z$^O#U@hX6&eJ(9`(?p83%FBLc(`b1-ulXY;-rn5SO^QYr%&x`u@T@5#a6Sj#+0Mui zc&8T0E)tK9t&I%HgxeCg2d?bS-HUX_eXs;hD}sS9YXOwm$|$@N`&KwOcL1_CF@ilw zOd_1nUBYuM+#Kb;DE3M({8L-UVqCu9@CN%Pt1>a7Av0{Ul06apBZeBxm(1N3l9CDt zGhMR%Q&VzzozkBPaxne%r!aQG)c5eCng~O8ii0V8%IjAmMVLmd%qvp@a1X=wVx!#- zlcU+X-3;B9$;aIex=tP4^lQ*R`*;uAWpxElBG!qUnryak<5$mfwhI<9?~ zJ-G37y;=%=3iG7*k`g3wq(|ZxBW?VVTnY!b`!-X5faxk`cIW%KGT5d|-6zTz(7w0G zXNo`GJE9!oQnHHTOJh~utgGDfWW35N#2U6<{RXf!tlGehROm{$k72q2ckzX>swU~G zUSw5+30*4{aW`58=-6H5D*ZhQ5GCD=LZdfObQ*4CgYa-GDj>;w7Eeb8wS|ONm6w5U z$3C395Ei9d zdsdvTpj&HPNCRY+39&|GbXttA{#`%xdfsun%pBgk+Je`+g4(k9m}r&}`Bhc|==S;c z%@6kZR+r5gU2n3ziv_nq`RIEa&qT|Uxr$RDZxk~8mpWXfa;=(qg-o%FQ~-`0fGr!t z-Q{sT+@E8pfa9DCWz^~ejL zU1`mi@LC^)U2UDNw80ReAV#J2hX|FIsd6Y=T6BtEp%KGBE5m`66T_}ad_3nPeDfz| zgs=3J*8w&V@6O7694ycil9tIN#I!Z7n4HZE4AVGuG`VltS5 z$QFr-5xIrTCAR}qg1ia8=)vQUffroyFnB?d+AUT_)Bv!5&We;k9=|xC>3P8S7G)-p z4|Ooi++2R7MK)jq^_Xrcjrzmag{>Mlt2C^EF~R16N6FNzYbt*{xgNDg_cNF3(vZVi zfi6a)OwdT-{0e35-Y}S;DoEgmxJe5lt=rBVFy^=-688?RYw26wwI-j`r}?m!-GtJHfff49QWkovIg? z3{Hei>Vy-?ZLlHQ9^zB&?5)imE^zMt5!~6BH05GkQ+)wf+Hp{HE4Mg#j$i{lYahhg z0hh;M`X!ia{zwzU<$VvK9_U2)d=|L0UV(gAVWmLRgaUg)03>ifmklEzmqwRWOzXO& z3}McaF>olyEZOlQXUS~Ll9s9(x+^?^n#N`pX5DzqI?O-lV*0|I?*9#s95sqxeIJwH z_%!x}{-hyj3%Eptmoa^?(?T=kL3!9)bwls*o*{8x_GwWUwHuPL&#a;AbQa`)`fX>z z838DcJj8`OoMV_z5IbrOWoRz4$S&DLU0_b$@7-Lz2JtG~R6Qk&2hQPH`1x-+i%0^j zhYuV~jNWH|lCm&?D$&4M>xM3=saNf zw> z3)3avKwpRoG~IF%^4{6&M;#CQNu!JOVIu3%yXH?e;;8&mhy!mL#)%^-FFrV9DCcm7 zW7wYO(xFy?{YcCvH4oDR?*DK*$mqO&#^I+%v};rYV?URqoYAC*X;fR)U4!!iu6Mz@LCb6igq7pr^bo z($sv?nr@b=ST~AlCm=zrYmnD+k#)(tm{{JR$E`X-B*6g^2O1AZn=;)(JJ34hOn?(h4ifdjzBCK*E zn|!P)QCa}#Y~HUc7VKqjghRY~3)@I=`JLYe#p3nr?k2I3rEC*Q`8F6r{7cC`5!ix2 z6wIK=z=nB0heTDu#Hr!IsNs6enN6@R6hcO-HVQWsWN$E>I^Q_}%Bn$5NBW#X5^(hP zlz7u>lZu={T7P&D{F;JTKntLTz9`DF+0r4xr4lwDrIiJyz(@3EX3y+ zNeUw<1kn!bFF}o>vl{LduChreX9V7nNK$++!BjC0C+1@&%^}(a@bJ}EuR-~D!cyWX zpG?YsfU>R5M#@hm4j|^n+}ubzV2-tx8QF%{;s|tUe7R;W1U+OcQkzU|L4&dsK>vpmB#%k#-CaqC<|;m zq_%%WI>Y`?q_`zSmg1Hnidqz2rkKOVLSL@@6841kDj(to3dd6HTe3>`UL@6se%QmW)p$^6;7q}J5aAt=+elfyg5^VGpmT=w{ z;gu*^{nQi`3ghtLT;VQzTc%>Mh_VFDuTTR@##TIN)?lo(Y#r0ucQiCq55G};tUCZu zA8)p>TvuRekUP~qlz+@kR_}@m{N-d7jv4Ksq=+gENB{NeTRiR8s?>OKuPE+p1OgHP4O-$qz{NX3AzlMdho7Jgw%ti`)<%{QoK4a;0<&2l z+>N&u#YW7Y5k&*Ku>dSriBue`?by2=E5ZIZINy{B(9~HQ1rZ)|v(~rC7B>Bp_^2hZ z30r6rTE<@RN<)1fsM-gUPp(l_!uRy}pGv`AbLEyMzTg>KKB2T;Wo`f_VI^v*QZV2J z=DXq6>QvfegH3BhTZg4#jswMg!FPxwwF=Xlhh?fOziOfuBk+5i&dXkIe)v94#;nF^ zboCBgHGF~RQdkIQ%Aw`I!{G=w_XUM(0A4;30N~ys4%O9|bRJh)Gk8RhD;VX7#1~)o z#Sq2rrap@8{umyQ_M;wu(Dn`C4sU)e_%1NP9d_V(3tDT&eolPjVX1QVr@((X9=y6AaSKg``f$b90ZC$RW07#3FG7g52xXUNuP6r zC-Nn@%p6{)nnL6S=IEI?hYO8hp=u5f;_)4dsyS)+0`rN47U9Ex5OUsw_@F3u8SLG= zNJWtMaFOJolz@?fQ+9(|&xHbGRtMf>QI#Q9@oLwik*&s5ewCt95Oyt^(0WX(-DCU* zAp`bDuJYQ5)H%kvLw$a_;Pymw0fBJ6xyoJXn#XII$7Jtxz444A2a{c8+t@n*ItG*0W3~yT1p6HbZAYZMJDI%-+tvLJ`fHoH z=Bz+u;7wvg`X71^;oQBel3Zmx{TJ-_lfSmLYtA3=&H8!+Le8ixa`m}7vP!Ur3LNT8 zfo!#q$|q{9GZj^{E1JM2vW6eEzsO+!JF>VJ^+RSOxF7?$a9@-v!HPlNdOn%o9IknR zImxjapmwiUgGJz2U?7&8wP}XCrYITqb6i)}`7qsF1kEVG2 z@rOQ#{#${xu2-!!q_e6wzv@A$sVG+|6K&1xvhKw8ub z!KaW9gCqp7^KR;F68aDcTxwhMQbS%=v0U4FP8TGyGM+j9d4TDd;MFSV~2T$Fpdz;0)Q~ zI2$2TX9Jo8+IV-zcx;t%D)Ys;Dw$~baKO|$6uv69_N!$f1a;U_$LoC zgT<^l|ZTLkvh{jj8QAvAyRAB@m4CkJt_&{QnrM0i$u z18)+GF>RUV$((iSpS1Y<-yJCiL_Q0~*Lwa<`9c(|di)__J>Ihp{mI@U;vzN*L+S;J zG`y2@FW%sR64*RE4nIYgkVWhj_hR1E@-1we!Yo!%G^_y+X|A@x@fq8G%|Kx+P1X+A z)@qe1=55%CHmL>lOd*|)2E|yymCgn9zz$YX{Gpdz5W-!Jazjf4<(|3ZMKnQM&MR#w zPN&YA7k3q`Ro7x`9C&?_&5uR%9HC4UI}yAV&Ic=+8~(3qgLx^T>6l2tyjr;dvcPV%)ZGDzScL6>M`IVsyIU|Ej6^&T&i~+G}t+r=u zfs9tIFTR(MxtcPcnUMK2+VX-;?@O$8O~YE>K*nPl?BkHR9=#;Ymz8VK7tR;TuiRP> zsVN_@dzzTxXUu$TWq>*ci-={uhAf;e@7J}~Mnx+tz*7fRHWDQT0 zx0TvVNeR56P(}DA5KbWlu~n1|f}-|9@An1g%FM$L_?Sa5LmhepVrdN4Yx*Rx8pE4ja0!6q()p#PF^iT71zwxLxzb9 zK--GjghZa9VTL0B)Ntf;RSS?|ToS5QCt{6sN=APAl!)+4lo$uf|_*onQ~{1-4^bdh1cNvu+C!e+q&;?^pJ zb&j~Fz%&Z#B~-!U69RKss%p*-{EPn`;l3E(JiiPXbHe1tGDYdW!nwLCJ;0};0D z8YoIO{43K8^PqpLi_aY1Wz1f|hS+uwEhzf3>HMO;w%AZ?MH|amJ%KA4{Y3O#;_@`A zhHN8*L=jO}`m$?)4b%asnyXs?N_dgV&=9>2y)k=Vc9qvz>vQfk|4Hcr2M#DVQd|rF z3&;+f(iIO3hD{74Q9W}Yg}bS&zR+X@xR)SZqX7s&J8jefr}X{=xgbuxAR*kv2)64r zg*|x#FG=Y_KZhP}gJ+1{^M2Ap6y4i#)DrS(X>%3}yd*S&#`nV^8>4WZQ7AkQIp%(Y zrAe13+l`j*h7+BD=B&^vS>l8xM{TBhK;Ob}ljc6Qo=8HuMOB$7@Rcuhyge zH6L9rQ&x?nh+!=*gRq6Gd5j;<$cF+F{B+tx`+a1%pKL~Ac=M#h@U8X29g6Cu*9+IL zKQt{de}`F#;TP(`v$!5SYwk+SzxcO_;evYYFP@&5{z7qLxL3V!s9w0&z`Jy zKQGKo%s;IjJO%aob4|VebgS3iHTB>ROi8T2L%r~tdf^UJ6Z6-vze7Fv3+lmtO+9!* z_28+i*PnpBzNkGQ=IylO9U)a%0~QzCtpRxN0m}?dTYaJKqcDLTpkR3hrYjzjb(M`L z(=41TGK9Y}#cTi8H@WXQjCX< z>{@N)E2B}5+S0E$bEt(w8G*u7qb3Unb(QS`KQ{{hkY+VDRvJJ)$>f7Likb`jtDq39 zN>Ls;l@rtoI%1 zXI1z&i4{F`AX?D|tc5viz$rynza&(xuJU0KVJrHBvz1hClrr2ZGxaLO-y55wky`}kXcj+?XCh}mMfaSo;oV=B)(SXm+k z?w?#`T{+PH{TZ&iPsSG>PD*p+2m7~Jk^$70x5GcKe2zY4&xN9Ey5|2wkIFi%ICxzN z*O^nh4E~MM8}P)7&Bv-LsPHtgJcqo7S;p0^!2d3&p$dQD3~2{`qO#_Ggi=K~(-zxB zoDK~WTKr_t1J=7=W9U003%uOZR2|6A8=Q{g5Vrh3qF2c8fWe+p3Ns=T#&mLuS7r4h`AXETSQ@9H=)xFL>_LkWBG*oA!OcVc3G%Jf4#~u^4`AKA94g+fFrZrB+vgo8ig3E^R?2 zj{cf0L9zIvfoBN?LKog6+k#^(plG6i0gJSF3Nz-!hAq-vHB5p1Ul?hC+&*DDnlR%{3+*wL7hjOxm z66^dBbom&LC?s@3=Hsy8*7}wUoT|4M3H0y~=)l(L3A{s2nuM&W=(^iPKAO%ZV0YZ8 z+>YtU>4S?yAyQSV_p!{-rex8_WK0qS$-uHGj9COh&jjte4YDBB03p^K0rqUdV$D6KGYz2~@b_CARz%h|p^JmA4Pwvab+w(?)4uwM}ex zt!$oN-*sw~l5#a^-T2?NM#*@PsI=4mFwA6GHoE-{@MmwqbSwqaKSus|G8b#%kKd8J zG=F>yV$9+Bc1s5ma*B#yz?X^2eUGHX7lNg}Q-ZY~X)|KYsXzVD*>r z$K4RB6Zqr%7$F;fd<^co2!cP32lducJ%x)3;Q@W{@CMR1o}UjKVJVA3+*=k zxD(r;hvAPSk~Dw(7IK1(KTd(Q?SGm-KK{Bu5B^vOlgH2CkFS$p;{0(q^$E=%Qz!); z9e*5)U2YqHJRPoDN9K<`5?lTZL};} z6CWdg{PCc0MJ!P7K{~hi;|$17hv$z^183lm4+8Z^=8q4?+8CqTAb-rTwb2NF%+n2A z%m)5f_~RR|2v&a?fBca5;MwKJ*D*pi{y5_RaZdi|ng`S!!KZ0C>f!?t2;)}$jX zrtbfk{3!b0Fr3KO`rnIa-a0M5#b?roRrEhGDMj@^STCVKMfE?eSWyM!8(X`mJhc3p~ac7H#kpMw&IUrg#Ln92B}(9@0LRxourROx{@ zU&QmAR0*vCrG{v!hkS2S>xL`9foyZz9cG6h`+Vhdh8yaJgBsNh`MwoYCMbxa8{X)F z+HKbjt%wA@=y(MZ$D{Ct<2oK=VfUy%9u z$N_7zjmJx&|LF1f@VVnU9-Dy3`s0!LQKREA2a2VhA0sd+tnm;bCYbsZY;i|B9)Ef% zVLUqW;MjlM{NQGd@T+*eEuQ=Rr8kz; z@1M2~wu<%*9h36_?@-XNod;+W3PV1FcdM)PkNkkGGy>yW+!JoCYKE;7934FayLj58 zEff2WP>Fd3OWCK>vX;Dtg4{o%sOL48V+$$r8*2+mJr21HUQc2d)^2a7pfpdHzPX7G zG%(QObm^Qe{0=T)&GdI01bwe+4s+svxTC8#E^+|>YyGUTVT{=6<-3)Dzu$VWWf;7G!hr1cLM<;hP%z~H*@)*Ut8Kh|$p3q=~ z#gP?vGms=FZj+5>_)J%;JH&P$J+}1v`qp|#18=g2q4apk=a{>vlq`DG{|=KKGwx&L zIZ_37*80Niqw{y=u_uO;NJ?CDX$AkO6)~a;Cg#G*Z zpTi+6(TYZgmrcDS6zr;AgAAdUIO6bitiwy{^tnR-?go@ z(D|mW$$`g*fN!1MAT+bE&EXC4xujuw0szEe8tjDWSiG>aFJS7^BVi!l%NMZ6K!@R3 zOSEQawEkyxy!H6>*Km!5b|@_+CUJ8i+hl0p3Z9~XCdwgj?J=~ERIY{~7jiSSkCA=H z@1nKBkl$jX+dh;T*N^c27yEUT!Y#@BMd<4u@R4oPzk}D2ixheb*4sq0^ z!#w&yu!V`Wc(NS*fPSmHC<5zjoLIfcaj!)}^Mkl4&ZYsg35RIO_}{t8ni%n5mSmO( z)tB+JJgRQtk<)sojRaHa=3OaMrA0U*_h95PLc8Ie)Q3+X&mA9g8kawHaP&>L}<`WCsr+BXSs#8x`Hv{BTfGzegMKtn1(& zt=-k~)Q6Z;Aol67T%Jh~`dGQtFX6mW9J#!I^a6D~R!`&^#b(b*YF7IosZ)>_iT=pI zGt`Nap~-U2H8-g1-ePGwCn271ojMgtH=UC{_BGC>@WB7@Xs?!ZBp8bu&KbQ9G~ztH z_!c{MenYiVBzOee&x2E7`e)w}6Nm-HI$M36It;1~+B+leU!7C~`!E-3W58Uau|SUz zx>Ik4f)H&~^Y4?sE`{?$YU3OJ=`4N!)bfeEW}Uk7@@?p@XA4gZ zpN#>4|Ak@J3YUF~^Q~wX&+hu1^Ci+Rvz)@wI`vPe3Pe$7&+bZ*53Sw(k-FtXJa6n? zR-1_D?QNa+0{MLoF^>i2OpvfsejkPrL`?4>fo}oVQ1gys`R_)^lxIT+k4N>s4V?xO z{ZUK)#^J>J(gi~cnJxd936HRJwd!5UY|&E0|4v0U{4XJ)Q=mWoS;Rl2c@{{E<#1