From d86f4161dae60d67d224a9140ca1e6acce4ad1fd Mon Sep 17 00:00:00 2001 From: Kyle Jessup Date: Thu, 19 May 2016 16:37:38 -0400 Subject: [PATCH] OpenSSL module for Perfect --- Package.swift | 25 + Sources/OpenSSL/include/module.modulemap | 4 + Sources/OpenSSL/include/openssl/aes.h | 149 + Sources/OpenSSL/include/openssl/asn1.h | 1419 ++++++ Sources/OpenSSL/include/openssl/asn1_mac.h | 579 +++ Sources/OpenSSL/include/openssl/asn1t.h | 973 ++++ Sources/OpenSSL/include/openssl/bio.h | 879 ++++ Sources/OpenSSL/include/openssl/blowfish.h | 130 + Sources/OpenSSL/include/openssl/bn.h | 939 ++++ Sources/OpenSSL/include/openssl/buffer.h | 119 + Sources/OpenSSL/include/openssl/camellia.h | 132 + Sources/OpenSSL/include/openssl/cast.h | 107 + Sources/OpenSSL/include/openssl/cmac.h | 82 + Sources/OpenSSL/include/openssl/cms.h | 555 +++ Sources/OpenSSL/include/openssl/comp.h | 79 + Sources/OpenSSL/include/openssl/conf.h | 267 ++ Sources/OpenSSL/include/openssl/conf_api.h | 89 + Sources/OpenSSL/include/openssl/crypto.h | 661 +++ Sources/OpenSSL/include/openssl/des.h | 257 + Sources/OpenSSL/include/openssl/des_old.h | 497 ++ Sources/OpenSSL/include/openssl/dh.h | 392 ++ Sources/OpenSSL/include/openssl/dsa.h | 332 ++ Sources/OpenSSL/include/openssl/dso.h | 451 ++ Sources/OpenSSL/include/openssl/dtls1.h | 272 ++ Sources/OpenSSL/include/openssl/e_os2.h | 328 ++ Sources/OpenSSL/include/openssl/ebcdic.h | 26 + Sources/OpenSSL/include/openssl/ec.h | 1282 +++++ Sources/OpenSSL/include/openssl/ecdh.h | 134 + Sources/OpenSSL/include/openssl/ecdsa.h | 335 ++ Sources/OpenSSL/include/openssl/engine.h | 960 ++++ Sources/OpenSSL/include/openssl/err.h | 389 ++ Sources/OpenSSL/include/openssl/evp.h | 1534 ++++++ Sources/OpenSSL/include/openssl/hmac.h | 109 + Sources/OpenSSL/include/openssl/idea.h | 105 + Sources/OpenSSL/include/openssl/krb5_asn.h | 240 + Sources/OpenSSL/include/openssl/kssl.h | 197 + Sources/OpenSSL/include/openssl/lhash.h | 240 + Sources/OpenSSL/include/openssl/md4.h | 119 + Sources/OpenSSL/include/openssl/md5.h | 119 + Sources/OpenSSL/include/openssl/mdc2.h | 94 + Sources/OpenSSL/include/openssl/modes.h | 163 + Sources/OpenSSL/include/openssl/obj_mac.h | 4194 +++++++++++++++++ Sources/OpenSSL/include/openssl/objects.h | 1143 +++++ Sources/OpenSSL/include/openssl/ocsp.h | 637 +++ Sources/OpenSSL/include/openssl/opensslconf.h | 261 + Sources/OpenSSL/include/openssl/opensslv.h | 97 + Sources/OpenSSL/include/openssl/ossl_typ.h | 211 + Sources/OpenSSL/include/openssl/p_openssl.h | 11 + Sources/OpenSSL/include/openssl/pem.h | 615 +++ Sources/OpenSSL/include/openssl/pem2.h | 70 + Sources/OpenSSL/include/openssl/pkcs12.h | 342 ++ Sources/OpenSSL/include/openssl/pkcs7.h | 481 ++ Sources/OpenSSL/include/openssl/pqueue.h | 99 + Sources/OpenSSL/include/openssl/rand.h | 150 + Sources/OpenSSL/include/openssl/rc2.h | 103 + Sources/OpenSSL/include/openssl/rc4.h | 88 + Sources/OpenSSL/include/openssl/ripemd.h | 105 + Sources/OpenSSL/include/openssl/rsa.h | 664 +++ Sources/OpenSSL/include/openssl/safestack.h | 2672 +++++++++++ Sources/OpenSSL/include/openssl/seed.h | 149 + Sources/OpenSSL/include/openssl/sha.h | 214 + Sources/OpenSSL/include/openssl/srp.h | 169 + Sources/OpenSSL/include/openssl/srtp.h | 147 + Sources/OpenSSL/include/openssl/ssl.h | 3164 +++++++++++++ Sources/OpenSSL/include/openssl/ssl2.h | 265 ++ Sources/OpenSSL/include/openssl/ssl23.h | 84 + Sources/OpenSSL/include/openssl/ssl3.h | 774 +++ Sources/OpenSSL/include/openssl/stack.h | 107 + Sources/OpenSSL/include/openssl/symhacks.h | 516 ++ Sources/OpenSSL/include/openssl/tls1.h | 813 ++++ Sources/OpenSSL/include/openssl/ts.h | 862 ++++ Sources/OpenSSL/include/openssl/txt_db.h | 112 + Sources/OpenSSL/include/openssl/ui.h | 415 ++ Sources/OpenSSL/include/openssl/ui_compat.h | 88 + Sources/OpenSSL/include/openssl/whrlpool.h | 41 + Sources/OpenSSL/include/openssl/x509.h | 1327 ++++++ Sources/OpenSSL/include/openssl/x509_vfy.h | 647 +++ Sources/OpenSSL/include/openssl/x509v3.h | 1055 +++++ Sources/OpenSSL/openssl.c | 3 + Sources/OpenSSL/osx/libcrypto-x86_64.a | Bin 0 -> 3484368 bytes Sources/OpenSSL/osx/libssl-x86_64.a | Bin 0 -> 594656 bytes openssl.pc | 5 + 82 files changed, 38663 insertions(+) create mode 100644 Package.swift create mode 100644 Sources/OpenSSL/include/module.modulemap create mode 100644 Sources/OpenSSL/include/openssl/aes.h create mode 100644 Sources/OpenSSL/include/openssl/asn1.h create mode 100644 Sources/OpenSSL/include/openssl/asn1_mac.h create mode 100644 Sources/OpenSSL/include/openssl/asn1t.h create mode 100644 Sources/OpenSSL/include/openssl/bio.h create mode 100644 Sources/OpenSSL/include/openssl/blowfish.h create mode 100644 Sources/OpenSSL/include/openssl/bn.h create mode 100644 Sources/OpenSSL/include/openssl/buffer.h create mode 100644 Sources/OpenSSL/include/openssl/camellia.h create mode 100644 Sources/OpenSSL/include/openssl/cast.h create mode 100644 Sources/OpenSSL/include/openssl/cmac.h create mode 100644 Sources/OpenSSL/include/openssl/cms.h create mode 100644 Sources/OpenSSL/include/openssl/comp.h create mode 100644 Sources/OpenSSL/include/openssl/conf.h create mode 100644 Sources/OpenSSL/include/openssl/conf_api.h create mode 100644 Sources/OpenSSL/include/openssl/crypto.h create mode 100644 Sources/OpenSSL/include/openssl/des.h create mode 100644 Sources/OpenSSL/include/openssl/des_old.h create mode 100644 Sources/OpenSSL/include/openssl/dh.h create mode 100644 Sources/OpenSSL/include/openssl/dsa.h create mode 100644 Sources/OpenSSL/include/openssl/dso.h create mode 100644 Sources/OpenSSL/include/openssl/dtls1.h create mode 100644 Sources/OpenSSL/include/openssl/e_os2.h create mode 100644 Sources/OpenSSL/include/openssl/ebcdic.h create mode 100644 Sources/OpenSSL/include/openssl/ec.h create mode 100644 Sources/OpenSSL/include/openssl/ecdh.h create mode 100644 Sources/OpenSSL/include/openssl/ecdsa.h create mode 100644 Sources/OpenSSL/include/openssl/engine.h create mode 100644 Sources/OpenSSL/include/openssl/err.h create mode 100644 Sources/OpenSSL/include/openssl/evp.h create mode 100644 Sources/OpenSSL/include/openssl/hmac.h create mode 100644 Sources/OpenSSL/include/openssl/idea.h create mode 100644 Sources/OpenSSL/include/openssl/krb5_asn.h create mode 100644 Sources/OpenSSL/include/openssl/kssl.h create mode 100644 Sources/OpenSSL/include/openssl/lhash.h create mode 100644 Sources/OpenSSL/include/openssl/md4.h create mode 100644 Sources/OpenSSL/include/openssl/md5.h create mode 100644 Sources/OpenSSL/include/openssl/mdc2.h create mode 100644 Sources/OpenSSL/include/openssl/modes.h create mode 100644 Sources/OpenSSL/include/openssl/obj_mac.h create mode 100644 Sources/OpenSSL/include/openssl/objects.h create mode 100644 Sources/OpenSSL/include/openssl/ocsp.h create mode 100644 Sources/OpenSSL/include/openssl/opensslconf.h create mode 100644 Sources/OpenSSL/include/openssl/opensslv.h create mode 100644 Sources/OpenSSL/include/openssl/ossl_typ.h create mode 100644 Sources/OpenSSL/include/openssl/p_openssl.h create mode 100644 Sources/OpenSSL/include/openssl/pem.h create mode 100644 Sources/OpenSSL/include/openssl/pem2.h create mode 100644 Sources/OpenSSL/include/openssl/pkcs12.h create mode 100644 Sources/OpenSSL/include/openssl/pkcs7.h create mode 100644 Sources/OpenSSL/include/openssl/pqueue.h create mode 100644 Sources/OpenSSL/include/openssl/rand.h create mode 100644 Sources/OpenSSL/include/openssl/rc2.h create mode 100644 Sources/OpenSSL/include/openssl/rc4.h create mode 100644 Sources/OpenSSL/include/openssl/ripemd.h create mode 100644 Sources/OpenSSL/include/openssl/rsa.h create mode 100644 Sources/OpenSSL/include/openssl/safestack.h create mode 100644 Sources/OpenSSL/include/openssl/seed.h create mode 100644 Sources/OpenSSL/include/openssl/sha.h create mode 100644 Sources/OpenSSL/include/openssl/srp.h create mode 100644 Sources/OpenSSL/include/openssl/srtp.h create mode 100644 Sources/OpenSSL/include/openssl/ssl.h create mode 100644 Sources/OpenSSL/include/openssl/ssl2.h create mode 100644 Sources/OpenSSL/include/openssl/ssl23.h create mode 100644 Sources/OpenSSL/include/openssl/ssl3.h create mode 100644 Sources/OpenSSL/include/openssl/stack.h create mode 100644 Sources/OpenSSL/include/openssl/symhacks.h create mode 100644 Sources/OpenSSL/include/openssl/tls1.h create mode 100644 Sources/OpenSSL/include/openssl/ts.h create mode 100644 Sources/OpenSSL/include/openssl/txt_db.h create mode 100644 Sources/OpenSSL/include/openssl/ui.h create mode 100644 Sources/OpenSSL/include/openssl/ui_compat.h create mode 100644 Sources/OpenSSL/include/openssl/whrlpool.h create mode 100644 Sources/OpenSSL/include/openssl/x509.h create mode 100644 Sources/OpenSSL/include/openssl/x509_vfy.h create mode 100644 Sources/OpenSSL/include/openssl/x509v3.h create mode 100644 Sources/OpenSSL/openssl.c create mode 100644 Sources/OpenSSL/osx/libcrypto-x86_64.a create mode 100644 Sources/OpenSSL/osx/libssl-x86_64.a create mode 100644 openssl.pc diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000000..32c31cd3a1 --- /dev/null +++ b/Package.swift @@ -0,0 +1,25 @@ +// +// Package.swift +// PerfectLib +// +// Created by Kyle Jessup on 3/22/16. +// Copyright (C) 2016 PerfectlySoft, Inc. +// +//===----------------------------------------------------------------------===// +// +// This source file is part of the Perfect.org open source project +// +// Copyright (c) 2015 - 2016 PerfectlySoft Inc. and the Perfect project authors +// Licensed under Apache License v2.0 +// +// See http://perfect.org/licensing.html for license information +// +//===----------------------------------------------------------------------===// +// + +import PackageDescription + +let package = Package( + name: "OpenSSL", + pkgConfig: "openssl.pc" +) diff --git a/Sources/OpenSSL/include/module.modulemap b/Sources/OpenSSL/include/module.modulemap new file mode 100644 index 0000000000..7b96102750 --- /dev/null +++ b/Sources/OpenSSL/include/module.modulemap @@ -0,0 +1,4 @@ +module OpenSSL { + header "openssl/p_openssl.h" + export * +} \ No newline at end of file diff --git a/Sources/OpenSSL/include/openssl/aes.h b/Sources/OpenSSL/include/openssl/aes.h new file mode 100644 index 0000000000..2311870ef3 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/aes.h @@ -0,0 +1,149 @@ +/* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */ +/* ==================================================================== + * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + */ + +#ifndef HEADER_AES_H +# define HEADER_AES_H + +# include "opensslconf.h" + +# ifdef OPENSSL_NO_AES +# error AES is disabled. +# endif + +# include + +# define AES_ENCRYPT 1 +# define AES_DECRYPT 0 + +/* + * Because array size can't be a const in C, the following two are macros. + * Both sizes are in bytes. + */ +# define AES_MAXNR 14 +# define AES_BLOCK_SIZE 16 + +#ifdef __cplusplus +extern "C" { +#endif + +/* This should be a hidden type, but EVP requires that the size be known */ +struct aes_key_st { +# ifdef AES_LONG + unsigned long rd_key[4 * (AES_MAXNR + 1)]; +# else + unsigned int rd_key[4 * (AES_MAXNR + 1)]; +# endif + int rounds; +}; +typedef struct aes_key_st AES_KEY; + +const char *AES_options(void); + +int AES_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int AES_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); + +int private_AES_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int private_AES_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); + +void AES_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void AES_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); + +void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key, const int enc); +void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, const int enc); +void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num, const int enc); +void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num, const int enc); +void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num, const int enc); +void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num); +void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char ivec[AES_BLOCK_SIZE], + unsigned char ecount_buf[AES_BLOCK_SIZE], + unsigned int *num); +/* NB: the IV is _two_ blocks long */ +void AES_ige_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, const int enc); +/* NB: the IV is _four_ blocks long */ +void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + const AES_KEY *key2, const unsigned char *ivec, + const int enc); + +int AES_wrap_key(AES_KEY *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, unsigned int inlen); +int AES_unwrap_key(AES_KEY *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, unsigned int inlen); + + +#ifdef __cplusplus +} +#endif + +#endif /* !HEADER_AES_H */ diff --git a/Sources/OpenSSL/include/openssl/asn1.h b/Sources/OpenSSL/include/openssl/asn1.h new file mode 100644 index 0000000000..5f30637d35 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/asn1.h @@ -0,0 +1,1419 @@ +/* crypto/asn1/asn1.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_ASN1_H +# define HEADER_ASN1_H + +# include +# include "e_os2.h" +# ifndef OPENSSL_NO_BIO +# include "bio.h" +# endif +# include "stack.h" +# include "safestack.h" + +# include "symhacks.h" + +# include "ossl_typ.h" +# ifndef OPENSSL_NO_DEPRECATED +# include "bn.h" +# endif + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define V_ASN1_UNIVERSAL 0x00 +# define V_ASN1_APPLICATION 0x40 +# define V_ASN1_CONTEXT_SPECIFIC 0x80 +# define V_ASN1_PRIVATE 0xc0 + +# define V_ASN1_CONSTRUCTED 0x20 +# define V_ASN1_PRIMITIVE_TAG 0x1f +# define V_ASN1_PRIMATIVE_TAG 0x1f + +# define V_ASN1_APP_CHOOSE -2/* let the recipient choose */ +# define V_ASN1_OTHER -3/* used in ASN1_TYPE */ +# define V_ASN1_ANY -4/* used in ASN1 template code */ + +# define V_ASN1_NEG 0x100/* negative flag */ + +# define V_ASN1_UNDEF -1 +# define V_ASN1_EOC 0 +# define V_ASN1_BOOLEAN 1 /**/ +# define V_ASN1_INTEGER 2 +# define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) +# define V_ASN1_BIT_STRING 3 +# define V_ASN1_OCTET_STRING 4 +# define V_ASN1_NULL 5 +# define V_ASN1_OBJECT 6 +# define V_ASN1_OBJECT_DESCRIPTOR 7 +# define V_ASN1_EXTERNAL 8 +# define V_ASN1_REAL 9 +# define V_ASN1_ENUMERATED 10 +# define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) +# define V_ASN1_UTF8STRING 12 +# define V_ASN1_SEQUENCE 16 +# define V_ASN1_SET 17 +# define V_ASN1_NUMERICSTRING 18 /**/ +# define V_ASN1_PRINTABLESTRING 19 +# define V_ASN1_T61STRING 20 +# define V_ASN1_TELETEXSTRING 20/* alias */ +# define V_ASN1_VIDEOTEXSTRING 21 /**/ +# define V_ASN1_IA5STRING 22 +# define V_ASN1_UTCTIME 23 +# define V_ASN1_GENERALIZEDTIME 24 /**/ +# define V_ASN1_GRAPHICSTRING 25 /**/ +# define V_ASN1_ISO64STRING 26 /**/ +# define V_ASN1_VISIBLESTRING 26/* alias */ +# define V_ASN1_GENERALSTRING 27 /**/ +# define V_ASN1_UNIVERSALSTRING 28 /**/ +# define V_ASN1_BMPSTRING 30 +/* For use with d2i_ASN1_type_bytes() */ +# define B_ASN1_NUMERICSTRING 0x0001 +# define B_ASN1_PRINTABLESTRING 0x0002 +# define B_ASN1_T61STRING 0x0004 +# define B_ASN1_TELETEXSTRING 0x0004 +# define B_ASN1_VIDEOTEXSTRING 0x0008 +# define B_ASN1_IA5STRING 0x0010 +# define B_ASN1_GRAPHICSTRING 0x0020 +# define B_ASN1_ISO64STRING 0x0040 +# define B_ASN1_VISIBLESTRING 0x0040 +# define B_ASN1_GENERALSTRING 0x0080 +# define B_ASN1_UNIVERSALSTRING 0x0100 +# define B_ASN1_OCTET_STRING 0x0200 +# define B_ASN1_BIT_STRING 0x0400 +# define B_ASN1_BMPSTRING 0x0800 +# define B_ASN1_UNKNOWN 0x1000 +# define B_ASN1_UTF8STRING 0x2000 +# define B_ASN1_UTCTIME 0x4000 +# define B_ASN1_GENERALIZEDTIME 0x8000 +# define B_ASN1_SEQUENCE 0x10000 +/* For use with ASN1_mbstring_copy() */ +# define MBSTRING_FLAG 0x1000 +# define MBSTRING_UTF8 (MBSTRING_FLAG) +# define MBSTRING_ASC (MBSTRING_FLAG|1) +# define MBSTRING_BMP (MBSTRING_FLAG|2) +# define MBSTRING_UNIV (MBSTRING_FLAG|4) +# define SMIME_OLDMIME 0x400 +# define SMIME_CRLFEOL 0x800 +# define SMIME_STREAM 0x1000 + struct X509_algor_st; +DECLARE_STACK_OF(X509_ALGOR) + +# define DECLARE_ASN1_SET_OF(type)/* filled in by mkstack.pl */ +# define IMPLEMENT_ASN1_SET_OF(type)/* nothing, no longer needed */ + +/* + * We MUST make sure that, except for constness, asn1_ctx_st and + * asn1_const_ctx are exactly the same. Fortunately, as soon as the old ASN1 + * parsing macros are gone, we can throw this away as well... + */ +typedef struct asn1_ctx_st { + unsigned char *p; /* work char pointer */ + int eos; /* end of sequence read for indefinite + * encoding */ + int error; /* error code to use when returning an error */ + int inf; /* constructed if 0x20, indefinite is 0x21 */ + int tag; /* tag from last 'get object' */ + int xclass; /* class from last 'get object' */ + long slen; /* length of last 'get object' */ + unsigned char *max; /* largest value of p allowed */ + unsigned char *q; /* temporary variable */ + unsigned char **pp; /* variable */ + int line; /* used in error processing */ +} ASN1_CTX; + +typedef struct asn1_const_ctx_st { + const unsigned char *p; /* work char pointer */ + int eos; /* end of sequence read for indefinite + * encoding */ + int error; /* error code to use when returning an error */ + int inf; /* constructed if 0x20, indefinite is 0x21 */ + int tag; /* tag from last 'get object' */ + int xclass; /* class from last 'get object' */ + long slen; /* length of last 'get object' */ + const unsigned char *max; /* largest value of p allowed */ + const unsigned char *q; /* temporary variable */ + const unsigned char **pp; /* variable */ + int line; /* used in error processing */ +} ASN1_const_CTX; + +/* + * These are used internally in the ASN1_OBJECT to keep track of whether the + * names and data need to be free()ed + */ +# define ASN1_OBJECT_FLAG_DYNAMIC 0x01/* internal use */ +# define ASN1_OBJECT_FLAG_CRITICAL 0x02/* critical x509v3 object id */ +# define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04/* internal use */ +# define ASN1_OBJECT_FLAG_DYNAMIC_DATA 0x08/* internal use */ +struct asn1_object_st { + const char *sn, *ln; + int nid; + int length; + const unsigned char *data; /* data remains const after init */ + int flags; /* Should we free this one */ +}; + +# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +/* + * This indicates that the ASN1_STRING is not a real value but just a place + * holder for the location where indefinite length constructed data should be + * inserted in the memory buffer + */ +# define ASN1_STRING_FLAG_NDEF 0x010 + +/* + * This flag is used by the CMS code to indicate that a string is not + * complete and is a place holder for content when it had all been accessed. + * The flag will be reset when content has been written to it. + */ + +# define ASN1_STRING_FLAG_CONT 0x020 +/* + * This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING + * type. + */ +# define ASN1_STRING_FLAG_MSTRING 0x040 +/* This is the base type that holds just about everything :-) */ +struct asn1_string_st { + int length; + int type; + unsigned char *data; + /* + * The value of the following field depends on the type being held. It + * is mostly being used for BIT_STRING so if the input data has a + * non-zero 'unused bits' value, it will be handled correctly + */ + long flags; +}; + +/* + * ASN1_ENCODING structure: this is used to save the received encoding of an + * ASN1 type. This is useful to get round problems with invalid encodings + * which can break signatures. + */ + +typedef struct ASN1_ENCODING_st { + unsigned char *enc; /* DER encoding */ + long len; /* Length of encoding */ + int modified; /* set to 1 if 'enc' is invalid */ +} ASN1_ENCODING; + +/* Used with ASN1 LONG type: if a long is set to this it is omitted */ +# define ASN1_LONG_UNDEF 0x7fffffffL + +# define STABLE_FLAGS_MALLOC 0x01 +# define STABLE_NO_MASK 0x02 +# define DIRSTRING_TYPE \ + (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) +# define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) + +typedef struct asn1_string_table_st { + int nid; + long minsize; + long maxsize; + unsigned long mask; + unsigned long flags; +} ASN1_STRING_TABLE; + +DECLARE_STACK_OF(ASN1_STRING_TABLE) + +/* size limits: this stuff is taken straight from RFC2459 */ + +# define ub_name 32768 +# define ub_common_name 64 +# define ub_locality_name 128 +# define ub_state_name 128 +# define ub_organization_name 64 +# define ub_organization_unit_name 64 +# define ub_title 64 +# define ub_email_address 128 + +/* + * Declarations for template structures: for full definitions see asn1t.h + */ +typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; +typedef struct ASN1_TLC_st ASN1_TLC; +/* This is just an opaque pointer */ +typedef struct ASN1_VALUE_st ASN1_VALUE; + +/* Declare ASN1 functions: the implement macro in in asn1t.h */ + +# define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) + +# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) + +# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ + type *d2i_##name(type **a, const unsigned char **in, long len); \ + int i2d_##name(type *a, unsigned char **out); \ + DECLARE_ASN1_ITEM(itname) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ + type *d2i_##name(type **a, const unsigned char **in, long len); \ + int i2d_##name(const type *a, unsigned char **out); \ + DECLARE_ASN1_ITEM(name) + +# define DECLARE_ASN1_NDEF_FUNCTION(name) \ + int i2d_##name##_NDEF(name *a, unsigned char **out); + +# define DECLARE_ASN1_FUNCTIONS_const(name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + type *name##_new(void); \ + void name##_free(type *a); + +# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) + +# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ + int fname##_print_ctx(BIO *out, stname *x, int indent, \ + const ASN1_PCTX *pctx); + +# define D2I_OF(type) type *(*)(type **,const unsigned char **,long) +# define I2D_OF(type) int (*)(type *,unsigned char **) +# define I2D_OF_const(type) int (*)(const type *,unsigned char **) + +# define CHECKED_D2I_OF(type, d2i) \ + ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) +# define CHECKED_I2D_OF(type, i2d) \ + ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) +# define CHECKED_NEW_OF(type, xnew) \ + ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) +# define CHECKED_PTR_OF(type, p) \ + ((void*) (1 ? p : (type*)0)) +# define CHECKED_PPTR_OF(type, p) \ + ((void**) (1 ? p : (type**)0)) + +# define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) +# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **) +# define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) + +TYPEDEF_D2I2D_OF(void); + +/*- + * The following macros and typedefs allow an ASN1_ITEM + * to be embedded in a structure and referenced. Since + * the ASN1_ITEM pointers need to be globally accessible + * (possibly from shared libraries) they may exist in + * different forms. On platforms that support it the + * ASN1_ITEM structure itself will be globally exported. + * Other platforms will export a function that returns + * an ASN1_ITEM pointer. + * + * To handle both cases transparently the macros below + * should be used instead of hard coding an ASN1_ITEM + * pointer in a structure. + * + * The structure will look like this: + * + * typedef struct SOMETHING_st { + * ... + * ASN1_ITEM_EXP *iptr; + * ... + * } SOMETHING; + * + * It would be initialised as e.g.: + * + * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; + * + * and the actual pointer extracted with: + * + * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); + * + * Finally an ASN1_ITEM pointer can be extracted from an + * appropriate reference with: ASN1_ITEM_rptr(X509). This + * would be used when a function takes an ASN1_ITEM * argument. + * + */ + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* ASN1_ITEM pointer exported type */ +typedef const ASN1_ITEM ASN1_ITEM_EXP; + +/* Macro to obtain ASN1_ITEM pointer from exported type */ +# define ASN1_ITEM_ptr(iptr) (iptr) + +/* Macro to include ASN1_ITEM pointer from base type */ +# define ASN1_ITEM_ref(iptr) (&(iptr##_it)) + +# define ASN1_ITEM_rptr(ref) (&(ref##_it)) + +# define DECLARE_ASN1_ITEM(name) \ + OPENSSL_EXTERN const ASN1_ITEM name##_it; + +# else + +/* + * Platforms that can't easily handle shared global variables are declared as + * functions returning ASN1_ITEM pointers. + */ + +/* ASN1_ITEM pointer exported type */ +typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); + +/* Macro to obtain ASN1_ITEM pointer from exported type */ +# define ASN1_ITEM_ptr(iptr) (iptr()) + +/* Macro to include ASN1_ITEM pointer from base type */ +# define ASN1_ITEM_ref(iptr) (iptr##_it) + +# define ASN1_ITEM_rptr(ref) (ref##_it()) + +# define DECLARE_ASN1_ITEM(name) \ + const ASN1_ITEM * name##_it(void); + +# endif + +/* Parameters used by ASN1_STRING_print_ex() */ + +/* + * These determine which characters to escape: RFC2253 special characters, + * control characters and MSB set characters + */ + +# define ASN1_STRFLGS_ESC_2253 1 +# define ASN1_STRFLGS_ESC_CTRL 2 +# define ASN1_STRFLGS_ESC_MSB 4 + +/* + * This flag determines how we do escaping: normally RC2253 backslash only, + * set this to use backslash and quote. + */ + +# define ASN1_STRFLGS_ESC_QUOTE 8 + +/* These three flags are internal use only. */ + +/* Character is a valid PrintableString character */ +# define CHARTYPE_PRINTABLESTRING 0x10 +/* Character needs escaping if it is the first character */ +# define CHARTYPE_FIRST_ESC_2253 0x20 +/* Character needs escaping if it is the last character */ +# define CHARTYPE_LAST_ESC_2253 0x40 + +/* + * NB the internal flags are safely reused below by flags handled at the top + * level. + */ + +/* + * If this is set we convert all character strings to UTF8 first + */ + +# define ASN1_STRFLGS_UTF8_CONVERT 0x10 + +/* + * If this is set we don't attempt to interpret content: just assume all + * strings are 1 byte per character. This will produce some pretty odd + * looking output! + */ + +# define ASN1_STRFLGS_IGNORE_TYPE 0x20 + +/* If this is set we include the string type in the output */ +# define ASN1_STRFLGS_SHOW_TYPE 0x40 + +/* + * This determines which strings to display and which to 'dump' (hex dump of + * content octets or DER encoding). We can only dump non character strings or + * everything. If we don't dump 'unknown' they are interpreted as character + * strings with 1 octet per character and are subject to the usual escaping + * options. + */ + +# define ASN1_STRFLGS_DUMP_ALL 0x80 +# define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 + +/* + * These determine what 'dumping' does, we can dump the content octets or the + * DER encoding: both use the RFC2253 #XXXXX notation. + */ + +# define ASN1_STRFLGS_DUMP_DER 0x200 + +/* + * All the string flags consistent with RFC2253, escaping control characters + * isn't essential in RFC2253 but it is advisable anyway. + */ + +# define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ + ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + ASN1_STRFLGS_UTF8_CONVERT | \ + ASN1_STRFLGS_DUMP_UNKNOWN | \ + ASN1_STRFLGS_DUMP_DER) + +DECLARE_STACK_OF(ASN1_INTEGER) +DECLARE_ASN1_SET_OF(ASN1_INTEGER) + +DECLARE_STACK_OF(ASN1_GENERALSTRING) + +typedef struct asn1_type_st { + int type; + union { + char *ptr; + ASN1_BOOLEAN boolean; + ASN1_STRING *asn1_string; + ASN1_OBJECT *object; + ASN1_INTEGER *integer; + ASN1_ENUMERATED *enumerated; + ASN1_BIT_STRING *bit_string; + ASN1_OCTET_STRING *octet_string; + ASN1_PRINTABLESTRING *printablestring; + ASN1_T61STRING *t61string; + ASN1_IA5STRING *ia5string; + ASN1_GENERALSTRING *generalstring; + ASN1_BMPSTRING *bmpstring; + ASN1_UNIVERSALSTRING *universalstring; + ASN1_UTCTIME *utctime; + ASN1_GENERALIZEDTIME *generalizedtime; + ASN1_VISIBLESTRING *visiblestring; + ASN1_UTF8STRING *utf8string; + /* + * set and sequence are left complete and still contain the set or + * sequence bytes + */ + ASN1_STRING *set; + ASN1_STRING *sequence; + ASN1_VALUE *asn1_value; + } value; +} ASN1_TYPE; + +DECLARE_STACK_OF(ASN1_TYPE) +DECLARE_ASN1_SET_OF(ASN1_TYPE) + +typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; + +DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) + +typedef struct NETSCAPE_X509_st { + ASN1_OCTET_STRING *header; + X509 *cert; +} NETSCAPE_X509; + +/* This is used to contain a list of bit names */ +typedef struct BIT_STRING_BITNAME_st { + int bitnum; + const char *lname; + const char *sname; +} BIT_STRING_BITNAME; + +# define M_ASN1_STRING_length(x) ((x)->length) +# define M_ASN1_STRING_length_set(x, n) ((x)->length = (n)) +# define M_ASN1_STRING_type(x) ((x)->type) +# define M_ASN1_STRING_data(x) ((x)->data) + +/* Macros for string operations */ +# define M_ASN1_BIT_STRING_new() (ASN1_BIT_STRING *)\ + ASN1_STRING_type_new(V_ASN1_BIT_STRING) +# define M_ASN1_BIT_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_BIT_STRING_dup(a) (ASN1_BIT_STRING *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) +# define M_ASN1_BIT_STRING_cmp(a,b) ASN1_STRING_cmp(\ + (const ASN1_STRING *)a,(const ASN1_STRING *)b) +# define M_ASN1_BIT_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) + +# define M_ASN1_INTEGER_new() (ASN1_INTEGER *)\ + ASN1_STRING_type_new(V_ASN1_INTEGER) +# define M_ASN1_INTEGER_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_INTEGER_dup(a) (ASN1_INTEGER *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) +# define M_ASN1_INTEGER_cmp(a,b) ASN1_STRING_cmp(\ + (const ASN1_STRING *)a,(const ASN1_STRING *)b) + +# define M_ASN1_ENUMERATED_new() (ASN1_ENUMERATED *)\ + ASN1_STRING_type_new(V_ASN1_ENUMERATED) +# define M_ASN1_ENUMERATED_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_ENUMERATED_dup(a) (ASN1_ENUMERATED *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) +# define M_ASN1_ENUMERATED_cmp(a,b) ASN1_STRING_cmp(\ + (const ASN1_STRING *)a,(const ASN1_STRING *)b) + +# define M_ASN1_OCTET_STRING_new() (ASN1_OCTET_STRING *)\ + ASN1_STRING_type_new(V_ASN1_OCTET_STRING) +# define M_ASN1_OCTET_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_OCTET_STRING_dup(a) (ASN1_OCTET_STRING *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) +# define M_ASN1_OCTET_STRING_cmp(a,b) ASN1_STRING_cmp(\ + (const ASN1_STRING *)a,(const ASN1_STRING *)b) +# define M_ASN1_OCTET_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) +# define M_ASN1_OCTET_STRING_print(a,b) ASN1_STRING_print(a,(ASN1_STRING *)b) +# define M_i2d_ASN1_OCTET_STRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_OCTET_STRING,\ + V_ASN1_UNIVERSAL) + +# define B_ASN1_TIME \ + B_ASN1_UTCTIME | \ + B_ASN1_GENERALIZEDTIME + +# define B_ASN1_PRINTABLE \ + B_ASN1_NUMERICSTRING| \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_T61STRING| \ + B_ASN1_IA5STRING| \ + B_ASN1_BIT_STRING| \ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING|\ + B_ASN1_SEQUENCE|\ + B_ASN1_UNKNOWN + +# define B_ASN1_DIRECTORYSTRING \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_TELETEXSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_UTF8STRING + +# define B_ASN1_DISPLAYTEXT \ + B_ASN1_IA5STRING| \ + B_ASN1_VISIBLESTRING| \ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING + +# define M_ASN1_PRINTABLE_new() ASN1_STRING_type_new(V_ASN1_T61STRING) +# define M_ASN1_PRINTABLE_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_PRINTABLE(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ + pp,a->type,V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_PRINTABLE(a,pp,l) \ + d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ + B_ASN1_PRINTABLE) + +# define M_DIRECTORYSTRING_new() ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING) +# define M_DIRECTORYSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_DIRECTORYSTRING(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ + pp,a->type,V_ASN1_UNIVERSAL) +# define M_d2i_DIRECTORYSTRING(a,pp,l) \ + d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ + B_ASN1_DIRECTORYSTRING) + +# define M_DISPLAYTEXT_new() ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) +# define M_DISPLAYTEXT_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_DISPLAYTEXT(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ + pp,a->type,V_ASN1_UNIVERSAL) +# define M_d2i_DISPLAYTEXT(a,pp,l) \ + d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ + B_ASN1_DISPLAYTEXT) + +# define M_ASN1_PRINTABLESTRING_new() (ASN1_PRINTABLESTRING *)\ + ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING) +# define M_ASN1_PRINTABLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_PRINTABLESTRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_PRINTABLESTRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_PRINTABLESTRING(a,pp,l) \ + (ASN1_PRINTABLESTRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_PRINTABLESTRING) + +# define M_ASN1_T61STRING_new() (ASN1_T61STRING *)\ + ASN1_STRING_type_new(V_ASN1_T61STRING) +# define M_ASN1_T61STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_T61STRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_T61STRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_T61STRING(a,pp,l) \ + (ASN1_T61STRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_T61STRING) + +# define M_ASN1_IA5STRING_new() (ASN1_IA5STRING *)\ + ASN1_STRING_type_new(V_ASN1_IA5STRING) +# define M_ASN1_IA5STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_IA5STRING_dup(a) \ + (ASN1_IA5STRING *)ASN1_STRING_dup((const ASN1_STRING *)a) +# define M_i2d_ASN1_IA5STRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_IA5STRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_IA5STRING(a,pp,l) \ + (ASN1_IA5STRING *)d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l,\ + B_ASN1_IA5STRING) + +# define M_ASN1_UTCTIME_new() (ASN1_UTCTIME *)\ + ASN1_STRING_type_new(V_ASN1_UTCTIME) +# define M_ASN1_UTCTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_UTCTIME_dup(a) (ASN1_UTCTIME *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) + +# define M_ASN1_GENERALIZEDTIME_new() (ASN1_GENERALIZEDTIME *)\ + ASN1_STRING_type_new(V_ASN1_GENERALIZEDTIME) +# define M_ASN1_GENERALIZEDTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_GENERALIZEDTIME_dup(a) (ASN1_GENERALIZEDTIME *)ASN1_STRING_dup(\ + (const ASN1_STRING *)a) + +# define M_ASN1_TIME_new() (ASN1_TIME *)\ + ASN1_STRING_type_new(V_ASN1_UTCTIME) +# define M_ASN1_TIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_ASN1_TIME_dup(a) (ASN1_TIME *)\ + ASN1_STRING_dup((const ASN1_STRING *)a) + +# define M_ASN1_GENERALSTRING_new() (ASN1_GENERALSTRING *)\ + ASN1_STRING_type_new(V_ASN1_GENERALSTRING) +# define M_ASN1_GENERALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_GENERALSTRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_GENERALSTRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_GENERALSTRING(a,pp,l) \ + (ASN1_GENERALSTRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_GENERALSTRING) + +# define M_ASN1_UNIVERSALSTRING_new() (ASN1_UNIVERSALSTRING *)\ + ASN1_STRING_type_new(V_ASN1_UNIVERSALSTRING) +# define M_ASN1_UNIVERSALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_UNIVERSALSTRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UNIVERSALSTRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_UNIVERSALSTRING(a,pp,l) \ + (ASN1_UNIVERSALSTRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_UNIVERSALSTRING) + +# define M_ASN1_BMPSTRING_new() (ASN1_BMPSTRING *)\ + ASN1_STRING_type_new(V_ASN1_BMPSTRING) +# define M_ASN1_BMPSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_BMPSTRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_BMPSTRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_BMPSTRING(a,pp,l) \ + (ASN1_BMPSTRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_BMPSTRING) + +# define M_ASN1_VISIBLESTRING_new() (ASN1_VISIBLESTRING *)\ + ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) +# define M_ASN1_VISIBLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_VISIBLESTRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_VISIBLESTRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_VISIBLESTRING(a,pp,l) \ + (ASN1_VISIBLESTRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_VISIBLESTRING) + +# define M_ASN1_UTF8STRING_new() (ASN1_UTF8STRING *)\ + ASN1_STRING_type_new(V_ASN1_UTF8STRING) +# define M_ASN1_UTF8STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) +# define M_i2d_ASN1_UTF8STRING(a,pp) \ + i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UTF8STRING,\ + V_ASN1_UNIVERSAL) +# define M_d2i_ASN1_UTF8STRING(a,pp,l) \ + (ASN1_UTF8STRING *)d2i_ASN1_type_bytes\ + ((ASN1_STRING **)a,pp,l,B_ASN1_UTF8STRING) + + /* for the is_set parameter to i2d_ASN1_SET */ +# define IS_SEQUENCE 0 +# define IS_SET 1 + +DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) + +int ASN1_TYPE_get(ASN1_TYPE *a); +void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); +int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); +int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); + +ASN1_OBJECT *ASN1_OBJECT_new(void); +void ASN1_OBJECT_free(ASN1_OBJECT *a); +int i2d_ASN1_OBJECT(ASN1_OBJECT *a, unsigned char **pp); +ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, + long length); +ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, + long length); + +DECLARE_ASN1_ITEM(ASN1_OBJECT) + +DECLARE_STACK_OF(ASN1_OBJECT) +DECLARE_ASN1_SET_OF(ASN1_OBJECT) + +ASN1_STRING *ASN1_STRING_new(void); +void ASN1_STRING_free(ASN1_STRING *a); +void ASN1_STRING_clear_free(ASN1_STRING *a); +int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); +ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); +ASN1_STRING *ASN1_STRING_type_new(int type); +int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); + /* + * Since this is used to store all sorts of things, via macros, for now, + * make its data void * + */ +int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); +void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); +int ASN1_STRING_length(const ASN1_STRING *x); +void ASN1_STRING_length_set(ASN1_STRING *x, int n); +int ASN1_STRING_type(ASN1_STRING *x); +unsigned char *ASN1_STRING_data(ASN1_STRING *x); + +DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) +int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp); +ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, + const unsigned char **pp, long length); +int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length); +int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); +int ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a, int n); +int ASN1_BIT_STRING_check(ASN1_BIT_STRING *a, + unsigned char *flags, int flags_len); + +# ifndef OPENSSL_NO_BIO +int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, + BIT_STRING_BITNAME *tbl, int indent); +# endif +int ASN1_BIT_STRING_num_asc(char *name, BIT_STRING_BITNAME *tbl); +int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, char *name, int value, + BIT_STRING_BITNAME *tbl); + +int i2d_ASN1_BOOLEAN(int a, unsigned char **pp); +int d2i_ASN1_BOOLEAN(int *a, const unsigned char **pp, long length); + +DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) +int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp); +ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp, + long length); +ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, + long length); +ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x); +int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); + +DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) + +int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); +ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); +ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); +int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); +# if 0 +time_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s); +# endif + +int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, + time_t t); +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); + +DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) +ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); +int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, + const ASN1_OCTET_STRING *b); +int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, + int len); + +DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_NULL) +DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) + +int UTF8_getc(const unsigned char *str, int len, unsigned long *val); +int UTF8_putc(unsigned char *str, int len, unsigned long value); + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) +DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_TIME) + +DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) + +ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); +ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_TIME_check(ASN1_TIME *t); +ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZEDTIME + **out); +int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); + +int i2d_ASN1_SET(STACK_OF(OPENSSL_BLOCK) *a, unsigned char **pp, + i2d_of_void *i2d, int ex_tag, int ex_class, int is_set); +STACK_OF(OPENSSL_BLOCK) *d2i_ASN1_SET(STACK_OF(OPENSSL_BLOCK) **a, + const unsigned char **pp, + long length, d2i_of_void *d2i, + void (*free_func) (OPENSSL_BLOCK), + int ex_tag, int ex_class); + +# ifndef OPENSSL_NO_BIO +int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a); +int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); +int i2a_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *a); +int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); +int i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a); +int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); +int i2a_ASN1_STRING(BIO *bp, ASN1_STRING *a, int type); +# endif +int i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *a); + +int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num); +ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, + const char *sn, const char *ln); + +int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); +long ASN1_INTEGER_get(const ASN1_INTEGER *a); +ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); +BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn); + +int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); +long ASN1_ENUMERATED_get(ASN1_ENUMERATED *a); +ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai); +BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai, BIGNUM *bn); + +/* General */ +/* given a string, return the correct type, max is the maximum length */ +int ASN1_PRINTABLE_type(const unsigned char *s, int max); + +int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass); +ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, const unsigned char **pp, + long length, int Ptag, int Pclass); +unsigned long ASN1_tag2bit(int tag); +/* type is one or more of the B_ASN1_ values. */ +ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a, const unsigned char **pp, + long length, int type); + +/* PARSING */ +int asn1_Finish(ASN1_CTX *c); +int asn1_const_Finish(ASN1_const_CTX *c); + +/* SPECIALS */ +int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, + int *pclass, long omax); +int ASN1_check_infinite_end(unsigned char **p, long len); +int ASN1_const_check_infinite_end(const unsigned char **p, long len); +void ASN1_put_object(unsigned char **pp, int constructed, int length, + int tag, int xclass); +int ASN1_put_eoc(unsigned char **pp); +int ASN1_object_size(int constructed, int length, int tag); + +/* Used to implement other functions */ +void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); + +# define ASN1_dup_of(type,i2d,d2i,x) \ + ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ + CHECKED_D2I_OF(type, d2i), \ + CHECKED_PTR_OF(type, x))) + +# define ASN1_dup_of_const(type,i2d,d2i,x) \ + ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ + CHECKED_D2I_OF(type, d2i), \ + CHECKED_PTR_OF(const type, x))) + +void *ASN1_item_dup(const ASN1_ITEM *it, void *x); + +/* ASN1 alloc/free macros for when a type is only used internally */ + +# define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) +# define M_ASN1_free_of(x, type) \ + ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) + +# ifndef OPENSSL_NO_FP_API +void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); + +# define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); +int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x); + +# define ASN1_i2d_fp_of(type,i2d,out,x) \ + (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(type, x))) + +# define ASN1_i2d_fp_of_const(type,i2d,out,x) \ + (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); +int ASN1_STRING_print_ex_fp(FILE *fp, ASN1_STRING *str, unsigned long flags); +# endif + +int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in); + +# ifndef OPENSSL_NO_BIO +void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); + +# define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); +int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x); + +# define ASN1_i2d_bio_of(type,i2d,out,x) \ + (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(type, x))) + +# define ASN1_i2d_bio_of_const(type,i2d,out,x) \ + (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); +int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); +int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); +int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); +int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); +int ASN1_STRING_print_ex(BIO *out, ASN1_STRING *str, unsigned long flags); +int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, + unsigned char *buf, int off); +int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent); +int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, + int dump); +# endif +const char *ASN1_tag2str(int tag); + +/* Used to load and write netscape format cert */ + +DECLARE_ASN1_FUNCTIONS(NETSCAPE_X509) + +int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); + +int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len); +int ASN1_TYPE_get_octetstring(ASN1_TYPE *a, unsigned char *data, int max_len); +int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, + unsigned char *data, int len); +int ASN1_TYPE_get_int_octetstring(ASN1_TYPE *a, long *num, + unsigned char *data, int max_len); + +STACK_OF(OPENSSL_BLOCK) *ASN1_seq_unpack(const unsigned char *buf, int len, + d2i_of_void *d2i, + void (*free_func) (OPENSSL_BLOCK)); +unsigned char *ASN1_seq_pack(STACK_OF(OPENSSL_BLOCK) *safes, i2d_of_void *i2d, + unsigned char **buf, int *len); +void *ASN1_unpack_string(ASN1_STRING *oct, d2i_of_void *d2i); +void *ASN1_item_unpack(ASN1_STRING *oct, const ASN1_ITEM *it); +ASN1_STRING *ASN1_pack_string(void *obj, i2d_of_void *i2d, + ASN1_OCTET_STRING **oct); + +# define ASN1_pack_string_of(type,obj,i2d,oct) \ + (ASN1_pack_string(CHECKED_PTR_OF(type, obj), \ + CHECKED_I2D_OF(type, i2d), \ + oct)) + +ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, + ASN1_OCTET_STRING **oct); + +void ASN1_STRING_set_default_mask(unsigned long mask); +int ASN1_STRING_set_default_mask_asc(const char *p); +unsigned long ASN1_STRING_get_default_mask(void); +int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask); +int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask, + long minsize, long maxsize); + +ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, + const unsigned char *in, int inlen, + int inform, int nid); +ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); +int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); +void ASN1_STRING_TABLE_cleanup(void); + +/* ASN1 template functions */ + +/* Old API compatible functions */ +ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); +void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it); +int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); +int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, + const ASN1_ITEM *it); + +void ASN1_add_oid_module(void); + +ASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf); +ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf); + +/* ASN1 Print flags */ + +/* Indicate missing OPTIONAL fields */ +# define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 +/* Mark start and end of SEQUENCE */ +# define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 +/* Mark start and end of SEQUENCE/SET OF */ +# define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 +/* Show the ASN1 type of primitives */ +# define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 +/* Don't show ASN1 type of ANY */ +# define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 +/* Don't show ASN1 type of MSTRINGs */ +# define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 +/* Don't show field names in SEQUENCE */ +# define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 +/* Show structure names of each SEQUENCE field */ +# define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 +/* Don't show structure name even at top level */ +# define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 + +int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, + const ASN1_ITEM *it, const ASN1_PCTX *pctx); +ASN1_PCTX *ASN1_PCTX_new(void); +void ASN1_PCTX_free(ASN1_PCTX *p); +unsigned long ASN1_PCTX_get_flags(ASN1_PCTX *p); +void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_nm_flags(ASN1_PCTX *p); +void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_cert_flags(ASN1_PCTX *p); +void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_oid_flags(ASN1_PCTX *p); +void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_str_flags(ASN1_PCTX *p); +void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); + +BIO_METHOD *BIO_f_asn1(void); + +BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); + +int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const ASN1_ITEM *it); +int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const char *hdr, const ASN1_ITEM *it); +int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); +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. + */ +void 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_ENUMERATED 101 +# 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_COLLATE_PRIMITIVE 105 +# 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_DUP 111 +# define ASN1_F_ASN1_ENUMERATED_SET 112 +# define ASN1_F_ASN1_ENUMERATED_TO_BN 113 +# 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_GENERALIZEDTIME_SET 185 +# define ASN1_F_ASN1_GENERATE_V3 178 +# define ASN1_F_ASN1_GET_OBJECT 114 +# define ASN1_F_ASN1_HEADER_NEW 115 +# define ASN1_F_ASN1_I2D_BIO 116 +# define ASN1_F_ASN1_I2D_FP 117 +# define ASN1_F_ASN1_INTEGER_SET 118 +# define ASN1_F_ASN1_INTEGER_TO_BN 119 +# define ASN1_F_ASN1_ITEM_D2I_FP 206 +# define ASN1_F_ASN1_ITEM_DUP 191 +# define ASN1_F_ASN1_ITEM_EX_COMBINE_NEW 121 +# define ASN1_F_ASN1_ITEM_EX_D2I 120 +# 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_PACK_STRING 124 +# define ASN1_F_ASN1_PCTX_NEW 205 +# define ASN1_F_ASN1_PKCS5_PBE_SET 125 +# define ASN1_F_ASN1_SEQ_PACK 126 +# define ASN1_F_ASN1_SEQ_UNPACK 127 +# define ASN1_F_ASN1_SIGN 128 +# define ASN1_F_ASN1_STR2TYPE 179 +# define ASN1_F_ASN1_STRING_SET 186 +# define ASN1_F_ASN1_STRING_TABLE_ADD 129 +# 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_TIME_SET 175 +# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 +# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 +# define ASN1_F_ASN1_UNPACK_STRING 136 +# define ASN1_F_ASN1_UTCTIME_ADJ 218 +# define ASN1_F_ASN1_UTCTIME_SET 187 +# 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_ENUMERATED 138 +# define ASN1_F_BN_TO_ASN1_INTEGER 139 +# 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_COLLECT_DATA 140 +# define ASN1_F_D2I_ASN1_BIT_STRING 141 +# define ASN1_F_D2I_ASN1_BOOLEAN 142 +# define ASN1_F_D2I_ASN1_BYTES 143 +# define ASN1_F_D2I_ASN1_GENERALIZEDTIME 144 +# define ASN1_F_D2I_ASN1_HEADER 145 +# define ASN1_F_D2I_ASN1_INTEGER 146 +# define ASN1_F_D2I_ASN1_OBJECT 147 +# define ASN1_F_D2I_ASN1_SET 148 +# define ASN1_F_D2I_ASN1_TYPE_BYTES 149 +# define ASN1_F_D2I_ASN1_UINTEGER 150 +# define ASN1_F_D2I_ASN1_UTCTIME 151 +# define ASN1_F_D2I_AUTOPRIVATEKEY 207 +# define ASN1_F_D2I_NETSCAPE_RSA 152 +# define ASN1_F_D2I_NETSCAPE_RSA_2 153 +# define ASN1_F_D2I_PRIVATEKEY 154 +# define ASN1_F_D2I_PUBLICKEY 155 +# define ASN1_F_D2I_RSA_NET 200 +# define ASN1_F_D2I_RSA_NET_2 201 +# define ASN1_F_D2I_X509 156 +# define ASN1_F_D2I_X509_CINF 157 +# define ASN1_F_D2I_X509_PKEY 159 +# define ASN1_F_I2D_ASN1_BIO_STREAM 211 +# define ASN1_F_I2D_ASN1_SET 188 +# define ASN1_F_I2D_ASN1_TIME 160 +# 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_NET 162 +# 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_PBE_SET 202 +# define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 +# define ASN1_F_PKCS5_PBKDF2_SET 219 +# define ASN1_F_SMIME_READ_ASN1 212 +# define ASN1_F_SMIME_TEXT 213 +# define ASN1_F_X509_CINF_NEW 168 +# 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_NEW 172 +# 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_CLASS 101 +# define ASN1_R_BAD_OBJECT_HEADER 102 +# define ASN1_R_BAD_PASSWORD_READ 103 +# define ASN1_R_BAD_TAG 104 +# 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_DECODING_ERROR 111 +# 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_PARSING_SET_ELEMENT 113 +# 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_EXPECTING_A_BOOLEAN 117 +# define ASN1_R_EXPECTING_A_TIME 118 +# 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_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_TAGGED_ANY 127 +# define ASN1_R_ILLEGAL_TIME_VALUE 184 +# 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_SEPARATOR 131 +# define ASN1_R_INVALID_TIME_FORMAT 132 +# define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 +# define ASN1_R_INVALID_UTF8STRING 134 +# define ASN1_R_IV_TOO_LARGE 135 +# define ASN1_R_LENGTH_ERROR 136 +# 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_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_DEFAULT_DIGEST 201 +# 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_PRIVATE_KEY_HEADER_MISSING 146 +# 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_TAG_VALUE_TOO_HIGH 153 +# 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_LONG 155 +# define ASN1_R_TYPE_NOT_CONSTRUCTED 156 +# define ASN1_R_TYPE_NOT_PRIMITIVE 218 +# define ASN1_R_UNABLE_TO_DECODE_RSA_KEY 157 +# define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY 158 +# 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_UNKOWN_FORMAT 195 +# define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 +# define ASN1_R_UNSUPPORTED_CIPHER 165 +# define ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM 166 +# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 +# define ASN1_R_UNSUPPORTED_TYPE 196 +# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 +# define ASN1_R_WRONG_TAG 168 +# define ASN1_R_WRONG_TYPE 169 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/asn1_mac.h b/Sources/OpenSSL/include/openssl/asn1_mac.h new file mode 100644 index 0000000000..972aac3a58 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/asn1_mac.h @@ -0,0 +1,579 @@ +/* crypto/asn1/asn1_mac.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_ASN1_MAC_H +# define HEADER_ASN1_MAC_H + +# include "asn1.h" + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef ASN1_MAC_ERR_LIB +# define ASN1_MAC_ERR_LIB ERR_LIB_ASN1 +# endif + +# define ASN1_MAC_H_err(f,r,line) \ + ERR_PUT_error(ASN1_MAC_ERR_LIB,(f),(r),__FILE__,(line)) + +# define M_ASN1_D2I_vars(a,type,func) \ + ASN1_const_CTX c; \ + type ret=NULL; \ + \ + c.pp=(const unsigned char **)pp; \ + c.q= *(const unsigned char **)pp; \ + c.error=ERR_R_NESTED_ASN1_ERROR; \ + if ((a == NULL) || ((*a) == NULL)) \ + { if ((ret=(type)func()) == NULL) \ + { c.line=__LINE__; goto err; } } \ + else ret=(*a); + +# define M_ASN1_D2I_Init() \ + c.p= *(const unsigned char **)pp; \ + c.max=(length == 0)?0:(c.p+length); + +# define M_ASN1_D2I_Finish_2(a) \ + if (!asn1_const_Finish(&c)) \ + { c.line=__LINE__; goto err; } \ + *(const unsigned char **)pp=c.p; \ + if (a != NULL) (*a)=ret; \ + return(ret); + +# define M_ASN1_D2I_Finish(a,func,e) \ + M_ASN1_D2I_Finish_2(a); \ +err:\ + ASN1_MAC_H_err((e),c.error,c.line); \ + asn1_add_error(*(const unsigned char **)pp,(int)(c.q- *pp)); \ + if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \ + return(NULL) + +# define M_ASN1_D2I_start_sequence() \ + if (!asn1_GetSequence(&c,&length)) \ + { c.line=__LINE__; goto err; } +/* Begin reading ASN1 without a surrounding sequence */ +# define M_ASN1_D2I_begin() \ + c.slen = length; + +/* End reading ASN1 with no check on length */ +# define M_ASN1_D2I_Finish_nolen(a, func, e) \ + *pp=c.p; \ + if (a != NULL) (*a)=ret; \ + return(ret); \ +err:\ + ASN1_MAC_H_err((e),c.error,c.line); \ + asn1_add_error(*pp,(int)(c.q- *pp)); \ + if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \ + return(NULL) + +# define M_ASN1_D2I_end_sequence() \ + (((c.inf&1) == 0)?(c.slen <= 0): \ + (c.eos=ASN1_const_check_infinite_end(&c.p,c.slen))) + +/* Don't use this with d2i_ASN1_BOOLEAN() */ +# define M_ASN1_D2I_get(b, func) \ + c.q=c.p; \ + if (func(&(b),&c.p,c.slen) == NULL) \ + {c.line=__LINE__; goto err; } \ + c.slen-=(c.p-c.q); + +/* Don't use this with d2i_ASN1_BOOLEAN() */ +# define M_ASN1_D2I_get_x(type,b,func) \ + c.q=c.p; \ + if (((D2I_OF(type))func)(&(b),&c.p,c.slen) == NULL) \ + {c.line=__LINE__; goto err; } \ + c.slen-=(c.p-c.q); + +/* use this instead () */ +# define M_ASN1_D2I_get_int(b,func) \ + c.q=c.p; \ + if (func(&(b),&c.p,c.slen) < 0) \ + {c.line=__LINE__; goto err; } \ + c.slen-=(c.p-c.q); + +# define M_ASN1_D2I_get_opt(b,func,type) \ + if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) \ + == (V_ASN1_UNIVERSAL|(type)))) \ + { \ + M_ASN1_D2I_get(b,func); \ + } + +# define M_ASN1_D2I_get_int_opt(b,func,type) \ + if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) \ + == (V_ASN1_UNIVERSAL|(type)))) \ + { \ + M_ASN1_D2I_get_int(b,func); \ + } + +# define M_ASN1_D2I_get_imp(b,func, type) \ + M_ASN1_next=(_tmp& V_ASN1_CONSTRUCTED)|type; \ + c.q=c.p; \ + if (func(&(b),&c.p,c.slen) == NULL) \ + {c.line=__LINE__; M_ASN1_next_prev = _tmp; goto err; } \ + c.slen-=(c.p-c.q);\ + M_ASN1_next_prev=_tmp; + +# define M_ASN1_D2I_get_IMP_opt(b,func,tag,type) \ + if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) == \ + (V_ASN1_CONTEXT_SPECIFIC|(tag)))) \ + { \ + unsigned char _tmp = M_ASN1_next; \ + M_ASN1_D2I_get_imp(b,func, type);\ + } + +# define M_ASN1_D2I_get_set(r,func,free_func) \ + M_ASN1_D2I_get_imp_set(r,func,free_func, \ + V_ASN1_SET,V_ASN1_UNIVERSAL); + +# define M_ASN1_D2I_get_set_type(type,r,func,free_func) \ + M_ASN1_D2I_get_imp_set_type(type,r,func,free_func, \ + V_ASN1_SET,V_ASN1_UNIVERSAL); + +# define M_ASN1_D2I_get_set_opt(r,func,free_func) \ + if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ + V_ASN1_CONSTRUCTED|V_ASN1_SET)))\ + { M_ASN1_D2I_get_set(r,func,free_func); } + +# define M_ASN1_D2I_get_set_opt_type(type,r,func,free_func) \ + if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ + V_ASN1_CONSTRUCTED|V_ASN1_SET)))\ + { M_ASN1_D2I_get_set_type(type,r,func,free_func); } + +# define M_ASN1_I2D_len_SET_opt(a,f) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + M_ASN1_I2D_len_SET(a,f); + +# define M_ASN1_I2D_put_SET_opt(a,f) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + M_ASN1_I2D_put_SET(a,f); + +# define M_ASN1_I2D_put_SEQUENCE_opt(a,f) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + M_ASN1_I2D_put_SEQUENCE(a,f); + +# define M_ASN1_I2D_put_SEQUENCE_opt_type(type,a,f) \ + if ((a != NULL) && (sk_##type##_num(a) != 0)) \ + M_ASN1_I2D_put_SEQUENCE_type(type,a,f); + +# define M_ASN1_D2I_get_IMP_set_opt(b,func,free_func,tag) \ + if ((c.slen != 0) && \ + (M_ASN1_next == \ + (V_ASN1_CONTEXT_SPECIFIC|V_ASN1_CONSTRUCTED|(tag))))\ + { \ + M_ASN1_D2I_get_imp_set(b,func,free_func,\ + tag,V_ASN1_CONTEXT_SPECIFIC); \ + } + +# define M_ASN1_D2I_get_IMP_set_opt_type(type,b,func,free_func,tag) \ + if ((c.slen != 0) && \ + (M_ASN1_next == \ + (V_ASN1_CONTEXT_SPECIFIC|V_ASN1_CONSTRUCTED|(tag))))\ + { \ + M_ASN1_D2I_get_imp_set_type(type,b,func,free_func,\ + tag,V_ASN1_CONTEXT_SPECIFIC); \ + } + +# define M_ASN1_D2I_get_seq(r,func,free_func) \ + M_ASN1_D2I_get_imp_set(r,func,free_func,\ + V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL); + +# define M_ASN1_D2I_get_seq_type(type,r,func,free_func) \ + M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,\ + V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL) + +# define M_ASN1_D2I_get_seq_opt(r,func,free_func) \ + if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ + V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\ + { M_ASN1_D2I_get_seq(r,func,free_func); } + +# define M_ASN1_D2I_get_seq_opt_type(type,r,func,free_func) \ + if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ + V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\ + { M_ASN1_D2I_get_seq_type(type,r,func,free_func); } + +# define M_ASN1_D2I_get_IMP_set(r,func,free_func,x) \ + M_ASN1_D2I_get_imp_set(r,func,free_func,\ + x,V_ASN1_CONTEXT_SPECIFIC); + +# define M_ASN1_D2I_get_IMP_set_type(type,r,func,free_func,x) \ + M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,\ + x,V_ASN1_CONTEXT_SPECIFIC); + +# define M_ASN1_D2I_get_imp_set(r,func,free_func,a,b) \ + c.q=c.p; \ + if (d2i_ASN1_SET(&(r),&c.p,c.slen,(char *(*)())func,\ + (void (*)())free_func,a,b) == NULL) \ + { c.line=__LINE__; goto err; } \ + c.slen-=(c.p-c.q); + +# define M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,a,b) \ + c.q=c.p; \ + if (d2i_ASN1_SET_OF_##type(&(r),&c.p,c.slen,func,\ + free_func,a,b) == NULL) \ + { c.line=__LINE__; goto err; } \ + c.slen-=(c.p-c.q); + +# define M_ASN1_D2I_get_set_strings(r,func,a,b) \ + c.q=c.p; \ + if (d2i_ASN1_STRING_SET(&(r),&c.p,c.slen,a,b) == NULL) \ + { c.line=__LINE__; goto err; } \ + c.slen-=(c.p-c.q); + +# define M_ASN1_D2I_get_EXP_opt(r,func,tag) \ + if ((c.slen != 0L) && (M_ASN1_next == \ + (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \ + { \ + int Tinf,Ttag,Tclass; \ + long Tlen; \ + \ + c.q=c.p; \ + Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \ + if (Tinf & 0x80) \ + { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ + c.line=__LINE__; goto err; } \ + if (Tinf == (V_ASN1_CONSTRUCTED+1)) \ + Tlen = c.slen - (c.p - c.q) - 2; \ + if (func(&(r),&c.p,Tlen) == NULL) \ + { c.line=__LINE__; goto err; } \ + if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \ + Tlen = c.slen - (c.p - c.q); \ + if(!ASN1_const_check_infinite_end(&c.p, Tlen)) \ + { c.error=ERR_R_MISSING_ASN1_EOS; \ + c.line=__LINE__; goto err; } \ + }\ + c.slen-=(c.p-c.q); \ + } + +# define M_ASN1_D2I_get_EXP_set_opt(r,func,free_func,tag,b) \ + if ((c.slen != 0) && (M_ASN1_next == \ + (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \ + { \ + int Tinf,Ttag,Tclass; \ + long Tlen; \ + \ + c.q=c.p; \ + Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \ + if (Tinf & 0x80) \ + { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ + c.line=__LINE__; goto err; } \ + if (Tinf == (V_ASN1_CONSTRUCTED+1)) \ + Tlen = c.slen - (c.p - c.q) - 2; \ + if (d2i_ASN1_SET(&(r),&c.p,Tlen,(char *(*)())func, \ + (void (*)())free_func, \ + b,V_ASN1_UNIVERSAL) == NULL) \ + { c.line=__LINE__; goto err; } \ + if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \ + Tlen = c.slen - (c.p - c.q); \ + if(!ASN1_check_infinite_end(&c.p, Tlen)) \ + { c.error=ERR_R_MISSING_ASN1_EOS; \ + c.line=__LINE__; goto err; } \ + }\ + c.slen-=(c.p-c.q); \ + } + +# define M_ASN1_D2I_get_EXP_set_opt_type(type,r,func,free_func,tag,b) \ + if ((c.slen != 0) && (M_ASN1_next == \ + (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \ + { \ + int Tinf,Ttag,Tclass; \ + long Tlen; \ + \ + c.q=c.p; \ + Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \ + if (Tinf & 0x80) \ + { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ + c.line=__LINE__; goto err; } \ + if (Tinf == (V_ASN1_CONSTRUCTED+1)) \ + Tlen = c.slen - (c.p - c.q) - 2; \ + if (d2i_ASN1_SET_OF_##type(&(r),&c.p,Tlen,func, \ + free_func,b,V_ASN1_UNIVERSAL) == NULL) \ + { c.line=__LINE__; goto err; } \ + if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \ + Tlen = c.slen - (c.p - c.q); \ + if(!ASN1_check_infinite_end(&c.p, Tlen)) \ + { c.error=ERR_R_MISSING_ASN1_EOS; \ + c.line=__LINE__; goto err; } \ + }\ + c.slen-=(c.p-c.q); \ + } + +/* New macros */ +# define M_ASN1_New_Malloc(ret,type) \ + if ((ret=(type *)OPENSSL_malloc(sizeof(type))) == NULL) \ + { c.line=__LINE__; goto err2; } + +# define M_ASN1_New(arg,func) \ + if (((arg)=func()) == NULL) return(NULL) + +# define M_ASN1_New_Error(a) \ +/*- err: ASN1_MAC_H_err((a),ERR_R_NESTED_ASN1_ERROR,c.line); \ + return(NULL);*/ \ + err2: ASN1_MAC_H_err((a),ERR_R_MALLOC_FAILURE,c.line); \ + return(NULL) + +/* + * BIG UGLY WARNING! This is so damn ugly I wanna puke. Unfortunately, some + * macros that use ASN1_const_CTX still insist on writing in the input + * stream. ARGH! ARGH! ARGH! Let's get rid of this macro package. Please? -- + * Richard Levitte + */ +# define M_ASN1_next (*((unsigned char *)(c.p))) +# define M_ASN1_next_prev (*((unsigned char *)(c.q))) + +/*************************************************/ + +# define M_ASN1_I2D_vars(a) int r=0,ret=0; \ + unsigned char *p; \ + if (a == NULL) return(0) + +/* Length Macros */ +# define M_ASN1_I2D_len(a,f) ret+=f(a,NULL) +# define M_ASN1_I2D_len_IMP_opt(a,f) if (a != NULL) M_ASN1_I2D_len(a,f) + +# define M_ASN1_I2D_len_SET(a,f) \ + ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET); + +# define M_ASN1_I2D_len_SET_type(type,a,f) \ + ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SET, \ + V_ASN1_UNIVERSAL,IS_SET); + +# define M_ASN1_I2D_len_SEQUENCE(a,f) \ + ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \ + IS_SEQUENCE); + +# define M_ASN1_I2D_len_SEQUENCE_type(type,a,f) \ + ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SEQUENCE, \ + V_ASN1_UNIVERSAL,IS_SEQUENCE) + +# define M_ASN1_I2D_len_SEQUENCE_opt(a,f) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + M_ASN1_I2D_len_SEQUENCE(a,f); + +# define M_ASN1_I2D_len_SEQUENCE_opt_type(type,a,f) \ + if ((a != NULL) && (sk_##type##_num(a) != 0)) \ + M_ASN1_I2D_len_SEQUENCE_type(type,a,f); + +# define M_ASN1_I2D_len_IMP_SET(a,f,x) \ + ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET); + +# define M_ASN1_I2D_len_IMP_SET_type(type,a,f,x) \ + ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \ + V_ASN1_CONTEXT_SPECIFIC,IS_SET); + +# define M_ASN1_I2D_len_IMP_SET_opt(a,f,x) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \ + IS_SET); + +# define M_ASN1_I2D_len_IMP_SET_opt_type(type,a,f,x) \ + if ((a != NULL) && (sk_##type##_num(a) != 0)) \ + ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \ + V_ASN1_CONTEXT_SPECIFIC,IS_SET); + +# define M_ASN1_I2D_len_IMP_SEQUENCE(a,f,x) \ + ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \ + IS_SEQUENCE); + +# define M_ASN1_I2D_len_IMP_SEQUENCE_opt(a,f,x) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \ + IS_SEQUENCE); + +# define M_ASN1_I2D_len_IMP_SEQUENCE_opt_type(type,a,f,x) \ + if ((a != NULL) && (sk_##type##_num(a) != 0)) \ + ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \ + V_ASN1_CONTEXT_SPECIFIC, \ + IS_SEQUENCE); + +# define M_ASN1_I2D_len_EXP_opt(a,f,mtag,v) \ + if (a != NULL)\ + { \ + v=f(a,NULL); \ + ret+=ASN1_object_size(1,v,mtag); \ + } + +# define M_ASN1_I2D_len_EXP_SET_opt(a,f,mtag,tag,v) \ + if ((a != NULL) && (sk_num(a) != 0))\ + { \ + v=i2d_ASN1_SET(a,NULL,f,tag,V_ASN1_UNIVERSAL,IS_SET); \ + ret+=ASN1_object_size(1,v,mtag); \ + } + +# define M_ASN1_I2D_len_EXP_SEQUENCE_opt(a,f,mtag,tag,v) \ + if ((a != NULL) && (sk_num(a) != 0))\ + { \ + v=i2d_ASN1_SET(a,NULL,f,tag,V_ASN1_UNIVERSAL, \ + IS_SEQUENCE); \ + ret+=ASN1_object_size(1,v,mtag); \ + } + +# define M_ASN1_I2D_len_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \ + if ((a != NULL) && (sk_##type##_num(a) != 0))\ + { \ + v=i2d_ASN1_SET_OF_##type(a,NULL,f,tag, \ + V_ASN1_UNIVERSAL, \ + IS_SEQUENCE); \ + ret+=ASN1_object_size(1,v,mtag); \ + } + +/* Put Macros */ +# define M_ASN1_I2D_put(a,f) f(a,&p) + +# define M_ASN1_I2D_put_IMP_opt(a,f,t) \ + if (a != NULL) \ + { \ + unsigned char *q=p; \ + f(a,&p); \ + *q=(V_ASN1_CONTEXT_SPECIFIC|t|(*q&V_ASN1_CONSTRUCTED));\ + } + +# define M_ASN1_I2D_put_SET(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SET,\ + V_ASN1_UNIVERSAL,IS_SET) +# define M_ASN1_I2D_put_SET_type(type,a,f) \ + i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET) +# define M_ASN1_I2D_put_IMP_SET(a,f,x) i2d_ASN1_SET(a,&p,f,x,\ + V_ASN1_CONTEXT_SPECIFIC,IS_SET) +# define M_ASN1_I2D_put_IMP_SET_type(type,a,f,x) \ + i2d_ASN1_SET_OF_##type(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET) +# define M_ASN1_I2D_put_IMP_SEQUENCE(a,f,x) i2d_ASN1_SET(a,&p,f,x,\ + V_ASN1_CONTEXT_SPECIFIC,IS_SEQUENCE) + +# define M_ASN1_I2D_put_SEQUENCE(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SEQUENCE,\ + V_ASN1_UNIVERSAL,IS_SEQUENCE) + +# define M_ASN1_I2D_put_SEQUENCE_type(type,a,f) \ + i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \ + IS_SEQUENCE) + +# define M_ASN1_I2D_put_SEQUENCE_opt(a,f) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + M_ASN1_I2D_put_SEQUENCE(a,f); + +# define M_ASN1_I2D_put_IMP_SET_opt(a,f,x) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + { i2d_ASN1_SET(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC, \ + IS_SET); } + +# define M_ASN1_I2D_put_IMP_SET_opt_type(type,a,f,x) \ + if ((a != NULL) && (sk_##type##_num(a) != 0)) \ + { i2d_ASN1_SET_OF_##type(a,&p,f,x, \ + V_ASN1_CONTEXT_SPECIFIC, \ + IS_SET); } + +# define M_ASN1_I2D_put_IMP_SEQUENCE_opt(a,f,x) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + { i2d_ASN1_SET(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC, \ + IS_SEQUENCE); } + +# define M_ASN1_I2D_put_IMP_SEQUENCE_opt_type(type,a,f,x) \ + if ((a != NULL) && (sk_##type##_num(a) != 0)) \ + { i2d_ASN1_SET_OF_##type(a,&p,f,x, \ + V_ASN1_CONTEXT_SPECIFIC, \ + IS_SEQUENCE); } + +# define M_ASN1_I2D_put_EXP_opt(a,f,tag,v) \ + if (a != NULL) \ + { \ + ASN1_put_object(&p,1,v,tag,V_ASN1_CONTEXT_SPECIFIC); \ + f(a,&p); \ + } + +# define M_ASN1_I2D_put_EXP_SET_opt(a,f,mtag,tag,v) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + { \ + ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ + i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SET); \ + } + +# define M_ASN1_I2D_put_EXP_SEQUENCE_opt(a,f,mtag,tag,v) \ + if ((a != NULL) && (sk_num(a) != 0)) \ + { \ + ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ + i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SEQUENCE); \ + } + +# define M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \ + if ((a != NULL) && (sk_##type##_num(a) != 0)) \ + { \ + ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ + i2d_ASN1_SET_OF_##type(a,&p,f,tag,V_ASN1_UNIVERSAL, \ + IS_SEQUENCE); \ + } + +# define M_ASN1_I2D_seq_total() \ + r=ASN1_object_size(1,ret,V_ASN1_SEQUENCE); \ + if (pp == NULL) return(r); \ + p= *pp; \ + ASN1_put_object(&p,1,ret,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL) + +# define M_ASN1_I2D_INF_seq_start(tag,ctx) \ + *(p++)=(V_ASN1_CONSTRUCTED|(tag)|(ctx)); \ + *(p++)=0x80 + +# define M_ASN1_I2D_INF_seq_end() *(p++)=0x00; *(p++)=0x00 + +# define M_ASN1_I2D_finish() *pp=p; \ + return(r); + +int asn1_GetSequence(ASN1_const_CTX *c, long *length); +void asn1_add_error(const unsigned char *address, int offset); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/asn1t.h b/Sources/OpenSSL/include/openssl/asn1t.h new file mode 100644 index 0000000000..ea9518080a --- /dev/null +++ b/Sources/OpenSSL/include/openssl/asn1t.h @@ -0,0 +1,973 @@ +/* asn1t.h */ +/* + * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project + * 2000. + */ +/* ==================================================================== + * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +#ifndef HEADER_ASN1T_H +# define HEADER_ASN1T_H + +# include +# include "e_os2.h" +# include "asn1.h" + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +/* ASN1 template defines, structures and functions */ + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr)) + +/* Macros for start and end of ASN1_ITEM definition */ + +# define ASN1_ITEM_start(itname) \ + OPENSSL_GLOBAL const ASN1_ITEM itname##_it = { + +# define ASN1_ITEM_end(itname) \ + }; + +# else + +/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr())) + +/* Macros for start and end of ASN1_ITEM definition */ + +# define ASN1_ITEM_start(itname) \ + const ASN1_ITEM * itname##_it(void) \ + { \ + static const ASN1_ITEM local_it = { + +# define ASN1_ITEM_end(itname) \ + }; \ + return &local_it; \ + } + +# endif + +/* Macros to aid ASN1 template writing */ + +# define ASN1_ITEM_TEMPLATE(tname) \ + static const ASN1_TEMPLATE tname##_item_tt + +# define ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_PRIMITIVE,\ + -1,\ + &tname##_item_tt,\ + 0,\ + NULL,\ + 0,\ + #tname \ + ASN1_ITEM_end(tname) + +/* This is a ASN1 type which just embeds a template */ + +/*- + * This pair helps declare a SEQUENCE. We can do: + * + * ASN1_SEQUENCE(stname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END(stname) + * + * This will produce an ASN1_ITEM called stname_it + * for a structure called stname. + * + * If you want the same structure but a different + * name then use: + * + * ASN1_SEQUENCE(itname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END_name(stname, itname) + * + * This will create an item called itname_it using + * a structure called stname. + */ + +# define ASN1_SEQUENCE(tname) \ + static const ASN1_TEMPLATE tname##_seq_tt[] + +# define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname) + +# define ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE(tname) \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_cb(tname, cb) \ + ASN1_SEQUENCE_cb(tname, cb) + +# define ASN1_SEQUENCE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_BROKEN_SEQUENCE(tname) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_ref(tname, cb, lck) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), lck, cb, 0}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_enc(tname, enc, cb) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(tname),\ + #tname \ + ASN1_ITEM_end(tname) + +# define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname) + +# define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/*- + * This pair helps declare a CHOICE type. We can do: + * + * ASN1_CHOICE(chname) = { + * ... CHOICE options ... + * ASN1_CHOICE_END(chname) + * + * This will produce an ASN1_ITEM called chname_it + * for a structure called chname. The structure + * definition must look like this: + * typedef struct { + * int type; + * union { + * ASN1_SOMETHING *opt1; + * ASN1_SOMEOTHER *opt2; + * } value; + * } chname; + * + * the name of the selector must be 'type'. + * to use an alternative selector name use the + * ASN1_CHOICE_END_selector() version. + */ + +# define ASN1_CHOICE(tname) \ + static const ASN1_TEMPLATE tname##_ch_tt[] + +# define ASN1_CHOICE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + ASN1_CHOICE(tname) + +# define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) + +# define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) + +# define ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_CHOICE_END_cb(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/* This helps with the template wrapper form of ASN1_ITEM */ + +# define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \ + (flags), (tag), 0,\ + #name, ASN1_ITEM_ref(type) } + +/* These help with SEQUENCE or CHOICE components */ + +/* used to declare other types */ + +# define ASN1_EX_TYPE(flags, tag, stname, field, type) { \ + (flags), (tag), offsetof(stname, field),\ + #field, ASN1_ITEM_ref(type) } + +/* used when the structure is combined with the parent */ + +# define ASN1_EX_COMBINE(flags, tag, type) { \ + (flags)|ASN1_TFLG_COMBINE, (tag), 0, NULL, ASN1_ITEM_ref(type) } + +/* 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) + +# define ASN1_EXP_EX(stname, field, type, tag, ex) \ + ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | ex, tag, stname, field, type) + +/* Any defined by macros: the field used is in the table itself */ + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } +# else +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } +# endif +/* Plain simple type */ +# define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) + +/* OPTIONAL simple type */ +# define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* IMPLICIT tagged simple type */ +# define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0) + +/* IMPLICIT tagged OPTIONAL simple type */ +# define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) + +/* Same as above but EXPLICIT */ + +# define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0) +# define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) + +/* SEQUENCE OF type */ +# define ASN1_SEQUENCE_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type) + +/* OPTIONAL SEQUENCE OF */ +# define ASN1_SEQUENCE_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Same as above but for SET OF */ + +# define ASN1_SET_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type) + +# define ASN1_SET_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */ + +# define ASN1_IMP_SET_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_EXP_SET_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +/* EXPLICIT using indefinite length constructed form */ +# define ASN1_NDEF_EXP(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF) + +/* EXPLICIT OPTIONAL using indefinite length constructed form */ +# define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF) + +/* Macros for the ASN1_ADB structure */ + +# define ASN1_ADB(name) \ + static const ASN1_ADB_TABLE name##_adbtbl[] + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION + +# define ASN1_ADB_END(name, flags, field, app_table, def, none) \ + ;\ + static const ASN1_ADB name##_adb = {\ + flags,\ + offsetof(name, field),\ + app_table,\ + name##_adbtbl,\ + sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ + def,\ + none\ + } + +# else + +# define ASN1_ADB_END(name, flags, field, app_table, def, none) \ + ;\ + static const ASN1_ITEM *name##_adb(void) \ + { \ + static const ASN1_ADB internal_adb = \ + {\ + flags,\ + offsetof(name, field),\ + app_table,\ + name##_adbtbl,\ + sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ + def,\ + none\ + }; \ + return (const ASN1_ITEM *) &internal_adb; \ + } \ + void dummy_function(void) + +# endif + +# define ADB_ENTRY(val, template) {val, template} + +# define ASN1_ADB_TEMPLATE(name) \ + static const ASN1_TEMPLATE name##_tt + +/* + * This is the ASN1 template structure that defines a wrapper round the + * actual type. It determines the actual position of the field in the value + * structure, various flags such as OPTIONAL and the field name. + */ + +struct ASN1_TEMPLATE_st { + unsigned long flags; /* Various flags */ + long tag; /* tag, not used if no tagging */ + unsigned long offset; /* Offset of this field in structure */ +# ifndef NO_ASN1_FIELD_NAMES + const char *field_name; /* Field name */ +# endif + ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */ +}; + +/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */ + +# define ASN1_TEMPLATE_item(t) (t->item_ptr) +# define ASN1_TEMPLATE_adb(t) (t->item_ptr) + +typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE; +typedef struct ASN1_ADB_st ASN1_ADB; + +struct ASN1_ADB_st { + unsigned long flags; /* Various flags */ + unsigned long offset; /* Offset of selector field */ + STACK_OF(ASN1_ADB_TABLE) **app_items; /* Application defined items */ + const ASN1_ADB_TABLE *tbl; /* Table of possible types */ + long tblcount; /* Number of entries in tbl */ + const ASN1_TEMPLATE *default_tt; /* Type to use if no match */ + const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */ +}; + +struct ASN1_ADB_TABLE_st { + long value; /* NID for an object or value for an int */ + const ASN1_TEMPLATE tt; /* item for this value */ +}; + +/* template flags */ + +/* Field is optional */ +# define ASN1_TFLG_OPTIONAL (0x1) + +/* Field is a SET OF */ +# define ASN1_TFLG_SET_OF (0x1 << 1) + +/* Field is a SEQUENCE OF */ +# define ASN1_TFLG_SEQUENCE_OF (0x2 << 1) + +/* + * Special case: this refers to a SET OF that will be sorted into DER order + * when encoded *and* the corresponding STACK will be modified to match the + * new order. + */ +# define ASN1_TFLG_SET_ORDER (0x3 << 1) + +/* Mask for SET OF or SEQUENCE OF */ +# define ASN1_TFLG_SK_MASK (0x3 << 1) + +/* + * These flags mean the tag should be taken from the tag field. If EXPLICIT + * then the underlying type is used for the inner tag. + */ + +/* IMPLICIT tagging */ +# define ASN1_TFLG_IMPTAG (0x1 << 3) + +/* EXPLICIT tagging, inner tag from underlying type */ +# define ASN1_TFLG_EXPTAG (0x2 << 3) + +# define ASN1_TFLG_TAG_MASK (0x3 << 3) + +/* context specific IMPLICIT */ +# define ASN1_TFLG_IMPLICIT ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT + +/* context specific EXPLICIT */ +# define ASN1_TFLG_EXPLICIT ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT + +/* + * If tagging is in force these determine the type of tag to use. Otherwise + * the tag is determined by the underlying type. These values reflect the + * actual octet format. + */ + +/* Universal tag */ +# define ASN1_TFLG_UNIVERSAL (0x0<<6) +/* Application tag */ +# define ASN1_TFLG_APPLICATION (0x1<<6) +/* Context specific tag */ +# define ASN1_TFLG_CONTEXT (0x2<<6) +/* Private tag */ +# define ASN1_TFLG_PRIVATE (0x3<<6) + +# define ASN1_TFLG_TAG_CLASS (0x3<<6) + +/* + * These are for ANY DEFINED BY type. In this case the 'item' field points to + * an ASN1_ADB structure which contains a table of values to decode the + * relevant type + */ + +# define ASN1_TFLG_ADB_MASK (0x3<<8) + +# define ASN1_TFLG_ADB_OID (0x1<<8) + +# define ASN1_TFLG_ADB_INT (0x1<<9) + +/* + * This flag means a parent structure is passed instead of the field: this is + * useful is a SEQUENCE is being combined with a CHOICE for example. Since + * this means the structure and item name will differ we need to use the + * ASN1_CHOICE_END_name() macro for example. + */ + +# define ASN1_TFLG_COMBINE (0x1<<10) + +/* + * This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes + * indefinite length constructed encoding to be used if required. + */ + +# define ASN1_TFLG_NDEF (0x1<<11) + +/* This is the actual ASN1 item itself */ + +struct ASN1_ITEM_st { + char itype; /* The item type, primitive, SEQUENCE, CHOICE + * or extern */ + long utype; /* underlying type */ + const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains + * the contents */ + long tcount; /* Number of templates if SEQUENCE or CHOICE */ + const void *funcs; /* functions that handle this type */ + long size; /* Structure size (usually) */ +# ifndef NO_ASN1_FIELD_NAMES + const char *sname; /* Structure name */ +# endif +}; + +/*- + * These are values for the itype field and + * determine how the type is interpreted. + * + * For PRIMITIVE types the underlying type + * determines the behaviour if items is NULL. + * + * Otherwise templates must contain a single + * template and the type is treated in the + * same way as the type specified in the template. + * + * For SEQUENCE types the templates field points + * to the members, the size field is the + * structure size. + * + * For CHOICE types the templates field points + * to each possible member (typically a union) + * and the 'size' field is the offset of the + * selector. + * + * The 'funcs' field is used for application + * specific functions. + * + * For COMPAT types the funcs field gives a + * set of functions that handle this type, this + * supports the old d2i, i2d convention. + * + * The EXTERN type uses a new style d2i/i2d. + * The new style should be used where possible + * because it avoids things like the d2i IMPLICIT + * hack. + * + * MSTRING is a multiple string type, it is used + * for a CHOICE of character strings where the + * actual strings all occupy an ASN1_STRING + * structure. In this case the 'utype' field + * has a special meaning, it is used as a mask + * of acceptable types using the B_ASN1 constants. + * + * NDEF_SEQUENCE is the same as SEQUENCE except + * that it will use indefinite length constructed + * encoding if requested. + * + */ + +# define ASN1_ITYPE_PRIMITIVE 0x0 + +# define ASN1_ITYPE_SEQUENCE 0x1 + +# define ASN1_ITYPE_CHOICE 0x2 + +# define ASN1_ITYPE_COMPAT 0x3 + +# define ASN1_ITYPE_EXTERN 0x4 + +# define ASN1_ITYPE_MSTRING 0x5 + +# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 + +/* + * Cache for ASN1 tag and length, so we don't keep re-reading it for things + * like CHOICE + */ + +struct ASN1_TLC_st { + char valid; /* Values below are valid */ + int ret; /* return value */ + long plen; /* length */ + int ptag; /* class value */ + int pclass; /* class value */ + int hdrlen; /* header length */ +}; + +/* Typedefs for ASN1 function pointers */ + +typedef ASN1_VALUE *ASN1_new_func(void); +typedef void ASN1_free_func(ASN1_VALUE *a); +typedef ASN1_VALUE *ASN1_d2i_func(ASN1_VALUE **a, const unsigned char **in, + long length); +typedef int ASN1_i2d_func(ASN1_VALUE *a, unsigned char **in); + +typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); +typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); +typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); + +typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, + int indent, const char *fname, + const ASN1_PCTX *pctx); + +typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, + int *putype, const ASN1_ITEM *it); +typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, + int len, int utype, char *free_cont, + const ASN1_ITEM *it); +typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, + const ASN1_ITEM *it, int indent, + const ASN1_PCTX *pctx); + +typedef struct ASN1_COMPAT_FUNCS_st { + ASN1_new_func *asn1_new; + ASN1_free_func *asn1_free; + ASN1_d2i_func *asn1_d2i; + ASN1_i2d_func *asn1_i2d; +} ASN1_COMPAT_FUNCS; + +typedef struct ASN1_EXTERN_FUNCS_st { + void *app_data; + ASN1_ex_new_func *asn1_ex_new; + ASN1_ex_free_func *asn1_ex_free; + ASN1_ex_free_func *asn1_ex_clear; + ASN1_ex_d2i *asn1_ex_d2i; + ASN1_ex_i2d *asn1_ex_i2d; + ASN1_ex_print_func *asn1_ex_print; +} ASN1_EXTERN_FUNCS; + +typedef struct ASN1_PRIMITIVE_FUNCS_st { + void *app_data; + unsigned long flags; + ASN1_ex_new_func *prim_new; + ASN1_ex_free_func *prim_free; + ASN1_ex_free_func *prim_clear; + ASN1_primitive_c2i *prim_c2i; + ASN1_primitive_i2c *prim_i2c; + ASN1_primitive_print *prim_print; +} ASN1_PRIMITIVE_FUNCS; + +/* + * This is the ASN1_AUX structure: it handles various miscellaneous + * requirements. For example the use of reference counts and an informational + * callback. The "informational callback" is called at various points during + * the ASN1 encoding and decoding. It can be used to provide minor + * customisation of the structures used. This is most useful where the + * supplied routines *almost* do the right thing but need some extra help at + * a few points. If the callback returns zero then it is assumed a fatal + * error has occurred and the main operation should be abandoned. If major + * changes in the default behaviour are required then an external type is + * more appropriate. + */ + +typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, + void *exarg); + +typedef struct ASN1_AUX_st { + void *app_data; + int flags; + int ref_offset; /* Offset of reference value */ + int ref_lock; /* Lock type to use */ + ASN1_aux_cb *asn1_cb; + int enc_offset; /* Offset of ASN1_ENCODING structure */ +} ASN1_AUX; + +/* For print related callbacks exarg points to this structure */ +typedef struct ASN1_PRINT_ARG_st { + BIO *out; + int indent; + const ASN1_PCTX *pctx; +} ASN1_PRINT_ARG; + +/* For streaming related callbacks exarg points to this structure */ +typedef struct ASN1_STREAM_ARG_st { + /* BIO to stream through */ + BIO *out; + /* BIO with filters appended */ + BIO *ndef_bio; + /* Streaming I/O boundary */ + unsigned char **boundary; +} ASN1_STREAM_ARG; + +/* Flags in ASN1_AUX */ + +/* Use a reference count */ +# define ASN1_AFLG_REFCOUNT 1 +/* Save the encoding of structure (useful for signatures) */ +# define ASN1_AFLG_ENCODING 2 +/* The Sequence length is invalid */ +# define ASN1_AFLG_BROKEN 4 + +/* operation values for asn1_cb */ + +# define ASN1_OP_NEW_PRE 0 +# define ASN1_OP_NEW_POST 1 +# define ASN1_OP_FREE_PRE 2 +# define ASN1_OP_FREE_POST 3 +# define ASN1_OP_D2I_PRE 4 +# define ASN1_OP_D2I_POST 5 +# define ASN1_OP_I2D_PRE 6 +# define ASN1_OP_I2D_POST 7 +# define ASN1_OP_PRINT_PRE 8 +# define ASN1_OP_PRINT_POST 9 +# define ASN1_OP_STREAM_PRE 10 +# define ASN1_OP_STREAM_POST 11 +# define ASN1_OP_DETACHED_PRE 12 +# define ASN1_OP_DETACHED_POST 13 + +/* Macro to implement a primitive type */ +# define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) +# define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \ + ASN1_ITEM_end(itname) + +/* Macro to implement a multi string type */ +# define IMPLEMENT_ASN1_MSTRING(itname, mask) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \ + ASN1_ITEM_end(itname) + +/* Macro to implement an ASN1_ITEM in terms of old style funcs */ + +# define IMPLEMENT_COMPAT_ASN1(sname) IMPLEMENT_COMPAT_ASN1_type(sname, V_ASN1_SEQUENCE) + +# define IMPLEMENT_COMPAT_ASN1_type(sname, tag) \ + static const ASN1_COMPAT_FUNCS sname##_ff = { \ + (ASN1_new_func *)sname##_new, \ + (ASN1_free_func *)sname##_free, \ + (ASN1_d2i_func *)d2i_##sname, \ + (ASN1_i2d_func *)i2d_##sname, \ + }; \ + ASN1_ITEM_start(sname) \ + ASN1_ITYPE_COMPAT, \ + tag, \ + NULL, \ + 0, \ + &sname##_ff, \ + 0, \ + #sname \ + ASN1_ITEM_end(sname) + +# define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \ + ASN1_ITEM_start(sname) \ + ASN1_ITYPE_EXTERN, \ + tag, \ + NULL, \ + 0, \ + &fptrs, \ + 0, \ + #sname \ + ASN1_ITEM_end(sname) + +/* Macro to implement standard functions in terms of ASN1_ITEM structures */ + +# define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname) + +# define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \ + IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname) + +# define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \ + pre stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + pre void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \ + stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) + +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ + } \ + int i2d_##fname(stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + } + +# define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ + int i2d_##stname##_NDEF(stname *a, unsigned char **out) \ + { \ + return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ + } + +/* + * This includes evil casts to remove const: they will go away when full ASN1 + * constification is done. + */ +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ + } \ + int i2d_##fname(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + } + +# define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ + stname * stname##_dup(stname *x) \ + { \ + return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ + } + +# define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \ + IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ + int fname##_print_ctx(BIO *out, stname *x, int indent, \ + const ASN1_PCTX *pctx) \ + { \ + return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \ + ASN1_ITEM_rptr(itname), pctx); \ + } + +# define IMPLEMENT_ASN1_FUNCTIONS_const(name) \ + IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name) + +# define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) + +/* external definitions for primitive types */ + +DECLARE_ASN1_ITEM(ASN1_BOOLEAN) +DECLARE_ASN1_ITEM(ASN1_TBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_FBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_SEQUENCE) +DECLARE_ASN1_ITEM(CBIGNUM) +DECLARE_ASN1_ITEM(BIGNUM) +DECLARE_ASN1_ITEM(LONG) +DECLARE_ASN1_ITEM(ZLONG) + +DECLARE_STACK_OF(ASN1_VALUE) + +/* Functions used internally by the ASN1 code */ + +int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it); +void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it); +int ASN1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); +int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it); + +void ASN1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); +int ASN1_template_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_TEMPLATE *tt); +int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); +int ASN1_template_i2d(ASN1_VALUE **pval, unsigned char **out, + const ASN1_TEMPLATE *tt); +void ASN1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it); + +int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, + const ASN1_ITEM *it); +int asn1_ex_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, + int utype, char *free_cont, const ASN1_ITEM *it); + +int asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it); +int asn1_set_choice_selector(ASN1_VALUE **pval, int value, + const ASN1_ITEM *it); + +ASN1_VALUE **asn1_get_field_ptr(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); + +const ASN1_TEMPLATE *asn1_do_adb(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt, + int nullerr); + +int asn1_do_lock(ASN1_VALUE **pval, int op, const ASN1_ITEM *it); + +void asn1_enc_init(ASN1_VALUE **pval, const ASN1_ITEM *it); +void asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it); +int asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval, + const ASN1_ITEM *it); +int asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen, + const ASN1_ITEM *it); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/bio.h b/Sources/OpenSSL/include/openssl/bio.h new file mode 100644 index 0000000000..2f333afc07 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/bio.h @@ -0,0 +1,879 @@ +/* crypto/bio/bio.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_BIO_H +# define HEADER_BIO_H + +# include "e_os2.h" + +# ifndef OPENSSL_NO_FP_API +# include +# endif +# include + +# include "crypto.h" + +# ifndef OPENSSL_NO_SCTP +# ifndef OPENSSL_SYS_VMS +# include +# else +# include +# endif +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* These are the 'types' of BIOs */ +# define BIO_TYPE_NONE 0 +# define BIO_TYPE_MEM (1|0x0400) +# define BIO_TYPE_FILE (2|0x0400) + +# define BIO_TYPE_FD (4|0x0400|0x0100) +# define BIO_TYPE_SOCKET (5|0x0400|0x0100) +# define BIO_TYPE_NULL (6|0x0400) +# define BIO_TYPE_SSL (7|0x0200) +# define BIO_TYPE_MD (8|0x0200)/* passive filter */ +# define BIO_TYPE_BUFFER (9|0x0200)/* filter */ +# define BIO_TYPE_CIPHER (10|0x0200)/* filter */ +# define BIO_TYPE_BASE64 (11|0x0200)/* filter */ +# define BIO_TYPE_CONNECT (12|0x0400|0x0100)/* socket - connect */ +# define BIO_TYPE_ACCEPT (13|0x0400|0x0100)/* socket for accept */ +# define BIO_TYPE_PROXY_CLIENT (14|0x0200)/* client proxy BIO */ +# define BIO_TYPE_PROXY_SERVER (15|0x0200)/* server proxy BIO */ +# define BIO_TYPE_NBIO_TEST (16|0x0200)/* server proxy BIO */ +# define BIO_TYPE_NULL_FILTER (17|0x0200) +# define BIO_TYPE_BER (18|0x0200)/* BER -> bin filter */ +# define BIO_TYPE_BIO (19|0x0400)/* (half a) BIO pair */ +# define BIO_TYPE_LINEBUFFER (20|0x0200)/* filter */ +# define BIO_TYPE_DGRAM (21|0x0400|0x0100) +# ifndef OPENSSL_NO_SCTP +# define BIO_TYPE_DGRAM_SCTP (24|0x0400|0x0100) +# endif +# define BIO_TYPE_ASN1 (22|0x0200)/* filter */ +# define BIO_TYPE_COMP (23|0x0200)/* filter */ + +# define BIO_TYPE_DESCRIPTOR 0x0100/* socket, fd, connect or accept */ +# define BIO_TYPE_FILTER 0x0200 +# define BIO_TYPE_SOURCE_SINK 0x0400 + +/* + * BIO_FILENAME_READ|BIO_CLOSE to open or close on free. + * BIO_set_fp(in,stdin,BIO_NOCLOSE); + */ +# define BIO_NOCLOSE 0x00 +# define BIO_CLOSE 0x01 + +/* + * These are used in the following macros and are passed to BIO_ctrl() + */ +# define BIO_CTRL_RESET 1/* opt - rewind/zero etc */ +# define BIO_CTRL_EOF 2/* opt - are we at the eof */ +# define BIO_CTRL_INFO 3/* opt - extra tit-bits */ +# define BIO_CTRL_SET 4/* man - set the 'IO' type */ +# define BIO_CTRL_GET 5/* man - get the 'IO' type */ +# define BIO_CTRL_PUSH 6/* opt - internal, used to signify change */ +# define BIO_CTRL_POP 7/* opt - internal, used to signify change */ +# define BIO_CTRL_GET_CLOSE 8/* man - set the 'close' on free */ +# define BIO_CTRL_SET_CLOSE 9/* man - set the 'close' on free */ +# define BIO_CTRL_PENDING 10/* opt - is their more data buffered */ +# define BIO_CTRL_FLUSH 11/* opt - 'flush' buffered output */ +# define BIO_CTRL_DUP 12/* man - extra stuff for 'duped' BIO */ +# define BIO_CTRL_WPENDING 13/* opt - number of bytes still to write */ +/* callback is int cb(BIO *bio,state,ret); */ +# define BIO_CTRL_SET_CALLBACK 14/* opt - set callback function */ +# define BIO_CTRL_GET_CALLBACK 15/* opt - set callback function */ + +# define BIO_CTRL_SET_FILENAME 30/* BIO_s_file special */ + +/* dgram BIO stuff */ +# define BIO_CTRL_DGRAM_CONNECT 31/* BIO dgram special */ +# define BIO_CTRL_DGRAM_SET_CONNECTED 32/* allow for an externally connected + * socket to be passed in */ +# define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34/* getsockopt, essentially */ +# define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ + +# define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation tiemd out */ + +/* #ifdef IP_MTU_DISCOVER */ +# define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ +/* #endif */ + +# define BIO_CTRL_DGRAM_QUERY_MTU 40/* as kernel for current MTU */ +# define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47 +# define BIO_CTRL_DGRAM_GET_MTU 41/* get cached value for MTU */ +# define BIO_CTRL_DGRAM_SET_MTU 42/* set cached value for MTU. + * want to use this if asking + * the kernel fails */ + +# define BIO_CTRL_DGRAM_MTU_EXCEEDED 43/* check whether the MTU was + * exceed in the previous write + * operation */ + +# define BIO_CTRL_DGRAM_GET_PEER 46 +# define BIO_CTRL_DGRAM_SET_PEER 44/* Destination for the data */ + +# define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45/* Next DTLS handshake timeout + * to adjust socket timeouts */ +# define BIO_CTRL_DGRAM_SET_DONT_FRAG 48 + +# define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD 49 + +# ifndef OPENSSL_NO_SCTP +/* SCTP stuff */ +# define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE 50 +# define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY 51 +# define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY 52 +# define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD 53 +# define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO 60 +# define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO 61 +# define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO 62 +# define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO 63 +# define BIO_CTRL_DGRAM_SCTP_GET_PRINFO 64 +# define BIO_CTRL_DGRAM_SCTP_SET_PRINFO 65 +# define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN 70 +# endif + +/* modifiers */ +# define BIO_FP_READ 0x02 +# define BIO_FP_WRITE 0x04 +# define BIO_FP_APPEND 0x08 +# define BIO_FP_TEXT 0x10 + +# define BIO_FLAGS_READ 0x01 +# define BIO_FLAGS_WRITE 0x02 +# define BIO_FLAGS_IO_SPECIAL 0x04 +# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) +# define BIO_FLAGS_SHOULD_RETRY 0x08 +# ifndef BIO_FLAGS_UPLINK +/* + * "UPLINK" flag denotes file descriptors provided by application. It + * defaults to 0, as most platforms don't require UPLINK interface. + */ +# define BIO_FLAGS_UPLINK 0 +# endif + +/* Used in BIO_gethostbyname() */ +# define BIO_GHBN_CTRL_HITS 1 +# define BIO_GHBN_CTRL_MISSES 2 +# define BIO_GHBN_CTRL_CACHE_SIZE 3 +# define BIO_GHBN_CTRL_GET_ENTRY 4 +# define BIO_GHBN_CTRL_FLUSH 5 + +/* Mostly used in the SSL BIO */ +/*- + * Not used anymore + * #define BIO_FLAGS_PROTOCOL_DELAYED_READ 0x10 + * #define BIO_FLAGS_PROTOCOL_DELAYED_WRITE 0x20 + * #define BIO_FLAGS_PROTOCOL_STARTUP 0x40 + */ + +# define BIO_FLAGS_BASE64_NO_NL 0x100 + +/* + * This is used with memory BIOs: it means we shouldn't free up or change the + * data in any way. + */ +# define BIO_FLAGS_MEM_RDONLY 0x200 + +typedef struct bio_st BIO; + +void BIO_set_flags(BIO *b, int flags); +int BIO_test_flags(const BIO *b, int flags); +void BIO_clear_flags(BIO *b, int flags); + +# define BIO_get_flags(b) BIO_test_flags(b, ~(0x0)) +# define BIO_set_retry_special(b) \ + BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_read(b) \ + BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_write(b) \ + BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY)) + +/* These are normally used internally in BIOs */ +# define BIO_clear_retry_flags(b) \ + BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_get_retry_flags(b) \ + BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) + +/* These should be used by the application to tell why we should retry */ +# define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ) +# define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE) +# define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL) +# define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS) +# define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY) + +/* + * The next three are used in conjunction with the BIO_should_io_special() + * condition. After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int + * *reason); will walk the BIO stack and return the 'reason' for the special + * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return + * the code. + */ +/* + * Returned from the SSL bio when the certificate retrieval code had an error + */ +# define BIO_RR_SSL_X509_LOOKUP 0x01 +/* Returned from the connect BIO when a connect would have blocked */ +# define BIO_RR_CONNECT 0x02 +/* Returned from the accept BIO when an accept would have blocked */ +# define BIO_RR_ACCEPT 0x03 + +/* These are passed by the BIO callback */ +# define BIO_CB_FREE 0x01 +# define BIO_CB_READ 0x02 +# define BIO_CB_WRITE 0x03 +# define BIO_CB_PUTS 0x04 +# define BIO_CB_GETS 0x05 +# define BIO_CB_CTRL 0x06 + +/* + * The callback is called before and after the underling operation, The + * BIO_CB_RETURN flag indicates if it is after the call + */ +# define BIO_CB_RETURN 0x80 +# define BIO_CB_return(a) ((a)|BIO_CB_RETURN) +# define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) +# define BIO_cb_post(a) ((a)&BIO_CB_RETURN) + +long (*BIO_get_callback(const BIO *b)) (struct bio_st *, int, const char *, + int, long, long); +void BIO_set_callback(BIO *b, + long (*callback) (struct bio_st *, int, const char *, + int, long, long)); +char *BIO_get_callback_arg(const BIO *b); +void BIO_set_callback_arg(BIO *b, char *arg); + +const char *BIO_method_name(const BIO *b); +int BIO_method_type(const BIO *b); + +typedef void bio_info_cb (struct bio_st *, int, const char *, int, long, + long); + +typedef struct bio_method_st { + int type; + const char *name; + int (*bwrite) (BIO *, const char *, int); + int (*bread) (BIO *, char *, int); + int (*bputs) (BIO *, const char *); + int (*bgets) (BIO *, char *, int); + long (*ctrl) (BIO *, int, long, void *); + int (*create) (BIO *); + int (*destroy) (BIO *); + long (*callback_ctrl) (BIO *, int, bio_info_cb *); +} BIO_METHOD; + +struct bio_st { + BIO_METHOD *method; + /* bio, mode, argp, argi, argl, ret */ + long (*callback) (struct bio_st *, int, const char *, int, long, long); + char *cb_arg; /* first argument for the callback */ + int init; + int shutdown; + int flags; /* extra storage */ + int retry_reason; + int num; + void *ptr; + struct bio_st *next_bio; /* used by filter BIOs */ + struct bio_st *prev_bio; /* used by filter BIOs */ + int references; + unsigned long num_read; + unsigned long num_write; + CRYPTO_EX_DATA ex_data; +}; + +DECLARE_STACK_OF(BIO) + +typedef struct bio_f_buffer_ctx_struct { + /*- + * Buffers are setup like this: + * + * <---------------------- size -----------------------> + * +---------------------------------------------------+ + * | consumed | remaining | free space | + * +---------------------------------------------------+ + * <-- off --><------- len -------> + */ + /*- BIO *bio; *//* + * this is now in the BIO struct + */ + int ibuf_size; /* how big is the input buffer */ + int obuf_size; /* how big is the output buffer */ + char *ibuf; /* the char array */ + int ibuf_len; /* how many bytes are in it */ + int ibuf_off; /* write/read offset */ + char *obuf; /* the char array */ + int obuf_len; /* how many bytes are in it */ + int obuf_off; /* write/read offset */ +} BIO_F_BUFFER_CTX; + +/* Prefix and suffix callback in ASN1 BIO */ +typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, + void *parg); + +# ifndef OPENSSL_NO_SCTP +/* SCTP parameter structs */ +struct bio_dgram_sctp_sndinfo { + uint16_t snd_sid; + uint16_t snd_flags; + uint32_t snd_ppid; + uint32_t snd_context; +}; + +struct bio_dgram_sctp_rcvinfo { + uint16_t rcv_sid; + uint16_t rcv_ssn; + uint16_t rcv_flags; + uint32_t rcv_ppid; + uint32_t rcv_tsn; + uint32_t rcv_cumtsn; + uint32_t rcv_context; +}; + +struct bio_dgram_sctp_prinfo { + uint16_t pr_policy; + uint32_t pr_value; +}; +# endif + +/* connect BIO stuff */ +# define BIO_CONN_S_BEFORE 1 +# define BIO_CONN_S_GET_IP 2 +# define BIO_CONN_S_GET_PORT 3 +# define BIO_CONN_S_CREATE_SOCKET 4 +# define BIO_CONN_S_CONNECT 5 +# define BIO_CONN_S_OK 6 +# define BIO_CONN_S_BLOCKED_CONNECT 7 +# define BIO_CONN_S_NBIO 8 +/* + * #define BIO_CONN_get_param_hostname BIO_ctrl + */ + +# define BIO_C_SET_CONNECT 100 +# define BIO_C_DO_STATE_MACHINE 101 +# define BIO_C_SET_NBIO 102 +# define BIO_C_SET_PROXY_PARAM 103 +# define BIO_C_SET_FD 104 +# define BIO_C_GET_FD 105 +# define BIO_C_SET_FILE_PTR 106 +# define BIO_C_GET_FILE_PTR 107 +# define BIO_C_SET_FILENAME 108 +# define BIO_C_SET_SSL 109 +# define BIO_C_GET_SSL 110 +# define BIO_C_SET_MD 111 +# define BIO_C_GET_MD 112 +# define BIO_C_GET_CIPHER_STATUS 113 +# define BIO_C_SET_BUF_MEM 114 +# define BIO_C_GET_BUF_MEM_PTR 115 +# define BIO_C_GET_BUFF_NUM_LINES 116 +# define BIO_C_SET_BUFF_SIZE 117 +# define BIO_C_SET_ACCEPT 118 +# define BIO_C_SSL_MODE 119 +# define BIO_C_GET_MD_CTX 120 +# define BIO_C_GET_PROXY_PARAM 121 +# define BIO_C_SET_BUFF_READ_DATA 122/* data to read first */ +# define BIO_C_GET_CONNECT 123 +# define BIO_C_GET_ACCEPT 124 +# define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125 +# define BIO_C_GET_SSL_NUM_RENEGOTIATES 126 +# define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127 +# define BIO_C_FILE_SEEK 128 +# define BIO_C_GET_CIPHER_CTX 129 +# define BIO_C_SET_BUF_MEM_EOF_RETURN 130/* return end of input + * value */ +# define BIO_C_SET_BIND_MODE 131 +# define BIO_C_GET_BIND_MODE 132 +# define BIO_C_FILE_TELL 133 +# define BIO_C_GET_SOCKS 134 +# define BIO_C_SET_SOCKS 135 + +# define BIO_C_SET_WRITE_BUF_SIZE 136/* for BIO_s_bio */ +# define BIO_C_GET_WRITE_BUF_SIZE 137 +# define BIO_C_MAKE_BIO_PAIR 138 +# define BIO_C_DESTROY_BIO_PAIR 139 +# define BIO_C_GET_WRITE_GUARANTEE 140 +# define BIO_C_GET_READ_REQUEST 141 +# define BIO_C_SHUTDOWN_WR 142 +# define BIO_C_NREAD0 143 +# define BIO_C_NREAD 144 +# define BIO_C_NWRITE0 145 +# define BIO_C_NWRITE 146 +# define BIO_C_RESET_READ_REQUEST 147 +# define BIO_C_SET_MD_CTX 148 + +# define BIO_C_SET_PREFIX 149 +# define BIO_C_GET_PREFIX 150 +# define BIO_C_SET_SUFFIX 151 +# define BIO_C_GET_SUFFIX 152 + +# define BIO_C_SET_EX_ARG 153 +# define BIO_C_GET_EX_ARG 154 + +# define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) +# define BIO_get_app_data(s) BIO_get_ex_data(s,0) + +/* BIO_s_connect() and BIO_s_socks4a_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_ip(b,ip) BIO_ctrl(b,BIO_C_SET_CONNECT,2,(char *)ip) +# define BIO_set_conn_int_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,3,(char *)port) +# define BIO_get_conn_hostname(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0) +# define BIO_get_conn_port(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1) +# define BIO_get_conn_ip(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2) +# define BIO_get_conn_int_port(b) BIO_int_ctrl(b,BIO_C_GET_CONNECT,3,0) + +# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) + +/* BIO_s_accept_socket() */ +# define BIO_set_accept_port(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0,(char *)name) +# define BIO_get_accept_port(b) BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0) +/* #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,1,(n)?(void *)"a":NULL) +# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(char *)bio) + +# define BIO_BIND_NORMAL 0 +# define BIO_BIND_REUSEADDR_IF_UNUSED 1 +# define BIO_BIND_REUSEADDR 2 +# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) +# define BIO_get_bind_mode(b,mode) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) + +# define BIO_do_connect(b) BIO_do_handshake(b) +# define BIO_do_accept(b) BIO_do_handshake(b) +# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) + +/* BIO_s_proxy_client() */ +# define BIO_set_url(b,url) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,0,(char *)(url)) +# define BIO_set_proxies(b,p) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,1,(char *)(p)) +/* BIO_set_nbio(b,n) */ +# define BIO_set_filter_bio(b,s) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,2,(char *)(s)) +/* BIO *BIO_get_filter_bio(BIO *bio); */ +# define BIO_set_proxy_cb(b,cb) BIO_callback_ctrl(b,BIO_C_SET_PROXY_PARAM,3,(void *(*cb)())) +# define BIO_set_proxy_header(b,sk) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,4,(char *)sk) +# define BIO_set_no_connect_return(b,bool) BIO_int_ctrl(b,BIO_C_SET_PROXY_PARAM,5,bool) + +# define BIO_get_proxy_header(b,skp) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,0,(char *)skp) +# define BIO_get_proxies(b,pxy_p) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,1,(char *)(pxy_p)) +# define BIO_get_url(b,url) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,2,(char *)(url)) +# define BIO_get_no_connect_return(b) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,5,NULL) + +# 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_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_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) +# define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) + +/* + * name is cast to lose const, but might be better to route through a + * function so we can do it safely + */ +# ifdef CONST_STRICT +/* + * If you are wondering why this isn't defined, its because CONST_STRICT is + * purely a compile-time kludge to allow const to be checked. + */ +int BIO_read_filename(BIO *b, const char *name); +# else +# define BIO_read_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ,(char *)name) +# endif +# define BIO_write_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_WRITE,name) +# define BIO_append_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_APPEND,name) +# define BIO_rw_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name) + +/* + * WARNING WARNING, this ups the reference count on the read bio of the SSL + * structure. This is because the ssl read BIO is now pointed to by the + * 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_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); +# define BIO_get_num_renegotiates(b) \ + BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL); +# define BIO_set_ssl_renegotiate_timeout(b,seconds) \ + 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_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) + +/* For the BIO_f_buffer() type */ +# define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL) +# define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL) +# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0) +# define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1) +# define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf) + +/* Don't use the next one unless you know what you are doing :-) */ +# define BIO_dup_state(b,ret) BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret)) + +# define BIO_reset(b) (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL) +# define BIO_eof(b) (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL) +# define BIO_set_close(b,c) (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL) +# define BIO_get_close(b) (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL) +# define BIO_pending(b) (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) +# define BIO_wpending(b) (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL) +/* ...pending macros have inappropriate return type */ +size_t BIO_ctrl_pending(BIO *b); +size_t BIO_ctrl_wpending(BIO *b); +# define BIO_flush(b) (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL) +# define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \ + cbp) +# define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb) + +/* For the BIO_f_buffer() type */ +# define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL) + +/* For BIO_s_bio() */ +# define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL) +# define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL) +# define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2) +# define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL) +# define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL) +/* macros with inappropriate type -- but ...pending macros use int too: */ +# define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL) +# define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL) +size_t BIO_ctrl_get_write_guarantee(BIO *b); +size_t BIO_ctrl_get_read_request(BIO *b); +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) +# define BIO_ctrl_set_connected(b, state, peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, state, (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) +# define BIO_dgram_set_peer(b,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) + +/* These two aren't currently implemented */ +/* int BIO_get_ex_num(BIO *bio); */ +/* void BIO_set_ex_free_func(BIO *bio,int idx,void (*cb)()); */ +int BIO_set_ex_data(BIO *bio, int idx, void *data); +void *BIO_get_ex_data(BIO *bio, int idx); +int BIO_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +unsigned long BIO_number_read(BIO *bio); +unsigned long BIO_number_written(BIO *bio); + +/* For BIO_f_asn1() */ +int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, + asn1_ps_func *prefix_free); +int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, + asn1_ps_func **pprefix_free); +int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, + asn1_ps_func *suffix_free); +int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, + asn1_ps_func **psuffix_free); + +# ifndef OPENSSL_NO_FP_API +BIO_METHOD *BIO_s_file(void); +BIO *BIO_new_file(const char *filename, const char *mode); +BIO *BIO_new_fp(FILE *stream, int close_flag); +# define BIO_s_file_internal BIO_s_file +# endif +BIO *BIO_new(BIO_METHOD *type); +int BIO_set(BIO *a, BIO_METHOD *type); +int BIO_free(BIO *a); +void BIO_vfree(BIO *a); +int BIO_read(BIO *b, void *data, int len); +int BIO_gets(BIO *bp, char *buf, int size); +int BIO_write(BIO *b, const void *data, int len); +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); +long BIO_callback_ctrl(BIO *b, int cmd, + void (*fp) (struct bio_st *, int, const char *, int, + long, long)); +char *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); +long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); +BIO *BIO_push(BIO *b, BIO *append); +BIO *BIO_pop(BIO *b); +void BIO_free_all(BIO *a); +BIO *BIO_find_type(BIO *b, int bio_type); +BIO *BIO_next(BIO *b); +BIO *BIO_get_retry_BIO(BIO *bio, int *reason); +int BIO_get_retry_reason(BIO *bio); +BIO *BIO_dup_chain(BIO *in); + +int BIO_nread0(BIO *bio, char **buf); +int BIO_nread(BIO *bio, char **buf, int num); +int BIO_nwrite0(BIO *bio, char **buf); +int BIO_nwrite(BIO *bio, char **buf, int num); + +long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, + long argl, long ret); + +BIO_METHOD *BIO_s_mem(void); +BIO *BIO_new_mem_buf(void *buf, int len); +BIO_METHOD *BIO_s_socket(void); +BIO_METHOD *BIO_s_connect(void); +BIO_METHOD *BIO_s_accept(void); +BIO_METHOD *BIO_s_fd(void); +# ifndef OPENSSL_SYS_OS2 +BIO_METHOD *BIO_s_log(void); +# endif +BIO_METHOD *BIO_s_bio(void); +BIO_METHOD *BIO_s_null(void); +BIO_METHOD *BIO_f_null(void); +BIO_METHOD *BIO_f_buffer(void); +# ifdef OPENSSL_SYS_VMS +BIO_METHOD *BIO_f_linebuffer(void); +# endif +BIO_METHOD *BIO_f_nbio_test(void); +# ifndef OPENSSL_NO_DGRAM +BIO_METHOD *BIO_s_datagram(void); +# ifndef OPENSSL_NO_SCTP +BIO_METHOD *BIO_s_datagram_sctp(void); +# endif +# endif + +/* BIO_METHOD *BIO_f_ber(void); */ + +int BIO_sock_should_retry(int i); +int BIO_sock_non_fatal_error(int error); +int BIO_dgram_non_fatal_error(int error); + +int BIO_fd_should_retry(int i); +int BIO_fd_non_fatal_error(int error); +int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const char *s, int len); +int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const char *s, int len, int indent); +int BIO_dump(BIO *b, const char *bytes, int len); +int BIO_dump_indent(BIO *b, const char *bytes, int len, int indent); +# ifndef OPENSSL_NO_FP_API +int BIO_dump_fp(FILE *fp, const char *s, int len); +int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent); +# endif +int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data, + int datalen); + +struct hostent *BIO_gethostbyname(const char *name); +/*- + * We might want a thread-safe interface too: + * struct hostent *BIO_gethostbyname_r(const char *name, + * struct hostent *result, void *buffer, size_t buflen); + * or something similar (caller allocates a struct hostent, + * pointed to by "result", and additional buffer space for the various + * substructures; if the buffer does not suffice, NULL is returned + * and an appropriate error code is set). + */ +int BIO_sock_error(int sock); +int BIO_socket_ioctl(int fd, long type, void *arg); +int BIO_socket_nbio(int fd, int mode); +int BIO_get_port(const char *str, unsigned short *port_ptr); +int BIO_get_host_ip(const char *str, unsigned char *ip); +int BIO_get_accept_socket(char *host_port, int mode); +int BIO_accept(int sock, char **ip_port); +int BIO_sock_init(void); +void BIO_sock_cleanup(void); +int BIO_set_tcp_ndelay(int sock, int turn_on); + +BIO *BIO_new_socket(int sock, int close_flag); +BIO *BIO_new_dgram(int fd, int close_flag); +# ifndef OPENSSL_NO_SCTP +BIO *BIO_new_dgram_sctp(int fd, int close_flag); +int BIO_dgram_is_sctp(BIO *bio); +int BIO_dgram_sctp_notification_cb(BIO *b, + void (*handle_notifications) (BIO *bio, + void + *context, + void *buf), + void *context); +int BIO_dgram_sctp_wait_for_dry(BIO *b); +int BIO_dgram_sctp_msg_waiting(BIO *b); +# endif +BIO *BIO_new_fd(int fd, int close_flag); +BIO *BIO_new_connect(const char *host_port); +BIO *BIO_new_accept(const char *host_port); + +int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, + BIO **bio2, size_t writebuf2); +/* + * If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints. + * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. Size 0 uses default + * value. + */ + +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) +# endif +int BIO_printf(BIO *bio, const char *format, ...) +__bio_h__attr__((__format__(__printf__, 2, 3))); +int BIO_vprintf(BIO *bio, const char *format, va_list args) +__bio_h__attr__((__format__(__printf__, 2, 0))); +int BIO_snprintf(char *buf, size_t n, const char *format, ...) +__bio_h__attr__((__format__(__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__ + +/* 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. + */ +void ERR_load_BIO_strings(void); + +/* Error codes for the BIO functions. */ + +/* Function codes. */ +# define BIO_F_ACPT_STATE 100 +# define BIO_F_BIO_ACCEPT 101 +# define BIO_F_BIO_BER_GET_HEADER 102 +# define BIO_F_BIO_CALLBACK_CTRL 131 +# define BIO_F_BIO_CTRL 103 +# define BIO_F_BIO_GETHOSTBYNAME 120 +# define BIO_F_BIO_GETS 104 +# define BIO_F_BIO_GET_ACCEPT_SOCKET 105 +# define BIO_F_BIO_GET_HOST_IP 106 +# define BIO_F_BIO_GET_PORT 107 +# define BIO_F_BIO_MAKE_PAIR 121 +# 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_PUTS 110 +# define BIO_F_BIO_READ 111 +# 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_READ 128 +# define BIO_F_MEM_WRITE 117 +# define BIO_F_SSL_NEW 118 +# define BIO_F_WSASTARTUP 119 + +/* Reason codes. */ +# define BIO_R_ACCEPT_ERROR 100 +# define BIO_R_BAD_FOPEN_MODE 101 +# define BIO_R_BAD_HOSTNAME_LOOKUP 102 +# define BIO_R_BROKEN_PIPE 124 +# define BIO_R_CONNECT_ERROR 103 +# define BIO_R_EOF_ON_MEMORY_BIO 127 +# define BIO_R_ERROR_SETTING_NBIO 104 +# define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPTED_SOCKET 105 +# define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPT_SOCKET 106 +# define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 +# define BIO_R_INVALID_ARGUMENT 125 +# define BIO_R_INVALID_IP_ADDRESS 108 +# define BIO_R_IN_USE 123 +# define BIO_R_KEEPALIVE 109 +# define BIO_R_NBIO_CONNECT_ERROR 110 +# define BIO_R_NO_ACCEPT_PORT_SPECIFIED 111 +# define BIO_R_NO_HOSTNAME_SPECIFIED 112 +# define BIO_R_NO_PORT_DEFINED 113 +# define BIO_R_NO_PORT_SPECIFIED 114 +# define BIO_R_NO_SUCH_FILE 128 +# define BIO_R_NULL_PARAMETER 115 +# define BIO_R_TAG_MISMATCH 116 +# define BIO_R_UNABLE_TO_BIND_SOCKET 117 +# define BIO_R_UNABLE_TO_CREATE_SOCKET 118 +# define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 +# define BIO_R_UNINITIALIZED 120 +# define BIO_R_UNSUPPORTED_METHOD 121 +# define BIO_R_WRITE_TO_READ_ONLY_BIO 126 +# define BIO_R_WSASTARTUP 122 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/blowfish.h b/Sources/OpenSSL/include/openssl/blowfish.h new file mode 100644 index 0000000000..984e8dbb35 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/blowfish.h @@ -0,0 +1,130 @@ +/* crypto/bf/blowfish.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_BLOWFISH_H +# define HEADER_BLOWFISH_H + +# include "e_os2.h" + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_NO_BF +# error BF is disabled. +# endif + +# define BF_ENCRYPT 1 +# define BF_DECRYPT 0 + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! BF_LONG has to be at least 32 bits wide. If it's wider, then ! + * ! BF_LONG_LOG2 has to be defined along. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ + +# if defined(__LP32__) +# define BF_LONG unsigned long +# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) +# define BF_LONG unsigned long +# define BF_LONG_LOG2 3 +/* + * _CRAY note. I could declare short, but I have no idea what impact + * does it have on performance on none-T3E machines. I could declare + * int, but at least on C90 sizeof(int) can be chosen at compile time. + * So I've chosen long... + * + */ +# else +# define BF_LONG unsigned int +# endif + +# define BF_ROUNDS 16 +# define BF_BLOCK 8 + +typedef struct bf_key_st { + BF_LONG P[BF_ROUNDS + 2]; + BF_LONG S[4 * 256]; +} BF_KEY; + +# ifdef OPENSSL_FIPS +void private_BF_set_key(BF_KEY *key, int len, const unsigned char *data); +# endif +void BF_set_key(BF_KEY *key, int len, const unsigned char *data); + +void BF_encrypt(BF_LONG *data, const BF_KEY *key); +void BF_decrypt(BF_LONG *data, const BF_KEY *key); + +void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, + const BF_KEY *key, int enc); +void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, + const BF_KEY *schedule, unsigned char *ivec, int enc); +void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num, int enc); +void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num); +const char *BF_options(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/bn.h b/Sources/OpenSSL/include/openssl/bn.h new file mode 100644 index 0000000000..de2dd98396 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/bn.h @@ -0,0 +1,939 @@ +/* crypto/bn/bn.h */ +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +/* ==================================================================== + * 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 + +# include "e_os2.h" +# ifndef OPENSSL_NO_FP_API +# include /* FILE */ +# endif +# include "ossl_typ.h" +# include "crypto.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * These preprocessor symbols control various aspects of the bignum headers + * and library code. They're not defined by any "normal" configuration, as + * they are intended for development and testing purposes. NB: defining all + * three can be useful for debugging application code as well as openssl + * itself. BN_DEBUG - turn on various debugging alterations to the bignum + * code BN_DEBUG_RAND - uses random poisoning of unused words to trip up + * mismanagement of bignum internals. You must also define BN_DEBUG. + */ +/* #define BN_DEBUG */ +/* #define BN_DEBUG_RAND */ + +# ifndef OPENSSL_SMALL_FOOTPRINT +# define BN_MUL_COMBA +# define BN_SQR_COMBA +# define BN_RECURSION +# endif + +/* + * This next option uses the C libraries (2 word)/(1 word) function. If it is + * not defined, I use my C version (which is slower). The reason for this + * flag is that when the particular C compiler library routine is used, and + * the library is linked with a different compiler, the library is missing. + * This mostly happens when the library is built with gcc and then linked + * using normal cc. This would be a common occurrence because gcc normally + * produces code that is 2 times faster than system compilers for the big + * number stuff. For machines with only one compiler (or shared libraries), + * this should be on. Again this in only really a problem on machines using + * "long long's", are 32bit, and are not using my assembler code. + */ +# if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) || \ + defined(OPENSSL_SYS_WIN32) || defined(linux) +# ifndef BN_DIV2W +# define BN_DIV2W +# endif +# endif + +/* + * assuming long is 64bit - this is the DEC Alpha unsigned long long is only + * 64 bits :-(, don't define BN_LLONG for the DEC Alpha + */ +# ifdef SIXTY_FOUR_BIT_LONG +# define BN_ULLONG unsigned long long +# define BN_ULONG unsigned long +# define BN_LONG long +# define BN_BITS 128 +# define BN_BYTES 8 +# define BN_BITS2 64 +# define BN_BITS4 32 +# define BN_MASK (0xffffffffffffffffffffffffffffffffLL) +# define BN_MASK2 (0xffffffffffffffffL) +# define BN_MASK2l (0xffffffffL) +# define BN_MASK2h (0xffffffff00000000L) +# define BN_MASK2h1 (0xffffffff80000000L) +# define BN_TBIT (0x8000000000000000L) +# define BN_DEC_CONV (10000000000000000000UL) +# define BN_DEC_FMT1 "%lu" +# define BN_DEC_FMT2 "%019lu" +# define BN_DEC_NUM 19 +# define BN_HEX_FMT1 "%lX" +# define BN_HEX_FMT2 "%016lX" +# endif + +/* + * This is where the long long data type is 64 bits, but long is 32. For + * machines where there are 64bit registers, this is the mode to use. IRIX, + * on R4000 and above should use this mode, along with the relevant assembler + * code :-). Do NOT define BN_LLONG. + */ +# ifdef SIXTY_FOUR_BIT +# undef BN_LLONG +# undef BN_ULLONG +# define BN_ULONG unsigned long long +# define BN_LONG long long +# define BN_BITS 128 +# define BN_BYTES 8 +# define BN_BITS2 64 +# define BN_BITS4 32 +# define BN_MASK2 (0xffffffffffffffffLL) +# define BN_MASK2l (0xffffffffL) +# define BN_MASK2h (0xffffffff00000000LL) +# define BN_MASK2h1 (0xffffffff80000000LL) +# define BN_TBIT (0x8000000000000000LL) +# define BN_DEC_CONV (10000000000000000000ULL) +# define BN_DEC_FMT1 "%llu" +# define BN_DEC_FMT2 "%019llu" +# define BN_DEC_NUM 19 +# define BN_HEX_FMT1 "%llX" +# define BN_HEX_FMT2 "%016llX" +# endif + +# ifdef THIRTY_TWO_BIT +# ifdef BN_LLONG +# if defined(_WIN32) && !defined(__GNUC__) +# define BN_ULLONG unsigned __int64 +# define BN_MASK (0xffffffffffffffffI64) +# else +# define BN_ULLONG unsigned long long +# define BN_MASK (0xffffffffffffffffLL) +# endif +# endif +# define BN_ULONG unsigned int +# define BN_LONG int +# define BN_BITS 64 +# define BN_BYTES 4 +# define BN_BITS2 32 +# define BN_BITS4 16 +# define BN_MASK2 (0xffffffffL) +# define BN_MASK2l (0xffff) +# define BN_MASK2h1 (0xffff8000L) +# define BN_MASK2h (0xffff0000L) +# define BN_TBIT (0x80000000L) +# define BN_DEC_CONV (1000000000L) +# define BN_DEC_FMT1 "%u" +# define BN_DEC_FMT2 "%09u" +# define BN_DEC_NUM 9 +# define BN_HEX_FMT1 "%X" +# define BN_HEX_FMT2 "%08X" +# endif + +# define BN_DEFAULT_BITS 1280 + +# define BN_FLG_MALLOCED 0x01 +# define BN_FLG_STATIC_DATA 0x02 + +/* + * avoid leaking exponent information through timing, + * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime, + * BN_div() will call BN_div_no_branch, + * BN_mod_inverse() will call BN_mod_inverse_no_branch. + */ +# define BN_FLG_CONSTTIME 0x04 + +# ifdef OPENSSL_NO_DEPRECATED +/* deprecated name for the flag */ +# define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME +/* + * avoid leaking exponent information through timings + * (BN_mod_exp_mont() will call BN_mod_exp_mont_consttime) + */ +# endif + +# ifndef OPENSSL_NO_DEPRECATED +# define BN_FLG_FREE 0x8000 + /* used for debuging */ +# endif +# define BN_set_flags(b,n) ((b)->flags|=(n)) +# define BN_get_flags(b,n) ((b)->flags&(n)) + +/* + * get a clone of a BIGNUM with changed flags, for *temporary* use only (the + * two BIGNUMs cannot not be used in parallel!) + */ +# define BN_with_flags(dest,b,n) ((dest)->d=(b)->d, \ + (dest)->top=(b)->top, \ + (dest)->dmax=(b)->dmax, \ + (dest)->neg=(b)->neg, \ + (dest)->flags=(((dest)->flags & BN_FLG_MALLOCED) \ + | ((b)->flags & ~BN_FLG_MALLOCED) \ + | BN_FLG_STATIC_DATA \ + | (n))) + +/* Already declared in ossl_typ.h */ +# if 0 +typedef struct bignum_st BIGNUM; +/* Used for temp variables (declaration hidden in bn_lcl.h) */ +typedef struct bignum_ctx BN_CTX; +typedef struct bn_blinding_st BN_BLINDING; +typedef struct bn_mont_ctx_st BN_MONT_CTX; +typedef struct bn_recp_ctx_st BN_RECP_CTX; +typedef struct bn_gencb_st BN_GENCB; +# endif + +struct bignum_st { + BN_ULONG *d; /* Pointer to an array of 'BN_BITS2' bit + * chunks. */ + int top; /* Index of last used d +1. */ + /* The next are internal book keeping for bn_expand. */ + int dmax; /* Size of the d array. */ + int neg; /* one if the number is negative */ + int flags; +}; + +/* Used for montgomery multiplication */ +struct bn_mont_ctx_st { + int ri; /* number of bits in R */ + BIGNUM RR; /* used to convert to montgomery form */ + BIGNUM N; /* The modulus */ + BIGNUM Ni; /* R*(1/R mod N) - N*Ni = 1 (Ni is only + * stored for bignum algorithm) */ + BN_ULONG n0[2]; /* least significant word(s) of Ni; (type + * changed with 0.9.9, was "BN_ULONG n0;" + * before) */ + int flags; +}; + +/* + * Used for reciprocal division/mod functions It cannot be shared between + * threads + */ +struct bn_recp_ctx_st { + BIGNUM N; /* the divisor */ + BIGNUM Nr; /* the reciprocal */ + int num_bits; + int shift; + int flags; +}; + +/* Used for slow "generation" functions. */ +struct bn_gencb_st { + unsigned int ver; /* To handle binary (in)compatibility */ + void *arg; /* callback-specific data */ + union { + /* if(ver==1) - handles old style callbacks */ + void (*cb_1) (int, int, void *); + /* if(ver==2) - new callback style */ + int (*cb_2) (int, int, BN_GENCB *); + } cb; +}; +/* Wrapper function to make using BN_GENCB easier, */ +int BN_GENCB_call(BN_GENCB *cb, int a, int b); +/* Macro to populate a BN_GENCB structure with an "old"-style callback */ +# define BN_GENCB_set_old(gencb, callback, cb_arg) { \ + BN_GENCB *tmp_gencb = (gencb); \ + tmp_gencb->ver = 1; \ + tmp_gencb->arg = (cb_arg); \ + tmp_gencb->cb.cb_1 = (callback); } +/* Macro to populate a BN_GENCB structure with a "new"-style callback */ +# define BN_GENCB_set(gencb, callback, cb_arg) { \ + BN_GENCB *tmp_gencb = (gencb); \ + tmp_gencb->ver = 2; \ + tmp_gencb->arg = (cb_arg); \ + tmp_gencb->cb.cb_2 = (callback); } + +# define BN_prime_checks 0 /* default: select number of iterations based + * on the size of the number */ + +/* + * number of Miller-Rabin iterations for an error rate of less than 2^-80 for + * random 'b'-bit input, b >= 100 (taken from table 4.4 in the Handbook of + * Applied Cryptography [Menezes, van Oorschot, Vanstone; CRC Press 1996]; + * original paper: Damgaard, Landrock, Pomerance: Average case error + * estimates for the strong probable prime test. -- Math. Comp. 61 (1993) + * 177-194) + */ +# define BN_prime_checks_for_size(b) ((b) >= 1300 ? 2 : \ + (b) >= 850 ? 3 : \ + (b) >= 650 ? 4 : \ + (b) >= 550 ? 5 : \ + (b) >= 450 ? 6 : \ + (b) >= 400 ? 7 : \ + (b) >= 350 ? 8 : \ + (b) >= 300 ? 9 : \ + (b) >= 250 ? 12 : \ + (b) >= 200 ? 15 : \ + (b) >= 150 ? 18 : \ + /* b >= 100 */ 27) + +# define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) + +/* Note that BN_abs_is_word didn't work reliably for w == 0 until 0.9.8 */ +# define BN_abs_is_word(a,w) ((((a)->top == 1) && ((a)->d[0] == (BN_ULONG)(w))) || \ + (((w) == 0) && ((a)->top == 0))) +# define BN_is_zero(a) ((a)->top == 0) +# define BN_is_one(a) (BN_abs_is_word((a),1) && !(a)->neg) +# define BN_is_word(a,w) (BN_abs_is_word((a),(w)) && (!(w) || !(a)->neg)) +# define BN_is_odd(a) (((a)->top > 0) && ((a)->d[0] & 1)) + +# define BN_one(a) (BN_set_word((a),1)) +# define BN_zero_ex(a) \ + do { \ + BIGNUM *_tmp_bn = (a); \ + _tmp_bn->top = 0; \ + _tmp_bn->neg = 0; \ + } while(0) +# ifdef OPENSSL_NO_DEPRECATED +# define BN_zero(a) BN_zero_ex(a) +# else +# define BN_zero(a) (BN_set_word((a),0)) +# endif + +const BIGNUM *BN_value_one(void); +char *BN_options(void); +BN_CTX *BN_CTX_new(void); +# ifndef OPENSSL_NO_DEPRECATED +void BN_CTX_init(BN_CTX *c); +# endif +void BN_CTX_free(BN_CTX *c); +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_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_num_bits(const BIGNUM *a); +int BN_num_bits_word(BN_ULONG); +BIGNUM *BN_new(void); +void BN_init(BIGNUM *); +void BN_clear_free(BIGNUM *a); +BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b); +void BN_swap(BIGNUM *a, BIGNUM *b); +BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2bin(const BIGNUM *a, unsigned char *to); +BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2mpi(const BIGNUM *a, unsigned char *to); +int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); +int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); +/** BN_set_negative sets sign of a BIGNUM + * \param b pointer to the BIGNUM object + * \param n 0 if the BIGNUM b should be positive and a value != 0 otherwise + */ +void BN_set_negative(BIGNUM *b, int n); +/** BN_is_negative returns 1 if the BIGNUM is negative + * \param a pointer to the BIGNUM object + * \return 1 if a < 0 and 0 otherwise + */ +# define BN_is_negative(a) ((a)->neg != 0) + +int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, + BN_CTX *ctx); +# define BN_mod(rem,m,d,ctx) BN_div(NULL,(rem),(m),(d),(ctx)) +int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); +int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *m); +int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *m); +int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m); +int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m); + +BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w); +BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w); +int BN_mul_word(BIGNUM *a, BN_ULONG w); +int BN_add_word(BIGNUM *a, BN_ULONG w); +int BN_sub_word(BIGNUM *a, BN_ULONG w); +int BN_set_word(BIGNUM *a, BN_ULONG w); +BN_ULONG BN_get_word(const BIGNUM *a); + +int BN_cmp(const BIGNUM *a, const BIGNUM *b); +void BN_free(BIGNUM *a); +int BN_is_bit_set(const BIGNUM *a, int n); +int BN_lshift(BIGNUM *r, const BIGNUM *a, int n); +int BN_lshift1(BIGNUM *r, const BIGNUM *a); +int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); + +int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx); +int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, + BN_MONT_CTX *in_mont); +int BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1, + const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m, + BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx); + +int BN_mask_bits(BIGNUM *a, int n); +# ifndef OPENSSL_NO_FP_API +int BN_print_fp(FILE *fp, const BIGNUM *a); +# endif +# ifdef HEADER_BIO_H +int BN_print(BIO *fp, const BIGNUM *a); +# else +int BN_print(void *fp, const BIGNUM *a); +# endif +int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx); +int BN_rshift(BIGNUM *r, const BIGNUM *a, int n); +int BN_rshift1(BIGNUM *r, const BIGNUM *a); +void BN_clear(BIGNUM *a); +BIGNUM *BN_dup(const BIGNUM *a); +int BN_ucmp(const BIGNUM *a, const BIGNUM *b); +int BN_set_bit(BIGNUM *a, int n); +int BN_clear_bit(BIGNUM *a, int n); +char *BN_bn2hex(const BIGNUM *a); +char *BN_bn2dec(const BIGNUM *a); +int BN_hex2bn(BIGNUM **a, const char *str); +int BN_dec2bn(BIGNUM **a, const char *str); +int BN_asc2bn(BIGNUM **a, const char *str); +int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); +int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /* returns + * -2 for + * error */ +BIGNUM *BN_mod_inverse(BIGNUM *ret, + const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); +BIGNUM *BN_mod_sqrt(BIGNUM *ret, + const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); + +void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); + +/* Deprecated versions */ +# ifndef OPENSSL_NO_DEPRECATED +BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, + const BIGNUM *add, const BIGNUM *rem, + void (*callback) (int, int, void *), void *cb_arg); +int BN_is_prime(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg); +int BN_is_prime_fasttest(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), BN_CTX *ctx, + void *cb_arg, int do_trial_division); +# endif /* !defined(OPENSSL_NO_DEPRECATED) */ + +/* Newer versions */ +int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, + const BIGNUM *rem, BN_GENCB *cb); +int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb); +int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, + int do_trial_division, BN_GENCB *cb); + +int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx); + +int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, + const BIGNUM *Xp, const BIGNUM *Xp1, + const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx, + BN_GENCB *cb); +int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1, + BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e, + BN_CTX *ctx, BN_GENCB *cb); + +BN_MONT_CTX *BN_MONT_CTX_new(void); +void BN_MONT_CTX_init(BN_MONT_CTX *ctx); +int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + BN_MONT_CTX *mont, BN_CTX *ctx); +# define BN_to_montgomery(r,a,mont,ctx) BN_mod_mul_montgomery(\ + (r),(a),&((mont)->RR),(mont),(ctx)) +int BN_from_montgomery(BIGNUM *r, const BIGNUM *a, + BN_MONT_CTX *mont, BN_CTX *ctx); +void BN_MONT_CTX_free(BN_MONT_CTX *mont); +int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx); +BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from); +BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock, + const BIGNUM *mod, BN_CTX *ctx); + +/* BN_BLINDING flags */ +# define BN_BLINDING_NO_UPDATE 0x00000001 +# define BN_BLINDING_NO_RECREATE 0x00000002 + +BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod); +void BN_BLINDING_free(BN_BLINDING *b); +int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx); +int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); +int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); +int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *); +int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, + BN_CTX *); +# ifndef OPENSSL_NO_DEPRECATED +unsigned long BN_BLINDING_get_thread_id(const BN_BLINDING *); +void BN_BLINDING_set_thread_id(BN_BLINDING *, unsigned long); +# endif +CRYPTO_THREADID *BN_BLINDING_thread_id(BN_BLINDING *); +unsigned long BN_BLINDING_get_flags(const BN_BLINDING *); +void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long); +BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, + const BIGNUM *e, BIGNUM *m, BN_CTX *ctx, + int (*bn_mod_exp) (BIGNUM *r, + const BIGNUM *a, + const BIGNUM *p, + const BIGNUM *m, + BN_CTX *ctx, + BN_MONT_CTX *m_ctx), + BN_MONT_CTX *m_ctx); + +# ifndef OPENSSL_NO_DEPRECATED +void BN_set_params(int mul, int high, int low, int mont); +int BN_get_params(int which); /* 0, mul, 1 high, 2 low, 3 mont */ +# endif + +void BN_RECP_CTX_init(BN_RECP_CTX *recp); +BN_RECP_CTX *BN_RECP_CTX_new(void); +void BN_RECP_CTX_free(BN_RECP_CTX *recp); +int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *rdiv, BN_CTX *ctx); +int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, + BN_RECP_CTX *recp, BN_CTX *ctx); +int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx); +int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, + BN_RECP_CTX *recp, BN_CTX *ctx); + +# ifndef OPENSSL_NO_EC2M + +/* + * Functions for arithmetic over binary polynomials represented by BIGNUMs. + * The BIGNUM::neg property of BIGNUMs representing binary polynomials is + * ignored. Note that input arguments are not const so that their bit arrays + * can be expanded to the appropriate size if needed. + */ + +/* + * r = a + b + */ +int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +# define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b) +/* + * r=a mod p + */ +int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p); +/* r = (a * b) mod p */ +int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *p, BN_CTX *ctx); +/* r = (a * a) mod p */ +int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +/* r = (1 / b) mod p */ +int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx); +/* r = (a / b) mod p */ +int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *p, BN_CTX *ctx); +/* r = (a ^ b) mod p */ +int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *p, BN_CTX *ctx); +/* r = sqrt(a) mod p */ +int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + BN_CTX *ctx); +/* r^2 + r = a mod p */ +int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + BN_CTX *ctx); +# define BN_GF2m_cmp(a, b) BN_ucmp((a), (b)) +/*- + * Some functions allow for representation of the irreducible polynomials + * as an unsigned int[], say p. The irreducible f(t) is then of the form: + * t^p[0] + t^p[1] + ... + t^p[k] + * where m = p[0] > p[1] > ... > p[k] = 0. + */ +/* r = a mod p */ +int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]); +/* r = (a * b) mod p */ +int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const int p[], BN_CTX *ctx); +/* r = (a * a) mod p */ +int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[], + BN_CTX *ctx); +/* r = (1 / b) mod p */ +int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[], + BN_CTX *ctx); +/* r = (a / b) mod p */ +int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const int p[], BN_CTX *ctx); +/* r = (a ^ b) mod p */ +int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const int p[], BN_CTX *ctx); +/* r = sqrt(a) mod p */ +int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a, + const int p[], BN_CTX *ctx); +/* r^2 + r = a mod p */ +int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a, + const int p[], BN_CTX *ctx); +int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max); +int BN_GF2m_arr2poly(const int p[], BIGNUM *a); + +# endif + +/* + * faster mod functions for the 'NIST primes' 0 <= a < p^2 + */ +int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); + +const BIGNUM *BN_get0_nist_prime_192(void); +const BIGNUM *BN_get0_nist_prime_224(void); +const BIGNUM *BN_get0_nist_prime_256(void); +const BIGNUM *BN_get0_nist_prime_384(void); +const BIGNUM *BN_get0_nist_prime_521(void); + +/* library internal functions */ + +# define bn_expand(a,bits) ((((((bits+BN_BITS2-1))/BN_BITS2)) <= (a)->dmax)?\ + (a):bn_expand2((a),(bits+BN_BITS2-1)/BN_BITS2)) +# define bn_wexpand(a,words) (((words) <= (a)->dmax)?(a):bn_expand2((a),(words))) +BIGNUM *bn_expand2(BIGNUM *a, int words); +# ifndef OPENSSL_NO_DEPRECATED +BIGNUM *bn_dup_expand(const BIGNUM *a, int words); /* unused */ +# endif + +/*- + * Bignum consistency macros + * There is one "API" macro, bn_fix_top(), for stripping leading zeroes from + * bignum data after direct manipulations on the data. There is also an + * "internal" macro, bn_check_top(), for verifying that there are no leading + * zeroes. Unfortunately, some auditing is required due to the fact that + * bn_fix_top() has become an overabused duct-tape because bignum data is + * occasionally passed around in an inconsistent state. So the following + * changes have been made to sort this out; + * - bn_fix_top()s implementation has been moved to bn_correct_top() + * - if BN_DEBUG isn't defined, bn_fix_top() maps to bn_correct_top(), and + * bn_check_top() is as before. + * - if BN_DEBUG *is* defined; + * - bn_check_top() tries to pollute unused words even if the bignum 'top' is + * consistent. (ed: only if BN_DEBUG_RAND is defined) + * - bn_fix_top() maps to bn_check_top() rather than "fixing" anything. + * The idea is to have debug builds flag up inconsistent bignums when they + * occur. If that occurs in a bn_fix_top(), we examine the code in question; if + * the use of bn_fix_top() was appropriate (ie. it follows directly after code + * that manipulates the bignum) it is converted to bn_correct_top(), and if it + * was not appropriate, we convert it permanently to bn_check_top() and track + * down the cause of the bug. Eventually, no internal code should be using the + * bn_fix_top() macro. External applications and libraries should try this with + * their own code too, both in terms of building against the openssl headers + * with BN_DEBUG defined *and* linking with a version of OpenSSL built with it + * defined. This not only improves external code, it provides more test + * coverage for openssl's own code. + */ + +# ifdef BN_DEBUG + +/* We only need assert() when debugging */ +# include + +# ifdef BN_DEBUG_RAND +/* To avoid "make update" cvs wars due to BN_DEBUG, use some tricks */ +# ifndef RAND_pseudo_bytes +int RAND_pseudo_bytes(unsigned char *buf, int num); +# define BN_DEBUG_TRIX +# endif +# define bn_pollute(a) \ + do { \ + const BIGNUM *_bnum1 = (a); \ + if(_bnum1->top < _bnum1->dmax) { \ + unsigned char _tmp_char; \ + /* We cast away const without the compiler knowing, any \ + * *genuinely* constant variables that aren't mutable \ + * wouldn't be constructed with top!=dmax. */ \ + BN_ULONG *_not_const; \ + memcpy(&_not_const, &_bnum1->d, sizeof(BN_ULONG*)); \ + /* Debug only - safe to ignore error return */ \ + RAND_pseudo_bytes(&_tmp_char, 1); \ + memset((unsigned char *)(_not_const + _bnum1->top), _tmp_char, \ + (_bnum1->dmax - _bnum1->top) * sizeof(BN_ULONG)); \ + } \ + } while(0) +# ifdef BN_DEBUG_TRIX +# undef RAND_pseudo_bytes +# endif +# else +# define bn_pollute(a) +# endif +# define bn_check_top(a) \ + do { \ + const BIGNUM *_bnum2 = (a); \ + if (_bnum2 != NULL) { \ + assert((_bnum2->top == 0) || \ + (_bnum2->d[_bnum2->top - 1] != 0)); \ + bn_pollute(_bnum2); \ + } \ + } while(0) + +# define bn_fix_top(a) bn_check_top(a) + +# define bn_check_size(bn, bits) bn_wcheck_size(bn, ((bits+BN_BITS2-1))/BN_BITS2) +# define bn_wcheck_size(bn, words) \ + do { \ + const BIGNUM *_bnum2 = (bn); \ + assert((words) <= (_bnum2)->dmax && (words) >= (_bnum2)->top); \ + /* avoid unused variable warning with NDEBUG */ \ + (void)(_bnum2); \ + } while(0) + +# else /* !BN_DEBUG */ + +# define bn_pollute(a) +# define bn_check_top(a) +# define bn_fix_top(a) bn_correct_top(a) +# define bn_check_size(bn, bits) +# define bn_wcheck_size(bn, words) + +# endif + +# define bn_correct_top(a) \ + { \ + BN_ULONG *ftl; \ + int tmp_top = (a)->top; \ + if (tmp_top > 0) \ + { \ + for (ftl= &((a)->d[tmp_top-1]); tmp_top > 0; tmp_top--) \ + if (*(ftl--)) break; \ + (a)->top = tmp_top; \ + } \ + bn_pollute(a); \ + } + +BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, + BN_ULONG w); +BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w); +void bn_sqr_words(BN_ULONG *rp, const BN_ULONG *ap, int num); +BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d); +BN_ULONG bn_add_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, + int num); +BN_ULONG bn_sub_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, + int num); + +/* Primes from RFC 2409 */ +BIGNUM *get_rfc2409_prime_768(BIGNUM *bn); +BIGNUM *get_rfc2409_prime_1024(BIGNUM *bn); + +/* Primes from RFC 3526 */ +BIGNUM *get_rfc3526_prime_1536(BIGNUM *bn); +BIGNUM *get_rfc3526_prime_2048(BIGNUM *bn); +BIGNUM *get_rfc3526_prime_3072(BIGNUM *bn); +BIGNUM *get_rfc3526_prime_4096(BIGNUM *bn); +BIGNUM *get_rfc3526_prime_6144(BIGNUM *bn); +BIGNUM *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. + */ +void 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_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_NO_BRANCH 138 +# define BN_F_BN_DIV_RECP 130 +# define BN_F_BN_EXP 123 +# define BN_F_BN_EXPAND2 108 +# define BN_F_BN_EXPAND_INTERNAL 120 +# 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_MUL_RECIPROCAL 111 +# 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_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_P_IS_NOT_PRIME 112 +# define BN_R_TOO_MANY_ITERATIONS 113 +# define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/buffer.h b/Sources/OpenSSL/include/openssl/buffer.h new file mode 100644 index 0000000000..707a037c83 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/buffer.h @@ -0,0 +1,119 @@ +/* crypto/buffer/buffer.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_BUFFER_H +# define HEADER_BUFFER_H + +# include "ossl_typ.h" + +#ifdef __cplusplus +extern "C" { +#endif + +# include + +# if !defined(NO_SYS_TYPES_H) +# include +# endif + +/* Already declared in ossl_typ.h */ +/* typedef struct buf_mem_st BUF_MEM; */ + +struct buf_mem_st { + size_t length; /* current number of bytes */ + char *data; + size_t max; /* size of buffer */ +}; + +BUF_MEM *BUF_MEM_new(void); +void BUF_MEM_free(BUF_MEM *a); +int BUF_MEM_grow(BUF_MEM *str, size_t len); +int BUF_MEM_grow_clean(BUF_MEM *str, size_t len); +size_t BUF_strnlen(const char *str, size_t maxlen); +char *BUF_strdup(const char *str); +char *BUF_strndup(const char *str, size_t siz); +void *BUF_memdup(const void *data, size_t siz); +void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); + +/* safe string functions */ +size_t BUF_strlcpy(char *dst, const char *src, size_t siz); +size_t BUF_strlcat(char *dst, const char *src, 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. + */ +void ERR_load_BUF_strings(void); + +/* Error codes for the BUF functions. */ + +/* Function codes. */ +# define BUF_F_BUF_MEMDUP 103 +# define BUF_F_BUF_MEM_GROW 100 +# define BUF_F_BUF_MEM_GROW_CLEAN 105 +# define BUF_F_BUF_MEM_NEW 101 +# define BUF_F_BUF_STRDUP 102 +# define BUF_F_BUF_STRNDUP 104 + +/* Reason codes. */ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/camellia.h b/Sources/OpenSSL/include/openssl/camellia.h new file mode 100644 index 0000000000..b42cfc2d58 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/camellia.h @@ -0,0 +1,132 @@ +/* crypto/camellia/camellia.h -*- mode:C; c-file-style: "eay" -*- */ +/* ==================================================================== + * Copyright (c) 2006 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + */ + +#ifndef HEADER_CAMELLIA_H +# define HEADER_CAMELLIA_H + +# include "opensslconf.h" + +# ifdef OPENSSL_NO_CAMELLIA +# error CAMELLIA is disabled. +# endif + +# include + +# define CAMELLIA_ENCRYPT 1 +# define CAMELLIA_DECRYPT 0 + +/* + * Because array size can't be a const in C, the following two are macros. + * Both sizes are in bytes. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* This should be a hidden type, but EVP requires that the size be known */ + +# define CAMELLIA_BLOCK_SIZE 16 +# define CAMELLIA_TABLE_BYTE_LEN 272 +# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) + +typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match + * with WORD */ + +struct camellia_key_st { + union { + double d; /* ensures 64-bit align */ + KEY_TABLE_TYPE rd_key; + } u; + int grand_rounds; +}; +typedef struct camellia_key_st CAMELLIA_KEY; + +# ifdef OPENSSL_FIPS +int private_Camellia_set_key(const unsigned char *userKey, const int bits, + CAMELLIA_KEY *key); +# endif +int Camellia_set_key(const unsigned char *userKey, const int bits, + CAMELLIA_KEY *key); + +void Camellia_encrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); +void Camellia_decrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); + +void Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key, const int enc); +void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, const int enc); +void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num, const int enc); +void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num, const int enc); +void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num, const int enc); +void Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num); +void Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char ivec[CAMELLIA_BLOCK_SIZE], + unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE], + unsigned int *num); + +#ifdef __cplusplus +} +#endif + +#endif /* !HEADER_Camellia_H */ diff --git a/Sources/OpenSSL/include/openssl/cast.h b/Sources/OpenSSL/include/openssl/cast.h new file mode 100644 index 0000000000..c3da7ae8f3 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/cast.h @@ -0,0 +1,107 @@ +/* crypto/cast/cast.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_CAST_H +# define HEADER_CAST_H + +#ifdef __cplusplus +extern "C" { +#endif + +# include "opensslconf.h" + +# ifdef OPENSSL_NO_CAST +# error CAST is disabled. +# endif + +# define CAST_ENCRYPT 1 +# define CAST_DECRYPT 0 + +# define CAST_LONG unsigned int + +# define CAST_BLOCK 8 +# define CAST_KEY_LENGTH 16 + +typedef struct cast_key_st { + CAST_LONG data[32]; + int short_key; /* Use reduced rounds for short key */ +} CAST_KEY; + +# ifdef OPENSSL_FIPS +void private_CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); +# endif +void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); +void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, + const CAST_KEY *key, int enc); +void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key); +void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key); +void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, + long length, const CAST_KEY *ks, unsigned char *iv, + int enc); +void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const CAST_KEY *schedule, + unsigned char *ivec, int *num, int enc); +void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const CAST_KEY *schedule, + unsigned char *ivec, int *num); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/cmac.h b/Sources/OpenSSL/include/openssl/cmac.h new file mode 100644 index 0000000000..74b74bea7b --- /dev/null +++ b/Sources/OpenSSL/include/openssl/cmac.h @@ -0,0 +1,82 @@ +/* crypto/cmac/cmac.h */ +/* + * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL + * project. + */ +/* ==================================================================== + * Copyright (c) 2010 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + */ + +#ifndef HEADER_CMAC_H +# define HEADER_CMAC_H + +#ifdef __cplusplus +extern "C" { +#endif + +# include "evp.h" + +/* Opaque */ +typedef struct CMAC_CTX_st CMAC_CTX; + +CMAC_CTX *CMAC_CTX_new(void); +void CMAC_CTX_cleanup(CMAC_CTX *ctx); +void CMAC_CTX_free(CMAC_CTX *ctx); +EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); +int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); + +int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen, + const EVP_CIPHER *cipher, ENGINE *impl); +int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen); +int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen); +int CMAC_resume(CMAC_CTX *ctx); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/cms.h b/Sources/OpenSSL/include/openssl/cms.h new file mode 100644 index 0000000000..a098795ce4 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/cms.h @@ -0,0 +1,555 @@ +/* crypto/cms/cms.h */ +/* + * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL + * project. + */ +/* ==================================================================== + * Copyright (c) 2008 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + */ + +#ifndef HEADER_CMS_H +# define HEADER_CMS_H + +# include "x509.h" + +# ifdef OPENSSL_NO_CMS +# error CMS is disabled. +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct CMS_ContentInfo_st CMS_ContentInfo; +typedef struct CMS_SignerInfo_st CMS_SignerInfo; +typedef struct CMS_CertificateChoices CMS_CertificateChoices; +typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice; +typedef struct CMS_RecipientInfo_st CMS_RecipientInfo; +typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest; +typedef struct CMS_Receipt_st CMS_Receipt; +typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; +typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; + +DECLARE_STACK_OF(CMS_SignerInfo) +DECLARE_STACK_OF(GENERAL_NAMES) +DECLARE_STACK_OF(CMS_RecipientEncryptedKey) +DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) +DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) +DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) + +# define CMS_SIGNERINFO_ISSUER_SERIAL 0 +# define CMS_SIGNERINFO_KEYIDENTIFIER 1 + +# define CMS_RECIPINFO_NONE -1 +# define CMS_RECIPINFO_TRANS 0 +# define CMS_RECIPINFO_AGREE 1 +# define CMS_RECIPINFO_KEK 2 +# define CMS_RECIPINFO_PASS 3 +# define CMS_RECIPINFO_OTHER 4 + +/* S/MIME related flags */ + +# define CMS_TEXT 0x1 +# define CMS_NOCERTS 0x2 +# define CMS_NO_CONTENT_VERIFY 0x4 +# define CMS_NO_ATTR_VERIFY 0x8 +# define CMS_NOSIGS \ + (CMS_NO_CONTENT_VERIFY|CMS_NO_ATTR_VERIFY) +# define CMS_NOINTERN 0x10 +# define CMS_NO_SIGNER_CERT_VERIFY 0x20 +# define CMS_NOVERIFY 0x20 +# define CMS_DETACHED 0x40 +# define CMS_BINARY 0x80 +# define CMS_NOATTR 0x100 +# define CMS_NOSMIMECAP 0x200 +# define CMS_NOOLDMIMETYPE 0x400 +# define CMS_CRLFEOL 0x800 +# define CMS_STREAM 0x1000 +# define CMS_NOCRL 0x2000 +# define CMS_PARTIAL 0x4000 +# define CMS_REUSE_DIGEST 0x8000 +# define CMS_USE_KEYID 0x10000 +# define CMS_DEBUG_DECRYPT 0x20000 +# define CMS_KEY_PARAM 0x40000 + +const ASN1_OBJECT *CMS_get0_type(CMS_ContentInfo *cms); + +BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont); +int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio); + +ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); +int CMS_is_detached(CMS_ContentInfo *cms); +int CMS_set_detached(CMS_ContentInfo *cms, int detached); + +# ifdef HEADER_PEM_H +DECLARE_PEM_rw_const(CMS, CMS_ContentInfo) +# endif +int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); +CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); +int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms); + +BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); +int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); +int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, + int flags); +CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); +int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); + +int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, + unsigned int flags); + +CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags); + +CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, + X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, unsigned int flags); + +int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); +CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); + +int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, + unsigned int flags); + +int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, + const unsigned char *key, size_t keylen, + BIO *dcont, BIO *out, unsigned int flags); + +CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags); + +int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, + const unsigned char *key, size_t keylen); + +int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags); + +int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, + STACK_OF(X509) *certs, + X509_STORE *store, unsigned int flags); + +STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); + +CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags); + +int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, + BIO *dcont, BIO *out, unsigned int flags); + +int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); +int CMS_decrypt_set1_key(CMS_ContentInfo *cms, + unsigned char *key, size_t keylen, + unsigned char *id, size_t idlen); +int CMS_decrypt_set1_password(CMS_ContentInfo *cms, + unsigned char *pass, ossl_ssize_t passlen); + +STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); +int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); +EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); +CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); +CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, + X509 *recip, unsigned int flags); +int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); +int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); +int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, + EVP_PKEY **pk, X509 **recip, + X509_ALGOR **palg); +int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, + unsigned char *key, size_t keylen, + unsigned char *id, size_t idlen, + ASN1_GENERALIZEDTIME *date, + ASN1_OBJECT *otherTypeId, + ASN1_TYPE *otherType); + +int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pid, + ASN1_GENERALIZEDTIME **pdate, + ASN1_OBJECT **potherid, + ASN1_TYPE **pothertype); + +int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, + unsigned char *key, size_t keylen); + +int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, + const unsigned char *id, size_t idlen); + +int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri, + unsigned char *pass, + ossl_ssize_t passlen); + +CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, + int iter, int wrap_nid, + int pbe_nid, + unsigned char *pass, + ossl_ssize_t passlen, + const EVP_CIPHER *kekciph); + +int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); +int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); + +int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags); + +int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid); +const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms); + +CMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms); +int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert); +int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert); +STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms); + +CMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms); +int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl); +int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl); +STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms); + +int CMS_SignedData_init(CMS_ContentInfo *cms); +CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, + X509 *signer, EVP_PKEY *pk, const EVP_MD *md, + unsigned int flags); +EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si); +EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si); +STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms); + +void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer); +int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert); +int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + unsigned int flags); +void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk, + X509 **signer, X509_ALGOR **pdig, + X509_ALGOR **psig); +ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si); +int CMS_SignerInfo_sign(CMS_SignerInfo *si); +int CMS_SignerInfo_verify(CMS_SignerInfo *si); +int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain); + +int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs); +int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs, + int algnid, int keysize); +int CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap); + +int CMS_signed_get_attr_count(const CMS_SignerInfo *si); +int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, + int lastpos, int type); + +int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); +int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, + int lastpos, int type); + +# ifdef HEADER_X509V3_H + +int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen, + int allorfirst, + STACK_OF(GENERAL_NAMES) + *receiptList, STACK_OF(GENERAL_NAMES) + *receiptsTo); +int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); +void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, + ASN1_STRING **pcid, + int *pallorfirst, + STACK_OF(GENERAL_NAMES) **plist, + STACK_OF(GENERAL_NAMES) **prto); +# endif +int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pukm); +STACK_OF(CMS_RecipientEncryptedKey) +*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri); + +int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri, + X509_ALGOR **pubalg, + ASN1_BIT_STRING **pubkey, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert); + +int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, + ASN1_OCTET_STRING **keyid, + ASN1_GENERALIZEDTIME **tm, + CMS_OtherKeyAttribute **other, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, + X509 *cert); +int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); +EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); +int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, + CMS_RecipientInfo *ri, + CMS_RecipientEncryptedKey *rek); + +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. + */ +void 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_DIGEST_ERROR 161 +# 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 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/comp.h b/Sources/OpenSSL/include/openssl/comp.h new file mode 100644 index 0000000000..b00270d6ce --- /dev/null +++ b/Sources/OpenSSL/include/openssl/comp.h @@ -0,0 +1,79 @@ + +#ifndef HEADER_COMP_H +# define HEADER_COMP_H + +# include "crypto.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct comp_ctx_st COMP_CTX; + +typedef struct comp_method_st { + int type; /* NID for compression library */ + const char *name; /* A text string to identify the library */ + int (*init) (COMP_CTX *ctx); + void (*finish) (COMP_CTX *ctx); + int (*compress) (COMP_CTX *ctx, + unsigned char *out, unsigned int olen, + unsigned char *in, unsigned int ilen); + int (*expand) (COMP_CTX *ctx, + unsigned char *out, unsigned int olen, + unsigned char *in, unsigned int ilen); + /* + * The following two do NOTHING, but are kept for backward compatibility + */ + long (*ctrl) (void); + long (*callback_ctrl) (void); +} COMP_METHOD; + +struct comp_ctx_st { + COMP_METHOD *meth; + unsigned long compress_in; + unsigned long compress_out; + unsigned long expand_in; + unsigned long expand_out; + CRYPTO_EX_DATA ex_data; +}; + +COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); +void COMP_CTX_free(COMP_CTX *ctx); +int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, + unsigned char *in, int ilen); +int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, + unsigned char *in, int ilen); +COMP_METHOD *COMP_rle(void); +COMP_METHOD *COMP_zlib(void); +void COMP_zlib_cleanup(void); + +# ifdef HEADER_BIO_H +# ifdef ZLIB +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. + */ +void 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 +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/conf.h b/Sources/OpenSSL/include/openssl/conf.h new file mode 100644 index 0000000000..a8d825dd9f --- /dev/null +++ b/Sources/OpenSSL/include/openssl/conf.h @@ -0,0 +1,267 @@ +/* crypto/conf/conf.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_CONF_H +# define HEADER_CONF_H + +# include "bio.h" +# include "lhash.h" +# include "stack.h" +# include "safestack.h" +# include "e_os2.h" + +# include "ossl_typ.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + char *section; + char *name; + char *value; +} CONF_VALUE; + +DECLARE_STACK_OF(CONF_VALUE) +DECLARE_LHASH_OF(CONF_VALUE); + +struct conf_st; +struct conf_method_st; +typedef struct conf_method_st CONF_METHOD; + +struct conf_method_st { + const char *name; + CONF *(*create) (CONF_METHOD *meth); + int (*init) (CONF *conf); + int (*destroy) (CONF *conf); + int (*destroy_data) (CONF *conf); + int (*load_bio) (CONF *conf, BIO *bp, long *eline); + int (*dump) (const CONF *conf, BIO *bp); + int (*is_number) (const CONF *conf, char c); + int (*to_int) (const CONF *conf, char c); + int (*load) (CONF *conf, const char *name, long *eline); +}; + +/* Module definitions */ + +typedef struct conf_imodule_st CONF_IMODULE; +typedef struct conf_module_st CONF_MODULE; + +DECLARE_STACK_OF(CONF_MODULE) +DECLARE_STACK_OF(CONF_IMODULE) + +/* DSO module function typedefs */ +typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); +typedef void conf_finish_func (CONF_IMODULE *md); + +# define CONF_MFLAGS_IGNORE_ERRORS 0x1 +# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 +# define CONF_MFLAGS_SILENT 0x4 +# define CONF_MFLAGS_NO_DSO 0x8 +# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 +# define CONF_MFLAGS_DEFAULT_SECTION 0x20 + +int CONF_set_default_method(CONF_METHOD *meth); +void CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash); +LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file, + long *eline); +# ifndef OPENSSL_NO_FP_API +LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp, + long *eline); +# endif +LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp, + long *eline); +STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf, + const char *section); +char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +long CONF_get_number(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +void CONF_free(LHASH_OF(CONF_VALUE) *conf); +int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); +int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); + +void OPENSSL_config(const char *config_name); +void OPENSSL_no_config(void); + +/* + * New conf code. The semantics are different from the functions above. If + * that wasn't the case, the above functions would have been replaced + */ + +struct conf_st { + CONF_METHOD *meth; + void *meth_data; + LHASH_OF(CONF_VALUE) *data; +}; + +CONF *NCONF_new(CONF_METHOD *meth); +CONF_METHOD *NCONF_default(void); +CONF_METHOD *NCONF_WIN32(void); +# if 0 /* Just to give you an idea of what I have in + * mind */ +CONF_METHOD *NCONF_XML(void); +# endif +void NCONF_free(CONF *conf); +void NCONF_free_data(CONF *conf); + +int NCONF_load(CONF *conf, const char *file, long *eline); +# ifndef OPENSSL_NO_FP_API +int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); +# endif +int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); +STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, + const char *section); +char *NCONF_get_string(const CONF *conf, const char *group, const char *name); +int NCONF_get_number_e(const CONF *conf, const char *group, const char *name, + long *result); +int NCONF_dump_fp(const CONF *conf, FILE *out); +int NCONF_dump_bio(const CONF *conf, BIO *out); + +# if 0 /* The following function has no error + * checking, and should therefore be avoided */ +long NCONF_get_number(CONF *conf, char *group, char *name); +# else +# define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) +# endif + +/* Module functions */ + +int CONF_modules_load(const CONF *cnf, const char *appname, + unsigned long flags); +int CONF_modules_load_file(const char *filename, const char *appname, + unsigned long flags); +void CONF_modules_unload(int all); +void CONF_modules_finish(void); +void CONF_modules_free(void); +int CONF_module_add(const char *name, conf_init_func *ifunc, + conf_finish_func *ffunc); + +const char *CONF_imodule_get_name(const CONF_IMODULE *md); +const char *CONF_imodule_get_value(const CONF_IMODULE *md); +void *CONF_imodule_get_usr_data(const CONF_IMODULE *md); +void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data); +CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md); +unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md); +void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags); +void *CONF_module_get_usr_data(CONF_MODULE *pmod); +void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data); + +char *CONF_get1_default_config_file(void); + +int CONF_parse_list(const char *list, int sep, int nospc, + int (*list_cb) (const char *elem, int len, void *usr), + void *arg); + +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. + */ +void 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_BIO 102 +# define CONF_F_CONF_LOAD_FP 103 +# define CONF_F_CONF_MODULES_LOAD 116 +# 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 107 +# 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_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_FINISH_FUNCTION 111 +# 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_UNABLE_TO_CREATE_NEW_SECTION 103 +# define CONF_R_UNKNOWN_MODULE_NAME 113 +# define CONF_R_VARIABLE_HAS_NO_VALUE 104 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/conf_api.h b/Sources/OpenSSL/include/openssl/conf_api.h new file mode 100644 index 0000000000..66a0eeacf5 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/conf_api.h @@ -0,0 +1,89 @@ +/* conf_api.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_CONF_API_H +# define HEADER_CONF_API_H + +# include "lhash.h" +# include "conf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Up until OpenSSL 0.9.5a, this was new_section */ +CONF_VALUE *_CONF_new_section(CONF *conf, const char *section); +/* Up until OpenSSL 0.9.5a, this was get_section */ +CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section); +/* Up until OpenSSL 0.9.5a, this was CONF_get_section */ +STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf, + const char *section); + +int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value); +char *_CONF_get_string(const CONF *conf, const char *section, + const char *name); +long _CONF_get_number(const CONF *conf, const char *section, + const char *name); + +int _CONF_new_data(CONF *conf); +void _CONF_free_data(CONF *conf); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/crypto.h b/Sources/OpenSSL/include/openssl/crypto.h new file mode 100644 index 0000000000..989288528d --- /dev/null +++ b/Sources/OpenSSL/include/openssl/crypto.h @@ -0,0 +1,661 @@ +/* crypto/crypto.h */ +/* ==================================================================== + * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * 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 + +# include + +# include "e_os2.h" + +# ifndef OPENSSL_NO_FP_API +# include +# endif + +# include "stack.h" +# include "safestack.h" +# include "opensslv.h" +# include "ossl_typ.h" + +# ifdef CHARSET_EBCDIC +# include "ebcdic.h" +# endif + +/* + * Resolve problems on some operating systems with symbol names that clash + * one way or another + */ +# include "symhacks.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Backward compatibility to SSLeay */ +/* + * This is more to be used to check the correct DLL is being used in the MS + * world. + */ +# define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER +# define SSLEAY_VERSION 0 +/* #define SSLEAY_OPTIONS 1 no longer supported */ +# define SSLEAY_CFLAGS 2 +# define SSLEAY_BUILT_ON 3 +# define SSLEAY_PLATFORM 4 +# define SSLEAY_DIR 5 + +/* Already declared in ossl_typ.h */ +# if 0 +typedef struct crypto_ex_data_st CRYPTO_EX_DATA; +/* Called when a new object is created */ +typedef int CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +/* Called when an object is free()ed */ +typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +/* Called when we need to dup an object */ +typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, + void *from_d, int idx, long argl, void *argp); +# endif + +/* A generic structure to pass assorted data in a expandable way */ +typedef struct openssl_item_st { + int code; + void *value; /* Not used for flag attributes */ + size_t value_size; /* Max size of value for output, length for + * input */ + size_t *value_length; /* Returned length of value for output */ +} OPENSSL_ITEM; + +/* + * When changing the CRYPTO_LOCK_* list, be sure to maintin the text lock + * names in cryptlib.c + */ + +# define CRYPTO_LOCK_ERR 1 +# define CRYPTO_LOCK_EX_DATA 2 +# define CRYPTO_LOCK_X509 3 +# define CRYPTO_LOCK_X509_INFO 4 +# define CRYPTO_LOCK_X509_PKEY 5 +# define CRYPTO_LOCK_X509_CRL 6 +# define CRYPTO_LOCK_X509_REQ 7 +# define CRYPTO_LOCK_DSA 8 +# define CRYPTO_LOCK_RSA 9 +# define CRYPTO_LOCK_EVP_PKEY 10 +# define CRYPTO_LOCK_X509_STORE 11 +# define CRYPTO_LOCK_SSL_CTX 12 +# define CRYPTO_LOCK_SSL_CERT 13 +# define CRYPTO_LOCK_SSL_SESSION 14 +# define CRYPTO_LOCK_SSL_SESS_CERT 15 +# define CRYPTO_LOCK_SSL 16 +# define CRYPTO_LOCK_SSL_METHOD 17 +# define CRYPTO_LOCK_RAND 18 +# define CRYPTO_LOCK_RAND2 19 +# define CRYPTO_LOCK_MALLOC 20 +# define CRYPTO_LOCK_BIO 21 +# define CRYPTO_LOCK_GETHOSTBYNAME 22 +# define CRYPTO_LOCK_GETSERVBYNAME 23 +# define CRYPTO_LOCK_READDIR 24 +# define CRYPTO_LOCK_RSA_BLINDING 25 +# define CRYPTO_LOCK_DH 26 +# define CRYPTO_LOCK_MALLOC2 27 +# define CRYPTO_LOCK_DSO 28 +# define CRYPTO_LOCK_DYNLOCK 29 +# define CRYPTO_LOCK_ENGINE 30 +# define CRYPTO_LOCK_UI 31 +# define CRYPTO_LOCK_ECDSA 32 +# define CRYPTO_LOCK_EC 33 +# define CRYPTO_LOCK_ECDH 34 +# define CRYPTO_LOCK_BN 35 +# define CRYPTO_LOCK_EC_PRE_COMP 36 +# define CRYPTO_LOCK_STORE 37 +# define CRYPTO_LOCK_COMP 38 +# define CRYPTO_LOCK_FIPS 39 +# define CRYPTO_LOCK_FIPS2 40 +# define CRYPTO_NUM_LOCKS 41 + +# define CRYPTO_LOCK 1 +# define CRYPTO_UNLOCK 2 +# define CRYPTO_READ 4 +# define CRYPTO_WRITE 8 + +# ifndef OPENSSL_NO_LOCKING +# ifndef CRYPTO_w_lock +# define CRYPTO_w_lock(type) \ + CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE,type,__FILE__,__LINE__) +# define CRYPTO_w_unlock(type) \ + CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE,type,__FILE__,__LINE__) +# define CRYPTO_r_lock(type) \ + CRYPTO_lock(CRYPTO_LOCK|CRYPTO_READ,type,__FILE__,__LINE__) +# define CRYPTO_r_unlock(type) \ + CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_READ,type,__FILE__,__LINE__) +# define CRYPTO_add(addr,amount,type) \ + CRYPTO_add_lock(addr,amount,type,__FILE__,__LINE__) +# endif +# else +# define CRYPTO_w_lock(a) +# define CRYPTO_w_unlock(a) +# define CRYPTO_r_lock(a) +# define CRYPTO_r_unlock(a) +# define CRYPTO_add(a,b,c) ((*(a))+=(b)) +# endif + +/* + * Some applications as well as some parts of OpenSSL need to allocate and + * deallocate locks in a dynamic fashion. The following typedef makes this + * possible in a type-safe manner. + */ +/* struct CRYPTO_dynlock_value has to be defined by the application. */ +typedef struct { + int references; + struct CRYPTO_dynlock_value *data; +} CRYPTO_dynlock; + +/* + * The following can be used to detect memory leaks in the SSLeay library. It + * used, it turns on malloc checking + */ + +# define CRYPTO_MEM_CHECK_OFF 0x0/* an enume */ +# define CRYPTO_MEM_CHECK_ON 0x1/* a bit */ +# define CRYPTO_MEM_CHECK_ENABLE 0x2/* a bit */ +# define CRYPTO_MEM_CHECK_DISABLE 0x3/* an enume */ + +/* + * The following are bit values to turn on or off options connected to the + * malloc checking functionality + */ + +/* Adds time to the memory checking information */ +# define V_CRYPTO_MDEBUG_TIME 0x1/* a bit */ +/* Adds thread number to the memory checking information */ +# define V_CRYPTO_MDEBUG_THREAD 0x2/* a bit */ + +# define V_CRYPTO_MDEBUG_ALL (V_CRYPTO_MDEBUG_TIME | V_CRYPTO_MDEBUG_THREAD) + +/* predec of the BIO type */ +typedef struct bio_st BIO_dummy; + +struct crypto_ex_data_st { + STACK_OF(void) *sk; + /* gcc is screwing up this data structure :-( */ + int dummy; +}; +DECLARE_STACK_OF(void) + +/* + * This stuff is basically class callback functions The current classes are + * SSL_CTX, SSL, SSL_SESSION, and a few more + */ + +typedef struct crypto_ex_data_func_st { + long argl; /* Arbitary long */ + void *argp; /* Arbitary void * */ + CRYPTO_EX_new *new_func; + CRYPTO_EX_free *free_func; + CRYPTO_EX_dup *dup_func; +} CRYPTO_EX_DATA_FUNCS; + +DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS) + +/* + * Per class, we have a STACK of CRYPTO_EX_DATA_FUNCS for each CRYPTO_EX_DATA + * entry. + */ + +# define CRYPTO_EX_INDEX_BIO 0 +# define CRYPTO_EX_INDEX_SSL 1 +# define CRYPTO_EX_INDEX_SSL_CTX 2 +# define CRYPTO_EX_INDEX_SSL_SESSION 3 +# define CRYPTO_EX_INDEX_X509_STORE 4 +# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 +# define CRYPTO_EX_INDEX_RSA 6 +# define CRYPTO_EX_INDEX_DSA 7 +# define CRYPTO_EX_INDEX_DH 8 +# define CRYPTO_EX_INDEX_ENGINE 9 +# define CRYPTO_EX_INDEX_X509 10 +# define CRYPTO_EX_INDEX_UI 11 +# define CRYPTO_EX_INDEX_ECDSA 12 +# define CRYPTO_EX_INDEX_ECDH 13 +# define CRYPTO_EX_INDEX_COMP 14 +# define CRYPTO_EX_INDEX_STORE 15 + +/* + * Dynamically assigned indexes start from this value (don't use directly, + * use via CRYPTO_ex_data_new_class). + */ +# define CRYPTO_EX_INDEX_USER 100 + +/* + * 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 CRYPTO_malloc_init() CRYPTO_set_mem_functions(\ + malloc, realloc, free) + +# if defined CRYPTO_MDEBUG_ALL || defined CRYPTO_MDEBUG_TIME || defined CRYPTO_MDEBUG_THREAD +# ifndef CRYPTO_MDEBUG /* avoid duplicate #define */ +# define CRYPTO_MDEBUG +# endif +# endif + +/* + * Set standard debugging functions (not done by default unless CRYPTO_MDEBUG + * is defined) + */ +# define CRYPTO_malloc_debug_init() do {\ + CRYPTO_set_mem_debug_functions(\ + CRYPTO_dbg_malloc,\ + CRYPTO_dbg_realloc,\ + CRYPTO_dbg_free,\ + CRYPTO_dbg_set_options,\ + CRYPTO_dbg_get_options);\ + } while(0) + +int CRYPTO_mem_ctrl(int mode); +int CRYPTO_is_mem_check_on(void); + +/* for applications */ +# define MemCheck_start() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON) +# define MemCheck_stop() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF) + +/* for library-internal use */ +# define MemCheck_on() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE) +# define MemCheck_off() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE) +# define is_MemCheck_on() CRYPTO_is_mem_check_on() + +# define OPENSSL_malloc(num) CRYPTO_malloc((int)num,__FILE__,__LINE__) +# define OPENSSL_strdup(str) CRYPTO_strdup((str),__FILE__,__LINE__) +# define OPENSSL_realloc(addr,num) \ + CRYPTO_realloc((char *)addr,(int)num,__FILE__,__LINE__) +# define OPENSSL_realloc_clean(addr,old_num,num) \ + CRYPTO_realloc_clean(addr,old_num,num,__FILE__,__LINE__) +# define OPENSSL_remalloc(addr,num) \ + CRYPTO_remalloc((char **)addr,(int)num,__FILE__,__LINE__) +# define OPENSSL_freeFunc CRYPTO_free +# define OPENSSL_free(addr) CRYPTO_free(addr) + +# define OPENSSL_malloc_locked(num) \ + CRYPTO_malloc_locked((int)num,__FILE__,__LINE__) +# define OPENSSL_free_locked(addr) CRYPTO_free_locked(addr) + +const char *SSLeay_version(int type); +unsigned long SSLeay(void); + +int OPENSSL_issetugid(void); + +/* An opaque type representing an implementation of "ex_data" support */ +typedef struct st_CRYPTO_EX_DATA_IMPL CRYPTO_EX_DATA_IMPL; +/* Return an opaque pointer to the current "ex_data" implementation */ +const CRYPTO_EX_DATA_IMPL *CRYPTO_get_ex_data_implementation(void); +/* Sets the "ex_data" implementation to be used (if it's not too late) */ +int CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i); +/* Get a new "ex_data" class, and return the corresponding "class_index" */ +int CRYPTO_ex_data_new_class(void); +/* Within a given class, get/register a new index */ +int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, + CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +/* + * Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a + * given class (invokes whatever per-class callbacks are applicable) + */ +int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, + CRYPTO_EX_DATA *from); +void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +/* + * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular + * index (relative to the class type involved) + */ +int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); +void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); +/* + * This function cleans up all "ex_data" state. It mustn't be called under + * potential race-conditions. + */ +void CRYPTO_cleanup_all_ex_data(void); + +int CRYPTO_get_new_lockid(char *name); + +int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */ +void CRYPTO_lock(int mode, int type, const char *file, int line); +void CRYPTO_set_locking_callback(void (*func) (int mode, int type, + const char *file, int line)); +void (*CRYPTO_get_locking_callback(void)) (int mode, int type, + const char *file, int line); +void CRYPTO_set_add_lock_callback(int (*func) + (int *num, int mount, int type, + const char *file, int line)); +int (*CRYPTO_get_add_lock_callback(void)) (int *num, int mount, int type, + const char *file, int line); + +/* Don't use this structure directly. */ +typedef struct crypto_threadid_st { + void *ptr; + unsigned long val; +} CRYPTO_THREADID; +/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ +void CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val); +void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr); +int CRYPTO_THREADID_set_callback(void (*threadid_func) (CRYPTO_THREADID *)); +void (*CRYPTO_THREADID_get_callback(void)) (CRYPTO_THREADID *); +void CRYPTO_THREADID_current(CRYPTO_THREADID *id); +int CRYPTO_THREADID_cmp(const CRYPTO_THREADID *a, const CRYPTO_THREADID *b); +void CRYPTO_THREADID_cpy(CRYPTO_THREADID *dest, const CRYPTO_THREADID *src); +unsigned long CRYPTO_THREADID_hash(const CRYPTO_THREADID *id); +# ifndef OPENSSL_NO_DEPRECATED +void CRYPTO_set_id_callback(unsigned long (*func) (void)); +unsigned long (*CRYPTO_get_id_callback(void)) (void); +unsigned long CRYPTO_thread_id(void); +# endif + +const char *CRYPTO_get_lock_name(int type); +int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file, + int line); + +int CRYPTO_get_new_dynlockid(void); +void CRYPTO_destroy_dynlockid(int i); +struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i); +void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value + *(*dyn_create_function) (const char + *file, + int line)); +void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function) + (int mode, + struct CRYPTO_dynlock_value *l, + const char *file, int line)); +void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function) + (struct CRYPTO_dynlock_value *l, + const char *file, int line)); +struct CRYPTO_dynlock_value +*(*CRYPTO_get_dynlock_create_callback(void)) (const char *file, int line); +void (*CRYPTO_get_dynlock_lock_callback(void)) (int mode, + struct CRYPTO_dynlock_value + *l, const char *file, + int line); +void (*CRYPTO_get_dynlock_destroy_callback(void)) (struct CRYPTO_dynlock_value + *l, const char *file, + int line); + +/* + * CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions -- call + * the latter last if you need different functions + */ +int CRYPTO_set_mem_functions(void *(*m) (size_t), void *(*r) (void *, size_t), + void (*f) (void *)); +int CRYPTO_set_locked_mem_functions(void *(*m) (size_t), + void (*free_func) (void *)); +int CRYPTO_set_mem_ex_functions(void *(*m) (size_t, const char *, int), + void *(*r) (void *, size_t, const char *, + int), void (*f) (void *)); +int CRYPTO_set_locked_mem_ex_functions(void *(*m) (size_t, const char *, int), + void (*free_func) (void *)); +int CRYPTO_set_mem_debug_functions(void (*m) + (void *, int, const char *, int, int), + void (*r) (void *, void *, int, + const char *, int, int), + void (*f) (void *, int), void (*so) (long), + long (*go) (void)); +void CRYPTO_get_mem_functions(void *(**m) (size_t), + void *(**r) (void *, size_t), + void (**f) (void *)); +void CRYPTO_get_locked_mem_functions(void *(**m) (size_t), + void (**f) (void *)); +void CRYPTO_get_mem_ex_functions(void *(**m) (size_t, const char *, int), + void *(**r) (void *, size_t, const char *, + int), void (**f) (void *)); +void CRYPTO_get_locked_mem_ex_functions(void + *(**m) (size_t, const char *, int), + void (**f) (void *)); +void CRYPTO_get_mem_debug_functions(void (**m) + (void *, int, const char *, int, int), + void (**r) (void *, void *, int, + const char *, int, int), + void (**f) (void *, int), + void (**so) (long), long (**go) (void)); + +void *CRYPTO_malloc_locked(int num, const char *file, int line); +void CRYPTO_free_locked(void *ptr); +void *CRYPTO_malloc(int num, const char *file, int line); +char *CRYPTO_strdup(const char *str, const char *file, int line); +void CRYPTO_free(void *ptr); +void *CRYPTO_realloc(void *addr, int num, const char *file, int line); +void *CRYPTO_realloc_clean(void *addr, int old_num, int num, const char *file, + int line); +void *CRYPTO_remalloc(void *addr, int num, const char *file, int line); + +void OPENSSL_cleanse(void *ptr, size_t len); + +void CRYPTO_set_mem_debug_options(long bits); +long CRYPTO_get_mem_debug_options(void); + +# define CRYPTO_push_info(info) \ + CRYPTO_push_info_(info, __FILE__, __LINE__); +int CRYPTO_push_info_(const char *info, const char *file, int line); +int CRYPTO_pop_info(void); +int CRYPTO_remove_all_info(void); + +/* + * Default debugging functions (enabled by CRYPTO_malloc_debug_init() macro; + * used as default in CRYPTO_MDEBUG compilations): + */ +/*- + * The last argument has the following significance: + * + * 0: called before the actual memory allocation has taken place + * 1: called after the actual memory allocation has taken place + */ +void CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line, + int before_p); +void CRYPTO_dbg_realloc(void *addr1, void *addr2, int num, const char *file, + int line, int before_p); +void CRYPTO_dbg_free(void *addr, int before_p); +/*- + * Tell the debugging code about options. By default, the following values + * apply: + * + * 0: Clear all options. + * V_CRYPTO_MDEBUG_TIME (1): Set the "Show Time" option. + * V_CRYPTO_MDEBUG_THREAD (2): Set the "Show Thread Number" option. + * V_CRYPTO_MDEBUG_ALL (3): 1 + 2 + */ +void CRYPTO_dbg_set_options(long bits); +long CRYPTO_dbg_get_options(void); + +# ifndef OPENSSL_NO_FP_API +void CRYPTO_mem_leaks_fp(FILE *); +# endif +void CRYPTO_mem_leaks(struct bio_st *bio); +/* unsigned long order, char *file, int line, int num_bytes, char *addr */ +typedef void *CRYPTO_MEM_LEAK_CB (unsigned long, const char *, int, int, + void *); +void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb); + +/* die if we have to */ +void OpenSSLDie(const char *file, int line, const char *assertion); +# define OPENSSL_assert(e) (void)((e) ? 0 : (OpenSSLDie(__FILE__, __LINE__, #e),1)) + +unsigned long *OPENSSL_ia32cap_loc(void); +# define OPENSSL_ia32cap (*(OPENSSL_ia32cap_loc())) +int OPENSSL_isservice(void); + +int FIPS_mode(void); +int FIPS_mode_set(int r); + +void OPENSSL_init(void); + +# define fips_md_init(alg) fips_md_init_ctx(alg, alg) + +# ifdef OPENSSL_FIPS +# define fips_md_init_ctx(alg, cx) \ + int alg##_Init(cx##_CTX *c) \ + { \ + if (FIPS_mode()) OpenSSLDie(__FILE__, __LINE__, \ + "Low level API call to digest " #alg " forbidden in FIPS mode!"); \ + return private_##alg##_Init(c); \ + } \ + int private_##alg##_Init(cx##_CTX *c) + +# define fips_cipher_abort(alg) \ + if (FIPS_mode()) OpenSSLDie(__FILE__, __LINE__, \ + "Low level API call to cipher " #alg " forbidden in FIPS mode!") + +# else +# define fips_md_init_ctx(alg, cx) \ + int alg##_Init(cx##_CTX *c) +# define fips_cipher_abort(alg) while(0) +# endif + +/* + * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. + * It takes an amount of time dependent on |len|, but independent of the + * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements + * into a defined order as the return value when a != b is undefined, other + * than to be non-zero. + */ +int CRYPTO_memcmp(const void *a, const void *b, size_t len); + +/* 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. + */ +void ERR_load_CRYPTO_strings(void); + +/* Error codes for the CRYPTO functions. */ + +/* Function codes. */ +# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 +# define CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID 103 +# define CRYPTO_F_CRYPTO_GET_NEW_LOCKID 101 +# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 +# define CRYPTO_F_DEF_ADD_INDEX 104 +# define CRYPTO_F_DEF_GET_CLASS 105 +# define CRYPTO_F_FIPS_MODE_SET 109 +# define CRYPTO_F_INT_DUP_EX_DATA 106 +# define CRYPTO_F_INT_FREE_EX_DATA 107 +# define CRYPTO_F_INT_NEW_EX_DATA 108 + +/* Reason codes. */ +# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 +# define CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK 100 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/des.h b/Sources/OpenSSL/include/openssl/des.h new file mode 100644 index 0000000000..7e91d13cfe --- /dev/null +++ b/Sources/OpenSSL/include/openssl/des.h @@ -0,0 +1,257 @@ +/* crypto/des/des.h */ +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_NEW_DES_H +# define HEADER_NEW_DES_H + +# include "e_os2.h" /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG + * (via openssl/opensslconf.h */ + +# ifdef OPENSSL_NO_DES +# error DES is disabled. +# endif + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef unsigned char DES_cblock[8]; +typedef /* const */ unsigned char const_DES_cblock[8]; +/* + * With "const", gcc 2.8.1 on Solaris thinks that DES_cblock * and + * const_DES_cblock * are incompatible pointer types. + */ + +typedef struct DES_ks { + union { + DES_cblock cblock; + /* + * make sure things are correct size on machines with 8 byte longs + */ + DES_LONG deslong[2]; + } ks[16]; +} DES_key_schedule; + +# ifndef OPENSSL_DISABLE_OLD_DES_SUPPORT +# ifndef OPENSSL_ENABLE_OLD_DES_SUPPORT +# define OPENSSL_ENABLE_OLD_DES_SUPPORT +# endif +# endif + +# ifdef OPENSSL_ENABLE_OLD_DES_SUPPORT +# include "des_old.h" +# endif + +# define DES_KEY_SZ (sizeof(DES_cblock)) +# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) + +# define DES_ENCRYPT 1 +# define DES_DECRYPT 0 + +# define DES_CBC_MODE 0 +# define DES_PCBC_MODE 1 + +# define DES_ecb2_encrypt(i,o,k1,k2,e) \ + DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) + +# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ + DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) + +# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ + DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) + +# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ + DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) + +OPENSSL_DECLARE_GLOBAL(int, DES_check_key); /* defaults to false */ +# define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key) +OPENSSL_DECLARE_GLOBAL(int, DES_rw_mode); /* defaults to DES_PCBC_MODE */ +# define DES_rw_mode OPENSSL_GLOBAL_REF(DES_rw_mode) + +const char *DES_options(void); +void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, + DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3, int enc); +DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, + long length, DES_key_schedule *schedule, + const_DES_cblock *ivec); +/* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */ +void DES_cbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, const_DES_cblock *inw, + const_DES_cblock *outw, int enc); +void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, + DES_key_schedule *ks, int enc); + +/* + * This is the DES encryption function that gets called by just about every + * other DES routine in the library. You should not use this function except + * to implement 'modes' of DES. I say this because the functions that call + * this routine do the conversion from 'char *' to long, and this needs to be + * done to make sure 'non-aligned' memory access do not occur. The + * characters are loaded 'little endian'. Data is a pointer to 2 unsigned + * long's and ks is the DES_key_schedule to use. enc, is non zero specifies + * encryption, zero if decryption. + */ +void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); + +/* + * This functions is the same as DES_encrypt1() except that the DES initial + * permutation (IP) and final permutation (FP) have been left out. As for + * DES_encrypt1(), you should not use this function. It is used by the + * routines in the library that implement triple DES. IP() DES_encrypt2() + * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1() + * DES_encrypt1() DES_encrypt1() except faster :-). + */ +void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc); + +void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3); +void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3); +void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, + long length, + DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3, DES_cblock *ivec, int enc); +void DES_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out, + long length, + DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3, + DES_cblock *ivec1, DES_cblock *ivec2, int enc); +void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int *num, int enc); +void DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out, + int numbits, long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int enc); +void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int *num); +# if 0 +void DES_xwhite_in2out(const_DES_cblock *DES_key, const_DES_cblock *in_white, + DES_cblock *out_white); +# endif + +int DES_enc_read(int fd, void *buf, int len, DES_key_schedule *sched, + DES_cblock *iv); +int DES_enc_write(int fd, const void *buf, int len, DES_key_schedule *sched, + DES_cblock *iv); +char *DES_fcrypt(const char *buf, const char *salt, char *ret); +char *DES_crypt(const char *buf, const char *salt); +void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, + long length, DES_key_schedule *schedule, + DES_cblock *ivec); +void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], + long length, int out_count, DES_cblock *seed); +int DES_random_key(DES_cblock *ret); +void DES_set_odd_parity(DES_cblock *key); +int DES_check_key_parity(const_DES_cblock *key); +int DES_is_weak_key(const_DES_cblock *key); +/* + * DES_set_key (= set_key = DES_key_sched = key_sched) calls + * DES_set_key_checked if global variable DES_check_key is set, + * DES_set_key_unchecked otherwise. + */ +int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); +int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); +int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); +void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); +# ifdef OPENSSL_FIPS +void private_DES_set_key_unchecked(const_DES_cblock *key, + DES_key_schedule *schedule); +# endif +void DES_string_to_key(const char *str, DES_cblock *key); +void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); +void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int *num, int enc); +void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int *num); + +int DES_read_password(DES_cblock *key, const char *prompt, int verify); +int DES_read_2passwords(DES_cblock *key1, DES_cblock *key2, + const char *prompt, int verify); + +# define DES_fixup_key_parity DES_set_odd_parity + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/des_old.h b/Sources/OpenSSL/include/openssl/des_old.h new file mode 100644 index 0000000000..b6863bca2e --- /dev/null +++ b/Sources/OpenSSL/include/openssl/des_old.h @@ -0,0 +1,497 @@ +/* crypto/des/des_old.h -*- mode:C; c-file-style: "eay" -*- */ + +/*- + * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING + * + * The function names in here are deprecated and are only present to + * provide an interface compatible with openssl 0.9.6 and older as + * well as libdes. OpenSSL now provides functions where "des_" has + * been replaced with "DES_" in the names, to make it possible to + * make incompatible changes that are needed for C type security and + * other stuff. + * + * This include files has two compatibility modes: + * + * - If OPENSSL_DES_LIBDES_COMPATIBILITY is defined, you get an API + * that is compatible with libdes and SSLeay. + * - If OPENSSL_DES_LIBDES_COMPATIBILITY isn't defined, you get an + * API that is compatible with OpenSSL 0.9.5x to 0.9.6x. + * + * Note that these modes break earlier snapshots of OpenSSL, where + * libdes compatibility was the only available mode or (later on) the + * prefered compatibility mode. However, after much consideration + * (and more or less violent discussions with external parties), it + * was concluded that OpenSSL should be compatible with earlier versions + * of itself before anything else. Also, in all honesty, libdes is + * an old beast that shouldn't really be used any more. + * + * Please consider starting to use the DES_ functions rather than the + * des_ ones. The des_ functions will disappear completely before + * OpenSSL 1.0! + * + * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING + */ + +/* + * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project + * 2001. + */ +/* ==================================================================== + * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_DES_H +# define HEADER_DES_H + +# include "e_os2.h" /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG */ + +# ifdef OPENSSL_NO_DES +# error DES is disabled. +# endif + +# ifndef HEADER_NEW_DES_H +# error You must include des.h, not des_old.h directly. +# endif + +# ifdef _KERBEROS_DES_H +# error "des_old.h" replaces . +# endif + +# include "symhacks.h" + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef _ +# undef _ +# endif + +typedef unsigned char _ossl_old_des_cblock[8]; +typedef struct _ossl_old_des_ks_struct { + union { + _ossl_old_des_cblock _; + /* + * make sure things are correct size on machines with 8 byte longs + */ + DES_LONG pad[2]; + } ks; +} _ossl_old_des_key_schedule[16]; + +# ifndef OPENSSL_DES_LIBDES_COMPATIBILITY +# define des_cblock DES_cblock +# define const_des_cblock const_DES_cblock +# define des_key_schedule DES_key_schedule +# define des_ecb3_encrypt(i,o,k1,k2,k3,e)\ + DES_ecb3_encrypt((i),(o),&(k1),&(k2),&(k3),(e)) +# define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\ + DES_ede3_cbc_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(e)) +# define des_ede3_cbcm_encrypt(i,o,l,k1,k2,k3,iv1,iv2,e)\ + DES_ede3_cbcm_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv1),(iv2),(e)) +# define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\ + DES_ede3_cfb64_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(n),(e)) +# define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\ + DES_ede3_ofb64_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(n)) +# define des_options()\ + DES_options() +# define des_cbc_cksum(i,o,l,k,iv)\ + DES_cbc_cksum((i),(o),(l),&(k),(iv)) +# define des_cbc_encrypt(i,o,l,k,iv,e)\ + DES_cbc_encrypt((i),(o),(l),&(k),(iv),(e)) +# define des_ncbc_encrypt(i,o,l,k,iv,e)\ + DES_ncbc_encrypt((i),(o),(l),&(k),(iv),(e)) +# define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\ + DES_xcbc_encrypt((i),(o),(l),&(k),(iv),(inw),(outw),(e)) +# define des_cfb_encrypt(i,o,n,l,k,iv,e)\ + DES_cfb_encrypt((i),(o),(n),(l),&(k),(iv),(e)) +# define des_ecb_encrypt(i,o,k,e)\ + DES_ecb_encrypt((i),(o),&(k),(e)) +# define des_encrypt1(d,k,e)\ + DES_encrypt1((d),&(k),(e)) +# define des_encrypt2(d,k,e)\ + DES_encrypt2((d),&(k),(e)) +# define des_encrypt3(d,k1,k2,k3)\ + DES_encrypt3((d),&(k1),&(k2),&(k3)) +# define des_decrypt3(d,k1,k2,k3)\ + DES_decrypt3((d),&(k1),&(k2),&(k3)) +# define des_xwhite_in2out(k,i,o)\ + DES_xwhite_in2out((k),(i),(o)) +# define des_enc_read(f,b,l,k,iv)\ + DES_enc_read((f),(b),(l),&(k),(iv)) +# define des_enc_write(f,b,l,k,iv)\ + DES_enc_write((f),(b),(l),&(k),(iv)) +# define des_fcrypt(b,s,r)\ + DES_fcrypt((b),(s),(r)) +# if 0 +# define des_crypt(b,s)\ + DES_crypt((b),(s)) +# if !defined(PERL5) && !defined(__FreeBSD__) && !defined(NeXT) && !defined(__OpenBSD__) +# define crypt(b,s)\ + DES_crypt((b),(s)) +# endif +# endif +# define des_ofb_encrypt(i,o,n,l,k,iv)\ + DES_ofb_encrypt((i),(o),(n),(l),&(k),(iv)) +# define des_pcbc_encrypt(i,o,l,k,iv,e)\ + DES_pcbc_encrypt((i),(o),(l),&(k),(iv),(e)) +# define des_quad_cksum(i,o,l,c,s)\ + DES_quad_cksum((i),(o),(l),(c),(s)) +# define des_random_seed(k)\ + _ossl_096_des_random_seed((k)) +# define des_random_key(r)\ + DES_random_key((r)) +# define des_read_password(k,p,v) \ + DES_read_password((k),(p),(v)) +# define des_read_2passwords(k1,k2,p,v) \ + DES_read_2passwords((k1),(k2),(p),(v)) +# define des_set_odd_parity(k)\ + DES_set_odd_parity((k)) +# define des_check_key_parity(k)\ + DES_check_key_parity((k)) +# define des_is_weak_key(k)\ + DES_is_weak_key((k)) +# define des_set_key(k,ks)\ + DES_set_key((k),&(ks)) +# define des_key_sched(k,ks)\ + DES_key_sched((k),&(ks)) +# define des_set_key_checked(k,ks)\ + DES_set_key_checked((k),&(ks)) +# define des_set_key_unchecked(k,ks)\ + DES_set_key_unchecked((k),&(ks)) +# define des_string_to_key(s,k)\ + DES_string_to_key((s),(k)) +# define des_string_to_2keys(s,k1,k2)\ + DES_string_to_2keys((s),(k1),(k2)) +# define des_cfb64_encrypt(i,o,l,ks,iv,n,e)\ + DES_cfb64_encrypt((i),(o),(l),&(ks),(iv),(n),(e)) +# define des_ofb64_encrypt(i,o,l,ks,iv,n)\ + DES_ofb64_encrypt((i),(o),(l),&(ks),(iv),(n)) + +# define des_ecb2_encrypt(i,o,k1,k2,e) \ + des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) + +# define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ + des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) + +# define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ + des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) + +# define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ + des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) + +# define des_check_key DES_check_key +# define des_rw_mode DES_rw_mode +# else /* libdes compatibility */ +/* + * Map all symbol names to _ossl_old_des_* form, so we avoid all clashes with + * libdes + */ +# define des_cblock _ossl_old_des_cblock +# define des_key_schedule _ossl_old_des_key_schedule +# define des_ecb3_encrypt(i,o,k1,k2,k3,e)\ + _ossl_old_des_ecb3_encrypt((i),(o),(k1),(k2),(k3),(e)) +# define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\ + _ossl_old_des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(e)) +# define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\ + _ossl_old_des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n),(e)) +# define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\ + _ossl_old_des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n)) +# define des_options()\ + _ossl_old_des_options() +# define des_cbc_cksum(i,o,l,k,iv)\ + _ossl_old_des_cbc_cksum((i),(o),(l),(k),(iv)) +# define des_cbc_encrypt(i,o,l,k,iv,e)\ + _ossl_old_des_cbc_encrypt((i),(o),(l),(k),(iv),(e)) +# define des_ncbc_encrypt(i,o,l,k,iv,e)\ + _ossl_old_des_ncbc_encrypt((i),(o),(l),(k),(iv),(e)) +# define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\ + _ossl_old_des_xcbc_encrypt((i),(o),(l),(k),(iv),(inw),(outw),(e)) +# define des_cfb_encrypt(i,o,n,l,k,iv,e)\ + _ossl_old_des_cfb_encrypt((i),(o),(n),(l),(k),(iv),(e)) +# define des_ecb_encrypt(i,o,k,e)\ + _ossl_old_des_ecb_encrypt((i),(o),(k),(e)) +# define des_encrypt(d,k,e)\ + _ossl_old_des_encrypt((d),(k),(e)) +# define des_encrypt2(d,k,e)\ + _ossl_old_des_encrypt2((d),(k),(e)) +# define des_encrypt3(d,k1,k2,k3)\ + _ossl_old_des_encrypt3((d),(k1),(k2),(k3)) +# define des_decrypt3(d,k1,k2,k3)\ + _ossl_old_des_decrypt3((d),(k1),(k2),(k3)) +# define des_xwhite_in2out(k,i,o)\ + _ossl_old_des_xwhite_in2out((k),(i),(o)) +# define des_enc_read(f,b,l,k,iv)\ + _ossl_old_des_enc_read((f),(b),(l),(k),(iv)) +# define des_enc_write(f,b,l,k,iv)\ + _ossl_old_des_enc_write((f),(b),(l),(k),(iv)) +# define des_fcrypt(b,s,r)\ + _ossl_old_des_fcrypt((b),(s),(r)) +# define des_crypt(b,s)\ + _ossl_old_des_crypt((b),(s)) +# if 0 +# define crypt(b,s)\ + _ossl_old_crypt((b),(s)) +# endif +# define des_ofb_encrypt(i,o,n,l,k,iv)\ + _ossl_old_des_ofb_encrypt((i),(o),(n),(l),(k),(iv)) +# define des_pcbc_encrypt(i,o,l,k,iv,e)\ + _ossl_old_des_pcbc_encrypt((i),(o),(l),(k),(iv),(e)) +# define des_quad_cksum(i,o,l,c,s)\ + _ossl_old_des_quad_cksum((i),(o),(l),(c),(s)) +# define des_random_seed(k)\ + _ossl_old_des_random_seed((k)) +# define des_random_key(r)\ + _ossl_old_des_random_key((r)) +# define des_read_password(k,p,v) \ + _ossl_old_des_read_password((k),(p),(v)) +# define des_read_2passwords(k1,k2,p,v) \ + _ossl_old_des_read_2passwords((k1),(k2),(p),(v)) +# define des_set_odd_parity(k)\ + _ossl_old_des_set_odd_parity((k)) +# define des_is_weak_key(k)\ + _ossl_old_des_is_weak_key((k)) +# define des_set_key(k,ks)\ + _ossl_old_des_set_key((k),(ks)) +# define des_key_sched(k,ks)\ + _ossl_old_des_key_sched((k),(ks)) +# define des_string_to_key(s,k)\ + _ossl_old_des_string_to_key((s),(k)) +# define des_string_to_2keys(s,k1,k2)\ + _ossl_old_des_string_to_2keys((s),(k1),(k2)) +# define des_cfb64_encrypt(i,o,l,ks,iv,n,e)\ + _ossl_old_des_cfb64_encrypt((i),(o),(l),(ks),(iv),(n),(e)) +# define des_ofb64_encrypt(i,o,l,ks,iv,n)\ + _ossl_old_des_ofb64_encrypt((i),(o),(l),(ks),(iv),(n)) + +# define des_ecb2_encrypt(i,o,k1,k2,e) \ + des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) + +# define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ + des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) + +# define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ + des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) + +# define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ + des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) + +# define des_check_key DES_check_key +# define des_rw_mode DES_rw_mode +# endif + +const char *_ossl_old_des_options(void); +void _ossl_old_des_ecb3_encrypt(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, + _ossl_old_des_key_schedule ks1, + _ossl_old_des_key_schedule ks2, + _ossl_old_des_key_schedule ks3, int enc); +DES_LONG _ossl_old_des_cbc_cksum(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec); +void _ossl_old_des_cbc_encrypt(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec, int enc); +void _ossl_old_des_ncbc_encrypt(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec, int enc); +void _ossl_old_des_xcbc_encrypt(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec, + _ossl_old_des_cblock *inw, + _ossl_old_des_cblock *outw, int enc); +void _ossl_old_des_cfb_encrypt(unsigned char *in, unsigned char *out, + int numbits, long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec, int enc); +void _ossl_old_des_ecb_encrypt(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, + _ossl_old_des_key_schedule ks, int enc); +void _ossl_old_des_encrypt(DES_LONG *data, _ossl_old_des_key_schedule ks, + int enc); +void _ossl_old_des_encrypt2(DES_LONG *data, _ossl_old_des_key_schedule ks, + int enc); +void _ossl_old_des_encrypt3(DES_LONG *data, _ossl_old_des_key_schedule ks1, + _ossl_old_des_key_schedule ks2, + _ossl_old_des_key_schedule ks3); +void _ossl_old_des_decrypt3(DES_LONG *data, _ossl_old_des_key_schedule ks1, + _ossl_old_des_key_schedule ks2, + _ossl_old_des_key_schedule ks3); +void _ossl_old_des_ede3_cbc_encrypt(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, long length, + _ossl_old_des_key_schedule ks1, + _ossl_old_des_key_schedule ks2, + _ossl_old_des_key_schedule ks3, + _ossl_old_des_cblock *ivec, int enc); +void _ossl_old_des_ede3_cfb64_encrypt(unsigned char *in, unsigned char *out, + long length, + _ossl_old_des_key_schedule ks1, + _ossl_old_des_key_schedule ks2, + _ossl_old_des_key_schedule ks3, + _ossl_old_des_cblock *ivec, int *num, + int enc); +void _ossl_old_des_ede3_ofb64_encrypt(unsigned char *in, unsigned char *out, + long length, + _ossl_old_des_key_schedule ks1, + _ossl_old_des_key_schedule ks2, + _ossl_old_des_key_schedule ks3, + _ossl_old_des_cblock *ivec, int *num); +# if 0 +void _ossl_old_des_xwhite_in2out(_ossl_old_des_cblock (*des_key), + _ossl_old_des_cblock (*in_white), + _ossl_old_des_cblock (*out_white)); +# endif + +int _ossl_old_des_enc_read(int fd, char *buf, int len, + _ossl_old_des_key_schedule sched, + _ossl_old_des_cblock *iv); +int _ossl_old_des_enc_write(int fd, char *buf, int len, + _ossl_old_des_key_schedule sched, + _ossl_old_des_cblock *iv); +char *_ossl_old_des_fcrypt(const char *buf, const char *salt, char *ret); +char *_ossl_old_des_crypt(const char *buf, const char *salt); +# if !defined(PERL5) && !defined(NeXT) +char *_ossl_old_crypt(const char *buf, const char *salt); +# endif +void _ossl_old_des_ofb_encrypt(unsigned char *in, unsigned char *out, + int numbits, long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec); +void _ossl_old_des_pcbc_encrypt(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec, int enc); +DES_LONG _ossl_old_des_quad_cksum(_ossl_old_des_cblock *input, + _ossl_old_des_cblock *output, long length, + int out_count, _ossl_old_des_cblock *seed); +void _ossl_old_des_random_seed(_ossl_old_des_cblock key); +void _ossl_old_des_random_key(_ossl_old_des_cblock ret); +int _ossl_old_des_read_password(_ossl_old_des_cblock *key, const char *prompt, + int verify); +int _ossl_old_des_read_2passwords(_ossl_old_des_cblock *key1, + _ossl_old_des_cblock *key2, + const char *prompt, int verify); +void _ossl_old_des_set_odd_parity(_ossl_old_des_cblock *key); +int _ossl_old_des_is_weak_key(_ossl_old_des_cblock *key); +int _ossl_old_des_set_key(_ossl_old_des_cblock *key, + _ossl_old_des_key_schedule schedule); +int _ossl_old_des_key_sched(_ossl_old_des_cblock *key, + _ossl_old_des_key_schedule schedule); +void _ossl_old_des_string_to_key(char *str, _ossl_old_des_cblock *key); +void _ossl_old_des_string_to_2keys(char *str, _ossl_old_des_cblock *key1, + _ossl_old_des_cblock *key2); +void _ossl_old_des_cfb64_encrypt(unsigned char *in, unsigned char *out, + long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec, int *num, + int enc); +void _ossl_old_des_ofb64_encrypt(unsigned char *in, unsigned char *out, + long length, + _ossl_old_des_key_schedule schedule, + _ossl_old_des_cblock *ivec, int *num); + +void _ossl_096_des_random_seed(des_cblock *key); + +/* + * The following definitions provide compatibility with the MIT Kerberos + * library. The _ossl_old_des_key_schedule structure is not binary + * compatible. + */ + +# define _KERBEROS_DES_H + +# define KRBDES_ENCRYPT DES_ENCRYPT +# define KRBDES_DECRYPT DES_DECRYPT + +# ifdef KERBEROS +# define ENCRYPT DES_ENCRYPT +# define DECRYPT DES_DECRYPT +# endif + +# ifndef NCOMPAT +# define C_Block des_cblock +# define Key_schedule des_key_schedule +# define KEY_SZ DES_KEY_SZ +# define string_to_key des_string_to_key +# define read_pw_string des_read_pw_string +# define random_key des_random_key +# define pcbc_encrypt des_pcbc_encrypt +# define set_key des_set_key +# define key_sched des_key_sched +# define ecb_encrypt des_ecb_encrypt +# define cbc_encrypt des_cbc_encrypt +# define ncbc_encrypt des_ncbc_encrypt +# define xcbc_encrypt des_xcbc_encrypt +# define cbc_cksum des_cbc_cksum +# define quad_cksum des_quad_cksum +# define check_parity des_check_key_parity +# endif + +# define des_fixup_key_parity DES_fixup_key_parity + +#ifdef __cplusplus +} +#endif + +/* for DES_read_pw_string et al */ +# include "ui_compat.h" + +#endif diff --git a/Sources/OpenSSL/include/openssl/dh.h b/Sources/OpenSSL/include/openssl/dh.h new file mode 100644 index 0000000000..04c13e8410 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/dh.h @@ -0,0 +1,392 @@ +/* crypto/dh/dh.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_DH_H +# define HEADER_DH_H + +# include "e_os2.h" + +# ifdef OPENSSL_NO_DH +# error DH is disabled. +# endif + +# ifndef OPENSSL_NO_BIO +# include "bio.h" +# endif +# include "ossl_typ.h" +# ifndef OPENSSL_NO_DEPRECATED +# include "bn.h" +# endif + +# ifndef OPENSSL_DH_MAX_MODULUS_BITS +# define OPENSSL_DH_MAX_MODULUS_BITS 10000 +# endif + +# define DH_FLAG_CACHE_MONT_P 0x01 + +/* + * new with 0.9.7h; the built-in DH + * implementation now uses constant time + * modular exponentiation for secret exponents + * by default. This flag causes the + * faster variable sliding window method to + * be used for all exponents. + */ +# define DH_FLAG_NO_EXP_CONSTTIME 0x02 + +/* + * If this flag is set the DH method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its reposibility to ensure the + * result is compliant. + */ + +# define DH_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define DH_FLAG_NON_FIPS_ALLOW 0x0400 + +#ifdef __cplusplus +extern "C" { +#endif + +/* Already defined in ossl_typ.h */ +/* typedef struct dh_st DH; */ +/* typedef struct dh_method DH_METHOD; */ + +struct dh_method { + const char *name; + /* Methods here */ + int (*generate_key) (DH *dh); + int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh); + /* Can be null */ + int (*bn_mod_exp) (const DH *dh, BIGNUM *r, const BIGNUM *a, + const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, + BN_MONT_CTX *m_ctx); + int (*init) (DH *dh); + int (*finish) (DH *dh); + int flags; + char *app_data; + /* If this is non-NULL, it will be used to generate parameters */ + int (*generate_params) (DH *dh, int prime_len, int generator, + BN_GENCB *cb); +}; + +struct dh_st { + /* + * This first argument is used to pick up errors when a DH is passed + * instead of a EVP_PKEY + */ + int pad; + int version; + BIGNUM *p; + BIGNUM *g; + long length; /* optional */ + BIGNUM *pub_key; /* g^x */ + BIGNUM *priv_key; /* x */ + int flags; + BN_MONT_CTX *method_mont_p; + /* Place holders if we want to do X9.42 DH */ + BIGNUM *q; + BIGNUM *j; + unsigned char *seed; + int seedlen; + BIGNUM *counter; + int references; + CRYPTO_EX_DATA ex_data; + const DH_METHOD *meth; + ENGINE *engine; +}; + +# define DH_GENERATOR_2 2 +/* #define DH_GENERATOR_3 3 */ +# define DH_GENERATOR_5 5 + +/* DH_check error codes */ +# define DH_CHECK_P_NOT_PRIME 0x01 +# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 +# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 +# define DH_NOT_SUITABLE_GENERATOR 0x08 +# define DH_CHECK_Q_NOT_PRIME 0x10 +# define DH_CHECK_INVALID_Q_VALUE 0x20 +# define DH_CHECK_INVALID_J_VALUE 0x40 + +/* DH_check_pub_key error codes */ +# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 +# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 + +/* + * primes p where (p-1)/2 is prime too are called "safe"; we define this for + * backward compatibility: + */ +# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME + +# define d2i_DHparams_fp(fp,x) (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHparams,(fp),(unsigned char **)(x)) +# define i2d_DHparams_fp(fp,x) ASN1_i2d_fp(i2d_DHparams,(fp), \ + (unsigned char *)(x)) +# define d2i_DHparams_bio(bp,x) ASN1_d2i_bio_of(DH,DH_new,d2i_DHparams,bp,x) +# define i2d_DHparams_bio(bp,x) ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) + +DH *DHparams_dup(DH *); + +const DH_METHOD *DH_OpenSSL(void); + +void DH_set_default_method(const DH_METHOD *meth); +const DH_METHOD *DH_get_default_method(void); +int DH_set_method(DH *dh, const DH_METHOD *meth); +DH *DH_new_method(ENGINE *engine); + +DH *DH_new(void); +void DH_free(DH *dh); +int DH_up_ref(DH *dh); +int DH_size(const DH *dh); +int DH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int DH_set_ex_data(DH *d, int idx, void *arg); +void *DH_get_ex_data(DH *d, int idx); + +/* Deprecated version */ +# ifndef OPENSSL_NO_DEPRECATED +DH *DH_generate_parameters(int prime_len, int generator, + void (*callback) (int, int, void *), void *cb_arg); +# endif /* !defined(OPENSSL_NO_DEPRECATED) */ + +/* New version */ +int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, + BN_GENCB *cb); + +int DH_check(const DH *dh, int *codes); +int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes); +int DH_generate_key(DH *dh); +int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); +int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh); +DH *d2i_DHparams(DH **a, const unsigned char **pp, long length); +int i2d_DHparams(const DH *a, unsigned char **pp); +DH *d2i_DHxparams(DH **a, const unsigned char **pp, long length); +int i2d_DHxparams(const DH *a, unsigned char **pp); +# ifndef OPENSSL_NO_FP_API +int DHparams_print_fp(FILE *fp, const DH *x); +# endif +# ifndef OPENSSL_NO_BIO +int DHparams_print(BIO *bp, const DH *x); +# else +int DHparams_print(char *bp, const DH *x); +# endif + +/* RFC 5114 parameters */ +DH *DH_get_1024_160(void); +DH *DH_get_2048_224(void); +DH *DH_get_2048_256(void); + +/* RFC2631 KDF */ +int DH_KDF_X9_42(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + ASN1_OBJECT *key_oid, + const unsigned char *ukm, size_t ukmlen, const EVP_MD *md); + +# define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL) + +# define EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN, len, NULL) + +# define EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_TYPE, typ, NULL) + +# define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL) + +# define EVP_PKEY_CTX_set_dh_rfc5114(ctx, gen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) + +# define EVP_PKEY_CTX_set_dhx_rfc5114(ctx, gen) \ + 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_kdf_type(ctx, kdf) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_TYPE, kdf, NULL) + +# define EVP_PKEY_CTX_get_dh_kdf_type(ctx) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_TYPE, -2, NULL) + +# 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) + +# 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) + +# 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) + +# 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) + +# define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_OUTLEN, len, NULL) + +# 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) + +# 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) + +# 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) + +# 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) +# define EVP_PKEY_CTRL_DH_RFC5114 (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_DH_PARAMGEN_TYPE (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_DH_KDF_TYPE (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_GET_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 8) +# define EVP_PKEY_CTRL_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 10) +# define EVP_PKEY_CTRL_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 11) +# 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) + +/* KDF types */ +# define EVP_PKEY_DH_KDF_NONE 1 +# define EVP_PKEY_DH_KDF_X9_42 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. + */ +void 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 117 +# define DH_F_DH_CMS_SET_PEERKEY 118 +# define DH_F_DH_CMS_SET_SHARED_INFO 119 +# define DH_F_DH_COMPUTE_KEY 114 +# define DH_F_DH_GENERATE_KEY 115 +# define DH_F_DH_GENERATE_PARAMETERS_EX 116 +# 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_GENERATE_PARAMETERS 104 +# 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_KEY_SIZE_TOO_SMALL 110 +# define DH_R_MODULUS_TOO_LARGE 103 +# define DH_R_NON_FIPS_METHOD 111 +# 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 113 +# define DH_R_SHARED_INFO_ERROR 114 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/dsa.h b/Sources/OpenSSL/include/openssl/dsa.h new file mode 100644 index 0000000000..599ebd327a --- /dev/null +++ b/Sources/OpenSSL/include/openssl/dsa.h @@ -0,0 +1,332 @@ +/* crypto/dsa/dsa.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +/* + * The DSS routines are based on patches supplied by + * Steven Schoch . He basically did the + * work and I have just tweaked them a little to fit into my + * stylistic vision for SSLeay :-) */ + +#ifndef HEADER_DSA_H +# define HEADER_DSA_H + +# include "e_os2.h" + +# ifdef OPENSSL_NO_DSA +# error DSA is disabled. +# endif + +# ifndef OPENSSL_NO_BIO +# include "bio.h" +# endif +# include "crypto.h" +# include "ossl_typ.h" + +# ifndef OPENSSL_NO_DEPRECATED +# include "bn.h" +# ifndef OPENSSL_NO_DH +# include "dh.h" +# endif +# endif + +# ifndef OPENSSL_DSA_MAX_MODULUS_BITS +# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 +# endif + +# define DSA_FLAG_CACHE_MONT_P 0x01 +/* + * new with 0.9.7h; the built-in DSA implementation now uses constant time + * modular exponentiation for secret exponents by default. This flag causes + * the faster variable sliding window method to be used for all exponents. + */ +# define DSA_FLAG_NO_EXP_CONSTTIME 0x02 + +/* + * If this flag is set the DSA method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its reposibility to ensure the + * result is compliant. + */ + +# define DSA_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 + +#ifdef __cplusplus +extern "C" { +#endif + +/* Already defined in ossl_typ.h */ +/* typedef struct dsa_st DSA; */ +/* typedef struct dsa_method DSA_METHOD; */ + +typedef struct DSA_SIG_st { + BIGNUM *r; + BIGNUM *s; +} DSA_SIG; + +struct dsa_method { + const char *name; + DSA_SIG *(*dsa_do_sign) (const unsigned char *dgst, int dlen, DSA *dsa); + int (*dsa_sign_setup) (DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, + BIGNUM **rp); + int (*dsa_do_verify) (const unsigned char *dgst, int dgst_len, + DSA_SIG *sig, DSA *dsa); + int (*dsa_mod_exp) (DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, + BIGNUM *a2, BIGNUM *p2, BIGNUM *m, BN_CTX *ctx, + BN_MONT_CTX *in_mont); + /* Can be null */ + int (*bn_mod_exp) (DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); + int (*init) (DSA *dsa); + int (*finish) (DSA *dsa); + int flags; + char *app_data; + /* If this is non-NULL, it is used to generate DSA parameters */ + int (*dsa_paramgen) (DSA *dsa, int bits, + const unsigned char *seed, int seed_len, + int *counter_ret, unsigned long *h_ret, + BN_GENCB *cb); + /* If this is non-NULL, it is used to generate DSA keys */ + int (*dsa_keygen) (DSA *dsa); +}; + +struct dsa_st { + /* + * This first variable is used to pick up errors where a DSA is passed + * instead of of a EVP_PKEY + */ + int pad; + long version; + int write_params; + BIGNUM *p; + BIGNUM *q; /* == 20 */ + BIGNUM *g; + BIGNUM *pub_key; /* y public key */ + BIGNUM *priv_key; /* x private key */ + BIGNUM *kinv; /* Signing pre-calc */ + BIGNUM *r; /* Signing pre-calc */ + int flags; + /* Normally used to cache montgomery values */ + BN_MONT_CTX *method_mont_p; + int references; + CRYPTO_EX_DATA ex_data; + const DSA_METHOD *meth; + /* functional reference if 'meth' is ENGINE-provided */ + ENGINE *engine; +}; + +# define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ + (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x)) +# define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \ + (unsigned char *)(x)) +# define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x) +# define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x) + +DSA *DSAparams_dup(DSA *x); +DSA_SIG *DSA_SIG_new(void); +void DSA_SIG_free(DSA_SIG *a); +int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp); +DSA_SIG *d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length); + +DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); +int DSA_do_verify(const unsigned char *dgst, int dgst_len, + DSA_SIG *sig, DSA *dsa); + +const DSA_METHOD *DSA_OpenSSL(void); + +void DSA_set_default_method(const DSA_METHOD *); +const DSA_METHOD *DSA_get_default_method(void); +int DSA_set_method(DSA *dsa, const DSA_METHOD *); + +DSA *DSA_new(void); +DSA *DSA_new_method(ENGINE *engine); +void DSA_free(DSA *r); +/* "up" the DSA object's reference count */ +int DSA_up_ref(DSA *r); +int DSA_size(const DSA *); + /* next 4 return -1 on error */ +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, + const unsigned char *sigbuf, int siglen, DSA *dsa); +int DSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int DSA_set_ex_data(DSA *d, int idx, void *arg); +void *DSA_get_ex_data(DSA *d, int idx); + +DSA *d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); +DSA *d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); +DSA *d2i_DSAparams(DSA **a, const unsigned char **pp, long length); + +/* Deprecated version */ +# ifndef OPENSSL_NO_DEPRECATED +DSA *DSA_generate_parameters(int bits, + unsigned char *seed, int seed_len, + int *counter_ret, unsigned long *h_ret, void + (*callback) (int, int, void *), void *cb_arg); +# endif /* !defined(OPENSSL_NO_DEPRECATED) */ + +/* New version */ +int DSA_generate_parameters_ex(DSA *dsa, int bits, + const unsigned char *seed, int seed_len, + int *counter_ret, unsigned long *h_ret, + BN_GENCB *cb); + +int DSA_generate_key(DSA *a); +int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); +int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); +int i2d_DSAparams(const DSA *a, unsigned char **pp); + +# ifndef OPENSSL_NO_BIO +int DSAparams_print(BIO *bp, const DSA *x); +int DSA_print(BIO *bp, const DSA *x, int off); +# endif +# ifndef OPENSSL_NO_FP_API +int DSAparams_print_fp(FILE *fp, const DSA *x); +int DSA_print_fp(FILE *bp, const DSA *x, int off); +# endif + +# define DSS_prime_checks 50 +/* + * Primality test according to FIPS PUB 186[-1], Appendix 2.1: 50 rounds of + * Rabin-Miller + */ +# define DSA_is_prime(n, callback, cb_arg) \ + BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) + +# ifndef OPENSSL_NO_DH +/* + * Convert DSA structure (key or just parameters) into DH structure (be + * careful to avoid small subgroup attacks when using this!) + */ +DH *DSA_dup_DH(const DSA *r); +# endif + +# define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) + +# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) + +/* 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. + */ +void ERR_load_DSA_strings(void); + +/* Error codes for the DSA functions. */ + +/* Function codes. */ +# define DSA_F_D2I_DSA_SIG 110 +# define DSA_F_DO_DSA_PRINT 104 +# define DSA_F_DSAPARAMS_PRINT 100 +# define DSA_F_DSAPARAMS_PRINT_FP 101 +# 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_GENERATE_KEY 124 +# define DSA_F_DSA_GENERATE_PARAMETERS_EX 123 +# 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 109 +# define DSA_F_DSA_SIG_PRINT 125 +# define DSA_F_DSA_VERIFY 108 +# define DSA_F_I2D_DSA_SIG 111 +# define DSA_F_OLD_DSA_PRIV_DECODE 122 +# define DSA_F_PKEY_DSA_CTRL 120 +# define DSA_F_PKEY_DSA_KEYGEN 121 +# define DSA_F_SIG_CB 114 + +/* 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_DATA_TOO_LARGE_FOR_KEY_SIZE 100 +# 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_NEED_NEW_SETUP_VALUES 110 +# define DSA_R_NON_FIPS_DSA_METHOD 111 +# define DSA_R_NO_PARAMETERS_SET 107 +# define DSA_R_PARAMETER_ENCODING_ERROR 105 +# define DSA_R_Q_NOT_PRIME 113 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/dso.h b/Sources/OpenSSL/include/openssl/dso.h new file mode 100644 index 0000000000..5333086c0d --- /dev/null +++ b/Sources/OpenSSL/include/openssl/dso.h @@ -0,0 +1,451 @@ +/* dso.h -*- mode:C; c-file-style: "eay" -*- */ +/* + * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project + * 2000. + */ +/* ==================================================================== + * Copyright (c) 2000 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_DSO_H +# define HEADER_DSO_H + +# include "crypto.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* These values are used as commands to DSO_ctrl() */ +# define DSO_CTRL_GET_FLAGS 1 +# define DSO_CTRL_SET_FLAGS 2 +# define DSO_CTRL_OR_FLAGS 3 + +/* + * By default, DSO_load() will translate the provided filename into a form + * typical for the platform (more specifically the DSO_METHOD) using the + * dso_name_converter function of the method. Eg. win32 will transform "blah" + * into "blah.dll", and dlfcn will transform it into "libblah.so". The + * behaviour can be overriden by setting the name_converter callback in the + * DSO object (using DSO_set_name_converter()). This callback could even + * utilise the DSO_METHOD's converter too if it only wants to override + * behaviour for one or two possible DSO methods. However, the following flag + * can be set in a DSO to prevent *any* native name-translation at all - eg. + * if the caller has prompted the user for a path to a driver library so the + * filename should be interpreted as-is. + */ +# define DSO_FLAG_NO_NAME_TRANSLATION 0x01 +/* + * An extra flag to give if only the extension should be added as + * translation. This is obviously only of importance on Unix and other + * operating systems where the translation also may prefix the name with + * something, like 'lib', and ignored everywhere else. This flag is also + * ignored if DSO_FLAG_NO_NAME_TRANSLATION is used at the same time. + */ +# define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY 0x02 + +/* + * The following flag controls the translation of symbol names to upper case. + * This is currently only being implemented for OpenVMS. + */ +# define DSO_FLAG_UPCASE_SYMBOL 0x10 + +/* + * This flag loads the library with public symbols. Meaning: The exported + * symbols of this library are public to all libraries loaded after this + * library. At the moment only implemented in unix. + */ +# define DSO_FLAG_GLOBAL_SYMBOLS 0x20 + +typedef void (*DSO_FUNC_TYPE) (void); + +typedef struct dso_st DSO; + +/* + * The function prototype used for method functions (or caller-provided + * callbacks) that transform filenames. They are passed a DSO structure + * pointer (or NULL if they are to be used independantly of a DSO object) and + * a filename to transform. They should either return NULL (if there is an + * error condition) or a newly allocated string containing the transformed + * form that the caller will need to free with OPENSSL_free() when done. + */ +typedef char *(*DSO_NAME_CONVERTER_FUNC)(DSO *, const char *); +/* + * The function prototype used for method functions (or caller-provided + * callbacks) that merge two file specifications. They are passed a DSO + * structure pointer (or NULL if they are to be used independantly of a DSO + * object) and two file specifications to merge. They should either return + * NULL (if there is an error condition) or a newly allocated string + * containing the result of merging that the caller will need to free with + * OPENSSL_free() when done. Here, merging means that bits and pieces are + * taken from each of the file specifications and added together in whatever + * fashion that is sensible for the DSO method in question. The only rule + * that really applies is that if the two specification contain pieces of the + * same type, the copy from the first string takes priority. One could see + * it as the first specification is the one given by the user and the second + * being a bunch of defaults to add on if they're missing in the first. + */ +typedef char *(*DSO_MERGER_FUNC)(DSO *, const char *, const char *); + +typedef struct dso_meth_st { + const char *name; + /* + * Loads a shared library, NB: new DSO_METHODs must ensure that a + * successful load populates the loaded_filename field, and likewise a + * successful unload OPENSSL_frees and NULLs it out. + */ + int (*dso_load) (DSO *dso); + /* Unloads a shared library */ + int (*dso_unload) (DSO *dso); + /* Binds a variable */ + void *(*dso_bind_var) (DSO *dso, const char *symname); + /* + * Binds a function - assumes a return type of DSO_FUNC_TYPE. This should + * be cast to the real function prototype by the caller. Platforms that + * don't have compatible representations for different prototypes (this + * is possible within ANSI C) are highly unlikely to have shared + * libraries at all, let alone a DSO_METHOD implemented for them. + */ + DSO_FUNC_TYPE (*dso_bind_func) (DSO *dso, const char *symname); +/* I don't think this would actually be used in any circumstances. */ +# if 0 + /* Unbinds a variable */ + int (*dso_unbind_var) (DSO *dso, char *symname, void *symptr); + /* Unbinds a function */ + int (*dso_unbind_func) (DSO *dso, char *symname, DSO_FUNC_TYPE symptr); +# endif + /* + * The generic (yuck) "ctrl()" function. NB: Negative return values + * (rather than zero) indicate errors. + */ + long (*dso_ctrl) (DSO *dso, int cmd, long larg, void *parg); + /* + * The default DSO_METHOD-specific function for converting filenames to a + * canonical native form. + */ + DSO_NAME_CONVERTER_FUNC dso_name_converter; + /* + * The default DSO_METHOD-specific function for converting filenames to a + * canonical native form. + */ + DSO_MERGER_FUNC dso_merger; + /* [De]Initialisation handlers. */ + int (*init) (DSO *dso); + int (*finish) (DSO *dso); + /* Return pathname of the module containing location */ + int (*pathbyaddr) (void *addr, char *path, int sz); + /* Perform global symbol lookup, i.e. among *all* modules */ + void *(*globallookup) (const char *symname); +} DSO_METHOD; + +/**********************************************************************/ +/* The low-level handle type used to refer to a loaded shared library */ + +struct dso_st { + DSO_METHOD *meth; + /* + * Standard dlopen uses a (void *). Win32 uses a HANDLE. VMS doesn't use + * anything but will need to cache the filename for use in the dso_bind + * handler. All in all, let each method control its own destiny. + * "Handles" and such go in a STACK. + */ + STACK_OF(void) *meth_data; + int references; + int flags; + /* + * For use by applications etc ... use this for your bits'n'pieces, don't + * touch meth_data! + */ + CRYPTO_EX_DATA ex_data; + /* + * If this callback function pointer is set to non-NULL, then it will be + * used in DSO_load() in place of meth->dso_name_converter. NB: This + * should normally set using DSO_set_name_converter(). + */ + DSO_NAME_CONVERTER_FUNC name_converter; + /* + * If this callback function pointer is set to non-NULL, then it will be + * used in DSO_load() in place of meth->dso_merger. NB: This should + * normally set using DSO_set_merger(). + */ + DSO_MERGER_FUNC merger; + /* + * This is populated with (a copy of) the platform-independant filename + * used for this DSO. + */ + char *filename; + /* + * This is populated with (a copy of) the translated filename by which + * the DSO was actually loaded. It is NULL iff the DSO is not currently + * loaded. NB: This is here because the filename translation process may + * involve a callback being invoked more than once not only to convert to + * a platform-specific form, but also to try different filenames in the + * process of trying to perform a load. As such, this variable can be + * used to indicate (a) whether this DSO structure corresponds to a + * loaded library or not, and (b) the filename with which it was actually + * loaded. + */ + char *loaded_filename; +}; + +DSO *DSO_new(void); +DSO *DSO_new_method(DSO_METHOD *method); +int DSO_free(DSO *dso); +int DSO_flags(DSO *dso); +int DSO_up_ref(DSO *dso); +long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg); + +/* + * This function sets the DSO's name_converter callback. If it is non-NULL, + * then it will be used instead of the associated DSO_METHOD's function. If + * oldcb is non-NULL then it is set to the function pointer value being + * replaced. Return value is non-zero for success. + */ +int DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb, + DSO_NAME_CONVERTER_FUNC *oldcb); +/* + * These functions can be used to get/set the platform-independant filename + * used for a DSO. NB: set will fail if the DSO is already loaded. + */ +const char *DSO_get_filename(DSO *dso); +int DSO_set_filename(DSO *dso, const char *filename); +/* + * This function will invoke the DSO's name_converter callback to translate a + * filename, or if the callback isn't set it will instead use the DSO_METHOD's + * converter. If "filename" is NULL, the "filename" in the DSO itself will be + * used. If the DSO_FLAG_NO_NAME_TRANSLATION flag is set, then the filename is + * simply duplicated. NB: This function is usually called from within a + * DSO_METHOD during the processing of a DSO_load() call, and is exposed so + * that caller-created DSO_METHODs can do the same thing. A non-NULL return + * value will need to be OPENSSL_free()'d. + */ +char *DSO_convert_filename(DSO *dso, const char *filename); +/* + * This function will invoke the DSO's merger callback to merge two file + * specifications, or if the callback isn't set it will instead use the + * DSO_METHOD's merger. A non-NULL return value will need to be + * OPENSSL_free()'d. + */ +char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2); +/* + * If the DSO is currently loaded, this returns the filename that it was + * loaded under, otherwise it returns NULL. So it is also useful as a test as + * to whether the DSO is currently loaded. NB: This will not necessarily + * return the same value as DSO_convert_filename(dso, dso->filename), because + * the DSO_METHOD's load function may have tried a variety of filenames (with + * and/or without the aid of the converters) before settling on the one it + * actually loaded. + */ +const char *DSO_get_loaded_filename(DSO *dso); + +void DSO_set_default_method(DSO_METHOD *meth); +DSO_METHOD *DSO_get_default_method(void); +DSO_METHOD *DSO_get_method(DSO *dso); +DSO_METHOD *DSO_set_method(DSO *dso, DSO_METHOD *meth); + +/* + * The all-singing all-dancing load function, you normally pass NULL for the + * first and third parameters. Use DSO_up and DSO_free for subsequent + * reference count handling. Any flags passed in will be set in the + * constructed DSO after its init() function but before the load operation. + * If 'dso' is non-NULL, 'flags' is ignored. + */ +DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags); + +/* This function binds to a variable inside a shared library. */ +void *DSO_bind_var(DSO *dso, const char *symname); + +/* This function binds to a function inside a shared library. */ +DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname); + +/* + * This method is the default, but will beg, borrow, or steal whatever method + * should be the default on any particular platform (including + * DSO_METH_null() if necessary). + */ +DSO_METHOD *DSO_METHOD_openssl(void); + +/* + * This method is defined for all platforms - if a platform has no DSO + * support then this will be the only method! + */ +DSO_METHOD *DSO_METHOD_null(void); + +/* + * If DSO_DLFCN is defined, the standard dlfcn.h-style functions (dlopen, + * dlclose, dlsym, etc) will be used and incorporated into this method. If + * not, this method will return NULL. + */ +DSO_METHOD *DSO_METHOD_dlfcn(void); + +/* + * If DSO_DL is defined, the standard dl.h-style functions (shl_load, + * shl_unload, shl_findsym, etc) will be used and incorporated into this + * method. If not, this method will return NULL. + */ +DSO_METHOD *DSO_METHOD_dl(void); + +/* If WIN32 is defined, use DLLs. If not, return NULL. */ +DSO_METHOD *DSO_METHOD_win32(void); + +/* If VMS is defined, use shared images. If not, return NULL. */ +DSO_METHOD *DSO_METHOD_vms(void); + +/* + * This function writes null-terminated pathname of DSO module containing + * 'addr' into 'sz' large caller-provided 'path' and returns the number of + * characters [including trailing zero] written to it. If 'sz' is 0 or + * negative, 'path' is ignored and required amount of charachers [including + * trailing zero] to accomodate pathname is returned. If 'addr' is NULL, then + * pathname of cryptolib itself is returned. Negative or zero return value + * denotes error. + */ +int DSO_pathbyaddr(void *addr, char *path, int sz); + +/* + * This function should be used with caution! It looks up symbols in *all* + * loaded modules and if module gets unloaded by somebody else attempt to + * dereference the pointer is doomed to have fatal consequences. Primary + * usage for this function is to probe *core* system functionality, e.g. + * check if getnameinfo(3) is available at run-time without bothering about + * OS-specific details such as libc.so.versioning or where does it actually + * reside: in libc itself or libsocket. + */ +void *DSO_global_lookup(const char *name); + +/* If BeOS is defined, use shared images. If not, return NULL. */ +DSO_METHOD *DSO_METHOD_beos(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. + */ +void ERR_load_DSO_strings(void); + +/* Error codes for the DSO functions. */ + +/* Function codes. */ +# define DSO_F_BEOS_BIND_FUNC 144 +# define DSO_F_BEOS_BIND_VAR 145 +# define DSO_F_BEOS_LOAD 146 +# define DSO_F_BEOS_NAME_CONVERTER 147 +# define DSO_F_BEOS_UNLOAD 148 +# define DSO_F_DLFCN_BIND_FUNC 100 +# define DSO_F_DLFCN_BIND_VAR 101 +# define DSO_F_DLFCN_LOAD 102 +# define DSO_F_DLFCN_MERGER 130 +# define DSO_F_DLFCN_NAME_CONVERTER 123 +# define DSO_F_DLFCN_UNLOAD 103 +# define DSO_F_DL_BIND_FUNC 104 +# define DSO_F_DL_BIND_VAR 105 +# define DSO_F_DL_LOAD 106 +# define DSO_F_DL_MERGER 131 +# define DSO_F_DL_NAME_CONVERTER 124 +# define DSO_F_DL_UNLOAD 107 +# define DSO_F_DSO_BIND_FUNC 108 +# define DSO_F_DSO_BIND_VAR 109 +# define DSO_F_DSO_CONVERT_FILENAME 126 +# define DSO_F_DSO_CTRL 110 +# define DSO_F_DSO_FREE 111 +# define DSO_F_DSO_GET_FILENAME 127 +# define DSO_F_DSO_GET_LOADED_FILENAME 128 +# define DSO_F_DSO_GLOBAL_LOOKUP 139 +# define DSO_F_DSO_LOAD 112 +# define DSO_F_DSO_MERGE 132 +# define DSO_F_DSO_NEW_METHOD 113 +# define DSO_F_DSO_PATHBYADDR 140 +# define DSO_F_DSO_SET_FILENAME 129 +# define DSO_F_DSO_SET_NAME_CONVERTER 122 +# define DSO_F_DSO_UP_REF 114 +# define DSO_F_GLOBAL_LOOKUP_FUNC 138 +# define DSO_F_PATHBYADDR 137 +# define DSO_F_VMS_BIND_SYM 115 +# define DSO_F_VMS_LOAD 116 +# define DSO_F_VMS_MERGER 133 +# define DSO_F_VMS_UNLOAD 117 +# define DSO_F_WIN32_BIND_FUNC 118 +# define DSO_F_WIN32_BIND_VAR 119 +# define DSO_F_WIN32_GLOBALLOOKUP 142 +# define DSO_F_WIN32_GLOBALLOOKUP_FUNC 143 +# define DSO_F_WIN32_JOINER 135 +# define DSO_F_WIN32_LOAD 120 +# define DSO_F_WIN32_MERGER 134 +# define DSO_F_WIN32_NAME_CONVERTER 125 +# define DSO_F_WIN32_PATHBYADDR 141 +# define DSO_F_WIN32_SPLITTER 136 +# define DSO_F_WIN32_UNLOAD 121 + +/* Reason codes. */ +# define DSO_R_CTRL_FAILED 100 +# define DSO_R_DSO_ALREADY_LOADED 110 +# define DSO_R_EMPTY_FILE_STRUCTURE 113 +# define DSO_R_FAILURE 114 +# define DSO_R_FILENAME_TOO_BIG 101 +# define DSO_R_FINISH_FAILED 102 +# define DSO_R_INCORRECT_FILE_SYNTAX 115 +# define DSO_R_LOAD_FAILED 103 +# define DSO_R_NAME_TRANSLATION_FAILED 109 +# define DSO_R_NO_FILENAME 111 +# define DSO_R_NO_FILE_SPECIFICATION 116 +# define DSO_R_NULL_HANDLE 104 +# define DSO_R_SET_FILENAME_FAILED 112 +# define DSO_R_STACK_ERROR 105 +# define DSO_R_SYM_FAILURE 106 +# define DSO_R_UNLOAD_FAILED 107 +# define DSO_R_UNSUPPORTED 108 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/dtls1.h b/Sources/OpenSSL/include/openssl/dtls1.h new file mode 100644 index 0000000000..0af2fb5b97 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/dtls1.h @@ -0,0 +1,272 @@ +/* ssl/dtls1.h */ +/* + * DTLS implementation written by Nagendra Modadugu + * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. + */ +/* ==================================================================== + * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_DTLS1_H +# define HEADER_DTLS1_H + +# include "buffer.h" +# include "pqueue.h" +# ifdef OPENSSL_SYS_VMS +# include +# include +# endif +# ifdef OPENSSL_SYS_WIN32 +/* Needed for struct timeval */ +# include +# elif defined(OPENSSL_SYS_NETWARE) && !defined(_WINSOCK2API_) +# include +# else +# if defined(OPENSSL_SYS_VXWORKS) +# include +# else +# include +# endif +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define DTLS1_VERSION 0xFEFF +# define DTLS1_2_VERSION 0xFEFD +# define DTLS_MAX_VERSION DTLS1_2_VERSION +# define DTLS1_VERSION_MAJOR 0xFE + +# define DTLS1_BAD_VER 0x0100 + +/* Special value for method supporting multiple versions */ +# define DTLS_ANY_VERSION 0x1FFFF + +# if 0 +/* this alert description is not specified anywhere... */ +# define DTLS1_AD_MISSING_HANDSHAKE_MESSAGE 110 +# endif + +/* lengths of messages */ +# define DTLS1_COOKIE_LENGTH 256 + +# define DTLS1_RT_HEADER_LENGTH 13 + +# define DTLS1_HM_HEADER_LENGTH 12 + +# define DTLS1_HM_BAD_FRAGMENT -2 +# define DTLS1_HM_FRAGMENT_RETRY -3 + +# 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 + +# ifndef OPENSSL_NO_SSL_INTERN + +# ifndef OPENSSL_NO_SCTP +# define DTLS1_SCTP_AUTH_LABEL "EXPORTER_DTLS_OVER_SCTP" +# endif + +/* Max MTU overhead we know about so far is 40 for IPv6 + 8 for UDP */ +# define DTLS1_MAX_MTU_OVERHEAD 48 + +typedef struct dtls1_bitmap_st { + unsigned long map; /* track 32 packets on 32-bit systems and 64 + * - on 64-bit systems */ + unsigned char max_seq_num[8]; /* max record number seen so far, 64-bit + * value in big-endian encoding */ +} DTLS1_BITMAP; + +struct dtls1_retransmit_state { + EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */ + EVP_MD_CTX *write_hash; /* used for mac generation */ +# ifndef OPENSSL_NO_COMP + COMP_CTX *compress; /* compression */ +# else + char *compress; +# endif + SSL_SESSION *session; + unsigned short epoch; +}; + +struct hm_header_st { + unsigned char type; + unsigned long msg_len; + unsigned short seq; + unsigned long frag_off; + unsigned long frag_len; + unsigned int is_ccs; + struct dtls1_retransmit_state saved_retransmit_state; +}; + +struct ccs_header_st { + unsigned char type; + unsigned short seq; +}; + +struct dtls1_timeout_st { + /* Number of read timeouts so far */ + unsigned int read_timeouts; + /* Number of write timeouts so far */ + unsigned int write_timeouts; + /* Number of alerts received so far */ + unsigned int num_alerts; +}; + +typedef struct record_pqueue_st { + unsigned short epoch; + pqueue q; +} record_pqueue; + +typedef struct hm_fragment_st { + struct hm_header_st msg_header; + unsigned char *fragment; + unsigned char *reassembly; +} hm_fragment; + +typedef struct dtls1_state_st { + unsigned int send_cookie; + unsigned char cookie[DTLS1_COOKIE_LENGTH]; + unsigned char rcvd_cookie[DTLS1_COOKIE_LENGTH]; + unsigned int cookie_len; + /* + * The current data and handshake epoch. This is initially + * undefined, and starts at zero once the initial handshake is + * completed + */ + unsigned short r_epoch; + unsigned short w_epoch; + /* records being received in the current epoch */ + DTLS1_BITMAP bitmap; + /* renegotiation starts a new set of sequence numbers */ + DTLS1_BITMAP next_bitmap; + /* handshake message numbers */ + unsigned short handshake_write_seq; + unsigned short next_handshake_write_seq; + unsigned short handshake_read_seq; + /* save last sequence number for retransmissions */ + unsigned char last_write_sequence[8]; + /* Received handshake records (processed and unprocessed) */ + record_pqueue unprocessed_rcds; + record_pqueue processed_rcds; + /* Buffered handshake messages */ + pqueue buffered_messages; + /* Buffered (sent) handshake records */ + pqueue sent_messages; + /* + * Buffered application records. Only for records between CCS and + * Finished to prevent either protocol violation or unnecessary message + * loss. + */ + record_pqueue buffered_app_data; + /* Is set when listening for new connections with dtls1_listen() */ + unsigned int listen; + unsigned int link_mtu; /* max on-the-wire DTLS packet size */ + unsigned int mtu; /* max DTLS packet size */ + struct hm_header_st w_msg_hdr; + struct hm_header_st r_msg_hdr; + struct dtls1_timeout_st timeout; + /* + * Indicates when the last handshake msg or heartbeat sent will timeout + */ + struct timeval next_timeout; + /* Timeout duration */ + unsigned short timeout_duration; + /* + * storage for Alert/Handshake protocol data received but not yet + * processed by ssl3_read_bytes: + */ + unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH]; + unsigned int alert_fragment_len; + unsigned char handshake_fragment[DTLS1_HM_HEADER_LENGTH]; + unsigned int handshake_fragment_len; + unsigned int retransmitting; + /* + * Set when the handshake is ready to process peer's ChangeCipherSpec message. + * Cleared after the message has been processed. + */ + unsigned int change_cipher_spec_ok; +# ifndef OPENSSL_NO_SCTP + /* used when SSL_ST_XX_FLUSH is entered */ + int next_state; + int shutdown_received; +# endif +} DTLS1_STATE; + +typedef struct dtls1_record_data_st { + unsigned char *packet; + unsigned int packet_length; + SSL3_BUFFER rbuf; + SSL3_RECORD rrec; +# ifndef OPENSSL_NO_SCTP + struct bio_dgram_sctp_rcvinfo recordinfo; +# endif +} DTLS1_RECORD_DATA; + +# endif + +/* Timeout multipliers (timeout slice is defined in apps/timeouts.h */ +# define DTLS1_TMO_READ_COUNT 2 +# define DTLS1_TMO_WRITE_COUNT 2 + +# define DTLS1_TMO_ALERT_COUNT 12 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/e_os2.h b/Sources/OpenSSL/include/openssl/e_os2.h new file mode 100644 index 0000000000..c5b50c92fd --- /dev/null +++ b/Sources/OpenSSL/include/openssl/e_os2.h @@ -0,0 +1,328 @@ +/* e_os2.h */ +/* ==================================================================== + * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#include "opensslconf.h" + +#ifndef HEADER_E_OS2_H +# define HEADER_E_OS2_H + +#ifdef __cplusplus +extern "C" { +#endif + +/****************************************************************************** + * Detect operating systems. This probably needs completing. + * The result is that at least one OPENSSL_SYS_os macro should be defined. + * However, if none is defined, Unix is assumed. + **/ + +# define OPENSSL_SYS_UNIX + +/* ---------------------- Macintosh, before MacOS X ----------------------- */ +# if defined(__MWERKS__) && defined(macintosh) || defined(OPENSSL_SYSNAME_MAC) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_MACINTOSH_CLASSIC +# endif + +/* ---------------------- NetWare ----------------------------------------- */ +# if defined(NETWARE) || defined(OPENSSL_SYSNAME_NETWARE) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_NETWARE +# endif + +/* --------------------- Microsoft operating systems ---------------------- */ + +/* + * Note that MSDOS actually denotes 32-bit environments running on top of + * MS-DOS, such as DJGPP one. + */ +# if defined(OPENSSL_SYSNAME_MSDOS) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_MSDOS +# endif + +/* + * For 32 bit environment, there seems to be the CygWin environment and then + * all the others that try to do the same thing Microsoft does... + */ +# if defined(OPENSSL_SYSNAME_UWIN) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WIN32_UWIN +# else +# if defined(__CYGWIN__) || defined(OPENSSL_SYSNAME_CYGWIN) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WIN32_CYGWIN +# else +# if defined(_WIN32) || defined(OPENSSL_SYSNAME_WIN32) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WIN32 +# endif +# if defined(_WIN64) || defined(OPENSSL_SYSNAME_WIN64) +# undef OPENSSL_SYS_UNIX +# if !defined(OPENSSL_SYS_WIN64) +# define OPENSSL_SYS_WIN64 +# endif +# endif +# if defined(OPENSSL_SYSNAME_WINNT) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WINNT +# endif +# if defined(OPENSSL_SYSNAME_WINCE) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WINCE +# endif +# endif +# endif + +/* Anything that tries to look like Microsoft is "Windows" */ +# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WINDOWS +# ifndef OPENSSL_SYS_MSDOS +# define OPENSSL_SYS_MSDOS +# endif +# endif + +/* + * DLL settings. This part is a bit tough, because it's up to the + * application implementor how he or she will link the application, so it + * requires some macro to be used. + */ +# ifdef OPENSSL_SYS_WINDOWS +# ifndef OPENSSL_OPT_WINDLL +# if defined(_WINDLL) /* This is used when building OpenSSL to + * indicate that DLL linkage should be used */ +# define OPENSSL_OPT_WINDLL +# endif +# endif +# endif + +/* ------------------------------- OpenVMS -------------------------------- */ +# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYSNAME_VMS) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_VMS +# if defined(__DECC) +# define OPENSSL_SYS_VMS_DECC +# elif defined(__DECCXX) +# define OPENSSL_SYS_VMS_DECC +# define OPENSSL_SYS_VMS_DECCXX +# else +# define OPENSSL_SYS_VMS_NODECC +# endif +# endif + +/* -------------------------------- OS/2 ---------------------------------- */ +# if defined(__EMX__) || defined(__OS2__) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_OS2 +# endif + +/* -------------------------------- Unix ---------------------------------- */ +# ifdef OPENSSL_SYS_UNIX +# if defined(linux) || defined(__linux__) || defined(OPENSSL_SYSNAME_LINUX) +# define OPENSSL_SYS_LINUX +# endif +# ifdef OPENSSL_SYSNAME_MPE +# define OPENSSL_SYS_MPE +# endif +# ifdef OPENSSL_SYSNAME_SNI +# define OPENSSL_SYS_SNI +# endif +# ifdef OPENSSL_SYSNAME_ULTRASPARC +# define OPENSSL_SYS_ULTRASPARC +# endif +# ifdef OPENSSL_SYSNAME_NEWS4 +# define OPENSSL_SYS_NEWS4 +# endif +# ifdef OPENSSL_SYSNAME_MACOSX +# define OPENSSL_SYS_MACOSX +# endif +# ifdef OPENSSL_SYSNAME_MACOSX_RHAPSODY +# define OPENSSL_SYS_MACOSX_RHAPSODY +# define OPENSSL_SYS_MACOSX +# endif +# ifdef OPENSSL_SYSNAME_SUNOS +# define OPENSSL_SYS_SUNOS +# endif +# if defined(_CRAY) || defined(OPENSSL_SYSNAME_CRAY) +# define OPENSSL_SYS_CRAY +# endif +# if defined(_AIX) || defined(OPENSSL_SYSNAME_AIX) +# define OPENSSL_SYS_AIX +# endif +# endif + +/* -------------------------------- VOS ----------------------------------- */ +# if defined(__VOS__) || defined(OPENSSL_SYSNAME_VOS) +# define OPENSSL_SYS_VOS +# ifdef __HPPA__ +# define OPENSSL_SYS_VOS_HPPA +# endif +# ifdef __IA32__ +# define OPENSSL_SYS_VOS_IA32 +# endif +# endif + +/* ------------------------------ VxWorks --------------------------------- */ +# ifdef OPENSSL_SYSNAME_VXWORKS +# define OPENSSL_SYS_VXWORKS +# endif + +/* -------------------------------- BeOS ---------------------------------- */ +# if defined(__BEOS__) +# define OPENSSL_SYS_BEOS +# include +# if defined(BONE_VERSION) +# define OPENSSL_SYS_BEOS_BONE +# else +# define OPENSSL_SYS_BEOS_R5 +# endif +# endif + +/** + * That's it for OS-specific stuff + *****************************************************************************/ + +/* Specials for I/O an exit */ +# ifdef OPENSSL_SYS_MSDOS +# define OPENSSL_UNISTD_IO +# define OPENSSL_DECLARE_EXIT extern void exit(int); +# else +# define OPENSSL_UNISTD_IO OPENSSL_UNISTD +# define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ +# 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 explicitely 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: + * + * #ifdef SOME_BUILD_FLAG_MACRO + * # undef OPENSSL_EXTERN + * # define OPENSSL_EXTERN OPENSSL_EXPORT + * #endif + * + * The default is to have OPENSSL_EXPORT, OPENSSL_IMPORT and OPENSSL_GLOBAL + * have some generally sensible values, and for OPENSSL_EXTERN to have the + * value OPENSSL_IMPORT. + */ + +# if defined(OPENSSL_SYS_VMS_NODECC) +# define OPENSSL_EXPORT globalref +# define OPENSSL_IMPORT globalref +# define OPENSSL_GLOBAL globaldef +# elif defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) +# define OPENSSL_EXPORT extern __declspec(dllexport) +# define OPENSSL_IMPORT extern __declspec(dllimport) +# define OPENSSL_GLOBAL +# else +# define OPENSSL_EXPORT extern +# define OPENSSL_IMPORT extern +# define OPENSSL_GLOBAL +# endif +# define OPENSSL_EXTERN OPENSSL_IMPORT + +/*- + * Macros to allow global variables to be reached through function calls when + * required (if a shared library version requires it, for example. + * The way it's done allows definitions like this: + * + * // in foobar.c + * OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0) + * // in foobar.h + * OPENSSL_DECLARE_GLOBAL(int,foobar); + * #define foobar OPENSSL_GLOBAL_REF(foobar) + */ +# ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION +# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \ + type *_shadow_##name(void) \ + { static type _hide_##name=value; return &_hide_##name; } +# 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_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name +# define OPENSSL_GLOBAL_REF(name) _shadow_##name +# endif + +# if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && macintosh==1 && !defined(MAC_OS_GUSI_SOURCE) +# define ossl_ssize_t long +# endif + +# ifdef OPENSSL_SYS_MSDOS +# define ossl_ssize_t long +# endif + +# if defined(NeXT) || defined(OPENSSL_SYS_NEWS4) || defined(OPENSSL_SYS_SUNOS) +# define ssize_t int +# endif + +# if defined(__ultrix) && !defined(ssize_t) +# define ossl_ssize_t int +# endif + +# ifndef ossl_ssize_t +# define ossl_ssize_t ssize_t +# endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/ebcdic.h b/Sources/OpenSSL/include/openssl/ebcdic.h new file mode 100644 index 0000000000..4cbdfeb7ae --- /dev/null +++ b/Sources/OpenSSL/include/openssl/ebcdic.h @@ -0,0 +1,26 @@ +/* crypto/ebcdic.h */ + +#ifndef HEADER_EBCDIC_H +# define HEADER_EBCDIC_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Avoid name clashes with other applications */ +# define os_toascii _openssl_os_toascii +# define os_toebcdic _openssl_os_toebcdic +# define ebcdic2ascii _openssl_ebcdic2ascii +# define ascii2ebcdic _openssl_ascii2ebcdic + +extern const unsigned char os_toascii[256]; +extern const unsigned char os_toebcdic[256]; +void *ebcdic2ascii(void *dest, const void *srce, size_t count); +void *ascii2ebcdic(void *dest, const void *srce, size_t count); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/ec.h b/Sources/OpenSSL/include/openssl/ec.h new file mode 100644 index 0000000000..cf5b518e0a --- /dev/null +++ b/Sources/OpenSSL/include/openssl/ec.h @@ -0,0 +1,1282 @@ +/* crypto/ec/ec.h */ +/* + * Originally written by Bodo Moeller for the OpenSSL project. + */ +/** + * \file crypto/ec/ec.h Include file for the OpenSSL EC functions + * \author Originally written by Bodo Moeller for the OpenSSL project + */ +/* ==================================================================== + * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +/* ==================================================================== + * 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 + +# include "opensslconf.h" + +# ifdef OPENSSL_NO_EC +# error EC is disabled. +# endif + +# include "asn1.h" +# include "symhacks.h" +# ifndef OPENSSL_NO_DEPRECATED +# include "bn.h" +# endif + +# ifdef __cplusplus +extern "C" { +# elif defined(__SUNPRO_C) +# if __SUNPRO_C >= 0x520 +# pragma error_messages (off,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# endif +# endif + +# ifndef OPENSSL_ECC_MAX_FIELD_BITS +# define OPENSSL_ECC_MAX_FIELD_BITS 661 +# endif + +/** Enum for the point conversion form as defined in X9.62 (ECDSA) + * for the encoding of a elliptic curve point (x,y) */ +typedef enum { + /** the point is encoded as z||x, where the octet z specifies + * which solution of the quadratic equation y is */ + POINT_CONVERSION_COMPRESSED = 2, + /** the point is encoded as z||x||y, where z is the octet 0x02 */ + POINT_CONVERSION_UNCOMPRESSED = 4, + /** the point is encoded as z||x||y, where the octet z specifies + * which solution of the quadratic equation y is */ + POINT_CONVERSION_HYBRID = 6 +} point_conversion_form_t; + +typedef struct ec_method_st EC_METHOD; + +typedef struct ec_group_st + /*- + EC_METHOD *meth; + -- field definition + -- curve coefficients + -- optional generator with associated information (order, cofactor) + -- optional extra data (precomputed table for fast computation of multiples of generator) + -- ASN1 stuff + */ + EC_GROUP; + +typedef struct ec_point_st EC_POINT; + +/********************************************************************/ +/* EC_METHODs for curves over GF(p) */ +/********************************************************************/ + +/** Returns the basic GFp ec methods which provides the basis for the + * optimized methods. + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_simple_method(void); + +/** Returns GFp methods using montgomery multiplication. + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_mont_method(void); + +/** Returns GFp methods using optimized methods for NIST recommended curves + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nist_method(void); + +# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +/** Returns 64-bit optimized methods for nistp224 + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nistp224_method(void); + +/** Returns 64-bit optimized methods for nistp256 + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nistp256_method(void); + +/** Returns 64-bit optimized methods for nistp521 + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nistp521_method(void); +# endif + +# ifndef OPENSSL_NO_EC2M +/********************************************************************/ +/* EC_METHOD for curves over GF(2^m) */ +/********************************************************************/ + +/** Returns the basic GF2m ec method + * \return EC_METHOD object + */ +const EC_METHOD *EC_GF2m_simple_method(void); + +# endif + +/********************************************************************/ +/* EC_GROUP functions */ +/********************************************************************/ + +/** Creates a new EC_GROUP object + * \param meth EC_METHOD to use + * \return newly created EC_GROUP object or NULL in case of an error. + */ +EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); + +/** Frees a EC_GROUP object + * \param group EC_GROUP object to be freed. + */ +void EC_GROUP_free(EC_GROUP *group); + +/** Clears and frees a EC_GROUP object + * \param group EC_GROUP object to be cleared and freed. + */ +void EC_GROUP_clear_free(EC_GROUP *group); + +/** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD. + * \param dst destination EC_GROUP object + * \param src source EC_GROUP object + * \return 1 on success and 0 if an error occurred. + */ +int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); + +/** Creates a new EC_GROUP object and copies the copies the content + * form src to the newly created EC_KEY object + * \param src source EC_GROUP object + * \return newly created EC_GROUP object or NULL in case of an error. + */ +EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); + +/** Returns the EC_METHOD of the EC_GROUP object. + * \param group EC_GROUP object + * \return EC_METHOD used in this EC_GROUP object. + */ +const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); + +/** Returns the field type of the EC_METHOD. + * \param meth EC_METHOD object + * \return NID of the underlying field type OID. + */ +int EC_METHOD_get_field_type(const EC_METHOD *meth); + +/** Sets the generator and it's order/cofactor of a EC_GROUP object. + * \param group EC_GROUP object + * \param generator EC_POINT object with the generator. + * \param order the order of the group generated by the generator. + * \param cofactor the index of the sub-group generated by the generator + * in the group of all points on the elliptic curve. + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, + const BIGNUM *order, const BIGNUM *cofactor); + +/** Returns the generator of a EC_GROUP object. + * \param group EC_GROUP object + * \return the currently used generator (possibly NULL). + */ +const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group); + +/** Returns the montgomery data for order(Generator) + * \param group EC_GROUP object + * \return the currently used generator (possibly NULL). +*/ +BN_MONT_CTX *EC_GROUP_get_mont_data(const EC_GROUP *group); + +/** Gets the order of a EC_GROUP + * \param group EC_GROUP object + * \param order BIGNUM to which the order is copied + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx); + +/** Gets the cofactor of a EC_GROUP + * \param group EC_GROUP object + * \param cofactor BIGNUM to which the cofactor is copied + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, + BN_CTX *ctx); + +/** Sets the name of a EC_GROUP object + * \param group EC_GROUP object + * \param nid NID of the curve name OID + */ +void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); + +/** Returns the curve name of a EC_GROUP object + * \param group EC_GROUP object + * \return NID of the curve name OID or 0 if not set. + */ +int EC_GROUP_get_curve_name(const EC_GROUP *group); + +void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); +int EC_GROUP_get_asn1_flag(const EC_GROUP *group); + +void EC_GROUP_set_point_conversion_form(EC_GROUP *group, + point_conversion_form_t form); +point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); + +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 + * \param group EC_GROUP object + * \param p BIGNUM with the prime number + * \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 occured + */ +int EC_GROUP_set_curve_GFp(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 + * \param group EC_GROUP object + * \param p BIGNUM for the prime number + * \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 occured + */ +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 + * \param group EC_GROUP object + * \param p BIGNUM with the polynomial defining the underlying field + * \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 occured + */ +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 + * \param group EC_GROUP object + * \param p BIGNUM for the polynomial defining the underlying field + * \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 occured + */ +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 + * \return number of bits needed to represent a field element + */ +int EC_GROUP_get_degree(const EC_GROUP *group); + +/** Checks whether the parameter in the EC_GROUP define a valid ec group + * \param group EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 1 if group is a valid ec group and 0 otherwise + */ +int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx); + +/** Checks whether the discriminant of the elliptic curve is zero or not + * \param group EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 1 if the discriminant is not zero and 0 otherwise + */ +int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx); + +/** Compares two EC_GROUP objects + * \param a first EC_GROUP object + * \param b second EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 0 if both groups are equal and 1 otherwise + */ +int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); + +/* + * EC_GROUP_new_GF*() calls EC_GROUP_new() and EC_GROUP_set_GF*() after + * choosing an appropriate EC_METHOD + */ + +/** Creates a new EC_GROUP object with the specified parameters defined + * over GFp (defined by the equation y^2 = x^3 + a*x + b) + * \param p BIGNUM with the prime number + * \param a BIGNUM with the parameter a of the equation + * \param b BIGNUM with the parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return newly created EC_GROUP object with the specified parameters + */ +EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, + const BIGNUM *b, BN_CTX *ctx); +# ifndef OPENSSL_NO_EC2M +/** Creates a new EC_GROUP object with the specified parameters defined + * over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b) + * \param p BIGNUM with the polynomial defining the underlying field + * \param a BIGNUM with the parameter a of the equation + * \param b BIGNUM with the parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return newly created EC_GROUP object with the specified parameters + */ +EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, + const BIGNUM *b, BN_CTX *ctx); +# endif +/** Creates a EC_GROUP object with a curve specified by a NID + * \param nid NID of the OID of the curve name + * \return newly created EC_GROUP object with specified curve or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_by_curve_name(int nid); + +/********************************************************************/ +/* handling of internal curves */ +/********************************************************************/ + +typedef struct { + int nid; + const char *comment; +} EC_builtin_curve; + +/* + * EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number of all + * available curves or zero if a error occurred. In case r ist not zero + * nitems EC_builtin_curve structures are filled with the data of the first + * nitems internal groups + */ +size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); + +const char *EC_curve_nid2nist(int nid); +int EC_curve_nist2nid(const char *name); + +/********************************************************************/ +/* EC_POINT functions */ +/********************************************************************/ + +/** Creates a new EC_POINT object for the specified EC_GROUP + * \param group EC_GROUP the underlying EC_GROUP object + * \return newly created EC_POINT object or NULL if an error occurred + */ +EC_POINT *EC_POINT_new(const EC_GROUP *group); + +/** Frees a EC_POINT object + * \param point EC_POINT object to be freed + */ +void EC_POINT_free(EC_POINT *point); + +/** Clears and frees a EC_POINT object + * \param point EC_POINT object to be cleared and freed + */ +void EC_POINT_clear_free(EC_POINT *point); + +/** Copies EC_POINT object + * \param dst destination EC_POINT object + * \param src source EC_POINT object + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); + +/** Creates a new EC_POINT object and copies the content of the supplied + * EC_POINT + * \param src source EC_POINT object + * \param group underlying the EC_GROUP object + * \return newly created EC_POINT object or NULL if an error occurred + */ +EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); + +/** Returns the EC_METHOD used in EC_POINT object + * \param point EC_POINT object + * \return the EC_METHOD used + */ +const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); + +/** Sets a point to infinity (neutral element) + * \param group underlying EC_GROUP object + * \param point EC_POINT to set to infinity + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); + +/** Sets the jacobian projective coordinates of a EC_POINT over GFp + * \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 z BIGNUM with the z-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, + EC_POINT *p, const BIGNUM *x, + const BIGNUM *y, const BIGNUM *z, + BN_CTX *ctx); + +/** Gets the jacobian projective 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 z BIGNUM for the z-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, + const EC_POINT *p, BIGNUM *x, + BIGNUM *y, BIGNUM *z, + BN_CTX *ctx); + +/** Sets the affine coordinates of a EC_POINT over GFp + * \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 occured + */ +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 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 occured + */ +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 + * \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 occured + */ +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 + * \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 occured + */ +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 + * \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 occured + */ +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 + * \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 occured + */ +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 + * \param p EC_POINT object + * \param form point conversion form + * \param buf memory buffer for the result. If NULL the function returns + * required buffer size. + * \param len length of the memory buffer + * \param ctx BN_CTX object (optional) + * \return the length of the encoded octet string or 0 if an error occurred + */ +size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p, + point_conversion_form_t form, + unsigned char *buf, size_t len, BN_CTX *ctx); + +/** Decodes a EC_POINT from a octet string + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param buf memory buffer with the encoded ec point + * \param len length of the encoded ec point + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p, + const unsigned char *buf, size_t len, BN_CTX *ctx); + +/* other interfaces to point2oct/oct2point: */ +BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, + point_conversion_form_t form, BIGNUM *, BN_CTX *); +EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, + EC_POINT *, BN_CTX *); +char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, + point_conversion_form_t form, BN_CTX *); +EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, + EC_POINT *, BN_CTX *); + +/********************************************************************/ +/* functions for doing EC_POINT arithmetic */ +/********************************************************************/ + +/** Computes the sum of two EC_POINT + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result (r = a + b) + * \param a EC_POINT object with the first summand + * \param b EC_POINT object with the second summand + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, + const EC_POINT *b, BN_CTX *ctx); + +/** Computes the double of a EC_POINT + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result (r = 2 * a) + * \param a EC_POINT object + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, + BN_CTX *ctx); + +/** Computes the inverse of a EC_POINT + * \param group underlying EC_GROUP object + * \param a EC_POINT object to be inverted (it's used for the result as well) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx); + +/** Checks whether the point is the neutral element of the group + * \param group the underlying EC_GROUP object + * \param p EC_POINT object + * \return 1 if the point is the neutral element and 0 otherwise + */ +int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p); + +/** Checks whether the point is on the curve + * \param group underlying EC_GROUP object + * \param point EC_POINT object to check + * \param ctx BN_CTX object (optional) + * \return 1 if point if on the curve and 0 otherwise + */ +int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, + BN_CTX *ctx); + +/** Compares two EC_POINTs + * \param group underlying EC_GROUP object + * \param a first EC_POINT object + * \param b second EC_POINT object + * \param ctx BN_CTX object (optional) + * \return 0 if both points are equal and a value != 0 otherwise + */ +int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, + BN_CTX *ctx); + +int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx); +int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, + EC_POINT *points[], BN_CTX *ctx); + +/** Computes r = generator * n sum_{i=0}^{num-1} p[i] * m[i] + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result + * \param n BIGNUM with the multiplier for the group generator (optional) + * \param num number futher summands + * \param p array of size num of EC_POINT objects + * \param m array of size num of BIGNUM objects + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, + size_t num, const EC_POINT *p[], const BIGNUM *m[], + BN_CTX *ctx); + +/** Computes r = generator * n + q * m + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result + * \param n BIGNUM with the multiplier for the group generator (optional) + * \param q EC_POINT object with the first factor of the second summand + * \param m BIGNUM with the second factor of the second summand + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, + const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); + +/** Stores multiples of generator for faster point multiplication + * \param group EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occured + */ +int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); + +/** Reports whether a precomputation has been done + * \param group EC_GROUP object + * \return 1 if a pre-computation has been done and 0 otherwise + */ +int EC_GROUP_have_precompute_mult(const EC_GROUP *group); + +/********************************************************************/ +/* ASN1 stuff */ +/********************************************************************/ + +/* + * EC_GROUP_get_basis_type() returns the NID of the basis type used to + * represent the field elements + */ +int EC_GROUP_get_basis_type(const EC_GROUP *); +# ifndef OPENSSL_NO_EC2M +int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); +int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, + unsigned int *k2, unsigned int *k3); +# endif + +# define OPENSSL_EC_NAMED_CURVE 0x001 + +typedef struct ecpk_parameters_st ECPKPARAMETERS; + +EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); +int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); + +# define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x) +# define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x) +# define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \ + (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x)) +# define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \ + (unsigned char *)(x)) + +# ifndef OPENSSL_NO_BIO +int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); +# endif +# ifndef OPENSSL_NO_FP_API +int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); +# endif + +/********************************************************************/ +/* EC_KEY functions */ +/********************************************************************/ + +typedef struct ec_key_st EC_KEY; + +/* some values for the encoding_flag */ +# define EC_PKEY_NO_PARAMETERS 0x001 +# define EC_PKEY_NO_PUBKEY 0x002 + +/* some values for the flags field */ +# define EC_FLAG_NON_FIPS_ALLOW 0x1 +# define EC_FLAG_FIPS_CHECKED 0x2 + +/** Creates a new EC_KEY object. + * \return EC_KEY object or NULL if an error occurred. + */ +EC_KEY *EC_KEY_new(void); + +int EC_KEY_get_flags(const EC_KEY *key); + +void EC_KEY_set_flags(EC_KEY *key, int flags); + +void EC_KEY_clear_flags(EC_KEY *key, int flags); + +/** Creates a new EC_KEY object using a named curve as underlying + * EC_GROUP object. + * \param nid NID of the named curve. + * \return EC_KEY object or NULL if an error occurred. + */ +EC_KEY *EC_KEY_new_by_curve_name(int nid); + +/** Frees a EC_KEY object. + * \param key EC_KEY object to be freed. + */ +void EC_KEY_free(EC_KEY *key); + +/** Copies a EC_KEY object. + * \param dst destination EC_KEY object + * \param src src EC_KEY object + * \return dst or NULL if an error occurred. + */ +EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); + +/** Creates a new EC_KEY object and copies the content from src to it. + * \param src the source EC_KEY object + * \return newly created EC_KEY object or NULL if an error occurred. + */ +EC_KEY *EC_KEY_dup(const EC_KEY *src); + +/** Increases the internal reference count of a EC_KEY object. + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_up_ref(EC_KEY *key); + +/** Returns the EC_GROUP object of a EC_KEY object + * \param key EC_KEY object + * \return the EC_GROUP object (possibly NULL). + */ +const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); + +/** Sets the EC_GROUP of a EC_KEY object. + * \param key EC_KEY object + * \param group EC_GROUP to use in the EC_KEY object (note: the EC_KEY + * object will use an own copy of the EC_GROUP). + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); + +/** Returns the private key of a EC_KEY object. + * \param key EC_KEY object + * \return a BIGNUM with the private key (possibly NULL). + */ +const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); + +/** Sets the private key of a EC_KEY object. + * \param key EC_KEY object + * \param prv BIGNUM with the private key (note: the EC_KEY object + * will use an own copy of the BIGNUM). + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); + +/** Returns the public key of a EC_KEY object. + * \param key the EC_KEY object + * \return a EC_POINT object with the public key (possibly NULL) + */ +const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); + +/** Sets the public key of a EC_KEY object. + * \param key EC_KEY object + * \param pub EC_POINT object with the public key (note: the EC_KEY object + * will use an own copy of the EC_POINT object). + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); + +unsigned EC_KEY_get_enc_flags(const EC_KEY *key); +void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); +point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); +void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform); +/* functions to set/get method specific data */ +void *EC_KEY_get_key_method_data(EC_KEY *key, + void *(*dup_func) (void *), + void (*free_func) (void *), + void (*clear_free_func) (void *)); +/** Sets the key method data of an EC_KEY object, if none has yet been set. + * \param key EC_KEY object + * \param data opaque data to install. + * \param dup_func a function that duplicates |data|. + * \param free_func a function that frees |data|. + * \param clear_free_func a function that wipes and frees |data|. + * \return the previously set data pointer, or NULL if |data| was inserted. + */ +void *EC_KEY_insert_key_method_data(EC_KEY *key, void *data, + void *(*dup_func) (void *), + void (*free_func) (void *), + void (*clear_free_func) (void *)); +/* wrapper functions for the underlying EC_GROUP object */ +void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); + +/** Creates a table of pre-computed multiples of the generator to + * accelerate further EC_KEY operations. + * \param key EC_KEY object + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); + +/** Creates a new ec private (and optional a new public) key. + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_generate_key(EC_KEY *key); + +/** Verifies that a private and/or public key is valid. + * \param key the EC_KEY object + * \return 1 on success and 0 otherwise. + */ +int EC_KEY_check_key(const EC_KEY *key); + +/** Sets a public key from affine coordindates performing + * neccessary NIST PKV tests. + * \param key the EC_KEY object + * \param x public key x coordinate + * \param y public key y coordinate + * \return 1 on success and 0 otherwise. + */ +int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, + BIGNUM *y); + +/********************************************************************/ +/* de- and encoding functions for SEC1 ECPrivateKey */ +/********************************************************************/ + +/** Decodes a private key from a memory buffer. + * \param key a pointer to a EC_KEY object which should be used (or NULL) + * \param in pointer to memory with the DER encoded private key + * \param len length of the DER encoded private key + * \return the decoded private key or NULL if an error occurred. + */ +EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); + +/** Encodes a private key object and stores the result in a buffer. + * \param key the EC_KEY object to encode + * \param out the buffer for the result (if NULL the function returns number + * of bytes needed). + * \return 1 on success and 0 if an error occurred. + */ +int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); + +/********************************************************************/ +/* de- and encoding functions for EC parameters */ +/********************************************************************/ + +/** Decodes ec parameter from a memory buffer. + * \param key a pointer to a EC_KEY object which should be used (or NULL) + * \param in pointer to memory with the DER encoded ec parameters + * \param len length of the DER encoded ec parameters + * \return a EC_KEY object with the decoded parameters or NULL if an error + * occurred. + */ +EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); + +/** Encodes ec parameter and stores the result in a buffer. + * \param key the EC_KEY object with ec paramters to encode + * \param out the buffer for the result (if NULL the function returns number + * of bytes needed). + * \return 1 on success and 0 if an error occurred. + */ +int i2d_ECParameters(EC_KEY *key, unsigned char **out); + +/********************************************************************/ +/* de- and encoding functions for EC public key */ +/* (octet string, not DER -- hence 'o2i' and 'i2o') */ +/********************************************************************/ + +/** Decodes a ec public key from a octet string. + * \param key a pointer to a EC_KEY object which should be used + * \param in memory buffer with the encoded public key + * \param len length of the encoded public key + * \return EC_KEY object with decoded public key or NULL if an error + * occurred. + */ +EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); + +/** Encodes a ec public key in an octet string. + * \param key the EC_KEY object with the public key + * \param out the buffer for the result (if NULL the function returns number + * of bytes needed). + * \return 1 on success and 0 if an error occurred + */ +int i2o_ECPublicKey(EC_KEY *key, unsigned char **out); + +# ifndef OPENSSL_NO_BIO +/** Prints out the ec parameters on human readable form. + * \param bp BIO object to which the information is printed + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred + */ +int ECParameters_print(BIO *bp, const EC_KEY *key); + +/** Prints out the contents of a EC_KEY object + * \param bp BIO object to which the information is printed + * \param key EC_KEY object + * \param off line offset + * \return 1 on success and 0 if an error occurred + */ +int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); + +# endif +# ifndef OPENSSL_NO_FP_API +/** Prints out the ec parameters on human readable form. + * \param fp file descriptor to which the information is printed + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred + */ +int ECParameters_print_fp(FILE *fp, const EC_KEY *key); + +/** Prints out the contents of a EC_KEY object + * \param fp file descriptor to which the information is printed + * \param key EC_KEY object + * \param off line offset + * \return 1 on success and 0 if an error occurred + */ +int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); + +# endif + +# define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x) + +# ifndef __cplusplus +# if defined(__SUNPRO_C) +# if __SUNPRO_C >= 0x520 +# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# endif +# endif +# endif + +# define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) + +# define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL) + +# define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL) + +# define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL) + +# define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL) + +# define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL) + +# 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) + +# 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) + +# define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL) + +# 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) + +# 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) + +# 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) + +# 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) +# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) +# 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) +/* 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. + */ +void ERR_load_EC_strings(void); + +/* Error codes for the EC functions. */ + +/* Function codes. */ +# define EC_F_BN_TO_FELEM 224 +# define EC_F_COMPUTE_WNAF 143 +# 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_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_SET_WORDS 245 +# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 +# define EC_F_ECP_NIST_MOD_192 203 +# define EC_F_ECP_NIST_MOD_224 204 +# define EC_F_ECP_NIST_MOD_256 205 +# define EC_F_ECP_NIST_MOD_521 206 +# define EC_F_EC_ASN1_GROUP2CURVE 153 +# define EC_F_EC_ASN1_GROUP2FIELDID 154 +# define EC_F_EC_ASN1_GROUP2PARAMETERS 155 +# define EC_F_EC_ASN1_GROUP2PKPARAMETERS 156 +# define EC_F_EC_ASN1_PARAMETERS2GROUP 157 +# define EC_F_EC_ASN1_PKPARAMETERS2GROUP 158 +# define EC_F_EC_EX_DATA_SET_DATA 211 +# 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_MONT_GROUP_SET_CURVE_GFP 135 +# 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_GROUP_CHECK_DISCRIMINANT 165 +# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 +# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE_GFP 100 +# define EC_F_EC_GFP_SIMPLE_GROUP_SET_GENERATOR 101 +# 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_GET_AFFINE_COORDINATES_GFP 105 +# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 +# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES_GFP 128 +# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 +# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES_GFP 129 +# 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_GET0_GENERATOR 139 +# define EC_F_EC_GROUP_GET_COFACTOR 140 +# 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_ORDER 141 +# 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_PRECOMPUTE_MULT 142 +# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 +# define EC_F_EC_GROUP_SET_CURVE_GFP 109 +# define EC_F_EC_GROUP_SET_EXTRA_DATA 110 +# 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_PRINT 180 +# define EC_F_EC_KEY_PRINT_FP 181 +# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 +# 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_MUL 184 +# 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_DUP 207 +# 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_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_ASN1_UNKNOWN_FIELD 116 +# 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_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_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_NOT_A_NIST_PRIME 135 +# define EC_R_NOT_A_SUPPORTED_NIST_PRIME 136 +# define EC_R_NOT_IMPLEMENTED 126 +# define EC_R_NOT_INITIALIZED 111 +# define EC_R_NO_FIELD_MOD 133 +# define EC_R_NO_PARAMETERS_SET 139 +# define EC_R_PASSED_NULL_PARAMETER 134 +# define EC_R_PEER_KEY_ERROR 149 +# define EC_R_PKPARAMETERS2GROUP_FAILURE 127 +# define EC_R_POINT_AT_INFINITY 106 +# define EC_R_POINT_IS_NOT_ON_CURVE 107 +# 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 +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/ecdh.h b/Sources/OpenSSL/include/openssl/ecdh.h new file mode 100644 index 0000000000..85e20860c6 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/ecdh.h @@ -0,0 +1,134 @@ +/* crypto/ecdh/ecdh.h */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * + * The Elliptic Curve Public-Key Crypto Library (ECC Code) included + * herein is developed by SUN MICROSYSTEMS, INC., and is contributed + * to the OpenSSL project. + * + * The ECC Code is licensed pursuant to the OpenSSL open source + * license provided below. + * + * The ECDH software is originally written by Douglas Stebila of + * Sun Microsystems Laboratories. + * + */ +/* ==================================================================== + * Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +#ifndef HEADER_ECDH_H +# define HEADER_ECDH_H + +# include "opensslconf.h" + +# ifdef OPENSSL_NO_ECDH +# error ECDH is disabled. +# endif + +# include "ec.h" +# include "ossl_typ.h" +# ifndef OPENSSL_NO_DEPRECATED +# include "bn.h" +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define EC_FLAG_COFACTOR_ECDH 0x1000 + +const ECDH_METHOD *ECDH_OpenSSL(void); + +void ECDH_set_default_method(const ECDH_METHOD *); +const ECDH_METHOD *ECDH_get_default_method(void); +int ECDH_set_method(EC_KEY *, const ECDH_METHOD *); + +int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, + EC_KEY *ecdh, void *(*KDF) (const void *in, size_t inlen, + void *out, size_t *outlen)); + +int ECDH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new + *new_func, CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +int ECDH_set_ex_data(EC_KEY *d, int idx, void *arg); +void *ECDH_get_ex_data(EC_KEY *d, int idx); + +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, + const EVP_MD *md); + +/* 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. + */ +void ERR_load_ECDH_strings(void); + +/* Error codes for the ECDH functions. */ + +/* Function codes. */ +# define ECDH_F_ECDH_CHECK 102 +# define ECDH_F_ECDH_COMPUTE_KEY 100 +# define ECDH_F_ECDH_DATA_NEW_METHOD 101 + +/* Reason codes. */ +# define ECDH_R_KDF_FAILED 102 +# define ECDH_R_NON_FIPS_METHOD 103 +# define ECDH_R_NO_PRIVATE_VALUE 100 +# define ECDH_R_POINT_ARITHMETIC_FAILURE 101 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/ecdsa.h b/Sources/OpenSSL/include/openssl/ecdsa.h new file mode 100644 index 0000000000..aada08afd6 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/ecdsa.h @@ -0,0 +1,335 @@ +/* crypto/ecdsa/ecdsa.h */ +/** + * \file crypto/ecdsa/ecdsa.h Include file for the OpenSSL ECDSA functions + * \author Written by Nils Larsch for the OpenSSL project + */ +/* ==================================================================== + * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +#ifndef HEADER_ECDSA_H +# define HEADER_ECDSA_H + +# include "opensslconf.h" + +# ifdef OPENSSL_NO_ECDSA +# error ECDSA is disabled. +# endif + +# include "ec.h" +# include "ossl_typ.h" +# ifndef OPENSSL_NO_DEPRECATED +# include "bn.h" +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ECDSA_SIG_st { + BIGNUM *r; + BIGNUM *s; +} ECDSA_SIG; + +/** Allocates and initialize a ECDSA_SIG structure + * \return pointer to a ECDSA_SIG structure or NULL if an error occurred + */ +ECDSA_SIG *ECDSA_SIG_new(void); + +/** frees a ECDSA_SIG structure + * \param sig pointer to the ECDSA_SIG structure + */ +void ECDSA_SIG_free(ECDSA_SIG *sig); + +/** DER encode content of ECDSA_SIG object (note: this function modifies *pp + * (*pp += length of the DER encoded signature)). + * \param sig pointer to the ECDSA_SIG object + * \param pp pointer to a unsigned char pointer for the output or NULL + * \return the length of the DER encoded ECDSA_SIG object or 0 + */ +int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); + +/** Decodes a DER encoded ECDSA signature (note: this function changes *pp + * (*pp += len)). + * \param sig pointer to ECDSA_SIG pointer (may be NULL) + * \param pp memory buffer with the DER encoded signature + * \param len length of the buffer + * \return pointer to the decoded ECDSA_SIG structure (or NULL) + */ +ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); + +/** Computes the ECDSA signature of the given hash value using + * the supplied private key and returns the created signature. + * \param dgst pointer to the hash value + * \param dgst_len length of the hash value + * \param eckey EC_KEY object containing a private EC key + * \return pointer to a ECDSA_SIG structure or NULL if an error occurred + */ +ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, + EC_KEY *eckey); + +/** Computes ECDSA signature of a given hash value using the supplied + * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). + * \param dgst pointer to the hash value to sign + * \param dgstlen length of the hash value + * \param kinv BIGNUM with a pre-computed inverse k (optional) + * \param rp BIGNUM with a pre-computed rp value (optioanl), + * see ECDSA_sign_setup + * \param eckey EC_KEY object containing a private EC key + * \return pointer to a ECDSA_SIG structure or NULL if an error occurred + */ +ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, + const BIGNUM *kinv, const BIGNUM *rp, + EC_KEY *eckey); + +/** Verifies that the supplied signature is a valid ECDSA + * signature of the supplied hash value using the supplied public key. + * \param dgst pointer to the hash value + * \param dgst_len length of the hash value + * \param sig ECDSA_SIG structure + * \param eckey EC_KEY object containing a public EC key + * \return 1 if the signature is valid, 0 if the signature is invalid + * and -1 on error + */ +int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, + const ECDSA_SIG *sig, EC_KEY *eckey); + +const ECDSA_METHOD *ECDSA_OpenSSL(void); + +/** Sets the default ECDSA method + * \param meth new default ECDSA_METHOD + */ +void ECDSA_set_default_method(const ECDSA_METHOD *meth); + +/** Returns the default ECDSA method + * \return pointer to ECDSA_METHOD structure containing the default method + */ +const ECDSA_METHOD *ECDSA_get_default_method(void); + +/** Sets method to be used for the ECDSA operations + * \param eckey EC_KEY object + * \param meth new method + * \return 1 on success and 0 otherwise + */ +int ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth); + +/** Returns the maximum length of the DER encoded signature + * \param eckey EC_KEY object + * \return numbers of bytes required for the DER encoded signature + */ +int ECDSA_size(const EC_KEY *eckey); + +/** Precompute parts of the signing operation + * \param eckey EC_KEY object containing a private EC key + * \param ctx BN_CTX object (optional) + * \param kinv BIGNUM pointer for the inverse of k + * \param rp BIGNUM pointer for x coordinate of k * generator + * \return 1 on success and 0 otherwise + */ +int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); + +/** Computes ECDSA signature of a given hash value using the supplied + * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). + * \param type this parameter is ignored + * \param dgst pointer to the hash value to sign + * \param dgstlen length of the hash value + * \param sig memory for the DER encoded created signature + * \param siglen pointer to the length of the returned signature + * \param eckey EC_KEY object containing a private EC key + * \return 1 on success and 0 otherwise + */ +int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, + unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); + +/** Computes ECDSA signature of a given hash value using the supplied + * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). + * \param type this parameter is ignored + * \param dgst pointer to the hash value to sign + * \param dgstlen length of the hash value + * \param sig buffer to hold the DER encoded signature + * \param siglen pointer to the length of the returned signature + * \param kinv BIGNUM with a pre-computed inverse k (optional) + * \param rp BIGNUM with a pre-computed rp value (optioanl), + * see ECDSA_sign_setup + * \param eckey EC_KEY object containing a private EC key + * \return 1 on success and 0 otherwise + */ +int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, + unsigned char *sig, unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); + +/** Verifies that the given signature is valid ECDSA signature + * of the supplied hash value using the specified public key. + * \param type this parameter is ignored + * \param dgst pointer to the hash value + * \param dgstlen length of the hash value + * \param sig pointer to the DER encoded signature + * \param siglen length of the DER encoded signature + * \param eckey EC_KEY object containing a public EC key + * \return 1 if the signature is valid, 0 if the signature is invalid + * and -1 on error + */ +int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, + const unsigned char *sig, int siglen, EC_KEY *eckey); + +/* the standard ex_data functions */ +int ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new + *new_func, CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +int ECDSA_set_ex_data(EC_KEY *d, int idx, void *arg); +void *ECDSA_get_ex_data(EC_KEY *d, int idx); + +/** Allocates and initialize a ECDSA_METHOD structure + * \param ecdsa_method pointer to ECDSA_METHOD to copy. (May be NULL) + * \return pointer to a ECDSA_METHOD structure or NULL if an error occurred + */ + +ECDSA_METHOD *ECDSA_METHOD_new(ECDSA_METHOD *ecdsa_method); + +/** frees a ECDSA_METHOD structure + * \param ecdsa_method pointer to the ECDSA_METHOD structure + */ +void ECDSA_METHOD_free(ECDSA_METHOD *ecdsa_method); + +/** Sets application specific data in the ECDSA_METHOD + * \param ecdsa_method pointer to existing ECDSA_METHOD + * \param app application specific data to set + */ + +void ECDSA_METHOD_set_app_data(ECDSA_METHOD *ecdsa_method, void *app); + +/** Returns application specific data from a ECDSA_METHOD structure + * \param ecdsa_method pointer to ECDSA_METHOD structure + * \return pointer to application specific data. + */ + +void *ECDSA_METHOD_get_app_data(ECDSA_METHOD *ecdsa_method); + +/** Set the ECDSA_do_sign function in the ECDSA_METHOD + * \param ecdsa_method pointer to existing ECDSA_METHOD + * \param ecdsa_do_sign a funtion of type ECDSA_do_sign + */ + +void ECDSA_METHOD_set_sign(ECDSA_METHOD *ecdsa_method, + ECDSA_SIG *(*ecdsa_do_sign) (const unsigned char + *dgst, int dgst_len, + const BIGNUM *inv, + const BIGNUM *rp, + EC_KEY *eckey)); + +/** Set the ECDSA_sign_setup function in the ECDSA_METHOD + * \param ecdsa_method pointer to existing ECDSA_METHOD + * \param ecdsa_sign_setup a funtion of type ECDSA_sign_setup + */ + +void ECDSA_METHOD_set_sign_setup(ECDSA_METHOD *ecdsa_method, + int (*ecdsa_sign_setup) (EC_KEY *eckey, + BN_CTX *ctx, + BIGNUM **kinv, + BIGNUM **r)); + +/** Set the ECDSA_do_verify function in the ECDSA_METHOD + * \param ecdsa_method pointer to existing ECDSA_METHOD + * \param ecdsa_do_verify a funtion of type ECDSA_do_verify + */ + +void ECDSA_METHOD_set_verify(ECDSA_METHOD *ecdsa_method, + int (*ecdsa_do_verify) (const unsigned char + *dgst, int dgst_len, + const ECDSA_SIG *sig, + EC_KEY *eckey)); + +void ECDSA_METHOD_set_flags(ECDSA_METHOD *ecdsa_method, int flags); + +/** Set the flags field in the ECDSA_METHOD + * \param ecdsa_method pointer to existing ECDSA_METHOD + * \param flags flags value to set + */ + +void ECDSA_METHOD_set_name(ECDSA_METHOD *ecdsa_method, char *name); + +/** Set the name field in the ECDSA_METHOD + * \param ecdsa_method pointer to existing ECDSA_METHOD + * \param name name to set + */ + +/* 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. + */ +void ERR_load_ECDSA_strings(void); + +/* Error codes for the ECDSA functions. */ + +/* Function codes. */ +# define ECDSA_F_ECDSA_CHECK 104 +# define ECDSA_F_ECDSA_DATA_NEW_METHOD 100 +# define ECDSA_F_ECDSA_DO_SIGN 101 +# define ECDSA_F_ECDSA_DO_VERIFY 102 +# define ECDSA_F_ECDSA_METHOD_NEW 105 +# define ECDSA_F_ECDSA_SIGN_SETUP 103 + +/* Reason codes. */ +# define ECDSA_R_BAD_SIGNATURE 100 +# define ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 101 +# define ECDSA_R_ERR_EC_LIB 102 +# define ECDSA_R_MISSING_PARAMETERS 103 +# define ECDSA_R_NEED_NEW_SETUP_VALUES 106 +# define ECDSA_R_NON_FIPS_METHOD 107 +# define ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED 104 +# define ECDSA_R_SIGNATURE_MALLOC_FAILED 105 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/engine.h b/Sources/OpenSSL/include/openssl/engine.h new file mode 100644 index 0000000000..873464a0f8 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/engine.h @@ -0,0 +1,960 @@ +/* openssl/engine.h */ +/* + * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project + * 2000. + */ +/* ==================================================================== + * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +/* ==================================================================== + * 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 + +# include "opensslconf.h" + +# ifdef OPENSSL_NO_ENGINE +# error ENGINE is disabled. +# endif + +# ifndef OPENSSL_NO_DEPRECATED +# include "bn.h" +# ifndef OPENSSL_NO_RSA +# include "rsa.h" +# endif +# ifndef OPENSSL_NO_DSA +# include "dsa.h" +# endif +# ifndef OPENSSL_NO_DH +# include "dh.h" +# endif +# ifndef OPENSSL_NO_ECDH +# include "ecdh.h" +# endif +# ifndef OPENSSL_NO_ECDSA +# include "ecdsa.h" +# endif +# include "rand.h" +# include "ui.h" +# include "err.h" +# endif + +# include "ossl_typ.h" +# include "symhacks.h" + +# include "x509.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * These flags are used to control combinations of algorithm (methods) by + * bitwise "OR"ing. + */ +# define ENGINE_METHOD_RSA (unsigned int)0x0001 +# define ENGINE_METHOD_DSA (unsigned int)0x0002 +# define ENGINE_METHOD_DH (unsigned int)0x0004 +# define ENGINE_METHOD_RAND (unsigned int)0x0008 +# define ENGINE_METHOD_ECDH (unsigned int)0x0010 +# define ENGINE_METHOD_ECDSA (unsigned int)0x0020 +# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 +# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 +# define ENGINE_METHOD_STORE (unsigned int)0x0100 +# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 +# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 +/* Obvious all-or-nothing cases. */ +# define ENGINE_METHOD_ALL (unsigned int)0xFFFF +# define ENGINE_METHOD_NONE (unsigned int)0x0000 + +/* + * This(ese) flag(s) controls behaviour of the ENGINE_TABLE mechanism used + * internally to control registration of ENGINE implementations, and can be + * set by ENGINE_set_table_flags(). The "NOINIT" flag prevents attempts to + * initialise registered ENGINEs if they are not already initialised. + */ +# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 + +/* ENGINE flags that can be set by ENGINE_set_flags(). */ +/* Not used */ +/* #define ENGINE_FLAGS_MALLOCED 0x0001 */ + +/* + * This flag is for ENGINEs that wish to handle the various 'CMD'-related + * control commands on their own. Without this flag, ENGINE_ctrl() handles + * these control commands on behalf of the ENGINE using their "cmd_defns" + * data. + */ +# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 + +/* + * This flag is for ENGINEs who return new duplicate structures when found + * via "ENGINE_by_id()". When an ENGINE must store state (eg. if + * ENGINE_ctrl() commands are called in sequence as part of some stateful + * process like key-generation setup and execution), it can set this flag - + * then each attempt to obtain the ENGINE will result in it being copied into + * a new structure. Normally, ENGINEs don't declare this flag so + * ENGINE_by_id() just increments the existing ENGINE's structural reference + * count. + */ +# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 + +/* + * This flag if for an ENGINE that does not want its methods registered as + * part of ENGINE_register_all_complete() for example if the methods are not + * usable as default methods. + */ + +# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 + +/* + * ENGINEs can support their own command types, and these flags are used in + * ENGINE_CTRL_GET_CMD_FLAGS to indicate to the caller what kind of input + * each command expects. Currently only numeric and string input is + * supported. If a control command supports none of the _NUMERIC, _STRING, or + * _NO_INPUT options, then it is regarded as an "internal" control command - + * and not for use in config setting situations. As such, they're not + * available to the ENGINE_ctrl_cmd_string() function, only raw ENGINE_ctrl() + * access. Changes to this list of 'command types' should be reflected + * carefully in ENGINE_cmd_is_executable() and ENGINE_ctrl_cmd_string(). + */ + +/* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ +# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 +/* + * accepts string input (cast from 'void*' to 'const char *', 4th parameter + * to ENGINE_ctrl) + */ +# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 +/* + * Indicates that the control command takes *no* input. Ie. the control + * command is unparameterised. + */ +# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 +/* + * Indicates that the control command is internal. This control command won't + * be shown in any output, and is only usable through the ENGINE_ctrl_cmd() + * function. + */ +# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 + +/* + * NB: These 3 control commands are deprecated and should not be used. + * ENGINEs relying on these commands should compile conditional support for + * compatibility (eg. if these symbols are defined) but should also migrate + * the same functionality to their own ENGINE-specific control functions that + * can be "discovered" by calling applications. The fact these control + * commands wouldn't be "executable" (ie. usable by text-based config) + * doesn't change the fact that application code can find and use them + * without requiring per-ENGINE hacking. + */ + +/* + * These flags are used to tell the ctrl function what should be done. All + * command numbers are shared between all engines, even if some don't make + * sense to some engines. In such a case, they do nothing but return the + * error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED. + */ +# define ENGINE_CTRL_SET_LOGSTREAM 1 +# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 +# define ENGINE_CTRL_HUP 3/* Close and reinitialise + * any handles/connections + * etc. */ +# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ +# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used + * when calling the password + * callback and the user + * interface */ +# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, + * given a string that + * represents a file name + * or so */ +# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given + * section in the already + * loaded configuration */ + +/* + * These control commands allow an application to deal with an arbitrary + * engine in a dynamic way. Warn: Negative return values indicate errors FOR + * THESE COMMANDS because zero is used to indicate 'end-of-list'. Other + * commands, including ENGINE-specific command types, return zero for an + * error. An ENGINE can choose to implement these ctrl functions, and can + * internally manage things however it chooses - it does so by setting the + * ENGINE_FLAGS_MANUAL_CMD_CTRL flag (using ENGINE_set_flags()). Otherwise + * the ENGINE_ctrl() code handles this on the ENGINE's behalf using the + * cmd_defns data (set using ENGINE_set_cmd_defns()). This means an ENGINE's + * ctrl() handler need only implement its own commands - the above "meta" + * commands will be taken care of. + */ + +/* + * Returns non-zero if the supplied ENGINE has a ctrl() handler. If "not", + * then all the remaining control commands will return failure, so it is + * worth checking this first if the caller is trying to "discover" the + * engine's capabilities and doesn't want errors generated unnecessarily. + */ +# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 +/* + * Returns a positive command number for the first command supported by the + * engine. Returns zero if no ctrl commands are supported. + */ +# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 +/* + * The 'long' argument specifies a command implemented by the engine, and the + * return value is the next command supported, or zero if there are no more. + */ +# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 +/* + * The 'void*' argument is a command name (cast from 'const char *'), and the + * return value is the command that corresponds to it. + */ +# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 +/* + * The next two allow a command to be converted into its corresponding string + * form. In each case, the 'long' argument supplies the command. In the + * NAME_LEN case, the return value is the length of the command name (not + * counting a trailing EOL). In the NAME case, the 'void*' argument must be a + * string buffer large enough, and it will be populated with the name of the + * command (WITH a trailing EOL). + */ +# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 +# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 +/* The next two are similar but give a "short description" of a command. */ +# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 +# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 +/* + * With this command, the return value is the OR'd combination of + * ENGINE_CMD_FLAG_*** values that indicate what kind of input a given + * engine-specific ctrl command expects. + */ +# define ENGINE_CTRL_GET_CMD_FLAGS 18 + +/* + * ENGINE implementations should start the numbering of their own control + * commands from this value. (ie. ENGINE_CMD_BASE, ENGINE_CMD_BASE + 1, etc). + */ +# define ENGINE_CMD_BASE 200 + +/* + * NB: These 2 nCipher "chil" control commands are deprecated, and their + * functionality is now available through ENGINE-specific control commands + * (exposed through the above-mentioned 'CMD'-handling). Code using these 2 + * commands should be migrated to the more general command handling before + * these are removed. + */ + +/* Flags specific to the nCipher "chil" engine */ +# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 + /* + * Depending on the value of the (long)i argument, this sets or + * unsets the SimpleForkCheck flag in the CHIL API to enable or + * disable checking and workarounds for applications that fork(). + */ +# define ENGINE_CTRL_CHIL_NO_LOCKING 101 + /* + * This prevents the initialisation function from providing mutex + * callbacks to the nCipher library. + */ + +/* + * If an ENGINE supports its own specific control commands and wishes the + * framework to handle the above 'ENGINE_CMD_***'-manipulation commands on + * its behalf, it should supply a null-terminated array of ENGINE_CMD_DEFN + * entries to ENGINE_set_cmd_defns(). It should also implement a ctrl() + * handler that supports the stated commands (ie. the "cmd_num" entries as + * described by the array). NB: The array must be ordered in increasing order + * of cmd_num. "null-terminated" means that the last ENGINE_CMD_DEFN element + * has cmd_num set to zero and/or cmd_name set to NULL. + */ +typedef struct ENGINE_CMD_DEFN_st { + unsigned int cmd_num; /* The command number */ + const char *cmd_name; /* The command name itself */ + const char *cmd_desc; /* A short description of the command */ + unsigned int cmd_flags; /* The input the command expects */ +} ENGINE_CMD_DEFN; + +/* Generic function pointer */ +typedef int (*ENGINE_GEN_FUNC_PTR) (void); +/* Generic function pointer taking no arguments */ +typedef int (*ENGINE_GEN_INT_FUNC_PTR) (ENGINE *); +/* Specific control function pointer */ +typedef int (*ENGINE_CTRL_FUNC_PTR) (ENGINE *, int, long, void *, + void (*f) (void)); +/* Generic load_key function pointer */ +typedef EVP_PKEY *(*ENGINE_LOAD_KEY_PTR)(ENGINE *, const char *, + UI_METHOD *ui_method, + void *callback_data); +typedef int (*ENGINE_SSL_CLIENT_CERT_PTR) (ENGINE *, SSL *ssl, + STACK_OF(X509_NAME) *ca_dn, + X509 **pcert, EVP_PKEY **pkey, + STACK_OF(X509) **pother, + UI_METHOD *ui_method, + void *callback_data); +/*- + * These callback types are for an ENGINE's handler for cipher and digest logic. + * These handlers have these prototypes; + * int foo(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid); + * int foo(ENGINE *e, const EVP_MD **digest, const int **nids, int nid); + * Looking at how to implement these handlers in the case of cipher support, if + * the framework wants the EVP_CIPHER for 'nid', it will call; + * foo(e, &p_evp_cipher, NULL, nid); (return zero for failure) + * If the framework wants a list of supported 'nid's, it will call; + * foo(e, NULL, &p_nids, 0); (returns number of 'nids' or -1 for error) + */ +/* + * Returns to a pointer to the array of supported cipher 'nid's. If the + * second parameter is non-NULL it is set to the size of the returned array. + */ +typedef int (*ENGINE_CIPHERS_PTR) (ENGINE *, const EVP_CIPHER **, + const int **, int); +typedef int (*ENGINE_DIGESTS_PTR) (ENGINE *, const EVP_MD **, const int **, + int); +typedef int (*ENGINE_PKEY_METHS_PTR) (ENGINE *, EVP_PKEY_METHOD **, + const int **, int); +typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, + const int **, int); +/* + * STRUCTURE functions ... all of these functions deal with pointers to + * ENGINE structures where the pointers have a "structural reference". This + * means that their reference is to allowed access to the structure but it + * does not imply that the structure is functional. To simply increment or + * decrement the structural reference count, use ENGINE_by_id and + * ENGINE_free. NB: This is not required when iterating using ENGINE_get_next + * as it will automatically decrement the structural reference count of the + * "current" ENGINE and increment the structural reference count of the + * ENGINE it returns (unless it is NULL). + */ + +/* Get the first/last "ENGINE" type available. */ +ENGINE *ENGINE_get_first(void); +ENGINE *ENGINE_get_last(void); +/* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */ +ENGINE *ENGINE_get_next(ENGINE *e); +ENGINE *ENGINE_get_prev(ENGINE *e); +/* Add another "ENGINE" type into the array. */ +int ENGINE_add(ENGINE *e); +/* Remove an existing "ENGINE" type from the array. */ +int ENGINE_remove(ENGINE *e); +/* Retrieve an engine from the list by its unique "id" value. */ +ENGINE *ENGINE_by_id(const char *id); +/* Add all the built-in engines. */ +void ENGINE_load_openssl(void); +void ENGINE_load_dynamic(void); +# ifndef OPENSSL_NO_STATIC_ENGINE +void ENGINE_load_4758cca(void); +void ENGINE_load_aep(void); +void ENGINE_load_atalla(void); +void ENGINE_load_chil(void); +void ENGINE_load_cswift(void); +void ENGINE_load_nuron(void); +void ENGINE_load_sureware(void); +void ENGINE_load_ubsec(void); +void ENGINE_load_padlock(void); +void ENGINE_load_capi(void); +# ifndef OPENSSL_NO_GMP +void ENGINE_load_gmp(void); +# endif +# ifndef OPENSSL_NO_GOST +void ENGINE_load_gost(void); +# endif +# endif +void ENGINE_load_cryptodev(void); +void ENGINE_load_rdrand(void); +void ENGINE_load_builtin_engines(void); + +/* + * Get and set global flags (ENGINE_TABLE_FLAG_***) for the implementation + * "registry" handling. + */ +unsigned int ENGINE_get_table_flags(void); +void ENGINE_set_table_flags(unsigned int flags); + +/*- Manage registration of ENGINEs per "table". For each type, there are 3 + * functions; + * ENGINE_register_***(e) - registers the implementation from 'e' (if it has one) + * ENGINE_unregister_***(e) - unregister the implementation from 'e' + * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list + * Cleanup is automatically registered from each table when required, so + * ENGINE_cleanup() will reverse any "register" operations. + */ + +int ENGINE_register_RSA(ENGINE *e); +void ENGINE_unregister_RSA(ENGINE *e); +void ENGINE_register_all_RSA(void); + +int ENGINE_register_DSA(ENGINE *e); +void ENGINE_unregister_DSA(ENGINE *e); +void ENGINE_register_all_DSA(void); + +int ENGINE_register_ECDH(ENGINE *e); +void ENGINE_unregister_ECDH(ENGINE *e); +void ENGINE_register_all_ECDH(void); + +int ENGINE_register_ECDSA(ENGINE *e); +void ENGINE_unregister_ECDSA(ENGINE *e); +void ENGINE_register_all_ECDSA(void); + +int ENGINE_register_DH(ENGINE *e); +void ENGINE_unregister_DH(ENGINE *e); +void ENGINE_register_all_DH(void); + +int ENGINE_register_RAND(ENGINE *e); +void ENGINE_unregister_RAND(ENGINE *e); +void ENGINE_register_all_RAND(void); + +int ENGINE_register_STORE(ENGINE *e); +void ENGINE_unregister_STORE(ENGINE *e); +void ENGINE_register_all_STORE(void); + +int ENGINE_register_ciphers(ENGINE *e); +void ENGINE_unregister_ciphers(ENGINE *e); +void ENGINE_register_all_ciphers(void); + +int ENGINE_register_digests(ENGINE *e); +void ENGINE_unregister_digests(ENGINE *e); +void ENGINE_register_all_digests(void); + +int ENGINE_register_pkey_meths(ENGINE *e); +void ENGINE_unregister_pkey_meths(ENGINE *e); +void ENGINE_register_all_pkey_meths(void); + +int ENGINE_register_pkey_asn1_meths(ENGINE *e); +void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); +void ENGINE_register_all_pkey_asn1_meths(void); + +/* + * These functions register all support from the above categories. Note, use + * of these functions can result in static linkage of code your application + * may not need. If you only need a subset of functionality, consider using + * more selective initialisation. + */ +int ENGINE_register_complete(ENGINE *e); +int ENGINE_register_all_complete(void); + +/* + * Send parametrised 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 + * (rather than functional) reference to an engine, but many control commands + * may require the engine be functional. The caller should be aware of trying + * commands that require an operational ENGINE, and only use functional + * references in such situations. + */ +int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); + +/* + * This function tests if an ENGINE-specific command is usable as a + * "setting". Eg. in an application's config file that gets processed through + * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to + * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl(). + */ +int ENGINE_cmd_is_executable(ENGINE *e, int cmd); + +/* + * This function works like ENGINE_ctrl() with the exception of taking a + * command name instead of a command number, and can handle optional + * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation + * on how to use the cmd_name and cmd_optional. + */ +int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, + long i, void *p, void (*f) (void), int cmd_optional); + +/* + * This function passes a command-name and argument to an ENGINE. The + * cmd_name is converted to a command number and the control command is + * called using 'arg' as an argument (unless the ENGINE doesn't support such + * a command, in which case no control command is called). The command is + * checked for input flags, and if necessary the argument will be converted + * to a numeric value. If cmd_optional is non-zero, then if the ENGINE + * doesn't support the given cmd_name the return value will be success + * anyway. This function is intended for applications to use so that users + * (or config files) can supply engine-specific config data to the ENGINE at + * run-time to control behaviour of specific engines. As such, it shouldn't + * be used for calling ENGINE_ctrl() functions that return data, deal with + * binary data, or that are otherwise supposed to be used directly through + * ENGINE_ctrl() in application code. Any "return" data from an ENGINE_ctrl() + * operation in this function will be lost - the return value is interpreted + * as failure if the return value is zero, success otherwise, and this + * function returns a boolean value as a result. In other words, vendors of + * 'ENGINE'-enabled devices should write ENGINE implementations with + * parameterisations that work in this scheme, so that compliant ENGINE-based + * applications can work consistently with the same configuration for the + * same ENGINE-enabled devices, across applications. + */ +int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, + int cmd_optional); + +/* + * These functions are useful for manufacturing new ENGINE structures. They + * don't address reference counting at all - one uses them to populate an + * ENGINE structure with personalised implementations of things prior to + * using it directly or adding it to the builtin ENGINE list in OpenSSL. + * These are also here so that the ENGINE structure doesn't have to be + * exposed and break binary compatibility! + */ +ENGINE *ENGINE_new(void); +int ENGINE_free(ENGINE *e); +int ENGINE_up_ref(ENGINE *e); +int ENGINE_set_id(ENGINE *e, const char *id); +int ENGINE_set_name(ENGINE *e, const char *name); +int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); +int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); +int ENGINE_set_ECDH(ENGINE *e, const ECDH_METHOD *ecdh_meth); +int ENGINE_set_ECDSA(ENGINE *e, const ECDSA_METHOD *ecdsa_meth); +int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); +int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); +int ENGINE_set_STORE(ENGINE *e, const STORE_METHOD *store_meth); +int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f); +int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); +int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); +int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); +int ENGINE_set_load_privkey_function(ENGINE *e, + ENGINE_LOAD_KEY_PTR loadpriv_f); +int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); +int ENGINE_set_load_ssl_client_cert_function(ENGINE *e, + ENGINE_SSL_CLIENT_CERT_PTR + loadssl_f); +int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); +int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); +int ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f); +int ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f); +int ENGINE_set_flags(ENGINE *e, int flags); +int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); +/* These functions allow control over any per-structure ENGINE data. */ +int ENGINE_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); +void *ENGINE_get_ex_data(const ENGINE *e, int idx); + +/* + * This function cleans up anything that needs it. Eg. the ENGINE_add() + * function automatically ensures the list cleanup function is registered to + * be called from ENGINE_cleanup(). Similarly, all ENGINE_register_*** + * functions ensure ENGINE_cleanup() will clean up after them. + */ +void ENGINE_cleanup(void); + +/* + * These return values from within the ENGINE structure. These can be useful + * with functional references as well as structural references - it depends + * which you obtained. Using the result for functional purposes if you only + * obtained a structural reference may be problematic! + */ +const char *ENGINE_get_id(const ENGINE *e); +const char *ENGINE_get_name(const ENGINE *e); +const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); +const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); +const ECDH_METHOD *ENGINE_get_ECDH(const ENGINE *e); +const ECDSA_METHOD *ENGINE_get_ECDSA(const ENGINE *e); +const DH_METHOD *ENGINE_get_DH(const ENGINE *e); +const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); +const STORE_METHOD *ENGINE_get_STORE(const ENGINE *e); +ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e); +ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e); +ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); +ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); +ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); +ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); +ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE + *e); +ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); +ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); +ENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e); +ENGINE_PKEY_ASN1_METHS_PTR ENGINE_get_pkey_asn1_meths(const ENGINE *e); +const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); +const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); +const EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid); +const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid); +const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e, + const char *str, + int len); +const EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe, + const char *str, + int len); +const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); +int ENGINE_get_flags(const ENGINE *e); + +/* + * FUNCTIONAL functions. These functions deal with ENGINE structures that + * have (or will) be initialised for use. Broadly speaking, the structural + * functions are useful for iterating the list of available engine types, + * creating new engine types, and other "list" operations. These functions + * actually deal with ENGINEs that are to be used. As such these functions + * can fail (if applicable) when particular engines are unavailable - eg. if + * a hardware accelerator is not attached or not functioning correctly. Each + * ENGINE has 2 reference counts; structural and functional. Every time a + * functional reference is obtained or released, a corresponding structural + * reference is automatically obtained or released too. + */ + +/* + * Initialise a engine type for use (or up its reference count if it's + * already in use). This will fail if the engine is not currently operational + * and cannot initialise. + */ +int ENGINE_init(ENGINE *e); +/* + * Free a functional reference to a engine type. This does not require a + * corresponding call to ENGINE_free as it also releases a structural + * reference. + */ +int ENGINE_finish(ENGINE *e); + +/* + * The following functions handle keys that are stored in some secondary + * location, handled by the engine. The storage may be on a card or + * whatever. + */ +EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, + UI_METHOD *ui_method, void *callback_data); +EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, + UI_METHOD *ui_method, void *callback_data); +int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, + STACK_OF(X509_NAME) *ca_dn, X509 **pcert, + EVP_PKEY **ppkey, STACK_OF(X509) **pother, + UI_METHOD *ui_method, void *callback_data); + +/* + * This returns a pointer for the current ENGINE structure that is (by + * default) performing any RSA operations. The value returned is an + * incremented reference, so it should be free'd (ENGINE_finish) before it is + * discarded. + */ +ENGINE *ENGINE_get_default_RSA(void); +/* Same for the other "methods" */ +ENGINE *ENGINE_get_default_DSA(void); +ENGINE *ENGINE_get_default_ECDH(void); +ENGINE *ENGINE_get_default_ECDSA(void); +ENGINE *ENGINE_get_default_DH(void); +ENGINE *ENGINE_get_default_RAND(void); +/* + * These functions can be used to get a functional reference to perform + * ciphering or digesting corresponding to "nid". + */ +ENGINE *ENGINE_get_cipher_engine(int nid); +ENGINE *ENGINE_get_digest_engine(int nid); +ENGINE *ENGINE_get_pkey_meth_engine(int nid); +ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); + +/* + * This sets a new default ENGINE structure for performing RSA operations. If + * the result is non-zero (success) then the ENGINE structure will have had + * its reference count up'd so the caller should still free their own + * reference 'e'. + */ +int ENGINE_set_default_RSA(ENGINE *e); +int ENGINE_set_default_string(ENGINE *e, const char *def_list); +/* Same for the other "methods" */ +int ENGINE_set_default_DSA(ENGINE *e); +int ENGINE_set_default_ECDH(ENGINE *e); +int ENGINE_set_default_ECDSA(ENGINE *e); +int ENGINE_set_default_DH(ENGINE *e); +int ENGINE_set_default_RAND(ENGINE *e); +int ENGINE_set_default_ciphers(ENGINE *e); +int ENGINE_set_default_digests(ENGINE *e); +int ENGINE_set_default_pkey_meths(ENGINE *e); +int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); + +/* + * The combination "set" - the flags are bitwise "OR"d from the + * ENGINE_METHOD_*** defines above. As with the "ENGINE_register_complete()" + * function, this function can result in unnecessary static linkage. If your + * application requires only specific functionality, consider using more + * selective functions. + */ +int ENGINE_set_default(ENGINE *e, unsigned int flags); + +void ENGINE_add_conf_module(void); + +/* Deprecated functions ... */ +/* int ENGINE_clear_defaults(void); */ + +/**************************/ +/* DYNAMIC ENGINE SUPPORT */ +/**************************/ + +/* Binary/behaviour compatibility levels */ +# define OSSL_DYNAMIC_VERSION (unsigned long)0x00020000 +/* + * Binary versions older than this are too old for us (whether we're a loader + * or a loadee) + */ +# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00020000 + +/* + * When compiling an ENGINE entirely as an external shared library, loadable + * by the "dynamic" ENGINE, these types are needed. The 'dynamic_fns' + * structure type provides the calling application's (or library's) error + * functionality and memory management function pointers to the loaded + * library. These should be used/set in the loaded library code so that the + * loading application's 'state' will be used/changed in all operations. The + * 'static_state' pointer allows the loaded library to know if it shares the + * same static data as the calling application (or library), and thus whether + * these callbacks need to be set or not. + */ +typedef void *(*dyn_MEM_malloc_cb) (size_t); +typedef void *(*dyn_MEM_realloc_cb) (void *, size_t); +typedef void (*dyn_MEM_free_cb) (void *); +typedef struct st_dynamic_MEM_fns { + dyn_MEM_malloc_cb malloc_cb; + dyn_MEM_realloc_cb realloc_cb; + dyn_MEM_free_cb free_cb; +} dynamic_MEM_fns; +/* + * FIXME: Perhaps the memory and locking code (crypto.h) should declare and + * use these types so we (and any other dependant code) can simplify a bit?? + */ +typedef void (*dyn_lock_locking_cb) (int, int, const char *, int); +typedef int (*dyn_lock_add_lock_cb) (int *, int, int, const char *, int); +typedef struct CRYPTO_dynlock_value *(*dyn_dynlock_create_cb) (const char *, + int); +typedef void (*dyn_dynlock_lock_cb) (int, struct CRYPTO_dynlock_value *, + const char *, int); +typedef void (*dyn_dynlock_destroy_cb) (struct CRYPTO_dynlock_value *, + const char *, int); +typedef struct st_dynamic_LOCK_fns { + dyn_lock_locking_cb lock_locking_cb; + dyn_lock_add_lock_cb lock_add_lock_cb; + dyn_dynlock_create_cb dynlock_create_cb; + dyn_dynlock_lock_cb dynlock_lock_cb; + dyn_dynlock_destroy_cb dynlock_destroy_cb; +} dynamic_LOCK_fns; +/* The top-level structure */ +typedef struct st_dynamic_fns { + void *static_state; + const ERR_FNS *err_fns; + const CRYPTO_EX_DATA_IMPL *ex_data_fns; + dynamic_MEM_fns mem_fns; + dynamic_LOCK_fns lock_fns; +} dynamic_fns; + +/* + * The version checking function should be of this prototype. NB: The + * ossl_version value passed in is the OSSL_DYNAMIC_VERSION of the loading + * code. If this function returns zero, it indicates a (potential) version + * incompatibility and the loaded library doesn't believe it can proceed. + * Otherwise, the returned value is the (latest) version supported by the + * loading library. The loader may still decide that the loaded code's + * version is unsatisfactory and could veto the load. The function is + * expected to be implemented with the symbol name "v_check", and a default + * implementation can be fully instantiated with + * IMPLEMENT_DYNAMIC_CHECK_FN(). + */ +typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); +# define IMPLEMENT_DYNAMIC_CHECK_FN() \ + OPENSSL_EXPORT unsigned long v_check(unsigned long v); \ + OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \ + if(v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \ + return 0; } + +/* + * This function is passed the ENGINE structure to initialise with its own + * function and command settings. It should not adjust the structural or + * functional reference counts. If this function returns zero, (a) the load + * will be aborted, (b) the previous ENGINE state will be memcpy'd back onto + * the structure, and (c) the shared library will be unloaded. So + * implementations should do their own internal cleanup in failure + * circumstances otherwise they could leak. The 'id' parameter, if non-NULL, + * represents the ENGINE id that the loader is looking for. If this is NULL, + * the shared library can choose to return failure or to initialise a + * 'default' ENGINE. If non-NULL, the shared library must initialise only an + * ENGINE matching the passed 'id'. The function is expected to be + * implemented with the symbol name "bind_engine". A standard implementation + * can be instantiated with IMPLEMENT_DYNAMIC_BIND_FN(fn) where the parameter + * 'fn' is a callback function that populates the ENGINE structure and + * returns an int value (zero for failure). 'fn' should have prototype; + * [static] int fn(ENGINE *e, const char *id); + */ +typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, + const dynamic_fns *fns); +# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ + OPENSSL_EXPORT \ + int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ + OPENSSL_EXPORT \ + int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \ + if(ENGINE_get_static_state() == fns->static_state) goto skip_cbs; \ + if(!CRYPTO_set_mem_functions(fns->mem_fns.malloc_cb, \ + fns->mem_fns.realloc_cb, fns->mem_fns.free_cb)) \ + return 0; \ + CRYPTO_set_locking_callback(fns->lock_fns.lock_locking_cb); \ + CRYPTO_set_add_lock_callback(fns->lock_fns.lock_add_lock_cb); \ + CRYPTO_set_dynlock_create_callback(fns->lock_fns.dynlock_create_cb); \ + CRYPTO_set_dynlock_lock_callback(fns->lock_fns.dynlock_lock_cb); \ + CRYPTO_set_dynlock_destroy_callback(fns->lock_fns.dynlock_destroy_cb); \ + if(!CRYPTO_set_ex_data_implementation(fns->ex_data_fns)) \ + return 0; \ + if(!ERR_set_implementation(fns->err_fns)) return 0; \ + skip_cbs: \ + if(!fn(e,id)) return 0; \ + return 1; } + +/* + * If the loading application (or library) and the loaded ENGINE library + * share the same static data (eg. they're both dynamically linked to the + * same libcrypto.so) we need a way to avoid trying to set system callbacks - + * this would fail, and for the same reason that it's unnecessary to try. If + * the loaded ENGINE has (or gets from through the loader) its own copy of + * the libcrypto static data, we will need to set the callbacks. The easiest + * way to detect this is to have a function that returns a pointer to some + * static data and let the loading application and loaded ENGINE compare + * their respective values. + */ +void *ENGINE_get_static_state(void); + +# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV) +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. + */ +void 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_FREE_UTIL 108 +# define ENGINE_F_ENGINE_GET_CIPHER 185 +# define ENGINE_F_ENGINE_GET_DEFAULT_TYPE 177 +# define ENGINE_F_ENGINE_GET_DIGEST 186 +# 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_REMOVE 123 +# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 +# define ENGINE_F_ENGINE_SET_DEFAULT_TYPE 126 +# 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_UNLOAD_KEY 152 +# 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 +# define ENGINE_F_LOG_MESSAGE 141 + +/* 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_DH_NOT_IMPLEMENTED 139 +# define ENGINE_R_DSA_NOT_IMPLEMENTED 140 +# 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_GET_HANDLE_FAILED 107 +# 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_NO_UNLOAD_FUNCTION 126 +# define ENGINE_R_PROVIDE_PARAMETERS 113 +# define ENGINE_R_RSA_NOT_IMPLEMENTED 141 +# 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 +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/err.h b/Sources/OpenSSL/include/openssl/err.h new file mode 100644 index 0000000000..24184689a0 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/err.h @@ -0,0 +1,389 @@ +/* crypto/err/err.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_ERR_H +# define HEADER_ERR_H + +# include "e_os2.h" + +# ifndef OPENSSL_NO_FP_API +# include +# include +# endif + +# include "ossl_typ.h" +# ifndef OPENSSL_NO_BIO +# include "bio.h" +# endif +# ifndef OPENSSL_NO_LHASH +# include "lhash.h" +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_NO_ERR +# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,d,e) +# else +# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,NULL,0) +# endif + +# include + +# define ERR_TXT_MALLOCED 0x01 +# define ERR_TXT_STRING 0x02 + +# define ERR_FLAG_MARK 0x01 + +# define ERR_NUM_ERRORS 16 +typedef struct err_state_st { + CRYPTO_THREADID tid; + int err_flags[ERR_NUM_ERRORS]; + unsigned long err_buffer[ERR_NUM_ERRORS]; + char *err_data[ERR_NUM_ERRORS]; + int err_data_flags[ERR_NUM_ERRORS]; + const char *err_file[ERR_NUM_ERRORS]; + int err_line[ERR_NUM_ERRORS]; + int top, bottom; +} ERR_STATE; + +/* library */ +# define ERR_LIB_NONE 1 +# define ERR_LIB_SYS 2 +# define ERR_LIB_BN 3 +# define ERR_LIB_RSA 4 +# define ERR_LIB_DH 5 +# define ERR_LIB_EVP 6 +# define ERR_LIB_BUF 7 +# define ERR_LIB_OBJ 8 +# define ERR_LIB_PEM 9 +# define ERR_LIB_DSA 10 +# define ERR_LIB_X509 11 +/* #define ERR_LIB_METH 12 */ +# define ERR_LIB_ASN1 13 +# define ERR_LIB_CONF 14 +# define ERR_LIB_CRYPTO 15 +# define ERR_LIB_EC 16 +# define ERR_LIB_SSL 20 +/* #define ERR_LIB_SSL23 21 */ +/* #define ERR_LIB_SSL2 22 */ +/* #define ERR_LIB_SSL3 23 */ +/* #define ERR_LIB_RSAREF 30 */ +/* #define ERR_LIB_PROXY 31 */ +# define ERR_LIB_BIO 32 +# define ERR_LIB_PKCS7 33 +# define ERR_LIB_X509V3 34 +# define ERR_LIB_PKCS12 35 +# define ERR_LIB_RAND 36 +# define ERR_LIB_DSO 37 +# define ERR_LIB_ENGINE 38 +# define ERR_LIB_OCSP 39 +# define ERR_LIB_UI 40 +# define ERR_LIB_COMP 41 +# define ERR_LIB_ECDSA 42 +# define ERR_LIB_ECDH 43 +# define ERR_LIB_STORE 44 +# define ERR_LIB_FIPS 45 +# define ERR_LIB_CMS 46 +# define ERR_LIB_TS 47 +# define ERR_LIB_HMAC 48 +# define ERR_LIB_JPAKE 49 + +# define ERR_LIB_USER 128 + +# define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),__FILE__,__LINE__) +# define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),__FILE__,__LINE__) +# define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),__FILE__,__LINE__) +# define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),__FILE__,__LINE__) +# define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),__FILE__,__LINE__) +# define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),__FILE__,__LINE__) +# define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),__FILE__,__LINE__) +# define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),__FILE__,__LINE__) +# define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),__FILE__,__LINE__) +# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),__FILE__,__LINE__) +# define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),__FILE__,__LINE__) +# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),__FILE__,__LINE__) +# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),__FILE__,__LINE__) +# define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),__FILE__,__LINE__) +# define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),__FILE__,__LINE__) +# define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),__FILE__,__LINE__) +# define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),__FILE__,__LINE__) +# define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),__FILE__,__LINE__) +# define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),__FILE__,__LINE__) +# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),__FILE__,__LINE__) +# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),__FILE__,__LINE__) +# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),__FILE__,__LINE__) +# define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),__FILE__,__LINE__) +# define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),__FILE__,__LINE__) +# define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),__FILE__,__LINE__) +# define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),__FILE__,__LINE__) +# define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),__FILE__,__LINE__) +# define STOREerr(f,r) ERR_PUT_error(ERR_LIB_STORE,(f),(r),__FILE__,__LINE__) +# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),__FILE__,__LINE__) +# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),__FILE__,__LINE__) +# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),__FILE__,__LINE__) +# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),__FILE__,__LINE__) +# define JPAKEerr(f,r) ERR_PUT_error(ERR_LIB_JPAKE,(f),(r),__FILE__,__LINE__) + +/* + * Borland C seems too stupid to be able to shift and do longs in the + * pre-processor :-( + */ +# define ERR_PACK(l,f,r) (((((unsigned long)l)&0xffL)*0x1000000)| \ + ((((unsigned long)f)&0xfffL)*0x1000)| \ + ((((unsigned long)r)&0xfffL))) +# define ERR_GET_LIB(l) (int)((((unsigned long)l)>>24L)&0xffL) +# define ERR_GET_FUNC(l) (int)((((unsigned long)l)>>12L)&0xfffL) +# define ERR_GET_REASON(l) (int)((l)&0xfffL) +# define ERR_FATAL_ERROR(l) (int)((l)&ERR_R_FATAL) + +/* OS functions */ +# define SYS_F_FOPEN 1 +# define SYS_F_CONNECT 2 +# define SYS_F_GETSERVBYNAME 3 +# define SYS_F_SOCKET 4 +# define SYS_F_IOCTLSOCKET 5 +# define SYS_F_BIND 6 +# define SYS_F_LISTEN 7 +# define SYS_F_ACCEPT 8 +# define SYS_F_WSASTARTUP 9/* Winsock stuff */ +# define SYS_F_OPENDIR 10 +# define SYS_F_FREAD 11 + +/* reasons */ +# define ERR_R_SYS_LIB ERR_LIB_SYS/* 2 */ +# define ERR_R_BN_LIB ERR_LIB_BN/* 3 */ +# define ERR_R_RSA_LIB ERR_LIB_RSA/* 4 */ +# define ERR_R_DH_LIB ERR_LIB_DH/* 5 */ +# define ERR_R_EVP_LIB ERR_LIB_EVP/* 6 */ +# define ERR_R_BUF_LIB ERR_LIB_BUF/* 7 */ +# define ERR_R_OBJ_LIB ERR_LIB_OBJ/* 8 */ +# define ERR_R_PEM_LIB ERR_LIB_PEM/* 9 */ +# define ERR_R_DSA_LIB ERR_LIB_DSA/* 10 */ +# define ERR_R_X509_LIB ERR_LIB_X509/* 11 */ +# define ERR_R_ASN1_LIB ERR_LIB_ASN1/* 13 */ +# define ERR_R_CONF_LIB ERR_LIB_CONF/* 14 */ +# define ERR_R_CRYPTO_LIB ERR_LIB_CRYPTO/* 15 */ +# define ERR_R_EC_LIB ERR_LIB_EC/* 16 */ +# define ERR_R_SSL_LIB ERR_LIB_SSL/* 20 */ +# define ERR_R_BIO_LIB ERR_LIB_BIO/* 32 */ +# define ERR_R_PKCS7_LIB ERR_LIB_PKCS7/* 33 */ +# define ERR_R_X509V3_LIB ERR_LIB_X509V3/* 34 */ +# define ERR_R_PKCS12_LIB ERR_LIB_PKCS12/* 35 */ +# define ERR_R_RAND_LIB ERR_LIB_RAND/* 36 */ +# define ERR_R_DSO_LIB ERR_LIB_DSO/* 37 */ +# define ERR_R_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ +# define ERR_R_OCSP_LIB ERR_LIB_OCSP/* 39 */ +# define ERR_R_UI_LIB ERR_LIB_UI/* 40 */ +# define ERR_R_COMP_LIB ERR_LIB_COMP/* 41 */ +# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ +# define ERR_R_ECDH_LIB ERR_LIB_ECDH/* 43 */ +# define ERR_R_STORE_LIB ERR_LIB_STORE/* 44 */ +# define ERR_R_TS_LIB ERR_LIB_TS/* 45 */ + +# define ERR_R_NESTED_ASN1_ERROR 58 +# define ERR_R_BAD_ASN1_OBJECT_HEADER 59 +# define ERR_R_BAD_GET_ASN1_OBJECT_CALL 60 +# define ERR_R_EXPECTING_AN_ASN1_SEQUENCE 61 +# define ERR_R_ASN1_LENGTH_MISMATCH 62 +# define ERR_R_MISSING_ASN1_EOS 63 + +/* fatal error */ +# define ERR_R_FATAL 64 +# define ERR_R_MALLOC_FAILURE (1|ERR_R_FATAL) +# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL) +# define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL) +# define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL) +# define ERR_R_DISABLED (5|ERR_R_FATAL) + +/* + * 99 is the maximum possible ERR_R_... code, higher values are reserved for + * the individual libraries + */ + +typedef struct ERR_string_data_st { + unsigned long error; + const char *string; +} ERR_STRING_DATA; + +void ERR_put_error(int lib, int func, int reason, const char *file, int line); +void ERR_set_error_data(char *data, int flags); + +unsigned long ERR_get_error(void); +unsigned long ERR_get_error_line(const char **file, int *line); +unsigned long ERR_get_error_line_data(const char **file, int *line, + const char **data, int *flags); +unsigned long ERR_peek_error(void); +unsigned long ERR_peek_error_line(const char **file, int *line); +unsigned long ERR_peek_error_line_data(const char **file, int *line, + const char **data, int *flags); +unsigned long ERR_peek_last_error(void); +unsigned long ERR_peek_last_error_line(const char **file, int *line); +unsigned long ERR_peek_last_error_line_data(const char **file, int *line, + const char **data, int *flags); +void ERR_clear_error(void); +char *ERR_error_string(unsigned long e, char *buf); +void ERR_error_string_n(unsigned long e, char *buf, size_t len); +const char *ERR_lib_error_string(unsigned long e); +const char *ERR_func_error_string(unsigned long e); +const char *ERR_reason_error_string(unsigned long e); +void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), + void *u); +# ifndef OPENSSL_NO_FP_API +void ERR_print_errors_fp(FILE *fp); +# endif +# ifndef OPENSSL_NO_BIO +void ERR_print_errors(BIO *bp); +# endif +void ERR_add_error_data(int num, ...); +void ERR_add_error_vdata(int num, va_list args); +void ERR_load_strings(int lib, ERR_STRING_DATA str[]); +void ERR_unload_strings(int lib, ERR_STRING_DATA str[]); +void ERR_load_ERR_strings(void); +void ERR_load_crypto_strings(void); +void ERR_free_strings(void); + +void ERR_remove_thread_state(const CRYPTO_THREADID *tid); +# ifndef OPENSSL_NO_DEPRECATED +void ERR_remove_state(unsigned long pid); /* if zero we look it up */ +# endif +ERR_STATE *ERR_get_state(void); + +# ifndef OPENSSL_NO_LHASH +LHASH_OF(ERR_STRING_DATA) *ERR_get_string_table(void); +LHASH_OF(ERR_STATE) *ERR_get_err_state_table(void); +void ERR_release_err_state_table(LHASH_OF(ERR_STATE) **hash); +# endif + +int ERR_get_next_error_library(void); + +int ERR_set_mark(void); +int ERR_pop_to_mark(void); + +/* Already defined in ossl_typ.h */ +/* typedef struct st_ERR_FNS ERR_FNS; */ +/* + * An application can use this function and provide the return value to + * loaded modules that should use the application's ERR state/functionality + */ +const ERR_FNS *ERR_get_implementation(void); +/* + * A loaded module should call this function prior to any ERR operations + * using the application's "ERR_FNS". + */ +int ERR_set_implementation(const ERR_FNS *fns); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/evp.h b/Sources/OpenSSL/include/openssl/evp.h new file mode 100644 index 0000000000..a3d33d7c5c --- /dev/null +++ b/Sources/OpenSSL/include/openssl/evp.h @@ -0,0 +1,1534 @@ +/* crypto/evp/evp.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_ENVELOPE_H +# define HEADER_ENVELOPE_H + +# ifdef OPENSSL_ALGORITHM_DEFINES +# include "opensslconf.h" +# else +# define OPENSSL_ALGORITHM_DEFINES +# include "opensslconf.h" +# undef OPENSSL_ALGORITHM_DEFINES +# endif + +# include "ossl_typ.h" + +# include "symhacks.h" + +# ifndef OPENSSL_NO_BIO +# include "bio.h" +# endif + +/*- +#define EVP_RC2_KEY_SIZE 16 +#define EVP_RC4_KEY_SIZE 16 +#define EVP_BLOWFISH_KEY_SIZE 16 +#define EVP_CAST5_KEY_SIZE 16 +#define EVP_RC5_32_12_16_KEY_SIZE 16 +*/ +# define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ +# define EVP_MAX_KEY_LENGTH 64 +# define EVP_MAX_IV_LENGTH 16 +# define EVP_MAX_BLOCK_LENGTH 32 + +# define PKCS5_SALT_LEN 8 +/* Default PKCS#5 iteration count */ +# define PKCS5_DEFAULT_ITER 2048 + +# include "objects.h" + +# define EVP_PK_RSA 0x0001 +# define EVP_PK_DSA 0x0002 +# define EVP_PK_DH 0x0004 +# define EVP_PK_EC 0x0008 +# define EVP_PKT_SIGN 0x0010 +# define EVP_PKT_ENC 0x0020 +# define EVP_PKT_EXCH 0x0040 +# define EVP_PKS_RSA 0x0100 +# define EVP_PKS_DSA 0x0200 +# define EVP_PKS_EC 0x0400 + +# define EVP_PKEY_NONE NID_undef +# define EVP_PKEY_RSA NID_rsaEncryption +# define EVP_PKEY_RSA2 NID_rsa +# define EVP_PKEY_DSA NID_dsa +# define EVP_PKEY_DSA1 NID_dsa_2 +# define EVP_PKEY_DSA2 NID_dsaWithSHA +# define EVP_PKEY_DSA3 NID_dsaWithSHA1 +# define EVP_PKEY_DSA4 NID_dsaWithSHA1_2 +# define EVP_PKEY_DH NID_dhKeyAgreement +# define EVP_PKEY_DHX NID_dhpublicnumber +# define EVP_PKEY_EC NID_X9_62_id_ecPublicKey +# define EVP_PKEY_HMAC NID_hmac +# define EVP_PKEY_CMAC NID_cmac + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Type needs to be a bit field Sub-type needs to be for variations on the + * method, as in, can it do arbitrary encryption.... + */ +struct evp_pkey_st { + int type; + int save_type; + int references; + const EVP_PKEY_ASN1_METHOD *ameth; + ENGINE *engine; + union { + char *ptr; +# ifndef OPENSSL_NO_RSA + struct rsa_st *rsa; /* RSA */ +# endif +# ifndef OPENSSL_NO_DSA + struct dsa_st *dsa; /* DSA */ +# endif +# ifndef OPENSSL_NO_DH + struct dh_st *dh; /* DH */ +# endif +# ifndef OPENSSL_NO_EC + struct ec_key_st *ec; /* ECC */ +# endif + } pkey; + int save_parameters; + STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ +} /* EVP_PKEY */ ; + +# define EVP_PKEY_MO_SIGN 0x0001 +# define EVP_PKEY_MO_VERIFY 0x0002 +# define EVP_PKEY_MO_ENCRYPT 0x0004 +# define EVP_PKEY_MO_DECRYPT 0x0008 + +# ifndef EVP_MD +struct env_md_st { + int type; + int pkey_type; + int md_size; + unsigned long flags; + int (*init) (EVP_MD_CTX *ctx); + int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); + int (*final) (EVP_MD_CTX *ctx, unsigned char *md); + int (*copy) (EVP_MD_CTX *to, const EVP_MD_CTX *from); + int (*cleanup) (EVP_MD_CTX *ctx); + /* FIXME: prototype these some day */ + int (*sign) (int type, const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, void *key); + int (*verify) (int type, const unsigned char *m, unsigned int m_length, + const unsigned char *sigbuf, unsigned int siglen, + void *key); + int required_pkey_type[5]; /* EVP_PKEY_xxx */ + int block_size; + int ctx_size; /* how big does the ctx->md_data need to be */ + /* control function */ + int (*md_ctrl) (EVP_MD_CTX *ctx, int cmd, int p1, void *p2); +} /* EVP_MD */ ; + +typedef int evp_sign_method(int type, const unsigned char *m, + unsigned int m_length, unsigned char *sigret, + unsigned int *siglen, void *key); +typedef int evp_verify_method(int type, const unsigned char *m, + unsigned int m_length, + const unsigned char *sigbuf, + unsigned int siglen, void *key); + +/* digest can only handle a single block */ +# define EVP_MD_FLAG_ONESHOT 0x0001 + +/* + * digest is a "clone" digest used + * which is a copy of an existing + * one for a specific public key type. + * EVP_dss1() etc + */ +# define EVP_MD_FLAG_PKEY_DIGEST 0x0002 + +/* Digest uses EVP_PKEY_METHOD for signing instead of MD specific signing */ + +# define EVP_MD_FLAG_PKEY_METHOD_SIGNATURE 0x0004 + +/* DigestAlgorithmIdentifier flags... */ + +# define EVP_MD_FLAG_DIGALGID_MASK 0x0018 + +/* NULL or absent parameter accepted. Use NULL */ + +# define EVP_MD_FLAG_DIGALGID_NULL 0x0000 + +/* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */ + +# define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008 + +/* Custom handling via ctrl */ + +# define EVP_MD_FLAG_DIGALGID_CUSTOM 0x0018 + +/* Note if suitable for use in FIPS mode */ +# define EVP_MD_FLAG_FIPS 0x0400 + +/* Digest ctrls */ + +# define EVP_MD_CTRL_DIGALGID 0x1 +# define EVP_MD_CTRL_MICALG 0x2 + +/* Minimum Algorithm specific ctrl value */ + +# define EVP_MD_CTRL_ALG_CTRL 0x1000 + +# define EVP_PKEY_NULL_method NULL,NULL,{0,0,0,0} + +# ifndef OPENSSL_NO_DSA +# define EVP_PKEY_DSA_method (evp_sign_method *)DSA_sign, \ + (evp_verify_method *)DSA_verify, \ + {EVP_PKEY_DSA,EVP_PKEY_DSA2,EVP_PKEY_DSA3, \ + EVP_PKEY_DSA4,0} +# else +# define EVP_PKEY_DSA_method EVP_PKEY_NULL_method +# endif + +# ifndef OPENSSL_NO_ECDSA +# define EVP_PKEY_ECDSA_method (evp_sign_method *)ECDSA_sign, \ + (evp_verify_method *)ECDSA_verify, \ + {EVP_PKEY_EC,0,0,0} +# else +# define EVP_PKEY_ECDSA_method EVP_PKEY_NULL_method +# endif + +# ifndef OPENSSL_NO_RSA +# define EVP_PKEY_RSA_method (evp_sign_method *)RSA_sign, \ + (evp_verify_method *)RSA_verify, \ + {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} +# define EVP_PKEY_RSA_ASN1_OCTET_STRING_method \ + (evp_sign_method *)RSA_sign_ASN1_OCTET_STRING, \ + (evp_verify_method *)RSA_verify_ASN1_OCTET_STRING, \ + {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} +# else +# define EVP_PKEY_RSA_method EVP_PKEY_NULL_method +# define EVP_PKEY_RSA_ASN1_OCTET_STRING_method EVP_PKEY_NULL_method +# endif + +# endif /* !EVP_MD */ + +struct env_md_ctx_st { + const EVP_MD *digest; + ENGINE *engine; /* functional reference if 'digest' is + * ENGINE-provided */ + unsigned long flags; + void *md_data; + /* Public key context for sign/verify */ + EVP_PKEY_CTX *pctx; + /* Update function: usually copied from EVP_MD */ + int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); +} /* EVP_MD_CTX */ ; + +/* values for EVP_MD_CTX flags */ + +# define EVP_MD_CTX_FLAG_ONESHOT 0x0001/* digest update will be + * called once only */ +# define EVP_MD_CTX_FLAG_CLEANED 0x0002/* context has already been + * cleaned */ +# define EVP_MD_CTX_FLAG_REUSE 0x0004/* Don't free up ctx->md_data + * in EVP_MD_CTX_cleanup */ +/* + * FIPS and pad options are ignored in 1.0.0, definitions are here so we + * don't accidentally reuse the values for other purposes. + */ + +# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008/* Allow use of non FIPS + * digest in FIPS mode */ + +/* + * The following PAD options are also currently ignored in 1.0.0, digest + * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*() + * instead. + */ +# define EVP_MD_CTX_FLAG_PAD_MASK 0xF0/* RSA mode to use */ +# define EVP_MD_CTX_FLAG_PAD_PKCS1 0x00/* PKCS#1 v1.5 mode */ +# define EVP_MD_CTX_FLAG_PAD_X931 0x10/* X9.31 mode */ +# define EVP_MD_CTX_FLAG_PAD_PSS 0x20/* PSS mode */ + +# define EVP_MD_CTX_FLAG_NO_INIT 0x0100/* Don't initialize md_data */ + +struct evp_cipher_st { + int nid; + int block_size; + /* Default value for variable length ciphers */ + int key_len; + int iv_len; + /* Various flags */ + unsigned long flags; + /* init key */ + int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, + const unsigned char *iv, int enc); + /* encrypt/decrypt data */ + int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t inl); + /* cleanup ctx */ + int (*cleanup) (EVP_CIPHER_CTX *); + /* how big ctx->cipher_data needs to be */ + int ctx_size; + /* Populate a ASN1_TYPE with parameters */ + int (*set_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); + /* Get parameters from a ASN1_TYPE */ + int (*get_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); + /* Miscellaneous operations */ + int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr); + /* Application data */ + void *app_data; +} /* EVP_CIPHER */ ; + +/* Values for cipher flags */ + +/* Modes for ciphers */ + +# define EVP_CIPH_STREAM_CIPHER 0x0 +# define EVP_CIPH_ECB_MODE 0x1 +# define EVP_CIPH_CBC_MODE 0x2 +# define EVP_CIPH_CFB_MODE 0x3 +# define EVP_CIPH_OFB_MODE 0x4 +# define EVP_CIPH_CTR_MODE 0x5 +# define EVP_CIPH_GCM_MODE 0x6 +# define EVP_CIPH_CCM_MODE 0x7 +# define EVP_CIPH_XTS_MODE 0x10001 +# define EVP_CIPH_WRAP_MODE 0x10002 +# define EVP_CIPH_MODE 0xF0007 +/* Set if variable length cipher */ +# define EVP_CIPH_VARIABLE_LENGTH 0x8 +/* Set if the iv handling should be done by the cipher itself */ +# define EVP_CIPH_CUSTOM_IV 0x10 +/* Set if the cipher's init() function should be called if key is NULL */ +# define EVP_CIPH_ALWAYS_CALL_INIT 0x20 +/* Call ctrl() to init cipher parameters */ +# define EVP_CIPH_CTRL_INIT 0x40 +/* Don't use standard key length function */ +# define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80 +/* Don't use standard block padding */ +# define EVP_CIPH_NO_PADDING 0x100 +/* cipher handles random key generation */ +# define EVP_CIPH_RAND_KEY 0x200 +/* cipher has its own additional copying logic */ +# define EVP_CIPH_CUSTOM_COPY 0x400 +/* Allow use default ASN1 get/set iv */ +# define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000 +/* Buffer length in bits not bytes: CFB1 mode only */ +# define EVP_CIPH_FLAG_LENGTH_BITS 0x2000 +/* Note if suitable for use in FIPS mode */ +# define EVP_CIPH_FLAG_FIPS 0x4000 +/* Allow non FIPS cipher in FIPS mode */ +# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x8000 +/* + * Cipher handles any and all padding logic as well as finalisation. + */ +# define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000 +# define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000 +# define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000 + +/* + * Cipher context flag to indicate we can handle wrap mode: if allowed in + * older applications it could overflow buffers. + */ + +# define EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 0x1 + +/* ctrl() values */ + +# define EVP_CTRL_INIT 0x0 +# define EVP_CTRL_SET_KEY_LENGTH 0x1 +# define EVP_CTRL_GET_RC2_KEY_BITS 0x2 +# define EVP_CTRL_SET_RC2_KEY_BITS 0x3 +# define EVP_CTRL_GET_RC5_ROUNDS 0x4 +# define EVP_CTRL_SET_RC5_ROUNDS 0x5 +# define EVP_CTRL_RAND_KEY 0x6 +# define EVP_CTRL_PBE_PRF_NID 0x7 +# define EVP_CTRL_COPY 0x8 +# define EVP_CTRL_GCM_SET_IVLEN 0x9 +# define EVP_CTRL_GCM_GET_TAG 0x10 +# define EVP_CTRL_GCM_SET_TAG 0x11 +# define EVP_CTRL_GCM_SET_IV_FIXED 0x12 +# define EVP_CTRL_GCM_IV_GEN 0x13 +# define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_GCM_SET_IVLEN +# define EVP_CTRL_CCM_GET_TAG EVP_CTRL_GCM_GET_TAG +# define EVP_CTRL_CCM_SET_TAG EVP_CTRL_GCM_SET_TAG +# define EVP_CTRL_CCM_SET_L 0x14 +# define EVP_CTRL_CCM_SET_MSGLEN 0x15 +/* + * AEAD cipher deduces payload length and returns number of bytes required to + * store MAC and eventual padding. Subsequent call to EVP_Cipher even + * appends/verifies MAC. + */ +# define EVP_CTRL_AEAD_TLS1_AAD 0x16 +/* Used by composite AEAD ciphers, no-op in GCM, CCM... */ +# define EVP_CTRL_AEAD_SET_MAC_KEY 0x17 +/* Set the GCM invocation field, decrypt only */ +# define EVP_CTRL_GCM_SET_IV_INV 0x18 + +# define EVP_CTRL_TLS1_1_MULTIBLOCK_AAD 0x19 +# define EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT 0x1a +# define EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT 0x1b +# define EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 0x1c + +/* RFC 5246 defines additional data to be 13 bytes in length */ +# define EVP_AEAD_TLS1_AAD_LEN 13 + +typedef struct { + unsigned char *out; + const unsigned char *inp; + size_t len; + unsigned int interleave; +} EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM; + +/* GCM TLS constants */ +/* Length of fixed part of IV derived from PRF */ +# define EVP_GCM_TLS_FIXED_IV_LEN 4 +/* Length of explicit part of IV part of TLS records */ +# define EVP_GCM_TLS_EXPLICIT_IV_LEN 8 +/* Length of tag for TLS */ +# define EVP_GCM_TLS_TAG_LEN 16 + +typedef struct evp_cipher_info_st { + const EVP_CIPHER *cipher; + unsigned char iv[EVP_MAX_IV_LENGTH]; +} EVP_CIPHER_INFO; + +struct evp_cipher_ctx_st { + const EVP_CIPHER *cipher; + ENGINE *engine; /* functional reference if 'cipher' is + * ENGINE-provided */ + int encrypt; /* encrypt or decrypt */ + int buf_len; /* number we have left */ + unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */ + unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */ + unsigned char buf[EVP_MAX_BLOCK_LENGTH]; /* saved partial block */ + int num; /* used by cfb/ofb/ctr mode */ + void *app_data; /* application stuff */ + int key_len; /* May change for variable length cipher */ + unsigned long flags; /* Various flags */ + void *cipher_data; /* per EVP data */ + int final_used; + int block_mask; + unsigned char final[EVP_MAX_BLOCK_LENGTH]; /* possible final block */ +} /* EVP_CIPHER_CTX */ ; + +typedef struct evp_Encode_Ctx_st { + /* number saved in a partial encode/decode */ + int num; + /* + * The length is either the output line length (in input bytes) or the + * shortest input line length that is ok. Once decoding begins, the + * length is adjusted up each time a longer line is decoded + */ + int length; + /* data to encode */ + unsigned char enc_data[80]; + /* number read on current line */ + int line_num; + int expect_nl; +} EVP_ENCODE_CTX; + +/* Password based encryption function */ +typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *cipher, const EVP_MD *md, + int en_de); + +# ifndef OPENSSL_NO_RSA +# define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ + (char *)(rsa)) +# endif + +# ifndef OPENSSL_NO_DSA +# define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ + (char *)(dsa)) +# endif + +# ifndef OPENSSL_NO_DH +# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\ + (char *)(dh)) +# endif + +# ifndef OPENSSL_NO_EC +# define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\ + (char *)(eckey)) +# endif + +/* Add some extra combinations */ +# define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a)) +# define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a)) +# define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) +# define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) + +int EVP_MD_type(const EVP_MD *md); +# define EVP_MD_nid(e) EVP_MD_type(e) +# define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e)) +int EVP_MD_pkey_type(const EVP_MD *md); +int EVP_MD_size(const EVP_MD *md); +int EVP_MD_block_size(const EVP_MD *md); +unsigned long EVP_MD_flags(const EVP_MD *md); + +const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); +# define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) +# 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)) + +int EVP_CIPHER_nid(const EVP_CIPHER *cipher); +# define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e)) +int EVP_CIPHER_block_size(const EVP_CIPHER *cipher); +int EVP_CIPHER_key_length(const EVP_CIPHER *cipher); +int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher); +unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher); +# define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE) + +const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); +void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); +void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data); +# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) +unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_mode(e) (EVP_CIPHER_CTX_flags(e) & EVP_CIPH_MODE) + +# 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) +# define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +# define EVP_VerifyInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) +# define EVP_VerifyInit(a,b) EVP_DigestInit(a,b) +# define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +# define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) +# define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) +# define EVP_DigestSignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +# define EVP_DigestVerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) + +# 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) +# 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) + +int EVP_Cipher(EVP_CIPHER_CTX *c, + unsigned char *out, const unsigned char *in, unsigned int inl); + +# define EVP_add_cipher_alias(n,alias) \ + OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n)) +# define EVP_add_digest_alias(n,alias) \ + OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n)) +# define EVP_delete_cipher_alias(alias) \ + OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS); +# define EVP_delete_digest_alias(alias) \ + OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS); + +void EVP_MD_CTX_init(EVP_MD_CTX *ctx); +int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx); +EVP_MD_CTX *EVP_MD_CTX_create(void); +void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx); +int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); +void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); +void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); +int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); +int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); +int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt); +int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); +int EVP_Digest(const void *data, size_t count, + unsigned char *md, unsigned int *size, const EVP_MD *type, + ENGINE *impl); + +int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); +int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); +int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); + +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); + +int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, + const unsigned char *salt, const unsigned char *data, + int datal, int count, unsigned char *key, + unsigned char *iv); + +void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags); +void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags); +int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags); + +int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv); +int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + ENGINE *impl, const unsigned char *key, + const unsigned char *iv); +int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, + const unsigned char *in, int inl); +int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); +int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); + +int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv); +int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + ENGINE *impl, const unsigned char *key, + const unsigned char *iv); +int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, + const unsigned char *in, int inl); +int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); +int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); + +int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv, + int enc); +int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + ENGINE *impl, const unsigned char *key, + const unsigned char *iv, int enc); +int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, + const unsigned char *in, int inl); +int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); +int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); + +int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, + EVP_PKEY *pkey); + +int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, + unsigned int siglen, EVP_PKEY *pkey); + +int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +int EVP_DigestSignFinal(EVP_MD_CTX *ctx, + unsigned char *sigret, size_t *siglen); + +int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, + const unsigned char *sig, size_t siglen); + +int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, + const unsigned char *ek, int ekl, const unsigned char *iv, + EVP_PKEY *priv); +int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); + +int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, + unsigned char **ek, int *ekl, unsigned char *iv, + EVP_PKEY **pubk, int npubk); +int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); + +void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); +void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, + const unsigned char *in, int inl); +void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); +int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n); + +void EVP_DecodeInit(EVP_ENCODE_CTX *ctx); +int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, + const unsigned char *in, int inl); +int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned + char *out, int *outl); +int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); + +void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a); +int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a); +EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); +void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a); +int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); +int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); +int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); +int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); + +# ifndef OPENSSL_NO_BIO +BIO_METHOD *BIO_f_md(void); +BIO_METHOD *BIO_f_base64(void); +BIO_METHOD *BIO_f_cipher(void); +BIO_METHOD *BIO_f_reliable(void); +void BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k, + const unsigned char *i, int enc); +# endif + +const EVP_MD *EVP_md_null(void); +# ifndef OPENSSL_NO_MD2 +const EVP_MD *EVP_md2(void); +# endif +# ifndef OPENSSL_NO_MD4 +const EVP_MD *EVP_md4(void); +# endif +# ifndef OPENSSL_NO_MD5 +const EVP_MD *EVP_md5(void); +# endif +# ifndef OPENSSL_NO_SHA +const EVP_MD *EVP_sha(void); +const EVP_MD *EVP_sha1(void); +const EVP_MD *EVP_dss(void); +const EVP_MD *EVP_dss1(void); +const EVP_MD *EVP_ecdsa(void); +# endif +# ifndef OPENSSL_NO_SHA256 +const EVP_MD *EVP_sha224(void); +const EVP_MD *EVP_sha256(void); +# endif +# ifndef OPENSSL_NO_SHA512 +const EVP_MD *EVP_sha384(void); +const EVP_MD *EVP_sha512(void); +# endif +# ifndef OPENSSL_NO_MDC2 +const EVP_MD *EVP_mdc2(void); +# endif +# ifndef OPENSSL_NO_RIPEMD +const EVP_MD *EVP_ripemd160(void); +# endif +# ifndef OPENSSL_NO_WHIRLPOOL +const EVP_MD *EVP_whirlpool(void); +# endif +const EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */ +# ifndef OPENSSL_NO_DES +const EVP_CIPHER *EVP_des_ecb(void); +const EVP_CIPHER *EVP_des_ede(void); +const EVP_CIPHER *EVP_des_ede3(void); +const EVP_CIPHER *EVP_des_ede_ecb(void); +const EVP_CIPHER *EVP_des_ede3_ecb(void); +const EVP_CIPHER *EVP_des_cfb64(void); +# define EVP_des_cfb EVP_des_cfb64 +const EVP_CIPHER *EVP_des_cfb1(void); +const EVP_CIPHER *EVP_des_cfb8(void); +const EVP_CIPHER *EVP_des_ede_cfb64(void); +# define EVP_des_ede_cfb EVP_des_ede_cfb64 +# if 0 +const EVP_CIPHER *EVP_des_ede_cfb1(void); +const EVP_CIPHER *EVP_des_ede_cfb8(void); +# endif +const EVP_CIPHER *EVP_des_ede3_cfb64(void); +# define EVP_des_ede3_cfb EVP_des_ede3_cfb64 +const EVP_CIPHER *EVP_des_ede3_cfb1(void); +const EVP_CIPHER *EVP_des_ede3_cfb8(void); +const EVP_CIPHER *EVP_des_ofb(void); +const EVP_CIPHER *EVP_des_ede_ofb(void); +const EVP_CIPHER *EVP_des_ede3_ofb(void); +const EVP_CIPHER *EVP_des_cbc(void); +const EVP_CIPHER *EVP_des_ede_cbc(void); +const EVP_CIPHER *EVP_des_ede3_cbc(void); +const EVP_CIPHER *EVP_desx_cbc(void); +const EVP_CIPHER *EVP_des_ede3_wrap(void); +/* + * This should now be supported through the dev_crypto ENGINE. But also, why + * are rc4 and md5 declarations made here inside a "NO_DES" precompiler + * branch? + */ +# if 0 +# ifdef OPENSSL_OPENBSD_DEV_CRYPTO +const EVP_CIPHER *EVP_dev_crypto_des_ede3_cbc(void); +const EVP_CIPHER *EVP_dev_crypto_rc4(void); +const EVP_MD *EVP_dev_crypto_md5(void); +# endif +# endif +# endif +# ifndef OPENSSL_NO_RC4 +const EVP_CIPHER *EVP_rc4(void); +const EVP_CIPHER *EVP_rc4_40(void); +# ifndef OPENSSL_NO_MD5 +const EVP_CIPHER *EVP_rc4_hmac_md5(void); +# endif +# endif +# ifndef OPENSSL_NO_IDEA +const EVP_CIPHER *EVP_idea_ecb(void); +const EVP_CIPHER *EVP_idea_cfb64(void); +# define EVP_idea_cfb EVP_idea_cfb64 +const EVP_CIPHER *EVP_idea_ofb(void); +const EVP_CIPHER *EVP_idea_cbc(void); +# endif +# ifndef OPENSSL_NO_RC2 +const EVP_CIPHER *EVP_rc2_ecb(void); +const EVP_CIPHER *EVP_rc2_cbc(void); +const EVP_CIPHER *EVP_rc2_40_cbc(void); +const EVP_CIPHER *EVP_rc2_64_cbc(void); +const EVP_CIPHER *EVP_rc2_cfb64(void); +# define EVP_rc2_cfb EVP_rc2_cfb64 +const EVP_CIPHER *EVP_rc2_ofb(void); +# endif +# ifndef OPENSSL_NO_BF +const EVP_CIPHER *EVP_bf_ecb(void); +const EVP_CIPHER *EVP_bf_cbc(void); +const EVP_CIPHER *EVP_bf_cfb64(void); +# define EVP_bf_cfb EVP_bf_cfb64 +const EVP_CIPHER *EVP_bf_ofb(void); +# endif +# ifndef OPENSSL_NO_CAST +const EVP_CIPHER *EVP_cast5_ecb(void); +const EVP_CIPHER *EVP_cast5_cbc(void); +const EVP_CIPHER *EVP_cast5_cfb64(void); +# define EVP_cast5_cfb EVP_cast5_cfb64 +const EVP_CIPHER *EVP_cast5_ofb(void); +# endif +# ifndef OPENSSL_NO_RC5 +const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void); +const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void); +const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void); +# define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64 +const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void); +# endif +# ifndef OPENSSL_NO_AES +const EVP_CIPHER *EVP_aes_128_ecb(void); +const EVP_CIPHER *EVP_aes_128_cbc(void); +const EVP_CIPHER *EVP_aes_128_cfb1(void); +const EVP_CIPHER *EVP_aes_128_cfb8(void); +const EVP_CIPHER *EVP_aes_128_cfb128(void); +# define EVP_aes_128_cfb EVP_aes_128_cfb128 +const EVP_CIPHER *EVP_aes_128_ofb(void); +const EVP_CIPHER *EVP_aes_128_ctr(void); +const EVP_CIPHER *EVP_aes_128_ccm(void); +const EVP_CIPHER *EVP_aes_128_gcm(void); +const EVP_CIPHER *EVP_aes_128_xts(void); +const EVP_CIPHER *EVP_aes_128_wrap(void); +const EVP_CIPHER *EVP_aes_192_ecb(void); +const EVP_CIPHER *EVP_aes_192_cbc(void); +const EVP_CIPHER *EVP_aes_192_cfb1(void); +const EVP_CIPHER *EVP_aes_192_cfb8(void); +const EVP_CIPHER *EVP_aes_192_cfb128(void); +# define EVP_aes_192_cfb EVP_aes_192_cfb128 +const EVP_CIPHER *EVP_aes_192_ofb(void); +const EVP_CIPHER *EVP_aes_192_ctr(void); +const EVP_CIPHER *EVP_aes_192_ccm(void); +const EVP_CIPHER *EVP_aes_192_gcm(void); +const EVP_CIPHER *EVP_aes_192_wrap(void); +const EVP_CIPHER *EVP_aes_256_ecb(void); +const EVP_CIPHER *EVP_aes_256_cbc(void); +const EVP_CIPHER *EVP_aes_256_cfb1(void); +const EVP_CIPHER *EVP_aes_256_cfb8(void); +const EVP_CIPHER *EVP_aes_256_cfb128(void); +# define EVP_aes_256_cfb EVP_aes_256_cfb128 +const EVP_CIPHER *EVP_aes_256_ofb(void); +const EVP_CIPHER *EVP_aes_256_ctr(void); +const EVP_CIPHER *EVP_aes_256_ccm(void); +const EVP_CIPHER *EVP_aes_256_gcm(void); +const EVP_CIPHER *EVP_aes_256_xts(void); +const EVP_CIPHER *EVP_aes_256_wrap(void); +# if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1) +const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void); +const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void); +# endif +# ifndef OPENSSL_NO_SHA256 +const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void); +const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void); +# endif +# endif +# ifndef OPENSSL_NO_CAMELLIA +const EVP_CIPHER *EVP_camellia_128_ecb(void); +const EVP_CIPHER *EVP_camellia_128_cbc(void); +const EVP_CIPHER *EVP_camellia_128_cfb1(void); +const EVP_CIPHER *EVP_camellia_128_cfb8(void); +const EVP_CIPHER *EVP_camellia_128_cfb128(void); +# define EVP_camellia_128_cfb EVP_camellia_128_cfb128 +const EVP_CIPHER *EVP_camellia_128_ofb(void); +const EVP_CIPHER *EVP_camellia_192_ecb(void); +const EVP_CIPHER *EVP_camellia_192_cbc(void); +const EVP_CIPHER *EVP_camellia_192_cfb1(void); +const EVP_CIPHER *EVP_camellia_192_cfb8(void); +const EVP_CIPHER *EVP_camellia_192_cfb128(void); +# define EVP_camellia_192_cfb EVP_camellia_192_cfb128 +const EVP_CIPHER *EVP_camellia_192_ofb(void); +const EVP_CIPHER *EVP_camellia_256_ecb(void); +const EVP_CIPHER *EVP_camellia_256_cbc(void); +const EVP_CIPHER *EVP_camellia_256_cfb1(void); +const EVP_CIPHER *EVP_camellia_256_cfb8(void); +const EVP_CIPHER *EVP_camellia_256_cfb128(void); +# define EVP_camellia_256_cfb EVP_camellia_256_cfb128 +const EVP_CIPHER *EVP_camellia_256_ofb(void); +# endif + +# ifndef OPENSSL_NO_SEED +const EVP_CIPHER *EVP_seed_ecb(void); +const EVP_CIPHER *EVP_seed_cbc(void); +const EVP_CIPHER *EVP_seed_cfb128(void); +# define EVP_seed_cfb EVP_seed_cfb128 +const EVP_CIPHER *EVP_seed_ofb(void); +# endif + +void OPENSSL_add_all_algorithms_noconf(void); +void OPENSSL_add_all_algorithms_conf(void); + +# ifdef OPENSSL_LOAD_CONF +# define OpenSSL_add_all_algorithms() \ + OPENSSL_add_all_algorithms_conf() +# else +# define OpenSSL_add_all_algorithms() \ + OPENSSL_add_all_algorithms_noconf() +# endif + +void OpenSSL_add_all_ciphers(void); +void OpenSSL_add_all_digests(void); +# define SSLeay_add_all_algorithms() OpenSSL_add_all_algorithms() +# define SSLeay_add_all_ciphers() OpenSSL_add_all_ciphers() +# define SSLeay_add_all_digests() OpenSSL_add_all_digests() + +int EVP_add_cipher(const EVP_CIPHER *cipher); +int EVP_add_digest(const EVP_MD *digest); + +const EVP_CIPHER *EVP_get_cipherbyname(const char *name); +const EVP_MD *EVP_get_digestbyname(const char *name); +void EVP_cleanup(void); + +void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph, + const char *from, const char *to, void *x), + void *arg); +void EVP_CIPHER_do_all_sorted(void (*fn) + (const EVP_CIPHER *ciph, const char *from, + const char *to, void *x), void *arg); + +void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, + const char *from, const char *to, void *x), + void *arg); +void EVP_MD_do_all_sorted(void (*fn) + (const EVP_MD *ciph, const char *from, + const char *to, void *x), void *arg); + +int EVP_PKEY_decrypt_old(unsigned char *dec_key, + const unsigned char *enc_key, int enc_key_len, + EVP_PKEY *private_key); +int EVP_PKEY_encrypt_old(unsigned char *enc_key, + const unsigned char *key, int key_len, + EVP_PKEY *pub_key); +int EVP_PKEY_type(int type); +int EVP_PKEY_id(const EVP_PKEY *pkey); +int EVP_PKEY_base_id(const EVP_PKEY *pkey); +int EVP_PKEY_bits(EVP_PKEY *pkey); +int EVP_PKEY_size(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_assign(EVP_PKEY *pkey, int type, void *key); +void *EVP_PKEY_get0(EVP_PKEY *pkey); + +# ifndef OPENSSL_NO_RSA +struct rsa_st; +int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); +struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); +# endif +# ifndef OPENSSL_NO_DSA +struct dsa_st; +int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); +struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); +# endif +# ifndef OPENSSL_NO_DH +struct dh_st; +int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); +struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); +# endif +# ifndef OPENSSL_NO_EC +struct ec_key_st; +int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key); +struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); +# endif + +EVP_PKEY *EVP_PKEY_new(void); +void EVP_PKEY_free(EVP_PKEY *pkey); + +EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); + +EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, + long length); +EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); + +int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); +int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); +int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode); +int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); + +int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); + +int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); + +int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); + +int EVP_CIPHER_type(const EVP_CIPHER *ctx); + +/* calls methods */ +int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); +int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); + +/* These are used by EVP_CIPHER methods */ +int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); +int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); + +/* PKCS5 password based encryption */ +int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de); +int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, + const unsigned char *salt, int saltlen, int iter, + int keylen, unsigned char *out); +int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, + const unsigned char *salt, int saltlen, int iter, + const EVP_MD *digest, int keylen, unsigned char *out); +int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de); + +void PKCS5_PBE_add(void); + +int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, + ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de); + +/* PBE type */ + +/* Can appear as the outermost AlgorithmIdentifier */ +# define EVP_PBE_TYPE_OUTER 0x0 +/* Is an PRF type OID */ +# define EVP_PBE_TYPE_PRF 0x1 + +int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, + int md_nid, EVP_PBE_KEYGEN *keygen); +int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md, + EVP_PBE_KEYGEN *keygen); +int EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid, + EVP_PBE_KEYGEN **pkeygen); +void EVP_PBE_cleanup(void); + +# define ASN1_PKEY_ALIAS 0x1 +# define ASN1_PKEY_DYNAMIC 0x2 +# define ASN1_PKEY_SIGPARAM_NULL 0x4 + +# define ASN1_PKEY_CTRL_PKCS7_SIGN 0x1 +# define ASN1_PKEY_CTRL_PKCS7_ENCRYPT 0x2 +# define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3 +# define ASN1_PKEY_CTRL_CMS_SIGN 0x5 +# define ASN1_PKEY_CTRL_CMS_ENVELOPE 0x7 +# define ASN1_PKEY_CTRL_CMS_RI_TYPE 0x8 + +int EVP_PKEY_asn1_get_count(void); +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type); +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe, + const char *str, int len); +int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth); +int EVP_PKEY_asn1_add_alias(int to, int from); +int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, + int *ppkey_flags, const char **pinfo, + const char **ppem_str, + const EVP_PKEY_ASN1_METHOD *ameth); + +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(EVP_PKEY *pkey); +EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags, + const char *pem_str, + const char *info); +void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, + const EVP_PKEY_ASN1_METHOD *src); +void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); +void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth, + int (*pub_decode) (EVP_PKEY *pk, + X509_PUBKEY *pub), + int (*pub_encode) (X509_PUBKEY *pub, + const EVP_PKEY *pk), + int (*pub_cmp) (const EVP_PKEY *a, + const EVP_PKEY *b), + int (*pub_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx), + int (*pkey_size) (const EVP_PKEY *pk), + int (*pkey_bits) (const EVP_PKEY *pk)); +void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth, + int (*priv_decode) (EVP_PKEY *pk, + PKCS8_PRIV_KEY_INFO + *p8inf), + int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, + const EVP_PKEY *pk), + int (*priv_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, + ASN1_PCTX *pctx)); +void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth, + int (*param_decode) (EVP_PKEY *pkey, + const unsigned char **pder, + int derlen), + int (*param_encode) (const EVP_PKEY *pkey, + unsigned char **pder), + int (*param_missing) (const EVP_PKEY *pk), + int (*param_copy) (EVP_PKEY *to, + const EVP_PKEY *from), + int (*param_cmp) (const EVP_PKEY *a, + const EVP_PKEY *b), + int (*param_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, + ASN1_PCTX *pctx)); + +void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, + void (*pkey_free) (EVP_PKEY *pkey)); +void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_ctrl) (EVP_PKEY *pkey, int op, + long arg1, void *arg2)); +void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, + int (*item_verify) (EVP_MD_CTX *ctx, + const ASN1_ITEM *it, + void *asn, + X509_ALGOR *a, + ASN1_BIT_STRING *sig, + EVP_PKEY *pkey), + int (*item_sign) (EVP_MD_CTX *ctx, + const ASN1_ITEM *it, + void *asn, + X509_ALGOR *alg1, + X509_ALGOR *alg2, + ASN1_BIT_STRING *sig)); + +# define EVP_PKEY_OP_UNDEFINED 0 +# define EVP_PKEY_OP_PARAMGEN (1<<1) +# define EVP_PKEY_OP_KEYGEN (1<<2) +# define EVP_PKEY_OP_SIGN (1<<3) +# define EVP_PKEY_OP_VERIFY (1<<4) +# define EVP_PKEY_OP_VERIFYRECOVER (1<<5) +# define EVP_PKEY_OP_SIGNCTX (1<<6) +# define EVP_PKEY_OP_VERIFYCTX (1<<7) +# define EVP_PKEY_OP_ENCRYPT (1<<8) +# define EVP_PKEY_OP_DECRYPT (1<<9) +# define EVP_PKEY_OP_DERIVE (1<<10) + +# define EVP_PKEY_OP_TYPE_SIG \ + (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \ + | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX) + +# define EVP_PKEY_OP_TYPE_CRYPT \ + (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT) + +# define EVP_PKEY_OP_TYPE_NOGEN \ + (EVP_PKEY_OP_SIG | EVP_PKEY_OP_CRYPT | EVP_PKEY_OP_DERIVE) + +# define EVP_PKEY_OP_TYPE_GEN \ + (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) + +# 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) + +# 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) + +# define EVP_PKEY_CTRL_MD 1 +# define EVP_PKEY_CTRL_PEER_KEY 2 + +# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 +# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 + +# define EVP_PKEY_CTRL_PKCS7_SIGN 5 + +# define EVP_PKEY_CTRL_SET_MAC_KEY 6 + +# define EVP_PKEY_CTRL_DIGESTINIT 7 + +/* Used by GOST key encryption in TLS */ +# define EVP_PKEY_CTRL_SET_IV 8 + +# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 +# define EVP_PKEY_CTRL_CMS_DECRYPT 10 +# define EVP_PKEY_CTRL_CMS_SIGN 11 + +# define EVP_PKEY_CTRL_CIPHER 12 + +# define EVP_PKEY_CTRL_GET_MD 13 + +# define EVP_PKEY_ALG_CTRL 0x1000 + +# define EVP_PKEY_FLAG_AUTOARGLEN 2 +/* + * Method handles all operations: don't assume any digest related defaults. + */ +# define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 + +const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); +EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); +void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, + const EVP_PKEY_METHOD *meth); +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); + +EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); +EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); +EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); +void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); + +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_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); + +void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); +void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx); +EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx); + +EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); + +void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); +void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen); +int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, + const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen); +int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, + unsigned char *rout, size_t *routlen, + const unsigned char *sig, size_t siglen); +int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen); +int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen); + +int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); +int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); + +typedef int EVP_PKEY_gen_cb (EVP_PKEY_CTX *ctx); + +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); + +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); + +int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); + +void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, + int (*init) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, + int (*copy) (EVP_PKEY_CTX *dst, + EVP_PKEY_CTX *src)); + +void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, + void (*cleanup) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, + int (*paramgen_init) (EVP_PKEY_CTX *ctx), + int (*paramgen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, + int (*keygen_init) (EVP_PKEY_CTX *ctx), + int (*keygen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, + int (*sign_init) (EVP_PKEY_CTX *ctx), + int (*sign) (EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, + int (*verify_init) (EVP_PKEY_CTX *ctx), + int (*verify) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, + int (*verify_recover_init) (EVP_PKEY_CTX + *ctx), + int (*verify_recover) (EVP_PKEY_CTX + *ctx, + unsigned char + *sig, + size_t *siglen, + const unsigned + char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, + int (*signctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (*signctx) (EVP_PKEY_CTX *ctx, + unsigned char *sig, + size_t *siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, + int (*verifyctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (*verifyctx) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + int siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, + int (*encrypt_init) (EVP_PKEY_CTX *ctx), + int (*encryptfn) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, + int (*decrypt_init) (EVP_PKEY_CTX *ctx), + int (*decrypt) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, + int (*derive_init) (EVP_PKEY_CTX *ctx), + int (*derive) (EVP_PKEY_CTX *ctx, + unsigned char *key, + size_t *keylen)); + +void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, + int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, + void *p2), + int (*ctrl_str) (EVP_PKEY_CTX *ctx, + const char *type, + const char *value)); + +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. + */ +void ERR_load_EVP_strings(void); + +/* Error codes for the EVP functions. */ + +/* Function codes. */ +# define EVP_F_AESNI_INIT_KEY 165 +# define EVP_F_AESNI_XTS_CIPHER 176 +# define EVP_F_AES_INIT_KEY 133 +# define EVP_F_AES_T4_INIT_KEY 178 +# define EVP_F_AES_XTS 172 +# define EVP_F_AES_XTS_CIPHER 175 +# define EVP_F_ALG_MODULE_INIT 177 +# define EVP_F_CAMELLIA_INIT_KEY 159 +# define EVP_F_CMAC_INIT 173 +# define EVP_F_CMLL_T4_INIT_KEY 179 +# define EVP_F_D2I_PKEY 100 +# define EVP_F_DO_SIGVER_INIT 161 +# define EVP_F_DSAPKEY2PKCS8 134 +# define EVP_F_DSA_PKEY2PKCS8 135 +# define EVP_F_ECDSA_PKEY2PKCS8 129 +# define EVP_F_ECKEY_PKEY2PKCS8 132 +# 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_DIGESTINIT_EX 128 +# define EVP_F_EVP_ENCRYPTFINAL_EX 127 +# 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_PKCS82PKEY 111 +# define EVP_F_EVP_PKCS82PKEY_BROKEN 136 +# define EVP_F_EVP_PKEY2PKCS8_BROKEN 113 +# 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_GET1_DH 119 +# define EVP_F_EVP_PKEY_GET1_DSA 120 +# define EVP_F_EVP_PKEY_GET1_ECDSA 130 +# define EVP_F_EVP_PKEY_GET1_EC_KEY 131 +# define EVP_F_EVP_PKEY_GET1_RSA 121 +# define EVP_F_EVP_PKEY_KEYGEN 146 +# define EVP_F_EVP_PKEY_KEYGEN_INIT 147 +# 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_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_RIJNDAEL 126 +# define EVP_F_EVP_SIGNFINAL 107 +# define EVP_F_EVP_VERIFYFINAL 108 +# define EVP_F_FIPS_CIPHERINIT 166 +# define EVP_F_FIPS_CIPHER_CTX_COPY 170 +# define EVP_F_FIPS_CIPHER_CTX_CTRL 167 +# define EVP_F_FIPS_CIPHER_CTX_SET_KEY_LENGTH 171 +# define EVP_F_FIPS_DIGESTINIT 168 +# define EVP_F_FIPS_MD_CTX_COPY 169 +# define EVP_F_HMAC_INIT_EX 174 +# 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_PKCS8_SET_BROKEN 112 +# 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_IV_SETUP_FAILED 162 +# define EVP_R_AES_KEY_SETUP_FAILED 143 +# define EVP_R_ASN1_LIB 140 +# define EVP_R_BAD_BLOCK_LENGTH 136 +# define EVP_R_BAD_DECRYPT 100 +# define EVP_R_BAD_KEY_LENGTH 137 +# define EVP_R_BN_DECODE_ERROR 112 +# define EVP_R_BN_PUBKEY_ERROR 113 +# 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_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_DISABLED_FOR_FIPS 163 +# define EVP_R_ENCODE_ERROR 115 +# define EVP_R_ERROR_LOADING_SECTION 165 +# define EVP_R_ERROR_SETTING_FIPS_MODE 166 +# define EVP_R_EVP_PBE_CIPHERINIT_ERROR 119 +# 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_ECDSA_KEY 141 +# define EVP_R_EXPECTING_A_EC_KEY 142 +# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 +# 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_LENGTH 130 +# define EVP_R_INVALID_OPERATION 148 +# define EVP_R_IV_TOO_LARGE 102 +# define EVP_R_KEYGEN_FAILURE 120 +# 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_DSA_PARAMETERS 116 +# define EVP_R_NO_KEY_SET 154 +# define EVP_R_NO_OPERATION_SET 149 +# define EVP_R_NO_SIGN_FUNCTION_CONFIGURED 104 +# define EVP_R_NO_VERIFY_FUNCTION_CONFIGURED 105 +# define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 +# define EVP_R_OPERATON_NOT_INITIALIZED 151 +# define EVP_R_PKCS8_UNKNOWN_BROKEN_TYPE 117 +# 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_TOO_LARGE 164 +# 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_UNSUPORTED_NUMBER_OF_ROUNDS 135 +# 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_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 +# define EVP_R_WRONG_PUBLIC_KEY_TYPE 110 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/hmac.h b/Sources/OpenSSL/include/openssl/hmac.h new file mode 100644 index 0000000000..b7e0ed1c62 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/hmac.h @@ -0,0 +1,109 @@ +/* crypto/hmac/hmac.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +#ifndef HEADER_HMAC_H +# define HEADER_HMAC_H + +# include "opensslconf.h" + +# ifdef OPENSSL_NO_HMAC +# error HMAC is disabled. +# endif + +# include "evp.h" + +# define HMAC_MAX_MD_CBLOCK 128/* largest known is SHA512 */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct hmac_ctx_st { + const EVP_MD *md; + EVP_MD_CTX md_ctx; + EVP_MD_CTX i_ctx; + EVP_MD_CTX o_ctx; + unsigned int key_length; + unsigned char key[HMAC_MAX_MD_CBLOCK]; +} HMAC_CTX; + +# define HMAC_size(e) (EVP_MD_size((e)->md)) + +void HMAC_CTX_init(HMAC_CTX *ctx); +void HMAC_CTX_cleanup(HMAC_CTX *ctx); + +/* deprecated */ +# define HMAC_cleanup(ctx) HMAC_CTX_cleanup(ctx) + +/* deprecated */ +int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, const EVP_MD *md); +int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md, ENGINE *impl); +int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len); +int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len); +unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, + const unsigned char *d, size_t n, unsigned char *md, + unsigned int *md_len); +int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); + +void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/idea.h b/Sources/OpenSSL/include/openssl/idea.h new file mode 100644 index 0000000000..7ea2f06cab --- /dev/null +++ b/Sources/OpenSSL/include/openssl/idea.h @@ -0,0 +1,105 @@ +/* crypto/idea/idea.h */ +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_IDEA_H +# define HEADER_IDEA_H + +# include "opensslconf.h"/* IDEA_INT, OPENSSL_NO_IDEA */ + +# ifdef OPENSSL_NO_IDEA +# error IDEA is disabled. +# endif + +# define IDEA_ENCRYPT 1 +# define IDEA_DECRYPT 0 + +# define IDEA_BLOCK 8 +# define IDEA_KEY_LENGTH 16 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct idea_key_st { + IDEA_INT data[9][6]; +} IDEA_KEY_SCHEDULE; + +const char *idea_options(void); +void idea_ecb_encrypt(const unsigned char *in, unsigned char *out, + IDEA_KEY_SCHEDULE *ks); +# ifdef OPENSSL_FIPS +void private_idea_set_encrypt_key(const unsigned char *key, + IDEA_KEY_SCHEDULE *ks); +# endif +void idea_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); +void idea_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); +void idea_cbc_encrypt(const unsigned char *in, unsigned char *out, + long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, + int enc); +void idea_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, + int *num, int enc); +void idea_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, + int *num); +void idea_encrypt(unsigned long *in, IDEA_KEY_SCHEDULE *ks); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/krb5_asn.h b/Sources/OpenSSL/include/openssl/krb5_asn.h new file mode 100644 index 0000000000..9fd6720cae --- /dev/null +++ b/Sources/OpenSSL/include/openssl/krb5_asn.h @@ -0,0 +1,240 @@ +/* krb5_asn.h */ +/* + * Written by Vern Staats for the OpenSSL project, ** + * using ocsp/{*.h,*asn*.c} as a starting point + */ + +/* ==================================================================== + * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_KRB5_ASN_H +# define HEADER_KRB5_ASN_H + +/* + * #include + */ +# include "safestack.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * ASN.1 from Kerberos RFC 1510 + */ + +/*- EncryptedData ::= SEQUENCE { + * etype[0] INTEGER, -- EncryptionType + * kvno[1] INTEGER OPTIONAL, + * cipher[2] OCTET STRING -- ciphertext + * } + */ +typedef struct krb5_encdata_st { + ASN1_INTEGER *etype; + ASN1_INTEGER *kvno; + ASN1_OCTET_STRING *cipher; +} KRB5_ENCDATA; + +DECLARE_STACK_OF(KRB5_ENCDATA) + +/*- PrincipalName ::= SEQUENCE { + * name-type[0] INTEGER, + * name-string[1] SEQUENCE OF GeneralString + * } + */ +typedef struct krb5_princname_st { + ASN1_INTEGER *nametype; + STACK_OF(ASN1_GENERALSTRING) *namestring; +} KRB5_PRINCNAME; + +DECLARE_STACK_OF(KRB5_PRINCNAME) + +/*- Ticket ::= [APPLICATION 1] SEQUENCE { + * tkt-vno[0] INTEGER, + * realm[1] Realm, + * sname[2] PrincipalName, + * enc-part[3] EncryptedData + * } + */ +typedef struct krb5_tktbody_st { + ASN1_INTEGER *tktvno; + ASN1_GENERALSTRING *realm; + KRB5_PRINCNAME *sname; + KRB5_ENCDATA *encdata; +} KRB5_TKTBODY; + +typedef STACK_OF(KRB5_TKTBODY) KRB5_TICKET; +DECLARE_STACK_OF(KRB5_TKTBODY) + +/*- AP-REQ ::= [APPLICATION 14] SEQUENCE { + * pvno[0] INTEGER, + * msg-type[1] INTEGER, + * ap-options[2] APOptions, + * ticket[3] Ticket, + * authenticator[4] EncryptedData + * } + * + * APOptions ::= BIT STRING { + * reserved(0), use-session-key(1), mutual-required(2) } + */ +typedef struct krb5_ap_req_st { + ASN1_INTEGER *pvno; + ASN1_INTEGER *msgtype; + ASN1_BIT_STRING *apoptions; + KRB5_TICKET *ticket; + KRB5_ENCDATA *authenticator; +} KRB5_APREQBODY; + +typedef STACK_OF(KRB5_APREQBODY) KRB5_APREQ; +DECLARE_STACK_OF(KRB5_APREQBODY) + +/* Authenticator Stuff */ + +/*- Checksum ::= SEQUENCE { + * cksumtype[0] INTEGER, + * checksum[1] OCTET STRING + * } + */ +typedef struct krb5_checksum_st { + ASN1_INTEGER *ctype; + ASN1_OCTET_STRING *checksum; +} KRB5_CHECKSUM; + +DECLARE_STACK_OF(KRB5_CHECKSUM) + +/*- EncryptionKey ::= SEQUENCE { + * keytype[0] INTEGER, + * keyvalue[1] OCTET STRING + * } + */ +typedef struct krb5_encryptionkey_st { + ASN1_INTEGER *ktype; + ASN1_OCTET_STRING *keyvalue; +} KRB5_ENCKEY; + +DECLARE_STACK_OF(KRB5_ENCKEY) + +/*- AuthorizationData ::= SEQUENCE OF SEQUENCE { + * ad-type[0] INTEGER, + * ad-data[1] OCTET STRING + * } + */ +typedef struct krb5_authorization_st { + ASN1_INTEGER *adtype; + ASN1_OCTET_STRING *addata; +} KRB5_AUTHDATA; + +DECLARE_STACK_OF(KRB5_AUTHDATA) + +/*- -- Unencrypted authenticator + * Authenticator ::= [APPLICATION 2] SEQUENCE { + * authenticator-vno[0] INTEGER, + * crealm[1] Realm, + * cname[2] PrincipalName, + * cksum[3] Checksum OPTIONAL, + * cusec[4] INTEGER, + * ctime[5] KerberosTime, + * subkey[6] EncryptionKey OPTIONAL, + * seq-number[7] INTEGER OPTIONAL, + * authorization-data[8] AuthorizationData OPTIONAL + * } + */ +typedef struct krb5_authenticator_st { + ASN1_INTEGER *avno; + ASN1_GENERALSTRING *crealm; + KRB5_PRINCNAME *cname; + KRB5_CHECKSUM *cksum; + ASN1_INTEGER *cusec; + ASN1_GENERALIZEDTIME *ctime; + KRB5_ENCKEY *subkey; + ASN1_INTEGER *seqnum; + KRB5_AUTHDATA *authorization; +} KRB5_AUTHENTBODY; + +typedef STACK_OF(KRB5_AUTHENTBODY) KRB5_AUTHENT; +DECLARE_STACK_OF(KRB5_AUTHENTBODY) + +/*- DECLARE_ASN1_FUNCTIONS(type) = DECLARE_ASN1_FUNCTIONS_name(type, type) = + * type *name##_new(void); + * void name##_free(type *a); + * DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) = + * DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) = + * type *d2i_##name(type **a, const unsigned char **in, long len); + * int i2d_##name(type *a, unsigned char **out); + * DECLARE_ASN1_ITEM(itname) = OPENSSL_EXTERN const ASN1_ITEM itname##_it + */ + +DECLARE_ASN1_FUNCTIONS(KRB5_ENCDATA) +DECLARE_ASN1_FUNCTIONS(KRB5_PRINCNAME) +DECLARE_ASN1_FUNCTIONS(KRB5_TKTBODY) +DECLARE_ASN1_FUNCTIONS(KRB5_APREQBODY) +DECLARE_ASN1_FUNCTIONS(KRB5_TICKET) +DECLARE_ASN1_FUNCTIONS(KRB5_APREQ) + +DECLARE_ASN1_FUNCTIONS(KRB5_CHECKSUM) +DECLARE_ASN1_FUNCTIONS(KRB5_ENCKEY) +DECLARE_ASN1_FUNCTIONS(KRB5_AUTHDATA) +DECLARE_ASN1_FUNCTIONS(KRB5_AUTHENTBODY) +DECLARE_ASN1_FUNCTIONS(KRB5_AUTHENT) + +/* 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. + */ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/kssl.h b/Sources/OpenSSL/include/openssl/kssl.h new file mode 100644 index 0000000000..bcf9936722 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/kssl.h @@ -0,0 +1,197 @@ +/* ssl/kssl.h -*- mode: C; c-file-style: "eay" -*- */ +/* + * Written by Vern Staats for the OpenSSL project + * 2000. project 2000. + */ +/* ==================================================================== + * Copyright (c) 2000 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +/* + ** 19990701 VRS Started. + */ + +#ifndef KSSL_H +# define KSSL_H + +# include "opensslconf.h" + +# ifndef OPENSSL_NO_KRB5 + +# include +# include +# include +# ifdef OPENSSL_SYS_WIN32 +/* + * These can sometimes get redefined indirectly by krb5 header files after + * they get undefed in ossl_typ.h + */ +# undef X509_NAME +# undef X509_EXTENSIONS +# undef OCSP_REQUEST +# undef OCSP_RESPONSE +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Depending on which KRB5 implementation used, some types from + * the other may be missing. Resolve that here and now + */ +# ifdef KRB5_HEIMDAL +typedef unsigned char krb5_octet; +# define FAR +# else + +# ifndef FAR +# define FAR +# endif + +# endif + +/*- + * Uncomment this to debug kssl problems or + * to trace usage of the Kerberos session key + * + * #define KSSL_DEBUG + */ + +# ifndef KRB5SVC +# define KRB5SVC "host" +# endif + +# ifndef KRB5KEYTAB +# define KRB5KEYTAB "/etc/krb5.keytab" +# endif + +# ifndef KRB5SENDAUTH +# define KRB5SENDAUTH 1 +# endif + +# ifndef KRB5CHECKAUTH +# define KRB5CHECKAUTH 1 +# endif + +# ifndef KSSL_CLOCKSKEW +# define KSSL_CLOCKSKEW 300; +# endif + +# define KSSL_ERR_MAX 255 +typedef struct kssl_err_st { + int reason; + char text[KSSL_ERR_MAX + 1]; +} KSSL_ERR; + +/*- Context for passing + * (1) Kerberos session key to SSL, and + * (2) Config data between application and SSL lib + */ +typedef struct kssl_ctx_st { + /* used by: disposition: */ + char *service_name; /* C,S default ok (kssl) */ + char *service_host; /* C input, REQUIRED */ + char *client_princ; /* S output from krb5 ticket */ + char *keytab_file; /* S NULL (/etc/krb5.keytab) */ + char *cred_cache; /* C NULL (default) */ + krb5_enctype enctype; + int length; + krb5_octet FAR *key; +} KSSL_CTX; + +# define KSSL_CLIENT 1 +# define KSSL_SERVER 2 +# define KSSL_SERVICE 3 +# define KSSL_KEYTAB 4 + +# define KSSL_CTX_OK 0 +# define KSSL_CTX_ERR 1 +# define KSSL_NOMEM 2 + +/* Public (for use by applications that use OpenSSL with Kerberos 5 support */ +krb5_error_code kssl_ctx_setstring(KSSL_CTX *kssl_ctx, int which, char *text); +KSSL_CTX *kssl_ctx_new(void); +KSSL_CTX *kssl_ctx_free(KSSL_CTX *kssl_ctx); +void kssl_ctx_show(KSSL_CTX *kssl_ctx); +krb5_error_code kssl_ctx_setprinc(KSSL_CTX *kssl_ctx, int which, + krb5_data *realm, krb5_data *entity, + int nentities); +krb5_error_code kssl_cget_tkt(KSSL_CTX *kssl_ctx, krb5_data **enc_tktp, + krb5_data *authenp, KSSL_ERR *kssl_err); +krb5_error_code kssl_sget_tkt(KSSL_CTX *kssl_ctx, krb5_data *indata, + krb5_ticket_times *ttimes, KSSL_ERR *kssl_err); +krb5_error_code kssl_ctx_setkey(KSSL_CTX *kssl_ctx, krb5_keyblock *session); +void kssl_err_set(KSSL_ERR *kssl_err, int reason, char *text); +void kssl_krb5_free_data_contents(krb5_context context, krb5_data *data); +krb5_error_code kssl_build_principal_2(krb5_context context, + krb5_principal *princ, int rlen, + const char *realm, int slen, + const char *svc, int hlen, + const char *host); +krb5_error_code kssl_validate_times(krb5_timestamp atime, + krb5_ticket_times *ttimes); +krb5_error_code kssl_check_authent(KSSL_CTX *kssl_ctx, krb5_data *authentp, + krb5_timestamp *atimep, + KSSL_ERR *kssl_err); +unsigned char *kssl_skip_confound(krb5_enctype enctype, unsigned char *authn); + +void SSL_set0_kssl_ctx(SSL *s, KSSL_CTX *kctx); +KSSL_CTX *SSL_get0_kssl_ctx(SSL *s); +char *kssl_ctx_get0_client_princ(KSSL_CTX *kctx); + +#ifdef __cplusplus +} +#endif +# endif /* OPENSSL_NO_KRB5 */ +#endif /* KSSL_H */ diff --git a/Sources/OpenSSL/include/openssl/lhash.h b/Sources/OpenSSL/include/openssl/lhash.h new file mode 100644 index 0000000000..14aaa03a36 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/lhash.h @@ -0,0 +1,240 @@ +/* crypto/lhash/lhash.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +/* + * Header for dynamic hash table routines Author - Eric Young + */ + +#ifndef HEADER_LHASH_H +# define HEADER_LHASH_H + +# include "e_os2.h" +# ifndef OPENSSL_NO_FP_API +# include +# endif + +# ifndef OPENSSL_NO_BIO +# include "bio.h" +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct lhash_node_st { + void *data; + struct lhash_node_st *next; +# ifndef OPENSSL_NO_HASH_COMP + unsigned long hash; +# endif +} LHASH_NODE; + +typedef int (*LHASH_COMP_FN_TYPE) (const void *, const void *); +typedef unsigned long (*LHASH_HASH_FN_TYPE) (const void *); +typedef void (*LHASH_DOALL_FN_TYPE) (void *); +typedef void (*LHASH_DOALL_ARG_FN_TYPE) (void *, void *); + +/* + * Macros for declaring and implementing type-safe wrappers for LHASH + * callbacks. This way, callbacks can be provided to LHASH structures without + * function pointer casting and the macro-defined callbacks provide + * per-variable casting before deferring to the underlying type-specific + * callbacks. NB: It is possible to place a "static" in front of both the + * DECLARE and IMPLEMENT macros if the functions are strictly internal. + */ + +/* First: "hash" functions */ +# define DECLARE_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *); +# define IMPLEMENT_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *arg) { \ + const o_type *a = arg; \ + return name##_hash(a); } +# define LHASH_HASH_FN(name) name##_LHASH_HASH + +/* Second: "compare" functions */ +# define DECLARE_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *, const void *); +# define IMPLEMENT_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *arg1, const void *arg2) { \ + const o_type *a = arg1; \ + const o_type *b = arg2; \ + return name##_cmp(a,b); } +# define LHASH_COMP_FN(name) name##_LHASH_COMP + +/* Third: "doall" functions */ +# define DECLARE_LHASH_DOALL_FN(name, o_type) \ + void name##_LHASH_DOALL(void *); +# define IMPLEMENT_LHASH_DOALL_FN(name, o_type) \ + void name##_LHASH_DOALL(void *arg) { \ + o_type *a = arg; \ + name##_doall(a); } +# define LHASH_DOALL_FN(name) name##_LHASH_DOALL + +/* Fourth: "doall_arg" functions */ +# define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *, void *); +# define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \ + o_type *a = arg1; \ + a_type *b = arg2; \ + name##_doall_arg(a, b); } +# define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG + +typedef struct lhash_st { + LHASH_NODE **b; + LHASH_COMP_FN_TYPE comp; + LHASH_HASH_FN_TYPE hash; + unsigned int num_nodes; + unsigned int num_alloc_nodes; + unsigned int p; + unsigned int pmax; + unsigned long up_load; /* load times 256 */ + unsigned long down_load; /* load times 256 */ + unsigned long num_items; + unsigned long num_expands; + unsigned long num_expand_reallocs; + unsigned long num_contracts; + unsigned long num_contract_reallocs; + unsigned long num_hash_calls; + unsigned long num_comp_calls; + unsigned long num_insert; + unsigned long num_replace; + unsigned long num_delete; + unsigned long num_no_delete; + unsigned long num_retrieve; + unsigned long num_retrieve_miss; + unsigned long num_hash_comps; + int error; +} _LHASH; /* Do not use _LHASH directly, use LHASH_OF + * and friends */ + +# define LH_LOAD_MULT 256 + +/* + * Indicates a malloc() error in the last call, this is only bad in + * lh_insert(). + */ +# define lh_error(lh) ((lh)->error) + +_LHASH *lh_new(LHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c); +void lh_free(_LHASH *lh); +void *lh_insert(_LHASH *lh, void *data); +void *lh_delete(_LHASH *lh, const void *data); +void *lh_retrieve(_LHASH *lh, const void *data); +void lh_doall(_LHASH *lh, LHASH_DOALL_FN_TYPE func); +void lh_doall_arg(_LHASH *lh, LHASH_DOALL_ARG_FN_TYPE func, void *arg); +unsigned long lh_strhash(const char *c); +unsigned long lh_num_items(const _LHASH *lh); + +# ifndef OPENSSL_NO_FP_API +void lh_stats(const _LHASH *lh, FILE *out); +void lh_node_stats(const _LHASH *lh, FILE *out); +void lh_node_usage_stats(const _LHASH *lh, FILE *out); +# endif + +# ifndef OPENSSL_NO_BIO +void lh_stats_bio(const _LHASH *lh, BIO *out); +void lh_node_stats_bio(const _LHASH *lh, BIO *out); +void lh_node_usage_stats_bio(const _LHASH *lh, BIO *out); +# endif + +/* Type checking... */ + +# define LHASH_OF(type) struct lhash_st_##type + +# define DECLARE_LHASH_OF(type) LHASH_OF(type) { int dummy; } + +# define CHECKED_LHASH_OF(type,lh) \ + ((_LHASH *)CHECKED_PTR_OF(LHASH_OF(type),lh)) + +/* Define wrapper functions. */ +# define LHM_lh_new(type, name) \ + ((LHASH_OF(type) *)lh_new(LHASH_HASH_FN(name), LHASH_COMP_FN(name))) +# define LHM_lh_error(type, lh) \ + lh_error(CHECKED_LHASH_OF(type,lh)) +# define LHM_lh_insert(type, lh, inst) \ + ((type *)lh_insert(CHECKED_LHASH_OF(type, lh), \ + CHECKED_PTR_OF(type, inst))) +# define LHM_lh_retrieve(type, lh, inst) \ + ((type *)lh_retrieve(CHECKED_LHASH_OF(type, lh), \ + CHECKED_PTR_OF(type, inst))) +# define LHM_lh_delete(type, lh, inst) \ + ((type *)lh_delete(CHECKED_LHASH_OF(type, lh), \ + CHECKED_PTR_OF(type, inst))) +# define LHM_lh_doall(type, lh,fn) lh_doall(CHECKED_LHASH_OF(type, lh), fn) +# define LHM_lh_doall_arg(type, lh, fn, arg_type, arg) \ + lh_doall_arg(CHECKED_LHASH_OF(type, lh), fn, CHECKED_PTR_OF(arg_type, arg)) +# define LHM_lh_num_items(type, lh) lh_num_items(CHECKED_LHASH_OF(type, lh)) +# define LHM_lh_down_load(type, lh) (CHECKED_LHASH_OF(type, lh)->down_load) +# define LHM_lh_node_stats_bio(type, lh, out) \ + lh_node_stats_bio(CHECKED_LHASH_OF(type, lh), out) +# define LHM_lh_node_usage_stats_bio(type, lh, out) \ + lh_node_usage_stats_bio(CHECKED_LHASH_OF(type, lh), out) +# define LHM_lh_stats_bio(type, lh, out) \ + lh_stats_bio(CHECKED_LHASH_OF(type, lh), out) +# define LHM_lh_free(type, lh) lh_free(CHECKED_LHASH_OF(type, lh)) + +DECLARE_LHASH_OF(OPENSSL_STRING); +DECLARE_LHASH_OF(OPENSSL_CSTRING); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/md4.h b/Sources/OpenSSL/include/openssl/md4.h new file mode 100644 index 0000000000..66fa0a6f3f --- /dev/null +++ b/Sources/OpenSSL/include/openssl/md4.h @@ -0,0 +1,119 @@ +/* crypto/md4/md4.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_MD4_H +# define HEADER_MD4_H + +# include "e_os2.h" +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_NO_MD4 +# error MD4 is disabled. +# endif + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! MD4_LONG has to be at least 32 bits wide. If it's wider, then ! + * ! MD4_LONG_LOG2 has to be defined along. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ + +# if defined(__LP32__) +# define MD4_LONG unsigned long +# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) +# define MD4_LONG unsigned long +# define MD4_LONG_LOG2 3 +/* + * _CRAY note. I could declare short, but I have no idea what impact + * does it have on performance on none-T3E machines. I could declare + * int, but at least on C90 sizeof(int) can be chosen at compile time. + * So I've chosen long... + * + */ +# else +# define MD4_LONG unsigned int +# endif + +# define MD4_CBLOCK 64 +# define MD4_LBLOCK (MD4_CBLOCK/4) +# define MD4_DIGEST_LENGTH 16 + +typedef struct MD4state_st { + MD4_LONG A, B, C, D; + MD4_LONG Nl, Nh; + MD4_LONG data[MD4_LBLOCK]; + unsigned int num; +} MD4_CTX; + +# ifdef OPENSSL_FIPS +int private_MD4_Init(MD4_CTX *c); +# endif +int MD4_Init(MD4_CTX *c); +int MD4_Update(MD4_CTX *c, const void *data, size_t len); +int MD4_Final(unsigned char *md, MD4_CTX *c); +unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md); +void MD4_Transform(MD4_CTX *c, const unsigned char *b); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/md5.h b/Sources/OpenSSL/include/openssl/md5.h new file mode 100644 index 0000000000..2b8daa1ff2 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/md5.h @@ -0,0 +1,119 @@ +/* crypto/md5/md5.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_MD5_H +# define HEADER_MD5_H + +# include "e_os2.h" +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_NO_MD5 +# error MD5 is disabled. +# endif + +/* + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! MD5_LONG has to be at least 32 bits wide. If it's wider, then ! + * ! MD5_LONG_LOG2 has to be defined along. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ + +# if defined(__LP32__) +# define MD5_LONG unsigned long +# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) +# define MD5_LONG unsigned long +# define MD5_LONG_LOG2 3 +/* + * _CRAY note. I could declare short, but I have no idea what impact + * does it have on performance on none-T3E machines. I could declare + * int, but at least on C90 sizeof(int) can be chosen at compile time. + * So I've chosen long... + * + */ +# else +# define MD5_LONG unsigned int +# endif + +# define MD5_CBLOCK 64 +# define MD5_LBLOCK (MD5_CBLOCK/4) +# define MD5_DIGEST_LENGTH 16 + +typedef struct MD5state_st { + MD5_LONG A, B, C, D; + MD5_LONG Nl, Nh; + MD5_LONG data[MD5_LBLOCK]; + unsigned int num; +} MD5_CTX; + +# ifdef OPENSSL_FIPS +int private_MD5_Init(MD5_CTX *c); +# endif +int MD5_Init(MD5_CTX *c); +int MD5_Update(MD5_CTX *c, const void *data, size_t len); +int MD5_Final(unsigned char *md, MD5_CTX *c); +unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md); +void MD5_Transform(MD5_CTX *c, const unsigned char *b); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/mdc2.h b/Sources/OpenSSL/include/openssl/mdc2.h new file mode 100644 index 0000000000..8b6658aefd --- /dev/null +++ b/Sources/OpenSSL/include/openssl/mdc2.h @@ -0,0 +1,94 @@ +/* crypto/mdc2/mdc2.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_MDC2_H +# define HEADER_MDC2_H + +# include "des.h" + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_NO_MDC2 +# error MDC2 is disabled. +# endif + +# define MDC2_BLOCK 8 +# define MDC2_DIGEST_LENGTH 16 + +typedef struct mdc2_ctx_st { + unsigned int num; + unsigned char data[MDC2_BLOCK]; + DES_cblock h, hh; + int pad_type; /* either 1 or 2, default 1 */ +} MDC2_CTX; + +# ifdef OPENSSL_FIPS +int private_MDC2_Init(MDC2_CTX *c); +# endif +int MDC2_Init(MDC2_CTX *c); +int MDC2_Update(MDC2_CTX *c, const unsigned char *data, size_t len); +int MDC2_Final(unsigned char *md, MDC2_CTX *c); +unsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/modes.h b/Sources/OpenSSL/include/openssl/modes.h new file mode 100644 index 0000000000..fd488499a0 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/modes.h @@ -0,0 +1,163 @@ +/* ==================================================================== + * Copyright (c) 2008 The OpenSSL Project. All rights reserved. + * + * Rights for redistribution and usage in source and binary + * forms are granted according to the OpenSSL license. + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif +typedef void (*block128_f) (const unsigned char in[16], + unsigned char out[16], const void *key); + +typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int enc); + +typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + const unsigned char ivec[16]); + +typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + const unsigned char ivec[16], + unsigned char cmac[16]); + +void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], block128_f block); +void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], block128_f block); + +void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], + unsigned char ecount_buf[16], unsigned int *num, + block128_f block); + +void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], + unsigned char ecount_buf[16], + unsigned int *num, ctr128_f ctr); + +void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int *num, + block128_f block); + +void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int *num, + int enc, block128_f block); +void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const void *key, + unsigned char ivec[16], int *num, + int enc, block128_f block); +void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out, + size_t bits, const void *key, + unsigned char ivec[16], int *num, + int enc, block128_f block); + +size_t CRYPTO_cts128_encrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], + block128_f block); +size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); +size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], + block128_f block); +size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); + +size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, + unsigned char ivec[16], + block128_f block); +size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); +size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, + unsigned char ivec[16], + block128_f block); +size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); + +typedef struct gcm128_context GCM128_CONTEXT; + +GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block); +void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block); +void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, + size_t len); +int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, + size_t len); +int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len); +int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len); +int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len, ctr128_f stream); +int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len, ctr128_f stream); +int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag, + size_t len); +void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len); +void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx); + +typedef struct ccm128_context CCM128_CONTEXT; + +void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, + unsigned int M, unsigned int L, void *key, + block128_f block); +int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce, + size_t nlen, size_t mlen); +void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad, + size_t alen); +int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len); +int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len); +int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len, + ccm128_f stream); +int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len, + ccm128_f stream); +size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len); + +typedef struct xts128_context XTS128_CONTEXT; + +int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, + const unsigned char iv[16], + const unsigned char *inp, unsigned char *out, + size_t len, int enc); + +size_t CRYPTO_128_wrap(void *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, size_t inlen, + block128_f block); + +size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, size_t inlen, + block128_f block); + +#ifdef __cplusplus +} +#endif diff --git a/Sources/OpenSSL/include/openssl/obj_mac.h b/Sources/OpenSSL/include/openssl/obj_mac.h new file mode 100644 index 0000000000..779c309b86 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/obj_mac.h @@ -0,0 +1,4194 @@ +/* crypto/objects/obj_mac.h */ + +/* + * THIS FILE IS GENERATED FROM objects.txt by objects.pl via the following + * command: perl objects.pl objects.txt obj_mac.num obj_mac.h + */ + +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#define SN_undef "UNDEF" +#define LN_undef "undefined" +#define NID_undef 0 +#define OBJ_undef 0L + +#define SN_itu_t "ITU-T" +#define LN_itu_t "itu-t" +#define NID_itu_t 645 +#define OBJ_itu_t 0L + +#define NID_ccitt 404 +#define OBJ_ccitt OBJ_itu_t + +#define SN_iso "ISO" +#define LN_iso "iso" +#define NID_iso 181 +#define OBJ_iso 1L + +#define SN_joint_iso_itu_t "JOINT-ISO-ITU-T" +#define LN_joint_iso_itu_t "joint-iso-itu-t" +#define NID_joint_iso_itu_t 646 +#define OBJ_joint_iso_itu_t 2L + +#define NID_joint_iso_ccitt 393 +#define OBJ_joint_iso_ccitt OBJ_joint_iso_itu_t + +#define SN_member_body "member-body" +#define LN_member_body "ISO Member Body" +#define NID_member_body 182 +#define OBJ_member_body OBJ_iso,2L + +#define SN_identified_organization "identified-organization" +#define NID_identified_organization 676 +#define OBJ_identified_organization OBJ_iso,3L + +#define SN_hmac_md5 "HMAC-MD5" +#define LN_hmac_md5 "hmac-md5" +#define NID_hmac_md5 780 +#define OBJ_hmac_md5 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,1L + +#define SN_hmac_sha1 "HMAC-SHA1" +#define LN_hmac_sha1 "hmac-sha1" +#define NID_hmac_sha1 781 +#define OBJ_hmac_sha1 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L + +#define SN_certicom_arc "certicom-arc" +#define NID_certicom_arc 677 +#define OBJ_certicom_arc OBJ_identified_organization,132L + +#define SN_international_organizations "international-organizations" +#define LN_international_organizations "International Organizations" +#define NID_international_organizations 647 +#define OBJ_international_organizations OBJ_joint_iso_itu_t,23L + +#define SN_wap "wap" +#define NID_wap 678 +#define OBJ_wap OBJ_international_organizations,43L + +#define SN_wap_wsg "wap-wsg" +#define NID_wap_wsg 679 +#define OBJ_wap_wsg OBJ_wap,1L + +#define SN_selected_attribute_types "selected-attribute-types" +#define LN_selected_attribute_types "Selected Attribute Types" +#define NID_selected_attribute_types 394 +#define OBJ_selected_attribute_types OBJ_joint_iso_itu_t,5L,1L,5L + +#define SN_clearance "clearance" +#define NID_clearance 395 +#define OBJ_clearance OBJ_selected_attribute_types,55L + +#define SN_ISO_US "ISO-US" +#define LN_ISO_US "ISO US Member Body" +#define NID_ISO_US 183 +#define OBJ_ISO_US OBJ_member_body,840L + +#define SN_X9_57 "X9-57" +#define LN_X9_57 "X9.57" +#define NID_X9_57 184 +#define OBJ_X9_57 OBJ_ISO_US,10040L + +#define SN_X9cm "X9cm" +#define LN_X9cm "X9.57 CM ?" +#define NID_X9cm 185 +#define OBJ_X9cm OBJ_X9_57,4L + +#define SN_dsa "DSA" +#define LN_dsa "dsaEncryption" +#define NID_dsa 116 +#define OBJ_dsa OBJ_X9cm,1L + +#define SN_dsaWithSHA1 "DSA-SHA1" +#define LN_dsaWithSHA1 "dsaWithSHA1" +#define NID_dsaWithSHA1 113 +#define OBJ_dsaWithSHA1 OBJ_X9cm,3L + +#define SN_ansi_X9_62 "ansi-X9-62" +#define LN_ansi_X9_62 "ANSI X9.62" +#define NID_ansi_X9_62 405 +#define OBJ_ansi_X9_62 OBJ_ISO_US,10045L + +#define OBJ_X9_62_id_fieldType OBJ_ansi_X9_62,1L + +#define SN_X9_62_prime_field "prime-field" +#define NID_X9_62_prime_field 406 +#define OBJ_X9_62_prime_field OBJ_X9_62_id_fieldType,1L + +#define SN_X9_62_characteristic_two_field "characteristic-two-field" +#define NID_X9_62_characteristic_two_field 407 +#define OBJ_X9_62_characteristic_two_field OBJ_X9_62_id_fieldType,2L + +#define SN_X9_62_id_characteristic_two_basis "id-characteristic-two-basis" +#define NID_X9_62_id_characteristic_two_basis 680 +#define OBJ_X9_62_id_characteristic_two_basis OBJ_X9_62_characteristic_two_field,3L + +#define SN_X9_62_onBasis "onBasis" +#define NID_X9_62_onBasis 681 +#define OBJ_X9_62_onBasis OBJ_X9_62_id_characteristic_two_basis,1L + +#define SN_X9_62_tpBasis "tpBasis" +#define NID_X9_62_tpBasis 682 +#define OBJ_X9_62_tpBasis OBJ_X9_62_id_characteristic_two_basis,2L + +#define SN_X9_62_ppBasis "ppBasis" +#define NID_X9_62_ppBasis 683 +#define OBJ_X9_62_ppBasis OBJ_X9_62_id_characteristic_two_basis,3L + +#define OBJ_X9_62_id_publicKeyType OBJ_ansi_X9_62,2L + +#define SN_X9_62_id_ecPublicKey "id-ecPublicKey" +#define NID_X9_62_id_ecPublicKey 408 +#define OBJ_X9_62_id_ecPublicKey OBJ_X9_62_id_publicKeyType,1L + +#define OBJ_X9_62_ellipticCurve OBJ_ansi_X9_62,3L + +#define OBJ_X9_62_c_TwoCurve OBJ_X9_62_ellipticCurve,0L + +#define SN_X9_62_c2pnb163v1 "c2pnb163v1" +#define NID_X9_62_c2pnb163v1 684 +#define OBJ_X9_62_c2pnb163v1 OBJ_X9_62_c_TwoCurve,1L + +#define SN_X9_62_c2pnb163v2 "c2pnb163v2" +#define NID_X9_62_c2pnb163v2 685 +#define OBJ_X9_62_c2pnb163v2 OBJ_X9_62_c_TwoCurve,2L + +#define SN_X9_62_c2pnb163v3 "c2pnb163v3" +#define NID_X9_62_c2pnb163v3 686 +#define OBJ_X9_62_c2pnb163v3 OBJ_X9_62_c_TwoCurve,3L + +#define SN_X9_62_c2pnb176v1 "c2pnb176v1" +#define NID_X9_62_c2pnb176v1 687 +#define OBJ_X9_62_c2pnb176v1 OBJ_X9_62_c_TwoCurve,4L + +#define SN_X9_62_c2tnb191v1 "c2tnb191v1" +#define NID_X9_62_c2tnb191v1 688 +#define OBJ_X9_62_c2tnb191v1 OBJ_X9_62_c_TwoCurve,5L + +#define SN_X9_62_c2tnb191v2 "c2tnb191v2" +#define NID_X9_62_c2tnb191v2 689 +#define OBJ_X9_62_c2tnb191v2 OBJ_X9_62_c_TwoCurve,6L + +#define SN_X9_62_c2tnb191v3 "c2tnb191v3" +#define NID_X9_62_c2tnb191v3 690 +#define OBJ_X9_62_c2tnb191v3 OBJ_X9_62_c_TwoCurve,7L + +#define SN_X9_62_c2onb191v4 "c2onb191v4" +#define NID_X9_62_c2onb191v4 691 +#define OBJ_X9_62_c2onb191v4 OBJ_X9_62_c_TwoCurve,8L + +#define SN_X9_62_c2onb191v5 "c2onb191v5" +#define NID_X9_62_c2onb191v5 692 +#define OBJ_X9_62_c2onb191v5 OBJ_X9_62_c_TwoCurve,9L + +#define SN_X9_62_c2pnb208w1 "c2pnb208w1" +#define NID_X9_62_c2pnb208w1 693 +#define OBJ_X9_62_c2pnb208w1 OBJ_X9_62_c_TwoCurve,10L + +#define SN_X9_62_c2tnb239v1 "c2tnb239v1" +#define NID_X9_62_c2tnb239v1 694 +#define OBJ_X9_62_c2tnb239v1 OBJ_X9_62_c_TwoCurve,11L + +#define SN_X9_62_c2tnb239v2 "c2tnb239v2" +#define NID_X9_62_c2tnb239v2 695 +#define OBJ_X9_62_c2tnb239v2 OBJ_X9_62_c_TwoCurve,12L + +#define SN_X9_62_c2tnb239v3 "c2tnb239v3" +#define NID_X9_62_c2tnb239v3 696 +#define OBJ_X9_62_c2tnb239v3 OBJ_X9_62_c_TwoCurve,13L + +#define SN_X9_62_c2onb239v4 "c2onb239v4" +#define NID_X9_62_c2onb239v4 697 +#define OBJ_X9_62_c2onb239v4 OBJ_X9_62_c_TwoCurve,14L + +#define SN_X9_62_c2onb239v5 "c2onb239v5" +#define NID_X9_62_c2onb239v5 698 +#define OBJ_X9_62_c2onb239v5 OBJ_X9_62_c_TwoCurve,15L + +#define SN_X9_62_c2pnb272w1 "c2pnb272w1" +#define NID_X9_62_c2pnb272w1 699 +#define OBJ_X9_62_c2pnb272w1 OBJ_X9_62_c_TwoCurve,16L + +#define SN_X9_62_c2pnb304w1 "c2pnb304w1" +#define NID_X9_62_c2pnb304w1 700 +#define OBJ_X9_62_c2pnb304w1 OBJ_X9_62_c_TwoCurve,17L + +#define SN_X9_62_c2tnb359v1 "c2tnb359v1" +#define NID_X9_62_c2tnb359v1 701 +#define OBJ_X9_62_c2tnb359v1 OBJ_X9_62_c_TwoCurve,18L + +#define SN_X9_62_c2pnb368w1 "c2pnb368w1" +#define NID_X9_62_c2pnb368w1 702 +#define OBJ_X9_62_c2pnb368w1 OBJ_X9_62_c_TwoCurve,19L + +#define SN_X9_62_c2tnb431r1 "c2tnb431r1" +#define NID_X9_62_c2tnb431r1 703 +#define OBJ_X9_62_c2tnb431r1 OBJ_X9_62_c_TwoCurve,20L + +#define OBJ_X9_62_primeCurve OBJ_X9_62_ellipticCurve,1L + +#define SN_X9_62_prime192v1 "prime192v1" +#define NID_X9_62_prime192v1 409 +#define OBJ_X9_62_prime192v1 OBJ_X9_62_primeCurve,1L + +#define SN_X9_62_prime192v2 "prime192v2" +#define NID_X9_62_prime192v2 410 +#define OBJ_X9_62_prime192v2 OBJ_X9_62_primeCurve,2L + +#define SN_X9_62_prime192v3 "prime192v3" +#define NID_X9_62_prime192v3 411 +#define OBJ_X9_62_prime192v3 OBJ_X9_62_primeCurve,3L + +#define SN_X9_62_prime239v1 "prime239v1" +#define NID_X9_62_prime239v1 412 +#define OBJ_X9_62_prime239v1 OBJ_X9_62_primeCurve,4L + +#define SN_X9_62_prime239v2 "prime239v2" +#define NID_X9_62_prime239v2 413 +#define OBJ_X9_62_prime239v2 OBJ_X9_62_primeCurve,5L + +#define SN_X9_62_prime239v3 "prime239v3" +#define NID_X9_62_prime239v3 414 +#define OBJ_X9_62_prime239v3 OBJ_X9_62_primeCurve,6L + +#define SN_X9_62_prime256v1 "prime256v1" +#define NID_X9_62_prime256v1 415 +#define OBJ_X9_62_prime256v1 OBJ_X9_62_primeCurve,7L + +#define OBJ_X9_62_id_ecSigType OBJ_ansi_X9_62,4L + +#define SN_ecdsa_with_SHA1 "ecdsa-with-SHA1" +#define NID_ecdsa_with_SHA1 416 +#define OBJ_ecdsa_with_SHA1 OBJ_X9_62_id_ecSigType,1L + +#define SN_ecdsa_with_Recommended "ecdsa-with-Recommended" +#define NID_ecdsa_with_Recommended 791 +#define OBJ_ecdsa_with_Recommended OBJ_X9_62_id_ecSigType,2L + +#define SN_ecdsa_with_Specified "ecdsa-with-Specified" +#define NID_ecdsa_with_Specified 792 +#define OBJ_ecdsa_with_Specified OBJ_X9_62_id_ecSigType,3L + +#define SN_ecdsa_with_SHA224 "ecdsa-with-SHA224" +#define NID_ecdsa_with_SHA224 793 +#define OBJ_ecdsa_with_SHA224 OBJ_ecdsa_with_Specified,1L + +#define SN_ecdsa_with_SHA256 "ecdsa-with-SHA256" +#define NID_ecdsa_with_SHA256 794 +#define OBJ_ecdsa_with_SHA256 OBJ_ecdsa_with_Specified,2L + +#define SN_ecdsa_with_SHA384 "ecdsa-with-SHA384" +#define NID_ecdsa_with_SHA384 795 +#define OBJ_ecdsa_with_SHA384 OBJ_ecdsa_with_Specified,3L + +#define SN_ecdsa_with_SHA512 "ecdsa-with-SHA512" +#define NID_ecdsa_with_SHA512 796 +#define OBJ_ecdsa_with_SHA512 OBJ_ecdsa_with_Specified,4L + +#define OBJ_secg_ellipticCurve OBJ_certicom_arc,0L + +#define SN_secp112r1 "secp112r1" +#define NID_secp112r1 704 +#define OBJ_secp112r1 OBJ_secg_ellipticCurve,6L + +#define SN_secp112r2 "secp112r2" +#define NID_secp112r2 705 +#define OBJ_secp112r2 OBJ_secg_ellipticCurve,7L + +#define SN_secp128r1 "secp128r1" +#define NID_secp128r1 706 +#define OBJ_secp128r1 OBJ_secg_ellipticCurve,28L + +#define SN_secp128r2 "secp128r2" +#define NID_secp128r2 707 +#define OBJ_secp128r2 OBJ_secg_ellipticCurve,29L + +#define SN_secp160k1 "secp160k1" +#define NID_secp160k1 708 +#define OBJ_secp160k1 OBJ_secg_ellipticCurve,9L + +#define SN_secp160r1 "secp160r1" +#define NID_secp160r1 709 +#define OBJ_secp160r1 OBJ_secg_ellipticCurve,8L + +#define SN_secp160r2 "secp160r2" +#define NID_secp160r2 710 +#define OBJ_secp160r2 OBJ_secg_ellipticCurve,30L + +#define SN_secp192k1 "secp192k1" +#define NID_secp192k1 711 +#define OBJ_secp192k1 OBJ_secg_ellipticCurve,31L + +#define SN_secp224k1 "secp224k1" +#define NID_secp224k1 712 +#define OBJ_secp224k1 OBJ_secg_ellipticCurve,32L + +#define SN_secp224r1 "secp224r1" +#define NID_secp224r1 713 +#define OBJ_secp224r1 OBJ_secg_ellipticCurve,33L + +#define SN_secp256k1 "secp256k1" +#define NID_secp256k1 714 +#define OBJ_secp256k1 OBJ_secg_ellipticCurve,10L + +#define SN_secp384r1 "secp384r1" +#define NID_secp384r1 715 +#define OBJ_secp384r1 OBJ_secg_ellipticCurve,34L + +#define SN_secp521r1 "secp521r1" +#define NID_secp521r1 716 +#define OBJ_secp521r1 OBJ_secg_ellipticCurve,35L + +#define SN_sect113r1 "sect113r1" +#define NID_sect113r1 717 +#define OBJ_sect113r1 OBJ_secg_ellipticCurve,4L + +#define SN_sect113r2 "sect113r2" +#define NID_sect113r2 718 +#define OBJ_sect113r2 OBJ_secg_ellipticCurve,5L + +#define SN_sect131r1 "sect131r1" +#define NID_sect131r1 719 +#define OBJ_sect131r1 OBJ_secg_ellipticCurve,22L + +#define SN_sect131r2 "sect131r2" +#define NID_sect131r2 720 +#define OBJ_sect131r2 OBJ_secg_ellipticCurve,23L + +#define SN_sect163k1 "sect163k1" +#define NID_sect163k1 721 +#define OBJ_sect163k1 OBJ_secg_ellipticCurve,1L + +#define SN_sect163r1 "sect163r1" +#define NID_sect163r1 722 +#define OBJ_sect163r1 OBJ_secg_ellipticCurve,2L + +#define SN_sect163r2 "sect163r2" +#define NID_sect163r2 723 +#define OBJ_sect163r2 OBJ_secg_ellipticCurve,15L + +#define SN_sect193r1 "sect193r1" +#define NID_sect193r1 724 +#define OBJ_sect193r1 OBJ_secg_ellipticCurve,24L + +#define SN_sect193r2 "sect193r2" +#define NID_sect193r2 725 +#define OBJ_sect193r2 OBJ_secg_ellipticCurve,25L + +#define SN_sect233k1 "sect233k1" +#define NID_sect233k1 726 +#define OBJ_sect233k1 OBJ_secg_ellipticCurve,26L + +#define SN_sect233r1 "sect233r1" +#define NID_sect233r1 727 +#define OBJ_sect233r1 OBJ_secg_ellipticCurve,27L + +#define SN_sect239k1 "sect239k1" +#define NID_sect239k1 728 +#define OBJ_sect239k1 OBJ_secg_ellipticCurve,3L + +#define SN_sect283k1 "sect283k1" +#define NID_sect283k1 729 +#define OBJ_sect283k1 OBJ_secg_ellipticCurve,16L + +#define SN_sect283r1 "sect283r1" +#define NID_sect283r1 730 +#define OBJ_sect283r1 OBJ_secg_ellipticCurve,17L + +#define SN_sect409k1 "sect409k1" +#define NID_sect409k1 731 +#define OBJ_sect409k1 OBJ_secg_ellipticCurve,36L + +#define SN_sect409r1 "sect409r1" +#define NID_sect409r1 732 +#define OBJ_sect409r1 OBJ_secg_ellipticCurve,37L + +#define SN_sect571k1 "sect571k1" +#define NID_sect571k1 733 +#define OBJ_sect571k1 OBJ_secg_ellipticCurve,38L + +#define SN_sect571r1 "sect571r1" +#define NID_sect571r1 734 +#define OBJ_sect571r1 OBJ_secg_ellipticCurve,39L + +#define OBJ_wap_wsg_idm_ecid OBJ_wap_wsg,4L + +#define SN_wap_wsg_idm_ecid_wtls1 "wap-wsg-idm-ecid-wtls1" +#define NID_wap_wsg_idm_ecid_wtls1 735 +#define OBJ_wap_wsg_idm_ecid_wtls1 OBJ_wap_wsg_idm_ecid,1L + +#define SN_wap_wsg_idm_ecid_wtls3 "wap-wsg-idm-ecid-wtls3" +#define NID_wap_wsg_idm_ecid_wtls3 736 +#define OBJ_wap_wsg_idm_ecid_wtls3 OBJ_wap_wsg_idm_ecid,3L + +#define SN_wap_wsg_idm_ecid_wtls4 "wap-wsg-idm-ecid-wtls4" +#define NID_wap_wsg_idm_ecid_wtls4 737 +#define OBJ_wap_wsg_idm_ecid_wtls4 OBJ_wap_wsg_idm_ecid,4L + +#define SN_wap_wsg_idm_ecid_wtls5 "wap-wsg-idm-ecid-wtls5" +#define NID_wap_wsg_idm_ecid_wtls5 738 +#define OBJ_wap_wsg_idm_ecid_wtls5 OBJ_wap_wsg_idm_ecid,5L + +#define SN_wap_wsg_idm_ecid_wtls6 "wap-wsg-idm-ecid-wtls6" +#define NID_wap_wsg_idm_ecid_wtls6 739 +#define OBJ_wap_wsg_idm_ecid_wtls6 OBJ_wap_wsg_idm_ecid,6L + +#define SN_wap_wsg_idm_ecid_wtls7 "wap-wsg-idm-ecid-wtls7" +#define NID_wap_wsg_idm_ecid_wtls7 740 +#define OBJ_wap_wsg_idm_ecid_wtls7 OBJ_wap_wsg_idm_ecid,7L + +#define SN_wap_wsg_idm_ecid_wtls8 "wap-wsg-idm-ecid-wtls8" +#define NID_wap_wsg_idm_ecid_wtls8 741 +#define OBJ_wap_wsg_idm_ecid_wtls8 OBJ_wap_wsg_idm_ecid,8L + +#define SN_wap_wsg_idm_ecid_wtls9 "wap-wsg-idm-ecid-wtls9" +#define NID_wap_wsg_idm_ecid_wtls9 742 +#define OBJ_wap_wsg_idm_ecid_wtls9 OBJ_wap_wsg_idm_ecid,9L + +#define SN_wap_wsg_idm_ecid_wtls10 "wap-wsg-idm-ecid-wtls10" +#define NID_wap_wsg_idm_ecid_wtls10 743 +#define OBJ_wap_wsg_idm_ecid_wtls10 OBJ_wap_wsg_idm_ecid,10L + +#define SN_wap_wsg_idm_ecid_wtls11 "wap-wsg-idm-ecid-wtls11" +#define NID_wap_wsg_idm_ecid_wtls11 744 +#define OBJ_wap_wsg_idm_ecid_wtls11 OBJ_wap_wsg_idm_ecid,11L + +#define SN_wap_wsg_idm_ecid_wtls12 "wap-wsg-idm-ecid-wtls12" +#define NID_wap_wsg_idm_ecid_wtls12 745 +#define OBJ_wap_wsg_idm_ecid_wtls12 OBJ_wap_wsg_idm_ecid,12L + +#define SN_cast5_cbc "CAST5-CBC" +#define LN_cast5_cbc "cast5-cbc" +#define NID_cast5_cbc 108 +#define OBJ_cast5_cbc OBJ_ISO_US,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 OBJ_ISO_US,113533L,7L,66L,12L + +#define SN_id_PasswordBasedMAC "id-PasswordBasedMAC" +#define LN_id_PasswordBasedMAC "password based MAC" +#define NID_id_PasswordBasedMAC 782 +#define OBJ_id_PasswordBasedMAC OBJ_ISO_US,113533L,7L,66L,13L + +#define SN_id_DHBasedMac "id-DHBasedMac" +#define LN_id_DHBasedMac "Diffie-Hellman based MAC" +#define NID_id_DHBasedMac 783 +#define OBJ_id_DHBasedMac OBJ_ISO_US,113533L,7L,66L,30L + +#define SN_rsadsi "rsadsi" +#define LN_rsadsi "RSA Data Security, Inc." +#define NID_rsadsi 1 +#define OBJ_rsadsi OBJ_ISO_US,113549L + +#define SN_pkcs "pkcs" +#define LN_pkcs "RSA Data Security, Inc. PKCS" +#define NID_pkcs 2 +#define OBJ_pkcs OBJ_rsadsi,1L + +#define SN_pkcs1 "pkcs1" +#define NID_pkcs1 186 +#define OBJ_pkcs1 OBJ_pkcs,1L + +#define LN_rsaEncryption "rsaEncryption" +#define NID_rsaEncryption 6 +#define OBJ_rsaEncryption OBJ_pkcs1,1L + +#define SN_md2WithRSAEncryption "RSA-MD2" +#define LN_md2WithRSAEncryption "md2WithRSAEncryption" +#define NID_md2WithRSAEncryption 7 +#define OBJ_md2WithRSAEncryption OBJ_pkcs1,2L + +#define SN_md4WithRSAEncryption "RSA-MD4" +#define LN_md4WithRSAEncryption "md4WithRSAEncryption" +#define NID_md4WithRSAEncryption 396 +#define OBJ_md4WithRSAEncryption OBJ_pkcs1,3L + +#define SN_md5WithRSAEncryption "RSA-MD5" +#define LN_md5WithRSAEncryption "md5WithRSAEncryption" +#define NID_md5WithRSAEncryption 8 +#define OBJ_md5WithRSAEncryption OBJ_pkcs1,4L + +#define SN_sha1WithRSAEncryption "RSA-SHA1" +#define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" +#define NID_sha1WithRSAEncryption 65 +#define OBJ_sha1WithRSAEncryption OBJ_pkcs1,5L + +#define SN_rsaesOaep "RSAES-OAEP" +#define LN_rsaesOaep "rsaesOaep" +#define NID_rsaesOaep 919 +#define OBJ_rsaesOaep OBJ_pkcs1,7L + +#define SN_mgf1 "MGF1" +#define LN_mgf1 "mgf1" +#define NID_mgf1 911 +#define OBJ_mgf1 OBJ_pkcs1,8L + +#define SN_pSpecified "PSPECIFIED" +#define LN_pSpecified "pSpecified" +#define NID_pSpecified 935 +#define OBJ_pSpecified OBJ_pkcs1,9L + +#define SN_rsassaPss "RSASSA-PSS" +#define LN_rsassaPss "rsassaPss" +#define NID_rsassaPss 912 +#define OBJ_rsassaPss OBJ_pkcs1,10L + +#define SN_sha256WithRSAEncryption "RSA-SHA256" +#define LN_sha256WithRSAEncryption "sha256WithRSAEncryption" +#define NID_sha256WithRSAEncryption 668 +#define OBJ_sha256WithRSAEncryption OBJ_pkcs1,11L + +#define SN_sha384WithRSAEncryption "RSA-SHA384" +#define LN_sha384WithRSAEncryption "sha384WithRSAEncryption" +#define NID_sha384WithRSAEncryption 669 +#define OBJ_sha384WithRSAEncryption OBJ_pkcs1,12L + +#define SN_sha512WithRSAEncryption "RSA-SHA512" +#define LN_sha512WithRSAEncryption "sha512WithRSAEncryption" +#define NID_sha512WithRSAEncryption 670 +#define OBJ_sha512WithRSAEncryption OBJ_pkcs1,13L + +#define SN_sha224WithRSAEncryption "RSA-SHA224" +#define LN_sha224WithRSAEncryption "sha224WithRSAEncryption" +#define NID_sha224WithRSAEncryption 671 +#define OBJ_sha224WithRSAEncryption OBJ_pkcs1,14L + +#define SN_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_pkcs5 "pkcs5" +#define NID_pkcs5 187 +#define OBJ_pkcs5 OBJ_pkcs,5L + +#define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" +#define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" +#define NID_pbeWithMD2AndDES_CBC 9 +#define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs5,1L + +#define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" +#define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" +#define NID_pbeWithMD5AndDES_CBC 10 +#define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs5,3L + +#define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" +#define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" +#define NID_pbeWithMD2AndRC2_CBC 168 +#define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs5,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_pkcs5,6L + +#define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" +#define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" +#define NID_pbeWithSHA1AndDES_CBC 170 +#define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs5,10L + +#define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" +#define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" +#define NID_pbeWithSHA1AndRC2_CBC 68 +#define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs5,11L + +#define LN_id_pbkdf2 "PBKDF2" +#define NID_id_pbkdf2 69 +#define OBJ_id_pbkdf2 OBJ_pkcs5,12L + +#define LN_pbes2 "PBES2" +#define NID_pbes2 161 +#define OBJ_pbes2 OBJ_pkcs5,13L + +#define LN_pbmac1 "PBMAC1" +#define NID_pbmac1 162 +#define OBJ_pbmac1 OBJ_pkcs5,14L + +#define SN_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 SN_pkcs9 "pkcs9" +#define NID_pkcs9 47 +#define OBJ_pkcs9 OBJ_pkcs,9L + +#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_ext_req "extReq" +#define LN_ext_req "Extension Request" +#define NID_ext_req 172 +#define OBJ_ext_req OBJ_pkcs9,14L + +#define SN_SMIMECapabilities "SMIME-CAPS" +#define LN_SMIMECapabilities "S/MIME Capabilities" +#define NID_SMIMECapabilities 167 +#define OBJ_SMIMECapabilities OBJ_pkcs9,15L + +#define SN_SMIME "SMIME" +#define LN_SMIME "S/MIME" +#define NID_SMIME 188 +#define OBJ_SMIME OBJ_pkcs9,16L + +#define SN_id_smime_mod "id-smime-mod" +#define NID_id_smime_mod 189 +#define OBJ_id_smime_mod OBJ_SMIME,0L + +#define SN_id_smime_ct "id-smime-ct" +#define NID_id_smime_ct 190 +#define OBJ_id_smime_ct OBJ_SMIME,1L + +#define SN_id_smime_aa "id-smime-aa" +#define NID_id_smime_aa 191 +#define OBJ_id_smime_aa OBJ_SMIME,2L + +#define SN_id_smime_alg "id-smime-alg" +#define NID_id_smime_alg 192 +#define OBJ_id_smime_alg OBJ_SMIME,3L + +#define SN_id_smime_cd "id-smime-cd" +#define NID_id_smime_cd 193 +#define OBJ_id_smime_cd OBJ_SMIME,4L + +#define SN_id_smime_spq "id-smime-spq" +#define NID_id_smime_spq 194 +#define OBJ_id_smime_spq OBJ_SMIME,5L + +#define SN_id_smime_cti "id-smime-cti" +#define NID_id_smime_cti 195 +#define OBJ_id_smime_cti OBJ_SMIME,6L + +#define SN_id_smime_mod_cms "id-smime-mod-cms" +#define NID_id_smime_mod_cms 196 +#define OBJ_id_smime_mod_cms OBJ_id_smime_mod,1L + +#define SN_id_smime_mod_ess "id-smime-mod-ess" +#define NID_id_smime_mod_ess 197 +#define OBJ_id_smime_mod_ess OBJ_id_smime_mod,2L + +#define SN_id_smime_mod_oid "id-smime-mod-oid" +#define NID_id_smime_mod_oid 198 +#define OBJ_id_smime_mod_oid OBJ_id_smime_mod,3L + +#define SN_id_smime_mod_msg_v3 "id-smime-mod-msg-v3" +#define NID_id_smime_mod_msg_v3 199 +#define OBJ_id_smime_mod_msg_v3 OBJ_id_smime_mod,4L + +#define SN_id_smime_mod_ets_eSignature_88 "id-smime-mod-ets-eSignature-88" +#define NID_id_smime_mod_ets_eSignature_88 200 +#define OBJ_id_smime_mod_ets_eSignature_88 OBJ_id_smime_mod,5L + +#define SN_id_smime_mod_ets_eSignature_97 "id-smime-mod-ets-eSignature-97" +#define NID_id_smime_mod_ets_eSignature_97 201 +#define OBJ_id_smime_mod_ets_eSignature_97 OBJ_id_smime_mod,6L + +#define SN_id_smime_mod_ets_eSigPolicy_88 "id-smime-mod-ets-eSigPolicy-88" +#define NID_id_smime_mod_ets_eSigPolicy_88 202 +#define OBJ_id_smime_mod_ets_eSigPolicy_88 OBJ_id_smime_mod,7L + +#define SN_id_smime_mod_ets_eSigPolicy_97 "id-smime-mod-ets-eSigPolicy-97" +#define NID_id_smime_mod_ets_eSigPolicy_97 203 +#define OBJ_id_smime_mod_ets_eSigPolicy_97 OBJ_id_smime_mod,8L + +#define SN_id_smime_ct_receipt "id-smime-ct-receipt" +#define NID_id_smime_ct_receipt 204 +#define OBJ_id_smime_ct_receipt OBJ_id_smime_ct,1L + +#define SN_id_smime_ct_authData "id-smime-ct-authData" +#define NID_id_smime_ct_authData 205 +#define OBJ_id_smime_ct_authData OBJ_id_smime_ct,2L + +#define SN_id_smime_ct_publishCert "id-smime-ct-publishCert" +#define NID_id_smime_ct_publishCert 206 +#define OBJ_id_smime_ct_publishCert OBJ_id_smime_ct,3L + +#define SN_id_smime_ct_TSTInfo "id-smime-ct-TSTInfo" +#define NID_id_smime_ct_TSTInfo 207 +#define OBJ_id_smime_ct_TSTInfo OBJ_id_smime_ct,4L + +#define SN_id_smime_ct_TDTInfo "id-smime-ct-TDTInfo" +#define NID_id_smime_ct_TDTInfo 208 +#define OBJ_id_smime_ct_TDTInfo OBJ_id_smime_ct,5L + +#define SN_id_smime_ct_contentInfo "id-smime-ct-contentInfo" +#define NID_id_smime_ct_contentInfo 209 +#define OBJ_id_smime_ct_contentInfo OBJ_id_smime_ct,6L + +#define SN_id_smime_ct_DVCSRequestData "id-smime-ct-DVCSRequestData" +#define NID_id_smime_ct_DVCSRequestData 210 +#define OBJ_id_smime_ct_DVCSRequestData OBJ_id_smime_ct,7L + +#define SN_id_smime_ct_DVCSResponseData "id-smime-ct-DVCSResponseData" +#define NID_id_smime_ct_DVCSResponseData 211 +#define OBJ_id_smime_ct_DVCSResponseData OBJ_id_smime_ct,8L + +#define SN_id_smime_ct_compressedData "id-smime-ct-compressedData" +#define NID_id_smime_ct_compressedData 786 +#define OBJ_id_smime_ct_compressedData OBJ_id_smime_ct,9L + +#define SN_id_ct_asciiTextWithCRLF "id-ct-asciiTextWithCRLF" +#define NID_id_ct_asciiTextWithCRLF 787 +#define OBJ_id_ct_asciiTextWithCRLF OBJ_id_smime_ct,27L + +#define SN_id_smime_aa_receiptRequest "id-smime-aa-receiptRequest" +#define NID_id_smime_aa_receiptRequest 212 +#define OBJ_id_smime_aa_receiptRequest OBJ_id_smime_aa,1L + +#define SN_id_smime_aa_securityLabel "id-smime-aa-securityLabel" +#define NID_id_smime_aa_securityLabel 213 +#define OBJ_id_smime_aa_securityLabel OBJ_id_smime_aa,2L + +#define SN_id_smime_aa_mlExpandHistory "id-smime-aa-mlExpandHistory" +#define NID_id_smime_aa_mlExpandHistory 214 +#define OBJ_id_smime_aa_mlExpandHistory OBJ_id_smime_aa,3L + +#define SN_id_smime_aa_contentHint "id-smime-aa-contentHint" +#define NID_id_smime_aa_contentHint 215 +#define OBJ_id_smime_aa_contentHint OBJ_id_smime_aa,4L + +#define SN_id_smime_aa_msgSigDigest "id-smime-aa-msgSigDigest" +#define NID_id_smime_aa_msgSigDigest 216 +#define OBJ_id_smime_aa_msgSigDigest OBJ_id_smime_aa,5L + +#define SN_id_smime_aa_encapContentType "id-smime-aa-encapContentType" +#define NID_id_smime_aa_encapContentType 217 +#define OBJ_id_smime_aa_encapContentType OBJ_id_smime_aa,6L + +#define SN_id_smime_aa_contentIdentifier "id-smime-aa-contentIdentifier" +#define NID_id_smime_aa_contentIdentifier 218 +#define OBJ_id_smime_aa_contentIdentifier OBJ_id_smime_aa,7L + +#define SN_id_smime_aa_macValue "id-smime-aa-macValue" +#define NID_id_smime_aa_macValue 219 +#define OBJ_id_smime_aa_macValue OBJ_id_smime_aa,8L + +#define SN_id_smime_aa_equivalentLabels "id-smime-aa-equivalentLabels" +#define NID_id_smime_aa_equivalentLabels 220 +#define OBJ_id_smime_aa_equivalentLabels OBJ_id_smime_aa,9L + +#define SN_id_smime_aa_contentReference "id-smime-aa-contentReference" +#define NID_id_smime_aa_contentReference 221 +#define OBJ_id_smime_aa_contentReference OBJ_id_smime_aa,10L + +#define SN_id_smime_aa_encrypKeyPref "id-smime-aa-encrypKeyPref" +#define NID_id_smime_aa_encrypKeyPref 222 +#define OBJ_id_smime_aa_encrypKeyPref OBJ_id_smime_aa,11L + +#define SN_id_smime_aa_signingCertificate "id-smime-aa-signingCertificate" +#define NID_id_smime_aa_signingCertificate 223 +#define OBJ_id_smime_aa_signingCertificate OBJ_id_smime_aa,12L + +#define SN_id_smime_aa_smimeEncryptCerts "id-smime-aa-smimeEncryptCerts" +#define NID_id_smime_aa_smimeEncryptCerts 224 +#define OBJ_id_smime_aa_smimeEncryptCerts OBJ_id_smime_aa,13L + +#define SN_id_smime_aa_timeStampToken "id-smime-aa-timeStampToken" +#define NID_id_smime_aa_timeStampToken 225 +#define OBJ_id_smime_aa_timeStampToken OBJ_id_smime_aa,14L + +#define SN_id_smime_aa_ets_sigPolicyId "id-smime-aa-ets-sigPolicyId" +#define NID_id_smime_aa_ets_sigPolicyId 226 +#define OBJ_id_smime_aa_ets_sigPolicyId OBJ_id_smime_aa,15L + +#define SN_id_smime_aa_ets_commitmentType "id-smime-aa-ets-commitmentType" +#define NID_id_smime_aa_ets_commitmentType 227 +#define OBJ_id_smime_aa_ets_commitmentType OBJ_id_smime_aa,16L + +#define SN_id_smime_aa_ets_signerLocation "id-smime-aa-ets-signerLocation" +#define NID_id_smime_aa_ets_signerLocation 228 +#define OBJ_id_smime_aa_ets_signerLocation OBJ_id_smime_aa,17L + +#define SN_id_smime_aa_ets_signerAttr "id-smime-aa-ets-signerAttr" +#define NID_id_smime_aa_ets_signerAttr 229 +#define OBJ_id_smime_aa_ets_signerAttr OBJ_id_smime_aa,18L + +#define SN_id_smime_aa_ets_otherSigCert "id-smime-aa-ets-otherSigCert" +#define NID_id_smime_aa_ets_otherSigCert 230 +#define OBJ_id_smime_aa_ets_otherSigCert OBJ_id_smime_aa,19L + +#define SN_id_smime_aa_ets_contentTimestamp "id-smime-aa-ets-contentTimestamp" +#define NID_id_smime_aa_ets_contentTimestamp 231 +#define OBJ_id_smime_aa_ets_contentTimestamp OBJ_id_smime_aa,20L + +#define SN_id_smime_aa_ets_CertificateRefs "id-smime-aa-ets-CertificateRefs" +#define NID_id_smime_aa_ets_CertificateRefs 232 +#define OBJ_id_smime_aa_ets_CertificateRefs OBJ_id_smime_aa,21L + +#define SN_id_smime_aa_ets_RevocationRefs "id-smime-aa-ets-RevocationRefs" +#define NID_id_smime_aa_ets_RevocationRefs 233 +#define OBJ_id_smime_aa_ets_RevocationRefs OBJ_id_smime_aa,22L + +#define SN_id_smime_aa_ets_certValues "id-smime-aa-ets-certValues" +#define NID_id_smime_aa_ets_certValues 234 +#define OBJ_id_smime_aa_ets_certValues OBJ_id_smime_aa,23L + +#define SN_id_smime_aa_ets_revocationValues "id-smime-aa-ets-revocationValues" +#define NID_id_smime_aa_ets_revocationValues 235 +#define OBJ_id_smime_aa_ets_revocationValues OBJ_id_smime_aa,24L + +#define SN_id_smime_aa_ets_escTimeStamp "id-smime-aa-ets-escTimeStamp" +#define NID_id_smime_aa_ets_escTimeStamp 236 +#define OBJ_id_smime_aa_ets_escTimeStamp OBJ_id_smime_aa,25L + +#define SN_id_smime_aa_ets_certCRLTimestamp "id-smime-aa-ets-certCRLTimestamp" +#define NID_id_smime_aa_ets_certCRLTimestamp 237 +#define OBJ_id_smime_aa_ets_certCRLTimestamp OBJ_id_smime_aa,26L + +#define SN_id_smime_aa_ets_archiveTimeStamp "id-smime-aa-ets-archiveTimeStamp" +#define NID_id_smime_aa_ets_archiveTimeStamp 238 +#define OBJ_id_smime_aa_ets_archiveTimeStamp OBJ_id_smime_aa,27L + +#define SN_id_smime_aa_signatureType "id-smime-aa-signatureType" +#define NID_id_smime_aa_signatureType 239 +#define OBJ_id_smime_aa_signatureType OBJ_id_smime_aa,28L + +#define SN_id_smime_aa_dvcs_dvc "id-smime-aa-dvcs-dvc" +#define NID_id_smime_aa_dvcs_dvc 240 +#define OBJ_id_smime_aa_dvcs_dvc OBJ_id_smime_aa,29L + +#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 + +#define SN_id_smime_alg_ESDHwithRC2 "id-smime-alg-ESDHwithRC2" +#define NID_id_smime_alg_ESDHwithRC2 242 +#define OBJ_id_smime_alg_ESDHwithRC2 OBJ_id_smime_alg,2L + +#define SN_id_smime_alg_3DESwrap "id-smime-alg-3DESwrap" +#define NID_id_smime_alg_3DESwrap 243 +#define OBJ_id_smime_alg_3DESwrap OBJ_id_smime_alg,3L + +#define SN_id_smime_alg_RC2wrap "id-smime-alg-RC2wrap" +#define NID_id_smime_alg_RC2wrap 244 +#define OBJ_id_smime_alg_RC2wrap OBJ_id_smime_alg,4L + +#define SN_id_smime_alg_ESDH "id-smime-alg-ESDH" +#define NID_id_smime_alg_ESDH 245 +#define OBJ_id_smime_alg_ESDH OBJ_id_smime_alg,5L + +#define SN_id_smime_alg_CMS3DESwrap "id-smime-alg-CMS3DESwrap" +#define NID_id_smime_alg_CMS3DESwrap 246 +#define OBJ_id_smime_alg_CMS3DESwrap OBJ_id_smime_alg,6L + +#define SN_id_smime_alg_CMSRC2wrap "id-smime-alg-CMSRC2wrap" +#define NID_id_smime_alg_CMSRC2wrap 247 +#define OBJ_id_smime_alg_CMSRC2wrap OBJ_id_smime_alg,7L + +#define SN_id_alg_PWRI_KEK "id-alg-PWRI-KEK" +#define NID_id_alg_PWRI_KEK 893 +#define OBJ_id_alg_PWRI_KEK OBJ_id_smime_alg,9L + +#define SN_id_smime_cd_ldap "id-smime-cd-ldap" +#define NID_id_smime_cd_ldap 248 +#define OBJ_id_smime_cd_ldap OBJ_id_smime_cd,1L + +#define SN_id_smime_spq_ets_sqt_uri "id-smime-spq-ets-sqt-uri" +#define NID_id_smime_spq_ets_sqt_uri 249 +#define OBJ_id_smime_spq_ets_sqt_uri OBJ_id_smime_spq,1L + +#define SN_id_smime_spq_ets_sqt_unotice "id-smime-spq-ets-sqt-unotice" +#define NID_id_smime_spq_ets_sqt_unotice 250 +#define OBJ_id_smime_spq_ets_sqt_unotice OBJ_id_smime_spq,2L + +#define SN_id_smime_cti_ets_proofOfOrigin "id-smime-cti-ets-proofOfOrigin" +#define NID_id_smime_cti_ets_proofOfOrigin 251 +#define OBJ_id_smime_cti_ets_proofOfOrigin OBJ_id_smime_cti,1L + +#define SN_id_smime_cti_ets_proofOfReceipt "id-smime-cti-ets-proofOfReceipt" +#define NID_id_smime_cti_ets_proofOfReceipt 252 +#define OBJ_id_smime_cti_ets_proofOfReceipt OBJ_id_smime_cti,2L + +#define SN_id_smime_cti_ets_proofOfDelivery "id-smime-cti-ets-proofOfDelivery" +#define NID_id_smime_cti_ets_proofOfDelivery 253 +#define OBJ_id_smime_cti_ets_proofOfDelivery OBJ_id_smime_cti,3L + +#define SN_id_smime_cti_ets_proofOfSender "id-smime-cti-ets-proofOfSender" +#define NID_id_smime_cti_ets_proofOfSender 254 +#define OBJ_id_smime_cti_ets_proofOfSender OBJ_id_smime_cti,4L + +#define SN_id_smime_cti_ets_proofOfApproval "id-smime-cti-ets-proofOfApproval" +#define NID_id_smime_cti_ets_proofOfApproval 255 +#define OBJ_id_smime_cti_ets_proofOfApproval OBJ_id_smime_cti,5L + +#define SN_id_smime_cti_ets_proofOfCreation "id-smime-cti-ets-proofOfCreation" +#define NID_id_smime_cti_ets_proofOfCreation 256 +#define OBJ_id_smime_cti_ets_proofOfCreation OBJ_id_smime_cti,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 SN_ms_csp_name "CSPName" +#define LN_ms_csp_name "Microsoft CSP Name" +#define NID_ms_csp_name 417 +#define OBJ_ms_csp_name 1L,3L,6L,1L,4L,1L,311L,17L,1L + +#define SN_LocalKeySet "LocalKeySet" +#define LN_LocalKeySet "Microsoft Local Key set" +#define NID_LocalKeySet 856 +#define OBJ_LocalKeySet 1L,3L,6L,1L,4L,1L,311L,17L,2L + +#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 + +#define OBJ_pkcs12 OBJ_pkcs,12L + +#define OBJ_pkcs12_pbeids OBJ_pkcs12,1L + +#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 SN_md2 "MD2" +#define LN_md2 "md2" +#define NID_md2 3 +#define OBJ_md2 OBJ_rsadsi,2L,2L + +#define SN_md4 "MD4" +#define LN_md4 "md4" +#define NID_md4 257 +#define OBJ_md4 OBJ_rsadsi,2L,4L + +#define SN_md5 "MD5" +#define LN_md5 "md5" +#define NID_md5 4 +#define OBJ_md5 OBJ_rsadsi,2L,5L + +#define SN_md5_sha1 "MD5-SHA1" +#define LN_md5_sha1 "md5-sha1" +#define NID_md5_sha1 114 + +#define LN_hmacWithMD5 "hmacWithMD5" +#define NID_hmacWithMD5 797 +#define OBJ_hmacWithMD5 OBJ_rsadsi,2L,6L + +#define LN_hmacWithSHA1 "hmacWithSHA1" +#define NID_hmacWithSHA1 163 +#define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L + +#define LN_hmacWithSHA224 "hmacWithSHA224" +#define NID_hmacWithSHA224 798 +#define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L + +#define LN_hmacWithSHA256 "hmacWithSHA256" +#define NID_hmacWithSHA256 799 +#define OBJ_hmacWithSHA256 OBJ_rsadsi,2L,9L + +#define LN_hmacWithSHA384 "hmacWithSHA384" +#define NID_hmacWithSHA384 800 +#define OBJ_hmacWithSHA384 OBJ_rsadsi,2L,10L + +#define LN_hmacWithSHA512 "hmacWithSHA512" +#define NID_hmacWithSHA512 801 +#define OBJ_hmacWithSHA512 OBJ_rsadsi,2L,11L + +#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_rc2_40_cbc "RC2-40-CBC" +#define LN_rc2_40_cbc "rc2-40-cbc" +#define NID_rc2_40_cbc 98 + +#define SN_rc2_64_cbc "RC2-64-CBC" +#define LN_rc2_64_cbc "rc2-64-cbc" +#define NID_rc2_64_cbc 166 + +#define SN_rc4 "RC4" +#define LN_rc4 "rc4" +#define NID_rc4 5 +#define OBJ_rc4 OBJ_rsadsi,3L,4L + +#define SN_rc4_40 "RC4-40" +#define LN_rc4_40 "rc4-40" +#define NID_rc4_40 97 + +#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_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_ms_ext_req "msExtReq" +#define LN_ms_ext_req "Microsoft Extension Request" +#define NID_ms_ext_req 171 +#define OBJ_ms_ext_req 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L + +#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 + +#define SN_ms_smartcard_login "msSmartcardLogin" +#define LN_ms_smartcard_login "Microsoft Smartcardlogin" +#define NID_ms_smartcard_login 648 +#define OBJ_ms_smartcard_login 1L,3L,6L,1L,4L,1L,311L,20L,2L,2L + +#define SN_ms_upn "msUPN" +#define LN_ms_upn "Microsoft Universal Principal Name" +#define NID_ms_upn 649 +#define OBJ_ms_upn 1L,3L,6L,1L,4L,1L,311L,20L,2L,3L + +#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_ecb "IDEA-ECB" +#define LN_idea_ecb "idea-ecb" +#define NID_idea_ecb 36 + +#define SN_idea_cfb64 "IDEA-CFB" +#define LN_idea_cfb64 "idea-cfb" +#define NID_idea_cfb64 35 + +#define SN_idea_ofb64 "IDEA-OFB" +#define LN_idea_ofb64 "idea-ofb" +#define NID_idea_ofb64 46 + +#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_id_pkix "PKIX" +#define NID_id_pkix 127 +#define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L + +#define SN_id_pkix_mod "id-pkix-mod" +#define NID_id_pkix_mod 258 +#define OBJ_id_pkix_mod OBJ_id_pkix,0L + +#define SN_id_pe "id-pe" +#define NID_id_pe 175 +#define OBJ_id_pe OBJ_id_pkix,1L + +#define SN_id_qt "id-qt" +#define NID_id_qt 259 +#define OBJ_id_qt OBJ_id_pkix,2L + +#define SN_id_kp "id-kp" +#define NID_id_kp 128 +#define OBJ_id_kp OBJ_id_pkix,3L + +#define SN_id_it "id-it" +#define NID_id_it 260 +#define OBJ_id_it OBJ_id_pkix,4L + +#define SN_id_pkip "id-pkip" +#define NID_id_pkip 261 +#define OBJ_id_pkip OBJ_id_pkix,5L + +#define SN_id_alg "id-alg" +#define NID_id_alg 262 +#define OBJ_id_alg OBJ_id_pkix,6L + +#define SN_id_cmc "id-cmc" +#define NID_id_cmc 263 +#define OBJ_id_cmc OBJ_id_pkix,7L + +#define SN_id_on "id-on" +#define NID_id_on 264 +#define OBJ_id_on OBJ_id_pkix,8L + +#define SN_id_pda "id-pda" +#define NID_id_pda 265 +#define OBJ_id_pda OBJ_id_pkix,9L + +#define SN_id_aca "id-aca" +#define NID_id_aca 266 +#define OBJ_id_aca OBJ_id_pkix,10L + +#define SN_id_qcs "id-qcs" +#define NID_id_qcs 267 +#define OBJ_id_qcs OBJ_id_pkix,11L + +#define SN_id_cct "id-cct" +#define NID_id_cct 268 +#define OBJ_id_cct OBJ_id_pkix,12L + +#define SN_id_ppl "id-ppl" +#define NID_id_ppl 662 +#define OBJ_id_ppl OBJ_id_pkix,21L + +#define SN_id_ad "id-ad" +#define NID_id_ad 176 +#define OBJ_id_ad OBJ_id_pkix,48L + +#define SN_id_pkix1_explicit_88 "id-pkix1-explicit-88" +#define NID_id_pkix1_explicit_88 269 +#define OBJ_id_pkix1_explicit_88 OBJ_id_pkix_mod,1L + +#define SN_id_pkix1_implicit_88 "id-pkix1-implicit-88" +#define NID_id_pkix1_implicit_88 270 +#define OBJ_id_pkix1_implicit_88 OBJ_id_pkix_mod,2L + +#define SN_id_pkix1_explicit_93 "id-pkix1-explicit-93" +#define NID_id_pkix1_explicit_93 271 +#define OBJ_id_pkix1_explicit_93 OBJ_id_pkix_mod,3L + +#define SN_id_pkix1_implicit_93 "id-pkix1-implicit-93" +#define NID_id_pkix1_implicit_93 272 +#define OBJ_id_pkix1_implicit_93 OBJ_id_pkix_mod,4L + +#define SN_id_mod_crmf "id-mod-crmf" +#define NID_id_mod_crmf 273 +#define OBJ_id_mod_crmf OBJ_id_pkix_mod,5L + +#define SN_id_mod_cmc "id-mod-cmc" +#define NID_id_mod_cmc 274 +#define OBJ_id_mod_cmc OBJ_id_pkix_mod,6L + +#define SN_id_mod_kea_profile_88 "id-mod-kea-profile-88" +#define NID_id_mod_kea_profile_88 275 +#define OBJ_id_mod_kea_profile_88 OBJ_id_pkix_mod,7L + +#define SN_id_mod_kea_profile_93 "id-mod-kea-profile-93" +#define NID_id_mod_kea_profile_93 276 +#define OBJ_id_mod_kea_profile_93 OBJ_id_pkix_mod,8L + +#define SN_id_mod_cmp "id-mod-cmp" +#define NID_id_mod_cmp 277 +#define OBJ_id_mod_cmp OBJ_id_pkix_mod,9L + +#define SN_id_mod_qualified_cert_88 "id-mod-qualified-cert-88" +#define NID_id_mod_qualified_cert_88 278 +#define OBJ_id_mod_qualified_cert_88 OBJ_id_pkix_mod,10L + +#define SN_id_mod_qualified_cert_93 "id-mod-qualified-cert-93" +#define NID_id_mod_qualified_cert_93 279 +#define OBJ_id_mod_qualified_cert_93 OBJ_id_pkix_mod,11L + +#define SN_id_mod_attribute_cert "id-mod-attribute-cert" +#define NID_id_mod_attribute_cert 280 +#define OBJ_id_mod_attribute_cert OBJ_id_pkix_mod,12L + +#define SN_id_mod_timestamp_protocol "id-mod-timestamp-protocol" +#define NID_id_mod_timestamp_protocol 281 +#define OBJ_id_mod_timestamp_protocol OBJ_id_pkix_mod,13L + +#define SN_id_mod_ocsp "id-mod-ocsp" +#define NID_id_mod_ocsp 282 +#define OBJ_id_mod_ocsp OBJ_id_pkix_mod,14L + +#define SN_id_mod_dvcs "id-mod-dvcs" +#define NID_id_mod_dvcs 283 +#define OBJ_id_mod_dvcs OBJ_id_pkix_mod,15L + +#define SN_id_mod_cmp2000 "id-mod-cmp2000" +#define NID_id_mod_cmp2000 284 +#define OBJ_id_mod_cmp2000 OBJ_id_pkix_mod,16L + +#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_biometricInfo "biometricInfo" +#define LN_biometricInfo "Biometric Info" +#define NID_biometricInfo 285 +#define OBJ_biometricInfo OBJ_id_pe,2L + +#define SN_qcStatements "qcStatements" +#define NID_qcStatements 286 +#define OBJ_qcStatements OBJ_id_pe,3L + +#define SN_ac_auditEntity "ac-auditEntity" +#define NID_ac_auditEntity 287 +#define OBJ_ac_auditEntity OBJ_id_pe,4L + +#define SN_ac_targeting "ac-targeting" +#define NID_ac_targeting 288 +#define OBJ_ac_targeting OBJ_id_pe,5L + +#define SN_aaControls "aaControls" +#define NID_aaControls 289 +#define OBJ_aaControls OBJ_id_pe,6L + +#define SN_sbgp_ipAddrBlock "sbgp-ipAddrBlock" +#define NID_sbgp_ipAddrBlock 290 +#define OBJ_sbgp_ipAddrBlock OBJ_id_pe,7L + +#define SN_sbgp_autonomousSysNum "sbgp-autonomousSysNum" +#define NID_sbgp_autonomousSysNum 291 +#define OBJ_sbgp_autonomousSysNum OBJ_id_pe,8L + +#define SN_sbgp_routerIdentifier "sbgp-routerIdentifier" +#define NID_sbgp_routerIdentifier 292 +#define OBJ_sbgp_routerIdentifier OBJ_id_pe,9L + +#define SN_ac_proxying "ac-proxying" +#define NID_ac_proxying 397 +#define OBJ_ac_proxying OBJ_id_pe,10L + +#define SN_sinfo_access "subjectInfoAccess" +#define LN_sinfo_access "Subject Information Access" +#define NID_sinfo_access 398 +#define OBJ_sinfo_access OBJ_id_pe,11L + +#define SN_proxyCertInfo "proxyCertInfo" +#define LN_proxyCertInfo "Proxy Certificate Information" +#define NID_proxyCertInfo 663 +#define OBJ_proxyCertInfo OBJ_id_pe,14L + +#define SN_id_qt_cps "id-qt-cps" +#define LN_id_qt_cps "Policy Qualifier CPS" +#define NID_id_qt_cps 164 +#define OBJ_id_qt_cps OBJ_id_qt,1L + +#define SN_id_qt_unotice "id-qt-unotice" +#define LN_id_qt_unotice "Policy Qualifier User Notice" +#define NID_id_qt_unotice 165 +#define OBJ_id_qt_unotice OBJ_id_qt,2L + +#define SN_textNotice "textNotice" +#define NID_textNotice 293 +#define OBJ_textNotice OBJ_id_qt,3L + +#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_ipsecEndSystem "ipsecEndSystem" +#define LN_ipsecEndSystem "IPSec End System" +#define NID_ipsecEndSystem 294 +#define OBJ_ipsecEndSystem OBJ_id_kp,5L + +#define SN_ipsecTunnel "ipsecTunnel" +#define LN_ipsecTunnel "IPSec Tunnel" +#define NID_ipsecTunnel 295 +#define OBJ_ipsecTunnel OBJ_id_kp,6L + +#define SN_ipsecUser "ipsecUser" +#define LN_ipsecUser "IPSec User" +#define NID_ipsecUser 296 +#define OBJ_ipsecUser OBJ_id_kp,7L + +#define SN_time_stamp "timeStamping" +#define LN_time_stamp "Time Stamping" +#define NID_time_stamp 133 +#define OBJ_time_stamp OBJ_id_kp,8L + +#define SN_OCSP_sign "OCSPSigning" +#define LN_OCSP_sign "OCSP Signing" +#define NID_OCSP_sign 180 +#define OBJ_OCSP_sign OBJ_id_kp,9L + +#define SN_dvcs "DVCS" +#define LN_dvcs "dvcs" +#define NID_dvcs 297 +#define OBJ_dvcs OBJ_id_kp,10L + +#define SN_id_it_caProtEncCert "id-it-caProtEncCert" +#define NID_id_it_caProtEncCert 298 +#define OBJ_id_it_caProtEncCert OBJ_id_it,1L + +#define SN_id_it_signKeyPairTypes "id-it-signKeyPairTypes" +#define NID_id_it_signKeyPairTypes 299 +#define OBJ_id_it_signKeyPairTypes OBJ_id_it,2L + +#define SN_id_it_encKeyPairTypes "id-it-encKeyPairTypes" +#define NID_id_it_encKeyPairTypes 300 +#define OBJ_id_it_encKeyPairTypes OBJ_id_it,3L + +#define SN_id_it_preferredSymmAlg "id-it-preferredSymmAlg" +#define NID_id_it_preferredSymmAlg 301 +#define OBJ_id_it_preferredSymmAlg OBJ_id_it,4L + +#define SN_id_it_caKeyUpdateInfo "id-it-caKeyUpdateInfo" +#define NID_id_it_caKeyUpdateInfo 302 +#define OBJ_id_it_caKeyUpdateInfo OBJ_id_it,5L + +#define SN_id_it_currentCRL "id-it-currentCRL" +#define NID_id_it_currentCRL 303 +#define OBJ_id_it_currentCRL OBJ_id_it,6L + +#define SN_id_it_unsupportedOIDs "id-it-unsupportedOIDs" +#define NID_id_it_unsupportedOIDs 304 +#define OBJ_id_it_unsupportedOIDs OBJ_id_it,7L + +#define SN_id_it_subscriptionRequest "id-it-subscriptionRequest" +#define NID_id_it_subscriptionRequest 305 +#define OBJ_id_it_subscriptionRequest OBJ_id_it,8L + +#define SN_id_it_subscriptionResponse "id-it-subscriptionResponse" +#define NID_id_it_subscriptionResponse 306 +#define OBJ_id_it_subscriptionResponse OBJ_id_it,9L + +#define SN_id_it_keyPairParamReq "id-it-keyPairParamReq" +#define NID_id_it_keyPairParamReq 307 +#define OBJ_id_it_keyPairParamReq OBJ_id_it,10L + +#define SN_id_it_keyPairParamRep "id-it-keyPairParamRep" +#define NID_id_it_keyPairParamRep 308 +#define OBJ_id_it_keyPairParamRep OBJ_id_it,11L + +#define SN_id_it_revPassphrase "id-it-revPassphrase" +#define NID_id_it_revPassphrase 309 +#define OBJ_id_it_revPassphrase OBJ_id_it,12L + +#define SN_id_it_implicitConfirm "id-it-implicitConfirm" +#define NID_id_it_implicitConfirm 310 +#define OBJ_id_it_implicitConfirm OBJ_id_it,13L + +#define SN_id_it_confirmWaitTime "id-it-confirmWaitTime" +#define NID_id_it_confirmWaitTime 311 +#define OBJ_id_it_confirmWaitTime OBJ_id_it,14L + +#define SN_id_it_origPKIMessage "id-it-origPKIMessage" +#define NID_id_it_origPKIMessage 312 +#define OBJ_id_it_origPKIMessage OBJ_id_it,15L + +#define SN_id_it_suppLangTags "id-it-suppLangTags" +#define NID_id_it_suppLangTags 784 +#define OBJ_id_it_suppLangTags OBJ_id_it,16L + +#define SN_id_regCtrl "id-regCtrl" +#define NID_id_regCtrl 313 +#define OBJ_id_regCtrl OBJ_id_pkip,1L + +#define SN_id_regInfo "id-regInfo" +#define NID_id_regInfo 314 +#define OBJ_id_regInfo OBJ_id_pkip,2L + +#define SN_id_regCtrl_regToken "id-regCtrl-regToken" +#define NID_id_regCtrl_regToken 315 +#define OBJ_id_regCtrl_regToken OBJ_id_regCtrl,1L + +#define SN_id_regCtrl_authenticator "id-regCtrl-authenticator" +#define NID_id_regCtrl_authenticator 316 +#define OBJ_id_regCtrl_authenticator OBJ_id_regCtrl,2L + +#define SN_id_regCtrl_pkiPublicationInfo "id-regCtrl-pkiPublicationInfo" +#define NID_id_regCtrl_pkiPublicationInfo 317 +#define OBJ_id_regCtrl_pkiPublicationInfo OBJ_id_regCtrl,3L + +#define SN_id_regCtrl_pkiArchiveOptions "id-regCtrl-pkiArchiveOptions" +#define NID_id_regCtrl_pkiArchiveOptions 318 +#define OBJ_id_regCtrl_pkiArchiveOptions OBJ_id_regCtrl,4L + +#define SN_id_regCtrl_oldCertID "id-regCtrl-oldCertID" +#define NID_id_regCtrl_oldCertID 319 +#define OBJ_id_regCtrl_oldCertID OBJ_id_regCtrl,5L + +#define SN_id_regCtrl_protocolEncrKey "id-regCtrl-protocolEncrKey" +#define NID_id_regCtrl_protocolEncrKey 320 +#define OBJ_id_regCtrl_protocolEncrKey OBJ_id_regCtrl,6L + +#define SN_id_regInfo_utf8Pairs "id-regInfo-utf8Pairs" +#define NID_id_regInfo_utf8Pairs 321 +#define OBJ_id_regInfo_utf8Pairs OBJ_id_regInfo,1L + +#define SN_id_regInfo_certReq "id-regInfo-certReq" +#define NID_id_regInfo_certReq 322 +#define OBJ_id_regInfo_certReq OBJ_id_regInfo,2L + +#define SN_id_alg_des40 "id-alg-des40" +#define NID_id_alg_des40 323 +#define OBJ_id_alg_des40 OBJ_id_alg,1L + +#define SN_id_alg_noSignature "id-alg-noSignature" +#define NID_id_alg_noSignature 324 +#define OBJ_id_alg_noSignature OBJ_id_alg,2L + +#define SN_id_alg_dh_sig_hmac_sha1 "id-alg-dh-sig-hmac-sha1" +#define NID_id_alg_dh_sig_hmac_sha1 325 +#define OBJ_id_alg_dh_sig_hmac_sha1 OBJ_id_alg,3L + +#define SN_id_alg_dh_pop "id-alg-dh-pop" +#define NID_id_alg_dh_pop 326 +#define OBJ_id_alg_dh_pop OBJ_id_alg,4L + +#define SN_id_cmc_statusInfo "id-cmc-statusInfo" +#define NID_id_cmc_statusInfo 327 +#define OBJ_id_cmc_statusInfo OBJ_id_cmc,1L + +#define SN_id_cmc_identification "id-cmc-identification" +#define NID_id_cmc_identification 328 +#define OBJ_id_cmc_identification OBJ_id_cmc,2L + +#define SN_id_cmc_identityProof "id-cmc-identityProof" +#define NID_id_cmc_identityProof 329 +#define OBJ_id_cmc_identityProof OBJ_id_cmc,3L + +#define SN_id_cmc_dataReturn "id-cmc-dataReturn" +#define NID_id_cmc_dataReturn 330 +#define OBJ_id_cmc_dataReturn OBJ_id_cmc,4L + +#define SN_id_cmc_transactionId "id-cmc-transactionId" +#define NID_id_cmc_transactionId 331 +#define OBJ_id_cmc_transactionId OBJ_id_cmc,5L + +#define SN_id_cmc_senderNonce "id-cmc-senderNonce" +#define NID_id_cmc_senderNonce 332 +#define OBJ_id_cmc_senderNonce OBJ_id_cmc,6L + +#define SN_id_cmc_recipientNonce "id-cmc-recipientNonce" +#define NID_id_cmc_recipientNonce 333 +#define OBJ_id_cmc_recipientNonce OBJ_id_cmc,7L + +#define SN_id_cmc_addExtensions "id-cmc-addExtensions" +#define NID_id_cmc_addExtensions 334 +#define OBJ_id_cmc_addExtensions OBJ_id_cmc,8L + +#define SN_id_cmc_encryptedPOP "id-cmc-encryptedPOP" +#define NID_id_cmc_encryptedPOP 335 +#define OBJ_id_cmc_encryptedPOP OBJ_id_cmc,9L + +#define SN_id_cmc_decryptedPOP "id-cmc-decryptedPOP" +#define NID_id_cmc_decryptedPOP 336 +#define OBJ_id_cmc_decryptedPOP OBJ_id_cmc,10L + +#define SN_id_cmc_lraPOPWitness "id-cmc-lraPOPWitness" +#define NID_id_cmc_lraPOPWitness 337 +#define OBJ_id_cmc_lraPOPWitness OBJ_id_cmc,11L + +#define SN_id_cmc_getCert "id-cmc-getCert" +#define NID_id_cmc_getCert 338 +#define OBJ_id_cmc_getCert OBJ_id_cmc,15L + +#define SN_id_cmc_getCRL "id-cmc-getCRL" +#define NID_id_cmc_getCRL 339 +#define OBJ_id_cmc_getCRL OBJ_id_cmc,16L + +#define SN_id_cmc_revokeRequest "id-cmc-revokeRequest" +#define NID_id_cmc_revokeRequest 340 +#define OBJ_id_cmc_revokeRequest OBJ_id_cmc,17L + +#define SN_id_cmc_regInfo "id-cmc-regInfo" +#define NID_id_cmc_regInfo 341 +#define OBJ_id_cmc_regInfo OBJ_id_cmc,18L + +#define SN_id_cmc_responseInfo "id-cmc-responseInfo" +#define NID_id_cmc_responseInfo 342 +#define OBJ_id_cmc_responseInfo OBJ_id_cmc,19L + +#define SN_id_cmc_queryPending "id-cmc-queryPending" +#define NID_id_cmc_queryPending 343 +#define OBJ_id_cmc_queryPending OBJ_id_cmc,21L + +#define SN_id_cmc_popLinkRandom "id-cmc-popLinkRandom" +#define NID_id_cmc_popLinkRandom 344 +#define OBJ_id_cmc_popLinkRandom OBJ_id_cmc,22L + +#define SN_id_cmc_popLinkWitness "id-cmc-popLinkWitness" +#define NID_id_cmc_popLinkWitness 345 +#define OBJ_id_cmc_popLinkWitness OBJ_id_cmc,23L + +#define SN_id_cmc_confirmCertAcceptance "id-cmc-confirmCertAcceptance" +#define NID_id_cmc_confirmCertAcceptance 346 +#define OBJ_id_cmc_confirmCertAcceptance OBJ_id_cmc,24L + +#define SN_id_on_personalData "id-on-personalData" +#define NID_id_on_personalData 347 +#define OBJ_id_on_personalData OBJ_id_on,1L + +#define SN_id_on_permanentIdentifier "id-on-permanentIdentifier" +#define LN_id_on_permanentIdentifier "Permanent Identifier" +#define NID_id_on_permanentIdentifier 858 +#define OBJ_id_on_permanentIdentifier OBJ_id_on,3L + +#define SN_id_pda_dateOfBirth "id-pda-dateOfBirth" +#define NID_id_pda_dateOfBirth 348 +#define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L + +#define SN_id_pda_placeOfBirth "id-pda-placeOfBirth" +#define NID_id_pda_placeOfBirth 349 +#define OBJ_id_pda_placeOfBirth OBJ_id_pda,2L + +#define SN_id_pda_gender "id-pda-gender" +#define NID_id_pda_gender 351 +#define OBJ_id_pda_gender OBJ_id_pda,3L + +#define SN_id_pda_countryOfCitizenship "id-pda-countryOfCitizenship" +#define NID_id_pda_countryOfCitizenship 352 +#define OBJ_id_pda_countryOfCitizenship OBJ_id_pda,4L + +#define SN_id_pda_countryOfResidence "id-pda-countryOfResidence" +#define NID_id_pda_countryOfResidence 353 +#define OBJ_id_pda_countryOfResidence OBJ_id_pda,5L + +#define SN_id_aca_authenticationInfo "id-aca-authenticationInfo" +#define NID_id_aca_authenticationInfo 354 +#define OBJ_id_aca_authenticationInfo OBJ_id_aca,1L + +#define SN_id_aca_accessIdentity "id-aca-accessIdentity" +#define NID_id_aca_accessIdentity 355 +#define OBJ_id_aca_accessIdentity OBJ_id_aca,2L + +#define SN_id_aca_chargingIdentity "id-aca-chargingIdentity" +#define NID_id_aca_chargingIdentity 356 +#define OBJ_id_aca_chargingIdentity OBJ_id_aca,3L + +#define SN_id_aca_group "id-aca-group" +#define NID_id_aca_group 357 +#define OBJ_id_aca_group OBJ_id_aca,4L + +#define SN_id_aca_role "id-aca-role" +#define NID_id_aca_role 358 +#define OBJ_id_aca_role OBJ_id_aca,5L + +#define SN_id_aca_encAttrs "id-aca-encAttrs" +#define NID_id_aca_encAttrs 399 +#define OBJ_id_aca_encAttrs OBJ_id_aca,6L + +#define SN_id_qcs_pkixQCSyntax_v1 "id-qcs-pkixQCSyntax-v1" +#define NID_id_qcs_pkixQCSyntax_v1 359 +#define OBJ_id_qcs_pkixQCSyntax_v1 OBJ_id_qcs,1L + +#define SN_id_cct_crs "id-cct-crs" +#define NID_id_cct_crs 360 +#define OBJ_id_cct_crs OBJ_id_cct,1L + +#define SN_id_cct_PKIData "id-cct-PKIData" +#define NID_id_cct_PKIData 361 +#define OBJ_id_cct_PKIData OBJ_id_cct,2L + +#define SN_id_cct_PKIResponse "id-cct-PKIResponse" +#define NID_id_cct_PKIResponse 362 +#define OBJ_id_cct_PKIResponse OBJ_id_cct,3L + +#define SN_id_ppl_anyLanguage "id-ppl-anyLanguage" +#define LN_id_ppl_anyLanguage "Any language" +#define NID_id_ppl_anyLanguage 664 +#define OBJ_id_ppl_anyLanguage OBJ_id_ppl,0L + +#define SN_id_ppl_inheritAll "id-ppl-inheritAll" +#define LN_id_ppl_inheritAll "Inherit all" +#define NID_id_ppl_inheritAll 665 +#define OBJ_id_ppl_inheritAll OBJ_id_ppl,1L + +#define SN_Independent "id-ppl-independent" +#define LN_Independent "Independent" +#define NID_Independent 667 +#define OBJ_Independent OBJ_id_ppl,2L + +#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_ad_timeStamping "ad_timestamping" +#define LN_ad_timeStamping "AD Time Stamping" +#define NID_ad_timeStamping 363 +#define OBJ_ad_timeStamping OBJ_id_ad,3L + +#define SN_ad_dvcs "AD_DVCS" +#define LN_ad_dvcs "ad dvcs" +#define NID_ad_dvcs 364 +#define OBJ_ad_dvcs OBJ_id_ad,4L + +#define SN_caRepository "caRepository" +#define LN_caRepository "CA Repository" +#define NID_caRepository 785 +#define OBJ_caRepository OBJ_id_ad,5L + +#define OBJ_id_pkix_OCSP OBJ_ad_OCSP + +#define SN_id_pkix_OCSP_basic "basicOCSPResponse" +#define LN_id_pkix_OCSP_basic "Basic OCSP Response" +#define NID_id_pkix_OCSP_basic 365 +#define OBJ_id_pkix_OCSP_basic OBJ_id_pkix_OCSP,1L + +#define SN_id_pkix_OCSP_Nonce "Nonce" +#define LN_id_pkix_OCSP_Nonce "OCSP Nonce" +#define NID_id_pkix_OCSP_Nonce 366 +#define OBJ_id_pkix_OCSP_Nonce OBJ_id_pkix_OCSP,2L + +#define SN_id_pkix_OCSP_CrlID "CrlID" +#define LN_id_pkix_OCSP_CrlID "OCSP CRL ID" +#define NID_id_pkix_OCSP_CrlID 367 +#define OBJ_id_pkix_OCSP_CrlID OBJ_id_pkix_OCSP,3L + +#define SN_id_pkix_OCSP_acceptableResponses "acceptableResponses" +#define LN_id_pkix_OCSP_acceptableResponses "Acceptable OCSP Responses" +#define NID_id_pkix_OCSP_acceptableResponses 368 +#define OBJ_id_pkix_OCSP_acceptableResponses OBJ_id_pkix_OCSP,4L + +#define SN_id_pkix_OCSP_noCheck "noCheck" +#define LN_id_pkix_OCSP_noCheck "OCSP No Check" +#define NID_id_pkix_OCSP_noCheck 369 +#define OBJ_id_pkix_OCSP_noCheck OBJ_id_pkix_OCSP,5L + +#define SN_id_pkix_OCSP_archiveCutoff "archiveCutoff" +#define LN_id_pkix_OCSP_archiveCutoff "OCSP Archive Cutoff" +#define NID_id_pkix_OCSP_archiveCutoff 370 +#define OBJ_id_pkix_OCSP_archiveCutoff OBJ_id_pkix_OCSP,6L + +#define SN_id_pkix_OCSP_serviceLocator "serviceLocator" +#define LN_id_pkix_OCSP_serviceLocator "OCSP Service Locator" +#define NID_id_pkix_OCSP_serviceLocator 371 +#define OBJ_id_pkix_OCSP_serviceLocator OBJ_id_pkix_OCSP,7L + +#define SN_id_pkix_OCSP_extendedStatus "extendedStatus" +#define LN_id_pkix_OCSP_extendedStatus "Extended OCSP Status" +#define NID_id_pkix_OCSP_extendedStatus 372 +#define OBJ_id_pkix_OCSP_extendedStatus OBJ_id_pkix_OCSP,8L + +#define SN_id_pkix_OCSP_valid "valid" +#define NID_id_pkix_OCSP_valid 373 +#define OBJ_id_pkix_OCSP_valid OBJ_id_pkix_OCSP,9L + +#define SN_id_pkix_OCSP_path "path" +#define NID_id_pkix_OCSP_path 374 +#define OBJ_id_pkix_OCSP_path OBJ_id_pkix_OCSP,10L + +#define SN_id_pkix_OCSP_trustRoot "trustRoot" +#define LN_id_pkix_OCSP_trustRoot "Trust Root" +#define NID_id_pkix_OCSP_trustRoot 375 +#define OBJ_id_pkix_OCSP_trustRoot OBJ_id_pkix_OCSP,11L + +#define SN_algorithm "algorithm" +#define LN_algorithm "algorithm" +#define NID_algorithm 376 +#define OBJ_algorithm 1L,3L,14L,3L,2L + +#define SN_md5WithRSA "RSA-NP-MD5" +#define LN_md5WithRSA "md5WithRSA" +#define NID_md5WithRSA 104 +#define OBJ_md5WithRSA OBJ_algorithm,3L + +#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_cbc "DES-CBC" +#define LN_des_cbc "des-cbc" +#define NID_des_cbc 31 +#define OBJ_des_cbc OBJ_algorithm,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_des_cfb64 "DES-CFB" +#define LN_des_cfb64 "des-cfb" +#define NID_des_cfb64 30 +#define OBJ_des_cfb64 OBJ_algorithm,9L + +#define SN_rsaSignature "rsaSignature" +#define NID_rsaSignature 377 +#define OBJ_rsaSignature OBJ_algorithm,11L + +#define SN_dsa_2 "DSA-old" +#define LN_dsa_2 "dsaEncryption-old" +#define NID_dsa_2 67 +#define OBJ_dsa_2 OBJ_algorithm,12L + +#define SN_dsaWithSHA "DSA-SHA" +#define LN_dsaWithSHA "dsaWithSHA" +#define NID_dsaWithSHA 66 +#define OBJ_dsaWithSHA OBJ_algorithm,13L + +#define SN_shaWithRSAEncryption "RSA-SHA" +#define LN_shaWithRSAEncryption "shaWithRSAEncryption" +#define NID_shaWithRSAEncryption 42 +#define OBJ_shaWithRSAEncryption OBJ_algorithm,15L + +#define SN_des_ede_ecb "DES-EDE" +#define LN_des_ede_ecb "des-ede" +#define NID_des_ede_ecb 32 +#define OBJ_des_ede_ecb OBJ_algorithm,17L + +#define SN_des_ede3_ecb "DES-EDE3" +#define LN_des_ede3_ecb "des-ede3" +#define NID_des_ede3_ecb 33 + +#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_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 + +#define SN_desx_cbc "DESX-CBC" +#define LN_desx_cbc "desx-cbc" +#define NID_desx_cbc 80 + +#define SN_sha "SHA" +#define LN_sha "sha" +#define NID_sha 41 +#define OBJ_sha OBJ_algorithm,18L + +#define SN_sha1 "SHA1" +#define LN_sha1 "sha1" +#define NID_sha1 64 +#define OBJ_sha1 OBJ_algorithm,26L + +#define SN_dsaWithSHA1_2 "DSA-SHA1-old" +#define LN_dsaWithSHA1_2 "dsaWithSHA1-old" +#define NID_dsaWithSHA1_2 70 +#define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L + +#define SN_sha1WithRSA "RSA-SHA1-2" +#define LN_sha1WithRSA "sha1WithRSA" +#define NID_sha1WithRSA 115 +#define OBJ_sha1WithRSA OBJ_algorithm,29L + +#define SN_ripemd160 "RIPEMD160" +#define LN_ripemd160 "ripemd160" +#define NID_ripemd160 117 +#define OBJ_ripemd160 1L,3L,36L,3L,2L,1L + +#define SN_ripemd160WithRSA "RSA-RIPEMD160" +#define LN_ripemd160WithRSA "ripemd160WithRSA" +#define NID_ripemd160WithRSA 119 +#define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L + +#define SN_sxnet "SXNetID" +#define LN_sxnet "Strong Extranet ID" +#define NID_sxnet 143 +#define OBJ_sxnet 1L,3L,101L,1L,4L,1L + +#define SN_X500 "X500" +#define LN_X500 "directory services (X.500)" +#define NID_X500 11 +#define OBJ_X500 2L,5L + +#define SN_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_surname "SN" +#define LN_surname "surname" +#define NID_surname 100 +#define OBJ_surname OBJ_X509,4L + +#define LN_serialNumber "serialNumber" +#define NID_serialNumber 105 +#define OBJ_serialNumber OBJ_X509,5L + +#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 + +#define SN_stateOrProvinceName "ST" +#define LN_stateOrProvinceName "stateOrProvinceName" +#define NID_stateOrProvinceName 16 +#define OBJ_stateOrProvinceName OBJ_X509,8L + +#define SN_streetAddress "street" +#define LN_streetAddress "streetAddress" +#define NID_streetAddress 660 +#define OBJ_streetAddress OBJ_X509,9L + +#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_title "title" +#define LN_title "title" +#define NID_title 106 +#define OBJ_title OBJ_X509,12L + +#define LN_description "description" +#define NID_description 107 +#define OBJ_description OBJ_X509,13L + +#define LN_searchGuide "searchGuide" +#define NID_searchGuide 859 +#define OBJ_searchGuide OBJ_X509,14L + +#define LN_businessCategory "businessCategory" +#define NID_businessCategory 860 +#define OBJ_businessCategory OBJ_X509,15L + +#define LN_postalAddress "postalAddress" +#define NID_postalAddress 861 +#define OBJ_postalAddress OBJ_X509,16L + +#define LN_postalCode "postalCode" +#define NID_postalCode 661 +#define OBJ_postalCode OBJ_X509,17L + +#define LN_postOfficeBox "postOfficeBox" +#define NID_postOfficeBox 862 +#define OBJ_postOfficeBox OBJ_X509,18L + +#define LN_physicalDeliveryOfficeName "physicalDeliveryOfficeName" +#define NID_physicalDeliveryOfficeName 863 +#define OBJ_physicalDeliveryOfficeName OBJ_X509,19L + +#define LN_telephoneNumber "telephoneNumber" +#define NID_telephoneNumber 864 +#define OBJ_telephoneNumber OBJ_X509,20L + +#define LN_telexNumber "telexNumber" +#define NID_telexNumber 865 +#define OBJ_telexNumber OBJ_X509,21L + +#define LN_teletexTerminalIdentifier "teletexTerminalIdentifier" +#define NID_teletexTerminalIdentifier 866 +#define OBJ_teletexTerminalIdentifier OBJ_X509,22L + +#define LN_facsimileTelephoneNumber "facsimileTelephoneNumber" +#define NID_facsimileTelephoneNumber 867 +#define OBJ_facsimileTelephoneNumber OBJ_X509,23L + +#define LN_x121Address "x121Address" +#define NID_x121Address 868 +#define OBJ_x121Address OBJ_X509,24L + +#define LN_internationaliSDNNumber "internationaliSDNNumber" +#define NID_internationaliSDNNumber 869 +#define OBJ_internationaliSDNNumber OBJ_X509,25L + +#define LN_registeredAddress "registeredAddress" +#define NID_registeredAddress 870 +#define OBJ_registeredAddress OBJ_X509,26L + +#define LN_destinationIndicator "destinationIndicator" +#define NID_destinationIndicator 871 +#define OBJ_destinationIndicator OBJ_X509,27L + +#define LN_preferredDeliveryMethod "preferredDeliveryMethod" +#define NID_preferredDeliveryMethod 872 +#define OBJ_preferredDeliveryMethod OBJ_X509,28L + +#define LN_presentationAddress "presentationAddress" +#define NID_presentationAddress 873 +#define OBJ_presentationAddress OBJ_X509,29L + +#define LN_supportedApplicationContext "supportedApplicationContext" +#define NID_supportedApplicationContext 874 +#define OBJ_supportedApplicationContext OBJ_X509,30L + +#define SN_member "member" +#define NID_member 875 +#define OBJ_member OBJ_X509,31L + +#define SN_owner "owner" +#define NID_owner 876 +#define OBJ_owner OBJ_X509,32L + +#define LN_roleOccupant "roleOccupant" +#define NID_roleOccupant 877 +#define OBJ_roleOccupant OBJ_X509,33L + +#define SN_seeAlso "seeAlso" +#define NID_seeAlso 878 +#define OBJ_seeAlso OBJ_X509,34L + +#define LN_userPassword "userPassword" +#define NID_userPassword 879 +#define OBJ_userPassword OBJ_X509,35L + +#define LN_userCertificate "userCertificate" +#define NID_userCertificate 880 +#define OBJ_userCertificate OBJ_X509,36L + +#define LN_cACertificate "cACertificate" +#define NID_cACertificate 881 +#define OBJ_cACertificate OBJ_X509,37L + +#define LN_authorityRevocationList "authorityRevocationList" +#define NID_authorityRevocationList 882 +#define OBJ_authorityRevocationList OBJ_X509,38L + +#define LN_certificateRevocationList "certificateRevocationList" +#define NID_certificateRevocationList 883 +#define OBJ_certificateRevocationList OBJ_X509,39L + +#define LN_crossCertificatePair "crossCertificatePair" +#define NID_crossCertificatePair 884 +#define OBJ_crossCertificatePair OBJ_X509,40L + +#define SN_name "name" +#define LN_name "name" +#define NID_name 173 +#define OBJ_name OBJ_X509,41L + +#define SN_givenName "GN" +#define LN_givenName "givenName" +#define NID_givenName 99 +#define OBJ_givenName OBJ_X509,42L + +#define SN_initials "initials" +#define LN_initials "initials" +#define NID_initials 101 +#define OBJ_initials OBJ_X509,43L + +#define LN_generationQualifier "generationQualifier" +#define NID_generationQualifier 509 +#define OBJ_generationQualifier OBJ_X509,44L + +#define LN_x500UniqueIdentifier "x500UniqueIdentifier" +#define NID_x500UniqueIdentifier 503 +#define OBJ_x500UniqueIdentifier OBJ_X509,45L + +#define SN_dnQualifier "dnQualifier" +#define LN_dnQualifier "dnQualifier" +#define NID_dnQualifier 174 +#define OBJ_dnQualifier OBJ_X509,46L + +#define LN_enhancedSearchGuide "enhancedSearchGuide" +#define NID_enhancedSearchGuide 885 +#define OBJ_enhancedSearchGuide OBJ_X509,47L + +#define LN_protocolInformation "protocolInformation" +#define NID_protocolInformation 886 +#define OBJ_protocolInformation OBJ_X509,48L + +#define LN_distinguishedName "distinguishedName" +#define NID_distinguishedName 887 +#define OBJ_distinguishedName OBJ_X509,49L + +#define LN_uniqueMember "uniqueMember" +#define NID_uniqueMember 888 +#define OBJ_uniqueMember OBJ_X509,50L + +#define LN_houseIdentifier "houseIdentifier" +#define NID_houseIdentifier 889 +#define OBJ_houseIdentifier OBJ_X509,51L + +#define LN_supportedAlgorithms "supportedAlgorithms" +#define NID_supportedAlgorithms 890 +#define OBJ_supportedAlgorithms OBJ_X509,52L + +#define LN_deltaRevocationList "deltaRevocationList" +#define NID_deltaRevocationList 891 +#define OBJ_deltaRevocationList OBJ_X509,53L + +#define SN_dmdName "dmdName" +#define NID_dmdName 892 +#define OBJ_dmdName OBJ_X509,54L + +#define LN_pseudonym "pseudonym" +#define NID_pseudonym 510 +#define OBJ_pseudonym OBJ_X509,65L + +#define SN_role "role" +#define LN_role "role" +#define NID_role 400 +#define OBJ_role OBJ_X509,72L + +#define SN_X500algorithms "X500algorithms" +#define LN_X500algorithms "directory services - algorithms" +#define NID_X500algorithms 378 +#define OBJ_X500algorithms OBJ_X500,8L + +#define SN_rsa "RSA" +#define LN_rsa "rsa" +#define NID_rsa 19 +#define OBJ_rsa OBJ_X500algorithms,1L,1L + +#define SN_mdc2WithRSA "RSA-MDC2" +#define LN_mdc2WithRSA "mdc2WithRSA" +#define NID_mdc2WithRSA 96 +#define OBJ_mdc2WithRSA OBJ_X500algorithms,3L,100L + +#define SN_mdc2 "MDC2" +#define LN_mdc2 "mdc2" +#define NID_mdc2 95 +#define OBJ_mdc2 OBJ_X500algorithms,3L,101L + +#define SN_id_ce "id-ce" +#define NID_id_ce 81 +#define OBJ_id_ce OBJ_X500,29L + +#define SN_subject_directory_attributes "subjectDirectoryAttributes" +#define LN_subject_directory_attributes "X509v3 Subject Directory Attributes" +#define NID_subject_directory_attributes 769 +#define OBJ_subject_directory_attributes OBJ_id_ce,9L + +#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_crl_reason "CRLReason" +#define LN_crl_reason "X509v3 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_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_issuing_distribution_point "issuingDistributionPoint" +#define LN_issuing_distribution_point "X509v3 Issuing Distrubution Point" +#define NID_issuing_distribution_point 770 +#define OBJ_issuing_distribution_point OBJ_id_ce,28L + +#define SN_certificate_issuer "certificateIssuer" +#define LN_certificate_issuer "X509v3 Certificate Issuer" +#define NID_certificate_issuer 771 +#define OBJ_certificate_issuer OBJ_id_ce,29L + +#define SN_name_constraints "nameConstraints" +#define LN_name_constraints "X509v3 Name Constraints" +#define NID_name_constraints 666 +#define OBJ_name_constraints OBJ_id_ce,30L + +#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_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_any_policy "anyPolicy" +#define LN_any_policy "X509v3 Any Policy" +#define NID_any_policy 746 +#define OBJ_any_policy OBJ_certificate_policies,0L + +#define SN_policy_mappings "policyMappings" +#define LN_policy_mappings "X509v3 Policy Mappings" +#define NID_policy_mappings 747 +#define OBJ_policy_mappings OBJ_id_ce,33L + +#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_policy_constraints "policyConstraints" +#define LN_policy_constraints "X509v3 Policy Constraints" +#define NID_policy_constraints 401 +#define OBJ_policy_constraints OBJ_id_ce,36L + +#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,37L + +#define SN_freshest_crl "freshestCRL" +#define LN_freshest_crl "X509v3 Freshest CRL" +#define NID_freshest_crl 857 +#define OBJ_freshest_crl OBJ_id_ce,46L + +#define SN_inhibit_any_policy "inhibitAnyPolicy" +#define LN_inhibit_any_policy "X509v3 Inhibit Any Policy" +#define NID_inhibit_any_policy 748 +#define OBJ_inhibit_any_policy OBJ_id_ce,54L + +#define SN_target_information "targetInformation" +#define LN_target_information "X509v3 AC Targeting" +#define NID_target_information 402 +#define OBJ_target_information OBJ_id_ce,55L + +#define SN_no_rev_avail "noRevAvail" +#define LN_no_rev_avail "X509v3 No Revocation Available" +#define NID_no_rev_avail 403 +#define OBJ_no_rev_avail OBJ_id_ce,56L + +#define SN_anyExtendedKeyUsage "anyExtendedKeyUsage" +#define LN_anyExtendedKeyUsage "Any Extended Key Usage" +#define NID_anyExtendedKeyUsage 910 +#define OBJ_anyExtendedKeyUsage OBJ_ext_key_usage,0L + +#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_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_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_org "ORG" +#define LN_org "org" +#define NID_org 379 +#define OBJ_org OBJ_iso,3L + +#define SN_dod "DOD" +#define LN_dod "dod" +#define NID_dod 380 +#define OBJ_dod OBJ_org,6L + +#define SN_iana "IANA" +#define LN_iana "iana" +#define NID_iana 381 +#define OBJ_iana OBJ_dod,1L + +#define OBJ_internet OBJ_iana + +#define SN_Directory "directory" +#define LN_Directory "Directory" +#define NID_Directory 382 +#define OBJ_Directory OBJ_internet,1L + +#define SN_Management "mgmt" +#define LN_Management "Management" +#define NID_Management 383 +#define OBJ_Management OBJ_internet,2L + +#define SN_Experimental "experimental" +#define LN_Experimental "Experimental" +#define NID_Experimental 384 +#define OBJ_Experimental OBJ_internet,3L + +#define SN_Private "private" +#define LN_Private "Private" +#define NID_Private 385 +#define OBJ_Private OBJ_internet,4L + +#define SN_Security "security" +#define LN_Security "Security" +#define NID_Security 386 +#define OBJ_Security OBJ_internet,5L + +#define SN_SNMPv2 "snmpv2" +#define LN_SNMPv2 "SNMPv2" +#define NID_SNMPv2 387 +#define OBJ_SNMPv2 OBJ_internet,6L + +#define LN_Mail "Mail" +#define NID_Mail 388 +#define OBJ_Mail OBJ_internet,7L + +#define SN_Enterprises "enterprises" +#define LN_Enterprises "Enterprises" +#define NID_Enterprises 389 +#define OBJ_Enterprises OBJ_Private,1L + +#define SN_dcObject "dcobject" +#define LN_dcObject "dcObject" +#define NID_dcObject 390 +#define OBJ_dcObject OBJ_Enterprises,1466L,344L + +#define SN_mime_mhs "mime-mhs" +#define LN_mime_mhs "MIME MHS" +#define NID_mime_mhs 504 +#define OBJ_mime_mhs OBJ_Mail,1L + +#define SN_mime_mhs_headings "mime-mhs-headings" +#define LN_mime_mhs_headings "mime-mhs-headings" +#define NID_mime_mhs_headings 505 +#define OBJ_mime_mhs_headings OBJ_mime_mhs,1L + +#define SN_mime_mhs_bodies "mime-mhs-bodies" +#define LN_mime_mhs_bodies "mime-mhs-bodies" +#define NID_mime_mhs_bodies 506 +#define OBJ_mime_mhs_bodies OBJ_mime_mhs,2L + +#define SN_id_hex_partial_message "id-hex-partial-message" +#define LN_id_hex_partial_message "id-hex-partial-message" +#define NID_id_hex_partial_message 507 +#define OBJ_id_hex_partial_message OBJ_mime_mhs_headings,1L + +#define SN_id_hex_multipart_message "id-hex-multipart-message" +#define LN_id_hex_multipart_message "id-hex-multipart-message" +#define NID_id_hex_multipart_message 508 +#define OBJ_id_hex_multipart_message OBJ_mime_mhs_headings,2L + +#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 OBJ_id_smime_alg,8L + +#define OBJ_csor 2L,16L,840L,1L,101L,3L + +#define OBJ_nistAlgorithms OBJ_csor,4L + +#define OBJ_aes OBJ_nistAlgorithms,1L + +#define SN_aes_128_ecb "AES-128-ECB" +#define LN_aes_128_ecb "aes-128-ecb" +#define NID_aes_128_ecb 418 +#define OBJ_aes_128_ecb OBJ_aes,1L + +#define SN_aes_128_cbc "AES-128-CBC" +#define LN_aes_128_cbc "aes-128-cbc" +#define NID_aes_128_cbc 419 +#define OBJ_aes_128_cbc OBJ_aes,2L + +#define SN_aes_128_ofb128 "AES-128-OFB" +#define LN_aes_128_ofb128 "aes-128-ofb" +#define NID_aes_128_ofb128 420 +#define OBJ_aes_128_ofb128 OBJ_aes,3L + +#define SN_aes_128_cfb128 "AES-128-CFB" +#define LN_aes_128_cfb128 "aes-128-cfb" +#define NID_aes_128_cfb128 421 +#define OBJ_aes_128_cfb128 OBJ_aes,4L + +#define SN_id_aes128_wrap "id-aes128-wrap" +#define NID_id_aes128_wrap 788 +#define OBJ_id_aes128_wrap OBJ_aes,5L + +#define SN_aes_128_gcm "id-aes128-GCM" +#define LN_aes_128_gcm "aes-128-gcm" +#define NID_aes_128_gcm 895 +#define OBJ_aes_128_gcm OBJ_aes,6L + +#define SN_aes_128_ccm "id-aes128-CCM" +#define LN_aes_128_ccm "aes-128-ccm" +#define NID_aes_128_ccm 896 +#define OBJ_aes_128_ccm OBJ_aes,7L + +#define SN_id_aes128_wrap_pad "id-aes128-wrap-pad" +#define NID_id_aes128_wrap_pad 897 +#define OBJ_id_aes128_wrap_pad OBJ_aes,8L + +#define SN_aes_192_ecb "AES-192-ECB" +#define LN_aes_192_ecb "aes-192-ecb" +#define NID_aes_192_ecb 422 +#define OBJ_aes_192_ecb OBJ_aes,21L + +#define SN_aes_192_cbc "AES-192-CBC" +#define LN_aes_192_cbc "aes-192-cbc" +#define NID_aes_192_cbc 423 +#define OBJ_aes_192_cbc OBJ_aes,22L + +#define SN_aes_192_ofb128 "AES-192-OFB" +#define LN_aes_192_ofb128 "aes-192-ofb" +#define NID_aes_192_ofb128 424 +#define OBJ_aes_192_ofb128 OBJ_aes,23L + +#define SN_aes_192_cfb128 "AES-192-CFB" +#define LN_aes_192_cfb128 "aes-192-cfb" +#define NID_aes_192_cfb128 425 +#define OBJ_aes_192_cfb128 OBJ_aes,24L + +#define SN_id_aes192_wrap "id-aes192-wrap" +#define NID_id_aes192_wrap 789 +#define OBJ_id_aes192_wrap OBJ_aes,25L + +#define SN_aes_192_gcm "id-aes192-GCM" +#define LN_aes_192_gcm "aes-192-gcm" +#define NID_aes_192_gcm 898 +#define OBJ_aes_192_gcm OBJ_aes,26L + +#define SN_aes_192_ccm "id-aes192-CCM" +#define LN_aes_192_ccm "aes-192-ccm" +#define NID_aes_192_ccm 899 +#define OBJ_aes_192_ccm OBJ_aes,27L + +#define SN_id_aes192_wrap_pad "id-aes192-wrap-pad" +#define NID_id_aes192_wrap_pad 900 +#define OBJ_id_aes192_wrap_pad OBJ_aes,28L + +#define SN_aes_256_ecb "AES-256-ECB" +#define LN_aes_256_ecb "aes-256-ecb" +#define NID_aes_256_ecb 426 +#define OBJ_aes_256_ecb OBJ_aes,41L + +#define SN_aes_256_cbc "AES-256-CBC" +#define LN_aes_256_cbc "aes-256-cbc" +#define NID_aes_256_cbc 427 +#define OBJ_aes_256_cbc OBJ_aes,42L + +#define SN_aes_256_ofb128 "AES-256-OFB" +#define LN_aes_256_ofb128 "aes-256-ofb" +#define NID_aes_256_ofb128 428 +#define OBJ_aes_256_ofb128 OBJ_aes,43L + +#define SN_aes_256_cfb128 "AES-256-CFB" +#define LN_aes_256_cfb128 "aes-256-cfb" +#define NID_aes_256_cfb128 429 +#define OBJ_aes_256_cfb128 OBJ_aes,44L + +#define SN_id_aes256_wrap "id-aes256-wrap" +#define NID_id_aes256_wrap 790 +#define OBJ_id_aes256_wrap OBJ_aes,45L + +#define SN_aes_256_gcm "id-aes256-GCM" +#define LN_aes_256_gcm "aes-256-gcm" +#define NID_aes_256_gcm 901 +#define OBJ_aes_256_gcm OBJ_aes,46L + +#define SN_aes_256_ccm "id-aes256-CCM" +#define LN_aes_256_ccm "aes-256-ccm" +#define NID_aes_256_ccm 902 +#define OBJ_aes_256_ccm OBJ_aes,47L + +#define SN_id_aes256_wrap_pad "id-aes256-wrap-pad" +#define NID_id_aes256_wrap_pad 903 +#define OBJ_id_aes256_wrap_pad OBJ_aes,48L + +#define SN_aes_128_cfb1 "AES-128-CFB1" +#define LN_aes_128_cfb1 "aes-128-cfb1" +#define NID_aes_128_cfb1 650 + +#define SN_aes_192_cfb1 "AES-192-CFB1" +#define LN_aes_192_cfb1 "aes-192-cfb1" +#define NID_aes_192_cfb1 651 + +#define SN_aes_256_cfb1 "AES-256-CFB1" +#define LN_aes_256_cfb1 "aes-256-cfb1" +#define NID_aes_256_cfb1 652 + +#define SN_aes_128_cfb8 "AES-128-CFB8" +#define LN_aes_128_cfb8 "aes-128-cfb8" +#define NID_aes_128_cfb8 653 + +#define SN_aes_192_cfb8 "AES-192-CFB8" +#define LN_aes_192_cfb8 "aes-192-cfb8" +#define NID_aes_192_cfb8 654 + +#define SN_aes_256_cfb8 "AES-256-CFB8" +#define LN_aes_256_cfb8 "aes-256-cfb8" +#define NID_aes_256_cfb8 655 + +#define SN_aes_128_ctr "AES-128-CTR" +#define LN_aes_128_ctr "aes-128-ctr" +#define NID_aes_128_ctr 904 + +#define SN_aes_192_ctr "AES-192-CTR" +#define LN_aes_192_ctr "aes-192-ctr" +#define NID_aes_192_ctr 905 + +#define SN_aes_256_ctr "AES-256-CTR" +#define LN_aes_256_ctr "aes-256-ctr" +#define NID_aes_256_ctr 906 + +#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 + +#define SN_des_cfb8 "DES-CFB8" +#define LN_des_cfb8 "des-cfb8" +#define NID_des_cfb8 657 + +#define SN_des_ede3_cfb1 "DES-EDE3-CFB1" +#define LN_des_ede3_cfb1 "des-ede3-cfb1" +#define NID_des_ede3_cfb1 658 + +#define SN_des_ede3_cfb8 "DES-EDE3-CFB8" +#define LN_des_ede3_cfb8 "des-ede3-cfb8" +#define NID_des_ede3_cfb8 659 + +#define OBJ_nist_hashalgs OBJ_nistAlgorithms,2L + +#define SN_sha256 "SHA256" +#define LN_sha256 "sha256" +#define NID_sha256 672 +#define OBJ_sha256 OBJ_nist_hashalgs,1L + +#define SN_sha384 "SHA384" +#define LN_sha384 "sha384" +#define NID_sha384 673 +#define OBJ_sha384 OBJ_nist_hashalgs,2L + +#define SN_sha512 "SHA512" +#define LN_sha512 "sha512" +#define NID_sha512 674 +#define OBJ_sha512 OBJ_nist_hashalgs,3L + +#define SN_sha224 "SHA224" +#define LN_sha224 "sha224" +#define NID_sha224 675 +#define OBJ_sha224 OBJ_nist_hashalgs,4L + +#define OBJ_dsa_with_sha2 OBJ_nistAlgorithms,3L + +#define SN_dsa_with_SHA224 "dsa_with_SHA224" +#define NID_dsa_with_SHA224 802 +#define OBJ_dsa_with_SHA224 OBJ_dsa_with_sha2,1L + +#define SN_dsa_with_SHA256 "dsa_with_SHA256" +#define NID_dsa_with_SHA256 803 +#define OBJ_dsa_with_SHA256 OBJ_dsa_with_sha2,2L + +#define SN_hold_instruction_code "holdInstructionCode" +#define LN_hold_instruction_code "Hold Instruction Code" +#define NID_hold_instruction_code 430 +#define OBJ_hold_instruction_code OBJ_id_ce,23L + +#define OBJ_holdInstruction OBJ_X9_57,2L + +#define SN_hold_instruction_none "holdInstructionNone" +#define LN_hold_instruction_none "Hold Instruction None" +#define NID_hold_instruction_none 431 +#define OBJ_hold_instruction_none OBJ_holdInstruction,1L + +#define SN_hold_instruction_call_issuer "holdInstructionCallIssuer" +#define LN_hold_instruction_call_issuer "Hold Instruction Call Issuer" +#define NID_hold_instruction_call_issuer 432 +#define OBJ_hold_instruction_call_issuer OBJ_holdInstruction,2L + +#define SN_hold_instruction_reject "holdInstructionReject" +#define LN_hold_instruction_reject "Hold Instruction Reject" +#define NID_hold_instruction_reject 433 +#define OBJ_hold_instruction_reject OBJ_holdInstruction,3L + +#define SN_data "data" +#define NID_data 434 +#define OBJ_data OBJ_itu_t,9L + +#define SN_pss "pss" +#define NID_pss 435 +#define OBJ_pss OBJ_data,2342L + +#define SN_ucl "ucl" +#define NID_ucl 436 +#define OBJ_ucl OBJ_pss,19200300L + +#define SN_pilot "pilot" +#define NID_pilot 437 +#define OBJ_pilot OBJ_ucl,100L + +#define LN_pilotAttributeType "pilotAttributeType" +#define NID_pilotAttributeType 438 +#define OBJ_pilotAttributeType OBJ_pilot,1L + +#define LN_pilotAttributeSyntax "pilotAttributeSyntax" +#define NID_pilotAttributeSyntax 439 +#define OBJ_pilotAttributeSyntax OBJ_pilot,3L + +#define LN_pilotObjectClass "pilotObjectClass" +#define NID_pilotObjectClass 440 +#define OBJ_pilotObjectClass OBJ_pilot,4L + +#define LN_pilotGroups "pilotGroups" +#define NID_pilotGroups 441 +#define OBJ_pilotGroups OBJ_pilot,10L + +#define LN_iA5StringSyntax "iA5StringSyntax" +#define NID_iA5StringSyntax 442 +#define OBJ_iA5StringSyntax OBJ_pilotAttributeSyntax,4L + +#define LN_caseIgnoreIA5StringSyntax "caseIgnoreIA5StringSyntax" +#define NID_caseIgnoreIA5StringSyntax 443 +#define OBJ_caseIgnoreIA5StringSyntax OBJ_pilotAttributeSyntax,5L + +#define LN_pilotObject "pilotObject" +#define NID_pilotObject 444 +#define OBJ_pilotObject OBJ_pilotObjectClass,3L + +#define LN_pilotPerson "pilotPerson" +#define NID_pilotPerson 445 +#define OBJ_pilotPerson OBJ_pilotObjectClass,4L + +#define SN_account "account" +#define NID_account 446 +#define OBJ_account OBJ_pilotObjectClass,5L + +#define SN_document "document" +#define NID_document 447 +#define OBJ_document OBJ_pilotObjectClass,6L + +#define SN_room "room" +#define NID_room 448 +#define OBJ_room OBJ_pilotObjectClass,7L + +#define LN_documentSeries "documentSeries" +#define NID_documentSeries 449 +#define OBJ_documentSeries OBJ_pilotObjectClass,9L + +#define SN_Domain "domain" +#define LN_Domain "Domain" +#define NID_Domain 392 +#define OBJ_Domain OBJ_pilotObjectClass,13L + +#define LN_rFC822localPart "rFC822localPart" +#define NID_rFC822localPart 450 +#define OBJ_rFC822localPart OBJ_pilotObjectClass,14L + +#define LN_dNSDomain "dNSDomain" +#define NID_dNSDomain 451 +#define OBJ_dNSDomain OBJ_pilotObjectClass,15L + +#define LN_domainRelatedObject "domainRelatedObject" +#define NID_domainRelatedObject 452 +#define OBJ_domainRelatedObject OBJ_pilotObjectClass,17L + +#define LN_friendlyCountry "friendlyCountry" +#define NID_friendlyCountry 453 +#define OBJ_friendlyCountry OBJ_pilotObjectClass,18L + +#define LN_simpleSecurityObject "simpleSecurityObject" +#define NID_simpleSecurityObject 454 +#define OBJ_simpleSecurityObject OBJ_pilotObjectClass,19L + +#define LN_pilotOrganization "pilotOrganization" +#define NID_pilotOrganization 455 +#define OBJ_pilotOrganization OBJ_pilotObjectClass,20L + +#define LN_pilotDSA "pilotDSA" +#define NID_pilotDSA 456 +#define OBJ_pilotDSA OBJ_pilotObjectClass,21L + +#define LN_qualityLabelledData "qualityLabelledData" +#define NID_qualityLabelledData 457 +#define OBJ_qualityLabelledData OBJ_pilotObjectClass,22L + +#define SN_userId "UID" +#define LN_userId "userId" +#define NID_userId 458 +#define OBJ_userId OBJ_pilotAttributeType,1L + +#define LN_textEncodedORAddress "textEncodedORAddress" +#define NID_textEncodedORAddress 459 +#define OBJ_textEncodedORAddress OBJ_pilotAttributeType,2L + +#define SN_rfc822Mailbox "mail" +#define LN_rfc822Mailbox "rfc822Mailbox" +#define NID_rfc822Mailbox 460 +#define OBJ_rfc822Mailbox OBJ_pilotAttributeType,3L + +#define SN_info "info" +#define NID_info 461 +#define OBJ_info OBJ_pilotAttributeType,4L + +#define LN_favouriteDrink "favouriteDrink" +#define NID_favouriteDrink 462 +#define OBJ_favouriteDrink OBJ_pilotAttributeType,5L + +#define LN_roomNumber "roomNumber" +#define NID_roomNumber 463 +#define OBJ_roomNumber OBJ_pilotAttributeType,6L + +#define SN_photo "photo" +#define NID_photo 464 +#define OBJ_photo OBJ_pilotAttributeType,7L + +#define LN_userClass "userClass" +#define NID_userClass 465 +#define OBJ_userClass OBJ_pilotAttributeType,8L + +#define SN_host "host" +#define NID_host 466 +#define OBJ_host OBJ_pilotAttributeType,9L + +#define SN_manager "manager" +#define NID_manager 467 +#define OBJ_manager OBJ_pilotAttributeType,10L + +#define LN_documentIdentifier "documentIdentifier" +#define NID_documentIdentifier 468 +#define OBJ_documentIdentifier OBJ_pilotAttributeType,11L + +#define LN_documentTitle "documentTitle" +#define NID_documentTitle 469 +#define OBJ_documentTitle OBJ_pilotAttributeType,12L + +#define LN_documentVersion "documentVersion" +#define NID_documentVersion 470 +#define OBJ_documentVersion OBJ_pilotAttributeType,13L + +#define LN_documentAuthor "documentAuthor" +#define NID_documentAuthor 471 +#define OBJ_documentAuthor OBJ_pilotAttributeType,14L + +#define LN_documentLocation "documentLocation" +#define NID_documentLocation 472 +#define OBJ_documentLocation OBJ_pilotAttributeType,15L + +#define LN_homeTelephoneNumber "homeTelephoneNumber" +#define NID_homeTelephoneNumber 473 +#define OBJ_homeTelephoneNumber OBJ_pilotAttributeType,20L + +#define SN_secretary "secretary" +#define NID_secretary 474 +#define OBJ_secretary OBJ_pilotAttributeType,21L + +#define LN_otherMailbox "otherMailbox" +#define NID_otherMailbox 475 +#define OBJ_otherMailbox OBJ_pilotAttributeType,22L + +#define LN_lastModifiedTime "lastModifiedTime" +#define NID_lastModifiedTime 476 +#define OBJ_lastModifiedTime OBJ_pilotAttributeType,23L + +#define LN_lastModifiedBy "lastModifiedBy" +#define NID_lastModifiedBy 477 +#define OBJ_lastModifiedBy OBJ_pilotAttributeType,24L + +#define SN_domainComponent "DC" +#define LN_domainComponent "domainComponent" +#define NID_domainComponent 391 +#define OBJ_domainComponent OBJ_pilotAttributeType,25L + +#define LN_aRecord "aRecord" +#define NID_aRecord 478 +#define OBJ_aRecord OBJ_pilotAttributeType,26L + +#define LN_pilotAttributeType27 "pilotAttributeType27" +#define NID_pilotAttributeType27 479 +#define OBJ_pilotAttributeType27 OBJ_pilotAttributeType,27L + +#define LN_mXRecord "mXRecord" +#define NID_mXRecord 480 +#define OBJ_mXRecord OBJ_pilotAttributeType,28L + +#define LN_nSRecord "nSRecord" +#define NID_nSRecord 481 +#define OBJ_nSRecord OBJ_pilotAttributeType,29L + +#define LN_sOARecord "sOARecord" +#define NID_sOARecord 482 +#define OBJ_sOARecord OBJ_pilotAttributeType,30L + +#define LN_cNAMERecord "cNAMERecord" +#define NID_cNAMERecord 483 +#define OBJ_cNAMERecord OBJ_pilotAttributeType,31L + +#define LN_associatedDomain "associatedDomain" +#define NID_associatedDomain 484 +#define OBJ_associatedDomain OBJ_pilotAttributeType,37L + +#define LN_associatedName "associatedName" +#define NID_associatedName 485 +#define OBJ_associatedName OBJ_pilotAttributeType,38L + +#define LN_homePostalAddress "homePostalAddress" +#define NID_homePostalAddress 486 +#define OBJ_homePostalAddress OBJ_pilotAttributeType,39L + +#define LN_personalTitle "personalTitle" +#define NID_personalTitle 487 +#define OBJ_personalTitle OBJ_pilotAttributeType,40L + +#define LN_mobileTelephoneNumber "mobileTelephoneNumber" +#define NID_mobileTelephoneNumber 488 +#define OBJ_mobileTelephoneNumber OBJ_pilotAttributeType,41L + +#define LN_pagerTelephoneNumber "pagerTelephoneNumber" +#define NID_pagerTelephoneNumber 489 +#define OBJ_pagerTelephoneNumber OBJ_pilotAttributeType,42L + +#define LN_friendlyCountryName "friendlyCountryName" +#define NID_friendlyCountryName 490 +#define OBJ_friendlyCountryName OBJ_pilotAttributeType,43L + +#define LN_organizationalStatus "organizationalStatus" +#define NID_organizationalStatus 491 +#define OBJ_organizationalStatus OBJ_pilotAttributeType,45L + +#define LN_janetMailbox "janetMailbox" +#define NID_janetMailbox 492 +#define OBJ_janetMailbox OBJ_pilotAttributeType,46L + +#define LN_mailPreferenceOption "mailPreferenceOption" +#define NID_mailPreferenceOption 493 +#define OBJ_mailPreferenceOption OBJ_pilotAttributeType,47L + +#define LN_buildingName "buildingName" +#define NID_buildingName 494 +#define OBJ_buildingName OBJ_pilotAttributeType,48L + +#define LN_dSAQuality "dSAQuality" +#define NID_dSAQuality 495 +#define OBJ_dSAQuality OBJ_pilotAttributeType,49L + +#define LN_singleLevelQuality "singleLevelQuality" +#define NID_singleLevelQuality 496 +#define OBJ_singleLevelQuality OBJ_pilotAttributeType,50L + +#define LN_subtreeMinimumQuality "subtreeMinimumQuality" +#define NID_subtreeMinimumQuality 497 +#define OBJ_subtreeMinimumQuality OBJ_pilotAttributeType,51L + +#define LN_subtreeMaximumQuality "subtreeMaximumQuality" +#define NID_subtreeMaximumQuality 498 +#define OBJ_subtreeMaximumQuality OBJ_pilotAttributeType,52L + +#define LN_personalSignature "personalSignature" +#define NID_personalSignature 499 +#define OBJ_personalSignature OBJ_pilotAttributeType,53L + +#define LN_dITRedirect "dITRedirect" +#define NID_dITRedirect 500 +#define OBJ_dITRedirect OBJ_pilotAttributeType,54L + +#define SN_audio "audio" +#define NID_audio 501 +#define OBJ_audio OBJ_pilotAttributeType,55L + +#define LN_documentPublisher "documentPublisher" +#define NID_documentPublisher 502 +#define OBJ_documentPublisher OBJ_pilotAttributeType,56L + +#define SN_id_set "id-set" +#define LN_id_set "Secure Electronic Transactions" +#define NID_id_set 512 +#define OBJ_id_set OBJ_international_organizations,42L + +#define SN_set_ctype "set-ctype" +#define LN_set_ctype "content types" +#define NID_set_ctype 513 +#define OBJ_set_ctype OBJ_id_set,0L + +#define SN_set_msgExt "set-msgExt" +#define LN_set_msgExt "message extensions" +#define NID_set_msgExt 514 +#define OBJ_set_msgExt OBJ_id_set,1L + +#define SN_set_attr "set-attr" +#define NID_set_attr 515 +#define OBJ_set_attr OBJ_id_set,3L + +#define SN_set_policy "set-policy" +#define NID_set_policy 516 +#define OBJ_set_policy OBJ_id_set,5L + +#define SN_set_certExt "set-certExt" +#define LN_set_certExt "certificate extensions" +#define NID_set_certExt 517 +#define OBJ_set_certExt OBJ_id_set,7L + +#define SN_set_brand "set-brand" +#define NID_set_brand 518 +#define OBJ_set_brand OBJ_id_set,8L + +#define SN_setct_PANData "setct-PANData" +#define NID_setct_PANData 519 +#define OBJ_setct_PANData OBJ_set_ctype,0L + +#define SN_setct_PANToken "setct-PANToken" +#define NID_setct_PANToken 520 +#define OBJ_setct_PANToken OBJ_set_ctype,1L + +#define SN_setct_PANOnly "setct-PANOnly" +#define NID_setct_PANOnly 521 +#define OBJ_setct_PANOnly OBJ_set_ctype,2L + +#define SN_setct_OIData "setct-OIData" +#define NID_setct_OIData 522 +#define OBJ_setct_OIData OBJ_set_ctype,3L + +#define SN_setct_PI "setct-PI" +#define NID_setct_PI 523 +#define OBJ_setct_PI OBJ_set_ctype,4L + +#define SN_setct_PIData "setct-PIData" +#define NID_setct_PIData 524 +#define OBJ_setct_PIData OBJ_set_ctype,5L + +#define SN_setct_PIDataUnsigned "setct-PIDataUnsigned" +#define NID_setct_PIDataUnsigned 525 +#define OBJ_setct_PIDataUnsigned OBJ_set_ctype,6L + +#define SN_setct_HODInput "setct-HODInput" +#define NID_setct_HODInput 526 +#define OBJ_setct_HODInput OBJ_set_ctype,7L + +#define SN_setct_AuthResBaggage "setct-AuthResBaggage" +#define NID_setct_AuthResBaggage 527 +#define OBJ_setct_AuthResBaggage OBJ_set_ctype,8L + +#define SN_setct_AuthRevReqBaggage "setct-AuthRevReqBaggage" +#define NID_setct_AuthRevReqBaggage 528 +#define OBJ_setct_AuthRevReqBaggage OBJ_set_ctype,9L + +#define SN_setct_AuthRevResBaggage "setct-AuthRevResBaggage" +#define NID_setct_AuthRevResBaggage 529 +#define OBJ_setct_AuthRevResBaggage OBJ_set_ctype,10L + +#define SN_setct_CapTokenSeq "setct-CapTokenSeq" +#define NID_setct_CapTokenSeq 530 +#define OBJ_setct_CapTokenSeq OBJ_set_ctype,11L + +#define SN_setct_PInitResData "setct-PInitResData" +#define NID_setct_PInitResData 531 +#define OBJ_setct_PInitResData OBJ_set_ctype,12L + +#define SN_setct_PI_TBS "setct-PI-TBS" +#define NID_setct_PI_TBS 532 +#define OBJ_setct_PI_TBS OBJ_set_ctype,13L + +#define SN_setct_PResData "setct-PResData" +#define NID_setct_PResData 533 +#define OBJ_setct_PResData OBJ_set_ctype,14L + +#define SN_setct_AuthReqTBS "setct-AuthReqTBS" +#define NID_setct_AuthReqTBS 534 +#define OBJ_setct_AuthReqTBS OBJ_set_ctype,16L + +#define SN_setct_AuthResTBS "setct-AuthResTBS" +#define NID_setct_AuthResTBS 535 +#define OBJ_setct_AuthResTBS OBJ_set_ctype,17L + +#define SN_setct_AuthResTBSX "setct-AuthResTBSX" +#define NID_setct_AuthResTBSX 536 +#define OBJ_setct_AuthResTBSX OBJ_set_ctype,18L + +#define SN_setct_AuthTokenTBS "setct-AuthTokenTBS" +#define NID_setct_AuthTokenTBS 537 +#define OBJ_setct_AuthTokenTBS OBJ_set_ctype,19L + +#define SN_setct_CapTokenData "setct-CapTokenData" +#define NID_setct_CapTokenData 538 +#define OBJ_setct_CapTokenData OBJ_set_ctype,20L + +#define SN_setct_CapTokenTBS "setct-CapTokenTBS" +#define NID_setct_CapTokenTBS 539 +#define OBJ_setct_CapTokenTBS OBJ_set_ctype,21L + +#define SN_setct_AcqCardCodeMsg "setct-AcqCardCodeMsg" +#define NID_setct_AcqCardCodeMsg 540 +#define OBJ_setct_AcqCardCodeMsg OBJ_set_ctype,22L + +#define SN_setct_AuthRevReqTBS "setct-AuthRevReqTBS" +#define NID_setct_AuthRevReqTBS 541 +#define OBJ_setct_AuthRevReqTBS OBJ_set_ctype,23L + +#define SN_setct_AuthRevResData "setct-AuthRevResData" +#define NID_setct_AuthRevResData 542 +#define OBJ_setct_AuthRevResData OBJ_set_ctype,24L + +#define SN_setct_AuthRevResTBS "setct-AuthRevResTBS" +#define NID_setct_AuthRevResTBS 543 +#define OBJ_setct_AuthRevResTBS OBJ_set_ctype,25L + +#define SN_setct_CapReqTBS "setct-CapReqTBS" +#define NID_setct_CapReqTBS 544 +#define OBJ_setct_CapReqTBS OBJ_set_ctype,26L + +#define SN_setct_CapReqTBSX "setct-CapReqTBSX" +#define NID_setct_CapReqTBSX 545 +#define OBJ_setct_CapReqTBSX OBJ_set_ctype,27L + +#define SN_setct_CapResData "setct-CapResData" +#define NID_setct_CapResData 546 +#define OBJ_setct_CapResData OBJ_set_ctype,28L + +#define SN_setct_CapRevReqTBS "setct-CapRevReqTBS" +#define NID_setct_CapRevReqTBS 547 +#define OBJ_setct_CapRevReqTBS OBJ_set_ctype,29L + +#define SN_setct_CapRevReqTBSX "setct-CapRevReqTBSX" +#define NID_setct_CapRevReqTBSX 548 +#define OBJ_setct_CapRevReqTBSX OBJ_set_ctype,30L + +#define SN_setct_CapRevResData "setct-CapRevResData" +#define NID_setct_CapRevResData 549 +#define OBJ_setct_CapRevResData OBJ_set_ctype,31L + +#define SN_setct_CredReqTBS "setct-CredReqTBS" +#define NID_setct_CredReqTBS 550 +#define OBJ_setct_CredReqTBS OBJ_set_ctype,32L + +#define SN_setct_CredReqTBSX "setct-CredReqTBSX" +#define NID_setct_CredReqTBSX 551 +#define OBJ_setct_CredReqTBSX OBJ_set_ctype,33L + +#define SN_setct_CredResData "setct-CredResData" +#define NID_setct_CredResData 552 +#define OBJ_setct_CredResData OBJ_set_ctype,34L + +#define SN_setct_CredRevReqTBS "setct-CredRevReqTBS" +#define NID_setct_CredRevReqTBS 553 +#define OBJ_setct_CredRevReqTBS OBJ_set_ctype,35L + +#define SN_setct_CredRevReqTBSX "setct-CredRevReqTBSX" +#define NID_setct_CredRevReqTBSX 554 +#define OBJ_setct_CredRevReqTBSX OBJ_set_ctype,36L + +#define SN_setct_CredRevResData "setct-CredRevResData" +#define NID_setct_CredRevResData 555 +#define OBJ_setct_CredRevResData OBJ_set_ctype,37L + +#define SN_setct_PCertReqData "setct-PCertReqData" +#define NID_setct_PCertReqData 556 +#define OBJ_setct_PCertReqData OBJ_set_ctype,38L + +#define SN_setct_PCertResTBS "setct-PCertResTBS" +#define NID_setct_PCertResTBS 557 +#define OBJ_setct_PCertResTBS OBJ_set_ctype,39L + +#define SN_setct_BatchAdminReqData "setct-BatchAdminReqData" +#define NID_setct_BatchAdminReqData 558 +#define OBJ_setct_BatchAdminReqData OBJ_set_ctype,40L + +#define SN_setct_BatchAdminResData "setct-BatchAdminResData" +#define NID_setct_BatchAdminResData 559 +#define OBJ_setct_BatchAdminResData OBJ_set_ctype,41L + +#define SN_setct_CardCInitResTBS "setct-CardCInitResTBS" +#define NID_setct_CardCInitResTBS 560 +#define OBJ_setct_CardCInitResTBS OBJ_set_ctype,42L + +#define SN_setct_MeAqCInitResTBS "setct-MeAqCInitResTBS" +#define NID_setct_MeAqCInitResTBS 561 +#define OBJ_setct_MeAqCInitResTBS OBJ_set_ctype,43L + +#define SN_setct_RegFormResTBS "setct-RegFormResTBS" +#define NID_setct_RegFormResTBS 562 +#define OBJ_setct_RegFormResTBS OBJ_set_ctype,44L + +#define SN_setct_CertReqData "setct-CertReqData" +#define NID_setct_CertReqData 563 +#define OBJ_setct_CertReqData OBJ_set_ctype,45L + +#define SN_setct_CertReqTBS "setct-CertReqTBS" +#define NID_setct_CertReqTBS 564 +#define OBJ_setct_CertReqTBS OBJ_set_ctype,46L + +#define SN_setct_CertResData "setct-CertResData" +#define NID_setct_CertResData 565 +#define OBJ_setct_CertResData OBJ_set_ctype,47L + +#define SN_setct_CertInqReqTBS "setct-CertInqReqTBS" +#define NID_setct_CertInqReqTBS 566 +#define OBJ_setct_CertInqReqTBS OBJ_set_ctype,48L + +#define SN_setct_ErrorTBS "setct-ErrorTBS" +#define NID_setct_ErrorTBS 567 +#define OBJ_setct_ErrorTBS OBJ_set_ctype,49L + +#define SN_setct_PIDualSignedTBE "setct-PIDualSignedTBE" +#define NID_setct_PIDualSignedTBE 568 +#define OBJ_setct_PIDualSignedTBE OBJ_set_ctype,50L + +#define SN_setct_PIUnsignedTBE "setct-PIUnsignedTBE" +#define NID_setct_PIUnsignedTBE 569 +#define OBJ_setct_PIUnsignedTBE OBJ_set_ctype,51L + +#define SN_setct_AuthReqTBE "setct-AuthReqTBE" +#define NID_setct_AuthReqTBE 570 +#define OBJ_setct_AuthReqTBE OBJ_set_ctype,52L + +#define SN_setct_AuthResTBE "setct-AuthResTBE" +#define NID_setct_AuthResTBE 571 +#define OBJ_setct_AuthResTBE OBJ_set_ctype,53L + +#define SN_setct_AuthResTBEX "setct-AuthResTBEX" +#define NID_setct_AuthResTBEX 572 +#define OBJ_setct_AuthResTBEX OBJ_set_ctype,54L + +#define SN_setct_AuthTokenTBE "setct-AuthTokenTBE" +#define NID_setct_AuthTokenTBE 573 +#define OBJ_setct_AuthTokenTBE OBJ_set_ctype,55L + +#define SN_setct_CapTokenTBE "setct-CapTokenTBE" +#define NID_setct_CapTokenTBE 574 +#define OBJ_setct_CapTokenTBE OBJ_set_ctype,56L + +#define SN_setct_CapTokenTBEX "setct-CapTokenTBEX" +#define NID_setct_CapTokenTBEX 575 +#define OBJ_setct_CapTokenTBEX OBJ_set_ctype,57L + +#define SN_setct_AcqCardCodeMsgTBE "setct-AcqCardCodeMsgTBE" +#define NID_setct_AcqCardCodeMsgTBE 576 +#define OBJ_setct_AcqCardCodeMsgTBE OBJ_set_ctype,58L + +#define SN_setct_AuthRevReqTBE "setct-AuthRevReqTBE" +#define NID_setct_AuthRevReqTBE 577 +#define OBJ_setct_AuthRevReqTBE OBJ_set_ctype,59L + +#define SN_setct_AuthRevResTBE "setct-AuthRevResTBE" +#define NID_setct_AuthRevResTBE 578 +#define OBJ_setct_AuthRevResTBE OBJ_set_ctype,60L + +#define SN_setct_AuthRevResTBEB "setct-AuthRevResTBEB" +#define NID_setct_AuthRevResTBEB 579 +#define OBJ_setct_AuthRevResTBEB OBJ_set_ctype,61L + +#define SN_setct_CapReqTBE "setct-CapReqTBE" +#define NID_setct_CapReqTBE 580 +#define OBJ_setct_CapReqTBE OBJ_set_ctype,62L + +#define SN_setct_CapReqTBEX "setct-CapReqTBEX" +#define NID_setct_CapReqTBEX 581 +#define OBJ_setct_CapReqTBEX OBJ_set_ctype,63L + +#define SN_setct_CapResTBE "setct-CapResTBE" +#define NID_setct_CapResTBE 582 +#define OBJ_setct_CapResTBE OBJ_set_ctype,64L + +#define SN_setct_CapRevReqTBE "setct-CapRevReqTBE" +#define NID_setct_CapRevReqTBE 583 +#define OBJ_setct_CapRevReqTBE OBJ_set_ctype,65L + +#define SN_setct_CapRevReqTBEX "setct-CapRevReqTBEX" +#define NID_setct_CapRevReqTBEX 584 +#define OBJ_setct_CapRevReqTBEX OBJ_set_ctype,66L + +#define SN_setct_CapRevResTBE "setct-CapRevResTBE" +#define NID_setct_CapRevResTBE 585 +#define OBJ_setct_CapRevResTBE OBJ_set_ctype,67L + +#define SN_setct_CredReqTBE "setct-CredReqTBE" +#define NID_setct_CredReqTBE 586 +#define OBJ_setct_CredReqTBE OBJ_set_ctype,68L + +#define SN_setct_CredReqTBEX "setct-CredReqTBEX" +#define NID_setct_CredReqTBEX 587 +#define OBJ_setct_CredReqTBEX OBJ_set_ctype,69L + +#define SN_setct_CredResTBE "setct-CredResTBE" +#define NID_setct_CredResTBE 588 +#define OBJ_setct_CredResTBE OBJ_set_ctype,70L + +#define SN_setct_CredRevReqTBE "setct-CredRevReqTBE" +#define NID_setct_CredRevReqTBE 589 +#define OBJ_setct_CredRevReqTBE OBJ_set_ctype,71L + +#define SN_setct_CredRevReqTBEX "setct-CredRevReqTBEX" +#define NID_setct_CredRevReqTBEX 590 +#define OBJ_setct_CredRevReqTBEX OBJ_set_ctype,72L + +#define SN_setct_CredRevResTBE "setct-CredRevResTBE" +#define NID_setct_CredRevResTBE 591 +#define OBJ_setct_CredRevResTBE OBJ_set_ctype,73L + +#define SN_setct_BatchAdminReqTBE "setct-BatchAdminReqTBE" +#define NID_setct_BatchAdminReqTBE 592 +#define OBJ_setct_BatchAdminReqTBE OBJ_set_ctype,74L + +#define SN_setct_BatchAdminResTBE "setct-BatchAdminResTBE" +#define NID_setct_BatchAdminResTBE 593 +#define OBJ_setct_BatchAdminResTBE OBJ_set_ctype,75L + +#define SN_setct_RegFormReqTBE "setct-RegFormReqTBE" +#define NID_setct_RegFormReqTBE 594 +#define OBJ_setct_RegFormReqTBE OBJ_set_ctype,76L + +#define SN_setct_CertReqTBE "setct-CertReqTBE" +#define NID_setct_CertReqTBE 595 +#define OBJ_setct_CertReqTBE OBJ_set_ctype,77L + +#define SN_setct_CertReqTBEX "setct-CertReqTBEX" +#define NID_setct_CertReqTBEX 596 +#define OBJ_setct_CertReqTBEX OBJ_set_ctype,78L + +#define SN_setct_CertResTBE "setct-CertResTBE" +#define NID_setct_CertResTBE 597 +#define OBJ_setct_CertResTBE OBJ_set_ctype,79L + +#define SN_setct_CRLNotificationTBS "setct-CRLNotificationTBS" +#define NID_setct_CRLNotificationTBS 598 +#define OBJ_setct_CRLNotificationTBS OBJ_set_ctype,80L + +#define SN_setct_CRLNotificationResTBS "setct-CRLNotificationResTBS" +#define NID_setct_CRLNotificationResTBS 599 +#define OBJ_setct_CRLNotificationResTBS OBJ_set_ctype,81L + +#define SN_setct_BCIDistributionTBS "setct-BCIDistributionTBS" +#define NID_setct_BCIDistributionTBS 600 +#define OBJ_setct_BCIDistributionTBS OBJ_set_ctype,82L + +#define SN_setext_genCrypt "setext-genCrypt" +#define LN_setext_genCrypt "generic cryptogram" +#define NID_setext_genCrypt 601 +#define OBJ_setext_genCrypt OBJ_set_msgExt,1L + +#define SN_setext_miAuth "setext-miAuth" +#define LN_setext_miAuth "merchant initiated auth" +#define NID_setext_miAuth 602 +#define OBJ_setext_miAuth OBJ_set_msgExt,3L + +#define SN_setext_pinSecure "setext-pinSecure" +#define NID_setext_pinSecure 603 +#define OBJ_setext_pinSecure OBJ_set_msgExt,4L + +#define SN_setext_pinAny "setext-pinAny" +#define NID_setext_pinAny 604 +#define OBJ_setext_pinAny OBJ_set_msgExt,5L + +#define SN_setext_track2 "setext-track2" +#define NID_setext_track2 605 +#define OBJ_setext_track2 OBJ_set_msgExt,7L + +#define SN_setext_cv "setext-cv" +#define LN_setext_cv "additional verification" +#define NID_setext_cv 606 +#define OBJ_setext_cv OBJ_set_msgExt,8L + +#define SN_set_policy_root "set-policy-root" +#define NID_set_policy_root 607 +#define OBJ_set_policy_root OBJ_set_policy,0L + +#define SN_setCext_hashedRoot "setCext-hashedRoot" +#define NID_setCext_hashedRoot 608 +#define OBJ_setCext_hashedRoot OBJ_set_certExt,0L + +#define SN_setCext_certType "setCext-certType" +#define NID_setCext_certType 609 +#define OBJ_setCext_certType OBJ_set_certExt,1L + +#define SN_setCext_merchData "setCext-merchData" +#define NID_setCext_merchData 610 +#define OBJ_setCext_merchData OBJ_set_certExt,2L + +#define SN_setCext_cCertRequired "setCext-cCertRequired" +#define NID_setCext_cCertRequired 611 +#define OBJ_setCext_cCertRequired OBJ_set_certExt,3L + +#define SN_setCext_tunneling "setCext-tunneling" +#define NID_setCext_tunneling 612 +#define OBJ_setCext_tunneling OBJ_set_certExt,4L + +#define SN_setCext_setExt "setCext-setExt" +#define NID_setCext_setExt 613 +#define OBJ_setCext_setExt OBJ_set_certExt,5L + +#define SN_setCext_setQualf "setCext-setQualf" +#define NID_setCext_setQualf 614 +#define OBJ_setCext_setQualf OBJ_set_certExt,6L + +#define SN_setCext_PGWYcapabilities "setCext-PGWYcapabilities" +#define NID_setCext_PGWYcapabilities 615 +#define OBJ_setCext_PGWYcapabilities OBJ_set_certExt,7L + +#define SN_setCext_TokenIdentifier "setCext-TokenIdentifier" +#define NID_setCext_TokenIdentifier 616 +#define OBJ_setCext_TokenIdentifier OBJ_set_certExt,8L + +#define SN_setCext_Track2Data "setCext-Track2Data" +#define NID_setCext_Track2Data 617 +#define OBJ_setCext_Track2Data OBJ_set_certExt,9L + +#define SN_setCext_TokenType "setCext-TokenType" +#define NID_setCext_TokenType 618 +#define OBJ_setCext_TokenType OBJ_set_certExt,10L + +#define SN_setCext_IssuerCapabilities "setCext-IssuerCapabilities" +#define NID_setCext_IssuerCapabilities 619 +#define OBJ_setCext_IssuerCapabilities OBJ_set_certExt,11L + +#define SN_setAttr_Cert "setAttr-Cert" +#define NID_setAttr_Cert 620 +#define OBJ_setAttr_Cert OBJ_set_attr,0L + +#define SN_setAttr_PGWYcap "setAttr-PGWYcap" +#define LN_setAttr_PGWYcap "payment gateway capabilities" +#define NID_setAttr_PGWYcap 621 +#define OBJ_setAttr_PGWYcap OBJ_set_attr,1L + +#define SN_setAttr_TokenType "setAttr-TokenType" +#define NID_setAttr_TokenType 622 +#define OBJ_setAttr_TokenType OBJ_set_attr,2L + +#define SN_setAttr_IssCap "setAttr-IssCap" +#define LN_setAttr_IssCap "issuer capabilities" +#define NID_setAttr_IssCap 623 +#define OBJ_setAttr_IssCap OBJ_set_attr,3L + +#define SN_set_rootKeyThumb "set-rootKeyThumb" +#define NID_set_rootKeyThumb 624 +#define OBJ_set_rootKeyThumb OBJ_setAttr_Cert,0L + +#define SN_set_addPolicy "set-addPolicy" +#define NID_set_addPolicy 625 +#define OBJ_set_addPolicy OBJ_setAttr_Cert,1L + +#define SN_setAttr_Token_EMV "setAttr-Token-EMV" +#define NID_setAttr_Token_EMV 626 +#define OBJ_setAttr_Token_EMV OBJ_setAttr_TokenType,1L + +#define SN_setAttr_Token_B0Prime "setAttr-Token-B0Prime" +#define NID_setAttr_Token_B0Prime 627 +#define OBJ_setAttr_Token_B0Prime OBJ_setAttr_TokenType,2L + +#define SN_setAttr_IssCap_CVM "setAttr-IssCap-CVM" +#define NID_setAttr_IssCap_CVM 628 +#define OBJ_setAttr_IssCap_CVM OBJ_setAttr_IssCap,3L + +#define SN_setAttr_IssCap_T2 "setAttr-IssCap-T2" +#define NID_setAttr_IssCap_T2 629 +#define OBJ_setAttr_IssCap_T2 OBJ_setAttr_IssCap,4L + +#define SN_setAttr_IssCap_Sig "setAttr-IssCap-Sig" +#define NID_setAttr_IssCap_Sig 630 +#define OBJ_setAttr_IssCap_Sig OBJ_setAttr_IssCap,5L + +#define SN_setAttr_GenCryptgrm "setAttr-GenCryptgrm" +#define LN_setAttr_GenCryptgrm "generate cryptogram" +#define NID_setAttr_GenCryptgrm 631 +#define OBJ_setAttr_GenCryptgrm OBJ_setAttr_IssCap_CVM,1L + +#define SN_setAttr_T2Enc "setAttr-T2Enc" +#define LN_setAttr_T2Enc "encrypted track 2" +#define NID_setAttr_T2Enc 632 +#define OBJ_setAttr_T2Enc OBJ_setAttr_IssCap_T2,1L + +#define SN_setAttr_T2cleartxt "setAttr-T2cleartxt" +#define LN_setAttr_T2cleartxt "cleartext track 2" +#define NID_setAttr_T2cleartxt 633 +#define OBJ_setAttr_T2cleartxt OBJ_setAttr_IssCap_T2,2L + +#define SN_setAttr_TokICCsig "setAttr-TokICCsig" +#define LN_setAttr_TokICCsig "ICC or token signature" +#define NID_setAttr_TokICCsig 634 +#define OBJ_setAttr_TokICCsig OBJ_setAttr_IssCap_Sig,1L + +#define SN_setAttr_SecDevSig "setAttr-SecDevSig" +#define LN_setAttr_SecDevSig "secure device signature" +#define NID_setAttr_SecDevSig 635 +#define OBJ_setAttr_SecDevSig OBJ_setAttr_IssCap_Sig,2L + +#define SN_set_brand_IATA_ATA "set-brand-IATA-ATA" +#define NID_set_brand_IATA_ATA 636 +#define OBJ_set_brand_IATA_ATA OBJ_set_brand,1L + +#define SN_set_brand_Diners "set-brand-Diners" +#define NID_set_brand_Diners 637 +#define OBJ_set_brand_Diners OBJ_set_brand,30L + +#define SN_set_brand_AmericanExpress "set-brand-AmericanExpress" +#define NID_set_brand_AmericanExpress 638 +#define OBJ_set_brand_AmericanExpress OBJ_set_brand,34L + +#define SN_set_brand_JCB "set-brand-JCB" +#define NID_set_brand_JCB 639 +#define OBJ_set_brand_JCB OBJ_set_brand,35L + +#define SN_set_brand_Visa "set-brand-Visa" +#define NID_set_brand_Visa 640 +#define OBJ_set_brand_Visa OBJ_set_brand,4L + +#define SN_set_brand_MasterCard "set-brand-MasterCard" +#define NID_set_brand_MasterCard 641 +#define OBJ_set_brand_MasterCard OBJ_set_brand,5L + +#define SN_set_brand_Novus "set-brand-Novus" +#define NID_set_brand_Novus 642 +#define OBJ_set_brand_Novus OBJ_set_brand,6011L + +#define SN_des_cdmf "DES-CDMF" +#define LN_des_cdmf "des-cdmf" +#define NID_des_cdmf 643 +#define OBJ_des_cdmf OBJ_rsadsi,3L,10L + +#define SN_rsaOAEPEncryptionSET "rsaOAEPEncryptionSET" +#define NID_rsaOAEPEncryptionSET 644 +#define OBJ_rsaOAEPEncryptionSET OBJ_rsadsi,1L,1L,6L + +#define SN_ipsec3 "Oakley-EC2N-3" +#define LN_ipsec3 "ipsec3" +#define NID_ipsec3 749 + +#define SN_ipsec4 "Oakley-EC2N-4" +#define LN_ipsec4 "ipsec4" +#define NID_ipsec4 750 + +#define SN_whirlpool "whirlpool" +#define NID_whirlpool 804 +#define OBJ_whirlpool OBJ_iso,0L,10118L,3L,0L,55L + +#define SN_cryptopro "cryptopro" +#define NID_cryptopro 805 +#define OBJ_cryptopro OBJ_member_body,643L,2L,2L + +#define SN_cryptocom "cryptocom" +#define NID_cryptocom 806 +#define OBJ_cryptocom OBJ_member_body,643L,2L,9L + +#define SN_id_GostR3411_94_with_GostR3410_2001 "id-GostR3411-94-with-GostR3410-2001" +#define LN_id_GostR3411_94_with_GostR3410_2001 "GOST R 34.11-94 with GOST R 34.10-2001" +#define NID_id_GostR3411_94_with_GostR3410_2001 807 +#define OBJ_id_GostR3411_94_with_GostR3410_2001 OBJ_cryptopro,3L + +#define SN_id_GostR3411_94_with_GostR3410_94 "id-GostR3411-94-with-GostR3410-94" +#define LN_id_GostR3411_94_with_GostR3410_94 "GOST R 34.11-94 with GOST R 34.10-94" +#define NID_id_GostR3411_94_with_GostR3410_94 808 +#define OBJ_id_GostR3411_94_with_GostR3410_94 OBJ_cryptopro,4L + +#define SN_id_GostR3411_94 "md_gost94" +#define LN_id_GostR3411_94 "GOST R 34.11-94" +#define NID_id_GostR3411_94 809 +#define OBJ_id_GostR3411_94 OBJ_cryptopro,9L + +#define SN_id_HMACGostR3411_94 "id-HMACGostR3411-94" +#define LN_id_HMACGostR3411_94 "HMAC GOST 34.11-94" +#define NID_id_HMACGostR3411_94 810 +#define OBJ_id_HMACGostR3411_94 OBJ_cryptopro,10L + +#define SN_id_GostR3410_2001 "gost2001" +#define LN_id_GostR3410_2001 "GOST R 34.10-2001" +#define NID_id_GostR3410_2001 811 +#define OBJ_id_GostR3410_2001 OBJ_cryptopro,19L + +#define SN_id_GostR3410_94 "gost94" +#define LN_id_GostR3410_94 "GOST R 34.10-94" +#define NID_id_GostR3410_94 812 +#define OBJ_id_GostR3410_94 OBJ_cryptopro,20L + +#define SN_id_Gost28147_89 "gost89" +#define LN_id_Gost28147_89 "GOST 28147-89" +#define NID_id_Gost28147_89 813 +#define OBJ_id_Gost28147_89 OBJ_cryptopro,21L + +#define SN_gost89_cnt "gost89-cnt" +#define NID_gost89_cnt 814 + +#define SN_id_Gost28147_89_MAC "gost-mac" +#define LN_id_Gost28147_89_MAC "GOST 28147-89 MAC" +#define NID_id_Gost28147_89_MAC 815 +#define OBJ_id_Gost28147_89_MAC OBJ_cryptopro,22L + +#define SN_id_GostR3411_94_prf "prf-gostr3411-94" +#define LN_id_GostR3411_94_prf "GOST R 34.11-94 PRF" +#define NID_id_GostR3411_94_prf 816 +#define OBJ_id_GostR3411_94_prf OBJ_cryptopro,23L + +#define SN_id_GostR3410_2001DH "id-GostR3410-2001DH" +#define LN_id_GostR3410_2001DH "GOST R 34.10-2001 DH" +#define NID_id_GostR3410_2001DH 817 +#define OBJ_id_GostR3410_2001DH OBJ_cryptopro,98L + +#define SN_id_GostR3410_94DH "id-GostR3410-94DH" +#define LN_id_GostR3410_94DH "GOST R 34.10-94 DH" +#define NID_id_GostR3410_94DH 818 +#define OBJ_id_GostR3410_94DH OBJ_cryptopro,99L + +#define SN_id_Gost28147_89_CryptoPro_KeyMeshing "id-Gost28147-89-CryptoPro-KeyMeshing" +#define NID_id_Gost28147_89_CryptoPro_KeyMeshing 819 +#define OBJ_id_Gost28147_89_CryptoPro_KeyMeshing OBJ_cryptopro,14L,1L + +#define SN_id_Gost28147_89_None_KeyMeshing "id-Gost28147-89-None-KeyMeshing" +#define NID_id_Gost28147_89_None_KeyMeshing 820 +#define OBJ_id_Gost28147_89_None_KeyMeshing OBJ_cryptopro,14L,0L + +#define SN_id_GostR3411_94_TestParamSet "id-GostR3411-94-TestParamSet" +#define NID_id_GostR3411_94_TestParamSet 821 +#define OBJ_id_GostR3411_94_TestParamSet OBJ_cryptopro,30L,0L + +#define SN_id_GostR3411_94_CryptoProParamSet "id-GostR3411-94-CryptoProParamSet" +#define NID_id_GostR3411_94_CryptoProParamSet 822 +#define OBJ_id_GostR3411_94_CryptoProParamSet OBJ_cryptopro,30L,1L + +#define SN_id_Gost28147_89_TestParamSet "id-Gost28147-89-TestParamSet" +#define NID_id_Gost28147_89_TestParamSet 823 +#define OBJ_id_Gost28147_89_TestParamSet OBJ_cryptopro,31L,0L + +#define SN_id_Gost28147_89_CryptoPro_A_ParamSet "id-Gost28147-89-CryptoPro-A-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_A_ParamSet 824 +#define OBJ_id_Gost28147_89_CryptoPro_A_ParamSet OBJ_cryptopro,31L,1L + +#define SN_id_Gost28147_89_CryptoPro_B_ParamSet "id-Gost28147-89-CryptoPro-B-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_B_ParamSet 825 +#define OBJ_id_Gost28147_89_CryptoPro_B_ParamSet OBJ_cryptopro,31L,2L + +#define SN_id_Gost28147_89_CryptoPro_C_ParamSet "id-Gost28147-89-CryptoPro-C-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_C_ParamSet 826 +#define OBJ_id_Gost28147_89_CryptoPro_C_ParamSet OBJ_cryptopro,31L,3L + +#define SN_id_Gost28147_89_CryptoPro_D_ParamSet "id-Gost28147-89-CryptoPro-D-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_D_ParamSet 827 +#define OBJ_id_Gost28147_89_CryptoPro_D_ParamSet OBJ_cryptopro,31L,4L + +#define SN_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet 828 +#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet OBJ_cryptopro,31L,5L + +#define SN_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet 829 +#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet OBJ_cryptopro,31L,6L + +#define SN_id_Gost28147_89_CryptoPro_RIC_1_ParamSet "id-Gost28147-89-CryptoPro-RIC-1-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_RIC_1_ParamSet 830 +#define OBJ_id_Gost28147_89_CryptoPro_RIC_1_ParamSet OBJ_cryptopro,31L,7L + +#define SN_id_GostR3410_94_TestParamSet "id-GostR3410-94-TestParamSet" +#define NID_id_GostR3410_94_TestParamSet 831 +#define OBJ_id_GostR3410_94_TestParamSet OBJ_cryptopro,32L,0L + +#define SN_id_GostR3410_94_CryptoPro_A_ParamSet "id-GostR3410-94-CryptoPro-A-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_A_ParamSet 832 +#define OBJ_id_GostR3410_94_CryptoPro_A_ParamSet OBJ_cryptopro,32L,2L + +#define SN_id_GostR3410_94_CryptoPro_B_ParamSet "id-GostR3410-94-CryptoPro-B-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_B_ParamSet 833 +#define OBJ_id_GostR3410_94_CryptoPro_B_ParamSet OBJ_cryptopro,32L,3L + +#define SN_id_GostR3410_94_CryptoPro_C_ParamSet "id-GostR3410-94-CryptoPro-C-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_C_ParamSet 834 +#define OBJ_id_GostR3410_94_CryptoPro_C_ParamSet OBJ_cryptopro,32L,4L + +#define SN_id_GostR3410_94_CryptoPro_D_ParamSet "id-GostR3410-94-CryptoPro-D-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_D_ParamSet 835 +#define OBJ_id_GostR3410_94_CryptoPro_D_ParamSet OBJ_cryptopro,32L,5L + +#define SN_id_GostR3410_94_CryptoPro_XchA_ParamSet "id-GostR3410-94-CryptoPro-XchA-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_XchA_ParamSet 836 +#define OBJ_id_GostR3410_94_CryptoPro_XchA_ParamSet OBJ_cryptopro,33L,1L + +#define SN_id_GostR3410_94_CryptoPro_XchB_ParamSet "id-GostR3410-94-CryptoPro-XchB-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_XchB_ParamSet 837 +#define OBJ_id_GostR3410_94_CryptoPro_XchB_ParamSet OBJ_cryptopro,33L,2L + +#define SN_id_GostR3410_94_CryptoPro_XchC_ParamSet "id-GostR3410-94-CryptoPro-XchC-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_XchC_ParamSet 838 +#define OBJ_id_GostR3410_94_CryptoPro_XchC_ParamSet OBJ_cryptopro,33L,3L + +#define SN_id_GostR3410_2001_TestParamSet "id-GostR3410-2001-TestParamSet" +#define NID_id_GostR3410_2001_TestParamSet 839 +#define OBJ_id_GostR3410_2001_TestParamSet OBJ_cryptopro,35L,0L + +#define SN_id_GostR3410_2001_CryptoPro_A_ParamSet "id-GostR3410-2001-CryptoPro-A-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_A_ParamSet 840 +#define OBJ_id_GostR3410_2001_CryptoPro_A_ParamSet OBJ_cryptopro,35L,1L + +#define SN_id_GostR3410_2001_CryptoPro_B_ParamSet "id-GostR3410-2001-CryptoPro-B-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_B_ParamSet 841 +#define OBJ_id_GostR3410_2001_CryptoPro_B_ParamSet OBJ_cryptopro,35L,2L + +#define SN_id_GostR3410_2001_CryptoPro_C_ParamSet "id-GostR3410-2001-CryptoPro-C-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_C_ParamSet 842 +#define OBJ_id_GostR3410_2001_CryptoPro_C_ParamSet OBJ_cryptopro,35L,3L + +#define SN_id_GostR3410_2001_CryptoPro_XchA_ParamSet "id-GostR3410-2001-CryptoPro-XchA-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet 843 +#define OBJ_id_GostR3410_2001_CryptoPro_XchA_ParamSet OBJ_cryptopro,36L,0L + +#define SN_id_GostR3410_2001_CryptoPro_XchB_ParamSet "id-GostR3410-2001-CryptoPro-XchB-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet 844 +#define OBJ_id_GostR3410_2001_CryptoPro_XchB_ParamSet OBJ_cryptopro,36L,1L + +#define SN_id_GostR3410_94_a "id-GostR3410-94-a" +#define NID_id_GostR3410_94_a 845 +#define OBJ_id_GostR3410_94_a OBJ_id_GostR3410_94,1L + +#define SN_id_GostR3410_94_aBis "id-GostR3410-94-aBis" +#define NID_id_GostR3410_94_aBis 846 +#define OBJ_id_GostR3410_94_aBis OBJ_id_GostR3410_94,2L + +#define SN_id_GostR3410_94_b "id-GostR3410-94-b" +#define NID_id_GostR3410_94_b 847 +#define OBJ_id_GostR3410_94_b OBJ_id_GostR3410_94,3L + +#define SN_id_GostR3410_94_bBis "id-GostR3410-94-bBis" +#define NID_id_GostR3410_94_bBis 848 +#define OBJ_id_GostR3410_94_bBis OBJ_id_GostR3410_94,4L + +#define SN_id_Gost28147_89_cc "id-Gost28147-89-cc" +#define LN_id_Gost28147_89_cc "GOST 28147-89 Cryptocom ParamSet" +#define NID_id_Gost28147_89_cc 849 +#define OBJ_id_Gost28147_89_cc OBJ_cryptocom,1L,6L,1L + +#define SN_id_GostR3410_94_cc "gost94cc" +#define LN_id_GostR3410_94_cc "GOST 34.10-94 Cryptocom" +#define NID_id_GostR3410_94_cc 850 +#define OBJ_id_GostR3410_94_cc OBJ_cryptocom,1L,5L,3L + +#define SN_id_GostR3410_2001_cc "gost2001cc" +#define LN_id_GostR3410_2001_cc "GOST 34.10-2001 Cryptocom" +#define NID_id_GostR3410_2001_cc 851 +#define OBJ_id_GostR3410_2001_cc OBJ_cryptocom,1L,5L,4L + +#define SN_id_GostR3411_94_with_GostR3410_94_cc "id-GostR3411-94-with-GostR3410-94-cc" +#define LN_id_GostR3411_94_with_GostR3410_94_cc "GOST R 34.11-94 with GOST R 34.10-94 Cryptocom" +#define NID_id_GostR3411_94_with_GostR3410_94_cc 852 +#define OBJ_id_GostR3411_94_with_GostR3410_94_cc OBJ_cryptocom,1L,3L,3L + +#define SN_id_GostR3411_94_with_GostR3410_2001_cc "id-GostR3411-94-with-GostR3410-2001-cc" +#define LN_id_GostR3411_94_with_GostR3410_2001_cc "GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom" +#define NID_id_GostR3411_94_with_GostR3410_2001_cc 853 +#define OBJ_id_GostR3411_94_with_GostR3410_2001_cc OBJ_cryptocom,1L,3L,4L + +#define SN_id_GostR3410_2001_ParamSet_cc "id-GostR3410-2001-ParamSet-cc" +#define LN_id_GostR3410_2001_ParamSet_cc "GOST R 3410-2001 Parameter Set Cryptocom" +#define NID_id_GostR3410_2001_ParamSet_cc 854 +#define OBJ_id_GostR3410_2001_ParamSet_cc OBJ_cryptocom,1L,8L,1L + +#define SN_camellia_128_cbc "CAMELLIA-128-CBC" +#define LN_camellia_128_cbc "camellia-128-cbc" +#define NID_camellia_128_cbc 751 +#define OBJ_camellia_128_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,2L + +#define SN_camellia_192_cbc "CAMELLIA-192-CBC" +#define LN_camellia_192_cbc "camellia-192-cbc" +#define NID_camellia_192_cbc 752 +#define OBJ_camellia_192_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,3L + +#define SN_camellia_256_cbc "CAMELLIA-256-CBC" +#define LN_camellia_256_cbc "camellia-256-cbc" +#define NID_camellia_256_cbc 753 +#define OBJ_camellia_256_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,4L + +#define SN_id_camellia128_wrap "id-camellia128-wrap" +#define NID_id_camellia128_wrap 907 +#define OBJ_id_camellia128_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,2L + +#define SN_id_camellia192_wrap "id-camellia192-wrap" +#define NID_id_camellia192_wrap 908 +#define OBJ_id_camellia192_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,3L + +#define SN_id_camellia256_wrap "id-camellia256-wrap" +#define NID_id_camellia256_wrap 909 +#define OBJ_id_camellia256_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,4L + +#define OBJ_ntt_ds 0L,3L,4401L,5L + +#define OBJ_camellia OBJ_ntt_ds,3L,1L,9L + +#define SN_camellia_128_ecb "CAMELLIA-128-ECB" +#define LN_camellia_128_ecb "camellia-128-ecb" +#define NID_camellia_128_ecb 754 +#define OBJ_camellia_128_ecb OBJ_camellia,1L + +#define SN_camellia_128_ofb128 "CAMELLIA-128-OFB" +#define LN_camellia_128_ofb128 "camellia-128-ofb" +#define NID_camellia_128_ofb128 766 +#define OBJ_camellia_128_ofb128 OBJ_camellia,3L + +#define SN_camellia_128_cfb128 "CAMELLIA-128-CFB" +#define LN_camellia_128_cfb128 "camellia-128-cfb" +#define NID_camellia_128_cfb128 757 +#define OBJ_camellia_128_cfb128 OBJ_camellia,4L + +#define SN_camellia_192_ecb "CAMELLIA-192-ECB" +#define LN_camellia_192_ecb "camellia-192-ecb" +#define NID_camellia_192_ecb 755 +#define OBJ_camellia_192_ecb OBJ_camellia,21L + +#define SN_camellia_192_ofb128 "CAMELLIA-192-OFB" +#define LN_camellia_192_ofb128 "camellia-192-ofb" +#define NID_camellia_192_ofb128 767 +#define OBJ_camellia_192_ofb128 OBJ_camellia,23L + +#define SN_camellia_192_cfb128 "CAMELLIA-192-CFB" +#define LN_camellia_192_cfb128 "camellia-192-cfb" +#define NID_camellia_192_cfb128 758 +#define OBJ_camellia_192_cfb128 OBJ_camellia,24L + +#define SN_camellia_256_ecb "CAMELLIA-256-ECB" +#define LN_camellia_256_ecb "camellia-256-ecb" +#define NID_camellia_256_ecb 756 +#define OBJ_camellia_256_ecb OBJ_camellia,41L + +#define SN_camellia_256_ofb128 "CAMELLIA-256-OFB" +#define LN_camellia_256_ofb128 "camellia-256-ofb" +#define NID_camellia_256_ofb128 768 +#define OBJ_camellia_256_ofb128 OBJ_camellia,43L + +#define SN_camellia_256_cfb128 "CAMELLIA-256-CFB" +#define LN_camellia_256_cfb128 "camellia-256-cfb" +#define NID_camellia_256_cfb128 759 +#define OBJ_camellia_256_cfb128 OBJ_camellia,44L + +#define SN_camellia_128_cfb1 "CAMELLIA-128-CFB1" +#define LN_camellia_128_cfb1 "camellia-128-cfb1" +#define NID_camellia_128_cfb1 760 + +#define SN_camellia_192_cfb1 "CAMELLIA-192-CFB1" +#define LN_camellia_192_cfb1 "camellia-192-cfb1" +#define NID_camellia_192_cfb1 761 + +#define SN_camellia_256_cfb1 "CAMELLIA-256-CFB1" +#define LN_camellia_256_cfb1 "camellia-256-cfb1" +#define NID_camellia_256_cfb1 762 + +#define SN_camellia_128_cfb8 "CAMELLIA-128-CFB8" +#define LN_camellia_128_cfb8 "camellia-128-cfb8" +#define NID_camellia_128_cfb8 763 + +#define SN_camellia_192_cfb8 "CAMELLIA-192-CFB8" +#define LN_camellia_192_cfb8 "camellia-192-cfb8" +#define NID_camellia_192_cfb8 764 + +#define SN_camellia_256_cfb8 "CAMELLIA-256-CFB8" +#define LN_camellia_256_cfb8 "camellia-256-cfb8" +#define NID_camellia_256_cfb8 765 + +#define SN_kisa "KISA" +#define LN_kisa "kisa" +#define NID_kisa 773 +#define OBJ_kisa OBJ_member_body,410L,200004L + +#define SN_seed_ecb "SEED-ECB" +#define LN_seed_ecb "seed-ecb" +#define NID_seed_ecb 776 +#define OBJ_seed_ecb OBJ_kisa,1L,3L + +#define SN_seed_cbc "SEED-CBC" +#define LN_seed_cbc "seed-cbc" +#define NID_seed_cbc 777 +#define OBJ_seed_cbc OBJ_kisa,1L,4L + +#define SN_seed_cfb128 "SEED-CFB" +#define LN_seed_cfb128 "seed-cfb" +#define NID_seed_cfb128 779 +#define OBJ_seed_cfb128 OBJ_kisa,1L,5L + +#define SN_seed_ofb128 "SEED-OFB" +#define LN_seed_ofb128 "seed-ofb" +#define NID_seed_ofb128 778 +#define OBJ_seed_ofb128 OBJ_kisa,1L,6L + +#define SN_hmac "HMAC" +#define LN_hmac "hmac" +#define NID_hmac 855 + +#define SN_cmac "CMAC" +#define LN_cmac "cmac" +#define NID_cmac 894 + +#define SN_rc4_hmac_md5 "RC4-HMAC-MD5" +#define LN_rc4_hmac_md5 "rc4-hmac-md5" +#define NID_rc4_hmac_md5 915 + +#define SN_aes_128_cbc_hmac_sha1 "AES-128-CBC-HMAC-SHA1" +#define LN_aes_128_cbc_hmac_sha1 "aes-128-cbc-hmac-sha1" +#define NID_aes_128_cbc_hmac_sha1 916 + +#define SN_aes_192_cbc_hmac_sha1 "AES-192-CBC-HMAC-SHA1" +#define LN_aes_192_cbc_hmac_sha1 "aes-192-cbc-hmac-sha1" +#define NID_aes_192_cbc_hmac_sha1 917 + +#define SN_aes_256_cbc_hmac_sha1 "AES-256-CBC-HMAC-SHA1" +#define LN_aes_256_cbc_hmac_sha1 "aes-256-cbc-hmac-sha1" +#define NID_aes_256_cbc_hmac_sha1 918 + +#define SN_aes_128_cbc_hmac_sha256 "AES-128-CBC-HMAC-SHA256" +#define LN_aes_128_cbc_hmac_sha256 "aes-128-cbc-hmac-sha256" +#define NID_aes_128_cbc_hmac_sha256 948 + +#define SN_aes_192_cbc_hmac_sha256 "AES-192-CBC-HMAC-SHA256" +#define LN_aes_192_cbc_hmac_sha256 "aes-192-cbc-hmac-sha256" +#define NID_aes_192_cbc_hmac_sha256 949 + +#define SN_aes_256_cbc_hmac_sha256 "AES-256-CBC-HMAC-SHA256" +#define LN_aes_256_cbc_hmac_sha256 "aes-256-cbc-hmac-sha256" +#define NID_aes_256_cbc_hmac_sha256 950 + +#define SN_dhpublicnumber "dhpublicnumber" +#define LN_dhpublicnumber "X9.42 DH" +#define NID_dhpublicnumber 920 +#define OBJ_dhpublicnumber OBJ_ISO_US,10046L,2L,1L + +#define SN_brainpoolP160r1 "brainpoolP160r1" +#define NID_brainpoolP160r1 921 +#define OBJ_brainpoolP160r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,1L + +#define SN_brainpoolP160t1 "brainpoolP160t1" +#define NID_brainpoolP160t1 922 +#define OBJ_brainpoolP160t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,2L + +#define SN_brainpoolP192r1 "brainpoolP192r1" +#define NID_brainpoolP192r1 923 +#define OBJ_brainpoolP192r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,3L + +#define SN_brainpoolP192t1 "brainpoolP192t1" +#define NID_brainpoolP192t1 924 +#define OBJ_brainpoolP192t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,4L + +#define SN_brainpoolP224r1 "brainpoolP224r1" +#define NID_brainpoolP224r1 925 +#define OBJ_brainpoolP224r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,5L + +#define SN_brainpoolP224t1 "brainpoolP224t1" +#define NID_brainpoolP224t1 926 +#define OBJ_brainpoolP224t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,6L + +#define SN_brainpoolP256r1 "brainpoolP256r1" +#define NID_brainpoolP256r1 927 +#define OBJ_brainpoolP256r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,7L + +#define SN_brainpoolP256t1 "brainpoolP256t1" +#define NID_brainpoolP256t1 928 +#define OBJ_brainpoolP256t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,8L + +#define SN_brainpoolP320r1 "brainpoolP320r1" +#define NID_brainpoolP320r1 929 +#define OBJ_brainpoolP320r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,9L + +#define SN_brainpoolP320t1 "brainpoolP320t1" +#define NID_brainpoolP320t1 930 +#define OBJ_brainpoolP320t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,10L + +#define SN_brainpoolP384r1 "brainpoolP384r1" +#define NID_brainpoolP384r1 931 +#define OBJ_brainpoolP384r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,11L + +#define SN_brainpoolP384t1 "brainpoolP384t1" +#define NID_brainpoolP384t1 932 +#define OBJ_brainpoolP384t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,12L + +#define SN_brainpoolP512r1 "brainpoolP512r1" +#define NID_brainpoolP512r1 933 +#define OBJ_brainpoolP512r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,13L + +#define SN_brainpoolP512t1 "brainpoolP512t1" +#define NID_brainpoolP512t1 934 +#define OBJ_brainpoolP512t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,14L + +#define OBJ_x9_63_scheme 1L,3L,133L,16L,840L,63L,0L + +#define OBJ_secg_scheme OBJ_certicom_arc,1L + +#define SN_dhSinglePass_stdDH_sha1kdf_scheme "dhSinglePass-stdDH-sha1kdf-scheme" +#define NID_dhSinglePass_stdDH_sha1kdf_scheme 936 +#define OBJ_dhSinglePass_stdDH_sha1kdf_scheme OBJ_x9_63_scheme,2L + +#define SN_dhSinglePass_stdDH_sha224kdf_scheme "dhSinglePass-stdDH-sha224kdf-scheme" +#define NID_dhSinglePass_stdDH_sha224kdf_scheme 937 +#define OBJ_dhSinglePass_stdDH_sha224kdf_scheme OBJ_secg_scheme,11L,0L + +#define SN_dhSinglePass_stdDH_sha256kdf_scheme "dhSinglePass-stdDH-sha256kdf-scheme" +#define NID_dhSinglePass_stdDH_sha256kdf_scheme 938 +#define OBJ_dhSinglePass_stdDH_sha256kdf_scheme OBJ_secg_scheme,11L,1L + +#define SN_dhSinglePass_stdDH_sha384kdf_scheme "dhSinglePass-stdDH-sha384kdf-scheme" +#define NID_dhSinglePass_stdDH_sha384kdf_scheme 939 +#define OBJ_dhSinglePass_stdDH_sha384kdf_scheme OBJ_secg_scheme,11L,2L + +#define SN_dhSinglePass_stdDH_sha512kdf_scheme "dhSinglePass-stdDH-sha512kdf-scheme" +#define NID_dhSinglePass_stdDH_sha512kdf_scheme 940 +#define OBJ_dhSinglePass_stdDH_sha512kdf_scheme OBJ_secg_scheme,11L,3L + +#define SN_dhSinglePass_cofactorDH_sha1kdf_scheme "dhSinglePass-cofactorDH-sha1kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha1kdf_scheme 941 +#define OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme OBJ_x9_63_scheme,3L + +#define SN_dhSinglePass_cofactorDH_sha224kdf_scheme "dhSinglePass-cofactorDH-sha224kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha224kdf_scheme 942 +#define OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme OBJ_secg_scheme,14L,0L + +#define SN_dhSinglePass_cofactorDH_sha256kdf_scheme "dhSinglePass-cofactorDH-sha256kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha256kdf_scheme 943 +#define OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme OBJ_secg_scheme,14L,1L + +#define SN_dhSinglePass_cofactorDH_sha384kdf_scheme "dhSinglePass-cofactorDH-sha384kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha384kdf_scheme 944 +#define OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme OBJ_secg_scheme,14L,2L + +#define SN_dhSinglePass_cofactorDH_sha512kdf_scheme "dhSinglePass-cofactorDH-sha512kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha512kdf_scheme 945 +#define OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme OBJ_secg_scheme,14L,3L + +#define SN_dh_std_kdf "dh-std-kdf" +#define NID_dh_std_kdf 946 + +#define SN_dh_cofactor_kdf "dh-cofactor-kdf" +#define NID_dh_cofactor_kdf 947 + +#define SN_ct_precert_scts "ct_precert_scts" +#define LN_ct_precert_scts "CT Precertificate SCTs" +#define NID_ct_precert_scts 951 +#define OBJ_ct_precert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,2L + +#define SN_ct_precert_poison "ct_precert_poison" +#define LN_ct_precert_poison "CT Precertificate Poison" +#define NID_ct_precert_poison 952 +#define OBJ_ct_precert_poison 1L,3L,6L,1L,4L,1L,11129L,2L,4L,3L + +#define SN_ct_precert_signer "ct_precert_signer" +#define LN_ct_precert_signer "CT Precertificate Signer" +#define NID_ct_precert_signer 953 +#define OBJ_ct_precert_signer 1L,3L,6L,1L,4L,1L,11129L,2L,4L,4L + +#define SN_ct_cert_scts "ct_cert_scts" +#define LN_ct_cert_scts "CT Certificate SCTs" +#define NID_ct_cert_scts 954 +#define OBJ_ct_cert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,5L + +#define SN_jurisdictionLocalityName "jurisdictionL" +#define LN_jurisdictionLocalityName "jurisdictionLocalityName" +#define NID_jurisdictionLocalityName 955 +#define OBJ_jurisdictionLocalityName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,1L + +#define SN_jurisdictionStateOrProvinceName "jurisdictionST" +#define LN_jurisdictionStateOrProvinceName "jurisdictionStateOrProvinceName" +#define NID_jurisdictionStateOrProvinceName 956 +#define OBJ_jurisdictionStateOrProvinceName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,2L + +#define SN_jurisdictionCountryName "jurisdictionC" +#define LN_jurisdictionCountryName "jurisdictionCountryName" +#define NID_jurisdictionCountryName 957 +#define OBJ_jurisdictionCountryName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L diff --git a/Sources/OpenSSL/include/openssl/objects.h b/Sources/OpenSSL/include/openssl/objects.h new file mode 100644 index 0000000000..3f31429b74 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/objects.h @@ -0,0 +1,1143 @@ +/* crypto/objects/objects.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_OBJECTS_H +# define HEADER_OBJECTS_H + +# define USE_OBJ_MAC + +# ifdef USE_OBJ_MAC +# include "obj_mac.h" +# 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 "bio.h" +# include "asn1.h" + +# define OBJ_NAME_TYPE_UNDEF 0x00 +# define OBJ_NAME_TYPE_MD_METH 0x01 +# define OBJ_NAME_TYPE_CIPHER_METH 0x02 +# define OBJ_NAME_TYPE_PKEY_METH 0x03 +# define OBJ_NAME_TYPE_COMP_METH 0x04 +# define OBJ_NAME_TYPE_NUM 0x05 + +# define OBJ_NAME_ALIAS 0x8000 + +# define OBJ_BSEARCH_VALUE_ON_NOMATCH 0x01 +# define OBJ_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct obj_name_st { + int type; + int alias; + const char *name; + const char *data; +} OBJ_NAME; + +# define OBJ_create_and_add_object(a,b,c) OBJ_create(a,b,c) + +int OBJ_NAME_init(void); +int OBJ_NAME_new_index(unsigned long (*hash_func) (const char *), + int (*cmp_func) (const char *, const char *), + void (*free_func) (const char *, int, const char *)); +const char *OBJ_NAME_get(const char *name, int type); +int OBJ_NAME_add(const char *name, int type, const char *data); +int OBJ_NAME_remove(const char *name, int type); +void OBJ_NAME_cleanup(int type); /* -1 for everything */ +void OBJ_NAME_do_all(int type, void (*fn) (const OBJ_NAME *, void *arg), + void *arg); +void OBJ_NAME_do_all_sorted(int type, + void (*fn) (const OBJ_NAME *, void *arg), + void *arg); + +ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o); +ASN1_OBJECT *OBJ_nid2obj(int n); +const char *OBJ_nid2ln(int n); +const char *OBJ_nid2sn(int n); +int OBJ_obj2nid(const ASN1_OBJECT *o); +ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name); +int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name); +int OBJ_txt2nid(const char *s); +int OBJ_ln2nid(const char *s); +int OBJ_sn2nid(const char *s); +int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b); +const void *OBJ_bsearch_(const void *key, const void *base, int num, int size, + int (*cmp) (const void *, const void *)); +const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, + int size, + int (*cmp) (const void *, const void *), + int flags); + +# define _DECLARE_OBJ_BSEARCH_CMP_FN(scope, type1, type2, nm) \ + static int nm##_cmp_BSEARCH_CMP_FN(const void *, const void *); \ + static int nm##_cmp(type1 const *, type2 const *); \ + scope type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) + +# define DECLARE_OBJ_BSEARCH_CMP_FN(type1, type2, cmp) \ + _DECLARE_OBJ_BSEARCH_CMP_FN(static, type1, type2, cmp) +# define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ + type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) + +/*- + * Unsolved problem: if a type is actually a pointer type, like + * nid_triple is, then its impossible to get a const where you need + * it. Consider: + * + * typedef int nid_triple[3]; + * const void *a_; + * const nid_triple const *a = a_; + * + * The assignement discards a const because what you really want is: + * + * const int const * const *a = a_; + * + * But if you do that, you lose the fact that a is an array of 3 ints, + * which breaks comparison functions. + * + * Thus we end up having to cast, sadly, or unpack the + * declarations. Or, as I finally did in this case, delcare nid_triple + * to be a struct, which it should have been in the first place. + * + * Ben, August 2008. + * + * Also, strictly speaking not all types need be const, but handling + * the non-constness means a lot of complication, and in practice + * comparison routines do always not touch their arguments. + */ + +# define IMPLEMENT_OBJ_BSEARCH_CMP_FN(type1, type2, nm) \ + static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ + { \ + type1 const *a = a_; \ + type2 const *b = b_; \ + return nm##_cmp(a,b); \ + } \ + static type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ + { \ + return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ + nm##_cmp_BSEARCH_CMP_FN); \ + } \ + extern void dummy_prototype(void) + +# define IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ + static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ + { \ + type1 const *a = a_; \ + type2 const *b = b_; \ + return nm##_cmp(a,b); \ + } \ + type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ + { \ + return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ + nm##_cmp_BSEARCH_CMP_FN); \ + } \ + extern void dummy_prototype(void) + +# define OBJ_bsearch(type1,key,type2,base,num,cmp) \ + ((type2 *)OBJ_bsearch_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ + num,sizeof(type2), \ + ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ + (void)CHECKED_PTR_OF(type2,cmp##_type_2), \ + cmp##_BSEARCH_CMP_FN))) + +# define OBJ_bsearch_ex(type1,key,type2,base,num,cmp,flags) \ + ((type2 *)OBJ_bsearch_ex_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ + num,sizeof(type2), \ + ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ + (void)type_2=CHECKED_PTR_OF(type2,cmp##_type_2), \ + cmp##_BSEARCH_CMP_FN)),flags) + +int OBJ_new_nid(int num); +int OBJ_add_object(const ASN1_OBJECT *obj); +int OBJ_create(const char *oid, const char *sn, const char *ln); +void OBJ_cleanup(void); +int OBJ_create_objects(BIO *in); + +int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid); +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); + +extern int obj_cleanup_defer; +void check_defer(int nid); + +/* 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. + */ +void 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_MALLOC_FAILURE 100 +# define OBJ_R_UNKNOWN_NID 101 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/ocsp.h b/Sources/OpenSSL/include/openssl/ocsp.h new file mode 100644 index 0000000000..f0b98d34c2 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/ocsp.h @@ -0,0 +1,637 @@ +/* ocsp.h */ +/* + * Written by Tom Titchener for the OpenSSL + * project. + */ + +/* + * History: This file was transfered to Richard Levitte from CertCo by Kathy + * Weinhold in mid-spring 2000 to be included in OpenSSL or released as a + * patch kit. + */ + +/* ==================================================================== + * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_OCSP_H +# define HEADER_OCSP_H + +# include "ossl_typ.h" +# include "x509.h" +# include "x509v3.h" +# include "safestack.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Various flags and values */ + +# define OCSP_DEFAULT_NONCE_LENGTH 16 + +# define OCSP_NOCERTS 0x1 +# define OCSP_NOINTERN 0x2 +# define OCSP_NOSIGS 0x4 +# define OCSP_NOCHAIN 0x8 +# define OCSP_NOVERIFY 0x10 +# define OCSP_NOEXPLICIT 0x20 +# define OCSP_NOCASIGN 0x40 +# define OCSP_NODELEGATED 0x80 +# define OCSP_NOCHECKS 0x100 +# define OCSP_TRUSTOTHER 0x200 +# define OCSP_RESPID_KEY 0x400 +# define OCSP_NOTIME 0x800 + +/*- CertID ::= SEQUENCE { + * hashAlgorithm AlgorithmIdentifier, + * issuerNameHash OCTET STRING, -- Hash of Issuer's DN + * issuerKeyHash OCTET STRING, -- Hash of Issuers public key (excluding the tag & length fields) + * serialNumber CertificateSerialNumber } + */ +typedef struct ocsp_cert_id_st { + X509_ALGOR *hashAlgorithm; + ASN1_OCTET_STRING *issuerNameHash; + ASN1_OCTET_STRING *issuerKeyHash; + ASN1_INTEGER *serialNumber; +} OCSP_CERTID; + +DECLARE_STACK_OF(OCSP_CERTID) + +/*- Request ::= SEQUENCE { + * reqCert CertID, + * singleRequestExtensions [0] EXPLICIT Extensions OPTIONAL } + */ +typedef struct ocsp_one_request_st { + OCSP_CERTID *reqCert; + STACK_OF(X509_EXTENSION) *singleRequestExtensions; +} OCSP_ONEREQ; + +DECLARE_STACK_OF(OCSP_ONEREQ) +DECLARE_ASN1_SET_OF(OCSP_ONEREQ) + +/*- TBSRequest ::= SEQUENCE { + * version [0] EXPLICIT Version DEFAULT v1, + * requestorName [1] EXPLICIT GeneralName OPTIONAL, + * requestList SEQUENCE OF Request, + * requestExtensions [2] EXPLICIT Extensions OPTIONAL } + */ +typedef struct ocsp_req_info_st { + ASN1_INTEGER *version; + GENERAL_NAME *requestorName; + STACK_OF(OCSP_ONEREQ) *requestList; + STACK_OF(X509_EXTENSION) *requestExtensions; +} OCSP_REQINFO; + +/*- Signature ::= SEQUENCE { + * signatureAlgorithm AlgorithmIdentifier, + * signature BIT STRING, + * certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL } + */ +typedef struct ocsp_signature_st { + X509_ALGOR *signatureAlgorithm; + ASN1_BIT_STRING *signature; + STACK_OF(X509) *certs; +} OCSP_SIGNATURE; + +/*- OCSPRequest ::= SEQUENCE { + * tbsRequest TBSRequest, + * optionalSignature [0] EXPLICIT Signature OPTIONAL } + */ +typedef struct ocsp_request_st { + OCSP_REQINFO *tbsRequest; + OCSP_SIGNATURE *optionalSignature; /* OPTIONAL */ +} OCSP_REQUEST; + +/*- OCSPResponseStatus ::= ENUMERATED { + * successful (0), --Response has valid confirmations + * malformedRequest (1), --Illegal confirmation request + * internalError (2), --Internal error in issuer + * tryLater (3), --Try again later + * --(4) is not used + * sigRequired (5), --Must sign the request + * unauthorized (6) --Request unauthorized + * } + */ +# define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 +# define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 +# define OCSP_RESPONSE_STATUS_INTERNALERROR 2 +# define OCSP_RESPONSE_STATUS_TRYLATER 3 +# define OCSP_RESPONSE_STATUS_SIGREQUIRED 5 +# define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6 + +/*- ResponseBytes ::= SEQUENCE { + * responseType OBJECT IDENTIFIER, + * response OCTET STRING } + */ +typedef struct ocsp_resp_bytes_st { + ASN1_OBJECT *responseType; + ASN1_OCTET_STRING *response; +} OCSP_RESPBYTES; + +/*- OCSPResponse ::= SEQUENCE { + * responseStatus OCSPResponseStatus, + * responseBytes [0] EXPLICIT ResponseBytes OPTIONAL } + */ +struct ocsp_response_st { + ASN1_ENUMERATED *responseStatus; + OCSP_RESPBYTES *responseBytes; +}; + +/*- ResponderID ::= CHOICE { + * byName [1] Name, + * byKey [2] KeyHash } + */ +# define V_OCSP_RESPID_NAME 0 +# define V_OCSP_RESPID_KEY 1 +struct ocsp_responder_id_st { + int type; + union { + X509_NAME *byName; + ASN1_OCTET_STRING *byKey; + } value; +}; + +DECLARE_STACK_OF(OCSP_RESPID) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) + +/*- KeyHash ::= OCTET STRING --SHA-1 hash of responder's public key + * --(excluding the tag and length fields) + */ + +/*- RevokedInfo ::= SEQUENCE { + * revocationTime GeneralizedTime, + * revocationReason [0] EXPLICIT CRLReason OPTIONAL } + */ +typedef struct ocsp_revoked_info_st { + ASN1_GENERALIZEDTIME *revocationTime; + ASN1_ENUMERATED *revocationReason; +} OCSP_REVOKEDINFO; + +/*- CertStatus ::= CHOICE { + * good [0] IMPLICIT NULL, + * revoked [1] IMPLICIT RevokedInfo, + * unknown [2] IMPLICIT UnknownInfo } + */ +# define V_OCSP_CERTSTATUS_GOOD 0 +# define V_OCSP_CERTSTATUS_REVOKED 1 +# define V_OCSP_CERTSTATUS_UNKNOWN 2 +typedef struct ocsp_cert_status_st { + int type; + union { + ASN1_NULL *good; + OCSP_REVOKEDINFO *revoked; + ASN1_NULL *unknown; + } value; +} OCSP_CERTSTATUS; + +/*- SingleResponse ::= SEQUENCE { + * certID CertID, + * certStatus CertStatus, + * thisUpdate GeneralizedTime, + * nextUpdate [0] EXPLICIT GeneralizedTime OPTIONAL, + * singleExtensions [1] EXPLICIT Extensions OPTIONAL } + */ +typedef struct ocsp_single_response_st { + OCSP_CERTID *certId; + OCSP_CERTSTATUS *certStatus; + ASN1_GENERALIZEDTIME *thisUpdate; + ASN1_GENERALIZEDTIME *nextUpdate; + STACK_OF(X509_EXTENSION) *singleExtensions; +} OCSP_SINGLERESP; + +DECLARE_STACK_OF(OCSP_SINGLERESP) +DECLARE_ASN1_SET_OF(OCSP_SINGLERESP) + +/*- ResponseData ::= SEQUENCE { + * version [0] EXPLICIT Version DEFAULT v1, + * responderID ResponderID, + * producedAt GeneralizedTime, + * responses SEQUENCE OF SingleResponse, + * responseExtensions [1] EXPLICIT Extensions OPTIONAL } + */ +typedef struct ocsp_response_data_st { + ASN1_INTEGER *version; + OCSP_RESPID *responderId; + ASN1_GENERALIZEDTIME *producedAt; + STACK_OF(OCSP_SINGLERESP) *responses; + STACK_OF(X509_EXTENSION) *responseExtensions; +} OCSP_RESPDATA; + +/*- BasicOCSPResponse ::= SEQUENCE { + * tbsResponseData ResponseData, + * signatureAlgorithm AlgorithmIdentifier, + * signature BIT STRING, + * certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL } + */ + /* + * Note 1: The value for "signature" is specified in the OCSP rfc2560 as + * follows: "The value for the signature SHALL be computed on the hash of + * the DER encoding ResponseData." This means that you must hash the + * DER-encoded tbsResponseData, and then run it through a crypto-signing + * function, which will (at least w/RSA) do a hash-'n'-private-encrypt + * operation. This seems a bit odd, but that's the spec. Also note that + * the data structures do not leave anywhere to independently specify the + * algorithm used for the initial hash. So, we look at the + * signature-specification algorithm, and try to do something intelligent. + * -- Kathy Weinhold, CertCo + */ + /* + * Note 2: It seems that the mentioned passage from RFC 2560 (section + * 4.2.1) is open for interpretation. I've done tests against another + * responder, and found that it doesn't do the double hashing that the RFC + * seems to say one should. Therefore, all relevant functions take a flag + * saying which variant should be used. -- Richard Levitte, OpenSSL team + * and CeloCom + */ +typedef struct ocsp_basic_response_st { + OCSP_RESPDATA *tbsResponseData; + X509_ALGOR *signatureAlgorithm; + ASN1_BIT_STRING *signature; + STACK_OF(X509) *certs; +} OCSP_BASICRESP; + +/*- + * CRLReason ::= ENUMERATED { + * unspecified (0), + * keyCompromise (1), + * cACompromise (2), + * affiliationChanged (3), + * superseded (4), + * cessationOfOperation (5), + * certificateHold (6), + * removeFromCRL (8) } + */ +# define OCSP_REVOKED_STATUS_NOSTATUS -1 +# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 +# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 +# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 +# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 +# define OCSP_REVOKED_STATUS_SUPERSEDED 4 +# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 +# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 +# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 + +/*- + * CrlID ::= SEQUENCE { + * crlUrl [0] EXPLICIT IA5String OPTIONAL, + * crlNum [1] EXPLICIT INTEGER OPTIONAL, + * crlTime [2] EXPLICIT GeneralizedTime OPTIONAL } + */ +typedef struct ocsp_crl_id_st { + ASN1_IA5STRING *crlUrl; + ASN1_INTEGER *crlNum; + ASN1_GENERALIZEDTIME *crlTime; +} OCSP_CRLID; + +/*- + * ServiceLocator ::= SEQUENCE { + * issuer Name, + * locator AuthorityInfoAccessSyntax OPTIONAL } + */ +typedef struct ocsp_service_locator_st { + X509_NAME *issuer; + STACK_OF(ACCESS_DESCRIPTION) *locator; +} OCSP_SERVICELOC; + +# define PEM_STRING_OCSP_REQUEST "OCSP REQUEST" +# define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE" + +# define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p) + +# 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) + +# 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) + +# 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) + +# define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o) + +# define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o) + +# define OCSP_REQUEST_sign(o,pkey,md) \ + ASN1_item_sign(ASN1_ITEM_rptr(OCSP_REQINFO),\ + o->optionalSignature->signatureAlgorithm,NULL,\ + o->optionalSignature->signature,o->tbsRequest,pkey,md) + +# define OCSP_BASICRESP_sign(o,pkey,md,d) \ + ASN1_item_sign(ASN1_ITEM_rptr(OCSP_RESPDATA),o->signatureAlgorithm,NULL,\ + o->signature,o->tbsResponseData,pkey,md) + +# define OCSP_REQUEST_verify(a,r) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_REQINFO),\ + a->optionalSignature->signatureAlgorithm,\ + a->optionalSignature->signature,a->tbsRequest,r) + +# define OCSP_BASICRESP_verify(a,r,d) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_RESPDATA),\ + a->signatureAlgorithm,a->signature,a->tbsResponseData,r) + +# define ASN1_BIT_STRING_digest(data,type,md,len) \ + ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) + +# define OCSP_CERTSTATUS_dup(cs)\ + (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\ + (char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs)) + +OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id); + +OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); +OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req, + int maxline); +int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx); +int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); +OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline); +void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); +void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); +int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, + ASN1_VALUE *val); +int OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, ASN1_VALUE **pval, + const ASN1_ITEM *it); +BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx); +int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, + ASN1_VALUE *val); +int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path); +int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req); +int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, + const char *name, const char *value); + +OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, X509 *subject, X509 *issuer); + +OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, + X509_NAME *issuerName, + ASN1_BIT_STRING *issuerKey, + ASN1_INTEGER *serialNumber); + +OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid); + +int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len); +int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); +int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); +int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); + +int OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm); +int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); + +int OCSP_request_sign(OCSP_REQUEST *req, + X509 *signer, + EVP_PKEY *key, + const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags); + +int OCSP_response_status(OCSP_RESPONSE *resp); +OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp); + +int OCSP_resp_count(OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); +int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last); +int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status, + int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, + ASN1_GENERALIZEDTIME *nextupd, long sec, long maxsec); + +int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, + X509_STORE *store, unsigned long flags); + +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_request_onereq_count(OCSP_REQUEST *req); +OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i); +OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one); +int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, + ASN1_OCTET_STRING **pikeyHash, + ASN1_INTEGER **pserial, OCSP_CERTID *cid); +int OCSP_request_is_signed(OCSP_REQUEST *req); +OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp, + OCSP_CERTID *cid, + int status, int reason, + ASN1_TIME *revtime, + ASN1_TIME *thisupd, + ASN1_TIME *nextupd); +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); + +X509_EXTENSION *OCSP_crlID_new(char *url, long *n, char *tim); + +X509_EXTENSION *OCSP_accept_responses_new(char **oids); + +X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); + +X509_EXTENSION *OCSP_url_svcloc_new(X509_NAME *issuer, char **urls); + +int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); +int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); +int OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, ASN1_OBJECT *obj, + int lastpos); +int OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos); +X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc); +X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc); +void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, + int *idx); +int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc); + +int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x); +int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos); +int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, ASN1_OBJECT *obj, int lastpos); +int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos); +X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc); +X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc); +void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx); +int OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc); + +int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x); +int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos); +int OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, ASN1_OBJECT *obj, + int lastpos); +int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc); +X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc); +void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, + int *idx); +int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc); + +int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x); +int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos); +int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, ASN1_OBJECT *obj, + int lastpos); +int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc); +X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc); +void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, + int *idx); +int OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc); + +DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS) +DECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES) +DECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTID) +DECLARE_ASN1_FUNCTIONS(OCSP_REQUEST) +DECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE) +DECLARE_ASN1_FUNCTIONS(OCSP_REQINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_CRLID) +DECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC) + +const char *OCSP_response_status_str(long s); +const char *OCSP_cert_status_str(long s); +const char *OCSP_crl_reason_str(long s); + +int OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags); +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. + */ +void ERR_load_OCSP_strings(void); + +/* Error codes for the OCSP functions. */ + +/* Function codes. */ +# define OCSP_F_ASN1_STRING_ENCODE 100 +# 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_OCSP_SENDREQ_BIO 112 +# define OCSP_F_OCSP_SENDREQ_NBIO 117 +# define OCSP_F_PARSE_HTTP_LINE1 118 +# define OCSP_F_REQUEST_VERIFY 113 + +/* Reason codes. */ +# define OCSP_R_BAD_DATA 100 +# 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_CONTENT 106 +# define OCSP_R_NO_PUBLIC_KEY 107 +# define OCSP_R_NO_RESPONSE_DATA 108 +# define OCSP_R_NO_REVOKED_TIME 109 +# 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_READ_ERROR 113 +# define OCSP_R_SERVER_RESPONSE_ERROR 114 +# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 +# define OCSP_R_SERVER_WRITE_ERROR 116 +# 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 +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/opensslconf.h b/Sources/OpenSSL/include/openssl/opensslconf.h new file mode 100644 index 0000000000..c10a87ddbd --- /dev/null +++ b/Sources/OpenSSL/include/openssl/opensslconf.h @@ -0,0 +1,261 @@ +/* opensslconf.h */ +/* WARNING: Generated automatically from opensslconf.h.in by Configure. */ + +#ifdef __cplusplus +extern "C" { +#endif +/* OpenSSL was configured with the following options: */ +#ifndef OPENSSL_SYSNAME_MACOSX +# define OPENSSL_SYSNAME_MACOSX +#endif +#ifndef OPENSSL_DOING_MAKEDEPEND + + +#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +#endif +#ifndef OPENSSL_NO_GMP +# define OPENSSL_NO_GMP +#endif +#ifndef OPENSSL_NO_JPAKE +# define OPENSSL_NO_JPAKE +#endif +#ifndef OPENSSL_NO_KRB5 +# define OPENSSL_NO_KRB5 +#endif +#ifndef OPENSSL_NO_LIBUNBOUND +# define OPENSSL_NO_LIBUNBOUND +#endif +#ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +#endif +#ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +#endif +#ifndef OPENSSL_NO_RFC3779 +# define OPENSSL_NO_RFC3779 +#endif +#ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +#endif +#ifndef OPENSSL_NO_SSL_TRACE +# define OPENSSL_NO_SSL_TRACE +#endif +#ifndef OPENSSL_NO_STORE +# define OPENSSL_NO_STORE +#endif +#ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +#endif + +#endif /* OPENSSL_DOING_MAKEDEPEND */ + +#ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +#endif +#ifndef OPENSSL_NO_DYNAMIC_ENGINE +# define OPENSSL_NO_DYNAMIC_ENGINE +#endif + +/* The OPENSSL_NO_* macros are also defined as NO_* if the application + asks for it. This is a transient feature that is provided for those + who haven't had the time to do the appropriate changes in their + applications. */ +#ifdef OPENSSL_ALGORITHM_DEFINES +# if defined(OPENSSL_NO_EC_NISTP_64_GCC_128) && !defined(NO_EC_NISTP_64_GCC_128) +# define NO_EC_NISTP_64_GCC_128 +# endif +# if defined(OPENSSL_NO_GMP) && !defined(NO_GMP) +# define NO_GMP +# endif +# if defined(OPENSSL_NO_JPAKE) && !defined(NO_JPAKE) +# define NO_JPAKE +# endif +# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5) +# define NO_KRB5 +# endif +# if defined(OPENSSL_NO_LIBUNBOUND) && !defined(NO_LIBUNBOUND) +# define NO_LIBUNBOUND +# endif +# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2) +# define NO_MD2 +# endif +# if defined(OPENSSL_NO_RC5) && !defined(NO_RC5) +# define NO_RC5 +# endif +# if defined(OPENSSL_NO_RFC3779) && !defined(NO_RFC3779) +# define NO_RFC3779 +# endif +# if defined(OPENSSL_NO_SCTP) && !defined(NO_SCTP) +# define NO_SCTP +# endif +# if defined(OPENSSL_NO_SSL_TRACE) && !defined(NO_SSL_TRACE) +# define NO_SSL_TRACE +# endif +# if defined(OPENSSL_NO_STORE) && !defined(NO_STORE) +# define NO_STORE +# endif +# if defined(OPENSSL_NO_UNIT_TEST) && !defined(NO_UNIT_TEST) +# define NO_UNIT_TEST +# endif +#endif + +#define OPENSSL_CPUID_OBJ + +/* crypto/opensslconf.h.in */ + +/* Generate 80386 code? */ +#undef I386_ONLY + +#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */ +#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR) +#define ENGINESDIR "/usr/local/ssl/lib/engines" +#define OPENSSLDIR "/usr/local/ssl" +#endif +#endif + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#undef OPENSSL_EXPORT_VAR_AS_FUNCTION + +#if defined(HEADER_IDEA_H) && !defined(IDEA_INT) +#define IDEA_INT unsigned int +#endif + +#if defined(HEADER_MD2_H) && !defined(MD2_INT) +#define MD2_INT unsigned int +#endif + +#if defined(HEADER_RC2_H) && !defined(RC2_INT) +/* I need to put in a mod for the alpha - eay */ +#define RC2_INT unsigned int +#endif + +#if defined(HEADER_RC4_H) +#if !defined(RC4_INT) +/* using int types make the structure larger but make the code faster + * on most boxes I have tested - up to %20 faster. */ +/* + * I don't know what does "most" mean, but declaring "int" is a must on: + * - Intel P6 because partial register stalls are very expensive; + * - elder Alpha because it lacks byte load/store instructions; + */ +#define RC4_INT unsigned int +#endif +#if !defined(RC4_CHUNK) +/* + * This enables code handling data aligned at natural CPU word + * boundary. See crypto/rc4/rc4_enc.c for further details. + */ +#define RC4_CHUNK unsigned long +#endif +#endif + +#if (defined(HEADER_NEW_DES_H) || defined(HEADER_DES_H)) && !defined(DES_LONG) +/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a + * %20 speed up (longs are 8 bytes, int's are 4). */ +#ifndef DES_LONG +#define DES_LONG unsigned int +#endif +#endif + +#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H) +#define CONFIG_HEADER_BN_H +#undef BN_LLONG + +/* Should we define BN_DIV2W here? */ + +/* Only one for the following should be defined */ +#define SIXTY_FOUR_BIT_LONG +#undef SIXTY_FOUR_BIT +#undef THIRTY_TWO_BIT +#endif + +#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H) +#define CONFIG_HEADER_RC4_LOCL_H +/* if this is defined data[i] is used instead of *data, this is a %20 + * speedup on x86 */ +#undef RC4_INDEX +#endif + +#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H) +#define CONFIG_HEADER_BF_LOCL_H +#undef BF_PTR +#endif /* HEADER_BF_LOCL_H */ + +#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H) +#define CONFIG_HEADER_DES_LOCL_H +#ifndef DES_DEFAULT_OPTIONS +/* the following is tweaked from a config script, that is why it is a + * protected undef/define */ +#ifndef DES_PTR +#undef DES_PTR +#endif + +/* This helps C compiler generate the correct code for multiple functional + * units. It reduces register dependancies at the expense of 2 more + * registers */ +#ifndef DES_RISC1 +#undef DES_RISC1 +#endif + +#ifndef DES_RISC2 +#undef DES_RISC2 +#endif + +#if defined(DES_RISC1) && defined(DES_RISC2) +#error YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!! +#endif + +/* Unroll the inner loop, this sometimes helps, sometimes hinders. + * Very mucy CPU dependant */ +#ifndef DES_UNROLL +#define DES_UNROLL +#endif + +/* These default values were supplied by + * Peter Gutman + * They are only used if nothing else has been defined */ +#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL) +/* Special defines which change the way the code is built depending on the + CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find + even newer MIPS CPU's, but at the moment one size fits all for + optimization options. Older Sparc's work better with only UNROLL, but + there's no way to tell at compile time what it is you're running on */ + +#if defined( sun ) /* Newer Sparc's */ +# define DES_PTR +# define DES_RISC1 +# define DES_UNROLL +#elif defined( __ultrix ) /* Older MIPS */ +# define DES_PTR +# define DES_RISC2 +# define DES_UNROLL +#elif defined( __osf1__ ) /* Alpha */ +# define DES_PTR +# define DES_RISC2 +#elif defined ( _AIX ) /* RS6000 */ + /* Unknown */ +#elif defined( __hpux ) /* HP-PA */ + /* Unknown */ +#elif defined( __aux ) /* 68K */ + /* Unknown */ +#elif defined( __dgux ) /* 88K (but P6 in latest boxes) */ +# define DES_UNROLL +#elif defined( __sgi ) /* Newer MIPS */ +# define DES_PTR +# define DES_RISC2 +# define DES_UNROLL +#elif defined(i386) || defined(__i386__) /* x86 boxes, should be gcc */ +# define DES_PTR +# define DES_RISC1 +# define DES_UNROLL +#endif /* Systems-specific speed defines */ +#endif + +#endif /* DES_DEFAULT_OPTIONS */ +#endif /* HEADER_DES_LOCL_H */ +#ifdef __cplusplus +} +#endif diff --git a/Sources/OpenSSL/include/openssl/opensslv.h b/Sources/OpenSSL/include/openssl/opensslv.h new file mode 100644 index 0000000000..c06b13ac6b --- /dev/null +++ b/Sources/OpenSSL/include/openssl/opensslv.h @@ -0,0 +1,97 @@ +#ifndef HEADER_OPENSSLV_H +# define HEADER_OPENSSLV_H + +#ifdef __cplusplus +extern "C" { +#endif + +/*- + * Numeric release version identifier: + * MNNFFPPS: major minor fix patch status + * The status nibble has one of the values 0 for development, 1 to e for betas + * 1 to 14, and f for release. The patch level is exactly that. + * For example: + * 0.9.3-dev 0x00903000 + * 0.9.3-beta1 0x00903001 + * 0.9.3-beta2-dev 0x00903002 + * 0.9.3-beta2 0x00903002 (same as ...beta2-dev) + * 0.9.3 0x0090300f + * 0.9.3a 0x0090301f + * 0.9.4 0x0090400f + * 1.2.3z 0x102031af + * + * For continuity reasons (because 0.9.5 is already out, and is coded + * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level + * part is slightly different, by setting the highest bit. This means + * that 0.9.5a looks like this: 0x0090581f. At 0.9.6, we can start + * with 0x0090600S... + * + * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.) + * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for + * major minor fix final patch/beta) + */ +# define OPENSSL_VERSION_NUMBER 0x1000204fL +# ifdef OPENSSL_FIPS +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2d-fips 9 Jul 2015" +# else +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2d 9 Jul 2015" +# endif +# define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT + +/*- + * The macros below are to be used for shared library (.so, .dll, ...) + * versioning. That kind of versioning works a bit differently between + * operating systems. The most usual scheme is to set a major and a minor + * number, and have the runtime loader check that the major number is equal + * to what it was at application link time, while the minor number has to + * be greater or equal to what it was at application link time. With this + * scheme, the version number is usually part of the file name, like this: + * + * libcrypto.so.0.9 + * + * Some unixen also make a softlink with the major verson number only: + * + * libcrypto.so.0 + * + * On Tru64 and IRIX 6.x it works a little bit differently. There, the + * shared library version is stored in the file, and is actually a series + * of versions, separated by colons. The rightmost version present in the + * library when linking an application is stored in the application to be + * matched at run time. When the application is run, a check is done to + * see if the library version stored in the application matches any of the + * versions in the version string of the library itself. + * This version string can be constructed in any way, depending on what + * kind of matching is desired. However, to implement the same scheme as + * the one used in the other unixen, all compatible versions, from lowest + * to highest, should be part of the string. Consecutive builds would + * give the following versions strings: + * + * 3.0 + * 3.0:3.1 + * 3.0:3.1:3.2 + * 4.0 + * 4.0:4.1 + * + * Notice how version 4 is completely incompatible with version, and + * therefore give the breach you can see. + * + * There may be other schemes as well that I haven't yet discovered. + * + * So, here's the way it works here: first of all, the library version + * number doesn't need at all to match the overall OpenSSL version. + * However, it's nice and more understandable if it actually does. + * The current library version is stored in the macro SHLIB_VERSION_NUMBER, + * which is just a piece of text in the format "M.m.e" (Major, minor, edit). + * For the sake of Tru64, IRIX, and any other OS that behaves in similar ways, + * we need to keep a history of version numbers, which is done in the + * macro SHLIB_VERSION_HISTORY. The numbers are separated by colons and + * should only keep the versions that are binary compatible with the current. + */ +# define SHLIB_VERSION_HISTORY "" +# define SHLIB_VERSION_NUMBER "1.0.0" + + +#ifdef __cplusplus +} +#endif +#endif /* HEADER_OPENSSLV_H */ diff --git a/Sources/OpenSSL/include/openssl/ossl_typ.h b/Sources/OpenSSL/include/openssl/ossl_typ.h new file mode 100644 index 0000000000..43a99d194a --- /dev/null +++ b/Sources/OpenSSL/include/openssl/ossl_typ.h @@ -0,0 +1,211 @@ +/* ==================================================================== + * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_OPENSSL_TYPES_H +# define HEADER_OPENSSL_TYPES_H + +#ifdef __cplusplus +extern "C" { +#endif + +# include "e_os2.h" + +# ifdef NO_ASN1_TYPEDEFS +# define ASN1_INTEGER ASN1_STRING +# define ASN1_ENUMERATED ASN1_STRING +# define ASN1_BIT_STRING ASN1_STRING +# define ASN1_OCTET_STRING ASN1_STRING +# define ASN1_PRINTABLESTRING ASN1_STRING +# define ASN1_T61STRING ASN1_STRING +# define ASN1_IA5STRING ASN1_STRING +# define ASN1_UTCTIME ASN1_STRING +# define ASN1_GENERALIZEDTIME ASN1_STRING +# define ASN1_TIME ASN1_STRING +# define ASN1_GENERALSTRING ASN1_STRING +# define ASN1_UNIVERSALSTRING ASN1_STRING +# define ASN1_BMPSTRING ASN1_STRING +# define ASN1_VISIBLESTRING ASN1_STRING +# define ASN1_UTF8STRING ASN1_STRING +# define ASN1_BOOLEAN int +# define ASN1_NULL int +# else +typedef struct asn1_string_st ASN1_INTEGER; +typedef struct asn1_string_st ASN1_ENUMERATED; +typedef struct asn1_string_st ASN1_BIT_STRING; +typedef struct asn1_string_st ASN1_OCTET_STRING; +typedef struct asn1_string_st ASN1_PRINTABLESTRING; +typedef struct asn1_string_st ASN1_T61STRING; +typedef struct asn1_string_st ASN1_IA5STRING; +typedef struct asn1_string_st ASN1_GENERALSTRING; +typedef struct asn1_string_st ASN1_UNIVERSALSTRING; +typedef struct asn1_string_st ASN1_BMPSTRING; +typedef struct asn1_string_st ASN1_UTCTIME; +typedef struct asn1_string_st ASN1_TIME; +typedef struct asn1_string_st ASN1_GENERALIZEDTIME; +typedef struct asn1_string_st ASN1_VISIBLESTRING; +typedef struct asn1_string_st ASN1_UTF8STRING; +typedef struct asn1_string_st ASN1_STRING; +typedef int ASN1_BOOLEAN; +typedef int ASN1_NULL; +# endif + +typedef struct asn1_object_st ASN1_OBJECT; + +typedef struct ASN1_ITEM_st ASN1_ITEM; +typedef struct asn1_pctx_st ASN1_PCTX; + +# ifdef OPENSSL_SYS_WIN32 +# undef X509_NAME +# undef X509_EXTENSIONS +# undef X509_CERT_PAIR +# undef PKCS7_ISSUER_AND_SERIAL +# undef OCSP_REQUEST +# undef OCSP_RESPONSE +# endif + +# ifdef BIGNUM +# undef BIGNUM +# endif +typedef struct bignum_st BIGNUM; +typedef struct bignum_ctx BN_CTX; +typedef struct bn_blinding_st BN_BLINDING; +typedef struct bn_mont_ctx_st BN_MONT_CTX; +typedef struct bn_recp_ctx_st BN_RECP_CTX; +typedef struct bn_gencb_st BN_GENCB; + +typedef struct buf_mem_st BUF_MEM; + +typedef struct evp_cipher_st EVP_CIPHER; +typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; +typedef struct env_md_st EVP_MD; +typedef struct env_md_ctx_st EVP_MD_CTX; +typedef struct evp_pkey_st EVP_PKEY; + +typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; + +typedef struct evp_pkey_method_st EVP_PKEY_METHOD; +typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; + +typedef struct dh_st DH; +typedef struct dh_method DH_METHOD; + +typedef struct dsa_st DSA; +typedef struct dsa_method DSA_METHOD; + +typedef struct rsa_st RSA; +typedef struct rsa_meth_st RSA_METHOD; + +typedef struct rand_meth_st RAND_METHOD; + +typedef struct ecdh_method ECDH_METHOD; +typedef struct ecdsa_method ECDSA_METHOD; + +typedef struct x509_st X509; +typedef struct X509_algor_st X509_ALGOR; +typedef struct X509_crl_st X509_CRL; +typedef struct x509_crl_method_st X509_CRL_METHOD; +typedef struct x509_revoked_st X509_REVOKED; +typedef struct X509_name_st X509_NAME; +typedef struct X509_pubkey_st X509_PUBKEY; +typedef struct x509_store_st X509_STORE; +typedef struct x509_store_ctx_st X509_STORE_CTX; + +typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; + +typedef struct v3_ext_ctx X509V3_CTX; +typedef struct conf_st CONF; + +typedef struct store_st STORE; +typedef struct store_method_st STORE_METHOD; + +typedef struct ui_st UI; +typedef struct ui_method_st UI_METHOD; + +typedef struct st_ERR_FNS ERR_FNS; + +typedef struct engine_st ENGINE; +typedef struct ssl_st SSL; +typedef struct ssl_ctx_st SSL_CTX; + +typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; +typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; +typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; +typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; + +typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; +typedef struct DIST_POINT_st DIST_POINT; +typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; +typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; + + /* If placed in pkcs12.h, we end up with a circular depency with pkcs7.h */ +# define DECLARE_PKCS12_STACK_OF(type)/* Nothing */ +# define IMPLEMENT_PKCS12_STACK_OF(type)/* Nothing */ + +typedef struct crypto_ex_data_st CRYPTO_EX_DATA; +/* Callback types for crypto.h */ +typedef int CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, + void *from_d, int idx, long argl, void *argp); + +typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; +typedef struct ocsp_response_st OCSP_RESPONSE; +typedef struct ocsp_responder_id_st OCSP_RESPID; + +#ifdef __cplusplus +} +#endif +#endif /* def HEADER_OPENSSL_TYPES_H */ diff --git a/Sources/OpenSSL/include/openssl/p_openssl.h b/Sources/OpenSSL/include/openssl/p_openssl.h new file mode 100644 index 0000000000..66d65c6071 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/p_openssl.h @@ -0,0 +1,11 @@ + +#ifndef _p_openssl_h_ +#define _p_openssl_h_ + +#include "ssl.h" +#include "err.h" +#include "x509.h" +#include "sha.h" +#include "bio.h" + +#endif diff --git a/Sources/OpenSSL/include/openssl/pem.h b/Sources/OpenSSL/include/openssl/pem.h new file mode 100644 index 0000000000..b66bfadbd3 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/pem.h @@ -0,0 +1,615 @@ +/* crypto/pem/pem.h */ +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_PEM_H +# define HEADER_PEM_H + +# include "e_os2.h" +# ifndef OPENSSL_NO_BIO +# include "bio.h" +# endif +# ifndef OPENSSL_NO_STACK +# include "stack.h" +# endif +# include "evp.h" +# include "x509.h" +# include "pem2.h" + +#ifdef __cplusplus +extern "C" { +#endif + +# define PEM_BUFSIZE 1024 + +# define PEM_OBJ_UNDEF 0 +# define PEM_OBJ_X509 1 +# define PEM_OBJ_X509_REQ 2 +# define PEM_OBJ_CRL 3 +# define PEM_OBJ_SSL_SESSION 4 +# define PEM_OBJ_PRIV_KEY 10 +# define PEM_OBJ_PRIV_RSA 11 +# define PEM_OBJ_PRIV_DSA 12 +# define PEM_OBJ_PRIV_DH 13 +# define PEM_OBJ_PUB_RSA 14 +# define PEM_OBJ_PUB_DSA 15 +# define PEM_OBJ_PUB_DH 16 +# define PEM_OBJ_DHPARAMS 17 +# define PEM_OBJ_DSAPARAMS 18 +# define PEM_OBJ_PRIV_RSA_PUBLIC 19 +# define PEM_OBJ_PRIV_ECDSA 20 +# define PEM_OBJ_PUB_ECDSA 21 +# define PEM_OBJ_ECPARAMETERS 22 + +# define PEM_ERROR 30 +# define PEM_DEK_DES_CBC 40 +# define PEM_DEK_IDEA_CBC 45 +# define PEM_DEK_DES_EDE 50 +# define PEM_DEK_DES_ECB 60 +# define PEM_DEK_RSA 70 +# define PEM_DEK_RSA_MD2 80 +# define PEM_DEK_RSA_MD5 90 + +# define PEM_MD_MD2 NID_md2 +# define PEM_MD_MD5 NID_md5 +# define PEM_MD_SHA NID_sha +# define PEM_MD_MD2_RSA NID_md2WithRSAEncryption +# define PEM_MD_MD5_RSA NID_md5WithRSAEncryption +# define PEM_MD_SHA_RSA NID_sha1WithRSAEncryption + +# define PEM_STRING_X509_OLD "X509 CERTIFICATE" +# define PEM_STRING_X509 "CERTIFICATE" +# define PEM_STRING_X509_PAIR "CERTIFICATE PAIR" +# define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE" +# define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST" +# define PEM_STRING_X509_REQ "CERTIFICATE REQUEST" +# define PEM_STRING_X509_CRL "X509 CRL" +# define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY" +# define PEM_STRING_PUBLIC "PUBLIC KEY" +# define PEM_STRING_RSA "RSA PRIVATE KEY" +# define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY" +# define PEM_STRING_DSA "DSA PRIVATE KEY" +# define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY" +# define PEM_STRING_PKCS7 "PKCS7" +# define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA" +# define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY" +# define PEM_STRING_PKCS8INF "PRIVATE KEY" +# define PEM_STRING_DHPARAMS "DH PARAMETERS" +# define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS" +# define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS" +# define PEM_STRING_DSAPARAMS "DSA PARAMETERS" +# define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY" +# define PEM_STRING_ECPARAMETERS "EC PARAMETERS" +# define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY" +# define PEM_STRING_PARAMETERS "PARAMETERS" +# define PEM_STRING_CMS "CMS" + + /* + * Note that this structure is initialised by PEM_SealInit and cleaned up + * by PEM_SealFinal (at least for now) + */ +typedef struct PEM_Encode_Seal_st { + EVP_ENCODE_CTX encode; + EVP_MD_CTX md; + EVP_CIPHER_CTX cipher; +} PEM_ENCODE_SEAL_CTX; + +/* enc_type is one off */ +# define PEM_TYPE_ENCRYPTED 10 +# define PEM_TYPE_MIC_ONLY 20 +# 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 + * IMPLEMENT_PEM_rw_cb(...) + */ + +# ifdef OPENSSL_NO_FP_API + +# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ +# else + +# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ +type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\ +{ \ +return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \ +} + +# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, type *x) \ +{ \ +return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, const type *x) \ +{ \ +return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, \ + void *u) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ + } + +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, \ + void *u) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ + } + +# endif + +# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ +type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\ +{ \ +return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \ +} + +# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, type *x) \ +{ \ +return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, const type *x) \ +{ \ +return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \ + } + +# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \ + } + +# define IMPLEMENT_PEM_write(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp(name, type, str, asn1) + +# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) + +# define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) + +# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) + +# define IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_read_fp(name, type, str, asn1) + +# define IMPLEMENT_PEM_rw(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write(name, type, str, asn1) + +# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write_const(name, type, str, asn1) + +# define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb(name, type, str, asn1) + +/* These are the same except they are for the declarations */ + +# if defined(OPENSSL_NO_FP_API) + +# define DECLARE_PEM_read_fp(name, type) /**/ +# define DECLARE_PEM_write_fp(name, type) /**/ +# define DECLARE_PEM_write_cb_fp(name, type) /**/ +# else + +# define DECLARE_PEM_read_fp(name, type) \ + type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u); + +# define DECLARE_PEM_write_fp(name, type) \ + int PEM_write_##name(FILE *fp, type *x); + +# define DECLARE_PEM_write_fp_const(name, type) \ + int PEM_write_##name(FILE *fp, const type *x); + +# define DECLARE_PEM_write_cb_fp(name, type) \ + int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u); + +# endif + +# ifndef OPENSSL_NO_BIO +# define DECLARE_PEM_read_bio(name, type) \ + type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u); + +# define DECLARE_PEM_write_bio(name, type) \ + int PEM_write_bio_##name(BIO *bp, type *x); + +# define DECLARE_PEM_write_bio_const(name, type) \ + int PEM_write_bio_##name(BIO *bp, const type *x); + +# define DECLARE_PEM_write_cb_bio(name, type) \ + int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u); + +# else + +# define DECLARE_PEM_read_bio(name, type) /**/ +# define DECLARE_PEM_write_bio(name, type) /**/ +# define DECLARE_PEM_write_bio_const(name, type) /**/ +# define DECLARE_PEM_write_cb_bio(name, type) /**/ +# endif +# define DECLARE_PEM_write(name, type) \ + DECLARE_PEM_write_bio(name, type) \ + DECLARE_PEM_write_fp(name, type) +# define DECLARE_PEM_write_const(name, type) \ + DECLARE_PEM_write_bio_const(name, type) \ + DECLARE_PEM_write_fp_const(name, type) +# define DECLARE_PEM_write_cb(name, type) \ + DECLARE_PEM_write_cb_bio(name, type) \ + DECLARE_PEM_write_cb_fp(name, type) +# define DECLARE_PEM_read(name, type) \ + DECLARE_PEM_read_bio(name, type) \ + DECLARE_PEM_read_fp(name, type) +# define DECLARE_PEM_rw(name, type) \ + DECLARE_PEM_read(name, type) \ + DECLARE_PEM_write(name, type) +# define DECLARE_PEM_rw_const(name, type) \ + DECLARE_PEM_read(name, type) \ + DECLARE_PEM_write_const(name, type) +# define DECLARE_PEM_rw_cb(name, type) \ + DECLARE_PEM_read(name, type) \ + DECLARE_PEM_write_cb(name, type) +# if 1 +/* "userdata": new with OpenSSL 0.9.4 */ +typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); +# else +/* OpenSSL 0.9.3, 0.9.3a */ +typedef int pem_password_cb (char *buf, int size, int rwflag); +# endif + +int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher); +int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len, + pem_password_cb *callback, void *u); + +# ifndef OPENSSL_NO_BIO +int PEM_read_bio(BIO *bp, char **name, char **header, + unsigned char **data, long *len); +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, + const char *name, BIO *bp, pem_password_cb *cb, + void *u); +void *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, void **x, + pem_password_cb *cb, void *u); +int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, void *x, + const EVP_CIPHER *enc, unsigned char *kstr, int klen, + pem_password_cb *cb, void *u); + +STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, + pem_password_cb *cb, void *u); +int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, + unsigned char *kstr, int klen, + pem_password_cb *cd, void *u); +# endif + +int PEM_read(FILE *fp, char **name, char **header, + unsigned char **data, long *len); +int PEM_write(FILE *fp, const char *name, const char *hdr, + const unsigned char *data, long len); +void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, + pem_password_cb *cb, void *u); +int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, + void *x, const EVP_CIPHER *enc, unsigned char *kstr, + int klen, pem_password_cb *callback, void *u); +STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, + pem_password_cb *cb, void *u); + +int PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type, + EVP_MD *md_type, unsigned char **ek, int *ekl, + unsigned char *iv, EVP_PKEY **pubk, int npubk); +void PEM_SealUpdate(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *out, int *outl, + unsigned char *in, int inl); +int PEM_SealFinal(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *sig, int *sigl, + unsigned char *out, int *outl, EVP_PKEY *priv); + +void PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); +void PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *d, unsigned int cnt); +int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, + unsigned int *siglen, EVP_PKEY *pkey); + +int PEM_def_callback(char *buf, int num, int w, void *key); +void PEM_proc_type(char *buf, int type); +void PEM_dek_info(char *buf, const char *type, int len, char *str); + +# include "symhacks.h" + +DECLARE_PEM_rw(X509, X509) +DECLARE_PEM_rw(X509_AUX, X509) +DECLARE_PEM_rw(X509_CERT_PAIR, X509_CERT_PAIR) +DECLARE_PEM_rw(X509_REQ, X509_REQ) +DECLARE_PEM_write(X509_REQ_NEW, X509_REQ) +DECLARE_PEM_rw(X509_CRL, X509_CRL) +DECLARE_PEM_rw(PKCS7, PKCS7) +DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) +DECLARE_PEM_rw(PKCS8, X509_SIG) +DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) +# ifndef OPENSSL_NO_RSA +DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) +DECLARE_PEM_rw_const(RSAPublicKey, RSA) +DECLARE_PEM_rw(RSA_PUBKEY, RSA) +# endif +# ifndef OPENSSL_NO_DSA +DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) +DECLARE_PEM_rw(DSA_PUBKEY, DSA) +DECLARE_PEM_rw_const(DSAparams, DSA) +# endif +# ifndef OPENSSL_NO_EC +DECLARE_PEM_rw_const(ECPKParameters, EC_GROUP) +DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY) +DECLARE_PEM_rw(EC_PUBKEY, EC_KEY) +# endif +# ifndef OPENSSL_NO_DH +DECLARE_PEM_rw_const(DHparams, DH) +DECLARE_PEM_write_const(DHxparams, DH) +# endif +DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY) +DECLARE_PEM_rw(PUBKEY, EVP_PKEY) + +int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, + char *, int, pem_password_cb *, void *); +int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); +EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, + void *u); + +int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); + +EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, + void *u); + +int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, + char *kstr, int klen, pem_password_cb *cd, + void *u); + +EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); +int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); + +EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length); +EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length); +EVP_PKEY *b2i_PrivateKey_bio(BIO *in); +EVP_PKEY *b2i_PublicKey_bio(BIO *in); +int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk); +int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk); +# ifndef OPENSSL_NO_RC4 +EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u); +int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, + pem_password_cb *cb, void *u); +# 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. + */ +void 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_F_PEM_WRITE_PKCS8PRIVATEKEY 118 +# define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 +# define PEM_F_PEM_PK8PKEY 119 +# 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_SEALFINAL 110 +# define PEM_F_PEM_SEALINIT 111 +# 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_INCONSISTENT_HEADER 121 +# define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 +# define PEM_R_KEYBLOB_TOO_SHORT 123 +# 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_PUBLIC_KEY_NO_RSA 110 +# 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_UNSUPPORTED_CIPHER 113 +# define PEM_R_UNSUPPORTED_ENCRYPTION 114 +# define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/pem2.h b/Sources/OpenSSL/include/openssl/pem2.h new file mode 100644 index 0000000000..84897d5ec3 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/pem2.h @@ -0,0 +1,70 @@ +/* ==================================================================== + * Copyright (c) 1999 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +/* + * This header only exists to break a circular dependency between pem and err + * Ben 30 Jan 1999. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef HEADER_PEM_H +void ERR_load_PEM_strings(void); +#endif + +#ifdef __cplusplus +} +#endif diff --git a/Sources/OpenSSL/include/openssl/pkcs12.h b/Sources/OpenSSL/include/openssl/pkcs12.h new file mode 100644 index 0000000000..32fdfd9b76 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/pkcs12.h @@ -0,0 +1,342 @@ +/* pkcs12.h */ +/* + * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project + * 1999. + */ +/* ==================================================================== + * Copyright (c) 1999 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_PKCS12_H +# define HEADER_PKCS12_H + +# include "bio.h" +# include "x509.h" + +#ifdef __cplusplus +extern "C" { +#endif + +# define PKCS12_KEY_ID 1 +# define PKCS12_IV_ID 2 +# define PKCS12_MAC_ID 3 + +/* Default iteration count */ +# ifndef PKCS12_DEFAULT_ITER +# define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER +# endif + +# define PKCS12_MAC_KEY_LENGTH 20 + +# define PKCS12_SALT_LEN 8 + +/* Uncomment out next line for unicode password and names, otherwise ASCII */ + +/* + * #define PBE_UNICODE + */ + +# ifdef PBE_UNICODE +# define PKCS12_key_gen PKCS12_key_gen_uni +# define PKCS12_add_friendlyname PKCS12_add_friendlyname_uni +# else +# define PKCS12_key_gen PKCS12_key_gen_asc +# define PKCS12_add_friendlyname PKCS12_add_friendlyname_asc +# endif + +/* MS key usage constants */ + +# define KEY_EX 0x10 +# define KEY_SIG 0x80 + +typedef struct { + X509_SIG *dinfo; + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *iter; /* defaults to 1 */ +} PKCS12_MAC_DATA; + +typedef struct { + ASN1_INTEGER *version; + PKCS12_MAC_DATA *mac; + PKCS7 *authsafes; +} PKCS12; + +typedef struct { + ASN1_OBJECT *type; + union { + struct pkcs12_bag_st *bag; /* secret, crl and certbag */ + struct pkcs8_priv_key_info_st *keybag; /* keybag */ + X509_SIG *shkeybag; /* shrouded key bag */ + STACK_OF(PKCS12_SAFEBAG) *safes; + ASN1_TYPE *other; + } value; + STACK_OF(X509_ATTRIBUTE) *attrib; +} PKCS12_SAFEBAG; + +DECLARE_STACK_OF(PKCS12_SAFEBAG) +DECLARE_ASN1_SET_OF(PKCS12_SAFEBAG) +DECLARE_PKCS12_STACK_OF(PKCS12_SAFEBAG) + +typedef struct pkcs12_bag_st { + ASN1_OBJECT *type; + union { + ASN1_OCTET_STRING *x509cert; + ASN1_OCTET_STRING *x509crl; + ASN1_OCTET_STRING *octet; + ASN1_IA5STRING *sdsicert; + ASN1_TYPE *other; /* Secret or other bag */ + } value; +} PKCS12_BAGS; + +# define PKCS12_ERROR 0 +# define PKCS12_OK 1 + +/* Compatibility macros */ + +# define M_PKCS12_x5092certbag PKCS12_x5092certbag +# define M_PKCS12_x509crl2certbag PKCS12_x509crl2certbag + +# define M_PKCS12_certbag2x509 PKCS12_certbag2x509 +# define M_PKCS12_certbag2x509crl PKCS12_certbag2x509crl + +# define M_PKCS12_unpack_p7data PKCS12_unpack_p7data +# define M_PKCS12_pack_authsafes PKCS12_pack_authsafes +# define M_PKCS12_unpack_authsafes PKCS12_unpack_authsafes +# define M_PKCS12_unpack_p7encdata PKCS12_unpack_p7encdata + +# define M_PKCS12_decrypt_skey PKCS12_decrypt_skey +# define M_PKCS8_decrypt PKCS8_decrypt + +# define M_PKCS12_bag_type(bg) OBJ_obj2nid((bg)->type) +# define M_PKCS12_cert_bag_type(bg) OBJ_obj2nid((bg)->value.bag->type) +# define M_PKCS12_crl_bag_type M_PKCS12_cert_bag_type + +# define PKCS12_get_attr(bag, attr_nid) \ + PKCS12_get_attr_gen(bag->attrib, attr_nid) + +# define PKCS8_get_attr(p8, attr_nid) \ + PKCS12_get_attr_gen(p8->attributes, attr_nid) + +# define PKCS12_mac_present(p12) ((p12)->mac ? 1 : 0) + +PKCS12_SAFEBAG *PKCS12_x5092certbag(X509 *x509); +PKCS12_SAFEBAG *PKCS12_x509crl2certbag(X509_CRL *crl); +X509 *PKCS12_certbag2x509(PKCS12_SAFEBAG *bag); +X509_CRL *PKCS12_certbag2x509crl(PKCS12_SAFEBAG *bag); + +PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, + int nid1, int nid2); +PKCS12_SAFEBAG *PKCS12_MAKE_KEYBAG(PKCS8_PRIV_KEY_INFO *p8); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(X509_SIG *p8, const char *pass, + int passlen); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(PKCS12_SAFEBAG *bag, + const char *pass, int passlen); +X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); +PKCS12_SAFEBAG *PKCS12_MAKE_SHKEYBAG(int pbe_nid, const char *pass, + int passlen, unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8); +PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); +PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags); +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, + int passlen); + +int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes); +STACK_OF(PKCS7) *PKCS12_unpack_authsafes(PKCS12 *p12); + +int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, + int namelen); +int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, + const unsigned char *name, int namelen); +int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); +ASN1_TYPE *PKCS12_get_attr_gen(STACK_OF(X509_ATTRIBUTE) *attrs, int attr_nid); +char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); +unsigned char *PKCS12_pbe_crypt(X509_ALGOR *algor, const char *pass, + int passlen, unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de); +void *PKCS12_item_decrypt_d2i(X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + ASN1_OCTET_STRING *oct, int zbuf); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf); +PKCS12 *PKCS12_init(int mode); +int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de); +int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *mac, unsigned int *maclen); +int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); +int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + const EVP_MD *md_type); +int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, + int saltlen, const EVP_MD *md_type); +unsigned char *OPENSSL_asc2uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2asc(unsigned char *uni, int unilen); + +DECLARE_ASN1_FUNCTIONS(PKCS12) +DECLARE_ASN1_FUNCTIONS(PKCS12_MAC_DATA) +DECLARE_ASN1_FUNCTIONS(PKCS12_SAFEBAG) +DECLARE_ASN1_FUNCTIONS(PKCS12_BAGS) + +DECLARE_ASN1_ITEM(PKCS12_SAFEBAGS) +DECLARE_ASN1_ITEM(PKCS12_AUTHSAFES) + +void PKCS12_PBE_add(void); +int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, + STACK_OF(X509) **ca); +PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert, + STACK_OF(X509) *ca, int nid_key, int nid_cert, int iter, + int mac_iter, int keytype); + +PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); +PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, char *pass); +int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, char *pass); +PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); + +int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); +int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); +PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); +PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); +int PKCS12_newpass(PKCS12 *p12, char *oldpass, 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. + */ +void ERR_load_PKCS12_strings(void); + +/* Error codes for the PKCS12 functions. */ + +/* Function codes. */ +# define PKCS12_F_PARSE_BAG 129 +# define PKCS12_F_PARSE_BAGS 103 +# define PKCS12_F_PKCS12_ADD_FRIENDLYNAME 100 +# define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_ASC 127 +# define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI 102 +# define PKCS12_F_PKCS12_ADD_LOCALKEYID 104 +# 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_MAKE_KEYBAG 112 +# define PKCS12_F_PKCS12_MAKE_SHKEYBAG 113 +# 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_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_ADD_KEYUSAGE 124 +# define PKCS12_F_PKCS8_ENCRYPT 125 + +/* 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_ERROR 112 +# 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 +#endif diff --git a/Sources/OpenSSL/include/openssl/pkcs7.h b/Sources/OpenSSL/include/openssl/pkcs7.h new file mode 100644 index 0000000000..64f8a659cf --- /dev/null +++ b/Sources/OpenSSL/include/openssl/pkcs7.h @@ -0,0 +1,481 @@ +/* crypto/pkcs7/pkcs7.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_PKCS7_H +# define HEADER_PKCS7_H + +# include "asn1.h" +# include "bio.h" +# include "e_os2.h" + +# include "symhacks.h" +# include "ossl_typ.h" + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_SYS_WIN32 +/* Under Win32 thes are defined in wincrypt.h */ +# undef PKCS7_ISSUER_AND_SERIAL +# undef PKCS7_SIGNER_INFO +# endif + +/*- +Encryption_ID DES-CBC +Digest_ID MD5 +Digest_Encryption_ID rsaEncryption +Key_Encryption_ID rsaEncryption +*/ + +typedef struct pkcs7_issuer_and_serial_st { + X509_NAME *issuer; + ASN1_INTEGER *serial; +} PKCS7_ISSUER_AND_SERIAL; + +typedef struct pkcs7_signer_info_st { + ASN1_INTEGER *version; /* version 1 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *digest_alg; + STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */ + X509_ALGOR *digest_enc_alg; + ASN1_OCTET_STRING *enc_digest; + STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ + /* The private key to sign with */ + EVP_PKEY *pkey; +} PKCS7_SIGNER_INFO; + +DECLARE_STACK_OF(PKCS7_SIGNER_INFO) +DECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO) + +typedef struct pkcs7_recip_info_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *key_enc_algor; + ASN1_OCTET_STRING *enc_key; + X509 *cert; /* get the pub-key from this */ +} PKCS7_RECIP_INFO; + +DECLARE_STACK_OF(PKCS7_RECIP_INFO) +DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO) + +typedef struct pkcs7_signed_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + struct pkcs7_st *contents; +} PKCS7_SIGNED; +/* + * The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about + * merging the two + */ + +typedef struct pkcs7_enc_content_st { + ASN1_OBJECT *content_type; + X509_ALGOR *algorithm; + ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ + const EVP_CIPHER *cipher; +} PKCS7_ENC_CONTENT; + +typedef struct pkcs7_enveloped_st { + ASN1_INTEGER *version; /* version 0 */ + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENVELOPE; + +typedef struct pkcs7_signedandenveloped_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + PKCS7_ENC_CONTENT *enc_data; + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; +} PKCS7_SIGN_ENVELOPE; + +typedef struct pkcs7_digest_st { + ASN1_INTEGER *version; /* version 0 */ + X509_ALGOR *md; /* md used */ + struct pkcs7_st *contents; + ASN1_OCTET_STRING *digest; +} PKCS7_DIGEST; + +typedef struct pkcs7_encrypted_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENCRYPT; + +typedef struct pkcs7_st { + /* + * The following is non NULL if it contains ASN1 encoding of this + * structure + */ + unsigned char *asn1; + long length; +# define PKCS7_S_HEADER 0 +# define PKCS7_S_BODY 1 +# define PKCS7_S_TAIL 2 + int state; /* used during processing */ + int detached; + ASN1_OBJECT *type; + /* content as defined by the type */ + /* + * all encryption/message digests are applied to the 'contents', leaving + * out the 'type' field. + */ + union { + char *ptr; + /* NID_pkcs7_data */ + ASN1_OCTET_STRING *data; + /* NID_pkcs7_signed */ + PKCS7_SIGNED *sign; + /* NID_pkcs7_enveloped */ + PKCS7_ENVELOPE *enveloped; + /* NID_pkcs7_signedAndEnveloped */ + PKCS7_SIGN_ENVELOPE *signed_and_enveloped; + /* NID_pkcs7_digest */ + PKCS7_DIGEST *digest; + /* NID_pkcs7_encrypted */ + PKCS7_ENCRYPT *encrypted; + /* Anything else */ + ASN1_TYPE *other; + } d; +} PKCS7; + +DECLARE_STACK_OF(PKCS7) +DECLARE_ASN1_SET_OF(PKCS7) +DECLARE_PKCS12_STACK_OF(PKCS7) + +# define PKCS7_OP_SET_DETACHED_SIGNATURE 1 +# define PKCS7_OP_GET_DETACHED_SIGNATURE 2 + +# define PKCS7_get_signed_attributes(si) ((si)->auth_attr) +# define PKCS7_get_attributes(si) ((si)->unauth_attr) + +# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) +# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted) +# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped) +# define PKCS7_type_is_signedAndEnveloped(a) \ + (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped) +# define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data) +# define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest) + +# define PKCS7_set_detached(p,v) \ + PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL) +# define PKCS7_get_detached(p) \ + PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL) + +# define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7)) + +/* S/MIME related flags */ + +# define PKCS7_TEXT 0x1 +# define PKCS7_NOCERTS 0x2 +# define PKCS7_NOSIGS 0x4 +# define PKCS7_NOCHAIN 0x8 +# define PKCS7_NOINTERN 0x10 +# define PKCS7_NOVERIFY 0x20 +# define PKCS7_DETACHED 0x40 +# define PKCS7_BINARY 0x80 +# define PKCS7_NOATTR 0x100 +# define PKCS7_NOSMIMECAP 0x200 +# define PKCS7_NOOLDMIMETYPE 0x400 +# define PKCS7_CRLFEOL 0x800 +# define PKCS7_STREAM 0x1000 +# define PKCS7_NOCRL 0x2000 +# define PKCS7_PARTIAL 0x4000 +# define PKCS7_REUSE_DIGEST 0x8000 + +/* Flags: for compatibility with older code */ + +# define SMIME_TEXT PKCS7_TEXT +# define SMIME_NOCERTS PKCS7_NOCERTS +# define SMIME_NOSIGS PKCS7_NOSIGS +# define SMIME_NOCHAIN PKCS7_NOCHAIN +# define SMIME_NOINTERN PKCS7_NOINTERN +# define SMIME_NOVERIFY PKCS7_NOVERIFY +# define SMIME_DETACHED PKCS7_DETACHED +# define SMIME_BINARY PKCS7_BINARY +# define SMIME_NOATTR PKCS7_NOATTR + +DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL) + +int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, + const EVP_MD *type, unsigned char *md, + unsigned int *len); +# ifndef OPENSSL_NO_FP_API +PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); +int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7); +# endif +PKCS7 *PKCS7_dup(PKCS7 *p7); +PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); +int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7); +int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); +int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); + +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) +DECLARE_ASN1_FUNCTIONS(PKCS7) + +DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) +DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) + +DECLARE_ASN1_NDEF_FUNCTION(PKCS7) +DECLARE_ASN1_PRINT_FUNCTION(PKCS7) + +long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); + +int PKCS7_set_type(PKCS7 *p7, int type); +int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); +int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); +int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, + const EVP_MD *dgst); +int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); +int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); +int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); +int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_content_new(PKCS7 *p7, int nid); +int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx, + BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, + X509 *x509); + +BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); +int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); +BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert); + +PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, + EVP_PKEY *pkey, const EVP_MD *dgst); +X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md); +STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7); + +PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509); +void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk, + X509_ALGOR **pdig, X509_ALGOR **psig); +void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc); +int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri); +int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509); +int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); +int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); + +PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); +ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, + void *data); +int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, + void *value); +ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid); +int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); + +PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags); + +PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, + X509 *signcert, EVP_PKEY *pkey, + const EVP_MD *md, int flags); + +int PKCS7_final(PKCS7 *p7, BIO *data, int flags); +int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, + BIO *indata, BIO *out, int flags); +STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, + int flags); +PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, + int flags); +int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, + int flags); + +int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, + STACK_OF(X509_ALGOR) *cap); +STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si); +int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg); + +int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid); +int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t); +int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, + const unsigned char *md, int mdlen); + +int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); +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. + */ +void ERR_load_PKCS7_strings(void); + +/* Error codes for the PKCS7 functions. */ + +/* Function codes. */ +# define PKCS7_F_B64_READ_PKCS7 120 +# define PKCS7_F_B64_WRITE_PKCS7 121 +# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 +# define PKCS7_F_I2D_PKCS7_BIO_STREAM 140 +# 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_DATASIGN 106 +# 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 +# define PKCS7_F_SMIME_READ_PKCS7 122 +# define PKCS7_F_SMIME_TEXT 123 + +/* 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_DECODE_ERROR 130 +# define PKCS7_R_DECRYPTED_KEY_IS_WRONG_LENGTH 100 +# 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_MIME_TYPE 131 +# define PKCS7_R_INVALID_NULL_POINTER 143 +# define PKCS7_R_INVALID_SIGNED_DATA_TYPE 155 +# define PKCS7_R_MIME_NO_CONTENT_TYPE 132 +# define PKCS7_R_MIME_PARSE_ERROR 133 +# define PKCS7_R_MIME_SIG_PARSE_ERROR 134 +# define PKCS7_R_MISSING_CERIPEND_INFO 103 +# define PKCS7_R_NO_CONTENT 122 +# define PKCS7_R_NO_CONTENT_TYPE 135 +# define PKCS7_R_NO_DEFAULT_DIGEST 151 +# define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 154 +# define PKCS7_R_NO_MULTIPART_BODY_FAILURE 136 +# define PKCS7_R_NO_MULTIPART_BOUNDARY 137 +# define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 115 +# define PKCS7_R_NO_RECIPIENT_MATCHES_KEY 146 +# define PKCS7_R_NO_SIGNATURES_ON_DATA 123 +# define PKCS7_R_NO_SIGNERS 142 +# define PKCS7_R_NO_SIG_CONTENT_TYPE 138 +# 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_DATAFINAL 126 +# define PKCS7_R_PKCS7_DATAFINAL_ERROR 125 +# define PKCS7_R_PKCS7_DATASIGN 145 +# define PKCS7_R_PKCS7_PARSE_ERROR 139 +# define PKCS7_R_PKCS7_SIG_PARSE_ERROR 140 +# 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_SIG_INVALID_MIME_TYPE 141 +# 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 +#endif diff --git a/Sources/OpenSSL/include/openssl/pqueue.h b/Sources/OpenSSL/include/openssl/pqueue.h new file mode 100644 index 0000000000..d40d9c7d85 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/pqueue.h @@ -0,0 +1,99 @@ +/* crypto/pqueue/pqueue.h */ +/* + * DTLS implementation written by Nagendra Modadugu + * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. + */ +/* ==================================================================== + * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_PQUEUE_H +# define HEADER_PQUEUE_H + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif +typedef struct _pqueue *pqueue; + +typedef struct _pitem { + unsigned char priority[8]; /* 64-bit value in big-endian encoding */ + void *data; + struct _pitem *next; +} pitem; + +typedef struct _pitem *piterator; + +pitem *pitem_new(unsigned char *prio64be, void *data); +void pitem_free(pitem *item); + +pqueue pqueue_new(void); +void pqueue_free(pqueue pq); + +pitem *pqueue_insert(pqueue pq, pitem *item); +pitem *pqueue_peek(pqueue pq); +pitem *pqueue_pop(pqueue pq); +pitem *pqueue_find(pqueue pq, unsigned char *prio64be); +pitem *pqueue_iterator(pqueue pq); +pitem *pqueue_next(piterator *iter); + +void pqueue_print(pqueue pq); +int pqueue_size(pqueue pq); + +#ifdef __cplusplus +} +#endif +#endif /* ! HEADER_PQUEUE_H */ diff --git a/Sources/OpenSSL/include/openssl/rand.h b/Sources/OpenSSL/include/openssl/rand.h new file mode 100644 index 0000000000..143eae918b --- /dev/null +++ b/Sources/OpenSSL/include/openssl/rand.h @@ -0,0 +1,150 @@ +/* crypto/rand/rand.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_RAND_H +# define HEADER_RAND_H + +# include +# include "ossl_typ.h" +# include "e_os2.h" + +# if defined(OPENSSL_SYS_WINDOWS) +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# if defined(OPENSSL_FIPS) +# define FIPS_RAND_SIZE_T size_t +# endif + +/* Already defined in ossl_typ.h */ +/* typedef struct rand_meth_st RAND_METHOD; */ + +struct rand_meth_st { + void (*seed) (const void *buf, int num); + int (*bytes) (unsigned char *buf, int num); + void (*cleanup) (void); + void (*add) (const void *buf, int num, double entropy); + 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_SSLeay(void); +void RAND_cleanup(void); +int RAND_bytes(unsigned char *buf, int num); +int RAND_pseudo_bytes(unsigned char *buf, int num); +void RAND_seed(const void *buf, int num); +void RAND_add(const void *buf, int num, double entropy); +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); +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); +int RAND_poll(void); + +# if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32) + +void RAND_screen(void); +int RAND_event(UINT, WPARAM, LPARAM); + +# endif + +# ifdef OPENSSL_FIPS +void RAND_set_fips_drbg_type(int type, int flags); +int RAND_init_fips(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. + */ +void ERR_load_RAND_strings(void); + +/* Error codes for the RAND functions. */ + +/* Function codes. */ +# define RAND_F_RAND_GET_RAND_METHOD 101 +# define RAND_F_RAND_INIT_FIPS 102 +# define RAND_F_SSLEAY_RAND_BYTES 100 + +/* Reason codes. */ +# define RAND_R_DUAL_EC_DRBG_DISABLED 104 +# define RAND_R_ERROR_INITIALISING_DRBG 102 +# define RAND_R_ERROR_INSTANTIATING_DRBG 103 +# define RAND_R_NO_FIPS_RANDOM_METHOD_SET 101 +# define RAND_R_PRNG_NOT_SEEDED 100 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/rc2.h b/Sources/OpenSSL/include/openssl/rc2.h new file mode 100644 index 0000000000..fb887701e1 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/rc2.h @@ -0,0 +1,103 @@ +/* crypto/rc2/rc2.h */ +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_RC2_H +# define HEADER_RC2_H + +# include "opensslconf.h"/* OPENSSL_NO_RC2, RC2_INT */ +# ifdef OPENSSL_NO_RC2 +# error RC2 is disabled. +# endif + +# define RC2_ENCRYPT 1 +# define RC2_DECRYPT 0 + +# define RC2_BLOCK 8 +# define RC2_KEY_LENGTH 16 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct rc2_key_st { + RC2_INT data[64]; +} RC2_KEY; + +# ifdef OPENSSL_FIPS +void private_RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, + int bits); +# endif +void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits); +void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, + RC2_KEY *key, int enc); +void RC2_encrypt(unsigned long *data, RC2_KEY *key); +void RC2_decrypt(unsigned long *data, RC2_KEY *key); +void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, + RC2_KEY *ks, unsigned char *iv, int enc); +void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC2_KEY *schedule, unsigned char *ivec, + int *num, int enc); +void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC2_KEY *schedule, unsigned char *ivec, + int *num); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/rc4.h b/Sources/OpenSSL/include/openssl/rc4.h new file mode 100644 index 0000000000..a9db175379 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/rc4.h @@ -0,0 +1,88 @@ +/* crypto/rc4/rc4.h */ +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_RC4_H +# define HEADER_RC4_H + +# include "opensslconf.h"/* OPENSSL_NO_RC4, RC4_INT */ +# ifdef OPENSSL_NO_RC4 +# error RC4 is disabled. +# endif + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct rc4_key_st { + RC4_INT x, y; + RC4_INT data[256]; +} RC4_KEY; + +const char *RC4_options(void); +void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); +void private_RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); +void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, + unsigned char *outdata); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/ripemd.h b/Sources/OpenSSL/include/openssl/ripemd.h new file mode 100644 index 0000000000..5c5100d7f9 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/ripemd.h @@ -0,0 +1,105 @@ +/* crypto/ripemd/ripemd.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_RIPEMD_H +# define HEADER_RIPEMD_H + +# include "e_os2.h" +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_NO_RIPEMD +# error RIPEMD is disabled. +# endif + +# if defined(__LP32__) +# define RIPEMD160_LONG unsigned long +# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) +# define RIPEMD160_LONG unsigned long +# define RIPEMD160_LONG_LOG2 3 +# else +# define RIPEMD160_LONG unsigned int +# endif + +# define RIPEMD160_CBLOCK 64 +# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) +# define RIPEMD160_DIGEST_LENGTH 20 + +typedef struct RIPEMD160state_st { + RIPEMD160_LONG A, B, C, D, E; + RIPEMD160_LONG Nl, Nh; + RIPEMD160_LONG data[RIPEMD160_LBLOCK]; + unsigned int num; +} RIPEMD160_CTX; + +# ifdef OPENSSL_FIPS +int private_RIPEMD160_Init(RIPEMD160_CTX *c); +# endif +int RIPEMD160_Init(RIPEMD160_CTX *c); +int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len); +int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); +unsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md); +void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/rsa.h b/Sources/OpenSSL/include/openssl/rsa.h new file mode 100644 index 0000000000..d6ea13cc28 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/rsa.h @@ -0,0 +1,664 @@ +/* crypto/rsa/rsa.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_RSA_H +# define HEADER_RSA_H + +# include "asn1.h" + +# ifndef OPENSSL_NO_BIO +# include "bio.h" +# endif +# include "crypto.h" +# include "ossl_typ.h" +# ifndef OPENSSL_NO_DEPRECATED +# include "bn.h" +# endif + +# ifdef OPENSSL_NO_RSA +# error RSA is disabled. +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Declared already in ossl_typ.h */ +/* typedef struct rsa_st RSA; */ +/* typedef struct rsa_meth_st RSA_METHOD; */ + +struct rsa_meth_st { + const char *name; + int (*rsa_pub_enc) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); + int (*rsa_pub_dec) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); + int (*rsa_priv_enc) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); + int (*rsa_priv_dec) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); + /* Can be null */ + int (*rsa_mod_exp) (BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx); + /* Can be null */ + int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); + /* called at new */ + int (*init) (RSA *rsa); + /* called at free */ + int (*finish) (RSA *rsa); + /* RSA_METHOD_FLAG_* things */ + int flags; + /* may be needed! */ + char *app_data; + /* + * New sign and verify functions: some libraries don't allow arbitrary + * data to be signed/verified: this allows them to be used. Note: for + * this to work the RSA_public_decrypt() and RSA_private_encrypt() should + * *NOT* be used RSA_sign(), RSA_verify() should be used instead. Note: + * for backwards compatibility this functionality is only enabled if the + * RSA_FLAG_SIGN_VER option is set in 'flags'. + */ + int (*rsa_sign) (int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, + const RSA *rsa); + int (*rsa_verify) (int dtype, const unsigned char *m, + unsigned int m_length, const unsigned char *sigbuf, + unsigned int siglen, const RSA *rsa); + /* + * If this callback is NULL, the builtin software RSA key-gen will be + * used. This is for behavioural compatibility whilst the code gets + * rewired, but one day it would be nice to assume there are no such + * things as "builtin software" implementations. + */ + int (*rsa_keygen) (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +}; + +struct rsa_st { + /* + * The first parameter is used to pickup errors where this is passed + * instead of aEVP_PKEY, it is set to 0 + */ + int pad; + long version; + const RSA_METHOD *meth; + /* functional reference if 'meth' is ENGINE-provided */ + ENGINE *engine; + BIGNUM *n; + BIGNUM *e; + BIGNUM *d; + BIGNUM *p; + BIGNUM *q; + BIGNUM *dmp1; + BIGNUM *dmq1; + BIGNUM *iqmp; + /* be careful using this if the RSA structure is shared */ + CRYPTO_EX_DATA ex_data; + int references; + int flags; + /* Used to cache montgomery values */ + BN_MONT_CTX *_method_mod_n; + BN_MONT_CTX *_method_mod_p; + BN_MONT_CTX *_method_mod_q; + /* + * all BIGNUM values are actually in the following data, if it is not + * NULL + */ + char *bignum_data; + BN_BLINDING *blinding; + BN_BLINDING *mt_blinding; +}; + +# ifndef OPENSSL_RSA_MAX_MODULUS_BITS +# define OPENSSL_RSA_MAX_MODULUS_BITS 16384 +# endif + +# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS +# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 +# endif +# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS + +/* exponent limit enforced for "large" modulus only */ +# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 +# endif + +# define RSA_3 0x3L +# define RSA_F4 0x10001L + +# define RSA_METHOD_FLAG_NO_CHECK 0x0001/* don't check pub/private + * match */ + +# define RSA_FLAG_CACHE_PUBLIC 0x0002 +# define RSA_FLAG_CACHE_PRIVATE 0x0004 +# define RSA_FLAG_BLINDING 0x0008 +# define RSA_FLAG_THREAD_SAFE 0x0010 +/* + * This flag means the private key operations will be handled by rsa_mod_exp + * and that they do not depend on the private key components being present: + * for example a key stored in external hardware. Without this flag + * bn_mod_exp gets called when private key components are absent. + */ +# define RSA_FLAG_EXT_PKEY 0x0020 + +/* + * This flag in the RSA_METHOD enables the new rsa_sign, rsa_verify + * functions. + */ +# define RSA_FLAG_SIGN_VER 0x0040 + +/* + * new with 0.9.6j and 0.9.7b; the built-in + * RSA implementation now uses blinding by + * default (ignoring RSA_FLAG_BLINDING), + * but other engines might not need it + */ +# define RSA_FLAG_NO_BLINDING 0x0080 +/* + * new with 0.9.8f; the built-in RSA + * implementation now uses constant time + * operations by default in private key operations, + * e.g., constant time modular exponentiation, + * modular inverse without leaking branches, + * division without leaking branches. This + * flag disables these constant time + * operations and results in faster RSA + * private key operations. + */ +# define RSA_FLAG_NO_CONSTTIME 0x0100 +# ifdef OPENSSL_USE_DEPRECATED +/* deprecated name for the flag*/ +/* + * new with 0.9.7h; the built-in RSA + * implementation now uses constant time + * modular exponentiation for secret exponents + * by default. This flag causes the + * faster variable sliding window method to + * be used for all exponents. + */ +# define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME +# 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) + +# 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) + +# 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) + +# 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) + +# 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) + +# 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) + +# 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_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) + +# 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) + +# 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) + +# 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_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) + +# define EVP_PKEY_CTRL_RSA_KEYGEN_BITS (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 5) + +# define EVP_PKEY_CTRL_GET_RSA_PADDING (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_GET_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 8) + +# define EVP_PKEY_CTRL_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 10) + +# 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 RSA_PKCS1_PADDING 1 +# define RSA_SSLV23_PADDING 2 +# define RSA_NO_PADDING 3 +# define RSA_PKCS1_OAEP_PADDING 4 +# define RSA_X931_PADDING 5 +/* EVP_PKEY_ only */ +# define RSA_PKCS1_PSS_PADDING 6 + +# define RSA_PKCS1_PADDING_SIZE 11 + +# define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) +# define RSA_get_app_data(s) RSA_get_ex_data(s,0) + +RSA *RSA_new(void); +RSA *RSA_new_method(ENGINE *engine); +int RSA_size(const RSA *rsa); + +/* Deprecated version */ +# ifndef OPENSSL_NO_DEPRECATED +RSA *RSA_generate_key(int bits, unsigned long e, void + (*callback) (int, int, void *), void *cb_arg); +# endif /* !defined(OPENSSL_NO_DEPRECATED) */ + +/* New version */ +int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); + +int RSA_check_key(const RSA *); + /* next 4 return -1 on error */ +int RSA_public_encrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_private_encrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_public_decrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_private_decrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +void RSA_free(RSA *r); +/* "up" the RSA object's reference count */ +int RSA_up_ref(RSA *r); + +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_get_method(const RSA *rsa); +int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); + +/* This function needs the memory locking malloc callbacks to be installed */ +int RSA_memory_lock(RSA *r); + +/* these are the actual SSLeay RSA functions */ +const RSA_METHOD *RSA_PKCS1_SSLeay(void); + +const RSA_METHOD *RSA_null_method(void); + +DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) + +typedef struct rsa_pss_params_st { + X509_ALGOR *hashAlgorithm; + X509_ALGOR *maskGenAlgorithm; + ASN1_INTEGER *saltLength; + ASN1_INTEGER *trailerField; +} RSA_PSS_PARAMS; + +DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) + +typedef struct rsa_oaep_params_st { + X509_ALGOR *hashFunc; + X509_ALGOR *maskGenFunc; + X509_ALGOR *pSourceFunc; +} RSA_OAEP_PARAMS; + +DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) + +# ifndef OPENSSL_NO_FP_API +int RSA_print_fp(FILE *fp, const RSA *r, int offset); +# endif + +# ifndef OPENSSL_NO_BIO +int RSA_print(BIO *bp, const RSA *r, int offset); +# endif + +# ifndef OPENSSL_NO_RC4 +int i2d_RSA_NET(const RSA *a, unsigned char **pp, + int (*cb) (char *buf, int len, const char *prompt, + int verify), int sgckey); +RSA *d2i_RSA_NET(RSA **a, const unsigned char **pp, long length, + int (*cb) (char *buf, int len, const char *prompt, + int verify), int sgckey); + +int i2d_Netscape_RSA(const RSA *a, unsigned char **pp, + int (*cb) (char *buf, int len, const char *prompt, + int verify)); +RSA *d2i_Netscape_RSA(RSA **a, const unsigned char **pp, long length, + int (*cb) (char *buf, int len, const char *prompt, + int verify)); +# endif + +/* + * The following 2 functions sign and verify a X509_SIG ASN1 object inside + * PKCS#1 padded RSA encryption + */ +int RSA_sign(int type, const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, RSA *rsa); +int RSA_verify(int type, const unsigned char *m, unsigned int m_length, + const unsigned char *sigbuf, unsigned int siglen, RSA *rsa); + +/* + * The following 2 function sign and verify a ASN1_OCTET_STRING object inside + * PKCS#1 padded RSA encryption + */ +int RSA_sign_ASN1_OCTET_STRING(int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, + RSA *rsa); +int RSA_verify_ASN1_OCTET_STRING(int type, const unsigned char *m, + unsigned int m_length, unsigned char *sigbuf, + unsigned int siglen, RSA *rsa); + +int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); +void RSA_blinding_off(RSA *rsa); +BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); + +int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, + const unsigned char *f, int fl); +int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, + const unsigned char *f, int fl); +int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +int PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, + long seedlen, const EVP_MD *dgst); +int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, + const unsigned char *f, int fl, + const unsigned char *p, int pl); +int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len, + const unsigned char *p, int pl); +int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, + const unsigned char *from, int flen, + const unsigned char *param, int plen, + const EVP_MD *md, const EVP_MD *mgf1md); +int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, + const unsigned char *from, int flen, + int num, const unsigned char *param, + int plen, const EVP_MD *md, + const EVP_MD *mgf1md); +int RSA_padding_add_SSLv23(unsigned char *to, int tlen, + const unsigned char *f, int fl); +int RSA_padding_check_SSLv23(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len); +int RSA_padding_add_none(unsigned char *to, int tlen, const unsigned char *f, + int fl); +int RSA_padding_check_none(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len); +int RSA_padding_add_X931(unsigned char *to, int tlen, const unsigned char *f, + int fl); +int RSA_padding_check_X931(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len); +int RSA_X931_hash_id(int nid); + +int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, + const EVP_MD *Hash, const unsigned char *EM, + int sLen); +int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, + const unsigned char *mHash, const EVP_MD *Hash, + int sLen); + +int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, + const EVP_MD *Hash, const EVP_MD *mgf1Hash, + const unsigned char *EM, int sLen); + +int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, + const unsigned char *mHash, + const EVP_MD *Hash, const EVP_MD *mgf1Hash, + int sLen); + +int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int RSA_set_ex_data(RSA *r, int idx, void *arg); +void *RSA_get_ex_data(const RSA *r, int idx); + +RSA *RSAPublicKey_dup(RSA *rsa); +RSA *RSAPrivateKey_dup(RSA *rsa); + +/* + * If this flag is set the RSA method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its responsibility to ensure the + * result is compliant. + */ + +# define RSA_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 +/* + * Application has decided PRNG is good enough to generate a key: don't + * check. + */ +# define RSA_FLAG_CHECKED 0x0800 + +/* 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. + */ +void ERR_load_RSA_strings(void); + +/* Error codes for the RSA functions. */ + +/* Function codes. */ +# define RSA_F_CHECK_PADDING_MD 140 +# define RSA_F_DO_RSA_PRINT 146 +# define RSA_F_INT_RSA_VERIFY 145 +# define RSA_F_MEMORY_LOCK 100 +# 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 154 +# define RSA_F_PKEY_RSA_VERIFYRECOVER 141 +# define RSA_F_RSA_ALGOR_TO_MD 157 +# define RSA_F_RSA_BUILTIN_KEYGEN 129 +# define RSA_F_RSA_CHECK_KEY 123 +# define RSA_F_RSA_CMS_DECRYPT 158 +# define RSA_F_RSA_EAY_PRIVATE_DECRYPT 101 +# define RSA_F_RSA_EAY_PRIVATE_ENCRYPT 102 +# define RSA_F_RSA_EAY_PUBLIC_DECRYPT 103 +# define RSA_F_RSA_EAY_PUBLIC_ENCRYPT 104 +# define RSA_F_RSA_GENERATE_KEY 105 +# define RSA_F_RSA_GENERATE_KEY_EX 155 +# define RSA_F_RSA_ITEM_VERIFY 156 +# define RSA_F_RSA_MEMORY_LOCK 130 +# define RSA_F_RSA_MGF1_TO_MD 159 +# define RSA_F_RSA_NEW_METHOD 106 +# define RSA_F_RSA_NULL 124 +# define RSA_F_RSA_NULL_MOD_EXP 131 +# 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_PADDING_ADD_NONE 107 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 160 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 148 +# 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 161 +# 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_PRIVATE_DECRYPT 150 +# define RSA_F_RSA_PRIVATE_ENCRYPT 151 +# define RSA_F_RSA_PRIV_DECODE 137 +# define RSA_F_RSA_PRIV_ENCODE 138 +# define RSA_F_RSA_PSS_TO_CTX 162 +# define RSA_F_RSA_PUBLIC_DECRYPT 152 +# define RSA_F_RSA_PUBLIC_ENCRYPT 153 +# 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 126 +# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 149 + +/* 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 166 +# 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 160 +# define RSA_R_INVALID_DIGEST_LENGTH 143 +# define RSA_R_INVALID_HEADER 137 +# define RSA_R_INVALID_KEYBITS 145 +# define RSA_R_INVALID_LABEL 161 +# define RSA_R_INVALID_MESSAGE_LENGTH 131 +# define RSA_R_INVALID_MGF1_MD 156 +# define RSA_R_INVALID_OAEP_PARAMETERS 162 +# 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_NON_FIPS_RSA_METHOD 157 +# 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_ALLOWED_IN_FIPS_MODE 158 +# 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 163 +# define RSA_R_UNKNOWN_MASK_DIGEST 151 +# define RSA_R_UNKNOWN_PADDING_TYPE 118 +# define RSA_R_UNKNOWN_PSS_DIGEST 152 +# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 164 +# define RSA_R_UNSUPPORTED_LABEL_SOURCE 165 +# 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 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/safestack.h b/Sources/OpenSSL/include/openssl/safestack.h new file mode 100644 index 0000000000..0cd2b495fe --- /dev/null +++ b/Sources/OpenSSL/include/openssl/safestack.h @@ -0,0 +1,2672 @@ +/* ==================================================================== + * Copyright (c) 1999 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_SAFESTACK_H +# define HEADER_SAFESTACK_H + +# include "stack.h" + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef CHECKED_PTR_OF +# define CHECKED_PTR_OF(type, p) \ + ((void*) (1 ? p : (type*)0)) +# endif + +/* + * In C++ we get problems because an explicit cast is needed from (void *) we + * use CHECKED_STACK_OF to ensure the correct type is passed in the macros + * below. + */ + +# define CHECKED_STACK_OF(type, p) \ + ((_STACK*) (1 ? p : (STACK_OF(type)*)0)) + +# define CHECKED_SK_COPY_FUNC(type, p) \ + ((void *(*)(void *)) ((1 ? p : (type *(*)(const type *))0))) + +# define CHECKED_SK_FREE_FUNC(type, p) \ + ((void (*)(void *)) ((1 ? p : (void (*)(type *))0))) + +# define CHECKED_SK_CMP_FUNC(type, p) \ + ((int (*)(const void *, const void *)) \ + ((1 ? p : (int (*)(const type * const *, const type * const *))0))) + +# define STACK_OF(type) struct stack_st_##type +# define PREDECLARE_STACK_OF(type) STACK_OF(type); + +# define DECLARE_STACK_OF(type) \ +STACK_OF(type) \ + { \ + _STACK stack; \ + }; +# define DECLARE_SPECIAL_STACK_OF(type, type2) \ +STACK_OF(type) \ + { \ + _STACK stack; \ + }; + +/* nada (obsolete in new safestack approach)*/ +# define IMPLEMENT_STACK_OF(type) + +/*- + * Strings are special: normally an lhash entry will point to a single + * (somewhat) mutable object. In the case of strings: + * + * a) Instead of a single char, there is an array of chars, NUL-terminated. + * b) The string may have be immutable. + * + * So, they need their own declarations. Especially important for + * type-checking tools, such as Deputy. + * + * In practice, however, it appears to be hard to have a const + * string. For now, I'm settling for dealing with the fact it is a + * string at all. + */ +typedef char *OPENSSL_STRING; + +typedef const char *OPENSSL_CSTRING; + +/* + * Confusingly, LHASH_OF(STRING) deals with char ** throughout, but + * STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned + * above, instead of a single char each entry is a NUL-terminated array of + * chars. So, we have to implement STRING specially for STACK_OF. This is + * dealt with in the autogenerated macros below. + */ + +DECLARE_SPECIAL_STACK_OF(OPENSSL_STRING, char) + +/* + * Similarly, we sometimes use a block of characters, NOT nul-terminated. + * These should also be distinguished from "normal" stacks. + */ +typedef void *OPENSSL_BLOCK; +DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) + +/* + * SKM_sk_... stack macros are internal to safestack.h: never use them + * directly, use sk__... instead + */ +# define SKM_sk_new(type, cmp) \ + ((STACK_OF(type) *)sk_new(CHECKED_SK_CMP_FUNC(type, cmp))) +# define SKM_sk_new_null(type) \ + ((STACK_OF(type) *)sk_new_null()) +# define SKM_sk_free(type, st) \ + sk_free(CHECKED_STACK_OF(type, st)) +# define SKM_sk_num(type, st) \ + sk_num(CHECKED_STACK_OF(type, st)) +# define SKM_sk_value(type, st,i) \ + ((type *)sk_value(CHECKED_STACK_OF(type, st), i)) +# define SKM_sk_set(type, st,i,val) \ + sk_set(CHECKED_STACK_OF(type, st), i, CHECKED_PTR_OF(type, val)) +# define SKM_sk_zero(type, st) \ + sk_zero(CHECKED_STACK_OF(type, st)) +# define SKM_sk_push(type, st, val) \ + sk_push(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) +# define SKM_sk_unshift(type, st, val) \ + sk_unshift(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) +# define SKM_sk_find(type, st, val) \ + sk_find(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) +# define SKM_sk_find_ex(type, st, val) \ + sk_find_ex(CHECKED_STACK_OF(type, st), \ + CHECKED_PTR_OF(type, val)) +# define SKM_sk_delete(type, st, i) \ + (type *)sk_delete(CHECKED_STACK_OF(type, st), i) +# define SKM_sk_delete_ptr(type, st, ptr) \ + (type *)sk_delete_ptr(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, ptr)) +# define SKM_sk_insert(type, st,val, i) \ + sk_insert(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val), i) +# define SKM_sk_set_cmp_func(type, st, cmp) \ + ((int (*)(const type * const *,const type * const *)) \ + sk_set_cmp_func(CHECKED_STACK_OF(type, st), CHECKED_SK_CMP_FUNC(type, cmp))) +# define SKM_sk_dup(type, st) \ + (STACK_OF(type) *)sk_dup(CHECKED_STACK_OF(type, st)) +# define SKM_sk_pop_free(type, st, free_func) \ + sk_pop_free(CHECKED_STACK_OF(type, st), CHECKED_SK_FREE_FUNC(type, free_func)) +# define SKM_sk_deep_copy(type, st, copy_func, free_func) \ + (STACK_OF(type) *)sk_deep_copy(CHECKED_STACK_OF(type, st), CHECKED_SK_COPY_FUNC(type, copy_func), CHECKED_SK_FREE_FUNC(type, free_func)) +# define SKM_sk_shift(type, st) \ + (type *)sk_shift(CHECKED_STACK_OF(type, st)) +# define SKM_sk_pop(type, st) \ + (type *)sk_pop(CHECKED_STACK_OF(type, st)) +# define SKM_sk_sort(type, st) \ + sk_sort(CHECKED_STACK_OF(type, st)) +# define SKM_sk_is_sorted(type, st) \ + sk_is_sorted(CHECKED_STACK_OF(type, st)) +# define SKM_ASN1_SET_OF_d2i(type, st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + (STACK_OF(type) *)d2i_ASN1_SET( \ + (STACK_OF(OPENSSL_BLOCK) **)CHECKED_PTR_OF(STACK_OF(type)*, st), \ + pp, length, \ + CHECKED_D2I_OF(type, d2i_func), \ + CHECKED_SK_FREE_FUNC(type, free_func), \ + ex_tag, ex_class) +# define SKM_ASN1_SET_OF_i2d(type, st, pp, i2d_func, ex_tag, ex_class, is_set) \ + i2d_ASN1_SET((STACK_OF(OPENSSL_BLOCK) *)CHECKED_STACK_OF(type, st), pp, \ + CHECKED_I2D_OF(type, i2d_func), \ + ex_tag, ex_class, is_set) +# define SKM_ASN1_seq_pack(type, st, i2d_func, buf, len) \ + ASN1_seq_pack(CHECKED_PTR_OF(STACK_OF(type), st), \ + CHECKED_I2D_OF(type, i2d_func), buf, len) +# define SKM_ASN1_seq_unpack(type, buf, len, d2i_func, free_func) \ + (STACK_OF(type) *)ASN1_seq_unpack(buf, len, CHECKED_D2I_OF(type, d2i_func), CHECKED_SK_FREE_FUNC(type, free_func)) +# define SKM_PKCS12_decrypt_d2i(type, algor, d2i_func, free_func, pass, passlen, oct, seq) \ + (STACK_OF(type) *)PKCS12_decrypt_d2i(algor, \ + CHECKED_D2I_OF(type, d2i_func), \ + CHECKED_SK_FREE_FUNC(type, free_func), \ + pass, passlen, oct, seq) +/* + * This block of defines is updated by util/mkstack.pl, please do not touch! + */ +# define sk_ACCESS_DESCRIPTION_new(cmp) SKM_sk_new(ACCESS_DESCRIPTION, (cmp)) +# define sk_ACCESS_DESCRIPTION_new_null() SKM_sk_new_null(ACCESS_DESCRIPTION) +# define sk_ACCESS_DESCRIPTION_free(st) SKM_sk_free(ACCESS_DESCRIPTION, (st)) +# define sk_ACCESS_DESCRIPTION_num(st) SKM_sk_num(ACCESS_DESCRIPTION, (st)) +# define sk_ACCESS_DESCRIPTION_value(st, i) SKM_sk_value(ACCESS_DESCRIPTION, (st), (i)) +# define sk_ACCESS_DESCRIPTION_set(st, i, val) SKM_sk_set(ACCESS_DESCRIPTION, (st), (i), (val)) +# define sk_ACCESS_DESCRIPTION_zero(st) SKM_sk_zero(ACCESS_DESCRIPTION, (st)) +# define sk_ACCESS_DESCRIPTION_push(st, val) SKM_sk_push(ACCESS_DESCRIPTION, (st), (val)) +# define sk_ACCESS_DESCRIPTION_unshift(st, val) SKM_sk_unshift(ACCESS_DESCRIPTION, (st), (val)) +# define sk_ACCESS_DESCRIPTION_find(st, val) SKM_sk_find(ACCESS_DESCRIPTION, (st), (val)) +# define sk_ACCESS_DESCRIPTION_find_ex(st, val) SKM_sk_find_ex(ACCESS_DESCRIPTION, (st), (val)) +# define sk_ACCESS_DESCRIPTION_delete(st, i) SKM_sk_delete(ACCESS_DESCRIPTION, (st), (i)) +# define sk_ACCESS_DESCRIPTION_delete_ptr(st, ptr) SKM_sk_delete_ptr(ACCESS_DESCRIPTION, (st), (ptr)) +# define sk_ACCESS_DESCRIPTION_insert(st, val, i) SKM_sk_insert(ACCESS_DESCRIPTION, (st), (val), (i)) +# define sk_ACCESS_DESCRIPTION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ACCESS_DESCRIPTION, (st), (cmp)) +# define sk_ACCESS_DESCRIPTION_dup(st) SKM_sk_dup(ACCESS_DESCRIPTION, st) +# define sk_ACCESS_DESCRIPTION_pop_free(st, free_func) SKM_sk_pop_free(ACCESS_DESCRIPTION, (st), (free_func)) +# define sk_ACCESS_DESCRIPTION_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ACCESS_DESCRIPTION, (st), (copy_func), (free_func)) +# define sk_ACCESS_DESCRIPTION_shift(st) SKM_sk_shift(ACCESS_DESCRIPTION, (st)) +# define sk_ACCESS_DESCRIPTION_pop(st) SKM_sk_pop(ACCESS_DESCRIPTION, (st)) +# define sk_ACCESS_DESCRIPTION_sort(st) SKM_sk_sort(ACCESS_DESCRIPTION, (st)) +# define sk_ACCESS_DESCRIPTION_is_sorted(st) SKM_sk_is_sorted(ACCESS_DESCRIPTION, (st)) +# define sk_ASIdOrRange_new(cmp) SKM_sk_new(ASIdOrRange, (cmp)) +# define sk_ASIdOrRange_new_null() SKM_sk_new_null(ASIdOrRange) +# define sk_ASIdOrRange_free(st) SKM_sk_free(ASIdOrRange, (st)) +# define sk_ASIdOrRange_num(st) SKM_sk_num(ASIdOrRange, (st)) +# define sk_ASIdOrRange_value(st, i) SKM_sk_value(ASIdOrRange, (st), (i)) +# define sk_ASIdOrRange_set(st, i, val) SKM_sk_set(ASIdOrRange, (st), (i), (val)) +# define sk_ASIdOrRange_zero(st) SKM_sk_zero(ASIdOrRange, (st)) +# define sk_ASIdOrRange_push(st, val) SKM_sk_push(ASIdOrRange, (st), (val)) +# define sk_ASIdOrRange_unshift(st, val) SKM_sk_unshift(ASIdOrRange, (st), (val)) +# define sk_ASIdOrRange_find(st, val) SKM_sk_find(ASIdOrRange, (st), (val)) +# define sk_ASIdOrRange_find_ex(st, val) SKM_sk_find_ex(ASIdOrRange, (st), (val)) +# define sk_ASIdOrRange_delete(st, i) SKM_sk_delete(ASIdOrRange, (st), (i)) +# define sk_ASIdOrRange_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASIdOrRange, (st), (ptr)) +# define sk_ASIdOrRange_insert(st, val, i) SKM_sk_insert(ASIdOrRange, (st), (val), (i)) +# define sk_ASIdOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASIdOrRange, (st), (cmp)) +# define sk_ASIdOrRange_dup(st) SKM_sk_dup(ASIdOrRange, st) +# define sk_ASIdOrRange_pop_free(st, free_func) SKM_sk_pop_free(ASIdOrRange, (st), (free_func)) +# define sk_ASIdOrRange_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASIdOrRange, (st), (copy_func), (free_func)) +# define sk_ASIdOrRange_shift(st) SKM_sk_shift(ASIdOrRange, (st)) +# define sk_ASIdOrRange_pop(st) SKM_sk_pop(ASIdOrRange, (st)) +# define sk_ASIdOrRange_sort(st) SKM_sk_sort(ASIdOrRange, (st)) +# define sk_ASIdOrRange_is_sorted(st) SKM_sk_is_sorted(ASIdOrRange, (st)) +# define sk_ASN1_GENERALSTRING_new(cmp) SKM_sk_new(ASN1_GENERALSTRING, (cmp)) +# define sk_ASN1_GENERALSTRING_new_null() SKM_sk_new_null(ASN1_GENERALSTRING) +# define sk_ASN1_GENERALSTRING_free(st) SKM_sk_free(ASN1_GENERALSTRING, (st)) +# define sk_ASN1_GENERALSTRING_num(st) SKM_sk_num(ASN1_GENERALSTRING, (st)) +# define sk_ASN1_GENERALSTRING_value(st, i) SKM_sk_value(ASN1_GENERALSTRING, (st), (i)) +# define sk_ASN1_GENERALSTRING_set(st, i, val) SKM_sk_set(ASN1_GENERALSTRING, (st), (i), (val)) +# define sk_ASN1_GENERALSTRING_zero(st) SKM_sk_zero(ASN1_GENERALSTRING, (st)) +# define sk_ASN1_GENERALSTRING_push(st, val) SKM_sk_push(ASN1_GENERALSTRING, (st), (val)) +# define sk_ASN1_GENERALSTRING_unshift(st, val) SKM_sk_unshift(ASN1_GENERALSTRING, (st), (val)) +# define sk_ASN1_GENERALSTRING_find(st, val) SKM_sk_find(ASN1_GENERALSTRING, (st), (val)) +# define sk_ASN1_GENERALSTRING_find_ex(st, val) SKM_sk_find_ex(ASN1_GENERALSTRING, (st), (val)) +# define sk_ASN1_GENERALSTRING_delete(st, i) SKM_sk_delete(ASN1_GENERALSTRING, (st), (i)) +# define sk_ASN1_GENERALSTRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_GENERALSTRING, (st), (ptr)) +# define sk_ASN1_GENERALSTRING_insert(st, val, i) SKM_sk_insert(ASN1_GENERALSTRING, (st), (val), (i)) +# define sk_ASN1_GENERALSTRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_GENERALSTRING, (st), (cmp)) +# define sk_ASN1_GENERALSTRING_dup(st) SKM_sk_dup(ASN1_GENERALSTRING, st) +# define sk_ASN1_GENERALSTRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_GENERALSTRING, (st), (free_func)) +# define sk_ASN1_GENERALSTRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_GENERALSTRING, (st), (copy_func), (free_func)) +# define sk_ASN1_GENERALSTRING_shift(st) SKM_sk_shift(ASN1_GENERALSTRING, (st)) +# define sk_ASN1_GENERALSTRING_pop(st) SKM_sk_pop(ASN1_GENERALSTRING, (st)) +# define sk_ASN1_GENERALSTRING_sort(st) SKM_sk_sort(ASN1_GENERALSTRING, (st)) +# define sk_ASN1_GENERALSTRING_is_sorted(st) SKM_sk_is_sorted(ASN1_GENERALSTRING, (st)) +# define sk_ASN1_INTEGER_new(cmp) SKM_sk_new(ASN1_INTEGER, (cmp)) +# define sk_ASN1_INTEGER_new_null() SKM_sk_new_null(ASN1_INTEGER) +# define sk_ASN1_INTEGER_free(st) SKM_sk_free(ASN1_INTEGER, (st)) +# define sk_ASN1_INTEGER_num(st) SKM_sk_num(ASN1_INTEGER, (st)) +# define sk_ASN1_INTEGER_value(st, i) SKM_sk_value(ASN1_INTEGER, (st), (i)) +# define sk_ASN1_INTEGER_set(st, i, val) SKM_sk_set(ASN1_INTEGER, (st), (i), (val)) +# define sk_ASN1_INTEGER_zero(st) SKM_sk_zero(ASN1_INTEGER, (st)) +# define sk_ASN1_INTEGER_push(st, val) SKM_sk_push(ASN1_INTEGER, (st), (val)) +# define sk_ASN1_INTEGER_unshift(st, val) SKM_sk_unshift(ASN1_INTEGER, (st), (val)) +# define sk_ASN1_INTEGER_find(st, val) SKM_sk_find(ASN1_INTEGER, (st), (val)) +# define sk_ASN1_INTEGER_find_ex(st, val) SKM_sk_find_ex(ASN1_INTEGER, (st), (val)) +# define sk_ASN1_INTEGER_delete(st, i) SKM_sk_delete(ASN1_INTEGER, (st), (i)) +# define sk_ASN1_INTEGER_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_INTEGER, (st), (ptr)) +# define sk_ASN1_INTEGER_insert(st, val, i) SKM_sk_insert(ASN1_INTEGER, (st), (val), (i)) +# define sk_ASN1_INTEGER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_INTEGER, (st), (cmp)) +# define sk_ASN1_INTEGER_dup(st) SKM_sk_dup(ASN1_INTEGER, st) +# define sk_ASN1_INTEGER_pop_free(st, free_func) SKM_sk_pop_free(ASN1_INTEGER, (st), (free_func)) +# define sk_ASN1_INTEGER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_INTEGER, (st), (copy_func), (free_func)) +# define sk_ASN1_INTEGER_shift(st) SKM_sk_shift(ASN1_INTEGER, (st)) +# define sk_ASN1_INTEGER_pop(st) SKM_sk_pop(ASN1_INTEGER, (st)) +# define sk_ASN1_INTEGER_sort(st) SKM_sk_sort(ASN1_INTEGER, (st)) +# define sk_ASN1_INTEGER_is_sorted(st) SKM_sk_is_sorted(ASN1_INTEGER, (st)) +# define sk_ASN1_OBJECT_new(cmp) SKM_sk_new(ASN1_OBJECT, (cmp)) +# define sk_ASN1_OBJECT_new_null() SKM_sk_new_null(ASN1_OBJECT) +# define sk_ASN1_OBJECT_free(st) SKM_sk_free(ASN1_OBJECT, (st)) +# define sk_ASN1_OBJECT_num(st) SKM_sk_num(ASN1_OBJECT, (st)) +# define sk_ASN1_OBJECT_value(st, i) SKM_sk_value(ASN1_OBJECT, (st), (i)) +# define sk_ASN1_OBJECT_set(st, i, val) SKM_sk_set(ASN1_OBJECT, (st), (i), (val)) +# define sk_ASN1_OBJECT_zero(st) SKM_sk_zero(ASN1_OBJECT, (st)) +# define sk_ASN1_OBJECT_push(st, val) SKM_sk_push(ASN1_OBJECT, (st), (val)) +# define sk_ASN1_OBJECT_unshift(st, val) SKM_sk_unshift(ASN1_OBJECT, (st), (val)) +# define sk_ASN1_OBJECT_find(st, val) SKM_sk_find(ASN1_OBJECT, (st), (val)) +# define sk_ASN1_OBJECT_find_ex(st, val) SKM_sk_find_ex(ASN1_OBJECT, (st), (val)) +# define sk_ASN1_OBJECT_delete(st, i) SKM_sk_delete(ASN1_OBJECT, (st), (i)) +# define sk_ASN1_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_OBJECT, (st), (ptr)) +# define sk_ASN1_OBJECT_insert(st, val, i) SKM_sk_insert(ASN1_OBJECT, (st), (val), (i)) +# define sk_ASN1_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_OBJECT, (st), (cmp)) +# define sk_ASN1_OBJECT_dup(st) SKM_sk_dup(ASN1_OBJECT, st) +# define sk_ASN1_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(ASN1_OBJECT, (st), (free_func)) +# define sk_ASN1_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_OBJECT, (st), (copy_func), (free_func)) +# define sk_ASN1_OBJECT_shift(st) SKM_sk_shift(ASN1_OBJECT, (st)) +# define sk_ASN1_OBJECT_pop(st) SKM_sk_pop(ASN1_OBJECT, (st)) +# define sk_ASN1_OBJECT_sort(st) SKM_sk_sort(ASN1_OBJECT, (st)) +# define sk_ASN1_OBJECT_is_sorted(st) SKM_sk_is_sorted(ASN1_OBJECT, (st)) +# define sk_ASN1_STRING_TABLE_new(cmp) SKM_sk_new(ASN1_STRING_TABLE, (cmp)) +# define sk_ASN1_STRING_TABLE_new_null() SKM_sk_new_null(ASN1_STRING_TABLE) +# define sk_ASN1_STRING_TABLE_free(st) SKM_sk_free(ASN1_STRING_TABLE, (st)) +# define sk_ASN1_STRING_TABLE_num(st) SKM_sk_num(ASN1_STRING_TABLE, (st)) +# define sk_ASN1_STRING_TABLE_value(st, i) SKM_sk_value(ASN1_STRING_TABLE, (st), (i)) +# define sk_ASN1_STRING_TABLE_set(st, i, val) SKM_sk_set(ASN1_STRING_TABLE, (st), (i), (val)) +# define sk_ASN1_STRING_TABLE_zero(st) SKM_sk_zero(ASN1_STRING_TABLE, (st)) +# define sk_ASN1_STRING_TABLE_push(st, val) SKM_sk_push(ASN1_STRING_TABLE, (st), (val)) +# define sk_ASN1_STRING_TABLE_unshift(st, val) SKM_sk_unshift(ASN1_STRING_TABLE, (st), (val)) +# define sk_ASN1_STRING_TABLE_find(st, val) SKM_sk_find(ASN1_STRING_TABLE, (st), (val)) +# define sk_ASN1_STRING_TABLE_find_ex(st, val) SKM_sk_find_ex(ASN1_STRING_TABLE, (st), (val)) +# define sk_ASN1_STRING_TABLE_delete(st, i) SKM_sk_delete(ASN1_STRING_TABLE, (st), (i)) +# define sk_ASN1_STRING_TABLE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_STRING_TABLE, (st), (ptr)) +# define sk_ASN1_STRING_TABLE_insert(st, val, i) SKM_sk_insert(ASN1_STRING_TABLE, (st), (val), (i)) +# define sk_ASN1_STRING_TABLE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_STRING_TABLE, (st), (cmp)) +# define sk_ASN1_STRING_TABLE_dup(st) SKM_sk_dup(ASN1_STRING_TABLE, st) +# define sk_ASN1_STRING_TABLE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_STRING_TABLE, (st), (free_func)) +# define sk_ASN1_STRING_TABLE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_STRING_TABLE, (st), (copy_func), (free_func)) +# define sk_ASN1_STRING_TABLE_shift(st) SKM_sk_shift(ASN1_STRING_TABLE, (st)) +# define sk_ASN1_STRING_TABLE_pop(st) SKM_sk_pop(ASN1_STRING_TABLE, (st)) +# define sk_ASN1_STRING_TABLE_sort(st) SKM_sk_sort(ASN1_STRING_TABLE, (st)) +# define sk_ASN1_STRING_TABLE_is_sorted(st) SKM_sk_is_sorted(ASN1_STRING_TABLE, (st)) +# define sk_ASN1_TYPE_new(cmp) SKM_sk_new(ASN1_TYPE, (cmp)) +# define sk_ASN1_TYPE_new_null() SKM_sk_new_null(ASN1_TYPE) +# define sk_ASN1_TYPE_free(st) SKM_sk_free(ASN1_TYPE, (st)) +# define sk_ASN1_TYPE_num(st) SKM_sk_num(ASN1_TYPE, (st)) +# define sk_ASN1_TYPE_value(st, i) SKM_sk_value(ASN1_TYPE, (st), (i)) +# define sk_ASN1_TYPE_set(st, i, val) SKM_sk_set(ASN1_TYPE, (st), (i), (val)) +# define sk_ASN1_TYPE_zero(st) SKM_sk_zero(ASN1_TYPE, (st)) +# define sk_ASN1_TYPE_push(st, val) SKM_sk_push(ASN1_TYPE, (st), (val)) +# define sk_ASN1_TYPE_unshift(st, val) SKM_sk_unshift(ASN1_TYPE, (st), (val)) +# define sk_ASN1_TYPE_find(st, val) SKM_sk_find(ASN1_TYPE, (st), (val)) +# define sk_ASN1_TYPE_find_ex(st, val) SKM_sk_find_ex(ASN1_TYPE, (st), (val)) +# define sk_ASN1_TYPE_delete(st, i) SKM_sk_delete(ASN1_TYPE, (st), (i)) +# define sk_ASN1_TYPE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_TYPE, (st), (ptr)) +# define sk_ASN1_TYPE_insert(st, val, i) SKM_sk_insert(ASN1_TYPE, (st), (val), (i)) +# define sk_ASN1_TYPE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_TYPE, (st), (cmp)) +# define sk_ASN1_TYPE_dup(st) SKM_sk_dup(ASN1_TYPE, st) +# define sk_ASN1_TYPE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_TYPE, (st), (free_func)) +# define sk_ASN1_TYPE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_TYPE, (st), (copy_func), (free_func)) +# define sk_ASN1_TYPE_shift(st) SKM_sk_shift(ASN1_TYPE, (st)) +# define sk_ASN1_TYPE_pop(st) SKM_sk_pop(ASN1_TYPE, (st)) +# define sk_ASN1_TYPE_sort(st) SKM_sk_sort(ASN1_TYPE, (st)) +# define sk_ASN1_TYPE_is_sorted(st) SKM_sk_is_sorted(ASN1_TYPE, (st)) +# define sk_ASN1_UTF8STRING_new(cmp) SKM_sk_new(ASN1_UTF8STRING, (cmp)) +# define sk_ASN1_UTF8STRING_new_null() SKM_sk_new_null(ASN1_UTF8STRING) +# define sk_ASN1_UTF8STRING_free(st) SKM_sk_free(ASN1_UTF8STRING, (st)) +# define sk_ASN1_UTF8STRING_num(st) SKM_sk_num(ASN1_UTF8STRING, (st)) +# define sk_ASN1_UTF8STRING_value(st, i) SKM_sk_value(ASN1_UTF8STRING, (st), (i)) +# define sk_ASN1_UTF8STRING_set(st, i, val) SKM_sk_set(ASN1_UTF8STRING, (st), (i), (val)) +# define sk_ASN1_UTF8STRING_zero(st) SKM_sk_zero(ASN1_UTF8STRING, (st)) +# define sk_ASN1_UTF8STRING_push(st, val) SKM_sk_push(ASN1_UTF8STRING, (st), (val)) +# define sk_ASN1_UTF8STRING_unshift(st, val) SKM_sk_unshift(ASN1_UTF8STRING, (st), (val)) +# define sk_ASN1_UTF8STRING_find(st, val) SKM_sk_find(ASN1_UTF8STRING, (st), (val)) +# define sk_ASN1_UTF8STRING_find_ex(st, val) SKM_sk_find_ex(ASN1_UTF8STRING, (st), (val)) +# define sk_ASN1_UTF8STRING_delete(st, i) SKM_sk_delete(ASN1_UTF8STRING, (st), (i)) +# define sk_ASN1_UTF8STRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_UTF8STRING, (st), (ptr)) +# define sk_ASN1_UTF8STRING_insert(st, val, i) SKM_sk_insert(ASN1_UTF8STRING, (st), (val), (i)) +# define sk_ASN1_UTF8STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_UTF8STRING, (st), (cmp)) +# define sk_ASN1_UTF8STRING_dup(st) SKM_sk_dup(ASN1_UTF8STRING, st) +# define sk_ASN1_UTF8STRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_UTF8STRING, (st), (free_func)) +# define sk_ASN1_UTF8STRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_UTF8STRING, (st), (copy_func), (free_func)) +# define sk_ASN1_UTF8STRING_shift(st) SKM_sk_shift(ASN1_UTF8STRING, (st)) +# define sk_ASN1_UTF8STRING_pop(st) SKM_sk_pop(ASN1_UTF8STRING, (st)) +# define sk_ASN1_UTF8STRING_sort(st) SKM_sk_sort(ASN1_UTF8STRING, (st)) +# define sk_ASN1_UTF8STRING_is_sorted(st) SKM_sk_is_sorted(ASN1_UTF8STRING, (st)) +# define sk_ASN1_VALUE_new(cmp) SKM_sk_new(ASN1_VALUE, (cmp)) +# define sk_ASN1_VALUE_new_null() SKM_sk_new_null(ASN1_VALUE) +# define sk_ASN1_VALUE_free(st) SKM_sk_free(ASN1_VALUE, (st)) +# define sk_ASN1_VALUE_num(st) SKM_sk_num(ASN1_VALUE, (st)) +# define sk_ASN1_VALUE_value(st, i) SKM_sk_value(ASN1_VALUE, (st), (i)) +# define sk_ASN1_VALUE_set(st, i, val) SKM_sk_set(ASN1_VALUE, (st), (i), (val)) +# define sk_ASN1_VALUE_zero(st) SKM_sk_zero(ASN1_VALUE, (st)) +# define sk_ASN1_VALUE_push(st, val) SKM_sk_push(ASN1_VALUE, (st), (val)) +# define sk_ASN1_VALUE_unshift(st, val) SKM_sk_unshift(ASN1_VALUE, (st), (val)) +# define sk_ASN1_VALUE_find(st, val) SKM_sk_find(ASN1_VALUE, (st), (val)) +# define sk_ASN1_VALUE_find_ex(st, val) SKM_sk_find_ex(ASN1_VALUE, (st), (val)) +# define sk_ASN1_VALUE_delete(st, i) SKM_sk_delete(ASN1_VALUE, (st), (i)) +# define sk_ASN1_VALUE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_VALUE, (st), (ptr)) +# define sk_ASN1_VALUE_insert(st, val, i) SKM_sk_insert(ASN1_VALUE, (st), (val), (i)) +# define sk_ASN1_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_VALUE, (st), (cmp)) +# define sk_ASN1_VALUE_dup(st) SKM_sk_dup(ASN1_VALUE, st) +# define sk_ASN1_VALUE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_VALUE, (st), (free_func)) +# define sk_ASN1_VALUE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_VALUE, (st), (copy_func), (free_func)) +# define sk_ASN1_VALUE_shift(st) SKM_sk_shift(ASN1_VALUE, (st)) +# define sk_ASN1_VALUE_pop(st) SKM_sk_pop(ASN1_VALUE, (st)) +# define sk_ASN1_VALUE_sort(st) SKM_sk_sort(ASN1_VALUE, (st)) +# define sk_ASN1_VALUE_is_sorted(st) SKM_sk_is_sorted(ASN1_VALUE, (st)) +# define sk_BIO_new(cmp) SKM_sk_new(BIO, (cmp)) +# define sk_BIO_new_null() SKM_sk_new_null(BIO) +# define sk_BIO_free(st) SKM_sk_free(BIO, (st)) +# define sk_BIO_num(st) SKM_sk_num(BIO, (st)) +# define sk_BIO_value(st, i) SKM_sk_value(BIO, (st), (i)) +# define sk_BIO_set(st, i, val) SKM_sk_set(BIO, (st), (i), (val)) +# define sk_BIO_zero(st) SKM_sk_zero(BIO, (st)) +# define sk_BIO_push(st, val) SKM_sk_push(BIO, (st), (val)) +# define sk_BIO_unshift(st, val) SKM_sk_unshift(BIO, (st), (val)) +# define sk_BIO_find(st, val) SKM_sk_find(BIO, (st), (val)) +# define sk_BIO_find_ex(st, val) SKM_sk_find_ex(BIO, (st), (val)) +# define sk_BIO_delete(st, i) SKM_sk_delete(BIO, (st), (i)) +# define sk_BIO_delete_ptr(st, ptr) SKM_sk_delete_ptr(BIO, (st), (ptr)) +# define sk_BIO_insert(st, val, i) SKM_sk_insert(BIO, (st), (val), (i)) +# define sk_BIO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BIO, (st), (cmp)) +# define sk_BIO_dup(st) SKM_sk_dup(BIO, st) +# define sk_BIO_pop_free(st, free_func) SKM_sk_pop_free(BIO, (st), (free_func)) +# define sk_BIO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BIO, (st), (copy_func), (free_func)) +# define sk_BIO_shift(st) SKM_sk_shift(BIO, (st)) +# define sk_BIO_pop(st) SKM_sk_pop(BIO, (st)) +# define sk_BIO_sort(st) SKM_sk_sort(BIO, (st)) +# define sk_BIO_is_sorted(st) SKM_sk_is_sorted(BIO, (st)) +# define sk_BY_DIR_ENTRY_new(cmp) SKM_sk_new(BY_DIR_ENTRY, (cmp)) +# define sk_BY_DIR_ENTRY_new_null() SKM_sk_new_null(BY_DIR_ENTRY) +# define sk_BY_DIR_ENTRY_free(st) SKM_sk_free(BY_DIR_ENTRY, (st)) +# define sk_BY_DIR_ENTRY_num(st) SKM_sk_num(BY_DIR_ENTRY, (st)) +# define sk_BY_DIR_ENTRY_value(st, i) SKM_sk_value(BY_DIR_ENTRY, (st), (i)) +# define sk_BY_DIR_ENTRY_set(st, i, val) SKM_sk_set(BY_DIR_ENTRY, (st), (i), (val)) +# define sk_BY_DIR_ENTRY_zero(st) SKM_sk_zero(BY_DIR_ENTRY, (st)) +# define sk_BY_DIR_ENTRY_push(st, val) SKM_sk_push(BY_DIR_ENTRY, (st), (val)) +# define sk_BY_DIR_ENTRY_unshift(st, val) SKM_sk_unshift(BY_DIR_ENTRY, (st), (val)) +# define sk_BY_DIR_ENTRY_find(st, val) SKM_sk_find(BY_DIR_ENTRY, (st), (val)) +# define sk_BY_DIR_ENTRY_find_ex(st, val) SKM_sk_find_ex(BY_DIR_ENTRY, (st), (val)) +# define sk_BY_DIR_ENTRY_delete(st, i) SKM_sk_delete(BY_DIR_ENTRY, (st), (i)) +# define sk_BY_DIR_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(BY_DIR_ENTRY, (st), (ptr)) +# define sk_BY_DIR_ENTRY_insert(st, val, i) SKM_sk_insert(BY_DIR_ENTRY, (st), (val), (i)) +# define sk_BY_DIR_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_ENTRY, (st), (cmp)) +# define sk_BY_DIR_ENTRY_dup(st) SKM_sk_dup(BY_DIR_ENTRY, st) +# define sk_BY_DIR_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_ENTRY, (st), (free_func)) +# define sk_BY_DIR_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BY_DIR_ENTRY, (st), (copy_func), (free_func)) +# define sk_BY_DIR_ENTRY_shift(st) SKM_sk_shift(BY_DIR_ENTRY, (st)) +# define sk_BY_DIR_ENTRY_pop(st) SKM_sk_pop(BY_DIR_ENTRY, (st)) +# define sk_BY_DIR_ENTRY_sort(st) SKM_sk_sort(BY_DIR_ENTRY, (st)) +# define sk_BY_DIR_ENTRY_is_sorted(st) SKM_sk_is_sorted(BY_DIR_ENTRY, (st)) +# define sk_BY_DIR_HASH_new(cmp) SKM_sk_new(BY_DIR_HASH, (cmp)) +# define sk_BY_DIR_HASH_new_null() SKM_sk_new_null(BY_DIR_HASH) +# define sk_BY_DIR_HASH_free(st) SKM_sk_free(BY_DIR_HASH, (st)) +# define sk_BY_DIR_HASH_num(st) SKM_sk_num(BY_DIR_HASH, (st)) +# define sk_BY_DIR_HASH_value(st, i) SKM_sk_value(BY_DIR_HASH, (st), (i)) +# define sk_BY_DIR_HASH_set(st, i, val) SKM_sk_set(BY_DIR_HASH, (st), (i), (val)) +# define sk_BY_DIR_HASH_zero(st) SKM_sk_zero(BY_DIR_HASH, (st)) +# define sk_BY_DIR_HASH_push(st, val) SKM_sk_push(BY_DIR_HASH, (st), (val)) +# define sk_BY_DIR_HASH_unshift(st, val) SKM_sk_unshift(BY_DIR_HASH, (st), (val)) +# define sk_BY_DIR_HASH_find(st, val) SKM_sk_find(BY_DIR_HASH, (st), (val)) +# define sk_BY_DIR_HASH_find_ex(st, val) SKM_sk_find_ex(BY_DIR_HASH, (st), (val)) +# define sk_BY_DIR_HASH_delete(st, i) SKM_sk_delete(BY_DIR_HASH, (st), (i)) +# define sk_BY_DIR_HASH_delete_ptr(st, ptr) SKM_sk_delete_ptr(BY_DIR_HASH, (st), (ptr)) +# define sk_BY_DIR_HASH_insert(st, val, i) SKM_sk_insert(BY_DIR_HASH, (st), (val), (i)) +# define sk_BY_DIR_HASH_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_HASH, (st), (cmp)) +# define sk_BY_DIR_HASH_dup(st) SKM_sk_dup(BY_DIR_HASH, st) +# define sk_BY_DIR_HASH_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_HASH, (st), (free_func)) +# define sk_BY_DIR_HASH_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BY_DIR_HASH, (st), (copy_func), (free_func)) +# define sk_BY_DIR_HASH_shift(st) SKM_sk_shift(BY_DIR_HASH, (st)) +# define sk_BY_DIR_HASH_pop(st) SKM_sk_pop(BY_DIR_HASH, (st)) +# define sk_BY_DIR_HASH_sort(st) SKM_sk_sort(BY_DIR_HASH, (st)) +# define sk_BY_DIR_HASH_is_sorted(st) SKM_sk_is_sorted(BY_DIR_HASH, (st)) +# define sk_CMS_CertificateChoices_new(cmp) SKM_sk_new(CMS_CertificateChoices, (cmp)) +# define sk_CMS_CertificateChoices_new_null() SKM_sk_new_null(CMS_CertificateChoices) +# define sk_CMS_CertificateChoices_free(st) SKM_sk_free(CMS_CertificateChoices, (st)) +# define sk_CMS_CertificateChoices_num(st) SKM_sk_num(CMS_CertificateChoices, (st)) +# define sk_CMS_CertificateChoices_value(st, i) SKM_sk_value(CMS_CertificateChoices, (st), (i)) +# define sk_CMS_CertificateChoices_set(st, i, val) SKM_sk_set(CMS_CertificateChoices, (st), (i), (val)) +# define sk_CMS_CertificateChoices_zero(st) SKM_sk_zero(CMS_CertificateChoices, (st)) +# define sk_CMS_CertificateChoices_push(st, val) SKM_sk_push(CMS_CertificateChoices, (st), (val)) +# define sk_CMS_CertificateChoices_unshift(st, val) SKM_sk_unshift(CMS_CertificateChoices, (st), (val)) +# define sk_CMS_CertificateChoices_find(st, val) SKM_sk_find(CMS_CertificateChoices, (st), (val)) +# define sk_CMS_CertificateChoices_find_ex(st, val) SKM_sk_find_ex(CMS_CertificateChoices, (st), (val)) +# define sk_CMS_CertificateChoices_delete(st, i) SKM_sk_delete(CMS_CertificateChoices, (st), (i)) +# define sk_CMS_CertificateChoices_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_CertificateChoices, (st), (ptr)) +# define sk_CMS_CertificateChoices_insert(st, val, i) SKM_sk_insert(CMS_CertificateChoices, (st), (val), (i)) +# define sk_CMS_CertificateChoices_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_CertificateChoices, (st), (cmp)) +# define sk_CMS_CertificateChoices_dup(st) SKM_sk_dup(CMS_CertificateChoices, st) +# define sk_CMS_CertificateChoices_pop_free(st, free_func) SKM_sk_pop_free(CMS_CertificateChoices, (st), (free_func)) +# define sk_CMS_CertificateChoices_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_CertificateChoices, (st), (copy_func), (free_func)) +# define sk_CMS_CertificateChoices_shift(st) SKM_sk_shift(CMS_CertificateChoices, (st)) +# define sk_CMS_CertificateChoices_pop(st) SKM_sk_pop(CMS_CertificateChoices, (st)) +# define sk_CMS_CertificateChoices_sort(st) SKM_sk_sort(CMS_CertificateChoices, (st)) +# define sk_CMS_CertificateChoices_is_sorted(st) SKM_sk_is_sorted(CMS_CertificateChoices, (st)) +# define sk_CMS_RecipientEncryptedKey_new(cmp) SKM_sk_new(CMS_RecipientEncryptedKey, (cmp)) +# define sk_CMS_RecipientEncryptedKey_new_null() SKM_sk_new_null(CMS_RecipientEncryptedKey) +# define sk_CMS_RecipientEncryptedKey_free(st) SKM_sk_free(CMS_RecipientEncryptedKey, (st)) +# define sk_CMS_RecipientEncryptedKey_num(st) SKM_sk_num(CMS_RecipientEncryptedKey, (st)) +# define sk_CMS_RecipientEncryptedKey_value(st, i) SKM_sk_value(CMS_RecipientEncryptedKey, (st), (i)) +# define sk_CMS_RecipientEncryptedKey_set(st, i, val) SKM_sk_set(CMS_RecipientEncryptedKey, (st), (i), (val)) +# define sk_CMS_RecipientEncryptedKey_zero(st) SKM_sk_zero(CMS_RecipientEncryptedKey, (st)) +# define sk_CMS_RecipientEncryptedKey_push(st, val) SKM_sk_push(CMS_RecipientEncryptedKey, (st), (val)) +# define sk_CMS_RecipientEncryptedKey_unshift(st, val) SKM_sk_unshift(CMS_RecipientEncryptedKey, (st), (val)) +# define sk_CMS_RecipientEncryptedKey_find(st, val) SKM_sk_find(CMS_RecipientEncryptedKey, (st), (val)) +# define sk_CMS_RecipientEncryptedKey_find_ex(st, val) SKM_sk_find_ex(CMS_RecipientEncryptedKey, (st), (val)) +# define sk_CMS_RecipientEncryptedKey_delete(st, i) SKM_sk_delete(CMS_RecipientEncryptedKey, (st), (i)) +# define sk_CMS_RecipientEncryptedKey_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RecipientEncryptedKey, (st), (ptr)) +# define sk_CMS_RecipientEncryptedKey_insert(st, val, i) SKM_sk_insert(CMS_RecipientEncryptedKey, (st), (val), (i)) +# define sk_CMS_RecipientEncryptedKey_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RecipientEncryptedKey, (st), (cmp)) +# define sk_CMS_RecipientEncryptedKey_dup(st) SKM_sk_dup(CMS_RecipientEncryptedKey, st) +# define sk_CMS_RecipientEncryptedKey_pop_free(st, free_func) SKM_sk_pop_free(CMS_RecipientEncryptedKey, (st), (free_func)) +# define sk_CMS_RecipientEncryptedKey_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RecipientEncryptedKey, (st), (copy_func), (free_func)) +# define sk_CMS_RecipientEncryptedKey_shift(st) SKM_sk_shift(CMS_RecipientEncryptedKey, (st)) +# define sk_CMS_RecipientEncryptedKey_pop(st) SKM_sk_pop(CMS_RecipientEncryptedKey, (st)) +# define sk_CMS_RecipientEncryptedKey_sort(st) SKM_sk_sort(CMS_RecipientEncryptedKey, (st)) +# define sk_CMS_RecipientEncryptedKey_is_sorted(st) SKM_sk_is_sorted(CMS_RecipientEncryptedKey, (st)) +# define sk_CMS_RecipientInfo_new(cmp) SKM_sk_new(CMS_RecipientInfo, (cmp)) +# define sk_CMS_RecipientInfo_new_null() SKM_sk_new_null(CMS_RecipientInfo) +# define sk_CMS_RecipientInfo_free(st) SKM_sk_free(CMS_RecipientInfo, (st)) +# define sk_CMS_RecipientInfo_num(st) SKM_sk_num(CMS_RecipientInfo, (st)) +# define sk_CMS_RecipientInfo_value(st, i) SKM_sk_value(CMS_RecipientInfo, (st), (i)) +# define sk_CMS_RecipientInfo_set(st, i, val) SKM_sk_set(CMS_RecipientInfo, (st), (i), (val)) +# define sk_CMS_RecipientInfo_zero(st) SKM_sk_zero(CMS_RecipientInfo, (st)) +# define sk_CMS_RecipientInfo_push(st, val) SKM_sk_push(CMS_RecipientInfo, (st), (val)) +# define sk_CMS_RecipientInfo_unshift(st, val) SKM_sk_unshift(CMS_RecipientInfo, (st), (val)) +# define sk_CMS_RecipientInfo_find(st, val) SKM_sk_find(CMS_RecipientInfo, (st), (val)) +# define sk_CMS_RecipientInfo_find_ex(st, val) SKM_sk_find_ex(CMS_RecipientInfo, (st), (val)) +# define sk_CMS_RecipientInfo_delete(st, i) SKM_sk_delete(CMS_RecipientInfo, (st), (i)) +# define sk_CMS_RecipientInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RecipientInfo, (st), (ptr)) +# define sk_CMS_RecipientInfo_insert(st, val, i) SKM_sk_insert(CMS_RecipientInfo, (st), (val), (i)) +# define sk_CMS_RecipientInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RecipientInfo, (st), (cmp)) +# define sk_CMS_RecipientInfo_dup(st) SKM_sk_dup(CMS_RecipientInfo, st) +# define sk_CMS_RecipientInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_RecipientInfo, (st), (free_func)) +# define sk_CMS_RecipientInfo_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RecipientInfo, (st), (copy_func), (free_func)) +# define sk_CMS_RecipientInfo_shift(st) SKM_sk_shift(CMS_RecipientInfo, (st)) +# define sk_CMS_RecipientInfo_pop(st) SKM_sk_pop(CMS_RecipientInfo, (st)) +# define sk_CMS_RecipientInfo_sort(st) SKM_sk_sort(CMS_RecipientInfo, (st)) +# define sk_CMS_RecipientInfo_is_sorted(st) SKM_sk_is_sorted(CMS_RecipientInfo, (st)) +# define sk_CMS_RevocationInfoChoice_new(cmp) SKM_sk_new(CMS_RevocationInfoChoice, (cmp)) +# define sk_CMS_RevocationInfoChoice_new_null() SKM_sk_new_null(CMS_RevocationInfoChoice) +# define sk_CMS_RevocationInfoChoice_free(st) SKM_sk_free(CMS_RevocationInfoChoice, (st)) +# define sk_CMS_RevocationInfoChoice_num(st) SKM_sk_num(CMS_RevocationInfoChoice, (st)) +# define sk_CMS_RevocationInfoChoice_value(st, i) SKM_sk_value(CMS_RevocationInfoChoice, (st), (i)) +# define sk_CMS_RevocationInfoChoice_set(st, i, val) SKM_sk_set(CMS_RevocationInfoChoice, (st), (i), (val)) +# define sk_CMS_RevocationInfoChoice_zero(st) SKM_sk_zero(CMS_RevocationInfoChoice, (st)) +# define sk_CMS_RevocationInfoChoice_push(st, val) SKM_sk_push(CMS_RevocationInfoChoice, (st), (val)) +# define sk_CMS_RevocationInfoChoice_unshift(st, val) SKM_sk_unshift(CMS_RevocationInfoChoice, (st), (val)) +# define sk_CMS_RevocationInfoChoice_find(st, val) SKM_sk_find(CMS_RevocationInfoChoice, (st), (val)) +# define sk_CMS_RevocationInfoChoice_find_ex(st, val) SKM_sk_find_ex(CMS_RevocationInfoChoice, (st), (val)) +# define sk_CMS_RevocationInfoChoice_delete(st, i) SKM_sk_delete(CMS_RevocationInfoChoice, (st), (i)) +# define sk_CMS_RevocationInfoChoice_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RevocationInfoChoice, (st), (ptr)) +# define sk_CMS_RevocationInfoChoice_insert(st, val, i) SKM_sk_insert(CMS_RevocationInfoChoice, (st), (val), (i)) +# define sk_CMS_RevocationInfoChoice_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RevocationInfoChoice, (st), (cmp)) +# define sk_CMS_RevocationInfoChoice_dup(st) SKM_sk_dup(CMS_RevocationInfoChoice, st) +# define sk_CMS_RevocationInfoChoice_pop_free(st, free_func) SKM_sk_pop_free(CMS_RevocationInfoChoice, (st), (free_func)) +# define sk_CMS_RevocationInfoChoice_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RevocationInfoChoice, (st), (copy_func), (free_func)) +# define sk_CMS_RevocationInfoChoice_shift(st) SKM_sk_shift(CMS_RevocationInfoChoice, (st)) +# define sk_CMS_RevocationInfoChoice_pop(st) SKM_sk_pop(CMS_RevocationInfoChoice, (st)) +# define sk_CMS_RevocationInfoChoice_sort(st) SKM_sk_sort(CMS_RevocationInfoChoice, (st)) +# define sk_CMS_RevocationInfoChoice_is_sorted(st) SKM_sk_is_sorted(CMS_RevocationInfoChoice, (st)) +# define sk_CMS_SignerInfo_new(cmp) SKM_sk_new(CMS_SignerInfo, (cmp)) +# define sk_CMS_SignerInfo_new_null() SKM_sk_new_null(CMS_SignerInfo) +# define sk_CMS_SignerInfo_free(st) SKM_sk_free(CMS_SignerInfo, (st)) +# define sk_CMS_SignerInfo_num(st) SKM_sk_num(CMS_SignerInfo, (st)) +# define sk_CMS_SignerInfo_value(st, i) SKM_sk_value(CMS_SignerInfo, (st), (i)) +# define sk_CMS_SignerInfo_set(st, i, val) SKM_sk_set(CMS_SignerInfo, (st), (i), (val)) +# define sk_CMS_SignerInfo_zero(st) SKM_sk_zero(CMS_SignerInfo, (st)) +# define sk_CMS_SignerInfo_push(st, val) SKM_sk_push(CMS_SignerInfo, (st), (val)) +# define sk_CMS_SignerInfo_unshift(st, val) SKM_sk_unshift(CMS_SignerInfo, (st), (val)) +# define sk_CMS_SignerInfo_find(st, val) SKM_sk_find(CMS_SignerInfo, (st), (val)) +# define sk_CMS_SignerInfo_find_ex(st, val) SKM_sk_find_ex(CMS_SignerInfo, (st), (val)) +# define sk_CMS_SignerInfo_delete(st, i) SKM_sk_delete(CMS_SignerInfo, (st), (i)) +# define sk_CMS_SignerInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_SignerInfo, (st), (ptr)) +# define sk_CMS_SignerInfo_insert(st, val, i) SKM_sk_insert(CMS_SignerInfo, (st), (val), (i)) +# define sk_CMS_SignerInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_SignerInfo, (st), (cmp)) +# define sk_CMS_SignerInfo_dup(st) SKM_sk_dup(CMS_SignerInfo, st) +# define sk_CMS_SignerInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_SignerInfo, (st), (free_func)) +# define sk_CMS_SignerInfo_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_SignerInfo, (st), (copy_func), (free_func)) +# define sk_CMS_SignerInfo_shift(st) SKM_sk_shift(CMS_SignerInfo, (st)) +# define sk_CMS_SignerInfo_pop(st) SKM_sk_pop(CMS_SignerInfo, (st)) +# define sk_CMS_SignerInfo_sort(st) SKM_sk_sort(CMS_SignerInfo, (st)) +# define sk_CMS_SignerInfo_is_sorted(st) SKM_sk_is_sorted(CMS_SignerInfo, (st)) +# define sk_CONF_IMODULE_new(cmp) SKM_sk_new(CONF_IMODULE, (cmp)) +# define sk_CONF_IMODULE_new_null() SKM_sk_new_null(CONF_IMODULE) +# define sk_CONF_IMODULE_free(st) SKM_sk_free(CONF_IMODULE, (st)) +# define sk_CONF_IMODULE_num(st) SKM_sk_num(CONF_IMODULE, (st)) +# define sk_CONF_IMODULE_value(st, i) SKM_sk_value(CONF_IMODULE, (st), (i)) +# define sk_CONF_IMODULE_set(st, i, val) SKM_sk_set(CONF_IMODULE, (st), (i), (val)) +# define sk_CONF_IMODULE_zero(st) SKM_sk_zero(CONF_IMODULE, (st)) +# define sk_CONF_IMODULE_push(st, val) SKM_sk_push(CONF_IMODULE, (st), (val)) +# define sk_CONF_IMODULE_unshift(st, val) SKM_sk_unshift(CONF_IMODULE, (st), (val)) +# define sk_CONF_IMODULE_find(st, val) SKM_sk_find(CONF_IMODULE, (st), (val)) +# define sk_CONF_IMODULE_find_ex(st, val) SKM_sk_find_ex(CONF_IMODULE, (st), (val)) +# define sk_CONF_IMODULE_delete(st, i) SKM_sk_delete(CONF_IMODULE, (st), (i)) +# define sk_CONF_IMODULE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_IMODULE, (st), (ptr)) +# define sk_CONF_IMODULE_insert(st, val, i) SKM_sk_insert(CONF_IMODULE, (st), (val), (i)) +# define sk_CONF_IMODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_IMODULE, (st), (cmp)) +# define sk_CONF_IMODULE_dup(st) SKM_sk_dup(CONF_IMODULE, st) +# define sk_CONF_IMODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_IMODULE, (st), (free_func)) +# define sk_CONF_IMODULE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_IMODULE, (st), (copy_func), (free_func)) +# define sk_CONF_IMODULE_shift(st) SKM_sk_shift(CONF_IMODULE, (st)) +# define sk_CONF_IMODULE_pop(st) SKM_sk_pop(CONF_IMODULE, (st)) +# define sk_CONF_IMODULE_sort(st) SKM_sk_sort(CONF_IMODULE, (st)) +# define sk_CONF_IMODULE_is_sorted(st) SKM_sk_is_sorted(CONF_IMODULE, (st)) +# define sk_CONF_MODULE_new(cmp) SKM_sk_new(CONF_MODULE, (cmp)) +# define sk_CONF_MODULE_new_null() SKM_sk_new_null(CONF_MODULE) +# define sk_CONF_MODULE_free(st) SKM_sk_free(CONF_MODULE, (st)) +# define sk_CONF_MODULE_num(st) SKM_sk_num(CONF_MODULE, (st)) +# define sk_CONF_MODULE_value(st, i) SKM_sk_value(CONF_MODULE, (st), (i)) +# define sk_CONF_MODULE_set(st, i, val) SKM_sk_set(CONF_MODULE, (st), (i), (val)) +# define sk_CONF_MODULE_zero(st) SKM_sk_zero(CONF_MODULE, (st)) +# define sk_CONF_MODULE_push(st, val) SKM_sk_push(CONF_MODULE, (st), (val)) +# define sk_CONF_MODULE_unshift(st, val) SKM_sk_unshift(CONF_MODULE, (st), (val)) +# define sk_CONF_MODULE_find(st, val) SKM_sk_find(CONF_MODULE, (st), (val)) +# define sk_CONF_MODULE_find_ex(st, val) SKM_sk_find_ex(CONF_MODULE, (st), (val)) +# define sk_CONF_MODULE_delete(st, i) SKM_sk_delete(CONF_MODULE, (st), (i)) +# define sk_CONF_MODULE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_MODULE, (st), (ptr)) +# define sk_CONF_MODULE_insert(st, val, i) SKM_sk_insert(CONF_MODULE, (st), (val), (i)) +# define sk_CONF_MODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_MODULE, (st), (cmp)) +# define sk_CONF_MODULE_dup(st) SKM_sk_dup(CONF_MODULE, st) +# define sk_CONF_MODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_MODULE, (st), (free_func)) +# define sk_CONF_MODULE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_MODULE, (st), (copy_func), (free_func)) +# define sk_CONF_MODULE_shift(st) SKM_sk_shift(CONF_MODULE, (st)) +# define sk_CONF_MODULE_pop(st) SKM_sk_pop(CONF_MODULE, (st)) +# define sk_CONF_MODULE_sort(st) SKM_sk_sort(CONF_MODULE, (st)) +# define sk_CONF_MODULE_is_sorted(st) SKM_sk_is_sorted(CONF_MODULE, (st)) +# define sk_CONF_VALUE_new(cmp) SKM_sk_new(CONF_VALUE, (cmp)) +# define sk_CONF_VALUE_new_null() SKM_sk_new_null(CONF_VALUE) +# define sk_CONF_VALUE_free(st) SKM_sk_free(CONF_VALUE, (st)) +# define sk_CONF_VALUE_num(st) SKM_sk_num(CONF_VALUE, (st)) +# define sk_CONF_VALUE_value(st, i) SKM_sk_value(CONF_VALUE, (st), (i)) +# define sk_CONF_VALUE_set(st, i, val) SKM_sk_set(CONF_VALUE, (st), (i), (val)) +# define sk_CONF_VALUE_zero(st) SKM_sk_zero(CONF_VALUE, (st)) +# define sk_CONF_VALUE_push(st, val) SKM_sk_push(CONF_VALUE, (st), (val)) +# define sk_CONF_VALUE_unshift(st, val) SKM_sk_unshift(CONF_VALUE, (st), (val)) +# define sk_CONF_VALUE_find(st, val) SKM_sk_find(CONF_VALUE, (st), (val)) +# define sk_CONF_VALUE_find_ex(st, val) SKM_sk_find_ex(CONF_VALUE, (st), (val)) +# define sk_CONF_VALUE_delete(st, i) SKM_sk_delete(CONF_VALUE, (st), (i)) +# define sk_CONF_VALUE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_VALUE, (st), (ptr)) +# define sk_CONF_VALUE_insert(st, val, i) SKM_sk_insert(CONF_VALUE, (st), (val), (i)) +# define sk_CONF_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_VALUE, (st), (cmp)) +# define sk_CONF_VALUE_dup(st) SKM_sk_dup(CONF_VALUE, st) +# define sk_CONF_VALUE_pop_free(st, free_func) SKM_sk_pop_free(CONF_VALUE, (st), (free_func)) +# define sk_CONF_VALUE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_VALUE, (st), (copy_func), (free_func)) +# define sk_CONF_VALUE_shift(st) SKM_sk_shift(CONF_VALUE, (st)) +# define sk_CONF_VALUE_pop(st) SKM_sk_pop(CONF_VALUE, (st)) +# define sk_CONF_VALUE_sort(st) SKM_sk_sort(CONF_VALUE, (st)) +# define sk_CONF_VALUE_is_sorted(st) SKM_sk_is_sorted(CONF_VALUE, (st)) +# define sk_CRYPTO_EX_DATA_FUNCS_new(cmp) SKM_sk_new(CRYPTO_EX_DATA_FUNCS, (cmp)) +# define sk_CRYPTO_EX_DATA_FUNCS_new_null() SKM_sk_new_null(CRYPTO_EX_DATA_FUNCS) +# define sk_CRYPTO_EX_DATA_FUNCS_free(st) SKM_sk_free(CRYPTO_EX_DATA_FUNCS, (st)) +# define sk_CRYPTO_EX_DATA_FUNCS_num(st) SKM_sk_num(CRYPTO_EX_DATA_FUNCS, (st)) +# define sk_CRYPTO_EX_DATA_FUNCS_value(st, i) SKM_sk_value(CRYPTO_EX_DATA_FUNCS, (st), (i)) +# define sk_CRYPTO_EX_DATA_FUNCS_set(st, i, val) SKM_sk_set(CRYPTO_EX_DATA_FUNCS, (st), (i), (val)) +# define sk_CRYPTO_EX_DATA_FUNCS_zero(st) SKM_sk_zero(CRYPTO_EX_DATA_FUNCS, (st)) +# define sk_CRYPTO_EX_DATA_FUNCS_push(st, val) SKM_sk_push(CRYPTO_EX_DATA_FUNCS, (st), (val)) +# define sk_CRYPTO_EX_DATA_FUNCS_unshift(st, val) SKM_sk_unshift(CRYPTO_EX_DATA_FUNCS, (st), (val)) +# define sk_CRYPTO_EX_DATA_FUNCS_find(st, val) SKM_sk_find(CRYPTO_EX_DATA_FUNCS, (st), (val)) +# define sk_CRYPTO_EX_DATA_FUNCS_find_ex(st, val) SKM_sk_find_ex(CRYPTO_EX_DATA_FUNCS, (st), (val)) +# define sk_CRYPTO_EX_DATA_FUNCS_delete(st, i) SKM_sk_delete(CRYPTO_EX_DATA_FUNCS, (st), (i)) +# define sk_CRYPTO_EX_DATA_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_EX_DATA_FUNCS, (st), (ptr)) +# define sk_CRYPTO_EX_DATA_FUNCS_insert(st, val, i) SKM_sk_insert(CRYPTO_EX_DATA_FUNCS, (st), (val), (i)) +# define sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_EX_DATA_FUNCS, (st), (cmp)) +# define sk_CRYPTO_EX_DATA_FUNCS_dup(st) SKM_sk_dup(CRYPTO_EX_DATA_FUNCS, st) +# define sk_CRYPTO_EX_DATA_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_EX_DATA_FUNCS, (st), (free_func)) +# define sk_CRYPTO_EX_DATA_FUNCS_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CRYPTO_EX_DATA_FUNCS, (st), (copy_func), (free_func)) +# define sk_CRYPTO_EX_DATA_FUNCS_shift(st) SKM_sk_shift(CRYPTO_EX_DATA_FUNCS, (st)) +# define sk_CRYPTO_EX_DATA_FUNCS_pop(st) SKM_sk_pop(CRYPTO_EX_DATA_FUNCS, (st)) +# define sk_CRYPTO_EX_DATA_FUNCS_sort(st) SKM_sk_sort(CRYPTO_EX_DATA_FUNCS, (st)) +# define sk_CRYPTO_EX_DATA_FUNCS_is_sorted(st) SKM_sk_is_sorted(CRYPTO_EX_DATA_FUNCS, (st)) +# define sk_CRYPTO_dynlock_new(cmp) SKM_sk_new(CRYPTO_dynlock, (cmp)) +# define sk_CRYPTO_dynlock_new_null() SKM_sk_new_null(CRYPTO_dynlock) +# define sk_CRYPTO_dynlock_free(st) SKM_sk_free(CRYPTO_dynlock, (st)) +# define sk_CRYPTO_dynlock_num(st) SKM_sk_num(CRYPTO_dynlock, (st)) +# define sk_CRYPTO_dynlock_value(st, i) SKM_sk_value(CRYPTO_dynlock, (st), (i)) +# define sk_CRYPTO_dynlock_set(st, i, val) SKM_sk_set(CRYPTO_dynlock, (st), (i), (val)) +# define sk_CRYPTO_dynlock_zero(st) SKM_sk_zero(CRYPTO_dynlock, (st)) +# define sk_CRYPTO_dynlock_push(st, val) SKM_sk_push(CRYPTO_dynlock, (st), (val)) +# define sk_CRYPTO_dynlock_unshift(st, val) SKM_sk_unshift(CRYPTO_dynlock, (st), (val)) +# define sk_CRYPTO_dynlock_find(st, val) SKM_sk_find(CRYPTO_dynlock, (st), (val)) +# define sk_CRYPTO_dynlock_find_ex(st, val) SKM_sk_find_ex(CRYPTO_dynlock, (st), (val)) +# define sk_CRYPTO_dynlock_delete(st, i) SKM_sk_delete(CRYPTO_dynlock, (st), (i)) +# define sk_CRYPTO_dynlock_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_dynlock, (st), (ptr)) +# define sk_CRYPTO_dynlock_insert(st, val, i) SKM_sk_insert(CRYPTO_dynlock, (st), (val), (i)) +# define sk_CRYPTO_dynlock_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_dynlock, (st), (cmp)) +# define sk_CRYPTO_dynlock_dup(st) SKM_sk_dup(CRYPTO_dynlock, st) +# define sk_CRYPTO_dynlock_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_dynlock, (st), (free_func)) +# define sk_CRYPTO_dynlock_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CRYPTO_dynlock, (st), (copy_func), (free_func)) +# define sk_CRYPTO_dynlock_shift(st) SKM_sk_shift(CRYPTO_dynlock, (st)) +# define sk_CRYPTO_dynlock_pop(st) SKM_sk_pop(CRYPTO_dynlock, (st)) +# define sk_CRYPTO_dynlock_sort(st) SKM_sk_sort(CRYPTO_dynlock, (st)) +# define sk_CRYPTO_dynlock_is_sorted(st) SKM_sk_is_sorted(CRYPTO_dynlock, (st)) +# define sk_DIST_POINT_new(cmp) SKM_sk_new(DIST_POINT, (cmp)) +# define sk_DIST_POINT_new_null() SKM_sk_new_null(DIST_POINT) +# define sk_DIST_POINT_free(st) SKM_sk_free(DIST_POINT, (st)) +# define sk_DIST_POINT_num(st) SKM_sk_num(DIST_POINT, (st)) +# define sk_DIST_POINT_value(st, i) SKM_sk_value(DIST_POINT, (st), (i)) +# define sk_DIST_POINT_set(st, i, val) SKM_sk_set(DIST_POINT, (st), (i), (val)) +# define sk_DIST_POINT_zero(st) SKM_sk_zero(DIST_POINT, (st)) +# define sk_DIST_POINT_push(st, val) SKM_sk_push(DIST_POINT, (st), (val)) +# define sk_DIST_POINT_unshift(st, val) SKM_sk_unshift(DIST_POINT, (st), (val)) +# define sk_DIST_POINT_find(st, val) SKM_sk_find(DIST_POINT, (st), (val)) +# define sk_DIST_POINT_find_ex(st, val) SKM_sk_find_ex(DIST_POINT, (st), (val)) +# define sk_DIST_POINT_delete(st, i) SKM_sk_delete(DIST_POINT, (st), (i)) +# define sk_DIST_POINT_delete_ptr(st, ptr) SKM_sk_delete_ptr(DIST_POINT, (st), (ptr)) +# define sk_DIST_POINT_insert(st, val, i) SKM_sk_insert(DIST_POINT, (st), (val), (i)) +# define sk_DIST_POINT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(DIST_POINT, (st), (cmp)) +# define sk_DIST_POINT_dup(st) SKM_sk_dup(DIST_POINT, st) +# define sk_DIST_POINT_pop_free(st, free_func) SKM_sk_pop_free(DIST_POINT, (st), (free_func)) +# define sk_DIST_POINT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(DIST_POINT, (st), (copy_func), (free_func)) +# define sk_DIST_POINT_shift(st) SKM_sk_shift(DIST_POINT, (st)) +# define sk_DIST_POINT_pop(st) SKM_sk_pop(DIST_POINT, (st)) +# define sk_DIST_POINT_sort(st) SKM_sk_sort(DIST_POINT, (st)) +# define sk_DIST_POINT_is_sorted(st) SKM_sk_is_sorted(DIST_POINT, (st)) +# define sk_ENGINE_new(cmp) SKM_sk_new(ENGINE, (cmp)) +# define sk_ENGINE_new_null() SKM_sk_new_null(ENGINE) +# define sk_ENGINE_free(st) SKM_sk_free(ENGINE, (st)) +# define sk_ENGINE_num(st) SKM_sk_num(ENGINE, (st)) +# define sk_ENGINE_value(st, i) SKM_sk_value(ENGINE, (st), (i)) +# define sk_ENGINE_set(st, i, val) SKM_sk_set(ENGINE, (st), (i), (val)) +# define sk_ENGINE_zero(st) SKM_sk_zero(ENGINE, (st)) +# define sk_ENGINE_push(st, val) SKM_sk_push(ENGINE, (st), (val)) +# define sk_ENGINE_unshift(st, val) SKM_sk_unshift(ENGINE, (st), (val)) +# define sk_ENGINE_find(st, val) SKM_sk_find(ENGINE, (st), (val)) +# define sk_ENGINE_find_ex(st, val) SKM_sk_find_ex(ENGINE, (st), (val)) +# define sk_ENGINE_delete(st, i) SKM_sk_delete(ENGINE, (st), (i)) +# define sk_ENGINE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ENGINE, (st), (ptr)) +# define sk_ENGINE_insert(st, val, i) SKM_sk_insert(ENGINE, (st), (val), (i)) +# define sk_ENGINE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE, (st), (cmp)) +# define sk_ENGINE_dup(st) SKM_sk_dup(ENGINE, st) +# define sk_ENGINE_pop_free(st, free_func) SKM_sk_pop_free(ENGINE, (st), (free_func)) +# define sk_ENGINE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ENGINE, (st), (copy_func), (free_func)) +# define sk_ENGINE_shift(st) SKM_sk_shift(ENGINE, (st)) +# define sk_ENGINE_pop(st) SKM_sk_pop(ENGINE, (st)) +# define sk_ENGINE_sort(st) SKM_sk_sort(ENGINE, (st)) +# define sk_ENGINE_is_sorted(st) SKM_sk_is_sorted(ENGINE, (st)) +# define sk_ENGINE_CLEANUP_ITEM_new(cmp) SKM_sk_new(ENGINE_CLEANUP_ITEM, (cmp)) +# define sk_ENGINE_CLEANUP_ITEM_new_null() SKM_sk_new_null(ENGINE_CLEANUP_ITEM) +# define sk_ENGINE_CLEANUP_ITEM_free(st) SKM_sk_free(ENGINE_CLEANUP_ITEM, (st)) +# define sk_ENGINE_CLEANUP_ITEM_num(st) SKM_sk_num(ENGINE_CLEANUP_ITEM, (st)) +# define sk_ENGINE_CLEANUP_ITEM_value(st, i) SKM_sk_value(ENGINE_CLEANUP_ITEM, (st), (i)) +# define sk_ENGINE_CLEANUP_ITEM_set(st, i, val) SKM_sk_set(ENGINE_CLEANUP_ITEM, (st), (i), (val)) +# define sk_ENGINE_CLEANUP_ITEM_zero(st) SKM_sk_zero(ENGINE_CLEANUP_ITEM, (st)) +# define sk_ENGINE_CLEANUP_ITEM_push(st, val) SKM_sk_push(ENGINE_CLEANUP_ITEM, (st), (val)) +# define sk_ENGINE_CLEANUP_ITEM_unshift(st, val) SKM_sk_unshift(ENGINE_CLEANUP_ITEM, (st), (val)) +# define sk_ENGINE_CLEANUP_ITEM_find(st, val) SKM_sk_find(ENGINE_CLEANUP_ITEM, (st), (val)) +# define sk_ENGINE_CLEANUP_ITEM_find_ex(st, val) SKM_sk_find_ex(ENGINE_CLEANUP_ITEM, (st), (val)) +# define sk_ENGINE_CLEANUP_ITEM_delete(st, i) SKM_sk_delete(ENGINE_CLEANUP_ITEM, (st), (i)) +# define sk_ENGINE_CLEANUP_ITEM_delete_ptr(st, ptr) SKM_sk_delete_ptr(ENGINE_CLEANUP_ITEM, (st), (ptr)) +# define sk_ENGINE_CLEANUP_ITEM_insert(st, val, i) SKM_sk_insert(ENGINE_CLEANUP_ITEM, (st), (val), (i)) +# define sk_ENGINE_CLEANUP_ITEM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE_CLEANUP_ITEM, (st), (cmp)) +# define sk_ENGINE_CLEANUP_ITEM_dup(st) SKM_sk_dup(ENGINE_CLEANUP_ITEM, st) +# define sk_ENGINE_CLEANUP_ITEM_pop_free(st, free_func) SKM_sk_pop_free(ENGINE_CLEANUP_ITEM, (st), (free_func)) +# define sk_ENGINE_CLEANUP_ITEM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ENGINE_CLEANUP_ITEM, (st), (copy_func), (free_func)) +# define sk_ENGINE_CLEANUP_ITEM_shift(st) SKM_sk_shift(ENGINE_CLEANUP_ITEM, (st)) +# define sk_ENGINE_CLEANUP_ITEM_pop(st) SKM_sk_pop(ENGINE_CLEANUP_ITEM, (st)) +# define sk_ENGINE_CLEANUP_ITEM_sort(st) SKM_sk_sort(ENGINE_CLEANUP_ITEM, (st)) +# define sk_ENGINE_CLEANUP_ITEM_is_sorted(st) SKM_sk_is_sorted(ENGINE_CLEANUP_ITEM, (st)) +# define sk_ESS_CERT_ID_new(cmp) SKM_sk_new(ESS_CERT_ID, (cmp)) +# define sk_ESS_CERT_ID_new_null() SKM_sk_new_null(ESS_CERT_ID) +# define sk_ESS_CERT_ID_free(st) SKM_sk_free(ESS_CERT_ID, (st)) +# define sk_ESS_CERT_ID_num(st) SKM_sk_num(ESS_CERT_ID, (st)) +# define sk_ESS_CERT_ID_value(st, i) SKM_sk_value(ESS_CERT_ID, (st), (i)) +# define sk_ESS_CERT_ID_set(st, i, val) SKM_sk_set(ESS_CERT_ID, (st), (i), (val)) +# define sk_ESS_CERT_ID_zero(st) SKM_sk_zero(ESS_CERT_ID, (st)) +# define sk_ESS_CERT_ID_push(st, val) SKM_sk_push(ESS_CERT_ID, (st), (val)) +# define sk_ESS_CERT_ID_unshift(st, val) SKM_sk_unshift(ESS_CERT_ID, (st), (val)) +# define sk_ESS_CERT_ID_find(st, val) SKM_sk_find(ESS_CERT_ID, (st), (val)) +# define sk_ESS_CERT_ID_find_ex(st, val) SKM_sk_find_ex(ESS_CERT_ID, (st), (val)) +# define sk_ESS_CERT_ID_delete(st, i) SKM_sk_delete(ESS_CERT_ID, (st), (i)) +# define sk_ESS_CERT_ID_delete_ptr(st, ptr) SKM_sk_delete_ptr(ESS_CERT_ID, (st), (ptr)) +# define sk_ESS_CERT_ID_insert(st, val, i) SKM_sk_insert(ESS_CERT_ID, (st), (val), (i)) +# define sk_ESS_CERT_ID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ESS_CERT_ID, (st), (cmp)) +# define sk_ESS_CERT_ID_dup(st) SKM_sk_dup(ESS_CERT_ID, st) +# define sk_ESS_CERT_ID_pop_free(st, free_func) SKM_sk_pop_free(ESS_CERT_ID, (st), (free_func)) +# define sk_ESS_CERT_ID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ESS_CERT_ID, (st), (copy_func), (free_func)) +# define sk_ESS_CERT_ID_shift(st) SKM_sk_shift(ESS_CERT_ID, (st)) +# define sk_ESS_CERT_ID_pop(st) SKM_sk_pop(ESS_CERT_ID, (st)) +# define sk_ESS_CERT_ID_sort(st) SKM_sk_sort(ESS_CERT_ID, (st)) +# define sk_ESS_CERT_ID_is_sorted(st) SKM_sk_is_sorted(ESS_CERT_ID, (st)) +# define sk_EVP_MD_new(cmp) SKM_sk_new(EVP_MD, (cmp)) +# define sk_EVP_MD_new_null() SKM_sk_new_null(EVP_MD) +# define sk_EVP_MD_free(st) SKM_sk_free(EVP_MD, (st)) +# define sk_EVP_MD_num(st) SKM_sk_num(EVP_MD, (st)) +# define sk_EVP_MD_value(st, i) SKM_sk_value(EVP_MD, (st), (i)) +# define sk_EVP_MD_set(st, i, val) SKM_sk_set(EVP_MD, (st), (i), (val)) +# define sk_EVP_MD_zero(st) SKM_sk_zero(EVP_MD, (st)) +# define sk_EVP_MD_push(st, val) SKM_sk_push(EVP_MD, (st), (val)) +# define sk_EVP_MD_unshift(st, val) SKM_sk_unshift(EVP_MD, (st), (val)) +# define sk_EVP_MD_find(st, val) SKM_sk_find(EVP_MD, (st), (val)) +# define sk_EVP_MD_find_ex(st, val) SKM_sk_find_ex(EVP_MD, (st), (val)) +# define sk_EVP_MD_delete(st, i) SKM_sk_delete(EVP_MD, (st), (i)) +# define sk_EVP_MD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_MD, (st), (ptr)) +# define sk_EVP_MD_insert(st, val, i) SKM_sk_insert(EVP_MD, (st), (val), (i)) +# define sk_EVP_MD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_MD, (st), (cmp)) +# define sk_EVP_MD_dup(st) SKM_sk_dup(EVP_MD, st) +# define sk_EVP_MD_pop_free(st, free_func) SKM_sk_pop_free(EVP_MD, (st), (free_func)) +# define sk_EVP_MD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_MD, (st), (copy_func), (free_func)) +# define sk_EVP_MD_shift(st) SKM_sk_shift(EVP_MD, (st)) +# define sk_EVP_MD_pop(st) SKM_sk_pop(EVP_MD, (st)) +# define sk_EVP_MD_sort(st) SKM_sk_sort(EVP_MD, (st)) +# define sk_EVP_MD_is_sorted(st) SKM_sk_is_sorted(EVP_MD, (st)) +# define sk_EVP_PBE_CTL_new(cmp) SKM_sk_new(EVP_PBE_CTL, (cmp)) +# define sk_EVP_PBE_CTL_new_null() SKM_sk_new_null(EVP_PBE_CTL) +# define sk_EVP_PBE_CTL_free(st) SKM_sk_free(EVP_PBE_CTL, (st)) +# define sk_EVP_PBE_CTL_num(st) SKM_sk_num(EVP_PBE_CTL, (st)) +# define sk_EVP_PBE_CTL_value(st, i) SKM_sk_value(EVP_PBE_CTL, (st), (i)) +# define sk_EVP_PBE_CTL_set(st, i, val) SKM_sk_set(EVP_PBE_CTL, (st), (i), (val)) +# define sk_EVP_PBE_CTL_zero(st) SKM_sk_zero(EVP_PBE_CTL, (st)) +# define sk_EVP_PBE_CTL_push(st, val) SKM_sk_push(EVP_PBE_CTL, (st), (val)) +# define sk_EVP_PBE_CTL_unshift(st, val) SKM_sk_unshift(EVP_PBE_CTL, (st), (val)) +# define sk_EVP_PBE_CTL_find(st, val) SKM_sk_find(EVP_PBE_CTL, (st), (val)) +# define sk_EVP_PBE_CTL_find_ex(st, val) SKM_sk_find_ex(EVP_PBE_CTL, (st), (val)) +# define sk_EVP_PBE_CTL_delete(st, i) SKM_sk_delete(EVP_PBE_CTL, (st), (i)) +# define sk_EVP_PBE_CTL_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PBE_CTL, (st), (ptr)) +# define sk_EVP_PBE_CTL_insert(st, val, i) SKM_sk_insert(EVP_PBE_CTL, (st), (val), (i)) +# define sk_EVP_PBE_CTL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PBE_CTL, (st), (cmp)) +# define sk_EVP_PBE_CTL_dup(st) SKM_sk_dup(EVP_PBE_CTL, st) +# define sk_EVP_PBE_CTL_pop_free(st, free_func) SKM_sk_pop_free(EVP_PBE_CTL, (st), (free_func)) +# define sk_EVP_PBE_CTL_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PBE_CTL, (st), (copy_func), (free_func)) +# define sk_EVP_PBE_CTL_shift(st) SKM_sk_shift(EVP_PBE_CTL, (st)) +# define sk_EVP_PBE_CTL_pop(st) SKM_sk_pop(EVP_PBE_CTL, (st)) +# define sk_EVP_PBE_CTL_sort(st) SKM_sk_sort(EVP_PBE_CTL, (st)) +# define sk_EVP_PBE_CTL_is_sorted(st) SKM_sk_is_sorted(EVP_PBE_CTL, (st)) +# define sk_EVP_PKEY_ASN1_METHOD_new(cmp) SKM_sk_new(EVP_PKEY_ASN1_METHOD, (cmp)) +# define sk_EVP_PKEY_ASN1_METHOD_new_null() SKM_sk_new_null(EVP_PKEY_ASN1_METHOD) +# define sk_EVP_PKEY_ASN1_METHOD_free(st) SKM_sk_free(EVP_PKEY_ASN1_METHOD, (st)) +# define sk_EVP_PKEY_ASN1_METHOD_num(st) SKM_sk_num(EVP_PKEY_ASN1_METHOD, (st)) +# define sk_EVP_PKEY_ASN1_METHOD_value(st, i) SKM_sk_value(EVP_PKEY_ASN1_METHOD, (st), (i)) +# define sk_EVP_PKEY_ASN1_METHOD_set(st, i, val) SKM_sk_set(EVP_PKEY_ASN1_METHOD, (st), (i), (val)) +# define sk_EVP_PKEY_ASN1_METHOD_zero(st) SKM_sk_zero(EVP_PKEY_ASN1_METHOD, (st)) +# define sk_EVP_PKEY_ASN1_METHOD_push(st, val) SKM_sk_push(EVP_PKEY_ASN1_METHOD, (st), (val)) +# define sk_EVP_PKEY_ASN1_METHOD_unshift(st, val) SKM_sk_unshift(EVP_PKEY_ASN1_METHOD, (st), (val)) +# define sk_EVP_PKEY_ASN1_METHOD_find(st, val) SKM_sk_find(EVP_PKEY_ASN1_METHOD, (st), (val)) +# define sk_EVP_PKEY_ASN1_METHOD_find_ex(st, val) SKM_sk_find_ex(EVP_PKEY_ASN1_METHOD, (st), (val)) +# define sk_EVP_PKEY_ASN1_METHOD_delete(st, i) SKM_sk_delete(EVP_PKEY_ASN1_METHOD, (st), (i)) +# define sk_EVP_PKEY_ASN1_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PKEY_ASN1_METHOD, (st), (ptr)) +# define sk_EVP_PKEY_ASN1_METHOD_insert(st, val, i) SKM_sk_insert(EVP_PKEY_ASN1_METHOD, (st), (val), (i)) +# define sk_EVP_PKEY_ASN1_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_ASN1_METHOD, (st), (cmp)) +# define sk_EVP_PKEY_ASN1_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_ASN1_METHOD, st) +# define sk_EVP_PKEY_ASN1_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_ASN1_METHOD, (st), (free_func)) +# define sk_EVP_PKEY_ASN1_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PKEY_ASN1_METHOD, (st), (copy_func), (free_func)) +# define sk_EVP_PKEY_ASN1_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_ASN1_METHOD, (st)) +# define sk_EVP_PKEY_ASN1_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_ASN1_METHOD, (st)) +# define sk_EVP_PKEY_ASN1_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_ASN1_METHOD, (st)) +# define sk_EVP_PKEY_ASN1_METHOD_is_sorted(st) SKM_sk_is_sorted(EVP_PKEY_ASN1_METHOD, (st)) +# define sk_EVP_PKEY_METHOD_new(cmp) SKM_sk_new(EVP_PKEY_METHOD, (cmp)) +# define sk_EVP_PKEY_METHOD_new_null() SKM_sk_new_null(EVP_PKEY_METHOD) +# define sk_EVP_PKEY_METHOD_free(st) SKM_sk_free(EVP_PKEY_METHOD, (st)) +# define sk_EVP_PKEY_METHOD_num(st) SKM_sk_num(EVP_PKEY_METHOD, (st)) +# define sk_EVP_PKEY_METHOD_value(st, i) SKM_sk_value(EVP_PKEY_METHOD, (st), (i)) +# define sk_EVP_PKEY_METHOD_set(st, i, val) SKM_sk_set(EVP_PKEY_METHOD, (st), (i), (val)) +# define sk_EVP_PKEY_METHOD_zero(st) SKM_sk_zero(EVP_PKEY_METHOD, (st)) +# define sk_EVP_PKEY_METHOD_push(st, val) SKM_sk_push(EVP_PKEY_METHOD, (st), (val)) +# define sk_EVP_PKEY_METHOD_unshift(st, val) SKM_sk_unshift(EVP_PKEY_METHOD, (st), (val)) +# define sk_EVP_PKEY_METHOD_find(st, val) SKM_sk_find(EVP_PKEY_METHOD, (st), (val)) +# define sk_EVP_PKEY_METHOD_find_ex(st, val) SKM_sk_find_ex(EVP_PKEY_METHOD, (st), (val)) +# define sk_EVP_PKEY_METHOD_delete(st, i) SKM_sk_delete(EVP_PKEY_METHOD, (st), (i)) +# define sk_EVP_PKEY_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PKEY_METHOD, (st), (ptr)) +# define sk_EVP_PKEY_METHOD_insert(st, val, i) SKM_sk_insert(EVP_PKEY_METHOD, (st), (val), (i)) +# define sk_EVP_PKEY_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_METHOD, (st), (cmp)) +# define sk_EVP_PKEY_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_METHOD, st) +# define sk_EVP_PKEY_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_METHOD, (st), (free_func)) +# define sk_EVP_PKEY_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PKEY_METHOD, (st), (copy_func), (free_func)) +# define sk_EVP_PKEY_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_METHOD, (st)) +# define sk_EVP_PKEY_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_METHOD, (st)) +# define sk_EVP_PKEY_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_METHOD, (st)) +# define sk_EVP_PKEY_METHOD_is_sorted(st) SKM_sk_is_sorted(EVP_PKEY_METHOD, (st)) +# define sk_GENERAL_NAME_new(cmp) SKM_sk_new(GENERAL_NAME, (cmp)) +# define sk_GENERAL_NAME_new_null() SKM_sk_new_null(GENERAL_NAME) +# define sk_GENERAL_NAME_free(st) SKM_sk_free(GENERAL_NAME, (st)) +# define sk_GENERAL_NAME_num(st) SKM_sk_num(GENERAL_NAME, (st)) +# define sk_GENERAL_NAME_value(st, i) SKM_sk_value(GENERAL_NAME, (st), (i)) +# define sk_GENERAL_NAME_set(st, i, val) SKM_sk_set(GENERAL_NAME, (st), (i), (val)) +# define sk_GENERAL_NAME_zero(st) SKM_sk_zero(GENERAL_NAME, (st)) +# define sk_GENERAL_NAME_push(st, val) SKM_sk_push(GENERAL_NAME, (st), (val)) +# define sk_GENERAL_NAME_unshift(st, val) SKM_sk_unshift(GENERAL_NAME, (st), (val)) +# define sk_GENERAL_NAME_find(st, val) SKM_sk_find(GENERAL_NAME, (st), (val)) +# define sk_GENERAL_NAME_find_ex(st, val) SKM_sk_find_ex(GENERAL_NAME, (st), (val)) +# define sk_GENERAL_NAME_delete(st, i) SKM_sk_delete(GENERAL_NAME, (st), (i)) +# define sk_GENERAL_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_NAME, (st), (ptr)) +# define sk_GENERAL_NAME_insert(st, val, i) SKM_sk_insert(GENERAL_NAME, (st), (val), (i)) +# define sk_GENERAL_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAME, (st), (cmp)) +# define sk_GENERAL_NAME_dup(st) SKM_sk_dup(GENERAL_NAME, st) +# define sk_GENERAL_NAME_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAME, (st), (free_func)) +# define sk_GENERAL_NAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_NAME, (st), (copy_func), (free_func)) +# define sk_GENERAL_NAME_shift(st) SKM_sk_shift(GENERAL_NAME, (st)) +# define sk_GENERAL_NAME_pop(st) SKM_sk_pop(GENERAL_NAME, (st)) +# define sk_GENERAL_NAME_sort(st) SKM_sk_sort(GENERAL_NAME, (st)) +# define sk_GENERAL_NAME_is_sorted(st) SKM_sk_is_sorted(GENERAL_NAME, (st)) +# define sk_GENERAL_NAMES_new(cmp) SKM_sk_new(GENERAL_NAMES, (cmp)) +# define sk_GENERAL_NAMES_new_null() SKM_sk_new_null(GENERAL_NAMES) +# define sk_GENERAL_NAMES_free(st) SKM_sk_free(GENERAL_NAMES, (st)) +# define sk_GENERAL_NAMES_num(st) SKM_sk_num(GENERAL_NAMES, (st)) +# define sk_GENERAL_NAMES_value(st, i) SKM_sk_value(GENERAL_NAMES, (st), (i)) +# define sk_GENERAL_NAMES_set(st, i, val) SKM_sk_set(GENERAL_NAMES, (st), (i), (val)) +# define sk_GENERAL_NAMES_zero(st) SKM_sk_zero(GENERAL_NAMES, (st)) +# define sk_GENERAL_NAMES_push(st, val) SKM_sk_push(GENERAL_NAMES, (st), (val)) +# define sk_GENERAL_NAMES_unshift(st, val) SKM_sk_unshift(GENERAL_NAMES, (st), (val)) +# define sk_GENERAL_NAMES_find(st, val) SKM_sk_find(GENERAL_NAMES, (st), (val)) +# define sk_GENERAL_NAMES_find_ex(st, val) SKM_sk_find_ex(GENERAL_NAMES, (st), (val)) +# define sk_GENERAL_NAMES_delete(st, i) SKM_sk_delete(GENERAL_NAMES, (st), (i)) +# define sk_GENERAL_NAMES_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_NAMES, (st), (ptr)) +# define sk_GENERAL_NAMES_insert(st, val, i) SKM_sk_insert(GENERAL_NAMES, (st), (val), (i)) +# define sk_GENERAL_NAMES_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAMES, (st), (cmp)) +# define sk_GENERAL_NAMES_dup(st) SKM_sk_dup(GENERAL_NAMES, st) +# define sk_GENERAL_NAMES_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAMES, (st), (free_func)) +# define sk_GENERAL_NAMES_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_NAMES, (st), (copy_func), (free_func)) +# define sk_GENERAL_NAMES_shift(st) SKM_sk_shift(GENERAL_NAMES, (st)) +# define sk_GENERAL_NAMES_pop(st) SKM_sk_pop(GENERAL_NAMES, (st)) +# define sk_GENERAL_NAMES_sort(st) SKM_sk_sort(GENERAL_NAMES, (st)) +# define sk_GENERAL_NAMES_is_sorted(st) SKM_sk_is_sorted(GENERAL_NAMES, (st)) +# define sk_GENERAL_SUBTREE_new(cmp) SKM_sk_new(GENERAL_SUBTREE, (cmp)) +# define sk_GENERAL_SUBTREE_new_null() SKM_sk_new_null(GENERAL_SUBTREE) +# define sk_GENERAL_SUBTREE_free(st) SKM_sk_free(GENERAL_SUBTREE, (st)) +# define sk_GENERAL_SUBTREE_num(st) SKM_sk_num(GENERAL_SUBTREE, (st)) +# define sk_GENERAL_SUBTREE_value(st, i) SKM_sk_value(GENERAL_SUBTREE, (st), (i)) +# define sk_GENERAL_SUBTREE_set(st, i, val) SKM_sk_set(GENERAL_SUBTREE, (st), (i), (val)) +# define sk_GENERAL_SUBTREE_zero(st) SKM_sk_zero(GENERAL_SUBTREE, (st)) +# define sk_GENERAL_SUBTREE_push(st, val) SKM_sk_push(GENERAL_SUBTREE, (st), (val)) +# define sk_GENERAL_SUBTREE_unshift(st, val) SKM_sk_unshift(GENERAL_SUBTREE, (st), (val)) +# define sk_GENERAL_SUBTREE_find(st, val) SKM_sk_find(GENERAL_SUBTREE, (st), (val)) +# define sk_GENERAL_SUBTREE_find_ex(st, val) SKM_sk_find_ex(GENERAL_SUBTREE, (st), (val)) +# define sk_GENERAL_SUBTREE_delete(st, i) SKM_sk_delete(GENERAL_SUBTREE, (st), (i)) +# define sk_GENERAL_SUBTREE_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_SUBTREE, (st), (ptr)) +# define sk_GENERAL_SUBTREE_insert(st, val, i) SKM_sk_insert(GENERAL_SUBTREE, (st), (val), (i)) +# define sk_GENERAL_SUBTREE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_SUBTREE, (st), (cmp)) +# define sk_GENERAL_SUBTREE_dup(st) SKM_sk_dup(GENERAL_SUBTREE, st) +# define sk_GENERAL_SUBTREE_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_SUBTREE, (st), (free_func)) +# define sk_GENERAL_SUBTREE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_SUBTREE, (st), (copy_func), (free_func)) +# define sk_GENERAL_SUBTREE_shift(st) SKM_sk_shift(GENERAL_SUBTREE, (st)) +# define sk_GENERAL_SUBTREE_pop(st) SKM_sk_pop(GENERAL_SUBTREE, (st)) +# define sk_GENERAL_SUBTREE_sort(st) SKM_sk_sort(GENERAL_SUBTREE, (st)) +# define sk_GENERAL_SUBTREE_is_sorted(st) SKM_sk_is_sorted(GENERAL_SUBTREE, (st)) +# define sk_IPAddressFamily_new(cmp) SKM_sk_new(IPAddressFamily, (cmp)) +# define sk_IPAddressFamily_new_null() SKM_sk_new_null(IPAddressFamily) +# define sk_IPAddressFamily_free(st) SKM_sk_free(IPAddressFamily, (st)) +# define sk_IPAddressFamily_num(st) SKM_sk_num(IPAddressFamily, (st)) +# define sk_IPAddressFamily_value(st, i) SKM_sk_value(IPAddressFamily, (st), (i)) +# define sk_IPAddressFamily_set(st, i, val) SKM_sk_set(IPAddressFamily, (st), (i), (val)) +# define sk_IPAddressFamily_zero(st) SKM_sk_zero(IPAddressFamily, (st)) +# define sk_IPAddressFamily_push(st, val) SKM_sk_push(IPAddressFamily, (st), (val)) +# define sk_IPAddressFamily_unshift(st, val) SKM_sk_unshift(IPAddressFamily, (st), (val)) +# define sk_IPAddressFamily_find(st, val) SKM_sk_find(IPAddressFamily, (st), (val)) +# define sk_IPAddressFamily_find_ex(st, val) SKM_sk_find_ex(IPAddressFamily, (st), (val)) +# define sk_IPAddressFamily_delete(st, i) SKM_sk_delete(IPAddressFamily, (st), (i)) +# define sk_IPAddressFamily_delete_ptr(st, ptr) SKM_sk_delete_ptr(IPAddressFamily, (st), (ptr)) +# define sk_IPAddressFamily_insert(st, val, i) SKM_sk_insert(IPAddressFamily, (st), (val), (i)) +# define sk_IPAddressFamily_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressFamily, (st), (cmp)) +# define sk_IPAddressFamily_dup(st) SKM_sk_dup(IPAddressFamily, st) +# define sk_IPAddressFamily_pop_free(st, free_func) SKM_sk_pop_free(IPAddressFamily, (st), (free_func)) +# define sk_IPAddressFamily_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(IPAddressFamily, (st), (copy_func), (free_func)) +# define sk_IPAddressFamily_shift(st) SKM_sk_shift(IPAddressFamily, (st)) +# define sk_IPAddressFamily_pop(st) SKM_sk_pop(IPAddressFamily, (st)) +# define sk_IPAddressFamily_sort(st) SKM_sk_sort(IPAddressFamily, (st)) +# define sk_IPAddressFamily_is_sorted(st) SKM_sk_is_sorted(IPAddressFamily, (st)) +# define sk_IPAddressOrRange_new(cmp) SKM_sk_new(IPAddressOrRange, (cmp)) +# define sk_IPAddressOrRange_new_null() SKM_sk_new_null(IPAddressOrRange) +# define sk_IPAddressOrRange_free(st) SKM_sk_free(IPAddressOrRange, (st)) +# define sk_IPAddressOrRange_num(st) SKM_sk_num(IPAddressOrRange, (st)) +# define sk_IPAddressOrRange_value(st, i) SKM_sk_value(IPAddressOrRange, (st), (i)) +# define sk_IPAddressOrRange_set(st, i, val) SKM_sk_set(IPAddressOrRange, (st), (i), (val)) +# define sk_IPAddressOrRange_zero(st) SKM_sk_zero(IPAddressOrRange, (st)) +# define sk_IPAddressOrRange_push(st, val) SKM_sk_push(IPAddressOrRange, (st), (val)) +# define sk_IPAddressOrRange_unshift(st, val) SKM_sk_unshift(IPAddressOrRange, (st), (val)) +# define sk_IPAddressOrRange_find(st, val) SKM_sk_find(IPAddressOrRange, (st), (val)) +# define sk_IPAddressOrRange_find_ex(st, val) SKM_sk_find_ex(IPAddressOrRange, (st), (val)) +# define sk_IPAddressOrRange_delete(st, i) SKM_sk_delete(IPAddressOrRange, (st), (i)) +# define sk_IPAddressOrRange_delete_ptr(st, ptr) SKM_sk_delete_ptr(IPAddressOrRange, (st), (ptr)) +# define sk_IPAddressOrRange_insert(st, val, i) SKM_sk_insert(IPAddressOrRange, (st), (val), (i)) +# define sk_IPAddressOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressOrRange, (st), (cmp)) +# define sk_IPAddressOrRange_dup(st) SKM_sk_dup(IPAddressOrRange, st) +# define sk_IPAddressOrRange_pop_free(st, free_func) SKM_sk_pop_free(IPAddressOrRange, (st), (free_func)) +# define sk_IPAddressOrRange_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(IPAddressOrRange, (st), (copy_func), (free_func)) +# define sk_IPAddressOrRange_shift(st) SKM_sk_shift(IPAddressOrRange, (st)) +# define sk_IPAddressOrRange_pop(st) SKM_sk_pop(IPAddressOrRange, (st)) +# define sk_IPAddressOrRange_sort(st) SKM_sk_sort(IPAddressOrRange, (st)) +# define sk_IPAddressOrRange_is_sorted(st) SKM_sk_is_sorted(IPAddressOrRange, (st)) +# define sk_KRB5_APREQBODY_new(cmp) SKM_sk_new(KRB5_APREQBODY, (cmp)) +# define sk_KRB5_APREQBODY_new_null() SKM_sk_new_null(KRB5_APREQBODY) +# define sk_KRB5_APREQBODY_free(st) SKM_sk_free(KRB5_APREQBODY, (st)) +# define sk_KRB5_APREQBODY_num(st) SKM_sk_num(KRB5_APREQBODY, (st)) +# define sk_KRB5_APREQBODY_value(st, i) SKM_sk_value(KRB5_APREQBODY, (st), (i)) +# define sk_KRB5_APREQBODY_set(st, i, val) SKM_sk_set(KRB5_APREQBODY, (st), (i), (val)) +# define sk_KRB5_APREQBODY_zero(st) SKM_sk_zero(KRB5_APREQBODY, (st)) +# define sk_KRB5_APREQBODY_push(st, val) SKM_sk_push(KRB5_APREQBODY, (st), (val)) +# define sk_KRB5_APREQBODY_unshift(st, val) SKM_sk_unshift(KRB5_APREQBODY, (st), (val)) +# define sk_KRB5_APREQBODY_find(st, val) SKM_sk_find(KRB5_APREQBODY, (st), (val)) +# define sk_KRB5_APREQBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_APREQBODY, (st), (val)) +# define sk_KRB5_APREQBODY_delete(st, i) SKM_sk_delete(KRB5_APREQBODY, (st), (i)) +# define sk_KRB5_APREQBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_APREQBODY, (st), (ptr)) +# define sk_KRB5_APREQBODY_insert(st, val, i) SKM_sk_insert(KRB5_APREQBODY, (st), (val), (i)) +# define sk_KRB5_APREQBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_APREQBODY, (st), (cmp)) +# define sk_KRB5_APREQBODY_dup(st) SKM_sk_dup(KRB5_APREQBODY, st) +# define sk_KRB5_APREQBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_APREQBODY, (st), (free_func)) +# define sk_KRB5_APREQBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_APREQBODY, (st), (copy_func), (free_func)) +# define sk_KRB5_APREQBODY_shift(st) SKM_sk_shift(KRB5_APREQBODY, (st)) +# define sk_KRB5_APREQBODY_pop(st) SKM_sk_pop(KRB5_APREQBODY, (st)) +# define sk_KRB5_APREQBODY_sort(st) SKM_sk_sort(KRB5_APREQBODY, (st)) +# define sk_KRB5_APREQBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_APREQBODY, (st)) +# define sk_KRB5_AUTHDATA_new(cmp) SKM_sk_new(KRB5_AUTHDATA, (cmp)) +# define sk_KRB5_AUTHDATA_new_null() SKM_sk_new_null(KRB5_AUTHDATA) +# define sk_KRB5_AUTHDATA_free(st) SKM_sk_free(KRB5_AUTHDATA, (st)) +# define sk_KRB5_AUTHDATA_num(st) SKM_sk_num(KRB5_AUTHDATA, (st)) +# define sk_KRB5_AUTHDATA_value(st, i) SKM_sk_value(KRB5_AUTHDATA, (st), (i)) +# define sk_KRB5_AUTHDATA_set(st, i, val) SKM_sk_set(KRB5_AUTHDATA, (st), (i), (val)) +# define sk_KRB5_AUTHDATA_zero(st) SKM_sk_zero(KRB5_AUTHDATA, (st)) +# define sk_KRB5_AUTHDATA_push(st, val) SKM_sk_push(KRB5_AUTHDATA, (st), (val)) +# define sk_KRB5_AUTHDATA_unshift(st, val) SKM_sk_unshift(KRB5_AUTHDATA, (st), (val)) +# define sk_KRB5_AUTHDATA_find(st, val) SKM_sk_find(KRB5_AUTHDATA, (st), (val)) +# define sk_KRB5_AUTHDATA_find_ex(st, val) SKM_sk_find_ex(KRB5_AUTHDATA, (st), (val)) +# define sk_KRB5_AUTHDATA_delete(st, i) SKM_sk_delete(KRB5_AUTHDATA, (st), (i)) +# define sk_KRB5_AUTHDATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_AUTHDATA, (st), (ptr)) +# define sk_KRB5_AUTHDATA_insert(st, val, i) SKM_sk_insert(KRB5_AUTHDATA, (st), (val), (i)) +# define sk_KRB5_AUTHDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHDATA, (st), (cmp)) +# define sk_KRB5_AUTHDATA_dup(st) SKM_sk_dup(KRB5_AUTHDATA, st) +# define sk_KRB5_AUTHDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHDATA, (st), (free_func)) +# define sk_KRB5_AUTHDATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_AUTHDATA, (st), (copy_func), (free_func)) +# define sk_KRB5_AUTHDATA_shift(st) SKM_sk_shift(KRB5_AUTHDATA, (st)) +# define sk_KRB5_AUTHDATA_pop(st) SKM_sk_pop(KRB5_AUTHDATA, (st)) +# define sk_KRB5_AUTHDATA_sort(st) SKM_sk_sort(KRB5_AUTHDATA, (st)) +# define sk_KRB5_AUTHDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHDATA, (st)) +# define sk_KRB5_AUTHENTBODY_new(cmp) SKM_sk_new(KRB5_AUTHENTBODY, (cmp)) +# define sk_KRB5_AUTHENTBODY_new_null() SKM_sk_new_null(KRB5_AUTHENTBODY) +# define sk_KRB5_AUTHENTBODY_free(st) SKM_sk_free(KRB5_AUTHENTBODY, (st)) +# define sk_KRB5_AUTHENTBODY_num(st) SKM_sk_num(KRB5_AUTHENTBODY, (st)) +# define sk_KRB5_AUTHENTBODY_value(st, i) SKM_sk_value(KRB5_AUTHENTBODY, (st), (i)) +# define sk_KRB5_AUTHENTBODY_set(st, i, val) SKM_sk_set(KRB5_AUTHENTBODY, (st), (i), (val)) +# define sk_KRB5_AUTHENTBODY_zero(st) SKM_sk_zero(KRB5_AUTHENTBODY, (st)) +# define sk_KRB5_AUTHENTBODY_push(st, val) SKM_sk_push(KRB5_AUTHENTBODY, (st), (val)) +# define sk_KRB5_AUTHENTBODY_unshift(st, val) SKM_sk_unshift(KRB5_AUTHENTBODY, (st), (val)) +# define sk_KRB5_AUTHENTBODY_find(st, val) SKM_sk_find(KRB5_AUTHENTBODY, (st), (val)) +# define sk_KRB5_AUTHENTBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_AUTHENTBODY, (st), (val)) +# define sk_KRB5_AUTHENTBODY_delete(st, i) SKM_sk_delete(KRB5_AUTHENTBODY, (st), (i)) +# define sk_KRB5_AUTHENTBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_AUTHENTBODY, (st), (ptr)) +# define sk_KRB5_AUTHENTBODY_insert(st, val, i) SKM_sk_insert(KRB5_AUTHENTBODY, (st), (val), (i)) +# define sk_KRB5_AUTHENTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHENTBODY, (st), (cmp)) +# define sk_KRB5_AUTHENTBODY_dup(st) SKM_sk_dup(KRB5_AUTHENTBODY, st) +# define sk_KRB5_AUTHENTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHENTBODY, (st), (free_func)) +# define sk_KRB5_AUTHENTBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_AUTHENTBODY, (st), (copy_func), (free_func)) +# define sk_KRB5_AUTHENTBODY_shift(st) SKM_sk_shift(KRB5_AUTHENTBODY, (st)) +# define sk_KRB5_AUTHENTBODY_pop(st) SKM_sk_pop(KRB5_AUTHENTBODY, (st)) +# define sk_KRB5_AUTHENTBODY_sort(st) SKM_sk_sort(KRB5_AUTHENTBODY, (st)) +# define sk_KRB5_AUTHENTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHENTBODY, (st)) +# define sk_KRB5_CHECKSUM_new(cmp) SKM_sk_new(KRB5_CHECKSUM, (cmp)) +# define sk_KRB5_CHECKSUM_new_null() SKM_sk_new_null(KRB5_CHECKSUM) +# define sk_KRB5_CHECKSUM_free(st) SKM_sk_free(KRB5_CHECKSUM, (st)) +# define sk_KRB5_CHECKSUM_num(st) SKM_sk_num(KRB5_CHECKSUM, (st)) +# define sk_KRB5_CHECKSUM_value(st, i) SKM_sk_value(KRB5_CHECKSUM, (st), (i)) +# define sk_KRB5_CHECKSUM_set(st, i, val) SKM_sk_set(KRB5_CHECKSUM, (st), (i), (val)) +# define sk_KRB5_CHECKSUM_zero(st) SKM_sk_zero(KRB5_CHECKSUM, (st)) +# define sk_KRB5_CHECKSUM_push(st, val) SKM_sk_push(KRB5_CHECKSUM, (st), (val)) +# define sk_KRB5_CHECKSUM_unshift(st, val) SKM_sk_unshift(KRB5_CHECKSUM, (st), (val)) +# define sk_KRB5_CHECKSUM_find(st, val) SKM_sk_find(KRB5_CHECKSUM, (st), (val)) +# define sk_KRB5_CHECKSUM_find_ex(st, val) SKM_sk_find_ex(KRB5_CHECKSUM, (st), (val)) +# define sk_KRB5_CHECKSUM_delete(st, i) SKM_sk_delete(KRB5_CHECKSUM, (st), (i)) +# define sk_KRB5_CHECKSUM_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_CHECKSUM, (st), (ptr)) +# define sk_KRB5_CHECKSUM_insert(st, val, i) SKM_sk_insert(KRB5_CHECKSUM, (st), (val), (i)) +# define sk_KRB5_CHECKSUM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_CHECKSUM, (st), (cmp)) +# define sk_KRB5_CHECKSUM_dup(st) SKM_sk_dup(KRB5_CHECKSUM, st) +# define sk_KRB5_CHECKSUM_pop_free(st, free_func) SKM_sk_pop_free(KRB5_CHECKSUM, (st), (free_func)) +# define sk_KRB5_CHECKSUM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_CHECKSUM, (st), (copy_func), (free_func)) +# define sk_KRB5_CHECKSUM_shift(st) SKM_sk_shift(KRB5_CHECKSUM, (st)) +# define sk_KRB5_CHECKSUM_pop(st) SKM_sk_pop(KRB5_CHECKSUM, (st)) +# define sk_KRB5_CHECKSUM_sort(st) SKM_sk_sort(KRB5_CHECKSUM, (st)) +# define sk_KRB5_CHECKSUM_is_sorted(st) SKM_sk_is_sorted(KRB5_CHECKSUM, (st)) +# define sk_KRB5_ENCDATA_new(cmp) SKM_sk_new(KRB5_ENCDATA, (cmp)) +# define sk_KRB5_ENCDATA_new_null() SKM_sk_new_null(KRB5_ENCDATA) +# define sk_KRB5_ENCDATA_free(st) SKM_sk_free(KRB5_ENCDATA, (st)) +# define sk_KRB5_ENCDATA_num(st) SKM_sk_num(KRB5_ENCDATA, (st)) +# define sk_KRB5_ENCDATA_value(st, i) SKM_sk_value(KRB5_ENCDATA, (st), (i)) +# define sk_KRB5_ENCDATA_set(st, i, val) SKM_sk_set(KRB5_ENCDATA, (st), (i), (val)) +# define sk_KRB5_ENCDATA_zero(st) SKM_sk_zero(KRB5_ENCDATA, (st)) +# define sk_KRB5_ENCDATA_push(st, val) SKM_sk_push(KRB5_ENCDATA, (st), (val)) +# define sk_KRB5_ENCDATA_unshift(st, val) SKM_sk_unshift(KRB5_ENCDATA, (st), (val)) +# define sk_KRB5_ENCDATA_find(st, val) SKM_sk_find(KRB5_ENCDATA, (st), (val)) +# define sk_KRB5_ENCDATA_find_ex(st, val) SKM_sk_find_ex(KRB5_ENCDATA, (st), (val)) +# define sk_KRB5_ENCDATA_delete(st, i) SKM_sk_delete(KRB5_ENCDATA, (st), (i)) +# define sk_KRB5_ENCDATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_ENCDATA, (st), (ptr)) +# define sk_KRB5_ENCDATA_insert(st, val, i) SKM_sk_insert(KRB5_ENCDATA, (st), (val), (i)) +# define sk_KRB5_ENCDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCDATA, (st), (cmp)) +# define sk_KRB5_ENCDATA_dup(st) SKM_sk_dup(KRB5_ENCDATA, st) +# define sk_KRB5_ENCDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCDATA, (st), (free_func)) +# define sk_KRB5_ENCDATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_ENCDATA, (st), (copy_func), (free_func)) +# define sk_KRB5_ENCDATA_shift(st) SKM_sk_shift(KRB5_ENCDATA, (st)) +# define sk_KRB5_ENCDATA_pop(st) SKM_sk_pop(KRB5_ENCDATA, (st)) +# define sk_KRB5_ENCDATA_sort(st) SKM_sk_sort(KRB5_ENCDATA, (st)) +# define sk_KRB5_ENCDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCDATA, (st)) +# define sk_KRB5_ENCKEY_new(cmp) SKM_sk_new(KRB5_ENCKEY, (cmp)) +# define sk_KRB5_ENCKEY_new_null() SKM_sk_new_null(KRB5_ENCKEY) +# define sk_KRB5_ENCKEY_free(st) SKM_sk_free(KRB5_ENCKEY, (st)) +# define sk_KRB5_ENCKEY_num(st) SKM_sk_num(KRB5_ENCKEY, (st)) +# define sk_KRB5_ENCKEY_value(st, i) SKM_sk_value(KRB5_ENCKEY, (st), (i)) +# define sk_KRB5_ENCKEY_set(st, i, val) SKM_sk_set(KRB5_ENCKEY, (st), (i), (val)) +# define sk_KRB5_ENCKEY_zero(st) SKM_sk_zero(KRB5_ENCKEY, (st)) +# define sk_KRB5_ENCKEY_push(st, val) SKM_sk_push(KRB5_ENCKEY, (st), (val)) +# define sk_KRB5_ENCKEY_unshift(st, val) SKM_sk_unshift(KRB5_ENCKEY, (st), (val)) +# define sk_KRB5_ENCKEY_find(st, val) SKM_sk_find(KRB5_ENCKEY, (st), (val)) +# define sk_KRB5_ENCKEY_find_ex(st, val) SKM_sk_find_ex(KRB5_ENCKEY, (st), (val)) +# define sk_KRB5_ENCKEY_delete(st, i) SKM_sk_delete(KRB5_ENCKEY, (st), (i)) +# define sk_KRB5_ENCKEY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_ENCKEY, (st), (ptr)) +# define sk_KRB5_ENCKEY_insert(st, val, i) SKM_sk_insert(KRB5_ENCKEY, (st), (val), (i)) +# define sk_KRB5_ENCKEY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCKEY, (st), (cmp)) +# define sk_KRB5_ENCKEY_dup(st) SKM_sk_dup(KRB5_ENCKEY, st) +# define sk_KRB5_ENCKEY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCKEY, (st), (free_func)) +# define sk_KRB5_ENCKEY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_ENCKEY, (st), (copy_func), (free_func)) +# define sk_KRB5_ENCKEY_shift(st) SKM_sk_shift(KRB5_ENCKEY, (st)) +# define sk_KRB5_ENCKEY_pop(st) SKM_sk_pop(KRB5_ENCKEY, (st)) +# define sk_KRB5_ENCKEY_sort(st) SKM_sk_sort(KRB5_ENCKEY, (st)) +# define sk_KRB5_ENCKEY_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCKEY, (st)) +# define sk_KRB5_PRINCNAME_new(cmp) SKM_sk_new(KRB5_PRINCNAME, (cmp)) +# define sk_KRB5_PRINCNAME_new_null() SKM_sk_new_null(KRB5_PRINCNAME) +# define sk_KRB5_PRINCNAME_free(st) SKM_sk_free(KRB5_PRINCNAME, (st)) +# define sk_KRB5_PRINCNAME_num(st) SKM_sk_num(KRB5_PRINCNAME, (st)) +# define sk_KRB5_PRINCNAME_value(st, i) SKM_sk_value(KRB5_PRINCNAME, (st), (i)) +# define sk_KRB5_PRINCNAME_set(st, i, val) SKM_sk_set(KRB5_PRINCNAME, (st), (i), (val)) +# define sk_KRB5_PRINCNAME_zero(st) SKM_sk_zero(KRB5_PRINCNAME, (st)) +# define sk_KRB5_PRINCNAME_push(st, val) SKM_sk_push(KRB5_PRINCNAME, (st), (val)) +# define sk_KRB5_PRINCNAME_unshift(st, val) SKM_sk_unshift(KRB5_PRINCNAME, (st), (val)) +# define sk_KRB5_PRINCNAME_find(st, val) SKM_sk_find(KRB5_PRINCNAME, (st), (val)) +# define sk_KRB5_PRINCNAME_find_ex(st, val) SKM_sk_find_ex(KRB5_PRINCNAME, (st), (val)) +# define sk_KRB5_PRINCNAME_delete(st, i) SKM_sk_delete(KRB5_PRINCNAME, (st), (i)) +# define sk_KRB5_PRINCNAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_PRINCNAME, (st), (ptr)) +# define sk_KRB5_PRINCNAME_insert(st, val, i) SKM_sk_insert(KRB5_PRINCNAME, (st), (val), (i)) +# define sk_KRB5_PRINCNAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_PRINCNAME, (st), (cmp)) +# define sk_KRB5_PRINCNAME_dup(st) SKM_sk_dup(KRB5_PRINCNAME, st) +# define sk_KRB5_PRINCNAME_pop_free(st, free_func) SKM_sk_pop_free(KRB5_PRINCNAME, (st), (free_func)) +# define sk_KRB5_PRINCNAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_PRINCNAME, (st), (copy_func), (free_func)) +# define sk_KRB5_PRINCNAME_shift(st) SKM_sk_shift(KRB5_PRINCNAME, (st)) +# define sk_KRB5_PRINCNAME_pop(st) SKM_sk_pop(KRB5_PRINCNAME, (st)) +# define sk_KRB5_PRINCNAME_sort(st) SKM_sk_sort(KRB5_PRINCNAME, (st)) +# define sk_KRB5_PRINCNAME_is_sorted(st) SKM_sk_is_sorted(KRB5_PRINCNAME, (st)) +# define sk_KRB5_TKTBODY_new(cmp) SKM_sk_new(KRB5_TKTBODY, (cmp)) +# define sk_KRB5_TKTBODY_new_null() SKM_sk_new_null(KRB5_TKTBODY) +# define sk_KRB5_TKTBODY_free(st) SKM_sk_free(KRB5_TKTBODY, (st)) +# define sk_KRB5_TKTBODY_num(st) SKM_sk_num(KRB5_TKTBODY, (st)) +# define sk_KRB5_TKTBODY_value(st, i) SKM_sk_value(KRB5_TKTBODY, (st), (i)) +# define sk_KRB5_TKTBODY_set(st, i, val) SKM_sk_set(KRB5_TKTBODY, (st), (i), (val)) +# define sk_KRB5_TKTBODY_zero(st) SKM_sk_zero(KRB5_TKTBODY, (st)) +# define sk_KRB5_TKTBODY_push(st, val) SKM_sk_push(KRB5_TKTBODY, (st), (val)) +# define sk_KRB5_TKTBODY_unshift(st, val) SKM_sk_unshift(KRB5_TKTBODY, (st), (val)) +# define sk_KRB5_TKTBODY_find(st, val) SKM_sk_find(KRB5_TKTBODY, (st), (val)) +# define sk_KRB5_TKTBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_TKTBODY, (st), (val)) +# define sk_KRB5_TKTBODY_delete(st, i) SKM_sk_delete(KRB5_TKTBODY, (st), (i)) +# define sk_KRB5_TKTBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_TKTBODY, (st), (ptr)) +# define sk_KRB5_TKTBODY_insert(st, val, i) SKM_sk_insert(KRB5_TKTBODY, (st), (val), (i)) +# define sk_KRB5_TKTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_TKTBODY, (st), (cmp)) +# define sk_KRB5_TKTBODY_dup(st) SKM_sk_dup(KRB5_TKTBODY, st) +# define sk_KRB5_TKTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_TKTBODY, (st), (free_func)) +# define sk_KRB5_TKTBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_TKTBODY, (st), (copy_func), (free_func)) +# define sk_KRB5_TKTBODY_shift(st) SKM_sk_shift(KRB5_TKTBODY, (st)) +# define sk_KRB5_TKTBODY_pop(st) SKM_sk_pop(KRB5_TKTBODY, (st)) +# define sk_KRB5_TKTBODY_sort(st) SKM_sk_sort(KRB5_TKTBODY, (st)) +# define sk_KRB5_TKTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_TKTBODY, (st)) +# define sk_MEM_OBJECT_DATA_new(cmp) SKM_sk_new(MEM_OBJECT_DATA, (cmp)) +# define sk_MEM_OBJECT_DATA_new_null() SKM_sk_new_null(MEM_OBJECT_DATA) +# define sk_MEM_OBJECT_DATA_free(st) SKM_sk_free(MEM_OBJECT_DATA, (st)) +# define sk_MEM_OBJECT_DATA_num(st) SKM_sk_num(MEM_OBJECT_DATA, (st)) +# define sk_MEM_OBJECT_DATA_value(st, i) SKM_sk_value(MEM_OBJECT_DATA, (st), (i)) +# define sk_MEM_OBJECT_DATA_set(st, i, val) SKM_sk_set(MEM_OBJECT_DATA, (st), (i), (val)) +# define sk_MEM_OBJECT_DATA_zero(st) SKM_sk_zero(MEM_OBJECT_DATA, (st)) +# define sk_MEM_OBJECT_DATA_push(st, val) SKM_sk_push(MEM_OBJECT_DATA, (st), (val)) +# define sk_MEM_OBJECT_DATA_unshift(st, val) SKM_sk_unshift(MEM_OBJECT_DATA, (st), (val)) +# define sk_MEM_OBJECT_DATA_find(st, val) SKM_sk_find(MEM_OBJECT_DATA, (st), (val)) +# define sk_MEM_OBJECT_DATA_find_ex(st, val) SKM_sk_find_ex(MEM_OBJECT_DATA, (st), (val)) +# define sk_MEM_OBJECT_DATA_delete(st, i) SKM_sk_delete(MEM_OBJECT_DATA, (st), (i)) +# define sk_MEM_OBJECT_DATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(MEM_OBJECT_DATA, (st), (ptr)) +# define sk_MEM_OBJECT_DATA_insert(st, val, i) SKM_sk_insert(MEM_OBJECT_DATA, (st), (val), (i)) +# define sk_MEM_OBJECT_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MEM_OBJECT_DATA, (st), (cmp)) +# define sk_MEM_OBJECT_DATA_dup(st) SKM_sk_dup(MEM_OBJECT_DATA, st) +# define sk_MEM_OBJECT_DATA_pop_free(st, free_func) SKM_sk_pop_free(MEM_OBJECT_DATA, (st), (free_func)) +# define sk_MEM_OBJECT_DATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MEM_OBJECT_DATA, (st), (copy_func), (free_func)) +# define sk_MEM_OBJECT_DATA_shift(st) SKM_sk_shift(MEM_OBJECT_DATA, (st)) +# define sk_MEM_OBJECT_DATA_pop(st) SKM_sk_pop(MEM_OBJECT_DATA, (st)) +# define sk_MEM_OBJECT_DATA_sort(st) SKM_sk_sort(MEM_OBJECT_DATA, (st)) +# define sk_MEM_OBJECT_DATA_is_sorted(st) SKM_sk_is_sorted(MEM_OBJECT_DATA, (st)) +# define sk_MIME_HEADER_new(cmp) SKM_sk_new(MIME_HEADER, (cmp)) +# define sk_MIME_HEADER_new_null() SKM_sk_new_null(MIME_HEADER) +# define sk_MIME_HEADER_free(st) SKM_sk_free(MIME_HEADER, (st)) +# define sk_MIME_HEADER_num(st) SKM_sk_num(MIME_HEADER, (st)) +# define sk_MIME_HEADER_value(st, i) SKM_sk_value(MIME_HEADER, (st), (i)) +# define sk_MIME_HEADER_set(st, i, val) SKM_sk_set(MIME_HEADER, (st), (i), (val)) +# define sk_MIME_HEADER_zero(st) SKM_sk_zero(MIME_HEADER, (st)) +# define sk_MIME_HEADER_push(st, val) SKM_sk_push(MIME_HEADER, (st), (val)) +# define sk_MIME_HEADER_unshift(st, val) SKM_sk_unshift(MIME_HEADER, (st), (val)) +# define sk_MIME_HEADER_find(st, val) SKM_sk_find(MIME_HEADER, (st), (val)) +# define sk_MIME_HEADER_find_ex(st, val) SKM_sk_find_ex(MIME_HEADER, (st), (val)) +# define sk_MIME_HEADER_delete(st, i) SKM_sk_delete(MIME_HEADER, (st), (i)) +# define sk_MIME_HEADER_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_HEADER, (st), (ptr)) +# define sk_MIME_HEADER_insert(st, val, i) SKM_sk_insert(MIME_HEADER, (st), (val), (i)) +# define sk_MIME_HEADER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_HEADER, (st), (cmp)) +# define sk_MIME_HEADER_dup(st) SKM_sk_dup(MIME_HEADER, st) +# define sk_MIME_HEADER_pop_free(st, free_func) SKM_sk_pop_free(MIME_HEADER, (st), (free_func)) +# define sk_MIME_HEADER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MIME_HEADER, (st), (copy_func), (free_func)) +# define sk_MIME_HEADER_shift(st) SKM_sk_shift(MIME_HEADER, (st)) +# define sk_MIME_HEADER_pop(st) SKM_sk_pop(MIME_HEADER, (st)) +# define sk_MIME_HEADER_sort(st) SKM_sk_sort(MIME_HEADER, (st)) +# define sk_MIME_HEADER_is_sorted(st) SKM_sk_is_sorted(MIME_HEADER, (st)) +# define sk_MIME_PARAM_new(cmp) SKM_sk_new(MIME_PARAM, (cmp)) +# define sk_MIME_PARAM_new_null() SKM_sk_new_null(MIME_PARAM) +# define sk_MIME_PARAM_free(st) SKM_sk_free(MIME_PARAM, (st)) +# define sk_MIME_PARAM_num(st) SKM_sk_num(MIME_PARAM, (st)) +# define sk_MIME_PARAM_value(st, i) SKM_sk_value(MIME_PARAM, (st), (i)) +# define sk_MIME_PARAM_set(st, i, val) SKM_sk_set(MIME_PARAM, (st), (i), (val)) +# define sk_MIME_PARAM_zero(st) SKM_sk_zero(MIME_PARAM, (st)) +# define sk_MIME_PARAM_push(st, val) SKM_sk_push(MIME_PARAM, (st), (val)) +# define sk_MIME_PARAM_unshift(st, val) SKM_sk_unshift(MIME_PARAM, (st), (val)) +# define sk_MIME_PARAM_find(st, val) SKM_sk_find(MIME_PARAM, (st), (val)) +# define sk_MIME_PARAM_find_ex(st, val) SKM_sk_find_ex(MIME_PARAM, (st), (val)) +# define sk_MIME_PARAM_delete(st, i) SKM_sk_delete(MIME_PARAM, (st), (i)) +# define sk_MIME_PARAM_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_PARAM, (st), (ptr)) +# define sk_MIME_PARAM_insert(st, val, i) SKM_sk_insert(MIME_PARAM, (st), (val), (i)) +# define sk_MIME_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_PARAM, (st), (cmp)) +# define sk_MIME_PARAM_dup(st) SKM_sk_dup(MIME_PARAM, st) +# define sk_MIME_PARAM_pop_free(st, free_func) SKM_sk_pop_free(MIME_PARAM, (st), (free_func)) +# define sk_MIME_PARAM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MIME_PARAM, (st), (copy_func), (free_func)) +# define sk_MIME_PARAM_shift(st) SKM_sk_shift(MIME_PARAM, (st)) +# define sk_MIME_PARAM_pop(st) SKM_sk_pop(MIME_PARAM, (st)) +# define sk_MIME_PARAM_sort(st) SKM_sk_sort(MIME_PARAM, (st)) +# define sk_MIME_PARAM_is_sorted(st) SKM_sk_is_sorted(MIME_PARAM, (st)) +# define sk_NAME_FUNCS_new(cmp) SKM_sk_new(NAME_FUNCS, (cmp)) +# define sk_NAME_FUNCS_new_null() SKM_sk_new_null(NAME_FUNCS) +# define sk_NAME_FUNCS_free(st) SKM_sk_free(NAME_FUNCS, (st)) +# define sk_NAME_FUNCS_num(st) SKM_sk_num(NAME_FUNCS, (st)) +# define sk_NAME_FUNCS_value(st, i) SKM_sk_value(NAME_FUNCS, (st), (i)) +# define sk_NAME_FUNCS_set(st, i, val) SKM_sk_set(NAME_FUNCS, (st), (i), (val)) +# define sk_NAME_FUNCS_zero(st) SKM_sk_zero(NAME_FUNCS, (st)) +# define sk_NAME_FUNCS_push(st, val) SKM_sk_push(NAME_FUNCS, (st), (val)) +# define sk_NAME_FUNCS_unshift(st, val) SKM_sk_unshift(NAME_FUNCS, (st), (val)) +# define sk_NAME_FUNCS_find(st, val) SKM_sk_find(NAME_FUNCS, (st), (val)) +# define sk_NAME_FUNCS_find_ex(st, val) SKM_sk_find_ex(NAME_FUNCS, (st), (val)) +# define sk_NAME_FUNCS_delete(st, i) SKM_sk_delete(NAME_FUNCS, (st), (i)) +# define sk_NAME_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(NAME_FUNCS, (st), (ptr)) +# define sk_NAME_FUNCS_insert(st, val, i) SKM_sk_insert(NAME_FUNCS, (st), (val), (i)) +# define sk_NAME_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(NAME_FUNCS, (st), (cmp)) +# define sk_NAME_FUNCS_dup(st) SKM_sk_dup(NAME_FUNCS, st) +# define sk_NAME_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(NAME_FUNCS, (st), (free_func)) +# define sk_NAME_FUNCS_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(NAME_FUNCS, (st), (copy_func), (free_func)) +# define sk_NAME_FUNCS_shift(st) SKM_sk_shift(NAME_FUNCS, (st)) +# define sk_NAME_FUNCS_pop(st) SKM_sk_pop(NAME_FUNCS, (st)) +# define sk_NAME_FUNCS_sort(st) SKM_sk_sort(NAME_FUNCS, (st)) +# define sk_NAME_FUNCS_is_sorted(st) SKM_sk_is_sorted(NAME_FUNCS, (st)) +# define sk_OCSP_CERTID_new(cmp) SKM_sk_new(OCSP_CERTID, (cmp)) +# define sk_OCSP_CERTID_new_null() SKM_sk_new_null(OCSP_CERTID) +# define sk_OCSP_CERTID_free(st) SKM_sk_free(OCSP_CERTID, (st)) +# define sk_OCSP_CERTID_num(st) SKM_sk_num(OCSP_CERTID, (st)) +# define sk_OCSP_CERTID_value(st, i) SKM_sk_value(OCSP_CERTID, (st), (i)) +# define sk_OCSP_CERTID_set(st, i, val) SKM_sk_set(OCSP_CERTID, (st), (i), (val)) +# define sk_OCSP_CERTID_zero(st) SKM_sk_zero(OCSP_CERTID, (st)) +# define sk_OCSP_CERTID_push(st, val) SKM_sk_push(OCSP_CERTID, (st), (val)) +# define sk_OCSP_CERTID_unshift(st, val) SKM_sk_unshift(OCSP_CERTID, (st), (val)) +# define sk_OCSP_CERTID_find(st, val) SKM_sk_find(OCSP_CERTID, (st), (val)) +# define sk_OCSP_CERTID_find_ex(st, val) SKM_sk_find_ex(OCSP_CERTID, (st), (val)) +# define sk_OCSP_CERTID_delete(st, i) SKM_sk_delete(OCSP_CERTID, (st), (i)) +# define sk_OCSP_CERTID_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_CERTID, (st), (ptr)) +# define sk_OCSP_CERTID_insert(st, val, i) SKM_sk_insert(OCSP_CERTID, (st), (val), (i)) +# define sk_OCSP_CERTID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_CERTID, (st), (cmp)) +# define sk_OCSP_CERTID_dup(st) SKM_sk_dup(OCSP_CERTID, st) +# define sk_OCSP_CERTID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_CERTID, (st), (free_func)) +# define sk_OCSP_CERTID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_CERTID, (st), (copy_func), (free_func)) +# define sk_OCSP_CERTID_shift(st) SKM_sk_shift(OCSP_CERTID, (st)) +# define sk_OCSP_CERTID_pop(st) SKM_sk_pop(OCSP_CERTID, (st)) +# define sk_OCSP_CERTID_sort(st) SKM_sk_sort(OCSP_CERTID, (st)) +# define sk_OCSP_CERTID_is_sorted(st) SKM_sk_is_sorted(OCSP_CERTID, (st)) +# define sk_OCSP_ONEREQ_new(cmp) SKM_sk_new(OCSP_ONEREQ, (cmp)) +# define sk_OCSP_ONEREQ_new_null() SKM_sk_new_null(OCSP_ONEREQ) +# define sk_OCSP_ONEREQ_free(st) SKM_sk_free(OCSP_ONEREQ, (st)) +# define sk_OCSP_ONEREQ_num(st) SKM_sk_num(OCSP_ONEREQ, (st)) +# define sk_OCSP_ONEREQ_value(st, i) SKM_sk_value(OCSP_ONEREQ, (st), (i)) +# define sk_OCSP_ONEREQ_set(st, i, val) SKM_sk_set(OCSP_ONEREQ, (st), (i), (val)) +# define sk_OCSP_ONEREQ_zero(st) SKM_sk_zero(OCSP_ONEREQ, (st)) +# define sk_OCSP_ONEREQ_push(st, val) SKM_sk_push(OCSP_ONEREQ, (st), (val)) +# define sk_OCSP_ONEREQ_unshift(st, val) SKM_sk_unshift(OCSP_ONEREQ, (st), (val)) +# define sk_OCSP_ONEREQ_find(st, val) SKM_sk_find(OCSP_ONEREQ, (st), (val)) +# define sk_OCSP_ONEREQ_find_ex(st, val) SKM_sk_find_ex(OCSP_ONEREQ, (st), (val)) +# define sk_OCSP_ONEREQ_delete(st, i) SKM_sk_delete(OCSP_ONEREQ, (st), (i)) +# define sk_OCSP_ONEREQ_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_ONEREQ, (st), (ptr)) +# define sk_OCSP_ONEREQ_insert(st, val, i) SKM_sk_insert(OCSP_ONEREQ, (st), (val), (i)) +# define sk_OCSP_ONEREQ_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_ONEREQ, (st), (cmp)) +# define sk_OCSP_ONEREQ_dup(st) SKM_sk_dup(OCSP_ONEREQ, st) +# define sk_OCSP_ONEREQ_pop_free(st, free_func) SKM_sk_pop_free(OCSP_ONEREQ, (st), (free_func)) +# define sk_OCSP_ONEREQ_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_ONEREQ, (st), (copy_func), (free_func)) +# define sk_OCSP_ONEREQ_shift(st) SKM_sk_shift(OCSP_ONEREQ, (st)) +# define sk_OCSP_ONEREQ_pop(st) SKM_sk_pop(OCSP_ONEREQ, (st)) +# define sk_OCSP_ONEREQ_sort(st) SKM_sk_sort(OCSP_ONEREQ, (st)) +# define sk_OCSP_ONEREQ_is_sorted(st) SKM_sk_is_sorted(OCSP_ONEREQ, (st)) +# define sk_OCSP_RESPID_new(cmp) SKM_sk_new(OCSP_RESPID, (cmp)) +# define sk_OCSP_RESPID_new_null() SKM_sk_new_null(OCSP_RESPID) +# define sk_OCSP_RESPID_free(st) SKM_sk_free(OCSP_RESPID, (st)) +# define sk_OCSP_RESPID_num(st) SKM_sk_num(OCSP_RESPID, (st)) +# define sk_OCSP_RESPID_value(st, i) SKM_sk_value(OCSP_RESPID, (st), (i)) +# define sk_OCSP_RESPID_set(st, i, val) SKM_sk_set(OCSP_RESPID, (st), (i), (val)) +# define sk_OCSP_RESPID_zero(st) SKM_sk_zero(OCSP_RESPID, (st)) +# define sk_OCSP_RESPID_push(st, val) SKM_sk_push(OCSP_RESPID, (st), (val)) +# define sk_OCSP_RESPID_unshift(st, val) SKM_sk_unshift(OCSP_RESPID, (st), (val)) +# define sk_OCSP_RESPID_find(st, val) SKM_sk_find(OCSP_RESPID, (st), (val)) +# define sk_OCSP_RESPID_find_ex(st, val) SKM_sk_find_ex(OCSP_RESPID, (st), (val)) +# define sk_OCSP_RESPID_delete(st, i) SKM_sk_delete(OCSP_RESPID, (st), (i)) +# define sk_OCSP_RESPID_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_RESPID, (st), (ptr)) +# define sk_OCSP_RESPID_insert(st, val, i) SKM_sk_insert(OCSP_RESPID, (st), (val), (i)) +# define sk_OCSP_RESPID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_RESPID, (st), (cmp)) +# define sk_OCSP_RESPID_dup(st) SKM_sk_dup(OCSP_RESPID, st) +# define sk_OCSP_RESPID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_RESPID, (st), (free_func)) +# define sk_OCSP_RESPID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_RESPID, (st), (copy_func), (free_func)) +# define sk_OCSP_RESPID_shift(st) SKM_sk_shift(OCSP_RESPID, (st)) +# define sk_OCSP_RESPID_pop(st) SKM_sk_pop(OCSP_RESPID, (st)) +# define sk_OCSP_RESPID_sort(st) SKM_sk_sort(OCSP_RESPID, (st)) +# define sk_OCSP_RESPID_is_sorted(st) SKM_sk_is_sorted(OCSP_RESPID, (st)) +# define sk_OCSP_SINGLERESP_new(cmp) SKM_sk_new(OCSP_SINGLERESP, (cmp)) +# define sk_OCSP_SINGLERESP_new_null() SKM_sk_new_null(OCSP_SINGLERESP) +# define sk_OCSP_SINGLERESP_free(st) SKM_sk_free(OCSP_SINGLERESP, (st)) +# define sk_OCSP_SINGLERESP_num(st) SKM_sk_num(OCSP_SINGLERESP, (st)) +# define sk_OCSP_SINGLERESP_value(st, i) SKM_sk_value(OCSP_SINGLERESP, (st), (i)) +# define sk_OCSP_SINGLERESP_set(st, i, val) SKM_sk_set(OCSP_SINGLERESP, (st), (i), (val)) +# define sk_OCSP_SINGLERESP_zero(st) SKM_sk_zero(OCSP_SINGLERESP, (st)) +# define sk_OCSP_SINGLERESP_push(st, val) SKM_sk_push(OCSP_SINGLERESP, (st), (val)) +# define sk_OCSP_SINGLERESP_unshift(st, val) SKM_sk_unshift(OCSP_SINGLERESP, (st), (val)) +# define sk_OCSP_SINGLERESP_find(st, val) SKM_sk_find(OCSP_SINGLERESP, (st), (val)) +# define sk_OCSP_SINGLERESP_find_ex(st, val) SKM_sk_find_ex(OCSP_SINGLERESP, (st), (val)) +# define sk_OCSP_SINGLERESP_delete(st, i) SKM_sk_delete(OCSP_SINGLERESP, (st), (i)) +# define sk_OCSP_SINGLERESP_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_SINGLERESP, (st), (ptr)) +# define sk_OCSP_SINGLERESP_insert(st, val, i) SKM_sk_insert(OCSP_SINGLERESP, (st), (val), (i)) +# define sk_OCSP_SINGLERESP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_SINGLERESP, (st), (cmp)) +# define sk_OCSP_SINGLERESP_dup(st) SKM_sk_dup(OCSP_SINGLERESP, st) +# define sk_OCSP_SINGLERESP_pop_free(st, free_func) SKM_sk_pop_free(OCSP_SINGLERESP, (st), (free_func)) +# define sk_OCSP_SINGLERESP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_SINGLERESP, (st), (copy_func), (free_func)) +# define sk_OCSP_SINGLERESP_shift(st) SKM_sk_shift(OCSP_SINGLERESP, (st)) +# define sk_OCSP_SINGLERESP_pop(st) SKM_sk_pop(OCSP_SINGLERESP, (st)) +# define sk_OCSP_SINGLERESP_sort(st) SKM_sk_sort(OCSP_SINGLERESP, (st)) +# define sk_OCSP_SINGLERESP_is_sorted(st) SKM_sk_is_sorted(OCSP_SINGLERESP, (st)) +# define sk_PKCS12_SAFEBAG_new(cmp) SKM_sk_new(PKCS12_SAFEBAG, (cmp)) +# define sk_PKCS12_SAFEBAG_new_null() SKM_sk_new_null(PKCS12_SAFEBAG) +# define sk_PKCS12_SAFEBAG_free(st) SKM_sk_free(PKCS12_SAFEBAG, (st)) +# define sk_PKCS12_SAFEBAG_num(st) SKM_sk_num(PKCS12_SAFEBAG, (st)) +# define sk_PKCS12_SAFEBAG_value(st, i) SKM_sk_value(PKCS12_SAFEBAG, (st), (i)) +# define sk_PKCS12_SAFEBAG_set(st, i, val) SKM_sk_set(PKCS12_SAFEBAG, (st), (i), (val)) +# define sk_PKCS12_SAFEBAG_zero(st) SKM_sk_zero(PKCS12_SAFEBAG, (st)) +# define sk_PKCS12_SAFEBAG_push(st, val) SKM_sk_push(PKCS12_SAFEBAG, (st), (val)) +# define sk_PKCS12_SAFEBAG_unshift(st, val) SKM_sk_unshift(PKCS12_SAFEBAG, (st), (val)) +# define sk_PKCS12_SAFEBAG_find(st, val) SKM_sk_find(PKCS12_SAFEBAG, (st), (val)) +# define sk_PKCS12_SAFEBAG_find_ex(st, val) SKM_sk_find_ex(PKCS12_SAFEBAG, (st), (val)) +# define sk_PKCS12_SAFEBAG_delete(st, i) SKM_sk_delete(PKCS12_SAFEBAG, (st), (i)) +# define sk_PKCS12_SAFEBAG_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS12_SAFEBAG, (st), (ptr)) +# define sk_PKCS12_SAFEBAG_insert(st, val, i) SKM_sk_insert(PKCS12_SAFEBAG, (st), (val), (i)) +# define sk_PKCS12_SAFEBAG_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS12_SAFEBAG, (st), (cmp)) +# define sk_PKCS12_SAFEBAG_dup(st) SKM_sk_dup(PKCS12_SAFEBAG, st) +# define sk_PKCS12_SAFEBAG_pop_free(st, free_func) SKM_sk_pop_free(PKCS12_SAFEBAG, (st), (free_func)) +# define sk_PKCS12_SAFEBAG_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS12_SAFEBAG, (st), (copy_func), (free_func)) +# define sk_PKCS12_SAFEBAG_shift(st) SKM_sk_shift(PKCS12_SAFEBAG, (st)) +# define sk_PKCS12_SAFEBAG_pop(st) SKM_sk_pop(PKCS12_SAFEBAG, (st)) +# define sk_PKCS12_SAFEBAG_sort(st) SKM_sk_sort(PKCS12_SAFEBAG, (st)) +# define sk_PKCS12_SAFEBAG_is_sorted(st) SKM_sk_is_sorted(PKCS12_SAFEBAG, (st)) +# define sk_PKCS7_new(cmp) SKM_sk_new(PKCS7, (cmp)) +# define sk_PKCS7_new_null() SKM_sk_new_null(PKCS7) +# define sk_PKCS7_free(st) SKM_sk_free(PKCS7, (st)) +# define sk_PKCS7_num(st) SKM_sk_num(PKCS7, (st)) +# define sk_PKCS7_value(st, i) SKM_sk_value(PKCS7, (st), (i)) +# define sk_PKCS7_set(st, i, val) SKM_sk_set(PKCS7, (st), (i), (val)) +# define sk_PKCS7_zero(st) SKM_sk_zero(PKCS7, (st)) +# define sk_PKCS7_push(st, val) SKM_sk_push(PKCS7, (st), (val)) +# define sk_PKCS7_unshift(st, val) SKM_sk_unshift(PKCS7, (st), (val)) +# define sk_PKCS7_find(st, val) SKM_sk_find(PKCS7, (st), (val)) +# define sk_PKCS7_find_ex(st, val) SKM_sk_find_ex(PKCS7, (st), (val)) +# define sk_PKCS7_delete(st, i) SKM_sk_delete(PKCS7, (st), (i)) +# define sk_PKCS7_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7, (st), (ptr)) +# define sk_PKCS7_insert(st, val, i) SKM_sk_insert(PKCS7, (st), (val), (i)) +# define sk_PKCS7_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7, (st), (cmp)) +# define sk_PKCS7_dup(st) SKM_sk_dup(PKCS7, st) +# define sk_PKCS7_pop_free(st, free_func) SKM_sk_pop_free(PKCS7, (st), (free_func)) +# define sk_PKCS7_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7, (st), (copy_func), (free_func)) +# define sk_PKCS7_shift(st) SKM_sk_shift(PKCS7, (st)) +# define sk_PKCS7_pop(st) SKM_sk_pop(PKCS7, (st)) +# define sk_PKCS7_sort(st) SKM_sk_sort(PKCS7, (st)) +# define sk_PKCS7_is_sorted(st) SKM_sk_is_sorted(PKCS7, (st)) +# define sk_PKCS7_RECIP_INFO_new(cmp) SKM_sk_new(PKCS7_RECIP_INFO, (cmp)) +# define sk_PKCS7_RECIP_INFO_new_null() SKM_sk_new_null(PKCS7_RECIP_INFO) +# define sk_PKCS7_RECIP_INFO_free(st) SKM_sk_free(PKCS7_RECIP_INFO, (st)) +# define sk_PKCS7_RECIP_INFO_num(st) SKM_sk_num(PKCS7_RECIP_INFO, (st)) +# define sk_PKCS7_RECIP_INFO_value(st, i) SKM_sk_value(PKCS7_RECIP_INFO, (st), (i)) +# define sk_PKCS7_RECIP_INFO_set(st, i, val) SKM_sk_set(PKCS7_RECIP_INFO, (st), (i), (val)) +# define sk_PKCS7_RECIP_INFO_zero(st) SKM_sk_zero(PKCS7_RECIP_INFO, (st)) +# define sk_PKCS7_RECIP_INFO_push(st, val) SKM_sk_push(PKCS7_RECIP_INFO, (st), (val)) +# define sk_PKCS7_RECIP_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_RECIP_INFO, (st), (val)) +# define sk_PKCS7_RECIP_INFO_find(st, val) SKM_sk_find(PKCS7_RECIP_INFO, (st), (val)) +# define sk_PKCS7_RECIP_INFO_find_ex(st, val) SKM_sk_find_ex(PKCS7_RECIP_INFO, (st), (val)) +# define sk_PKCS7_RECIP_INFO_delete(st, i) SKM_sk_delete(PKCS7_RECIP_INFO, (st), (i)) +# define sk_PKCS7_RECIP_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_RECIP_INFO, (st), (ptr)) +# define sk_PKCS7_RECIP_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_RECIP_INFO, (st), (val), (i)) +# define sk_PKCS7_RECIP_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_RECIP_INFO, (st), (cmp)) +# define sk_PKCS7_RECIP_INFO_dup(st) SKM_sk_dup(PKCS7_RECIP_INFO, st) +# define sk_PKCS7_RECIP_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_RECIP_INFO, (st), (free_func)) +# define sk_PKCS7_RECIP_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7_RECIP_INFO, (st), (copy_func), (free_func)) +# define sk_PKCS7_RECIP_INFO_shift(st) SKM_sk_shift(PKCS7_RECIP_INFO, (st)) +# define sk_PKCS7_RECIP_INFO_pop(st) SKM_sk_pop(PKCS7_RECIP_INFO, (st)) +# define sk_PKCS7_RECIP_INFO_sort(st) SKM_sk_sort(PKCS7_RECIP_INFO, (st)) +# define sk_PKCS7_RECIP_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_RECIP_INFO, (st)) +# define sk_PKCS7_SIGNER_INFO_new(cmp) SKM_sk_new(PKCS7_SIGNER_INFO, (cmp)) +# define sk_PKCS7_SIGNER_INFO_new_null() SKM_sk_new_null(PKCS7_SIGNER_INFO) +# define sk_PKCS7_SIGNER_INFO_free(st) SKM_sk_free(PKCS7_SIGNER_INFO, (st)) +# define sk_PKCS7_SIGNER_INFO_num(st) SKM_sk_num(PKCS7_SIGNER_INFO, (st)) +# define sk_PKCS7_SIGNER_INFO_value(st, i) SKM_sk_value(PKCS7_SIGNER_INFO, (st), (i)) +# define sk_PKCS7_SIGNER_INFO_set(st, i, val) SKM_sk_set(PKCS7_SIGNER_INFO, (st), (i), (val)) +# define sk_PKCS7_SIGNER_INFO_zero(st) SKM_sk_zero(PKCS7_SIGNER_INFO, (st)) +# define sk_PKCS7_SIGNER_INFO_push(st, val) SKM_sk_push(PKCS7_SIGNER_INFO, (st), (val)) +# define sk_PKCS7_SIGNER_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_SIGNER_INFO, (st), (val)) +# define sk_PKCS7_SIGNER_INFO_find(st, val) SKM_sk_find(PKCS7_SIGNER_INFO, (st), (val)) +# define sk_PKCS7_SIGNER_INFO_find_ex(st, val) SKM_sk_find_ex(PKCS7_SIGNER_INFO, (st), (val)) +# define sk_PKCS7_SIGNER_INFO_delete(st, i) SKM_sk_delete(PKCS7_SIGNER_INFO, (st), (i)) +# define sk_PKCS7_SIGNER_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_SIGNER_INFO, (st), (ptr)) +# define sk_PKCS7_SIGNER_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_SIGNER_INFO, (st), (val), (i)) +# define sk_PKCS7_SIGNER_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_SIGNER_INFO, (st), (cmp)) +# define sk_PKCS7_SIGNER_INFO_dup(st) SKM_sk_dup(PKCS7_SIGNER_INFO, st) +# define sk_PKCS7_SIGNER_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_SIGNER_INFO, (st), (free_func)) +# define sk_PKCS7_SIGNER_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7_SIGNER_INFO, (st), (copy_func), (free_func)) +# define sk_PKCS7_SIGNER_INFO_shift(st) SKM_sk_shift(PKCS7_SIGNER_INFO, (st)) +# define sk_PKCS7_SIGNER_INFO_pop(st) SKM_sk_pop(PKCS7_SIGNER_INFO, (st)) +# define sk_PKCS7_SIGNER_INFO_sort(st) SKM_sk_sort(PKCS7_SIGNER_INFO, (st)) +# define sk_PKCS7_SIGNER_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_SIGNER_INFO, (st)) +# define sk_POLICYINFO_new(cmp) SKM_sk_new(POLICYINFO, (cmp)) +# define sk_POLICYINFO_new_null() SKM_sk_new_null(POLICYINFO) +# define sk_POLICYINFO_free(st) SKM_sk_free(POLICYINFO, (st)) +# define sk_POLICYINFO_num(st) SKM_sk_num(POLICYINFO, (st)) +# define sk_POLICYINFO_value(st, i) SKM_sk_value(POLICYINFO, (st), (i)) +# define sk_POLICYINFO_set(st, i, val) SKM_sk_set(POLICYINFO, (st), (i), (val)) +# define sk_POLICYINFO_zero(st) SKM_sk_zero(POLICYINFO, (st)) +# define sk_POLICYINFO_push(st, val) SKM_sk_push(POLICYINFO, (st), (val)) +# define sk_POLICYINFO_unshift(st, val) SKM_sk_unshift(POLICYINFO, (st), (val)) +# define sk_POLICYINFO_find(st, val) SKM_sk_find(POLICYINFO, (st), (val)) +# define sk_POLICYINFO_find_ex(st, val) SKM_sk_find_ex(POLICYINFO, (st), (val)) +# define sk_POLICYINFO_delete(st, i) SKM_sk_delete(POLICYINFO, (st), (i)) +# define sk_POLICYINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYINFO, (st), (ptr)) +# define sk_POLICYINFO_insert(st, val, i) SKM_sk_insert(POLICYINFO, (st), (val), (i)) +# define sk_POLICYINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYINFO, (st), (cmp)) +# define sk_POLICYINFO_dup(st) SKM_sk_dup(POLICYINFO, st) +# define sk_POLICYINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYINFO, (st), (free_func)) +# define sk_POLICYINFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICYINFO, (st), (copy_func), (free_func)) +# define sk_POLICYINFO_shift(st) SKM_sk_shift(POLICYINFO, (st)) +# define sk_POLICYINFO_pop(st) SKM_sk_pop(POLICYINFO, (st)) +# define sk_POLICYINFO_sort(st) SKM_sk_sort(POLICYINFO, (st)) +# define sk_POLICYINFO_is_sorted(st) SKM_sk_is_sorted(POLICYINFO, (st)) +# define sk_POLICYQUALINFO_new(cmp) SKM_sk_new(POLICYQUALINFO, (cmp)) +# define sk_POLICYQUALINFO_new_null() SKM_sk_new_null(POLICYQUALINFO) +# define sk_POLICYQUALINFO_free(st) SKM_sk_free(POLICYQUALINFO, (st)) +# define sk_POLICYQUALINFO_num(st) SKM_sk_num(POLICYQUALINFO, (st)) +# define sk_POLICYQUALINFO_value(st, i) SKM_sk_value(POLICYQUALINFO, (st), (i)) +# define sk_POLICYQUALINFO_set(st, i, val) SKM_sk_set(POLICYQUALINFO, (st), (i), (val)) +# define sk_POLICYQUALINFO_zero(st) SKM_sk_zero(POLICYQUALINFO, (st)) +# define sk_POLICYQUALINFO_push(st, val) SKM_sk_push(POLICYQUALINFO, (st), (val)) +# define sk_POLICYQUALINFO_unshift(st, val) SKM_sk_unshift(POLICYQUALINFO, (st), (val)) +# define sk_POLICYQUALINFO_find(st, val) SKM_sk_find(POLICYQUALINFO, (st), (val)) +# define sk_POLICYQUALINFO_find_ex(st, val) SKM_sk_find_ex(POLICYQUALINFO, (st), (val)) +# define sk_POLICYQUALINFO_delete(st, i) SKM_sk_delete(POLICYQUALINFO, (st), (i)) +# define sk_POLICYQUALINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYQUALINFO, (st), (ptr)) +# define sk_POLICYQUALINFO_insert(st, val, i) SKM_sk_insert(POLICYQUALINFO, (st), (val), (i)) +# define sk_POLICYQUALINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYQUALINFO, (st), (cmp)) +# define sk_POLICYQUALINFO_dup(st) SKM_sk_dup(POLICYQUALINFO, st) +# define sk_POLICYQUALINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYQUALINFO, (st), (free_func)) +# define sk_POLICYQUALINFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICYQUALINFO, (st), (copy_func), (free_func)) +# define sk_POLICYQUALINFO_shift(st) SKM_sk_shift(POLICYQUALINFO, (st)) +# define sk_POLICYQUALINFO_pop(st) SKM_sk_pop(POLICYQUALINFO, (st)) +# define sk_POLICYQUALINFO_sort(st) SKM_sk_sort(POLICYQUALINFO, (st)) +# define sk_POLICYQUALINFO_is_sorted(st) SKM_sk_is_sorted(POLICYQUALINFO, (st)) +# define sk_POLICY_MAPPING_new(cmp) SKM_sk_new(POLICY_MAPPING, (cmp)) +# define sk_POLICY_MAPPING_new_null() SKM_sk_new_null(POLICY_MAPPING) +# define sk_POLICY_MAPPING_free(st) SKM_sk_free(POLICY_MAPPING, (st)) +# define sk_POLICY_MAPPING_num(st) SKM_sk_num(POLICY_MAPPING, (st)) +# define sk_POLICY_MAPPING_value(st, i) SKM_sk_value(POLICY_MAPPING, (st), (i)) +# define sk_POLICY_MAPPING_set(st, i, val) SKM_sk_set(POLICY_MAPPING, (st), (i), (val)) +# define sk_POLICY_MAPPING_zero(st) SKM_sk_zero(POLICY_MAPPING, (st)) +# define sk_POLICY_MAPPING_push(st, val) SKM_sk_push(POLICY_MAPPING, (st), (val)) +# define sk_POLICY_MAPPING_unshift(st, val) SKM_sk_unshift(POLICY_MAPPING, (st), (val)) +# define sk_POLICY_MAPPING_find(st, val) SKM_sk_find(POLICY_MAPPING, (st), (val)) +# define sk_POLICY_MAPPING_find_ex(st, val) SKM_sk_find_ex(POLICY_MAPPING, (st), (val)) +# define sk_POLICY_MAPPING_delete(st, i) SKM_sk_delete(POLICY_MAPPING, (st), (i)) +# define sk_POLICY_MAPPING_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICY_MAPPING, (st), (ptr)) +# define sk_POLICY_MAPPING_insert(st, val, i) SKM_sk_insert(POLICY_MAPPING, (st), (val), (i)) +# define sk_POLICY_MAPPING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICY_MAPPING, (st), (cmp)) +# define sk_POLICY_MAPPING_dup(st) SKM_sk_dup(POLICY_MAPPING, st) +# define sk_POLICY_MAPPING_pop_free(st, free_func) SKM_sk_pop_free(POLICY_MAPPING, (st), (free_func)) +# define sk_POLICY_MAPPING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICY_MAPPING, (st), (copy_func), (free_func)) +# define sk_POLICY_MAPPING_shift(st) SKM_sk_shift(POLICY_MAPPING, (st)) +# define sk_POLICY_MAPPING_pop(st) SKM_sk_pop(POLICY_MAPPING, (st)) +# define sk_POLICY_MAPPING_sort(st) SKM_sk_sort(POLICY_MAPPING, (st)) +# define sk_POLICY_MAPPING_is_sorted(st) SKM_sk_is_sorted(POLICY_MAPPING, (st)) +# define sk_SCT_new(cmp) SKM_sk_new(SCT, (cmp)) +# define sk_SCT_new_null() SKM_sk_new_null(SCT) +# define sk_SCT_free(st) SKM_sk_free(SCT, (st)) +# define sk_SCT_num(st) SKM_sk_num(SCT, (st)) +# define sk_SCT_value(st, i) SKM_sk_value(SCT, (st), (i)) +# define sk_SCT_set(st, i, val) SKM_sk_set(SCT, (st), (i), (val)) +# define sk_SCT_zero(st) SKM_sk_zero(SCT, (st)) +# define sk_SCT_push(st, val) SKM_sk_push(SCT, (st), (val)) +# define sk_SCT_unshift(st, val) SKM_sk_unshift(SCT, (st), (val)) +# define sk_SCT_find(st, val) SKM_sk_find(SCT, (st), (val)) +# define sk_SCT_find_ex(st, val) SKM_sk_find_ex(SCT, (st), (val)) +# define sk_SCT_delete(st, i) SKM_sk_delete(SCT, (st), (i)) +# define sk_SCT_delete_ptr(st, ptr) SKM_sk_delete_ptr(SCT, (st), (ptr)) +# define sk_SCT_insert(st, val, i) SKM_sk_insert(SCT, (st), (val), (i)) +# define sk_SCT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SCT, (st), (cmp)) +# define sk_SCT_dup(st) SKM_sk_dup(SCT, st) +# define sk_SCT_pop_free(st, free_func) SKM_sk_pop_free(SCT, (st), (free_func)) +# define sk_SCT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SCT, (st), (copy_func), (free_func)) +# define sk_SCT_shift(st) SKM_sk_shift(SCT, (st)) +# define sk_SCT_pop(st) SKM_sk_pop(SCT, (st)) +# define sk_SCT_sort(st) SKM_sk_sort(SCT, (st)) +# define sk_SCT_is_sorted(st) SKM_sk_is_sorted(SCT, (st)) +# define sk_SRP_gN_new(cmp) SKM_sk_new(SRP_gN, (cmp)) +# define sk_SRP_gN_new_null() SKM_sk_new_null(SRP_gN) +# define sk_SRP_gN_free(st) SKM_sk_free(SRP_gN, (st)) +# define sk_SRP_gN_num(st) SKM_sk_num(SRP_gN, (st)) +# define sk_SRP_gN_value(st, i) SKM_sk_value(SRP_gN, (st), (i)) +# define sk_SRP_gN_set(st, i, val) SKM_sk_set(SRP_gN, (st), (i), (val)) +# define sk_SRP_gN_zero(st) SKM_sk_zero(SRP_gN, (st)) +# define sk_SRP_gN_push(st, val) SKM_sk_push(SRP_gN, (st), (val)) +# define sk_SRP_gN_unshift(st, val) SKM_sk_unshift(SRP_gN, (st), (val)) +# define sk_SRP_gN_find(st, val) SKM_sk_find(SRP_gN, (st), (val)) +# define sk_SRP_gN_find_ex(st, val) SKM_sk_find_ex(SRP_gN, (st), (val)) +# define sk_SRP_gN_delete(st, i) SKM_sk_delete(SRP_gN, (st), (i)) +# define sk_SRP_gN_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_gN, (st), (ptr)) +# define sk_SRP_gN_insert(st, val, i) SKM_sk_insert(SRP_gN, (st), (val), (i)) +# define sk_SRP_gN_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_gN, (st), (cmp)) +# define sk_SRP_gN_dup(st) SKM_sk_dup(SRP_gN, st) +# define sk_SRP_gN_pop_free(st, free_func) SKM_sk_pop_free(SRP_gN, (st), (free_func)) +# define sk_SRP_gN_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_gN, (st), (copy_func), (free_func)) +# define sk_SRP_gN_shift(st) SKM_sk_shift(SRP_gN, (st)) +# define sk_SRP_gN_pop(st) SKM_sk_pop(SRP_gN, (st)) +# define sk_SRP_gN_sort(st) SKM_sk_sort(SRP_gN, (st)) +# define sk_SRP_gN_is_sorted(st) SKM_sk_is_sorted(SRP_gN, (st)) +# define sk_SRP_gN_cache_new(cmp) SKM_sk_new(SRP_gN_cache, (cmp)) +# define sk_SRP_gN_cache_new_null() SKM_sk_new_null(SRP_gN_cache) +# define sk_SRP_gN_cache_free(st) SKM_sk_free(SRP_gN_cache, (st)) +# define sk_SRP_gN_cache_num(st) SKM_sk_num(SRP_gN_cache, (st)) +# define sk_SRP_gN_cache_value(st, i) SKM_sk_value(SRP_gN_cache, (st), (i)) +# define sk_SRP_gN_cache_set(st, i, val) SKM_sk_set(SRP_gN_cache, (st), (i), (val)) +# define sk_SRP_gN_cache_zero(st) SKM_sk_zero(SRP_gN_cache, (st)) +# define sk_SRP_gN_cache_push(st, val) SKM_sk_push(SRP_gN_cache, (st), (val)) +# define sk_SRP_gN_cache_unshift(st, val) SKM_sk_unshift(SRP_gN_cache, (st), (val)) +# define sk_SRP_gN_cache_find(st, val) SKM_sk_find(SRP_gN_cache, (st), (val)) +# define sk_SRP_gN_cache_find_ex(st, val) SKM_sk_find_ex(SRP_gN_cache, (st), (val)) +# define sk_SRP_gN_cache_delete(st, i) SKM_sk_delete(SRP_gN_cache, (st), (i)) +# define sk_SRP_gN_cache_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_gN_cache, (st), (ptr)) +# define sk_SRP_gN_cache_insert(st, val, i) SKM_sk_insert(SRP_gN_cache, (st), (val), (i)) +# define sk_SRP_gN_cache_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_gN_cache, (st), (cmp)) +# define sk_SRP_gN_cache_dup(st) SKM_sk_dup(SRP_gN_cache, st) +# define sk_SRP_gN_cache_pop_free(st, free_func) SKM_sk_pop_free(SRP_gN_cache, (st), (free_func)) +# define sk_SRP_gN_cache_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_gN_cache, (st), (copy_func), (free_func)) +# define sk_SRP_gN_cache_shift(st) SKM_sk_shift(SRP_gN_cache, (st)) +# define sk_SRP_gN_cache_pop(st) SKM_sk_pop(SRP_gN_cache, (st)) +# define sk_SRP_gN_cache_sort(st) SKM_sk_sort(SRP_gN_cache, (st)) +# define sk_SRP_gN_cache_is_sorted(st) SKM_sk_is_sorted(SRP_gN_cache, (st)) +# define sk_SRP_user_pwd_new(cmp) SKM_sk_new(SRP_user_pwd, (cmp)) +# define sk_SRP_user_pwd_new_null() SKM_sk_new_null(SRP_user_pwd) +# define sk_SRP_user_pwd_free(st) SKM_sk_free(SRP_user_pwd, (st)) +# define sk_SRP_user_pwd_num(st) SKM_sk_num(SRP_user_pwd, (st)) +# define sk_SRP_user_pwd_value(st, i) SKM_sk_value(SRP_user_pwd, (st), (i)) +# define sk_SRP_user_pwd_set(st, i, val) SKM_sk_set(SRP_user_pwd, (st), (i), (val)) +# define sk_SRP_user_pwd_zero(st) SKM_sk_zero(SRP_user_pwd, (st)) +# define sk_SRP_user_pwd_push(st, val) SKM_sk_push(SRP_user_pwd, (st), (val)) +# define sk_SRP_user_pwd_unshift(st, val) SKM_sk_unshift(SRP_user_pwd, (st), (val)) +# define sk_SRP_user_pwd_find(st, val) SKM_sk_find(SRP_user_pwd, (st), (val)) +# define sk_SRP_user_pwd_find_ex(st, val) SKM_sk_find_ex(SRP_user_pwd, (st), (val)) +# define sk_SRP_user_pwd_delete(st, i) SKM_sk_delete(SRP_user_pwd, (st), (i)) +# define sk_SRP_user_pwd_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_user_pwd, (st), (ptr)) +# define sk_SRP_user_pwd_insert(st, val, i) SKM_sk_insert(SRP_user_pwd, (st), (val), (i)) +# define sk_SRP_user_pwd_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_user_pwd, (st), (cmp)) +# define sk_SRP_user_pwd_dup(st) SKM_sk_dup(SRP_user_pwd, st) +# define sk_SRP_user_pwd_pop_free(st, free_func) SKM_sk_pop_free(SRP_user_pwd, (st), (free_func)) +# define sk_SRP_user_pwd_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_user_pwd, (st), (copy_func), (free_func)) +# define sk_SRP_user_pwd_shift(st) SKM_sk_shift(SRP_user_pwd, (st)) +# define sk_SRP_user_pwd_pop(st) SKM_sk_pop(SRP_user_pwd, (st)) +# define sk_SRP_user_pwd_sort(st) SKM_sk_sort(SRP_user_pwd, (st)) +# define sk_SRP_user_pwd_is_sorted(st) SKM_sk_is_sorted(SRP_user_pwd, (st)) +# define sk_SRTP_PROTECTION_PROFILE_new(cmp) SKM_sk_new(SRTP_PROTECTION_PROFILE, (cmp)) +# define sk_SRTP_PROTECTION_PROFILE_new_null() SKM_sk_new_null(SRTP_PROTECTION_PROFILE) +# define sk_SRTP_PROTECTION_PROFILE_free(st) SKM_sk_free(SRTP_PROTECTION_PROFILE, (st)) +# define sk_SRTP_PROTECTION_PROFILE_num(st) SKM_sk_num(SRTP_PROTECTION_PROFILE, (st)) +# define sk_SRTP_PROTECTION_PROFILE_value(st, i) SKM_sk_value(SRTP_PROTECTION_PROFILE, (st), (i)) +# define sk_SRTP_PROTECTION_PROFILE_set(st, i, val) SKM_sk_set(SRTP_PROTECTION_PROFILE, (st), (i), (val)) +# define sk_SRTP_PROTECTION_PROFILE_zero(st) SKM_sk_zero(SRTP_PROTECTION_PROFILE, (st)) +# define sk_SRTP_PROTECTION_PROFILE_push(st, val) SKM_sk_push(SRTP_PROTECTION_PROFILE, (st), (val)) +# define sk_SRTP_PROTECTION_PROFILE_unshift(st, val) SKM_sk_unshift(SRTP_PROTECTION_PROFILE, (st), (val)) +# define sk_SRTP_PROTECTION_PROFILE_find(st, val) SKM_sk_find(SRTP_PROTECTION_PROFILE, (st), (val)) +# define sk_SRTP_PROTECTION_PROFILE_find_ex(st, val) SKM_sk_find_ex(SRTP_PROTECTION_PROFILE, (st), (val)) +# define sk_SRTP_PROTECTION_PROFILE_delete(st, i) SKM_sk_delete(SRTP_PROTECTION_PROFILE, (st), (i)) +# define sk_SRTP_PROTECTION_PROFILE_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRTP_PROTECTION_PROFILE, (st), (ptr)) +# define sk_SRTP_PROTECTION_PROFILE_insert(st, val, i) SKM_sk_insert(SRTP_PROTECTION_PROFILE, (st), (val), (i)) +# define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRTP_PROTECTION_PROFILE, (st), (cmp)) +# define sk_SRTP_PROTECTION_PROFILE_dup(st) SKM_sk_dup(SRTP_PROTECTION_PROFILE, st) +# define sk_SRTP_PROTECTION_PROFILE_pop_free(st, free_func) SKM_sk_pop_free(SRTP_PROTECTION_PROFILE, (st), (free_func)) +# define sk_SRTP_PROTECTION_PROFILE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRTP_PROTECTION_PROFILE, (st), (copy_func), (free_func)) +# define sk_SRTP_PROTECTION_PROFILE_shift(st) SKM_sk_shift(SRTP_PROTECTION_PROFILE, (st)) +# define sk_SRTP_PROTECTION_PROFILE_pop(st) SKM_sk_pop(SRTP_PROTECTION_PROFILE, (st)) +# define sk_SRTP_PROTECTION_PROFILE_sort(st) SKM_sk_sort(SRTP_PROTECTION_PROFILE, (st)) +# define sk_SRTP_PROTECTION_PROFILE_is_sorted(st) SKM_sk_is_sorted(SRTP_PROTECTION_PROFILE, (st)) +# define sk_SSL_CIPHER_new(cmp) SKM_sk_new(SSL_CIPHER, (cmp)) +# define sk_SSL_CIPHER_new_null() SKM_sk_new_null(SSL_CIPHER) +# define sk_SSL_CIPHER_free(st) SKM_sk_free(SSL_CIPHER, (st)) +# define sk_SSL_CIPHER_num(st) SKM_sk_num(SSL_CIPHER, (st)) +# define sk_SSL_CIPHER_value(st, i) SKM_sk_value(SSL_CIPHER, (st), (i)) +# define sk_SSL_CIPHER_set(st, i, val) SKM_sk_set(SSL_CIPHER, (st), (i), (val)) +# define sk_SSL_CIPHER_zero(st) SKM_sk_zero(SSL_CIPHER, (st)) +# define sk_SSL_CIPHER_push(st, val) SKM_sk_push(SSL_CIPHER, (st), (val)) +# define sk_SSL_CIPHER_unshift(st, val) SKM_sk_unshift(SSL_CIPHER, (st), (val)) +# define sk_SSL_CIPHER_find(st, val) SKM_sk_find(SSL_CIPHER, (st), (val)) +# define sk_SSL_CIPHER_find_ex(st, val) SKM_sk_find_ex(SSL_CIPHER, (st), (val)) +# define sk_SSL_CIPHER_delete(st, i) SKM_sk_delete(SSL_CIPHER, (st), (i)) +# define sk_SSL_CIPHER_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_CIPHER, (st), (ptr)) +# define sk_SSL_CIPHER_insert(st, val, i) SKM_sk_insert(SSL_CIPHER, (st), (val), (i)) +# define sk_SSL_CIPHER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_CIPHER, (st), (cmp)) +# define sk_SSL_CIPHER_dup(st) SKM_sk_dup(SSL_CIPHER, st) +# define sk_SSL_CIPHER_pop_free(st, free_func) SKM_sk_pop_free(SSL_CIPHER, (st), (free_func)) +# define sk_SSL_CIPHER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SSL_CIPHER, (st), (copy_func), (free_func)) +# define sk_SSL_CIPHER_shift(st) SKM_sk_shift(SSL_CIPHER, (st)) +# define sk_SSL_CIPHER_pop(st) SKM_sk_pop(SSL_CIPHER, (st)) +# define sk_SSL_CIPHER_sort(st) SKM_sk_sort(SSL_CIPHER, (st)) +# define sk_SSL_CIPHER_is_sorted(st) SKM_sk_is_sorted(SSL_CIPHER, (st)) +# define sk_SSL_COMP_new(cmp) SKM_sk_new(SSL_COMP, (cmp)) +# define sk_SSL_COMP_new_null() SKM_sk_new_null(SSL_COMP) +# define sk_SSL_COMP_free(st) SKM_sk_free(SSL_COMP, (st)) +# define sk_SSL_COMP_num(st) SKM_sk_num(SSL_COMP, (st)) +# define sk_SSL_COMP_value(st, i) SKM_sk_value(SSL_COMP, (st), (i)) +# define sk_SSL_COMP_set(st, i, val) SKM_sk_set(SSL_COMP, (st), (i), (val)) +# define sk_SSL_COMP_zero(st) SKM_sk_zero(SSL_COMP, (st)) +# define sk_SSL_COMP_push(st, val) SKM_sk_push(SSL_COMP, (st), (val)) +# define sk_SSL_COMP_unshift(st, val) SKM_sk_unshift(SSL_COMP, (st), (val)) +# define sk_SSL_COMP_find(st, val) SKM_sk_find(SSL_COMP, (st), (val)) +# define sk_SSL_COMP_find_ex(st, val) SKM_sk_find_ex(SSL_COMP, (st), (val)) +# define sk_SSL_COMP_delete(st, i) SKM_sk_delete(SSL_COMP, (st), (i)) +# define sk_SSL_COMP_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_COMP, (st), (ptr)) +# define sk_SSL_COMP_insert(st, val, i) SKM_sk_insert(SSL_COMP, (st), (val), (i)) +# define sk_SSL_COMP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_COMP, (st), (cmp)) +# define sk_SSL_COMP_dup(st) SKM_sk_dup(SSL_COMP, st) +# define sk_SSL_COMP_pop_free(st, free_func) SKM_sk_pop_free(SSL_COMP, (st), (free_func)) +# define sk_SSL_COMP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SSL_COMP, (st), (copy_func), (free_func)) +# define sk_SSL_COMP_shift(st) SKM_sk_shift(SSL_COMP, (st)) +# define sk_SSL_COMP_pop(st) SKM_sk_pop(SSL_COMP, (st)) +# define sk_SSL_COMP_sort(st) SKM_sk_sort(SSL_COMP, (st)) +# define sk_SSL_COMP_is_sorted(st) SKM_sk_is_sorted(SSL_COMP, (st)) +# define sk_STACK_OF_X509_NAME_ENTRY_new(cmp) SKM_sk_new(STACK_OF_X509_NAME_ENTRY, (cmp)) +# define sk_STACK_OF_X509_NAME_ENTRY_new_null() SKM_sk_new_null(STACK_OF_X509_NAME_ENTRY) +# define sk_STACK_OF_X509_NAME_ENTRY_free(st) SKM_sk_free(STACK_OF_X509_NAME_ENTRY, (st)) +# define sk_STACK_OF_X509_NAME_ENTRY_num(st) SKM_sk_num(STACK_OF_X509_NAME_ENTRY, (st)) +# define sk_STACK_OF_X509_NAME_ENTRY_value(st, i) SKM_sk_value(STACK_OF_X509_NAME_ENTRY, (st), (i)) +# define sk_STACK_OF_X509_NAME_ENTRY_set(st, i, val) SKM_sk_set(STACK_OF_X509_NAME_ENTRY, (st), (i), (val)) +# define sk_STACK_OF_X509_NAME_ENTRY_zero(st) SKM_sk_zero(STACK_OF_X509_NAME_ENTRY, (st)) +# define sk_STACK_OF_X509_NAME_ENTRY_push(st, val) SKM_sk_push(STACK_OF_X509_NAME_ENTRY, (st), (val)) +# define sk_STACK_OF_X509_NAME_ENTRY_unshift(st, val) SKM_sk_unshift(STACK_OF_X509_NAME_ENTRY, (st), (val)) +# define sk_STACK_OF_X509_NAME_ENTRY_find(st, val) SKM_sk_find(STACK_OF_X509_NAME_ENTRY, (st), (val)) +# define sk_STACK_OF_X509_NAME_ENTRY_find_ex(st, val) SKM_sk_find_ex(STACK_OF_X509_NAME_ENTRY, (st), (val)) +# define sk_STACK_OF_X509_NAME_ENTRY_delete(st, i) SKM_sk_delete(STACK_OF_X509_NAME_ENTRY, (st), (i)) +# define sk_STACK_OF_X509_NAME_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(STACK_OF_X509_NAME_ENTRY, (st), (ptr)) +# define sk_STACK_OF_X509_NAME_ENTRY_insert(st, val, i) SKM_sk_insert(STACK_OF_X509_NAME_ENTRY, (st), (val), (i)) +# define sk_STACK_OF_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STACK_OF_X509_NAME_ENTRY, (st), (cmp)) +# define sk_STACK_OF_X509_NAME_ENTRY_dup(st) SKM_sk_dup(STACK_OF_X509_NAME_ENTRY, st) +# define sk_STACK_OF_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(STACK_OF_X509_NAME_ENTRY, (st), (free_func)) +# define sk_STACK_OF_X509_NAME_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STACK_OF_X509_NAME_ENTRY, (st), (copy_func), (free_func)) +# define sk_STACK_OF_X509_NAME_ENTRY_shift(st) SKM_sk_shift(STACK_OF_X509_NAME_ENTRY, (st)) +# define sk_STACK_OF_X509_NAME_ENTRY_pop(st) SKM_sk_pop(STACK_OF_X509_NAME_ENTRY, (st)) +# define sk_STACK_OF_X509_NAME_ENTRY_sort(st) SKM_sk_sort(STACK_OF_X509_NAME_ENTRY, (st)) +# define sk_STACK_OF_X509_NAME_ENTRY_is_sorted(st) SKM_sk_is_sorted(STACK_OF_X509_NAME_ENTRY, (st)) +# define sk_STORE_ATTR_INFO_new(cmp) SKM_sk_new(STORE_ATTR_INFO, (cmp)) +# define sk_STORE_ATTR_INFO_new_null() SKM_sk_new_null(STORE_ATTR_INFO) +# define sk_STORE_ATTR_INFO_free(st) SKM_sk_free(STORE_ATTR_INFO, (st)) +# define sk_STORE_ATTR_INFO_num(st) SKM_sk_num(STORE_ATTR_INFO, (st)) +# define sk_STORE_ATTR_INFO_value(st, i) SKM_sk_value(STORE_ATTR_INFO, (st), (i)) +# define sk_STORE_ATTR_INFO_set(st, i, val) SKM_sk_set(STORE_ATTR_INFO, (st), (i), (val)) +# define sk_STORE_ATTR_INFO_zero(st) SKM_sk_zero(STORE_ATTR_INFO, (st)) +# define sk_STORE_ATTR_INFO_push(st, val) SKM_sk_push(STORE_ATTR_INFO, (st), (val)) +# define sk_STORE_ATTR_INFO_unshift(st, val) SKM_sk_unshift(STORE_ATTR_INFO, (st), (val)) +# define sk_STORE_ATTR_INFO_find(st, val) SKM_sk_find(STORE_ATTR_INFO, (st), (val)) +# define sk_STORE_ATTR_INFO_find_ex(st, val) SKM_sk_find_ex(STORE_ATTR_INFO, (st), (val)) +# define sk_STORE_ATTR_INFO_delete(st, i) SKM_sk_delete(STORE_ATTR_INFO, (st), (i)) +# define sk_STORE_ATTR_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(STORE_ATTR_INFO, (st), (ptr)) +# define sk_STORE_ATTR_INFO_insert(st, val, i) SKM_sk_insert(STORE_ATTR_INFO, (st), (val), (i)) +# define sk_STORE_ATTR_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_ATTR_INFO, (st), (cmp)) +# define sk_STORE_ATTR_INFO_dup(st) SKM_sk_dup(STORE_ATTR_INFO, st) +# define sk_STORE_ATTR_INFO_pop_free(st, free_func) SKM_sk_pop_free(STORE_ATTR_INFO, (st), (free_func)) +# define sk_STORE_ATTR_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STORE_ATTR_INFO, (st), (copy_func), (free_func)) +# define sk_STORE_ATTR_INFO_shift(st) SKM_sk_shift(STORE_ATTR_INFO, (st)) +# define sk_STORE_ATTR_INFO_pop(st) SKM_sk_pop(STORE_ATTR_INFO, (st)) +# define sk_STORE_ATTR_INFO_sort(st) SKM_sk_sort(STORE_ATTR_INFO, (st)) +# define sk_STORE_ATTR_INFO_is_sorted(st) SKM_sk_is_sorted(STORE_ATTR_INFO, (st)) +# define sk_STORE_OBJECT_new(cmp) SKM_sk_new(STORE_OBJECT, (cmp)) +# define sk_STORE_OBJECT_new_null() SKM_sk_new_null(STORE_OBJECT) +# define sk_STORE_OBJECT_free(st) SKM_sk_free(STORE_OBJECT, (st)) +# define sk_STORE_OBJECT_num(st) SKM_sk_num(STORE_OBJECT, (st)) +# define sk_STORE_OBJECT_value(st, i) SKM_sk_value(STORE_OBJECT, (st), (i)) +# define sk_STORE_OBJECT_set(st, i, val) SKM_sk_set(STORE_OBJECT, (st), (i), (val)) +# define sk_STORE_OBJECT_zero(st) SKM_sk_zero(STORE_OBJECT, (st)) +# define sk_STORE_OBJECT_push(st, val) SKM_sk_push(STORE_OBJECT, (st), (val)) +# define sk_STORE_OBJECT_unshift(st, val) SKM_sk_unshift(STORE_OBJECT, (st), (val)) +# define sk_STORE_OBJECT_find(st, val) SKM_sk_find(STORE_OBJECT, (st), (val)) +# define sk_STORE_OBJECT_find_ex(st, val) SKM_sk_find_ex(STORE_OBJECT, (st), (val)) +# define sk_STORE_OBJECT_delete(st, i) SKM_sk_delete(STORE_OBJECT, (st), (i)) +# define sk_STORE_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(STORE_OBJECT, (st), (ptr)) +# define sk_STORE_OBJECT_insert(st, val, i) SKM_sk_insert(STORE_OBJECT, (st), (val), (i)) +# define sk_STORE_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_OBJECT, (st), (cmp)) +# define sk_STORE_OBJECT_dup(st) SKM_sk_dup(STORE_OBJECT, st) +# define sk_STORE_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(STORE_OBJECT, (st), (free_func)) +# define sk_STORE_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STORE_OBJECT, (st), (copy_func), (free_func)) +# define sk_STORE_OBJECT_shift(st) SKM_sk_shift(STORE_OBJECT, (st)) +# define sk_STORE_OBJECT_pop(st) SKM_sk_pop(STORE_OBJECT, (st)) +# define sk_STORE_OBJECT_sort(st) SKM_sk_sort(STORE_OBJECT, (st)) +# define sk_STORE_OBJECT_is_sorted(st) SKM_sk_is_sorted(STORE_OBJECT, (st)) +# define sk_SXNETID_new(cmp) SKM_sk_new(SXNETID, (cmp)) +# define sk_SXNETID_new_null() SKM_sk_new_null(SXNETID) +# define sk_SXNETID_free(st) SKM_sk_free(SXNETID, (st)) +# define sk_SXNETID_num(st) SKM_sk_num(SXNETID, (st)) +# define sk_SXNETID_value(st, i) SKM_sk_value(SXNETID, (st), (i)) +# define sk_SXNETID_set(st, i, val) SKM_sk_set(SXNETID, (st), (i), (val)) +# define sk_SXNETID_zero(st) SKM_sk_zero(SXNETID, (st)) +# define sk_SXNETID_push(st, val) SKM_sk_push(SXNETID, (st), (val)) +# define sk_SXNETID_unshift(st, val) SKM_sk_unshift(SXNETID, (st), (val)) +# define sk_SXNETID_find(st, val) SKM_sk_find(SXNETID, (st), (val)) +# define sk_SXNETID_find_ex(st, val) SKM_sk_find_ex(SXNETID, (st), (val)) +# define sk_SXNETID_delete(st, i) SKM_sk_delete(SXNETID, (st), (i)) +# define sk_SXNETID_delete_ptr(st, ptr) SKM_sk_delete_ptr(SXNETID, (st), (ptr)) +# define sk_SXNETID_insert(st, val, i) SKM_sk_insert(SXNETID, (st), (val), (i)) +# define sk_SXNETID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SXNETID, (st), (cmp)) +# define sk_SXNETID_dup(st) SKM_sk_dup(SXNETID, st) +# define sk_SXNETID_pop_free(st, free_func) SKM_sk_pop_free(SXNETID, (st), (free_func)) +# define sk_SXNETID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SXNETID, (st), (copy_func), (free_func)) +# define sk_SXNETID_shift(st) SKM_sk_shift(SXNETID, (st)) +# define sk_SXNETID_pop(st) SKM_sk_pop(SXNETID, (st)) +# define sk_SXNETID_sort(st) SKM_sk_sort(SXNETID, (st)) +# define sk_SXNETID_is_sorted(st) SKM_sk_is_sorted(SXNETID, (st)) +# define sk_UI_STRING_new(cmp) SKM_sk_new(UI_STRING, (cmp)) +# define sk_UI_STRING_new_null() SKM_sk_new_null(UI_STRING) +# define sk_UI_STRING_free(st) SKM_sk_free(UI_STRING, (st)) +# define sk_UI_STRING_num(st) SKM_sk_num(UI_STRING, (st)) +# define sk_UI_STRING_value(st, i) SKM_sk_value(UI_STRING, (st), (i)) +# define sk_UI_STRING_set(st, i, val) SKM_sk_set(UI_STRING, (st), (i), (val)) +# define sk_UI_STRING_zero(st) SKM_sk_zero(UI_STRING, (st)) +# define sk_UI_STRING_push(st, val) SKM_sk_push(UI_STRING, (st), (val)) +# define sk_UI_STRING_unshift(st, val) SKM_sk_unshift(UI_STRING, (st), (val)) +# define sk_UI_STRING_find(st, val) SKM_sk_find(UI_STRING, (st), (val)) +# define sk_UI_STRING_find_ex(st, val) SKM_sk_find_ex(UI_STRING, (st), (val)) +# define sk_UI_STRING_delete(st, i) SKM_sk_delete(UI_STRING, (st), (i)) +# define sk_UI_STRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(UI_STRING, (st), (ptr)) +# define sk_UI_STRING_insert(st, val, i) SKM_sk_insert(UI_STRING, (st), (val), (i)) +# define sk_UI_STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(UI_STRING, (st), (cmp)) +# define sk_UI_STRING_dup(st) SKM_sk_dup(UI_STRING, st) +# define sk_UI_STRING_pop_free(st, free_func) SKM_sk_pop_free(UI_STRING, (st), (free_func)) +# define sk_UI_STRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(UI_STRING, (st), (copy_func), (free_func)) +# define sk_UI_STRING_shift(st) SKM_sk_shift(UI_STRING, (st)) +# define sk_UI_STRING_pop(st) SKM_sk_pop(UI_STRING, (st)) +# define sk_UI_STRING_sort(st) SKM_sk_sort(UI_STRING, (st)) +# define sk_UI_STRING_is_sorted(st) SKM_sk_is_sorted(UI_STRING, (st)) +# define sk_X509_new(cmp) SKM_sk_new(X509, (cmp)) +# define sk_X509_new_null() SKM_sk_new_null(X509) +# define sk_X509_free(st) SKM_sk_free(X509, (st)) +# define sk_X509_num(st) SKM_sk_num(X509, (st)) +# define sk_X509_value(st, i) SKM_sk_value(X509, (st), (i)) +# define sk_X509_set(st, i, val) SKM_sk_set(X509, (st), (i), (val)) +# define sk_X509_zero(st) SKM_sk_zero(X509, (st)) +# define sk_X509_push(st, val) SKM_sk_push(X509, (st), (val)) +# define sk_X509_unshift(st, val) SKM_sk_unshift(X509, (st), (val)) +# define sk_X509_find(st, val) SKM_sk_find(X509, (st), (val)) +# define sk_X509_find_ex(st, val) SKM_sk_find_ex(X509, (st), (val)) +# define sk_X509_delete(st, i) SKM_sk_delete(X509, (st), (i)) +# define sk_X509_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509, (st), (ptr)) +# define sk_X509_insert(st, val, i) SKM_sk_insert(X509, (st), (val), (i)) +# define sk_X509_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509, (st), (cmp)) +# define sk_X509_dup(st) SKM_sk_dup(X509, st) +# define sk_X509_pop_free(st, free_func) SKM_sk_pop_free(X509, (st), (free_func)) +# define sk_X509_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509, (st), (copy_func), (free_func)) +# define sk_X509_shift(st) SKM_sk_shift(X509, (st)) +# define sk_X509_pop(st) SKM_sk_pop(X509, (st)) +# define sk_X509_sort(st) SKM_sk_sort(X509, (st)) +# define sk_X509_is_sorted(st) SKM_sk_is_sorted(X509, (st)) +# define sk_X509V3_EXT_METHOD_new(cmp) SKM_sk_new(X509V3_EXT_METHOD, (cmp)) +# define sk_X509V3_EXT_METHOD_new_null() SKM_sk_new_null(X509V3_EXT_METHOD) +# define sk_X509V3_EXT_METHOD_free(st) SKM_sk_free(X509V3_EXT_METHOD, (st)) +# define sk_X509V3_EXT_METHOD_num(st) SKM_sk_num(X509V3_EXT_METHOD, (st)) +# define sk_X509V3_EXT_METHOD_value(st, i) SKM_sk_value(X509V3_EXT_METHOD, (st), (i)) +# define sk_X509V3_EXT_METHOD_set(st, i, val) SKM_sk_set(X509V3_EXT_METHOD, (st), (i), (val)) +# define sk_X509V3_EXT_METHOD_zero(st) SKM_sk_zero(X509V3_EXT_METHOD, (st)) +# define sk_X509V3_EXT_METHOD_push(st, val) SKM_sk_push(X509V3_EXT_METHOD, (st), (val)) +# define sk_X509V3_EXT_METHOD_unshift(st, val) SKM_sk_unshift(X509V3_EXT_METHOD, (st), (val)) +# define sk_X509V3_EXT_METHOD_find(st, val) SKM_sk_find(X509V3_EXT_METHOD, (st), (val)) +# define sk_X509V3_EXT_METHOD_find_ex(st, val) SKM_sk_find_ex(X509V3_EXT_METHOD, (st), (val)) +# define sk_X509V3_EXT_METHOD_delete(st, i) SKM_sk_delete(X509V3_EXT_METHOD, (st), (i)) +# define sk_X509V3_EXT_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509V3_EXT_METHOD, (st), (ptr)) +# define sk_X509V3_EXT_METHOD_insert(st, val, i) SKM_sk_insert(X509V3_EXT_METHOD, (st), (val), (i)) +# define sk_X509V3_EXT_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509V3_EXT_METHOD, (st), (cmp)) +# define sk_X509V3_EXT_METHOD_dup(st) SKM_sk_dup(X509V3_EXT_METHOD, st) +# define sk_X509V3_EXT_METHOD_pop_free(st, free_func) SKM_sk_pop_free(X509V3_EXT_METHOD, (st), (free_func)) +# define sk_X509V3_EXT_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509V3_EXT_METHOD, (st), (copy_func), (free_func)) +# define sk_X509V3_EXT_METHOD_shift(st) SKM_sk_shift(X509V3_EXT_METHOD, (st)) +# define sk_X509V3_EXT_METHOD_pop(st) SKM_sk_pop(X509V3_EXT_METHOD, (st)) +# define sk_X509V3_EXT_METHOD_sort(st) SKM_sk_sort(X509V3_EXT_METHOD, (st)) +# define sk_X509V3_EXT_METHOD_is_sorted(st) SKM_sk_is_sorted(X509V3_EXT_METHOD, (st)) +# define sk_X509_ALGOR_new(cmp) SKM_sk_new(X509_ALGOR, (cmp)) +# define sk_X509_ALGOR_new_null() SKM_sk_new_null(X509_ALGOR) +# define sk_X509_ALGOR_free(st) SKM_sk_free(X509_ALGOR, (st)) +# define sk_X509_ALGOR_num(st) SKM_sk_num(X509_ALGOR, (st)) +# define sk_X509_ALGOR_value(st, i) SKM_sk_value(X509_ALGOR, (st), (i)) +# define sk_X509_ALGOR_set(st, i, val) SKM_sk_set(X509_ALGOR, (st), (i), (val)) +# define sk_X509_ALGOR_zero(st) SKM_sk_zero(X509_ALGOR, (st)) +# define sk_X509_ALGOR_push(st, val) SKM_sk_push(X509_ALGOR, (st), (val)) +# define sk_X509_ALGOR_unshift(st, val) SKM_sk_unshift(X509_ALGOR, (st), (val)) +# define sk_X509_ALGOR_find(st, val) SKM_sk_find(X509_ALGOR, (st), (val)) +# define sk_X509_ALGOR_find_ex(st, val) SKM_sk_find_ex(X509_ALGOR, (st), (val)) +# define sk_X509_ALGOR_delete(st, i) SKM_sk_delete(X509_ALGOR, (st), (i)) +# define sk_X509_ALGOR_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ALGOR, (st), (ptr)) +# define sk_X509_ALGOR_insert(st, val, i) SKM_sk_insert(X509_ALGOR, (st), (val), (i)) +# define sk_X509_ALGOR_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ALGOR, (st), (cmp)) +# define sk_X509_ALGOR_dup(st) SKM_sk_dup(X509_ALGOR, st) +# define sk_X509_ALGOR_pop_free(st, free_func) SKM_sk_pop_free(X509_ALGOR, (st), (free_func)) +# define sk_X509_ALGOR_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_ALGOR, (st), (copy_func), (free_func)) +# define sk_X509_ALGOR_shift(st) SKM_sk_shift(X509_ALGOR, (st)) +# define sk_X509_ALGOR_pop(st) SKM_sk_pop(X509_ALGOR, (st)) +# define sk_X509_ALGOR_sort(st) SKM_sk_sort(X509_ALGOR, (st)) +# define sk_X509_ALGOR_is_sorted(st) SKM_sk_is_sorted(X509_ALGOR, (st)) +# define sk_X509_ATTRIBUTE_new(cmp) SKM_sk_new(X509_ATTRIBUTE, (cmp)) +# define sk_X509_ATTRIBUTE_new_null() SKM_sk_new_null(X509_ATTRIBUTE) +# define sk_X509_ATTRIBUTE_free(st) SKM_sk_free(X509_ATTRIBUTE, (st)) +# define sk_X509_ATTRIBUTE_num(st) SKM_sk_num(X509_ATTRIBUTE, (st)) +# define sk_X509_ATTRIBUTE_value(st, i) SKM_sk_value(X509_ATTRIBUTE, (st), (i)) +# define sk_X509_ATTRIBUTE_set(st, i, val) SKM_sk_set(X509_ATTRIBUTE, (st), (i), (val)) +# define sk_X509_ATTRIBUTE_zero(st) SKM_sk_zero(X509_ATTRIBUTE, (st)) +# define sk_X509_ATTRIBUTE_push(st, val) SKM_sk_push(X509_ATTRIBUTE, (st), (val)) +# define sk_X509_ATTRIBUTE_unshift(st, val) SKM_sk_unshift(X509_ATTRIBUTE, (st), (val)) +# define sk_X509_ATTRIBUTE_find(st, val) SKM_sk_find(X509_ATTRIBUTE, (st), (val)) +# define sk_X509_ATTRIBUTE_find_ex(st, val) SKM_sk_find_ex(X509_ATTRIBUTE, (st), (val)) +# define sk_X509_ATTRIBUTE_delete(st, i) SKM_sk_delete(X509_ATTRIBUTE, (st), (i)) +# define sk_X509_ATTRIBUTE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ATTRIBUTE, (st), (ptr)) +# define sk_X509_ATTRIBUTE_insert(st, val, i) SKM_sk_insert(X509_ATTRIBUTE, (st), (val), (i)) +# define sk_X509_ATTRIBUTE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ATTRIBUTE, (st), (cmp)) +# define sk_X509_ATTRIBUTE_dup(st) SKM_sk_dup(X509_ATTRIBUTE, st) +# define sk_X509_ATTRIBUTE_pop_free(st, free_func) SKM_sk_pop_free(X509_ATTRIBUTE, (st), (free_func)) +# define sk_X509_ATTRIBUTE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_ATTRIBUTE, (st), (copy_func), (free_func)) +# define sk_X509_ATTRIBUTE_shift(st) SKM_sk_shift(X509_ATTRIBUTE, (st)) +# define sk_X509_ATTRIBUTE_pop(st) SKM_sk_pop(X509_ATTRIBUTE, (st)) +# define sk_X509_ATTRIBUTE_sort(st) SKM_sk_sort(X509_ATTRIBUTE, (st)) +# define sk_X509_ATTRIBUTE_is_sorted(st) SKM_sk_is_sorted(X509_ATTRIBUTE, (st)) +# define sk_X509_CRL_new(cmp) SKM_sk_new(X509_CRL, (cmp)) +# define sk_X509_CRL_new_null() SKM_sk_new_null(X509_CRL) +# define sk_X509_CRL_free(st) SKM_sk_free(X509_CRL, (st)) +# define sk_X509_CRL_num(st) SKM_sk_num(X509_CRL, (st)) +# define sk_X509_CRL_value(st, i) SKM_sk_value(X509_CRL, (st), (i)) +# define sk_X509_CRL_set(st, i, val) SKM_sk_set(X509_CRL, (st), (i), (val)) +# define sk_X509_CRL_zero(st) SKM_sk_zero(X509_CRL, (st)) +# define sk_X509_CRL_push(st, val) SKM_sk_push(X509_CRL, (st), (val)) +# define sk_X509_CRL_unshift(st, val) SKM_sk_unshift(X509_CRL, (st), (val)) +# define sk_X509_CRL_find(st, val) SKM_sk_find(X509_CRL, (st), (val)) +# define sk_X509_CRL_find_ex(st, val) SKM_sk_find_ex(X509_CRL, (st), (val)) +# define sk_X509_CRL_delete(st, i) SKM_sk_delete(X509_CRL, (st), (i)) +# define sk_X509_CRL_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_CRL, (st), (ptr)) +# define sk_X509_CRL_insert(st, val, i) SKM_sk_insert(X509_CRL, (st), (val), (i)) +# define sk_X509_CRL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_CRL, (st), (cmp)) +# define sk_X509_CRL_dup(st) SKM_sk_dup(X509_CRL, st) +# define sk_X509_CRL_pop_free(st, free_func) SKM_sk_pop_free(X509_CRL, (st), (free_func)) +# define sk_X509_CRL_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_CRL, (st), (copy_func), (free_func)) +# define sk_X509_CRL_shift(st) SKM_sk_shift(X509_CRL, (st)) +# define sk_X509_CRL_pop(st) SKM_sk_pop(X509_CRL, (st)) +# define sk_X509_CRL_sort(st) SKM_sk_sort(X509_CRL, (st)) +# define sk_X509_CRL_is_sorted(st) SKM_sk_is_sorted(X509_CRL, (st)) +# define sk_X509_EXTENSION_new(cmp) SKM_sk_new(X509_EXTENSION, (cmp)) +# define sk_X509_EXTENSION_new_null() SKM_sk_new_null(X509_EXTENSION) +# define sk_X509_EXTENSION_free(st) SKM_sk_free(X509_EXTENSION, (st)) +# define sk_X509_EXTENSION_num(st) SKM_sk_num(X509_EXTENSION, (st)) +# define sk_X509_EXTENSION_value(st, i) SKM_sk_value(X509_EXTENSION, (st), (i)) +# define sk_X509_EXTENSION_set(st, i, val) SKM_sk_set(X509_EXTENSION, (st), (i), (val)) +# define sk_X509_EXTENSION_zero(st) SKM_sk_zero(X509_EXTENSION, (st)) +# define sk_X509_EXTENSION_push(st, val) SKM_sk_push(X509_EXTENSION, (st), (val)) +# define sk_X509_EXTENSION_unshift(st, val) SKM_sk_unshift(X509_EXTENSION, (st), (val)) +# define sk_X509_EXTENSION_find(st, val) SKM_sk_find(X509_EXTENSION, (st), (val)) +# define sk_X509_EXTENSION_find_ex(st, val) SKM_sk_find_ex(X509_EXTENSION, (st), (val)) +# define sk_X509_EXTENSION_delete(st, i) SKM_sk_delete(X509_EXTENSION, (st), (i)) +# define sk_X509_EXTENSION_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_EXTENSION, (st), (ptr)) +# define sk_X509_EXTENSION_insert(st, val, i) SKM_sk_insert(X509_EXTENSION, (st), (val), (i)) +# define sk_X509_EXTENSION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_EXTENSION, (st), (cmp)) +# define sk_X509_EXTENSION_dup(st) SKM_sk_dup(X509_EXTENSION, st) +# define sk_X509_EXTENSION_pop_free(st, free_func) SKM_sk_pop_free(X509_EXTENSION, (st), (free_func)) +# define sk_X509_EXTENSION_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_EXTENSION, (st), (copy_func), (free_func)) +# define sk_X509_EXTENSION_shift(st) SKM_sk_shift(X509_EXTENSION, (st)) +# define sk_X509_EXTENSION_pop(st) SKM_sk_pop(X509_EXTENSION, (st)) +# define sk_X509_EXTENSION_sort(st) SKM_sk_sort(X509_EXTENSION, (st)) +# define sk_X509_EXTENSION_is_sorted(st) SKM_sk_is_sorted(X509_EXTENSION, (st)) +# define sk_X509_INFO_new(cmp) SKM_sk_new(X509_INFO, (cmp)) +# define sk_X509_INFO_new_null() SKM_sk_new_null(X509_INFO) +# define sk_X509_INFO_free(st) SKM_sk_free(X509_INFO, (st)) +# define sk_X509_INFO_num(st) SKM_sk_num(X509_INFO, (st)) +# define sk_X509_INFO_value(st, i) SKM_sk_value(X509_INFO, (st), (i)) +# define sk_X509_INFO_set(st, i, val) SKM_sk_set(X509_INFO, (st), (i), (val)) +# define sk_X509_INFO_zero(st) SKM_sk_zero(X509_INFO, (st)) +# define sk_X509_INFO_push(st, val) SKM_sk_push(X509_INFO, (st), (val)) +# define sk_X509_INFO_unshift(st, val) SKM_sk_unshift(X509_INFO, (st), (val)) +# define sk_X509_INFO_find(st, val) SKM_sk_find(X509_INFO, (st), (val)) +# define sk_X509_INFO_find_ex(st, val) SKM_sk_find_ex(X509_INFO, (st), (val)) +# define sk_X509_INFO_delete(st, i) SKM_sk_delete(X509_INFO, (st), (i)) +# define sk_X509_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_INFO, (st), (ptr)) +# define sk_X509_INFO_insert(st, val, i) SKM_sk_insert(X509_INFO, (st), (val), (i)) +# define sk_X509_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_INFO, (st), (cmp)) +# define sk_X509_INFO_dup(st) SKM_sk_dup(X509_INFO, st) +# define sk_X509_INFO_pop_free(st, free_func) SKM_sk_pop_free(X509_INFO, (st), (free_func)) +# define sk_X509_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_INFO, (st), (copy_func), (free_func)) +# define sk_X509_INFO_shift(st) SKM_sk_shift(X509_INFO, (st)) +# define sk_X509_INFO_pop(st) SKM_sk_pop(X509_INFO, (st)) +# define sk_X509_INFO_sort(st) SKM_sk_sort(X509_INFO, (st)) +# define sk_X509_INFO_is_sorted(st) SKM_sk_is_sorted(X509_INFO, (st)) +# define sk_X509_LOOKUP_new(cmp) SKM_sk_new(X509_LOOKUP, (cmp)) +# define sk_X509_LOOKUP_new_null() SKM_sk_new_null(X509_LOOKUP) +# define sk_X509_LOOKUP_free(st) SKM_sk_free(X509_LOOKUP, (st)) +# define sk_X509_LOOKUP_num(st) SKM_sk_num(X509_LOOKUP, (st)) +# define sk_X509_LOOKUP_value(st, i) SKM_sk_value(X509_LOOKUP, (st), (i)) +# define sk_X509_LOOKUP_set(st, i, val) SKM_sk_set(X509_LOOKUP, (st), (i), (val)) +# define sk_X509_LOOKUP_zero(st) SKM_sk_zero(X509_LOOKUP, (st)) +# define sk_X509_LOOKUP_push(st, val) SKM_sk_push(X509_LOOKUP, (st), (val)) +# define sk_X509_LOOKUP_unshift(st, val) SKM_sk_unshift(X509_LOOKUP, (st), (val)) +# define sk_X509_LOOKUP_find(st, val) SKM_sk_find(X509_LOOKUP, (st), (val)) +# define sk_X509_LOOKUP_find_ex(st, val) SKM_sk_find_ex(X509_LOOKUP, (st), (val)) +# define sk_X509_LOOKUP_delete(st, i) SKM_sk_delete(X509_LOOKUP, (st), (i)) +# define sk_X509_LOOKUP_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_LOOKUP, (st), (ptr)) +# define sk_X509_LOOKUP_insert(st, val, i) SKM_sk_insert(X509_LOOKUP, (st), (val), (i)) +# define sk_X509_LOOKUP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_LOOKUP, (st), (cmp)) +# define sk_X509_LOOKUP_dup(st) SKM_sk_dup(X509_LOOKUP, st) +# define sk_X509_LOOKUP_pop_free(st, free_func) SKM_sk_pop_free(X509_LOOKUP, (st), (free_func)) +# define sk_X509_LOOKUP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_LOOKUP, (st), (copy_func), (free_func)) +# define sk_X509_LOOKUP_shift(st) SKM_sk_shift(X509_LOOKUP, (st)) +# define sk_X509_LOOKUP_pop(st) SKM_sk_pop(X509_LOOKUP, (st)) +# define sk_X509_LOOKUP_sort(st) SKM_sk_sort(X509_LOOKUP, (st)) +# define sk_X509_LOOKUP_is_sorted(st) SKM_sk_is_sorted(X509_LOOKUP, (st)) +# define sk_X509_NAME_new(cmp) SKM_sk_new(X509_NAME, (cmp)) +# define sk_X509_NAME_new_null() SKM_sk_new_null(X509_NAME) +# define sk_X509_NAME_free(st) SKM_sk_free(X509_NAME, (st)) +# define sk_X509_NAME_num(st) SKM_sk_num(X509_NAME, (st)) +# define sk_X509_NAME_value(st, i) SKM_sk_value(X509_NAME, (st), (i)) +# define sk_X509_NAME_set(st, i, val) SKM_sk_set(X509_NAME, (st), (i), (val)) +# define sk_X509_NAME_zero(st) SKM_sk_zero(X509_NAME, (st)) +# define sk_X509_NAME_push(st, val) SKM_sk_push(X509_NAME, (st), (val)) +# define sk_X509_NAME_unshift(st, val) SKM_sk_unshift(X509_NAME, (st), (val)) +# define sk_X509_NAME_find(st, val) SKM_sk_find(X509_NAME, (st), (val)) +# define sk_X509_NAME_find_ex(st, val) SKM_sk_find_ex(X509_NAME, (st), (val)) +# define sk_X509_NAME_delete(st, i) SKM_sk_delete(X509_NAME, (st), (i)) +# define sk_X509_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME, (st), (ptr)) +# define sk_X509_NAME_insert(st, val, i) SKM_sk_insert(X509_NAME, (st), (val), (i)) +# define sk_X509_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME, (st), (cmp)) +# define sk_X509_NAME_dup(st) SKM_sk_dup(X509_NAME, st) +# define sk_X509_NAME_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME, (st), (free_func)) +# define sk_X509_NAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_NAME, (st), (copy_func), (free_func)) +# define sk_X509_NAME_shift(st) SKM_sk_shift(X509_NAME, (st)) +# define sk_X509_NAME_pop(st) SKM_sk_pop(X509_NAME, (st)) +# define sk_X509_NAME_sort(st) SKM_sk_sort(X509_NAME, (st)) +# define sk_X509_NAME_is_sorted(st) SKM_sk_is_sorted(X509_NAME, (st)) +# define sk_X509_NAME_ENTRY_new(cmp) SKM_sk_new(X509_NAME_ENTRY, (cmp)) +# define sk_X509_NAME_ENTRY_new_null() SKM_sk_new_null(X509_NAME_ENTRY) +# define sk_X509_NAME_ENTRY_free(st) SKM_sk_free(X509_NAME_ENTRY, (st)) +# define sk_X509_NAME_ENTRY_num(st) SKM_sk_num(X509_NAME_ENTRY, (st)) +# define sk_X509_NAME_ENTRY_value(st, i) SKM_sk_value(X509_NAME_ENTRY, (st), (i)) +# define sk_X509_NAME_ENTRY_set(st, i, val) SKM_sk_set(X509_NAME_ENTRY, (st), (i), (val)) +# define sk_X509_NAME_ENTRY_zero(st) SKM_sk_zero(X509_NAME_ENTRY, (st)) +# define sk_X509_NAME_ENTRY_push(st, val) SKM_sk_push(X509_NAME_ENTRY, (st), (val)) +# define sk_X509_NAME_ENTRY_unshift(st, val) SKM_sk_unshift(X509_NAME_ENTRY, (st), (val)) +# define sk_X509_NAME_ENTRY_find(st, val) SKM_sk_find(X509_NAME_ENTRY, (st), (val)) +# define sk_X509_NAME_ENTRY_find_ex(st, val) SKM_sk_find_ex(X509_NAME_ENTRY, (st), (val)) +# define sk_X509_NAME_ENTRY_delete(st, i) SKM_sk_delete(X509_NAME_ENTRY, (st), (i)) +# define sk_X509_NAME_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME_ENTRY, (st), (ptr)) +# define sk_X509_NAME_ENTRY_insert(st, val, i) SKM_sk_insert(X509_NAME_ENTRY, (st), (val), (i)) +# define sk_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME_ENTRY, (st), (cmp)) +# define sk_X509_NAME_ENTRY_dup(st) SKM_sk_dup(X509_NAME_ENTRY, st) +# define sk_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME_ENTRY, (st), (free_func)) +# define sk_X509_NAME_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_NAME_ENTRY, (st), (copy_func), (free_func)) +# define sk_X509_NAME_ENTRY_shift(st) SKM_sk_shift(X509_NAME_ENTRY, (st)) +# define sk_X509_NAME_ENTRY_pop(st) SKM_sk_pop(X509_NAME_ENTRY, (st)) +# define sk_X509_NAME_ENTRY_sort(st) SKM_sk_sort(X509_NAME_ENTRY, (st)) +# define sk_X509_NAME_ENTRY_is_sorted(st) SKM_sk_is_sorted(X509_NAME_ENTRY, (st)) +# define sk_X509_OBJECT_new(cmp) SKM_sk_new(X509_OBJECT, (cmp)) +# define sk_X509_OBJECT_new_null() SKM_sk_new_null(X509_OBJECT) +# define sk_X509_OBJECT_free(st) SKM_sk_free(X509_OBJECT, (st)) +# define sk_X509_OBJECT_num(st) SKM_sk_num(X509_OBJECT, (st)) +# define sk_X509_OBJECT_value(st, i) SKM_sk_value(X509_OBJECT, (st), (i)) +# define sk_X509_OBJECT_set(st, i, val) SKM_sk_set(X509_OBJECT, (st), (i), (val)) +# define sk_X509_OBJECT_zero(st) SKM_sk_zero(X509_OBJECT, (st)) +# define sk_X509_OBJECT_push(st, val) SKM_sk_push(X509_OBJECT, (st), (val)) +# define sk_X509_OBJECT_unshift(st, val) SKM_sk_unshift(X509_OBJECT, (st), (val)) +# define sk_X509_OBJECT_find(st, val) SKM_sk_find(X509_OBJECT, (st), (val)) +# define sk_X509_OBJECT_find_ex(st, val) SKM_sk_find_ex(X509_OBJECT, (st), (val)) +# define sk_X509_OBJECT_delete(st, i) SKM_sk_delete(X509_OBJECT, (st), (i)) +# define sk_X509_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_OBJECT, (st), (ptr)) +# define sk_X509_OBJECT_insert(st, val, i) SKM_sk_insert(X509_OBJECT, (st), (val), (i)) +# define sk_X509_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_OBJECT, (st), (cmp)) +# define sk_X509_OBJECT_dup(st) SKM_sk_dup(X509_OBJECT, st) +# define sk_X509_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(X509_OBJECT, (st), (free_func)) +# define sk_X509_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_OBJECT, (st), (copy_func), (free_func)) +# define sk_X509_OBJECT_shift(st) SKM_sk_shift(X509_OBJECT, (st)) +# define sk_X509_OBJECT_pop(st) SKM_sk_pop(X509_OBJECT, (st)) +# define sk_X509_OBJECT_sort(st) SKM_sk_sort(X509_OBJECT, (st)) +# define sk_X509_OBJECT_is_sorted(st) SKM_sk_is_sorted(X509_OBJECT, (st)) +# define sk_X509_POLICY_DATA_new(cmp) SKM_sk_new(X509_POLICY_DATA, (cmp)) +# define sk_X509_POLICY_DATA_new_null() SKM_sk_new_null(X509_POLICY_DATA) +# define sk_X509_POLICY_DATA_free(st) SKM_sk_free(X509_POLICY_DATA, (st)) +# define sk_X509_POLICY_DATA_num(st) SKM_sk_num(X509_POLICY_DATA, (st)) +# define sk_X509_POLICY_DATA_value(st, i) SKM_sk_value(X509_POLICY_DATA, (st), (i)) +# define sk_X509_POLICY_DATA_set(st, i, val) SKM_sk_set(X509_POLICY_DATA, (st), (i), (val)) +# define sk_X509_POLICY_DATA_zero(st) SKM_sk_zero(X509_POLICY_DATA, (st)) +# define sk_X509_POLICY_DATA_push(st, val) SKM_sk_push(X509_POLICY_DATA, (st), (val)) +# define sk_X509_POLICY_DATA_unshift(st, val) SKM_sk_unshift(X509_POLICY_DATA, (st), (val)) +# define sk_X509_POLICY_DATA_find(st, val) SKM_sk_find(X509_POLICY_DATA, (st), (val)) +# define sk_X509_POLICY_DATA_find_ex(st, val) SKM_sk_find_ex(X509_POLICY_DATA, (st), (val)) +# define sk_X509_POLICY_DATA_delete(st, i) SKM_sk_delete(X509_POLICY_DATA, (st), (i)) +# define sk_X509_POLICY_DATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_POLICY_DATA, (st), (ptr)) +# define sk_X509_POLICY_DATA_insert(st, val, i) SKM_sk_insert(X509_POLICY_DATA, (st), (val), (i)) +# define sk_X509_POLICY_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_DATA, (st), (cmp)) +# define sk_X509_POLICY_DATA_dup(st) SKM_sk_dup(X509_POLICY_DATA, st) +# define sk_X509_POLICY_DATA_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_DATA, (st), (free_func)) +# define sk_X509_POLICY_DATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_POLICY_DATA, (st), (copy_func), (free_func)) +# define sk_X509_POLICY_DATA_shift(st) SKM_sk_shift(X509_POLICY_DATA, (st)) +# define sk_X509_POLICY_DATA_pop(st) SKM_sk_pop(X509_POLICY_DATA, (st)) +# define sk_X509_POLICY_DATA_sort(st) SKM_sk_sort(X509_POLICY_DATA, (st)) +# define sk_X509_POLICY_DATA_is_sorted(st) SKM_sk_is_sorted(X509_POLICY_DATA, (st)) +# define sk_X509_POLICY_NODE_new(cmp) SKM_sk_new(X509_POLICY_NODE, (cmp)) +# define sk_X509_POLICY_NODE_new_null() SKM_sk_new_null(X509_POLICY_NODE) +# define sk_X509_POLICY_NODE_free(st) SKM_sk_free(X509_POLICY_NODE, (st)) +# define sk_X509_POLICY_NODE_num(st) SKM_sk_num(X509_POLICY_NODE, (st)) +# define sk_X509_POLICY_NODE_value(st, i) SKM_sk_value(X509_POLICY_NODE, (st), (i)) +# define sk_X509_POLICY_NODE_set(st, i, val) SKM_sk_set(X509_POLICY_NODE, (st), (i), (val)) +# define sk_X509_POLICY_NODE_zero(st) SKM_sk_zero(X509_POLICY_NODE, (st)) +# define sk_X509_POLICY_NODE_push(st, val) SKM_sk_push(X509_POLICY_NODE, (st), (val)) +# define sk_X509_POLICY_NODE_unshift(st, val) SKM_sk_unshift(X509_POLICY_NODE, (st), (val)) +# define sk_X509_POLICY_NODE_find(st, val) SKM_sk_find(X509_POLICY_NODE, (st), (val)) +# define sk_X509_POLICY_NODE_find_ex(st, val) SKM_sk_find_ex(X509_POLICY_NODE, (st), (val)) +# define sk_X509_POLICY_NODE_delete(st, i) SKM_sk_delete(X509_POLICY_NODE, (st), (i)) +# define sk_X509_POLICY_NODE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_POLICY_NODE, (st), (ptr)) +# define sk_X509_POLICY_NODE_insert(st, val, i) SKM_sk_insert(X509_POLICY_NODE, (st), (val), (i)) +# define sk_X509_POLICY_NODE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_NODE, (st), (cmp)) +# define sk_X509_POLICY_NODE_dup(st) SKM_sk_dup(X509_POLICY_NODE, st) +# define sk_X509_POLICY_NODE_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_NODE, (st), (free_func)) +# define sk_X509_POLICY_NODE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_POLICY_NODE, (st), (copy_func), (free_func)) +# define sk_X509_POLICY_NODE_shift(st) SKM_sk_shift(X509_POLICY_NODE, (st)) +# define sk_X509_POLICY_NODE_pop(st) SKM_sk_pop(X509_POLICY_NODE, (st)) +# define sk_X509_POLICY_NODE_sort(st) SKM_sk_sort(X509_POLICY_NODE, (st)) +# define sk_X509_POLICY_NODE_is_sorted(st) SKM_sk_is_sorted(X509_POLICY_NODE, (st)) +# define sk_X509_PURPOSE_new(cmp) SKM_sk_new(X509_PURPOSE, (cmp)) +# define sk_X509_PURPOSE_new_null() SKM_sk_new_null(X509_PURPOSE) +# define sk_X509_PURPOSE_free(st) SKM_sk_free(X509_PURPOSE, (st)) +# define sk_X509_PURPOSE_num(st) SKM_sk_num(X509_PURPOSE, (st)) +# define sk_X509_PURPOSE_value(st, i) SKM_sk_value(X509_PURPOSE, (st), (i)) +# define sk_X509_PURPOSE_set(st, i, val) SKM_sk_set(X509_PURPOSE, (st), (i), (val)) +# define sk_X509_PURPOSE_zero(st) SKM_sk_zero(X509_PURPOSE, (st)) +# define sk_X509_PURPOSE_push(st, val) SKM_sk_push(X509_PURPOSE, (st), (val)) +# define sk_X509_PURPOSE_unshift(st, val) SKM_sk_unshift(X509_PURPOSE, (st), (val)) +# define sk_X509_PURPOSE_find(st, val) SKM_sk_find(X509_PURPOSE, (st), (val)) +# define sk_X509_PURPOSE_find_ex(st, val) SKM_sk_find_ex(X509_PURPOSE, (st), (val)) +# define sk_X509_PURPOSE_delete(st, i) SKM_sk_delete(X509_PURPOSE, (st), (i)) +# define sk_X509_PURPOSE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_PURPOSE, (st), (ptr)) +# define sk_X509_PURPOSE_insert(st, val, i) SKM_sk_insert(X509_PURPOSE, (st), (val), (i)) +# define sk_X509_PURPOSE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_PURPOSE, (st), (cmp)) +# define sk_X509_PURPOSE_dup(st) SKM_sk_dup(X509_PURPOSE, st) +# define sk_X509_PURPOSE_pop_free(st, free_func) SKM_sk_pop_free(X509_PURPOSE, (st), (free_func)) +# define sk_X509_PURPOSE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_PURPOSE, (st), (copy_func), (free_func)) +# define sk_X509_PURPOSE_shift(st) SKM_sk_shift(X509_PURPOSE, (st)) +# define sk_X509_PURPOSE_pop(st) SKM_sk_pop(X509_PURPOSE, (st)) +# define sk_X509_PURPOSE_sort(st) SKM_sk_sort(X509_PURPOSE, (st)) +# define sk_X509_PURPOSE_is_sorted(st) SKM_sk_is_sorted(X509_PURPOSE, (st)) +# define sk_X509_REVOKED_new(cmp) SKM_sk_new(X509_REVOKED, (cmp)) +# define sk_X509_REVOKED_new_null() SKM_sk_new_null(X509_REVOKED) +# define sk_X509_REVOKED_free(st) SKM_sk_free(X509_REVOKED, (st)) +# define sk_X509_REVOKED_num(st) SKM_sk_num(X509_REVOKED, (st)) +# define sk_X509_REVOKED_value(st, i) SKM_sk_value(X509_REVOKED, (st), (i)) +# define sk_X509_REVOKED_set(st, i, val) SKM_sk_set(X509_REVOKED, (st), (i), (val)) +# define sk_X509_REVOKED_zero(st) SKM_sk_zero(X509_REVOKED, (st)) +# define sk_X509_REVOKED_push(st, val) SKM_sk_push(X509_REVOKED, (st), (val)) +# define sk_X509_REVOKED_unshift(st, val) SKM_sk_unshift(X509_REVOKED, (st), (val)) +# define sk_X509_REVOKED_find(st, val) SKM_sk_find(X509_REVOKED, (st), (val)) +# define sk_X509_REVOKED_find_ex(st, val) SKM_sk_find_ex(X509_REVOKED, (st), (val)) +# define sk_X509_REVOKED_delete(st, i) SKM_sk_delete(X509_REVOKED, (st), (i)) +# define sk_X509_REVOKED_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_REVOKED, (st), (ptr)) +# define sk_X509_REVOKED_insert(st, val, i) SKM_sk_insert(X509_REVOKED, (st), (val), (i)) +# define sk_X509_REVOKED_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_REVOKED, (st), (cmp)) +# define sk_X509_REVOKED_dup(st) SKM_sk_dup(X509_REVOKED, st) +# define sk_X509_REVOKED_pop_free(st, free_func) SKM_sk_pop_free(X509_REVOKED, (st), (free_func)) +# define sk_X509_REVOKED_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_REVOKED, (st), (copy_func), (free_func)) +# define sk_X509_REVOKED_shift(st) SKM_sk_shift(X509_REVOKED, (st)) +# define sk_X509_REVOKED_pop(st) SKM_sk_pop(X509_REVOKED, (st)) +# define sk_X509_REVOKED_sort(st) SKM_sk_sort(X509_REVOKED, (st)) +# define sk_X509_REVOKED_is_sorted(st) SKM_sk_is_sorted(X509_REVOKED, (st)) +# define sk_X509_TRUST_new(cmp) SKM_sk_new(X509_TRUST, (cmp)) +# define sk_X509_TRUST_new_null() SKM_sk_new_null(X509_TRUST) +# define sk_X509_TRUST_free(st) SKM_sk_free(X509_TRUST, (st)) +# define sk_X509_TRUST_num(st) SKM_sk_num(X509_TRUST, (st)) +# define sk_X509_TRUST_value(st, i) SKM_sk_value(X509_TRUST, (st), (i)) +# define sk_X509_TRUST_set(st, i, val) SKM_sk_set(X509_TRUST, (st), (i), (val)) +# define sk_X509_TRUST_zero(st) SKM_sk_zero(X509_TRUST, (st)) +# define sk_X509_TRUST_push(st, val) SKM_sk_push(X509_TRUST, (st), (val)) +# define sk_X509_TRUST_unshift(st, val) SKM_sk_unshift(X509_TRUST, (st), (val)) +# define sk_X509_TRUST_find(st, val) SKM_sk_find(X509_TRUST, (st), (val)) +# define sk_X509_TRUST_find_ex(st, val) SKM_sk_find_ex(X509_TRUST, (st), (val)) +# define sk_X509_TRUST_delete(st, i) SKM_sk_delete(X509_TRUST, (st), (i)) +# define sk_X509_TRUST_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_TRUST, (st), (ptr)) +# define sk_X509_TRUST_insert(st, val, i) SKM_sk_insert(X509_TRUST, (st), (val), (i)) +# define sk_X509_TRUST_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_TRUST, (st), (cmp)) +# define sk_X509_TRUST_dup(st) SKM_sk_dup(X509_TRUST, st) +# define sk_X509_TRUST_pop_free(st, free_func) SKM_sk_pop_free(X509_TRUST, (st), (free_func)) +# define sk_X509_TRUST_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_TRUST, (st), (copy_func), (free_func)) +# define sk_X509_TRUST_shift(st) SKM_sk_shift(X509_TRUST, (st)) +# define sk_X509_TRUST_pop(st) SKM_sk_pop(X509_TRUST, (st)) +# define sk_X509_TRUST_sort(st) SKM_sk_sort(X509_TRUST, (st)) +# define sk_X509_TRUST_is_sorted(st) SKM_sk_is_sorted(X509_TRUST, (st)) +# define sk_X509_VERIFY_PARAM_new(cmp) SKM_sk_new(X509_VERIFY_PARAM, (cmp)) +# define sk_X509_VERIFY_PARAM_new_null() SKM_sk_new_null(X509_VERIFY_PARAM) +# define sk_X509_VERIFY_PARAM_free(st) SKM_sk_free(X509_VERIFY_PARAM, (st)) +# define sk_X509_VERIFY_PARAM_num(st) SKM_sk_num(X509_VERIFY_PARAM, (st)) +# define sk_X509_VERIFY_PARAM_value(st, i) SKM_sk_value(X509_VERIFY_PARAM, (st), (i)) +# define sk_X509_VERIFY_PARAM_set(st, i, val) SKM_sk_set(X509_VERIFY_PARAM, (st), (i), (val)) +# define sk_X509_VERIFY_PARAM_zero(st) SKM_sk_zero(X509_VERIFY_PARAM, (st)) +# define sk_X509_VERIFY_PARAM_push(st, val) SKM_sk_push(X509_VERIFY_PARAM, (st), (val)) +# define sk_X509_VERIFY_PARAM_unshift(st, val) SKM_sk_unshift(X509_VERIFY_PARAM, (st), (val)) +# define sk_X509_VERIFY_PARAM_find(st, val) SKM_sk_find(X509_VERIFY_PARAM, (st), (val)) +# define sk_X509_VERIFY_PARAM_find_ex(st, val) SKM_sk_find_ex(X509_VERIFY_PARAM, (st), (val)) +# define sk_X509_VERIFY_PARAM_delete(st, i) SKM_sk_delete(X509_VERIFY_PARAM, (st), (i)) +# define sk_X509_VERIFY_PARAM_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_VERIFY_PARAM, (st), (ptr)) +# define sk_X509_VERIFY_PARAM_insert(st, val, i) SKM_sk_insert(X509_VERIFY_PARAM, (st), (val), (i)) +# define sk_X509_VERIFY_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_VERIFY_PARAM, (st), (cmp)) +# define sk_X509_VERIFY_PARAM_dup(st) SKM_sk_dup(X509_VERIFY_PARAM, st) +# define sk_X509_VERIFY_PARAM_pop_free(st, free_func) SKM_sk_pop_free(X509_VERIFY_PARAM, (st), (free_func)) +# define sk_X509_VERIFY_PARAM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_VERIFY_PARAM, (st), (copy_func), (free_func)) +# define sk_X509_VERIFY_PARAM_shift(st) SKM_sk_shift(X509_VERIFY_PARAM, (st)) +# define sk_X509_VERIFY_PARAM_pop(st) SKM_sk_pop(X509_VERIFY_PARAM, (st)) +# define sk_X509_VERIFY_PARAM_sort(st) SKM_sk_sort(X509_VERIFY_PARAM, (st)) +# define sk_X509_VERIFY_PARAM_is_sorted(st) SKM_sk_is_sorted(X509_VERIFY_PARAM, (st)) +# define sk_nid_triple_new(cmp) SKM_sk_new(nid_triple, (cmp)) +# define sk_nid_triple_new_null() SKM_sk_new_null(nid_triple) +# define sk_nid_triple_free(st) SKM_sk_free(nid_triple, (st)) +# define sk_nid_triple_num(st) SKM_sk_num(nid_triple, (st)) +# define sk_nid_triple_value(st, i) SKM_sk_value(nid_triple, (st), (i)) +# define sk_nid_triple_set(st, i, val) SKM_sk_set(nid_triple, (st), (i), (val)) +# define sk_nid_triple_zero(st) SKM_sk_zero(nid_triple, (st)) +# define sk_nid_triple_push(st, val) SKM_sk_push(nid_triple, (st), (val)) +# define sk_nid_triple_unshift(st, val) SKM_sk_unshift(nid_triple, (st), (val)) +# define sk_nid_triple_find(st, val) SKM_sk_find(nid_triple, (st), (val)) +# define sk_nid_triple_find_ex(st, val) SKM_sk_find_ex(nid_triple, (st), (val)) +# define sk_nid_triple_delete(st, i) SKM_sk_delete(nid_triple, (st), (i)) +# define sk_nid_triple_delete_ptr(st, ptr) SKM_sk_delete_ptr(nid_triple, (st), (ptr)) +# define sk_nid_triple_insert(st, val, i) SKM_sk_insert(nid_triple, (st), (val), (i)) +# define sk_nid_triple_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(nid_triple, (st), (cmp)) +# define sk_nid_triple_dup(st) SKM_sk_dup(nid_triple, st) +# define sk_nid_triple_pop_free(st, free_func) SKM_sk_pop_free(nid_triple, (st), (free_func)) +# define sk_nid_triple_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(nid_triple, (st), (copy_func), (free_func)) +# define sk_nid_triple_shift(st) SKM_sk_shift(nid_triple, (st)) +# define sk_nid_triple_pop(st) SKM_sk_pop(nid_triple, (st)) +# define sk_nid_triple_sort(st) SKM_sk_sort(nid_triple, (st)) +# define sk_nid_triple_is_sorted(st) SKM_sk_is_sorted(nid_triple, (st)) +# define sk_void_new(cmp) SKM_sk_new(void, (cmp)) +# define sk_void_new_null() SKM_sk_new_null(void) +# define sk_void_free(st) SKM_sk_free(void, (st)) +# define sk_void_num(st) SKM_sk_num(void, (st)) +# define sk_void_value(st, i) SKM_sk_value(void, (st), (i)) +# define sk_void_set(st, i, val) SKM_sk_set(void, (st), (i), (val)) +# define sk_void_zero(st) SKM_sk_zero(void, (st)) +# define sk_void_push(st, val) SKM_sk_push(void, (st), (val)) +# define sk_void_unshift(st, val) SKM_sk_unshift(void, (st), (val)) +# define sk_void_find(st, val) SKM_sk_find(void, (st), (val)) +# define sk_void_find_ex(st, val) SKM_sk_find_ex(void, (st), (val)) +# define sk_void_delete(st, i) SKM_sk_delete(void, (st), (i)) +# define sk_void_delete_ptr(st, ptr) SKM_sk_delete_ptr(void, (st), (ptr)) +# define sk_void_insert(st, val, i) SKM_sk_insert(void, (st), (val), (i)) +# define sk_void_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(void, (st), (cmp)) +# define sk_void_dup(st) SKM_sk_dup(void, st) +# define sk_void_pop_free(st, free_func) SKM_sk_pop_free(void, (st), (free_func)) +# define sk_void_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(void, (st), (copy_func), (free_func)) +# define sk_void_shift(st) SKM_sk_shift(void, (st)) +# define sk_void_pop(st) SKM_sk_pop(void, (st)) +# define sk_void_sort(st) SKM_sk_sort(void, (st)) +# define sk_void_is_sorted(st) SKM_sk_is_sorted(void, (st)) +# define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)sk_new(CHECKED_SK_CMP_FUNC(char, cmp))) +# define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)sk_new_null()) +# define sk_OPENSSL_STRING_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) +# define sk_OPENSSL_STRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) +# define sk_OPENSSL_STRING_value(st, i) ((OPENSSL_STRING)sk_value(CHECKED_STACK_OF(OPENSSL_STRING, st), i)) +# define sk_OPENSSL_STRING_num(st) SKM_sk_num(OPENSSL_STRING, st) +# define sk_OPENSSL_STRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_FREE_FUNC(char, free_func)) +# define sk_OPENSSL_STRING_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_STRING) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_COPY_FUNC(char, copy_func), CHECKED_SK_FREE_FUNC(char, free_func))) +# define sk_OPENSSL_STRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val), i) +# define sk_OPENSSL_STRING_free(st) SKM_sk_free(OPENSSL_STRING, st) +# define sk_OPENSSL_STRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_STRING, st), i, CHECKED_PTR_OF(char, val)) +# define sk_OPENSSL_STRING_zero(st) SKM_sk_zero(OPENSSL_STRING, (st)) +# define sk_OPENSSL_STRING_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) +# define sk_OPENSSL_STRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_CONST_PTR_OF(char, val)) +# define sk_OPENSSL_STRING_delete(st, i) SKM_sk_delete(OPENSSL_STRING, (st), (i)) +# define sk_OPENSSL_STRING_delete_ptr(st, ptr) (OPENSSL_STRING *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, ptr)) +# define sk_OPENSSL_STRING_set_cmp_func(st, cmp) \ + ((int (*)(const char * const *,const char * const *)) \ + sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_CMP_FUNC(char, cmp))) +# define sk_OPENSSL_STRING_dup(st) SKM_sk_dup(OPENSSL_STRING, st) +# define sk_OPENSSL_STRING_shift(st) SKM_sk_shift(OPENSSL_STRING, (st)) +# define sk_OPENSSL_STRING_pop(st) (char *)sk_pop(CHECKED_STACK_OF(OPENSSL_STRING, st)) +# define sk_OPENSSL_STRING_sort(st) SKM_sk_sort(OPENSSL_STRING, (st)) +# define sk_OPENSSL_STRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_STRING, (st)) +# define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)sk_new(CHECKED_SK_CMP_FUNC(void, cmp))) +# define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)sk_new_null()) +# define sk_OPENSSL_BLOCK_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) +# define sk_OPENSSL_BLOCK_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) +# define sk_OPENSSL_BLOCK_value(st, i) ((OPENSSL_BLOCK)sk_value(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i)) +# define sk_OPENSSL_BLOCK_num(st) SKM_sk_num(OPENSSL_BLOCK, st) +# define sk_OPENSSL_BLOCK_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_FREE_FUNC(void, free_func)) +# define sk_OPENSSL_BLOCK_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_BLOCK) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_COPY_FUNC(void, copy_func), CHECKED_SK_FREE_FUNC(void, free_func))) +# define sk_OPENSSL_BLOCK_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val), i) +# define sk_OPENSSL_BLOCK_free(st) SKM_sk_free(OPENSSL_BLOCK, st) +# define sk_OPENSSL_BLOCK_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i, CHECKED_PTR_OF(void, val)) +# define sk_OPENSSL_BLOCK_zero(st) SKM_sk_zero(OPENSSL_BLOCK, (st)) +# define sk_OPENSSL_BLOCK_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) +# define sk_OPENSSL_BLOCK_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_BLOCK), st), CHECKED_CONST_PTR_OF(void, val)) +# define sk_OPENSSL_BLOCK_delete(st, i) SKM_sk_delete(OPENSSL_BLOCK, (st), (i)) +# define sk_OPENSSL_BLOCK_delete_ptr(st, ptr) (OPENSSL_BLOCK *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, ptr)) +# define sk_OPENSSL_BLOCK_set_cmp_func(st, cmp) \ + ((int (*)(const void * const *,const void * const *)) \ + sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_CMP_FUNC(void, cmp))) +# define sk_OPENSSL_BLOCK_dup(st) SKM_sk_dup(OPENSSL_BLOCK, st) +# define sk_OPENSSL_BLOCK_shift(st) SKM_sk_shift(OPENSSL_BLOCK, (st)) +# define sk_OPENSSL_BLOCK_pop(st) (void *)sk_pop(CHECKED_STACK_OF(OPENSSL_BLOCK, st)) +# define sk_OPENSSL_BLOCK_sort(st) SKM_sk_sort(OPENSSL_BLOCK, (st)) +# define sk_OPENSSL_BLOCK_is_sorted(st) SKM_sk_is_sorted(OPENSSL_BLOCK, (st)) +# define sk_OPENSSL_PSTRING_new(cmp) ((STACK_OF(OPENSSL_PSTRING) *)sk_new(CHECKED_SK_CMP_FUNC(OPENSSL_STRING, cmp))) +# define sk_OPENSSL_PSTRING_new_null() ((STACK_OF(OPENSSL_PSTRING) *)sk_new_null()) +# define sk_OPENSSL_PSTRING_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) +# define sk_OPENSSL_PSTRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) +# define sk_OPENSSL_PSTRING_value(st, i) ((OPENSSL_PSTRING)sk_value(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i)) +# define sk_OPENSSL_PSTRING_num(st) SKM_sk_num(OPENSSL_PSTRING, st) +# define sk_OPENSSL_PSTRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_FREE_FUNC(OPENSSL_STRING, free_func)) +# define sk_OPENSSL_PSTRING_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_PSTRING) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_COPY_FUNC(OPENSSL_STRING, copy_func), CHECKED_SK_FREE_FUNC(OPENSSL_STRING, free_func))) +# define sk_OPENSSL_PSTRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val), i) +# define sk_OPENSSL_PSTRING_free(st) SKM_sk_free(OPENSSL_PSTRING, st) +# define sk_OPENSSL_PSTRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i, CHECKED_PTR_OF(OPENSSL_STRING, val)) +# define sk_OPENSSL_PSTRING_zero(st) SKM_sk_zero(OPENSSL_PSTRING, (st)) +# define sk_OPENSSL_PSTRING_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) +# define sk_OPENSSL_PSTRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_PSTRING), st), CHECKED_CONST_PTR_OF(OPENSSL_STRING, val)) +# define sk_OPENSSL_PSTRING_delete(st, i) SKM_sk_delete(OPENSSL_PSTRING, (st), (i)) +# define sk_OPENSSL_PSTRING_delete_ptr(st, ptr) (OPENSSL_PSTRING *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, ptr)) +# define sk_OPENSSL_PSTRING_set_cmp_func(st, cmp) \ + ((int (*)(const OPENSSL_STRING * const *,const OPENSSL_STRING * const *)) \ + sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_CMP_FUNC(OPENSSL_STRING, cmp))) +# define sk_OPENSSL_PSTRING_dup(st) SKM_sk_dup(OPENSSL_PSTRING, st) +# define sk_OPENSSL_PSTRING_shift(st) SKM_sk_shift(OPENSSL_PSTRING, (st)) +# define sk_OPENSSL_PSTRING_pop(st) (OPENSSL_STRING *)sk_pop(CHECKED_STACK_OF(OPENSSL_PSTRING, st)) +# define sk_OPENSSL_PSTRING_sort(st) SKM_sk_sort(OPENSSL_PSTRING, (st)) +# define sk_OPENSSL_PSTRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_PSTRING, (st)) +# define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ACCESS_DESCRIPTION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ACCESS_DESCRIPTION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_ACCESS_DESCRIPTION(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ACCESS_DESCRIPTION, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_ACCESS_DESCRIPTION(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ACCESS_DESCRIPTION, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_ASN1_INTEGER(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ASN1_INTEGER, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_ASN1_INTEGER(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ASN1_INTEGER, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_ASN1_INTEGER(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ASN1_INTEGER, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_ASN1_INTEGER(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ASN1_INTEGER, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_ASN1_OBJECT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ASN1_OBJECT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_ASN1_OBJECT(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ASN1_OBJECT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_ASN1_OBJECT(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ASN1_OBJECT, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_ASN1_OBJECT(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ASN1_OBJECT, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_ASN1_TYPE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ASN1_TYPE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_ASN1_TYPE(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ASN1_TYPE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_ASN1_TYPE(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ASN1_TYPE, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_ASN1_TYPE(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ASN1_TYPE, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_ASN1_UTF8STRING(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ASN1_UTF8STRING, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_ASN1_UTF8STRING(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ASN1_UTF8STRING, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_ASN1_UTF8STRING(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ASN1_UTF8STRING, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_ASN1_UTF8STRING(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ASN1_UTF8STRING, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_DIST_POINT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(DIST_POINT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_DIST_POINT(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(DIST_POINT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_DIST_POINT(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(DIST_POINT, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_DIST_POINT(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(DIST_POINT, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_ESS_CERT_ID(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(ESS_CERT_ID, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_ESS_CERT_ID(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(ESS_CERT_ID, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_ESS_CERT_ID(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(ESS_CERT_ID, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_ESS_CERT_ID(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(ESS_CERT_ID, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_EVP_MD(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(EVP_MD, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_EVP_MD(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(EVP_MD, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_EVP_MD(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(EVP_MD, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_EVP_MD(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(EVP_MD, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_GENERAL_NAME(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(GENERAL_NAME, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_GENERAL_NAME(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(GENERAL_NAME, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_GENERAL_NAME(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(GENERAL_NAME, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_GENERAL_NAME(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(GENERAL_NAME, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_OCSP_ONEREQ(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(OCSP_ONEREQ, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_OCSP_ONEREQ(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(OCSP_ONEREQ, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_OCSP_ONEREQ(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(OCSP_ONEREQ, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_OCSP_ONEREQ(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(OCSP_ONEREQ, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_OCSP_SINGLERESP(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(OCSP_SINGLERESP, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_OCSP_SINGLERESP(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(OCSP_SINGLERESP, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_OCSP_SINGLERESP(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(OCSP_SINGLERESP, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_OCSP_SINGLERESP(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(OCSP_SINGLERESP, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(PKCS12_SAFEBAG, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(PKCS12_SAFEBAG, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_PKCS12_SAFEBAG(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(PKCS12_SAFEBAG, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_PKCS12_SAFEBAG(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(PKCS12_SAFEBAG, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_PKCS7(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(PKCS7, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_PKCS7(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(PKCS7, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_PKCS7(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(PKCS7, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_PKCS7(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(PKCS7, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(PKCS7_RECIP_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(PKCS7_RECIP_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_PKCS7_RECIP_INFO(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(PKCS7_RECIP_INFO, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_PKCS7_RECIP_INFO(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(PKCS7_RECIP_INFO, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(PKCS7_SIGNER_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(PKCS7_SIGNER_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_PKCS7_SIGNER_INFO(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(PKCS7_SIGNER_INFO, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_PKCS7_SIGNER_INFO(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(PKCS7_SIGNER_INFO, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_POLICYINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(POLICYINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_POLICYINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(POLICYINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_POLICYINFO(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(POLICYINFO, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_POLICYINFO(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(POLICYINFO, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_POLICYQUALINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(POLICYQUALINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_POLICYQUALINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(POLICYQUALINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_POLICYQUALINFO(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(POLICYQUALINFO, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_POLICYQUALINFO(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(POLICYQUALINFO, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_SXNETID(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(SXNETID, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_SXNETID(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(SXNETID, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_SXNETID(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(SXNETID, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_SXNETID(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(SXNETID, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_X509(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_X509(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_X509(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_X509(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_X509_ALGOR(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_ALGOR, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_X509_ALGOR(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_ALGOR, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_X509_ALGOR(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_ALGOR, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_X509_ALGOR(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_ALGOR, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_ATTRIBUTE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_ATTRIBUTE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_X509_ATTRIBUTE(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_ATTRIBUTE, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_X509_ATTRIBUTE(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_ATTRIBUTE, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_X509_CRL(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_CRL, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_X509_CRL(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_CRL, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_X509_CRL(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_CRL, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_X509_CRL(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_CRL, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_X509_EXTENSION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_EXTENSION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_X509_EXTENSION(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_EXTENSION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_X509_EXTENSION(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_EXTENSION, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_X509_EXTENSION(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_EXTENSION, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_NAME_ENTRY, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_NAME_ENTRY, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_X509_NAME_ENTRY(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_NAME_ENTRY, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_X509_NAME_ENTRY(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_NAME_ENTRY, (buf), (len), (d2i_func), (free_func)) +# define d2i_ASN1_SET_OF_X509_REVOKED(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ + SKM_ASN1_SET_OF_d2i(X509_REVOKED, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) +# define i2d_ASN1_SET_OF_X509_REVOKED(st, pp, i2d_func, ex_tag, ex_class, is_set) \ + SKM_ASN1_SET_OF_i2d(X509_REVOKED, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) +# define ASN1_seq_pack_X509_REVOKED(st, i2d_func, buf, len) \ + SKM_ASN1_seq_pack(X509_REVOKED, (st), (i2d_func), (buf), (len)) +# define ASN1_seq_unpack_X509_REVOKED(buf, len, d2i_func, free_func) \ + SKM_ASN1_seq_unpack(X509_REVOKED, (buf), (len), (d2i_func), (free_func)) +# define PKCS12_decrypt_d2i_PKCS12_SAFEBAG(algor, d2i_func, free_func, pass, passlen, oct, seq) \ + SKM_PKCS12_decrypt_d2i(PKCS12_SAFEBAG, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq)) +# define PKCS12_decrypt_d2i_PKCS7(algor, d2i_func, free_func, pass, passlen, oct, seq) \ + SKM_PKCS12_decrypt_d2i(PKCS7, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq)) +# define lh_ADDED_OBJ_new() LHM_lh_new(ADDED_OBJ,added_obj) +# define lh_ADDED_OBJ_insert(lh,inst) LHM_lh_insert(ADDED_OBJ,lh,inst) +# define lh_ADDED_OBJ_retrieve(lh,inst) LHM_lh_retrieve(ADDED_OBJ,lh,inst) +# define lh_ADDED_OBJ_delete(lh,inst) LHM_lh_delete(ADDED_OBJ,lh,inst) +# define lh_ADDED_OBJ_doall(lh,fn) LHM_lh_doall(ADDED_OBJ,lh,fn) +# define lh_ADDED_OBJ_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(ADDED_OBJ,lh,fn,arg_type,arg) +# define lh_ADDED_OBJ_error(lh) LHM_lh_error(ADDED_OBJ,lh) +# define lh_ADDED_OBJ_num_items(lh) LHM_lh_num_items(ADDED_OBJ,lh) +# define lh_ADDED_OBJ_down_load(lh) LHM_lh_down_load(ADDED_OBJ,lh) +# define lh_ADDED_OBJ_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(ADDED_OBJ,lh,out) +# define lh_ADDED_OBJ_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(ADDED_OBJ,lh,out) +# define lh_ADDED_OBJ_stats_bio(lh,out) \ + LHM_lh_stats_bio(ADDED_OBJ,lh,out) +# define lh_ADDED_OBJ_free(lh) LHM_lh_free(ADDED_OBJ,lh) +# define lh_APP_INFO_new() LHM_lh_new(APP_INFO,app_info) +# define lh_APP_INFO_insert(lh,inst) LHM_lh_insert(APP_INFO,lh,inst) +# define lh_APP_INFO_retrieve(lh,inst) LHM_lh_retrieve(APP_INFO,lh,inst) +# define lh_APP_INFO_delete(lh,inst) LHM_lh_delete(APP_INFO,lh,inst) +# define lh_APP_INFO_doall(lh,fn) LHM_lh_doall(APP_INFO,lh,fn) +# define lh_APP_INFO_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(APP_INFO,lh,fn,arg_type,arg) +# define lh_APP_INFO_error(lh) LHM_lh_error(APP_INFO,lh) +# define lh_APP_INFO_num_items(lh) LHM_lh_num_items(APP_INFO,lh) +# define lh_APP_INFO_down_load(lh) LHM_lh_down_load(APP_INFO,lh) +# define lh_APP_INFO_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(APP_INFO,lh,out) +# define lh_APP_INFO_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(APP_INFO,lh,out) +# define lh_APP_INFO_stats_bio(lh,out) \ + LHM_lh_stats_bio(APP_INFO,lh,out) +# define lh_APP_INFO_free(lh) LHM_lh_free(APP_INFO,lh) +# define lh_CONF_VALUE_new() LHM_lh_new(CONF_VALUE,conf_value) +# define lh_CONF_VALUE_insert(lh,inst) LHM_lh_insert(CONF_VALUE,lh,inst) +# define lh_CONF_VALUE_retrieve(lh,inst) LHM_lh_retrieve(CONF_VALUE,lh,inst) +# define lh_CONF_VALUE_delete(lh,inst) LHM_lh_delete(CONF_VALUE,lh,inst) +# define lh_CONF_VALUE_doall(lh,fn) LHM_lh_doall(CONF_VALUE,lh,fn) +# define lh_CONF_VALUE_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(CONF_VALUE,lh,fn,arg_type,arg) +# define lh_CONF_VALUE_error(lh) LHM_lh_error(CONF_VALUE,lh) +# define lh_CONF_VALUE_num_items(lh) LHM_lh_num_items(CONF_VALUE,lh) +# define lh_CONF_VALUE_down_load(lh) LHM_lh_down_load(CONF_VALUE,lh) +# define lh_CONF_VALUE_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(CONF_VALUE,lh,out) +# define lh_CONF_VALUE_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(CONF_VALUE,lh,out) +# define lh_CONF_VALUE_stats_bio(lh,out) \ + LHM_lh_stats_bio(CONF_VALUE,lh,out) +# define lh_CONF_VALUE_free(lh) LHM_lh_free(CONF_VALUE,lh) +# define lh_ENGINE_PILE_new() LHM_lh_new(ENGINE_PILE,engine_pile) +# define lh_ENGINE_PILE_insert(lh,inst) LHM_lh_insert(ENGINE_PILE,lh,inst) +# define lh_ENGINE_PILE_retrieve(lh,inst) LHM_lh_retrieve(ENGINE_PILE,lh,inst) +# define lh_ENGINE_PILE_delete(lh,inst) LHM_lh_delete(ENGINE_PILE,lh,inst) +# define lh_ENGINE_PILE_doall(lh,fn) LHM_lh_doall(ENGINE_PILE,lh,fn) +# define lh_ENGINE_PILE_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(ENGINE_PILE,lh,fn,arg_type,arg) +# define lh_ENGINE_PILE_error(lh) LHM_lh_error(ENGINE_PILE,lh) +# define lh_ENGINE_PILE_num_items(lh) LHM_lh_num_items(ENGINE_PILE,lh) +# define lh_ENGINE_PILE_down_load(lh) LHM_lh_down_load(ENGINE_PILE,lh) +# define lh_ENGINE_PILE_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(ENGINE_PILE,lh,out) +# define lh_ENGINE_PILE_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(ENGINE_PILE,lh,out) +# define lh_ENGINE_PILE_stats_bio(lh,out) \ + LHM_lh_stats_bio(ENGINE_PILE,lh,out) +# define lh_ENGINE_PILE_free(lh) LHM_lh_free(ENGINE_PILE,lh) +# define lh_ERR_STATE_new() LHM_lh_new(ERR_STATE,err_state) +# define lh_ERR_STATE_insert(lh,inst) LHM_lh_insert(ERR_STATE,lh,inst) +# define lh_ERR_STATE_retrieve(lh,inst) LHM_lh_retrieve(ERR_STATE,lh,inst) +# define lh_ERR_STATE_delete(lh,inst) LHM_lh_delete(ERR_STATE,lh,inst) +# define lh_ERR_STATE_doall(lh,fn) LHM_lh_doall(ERR_STATE,lh,fn) +# define lh_ERR_STATE_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(ERR_STATE,lh,fn,arg_type,arg) +# define lh_ERR_STATE_error(lh) LHM_lh_error(ERR_STATE,lh) +# define lh_ERR_STATE_num_items(lh) LHM_lh_num_items(ERR_STATE,lh) +# define lh_ERR_STATE_down_load(lh) LHM_lh_down_load(ERR_STATE,lh) +# define lh_ERR_STATE_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(ERR_STATE,lh,out) +# define lh_ERR_STATE_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(ERR_STATE,lh,out) +# define lh_ERR_STATE_stats_bio(lh,out) \ + LHM_lh_stats_bio(ERR_STATE,lh,out) +# define lh_ERR_STATE_free(lh) LHM_lh_free(ERR_STATE,lh) +# define lh_ERR_STRING_DATA_new() LHM_lh_new(ERR_STRING_DATA,err_string_data) +# define lh_ERR_STRING_DATA_insert(lh,inst) LHM_lh_insert(ERR_STRING_DATA,lh,inst) +# define lh_ERR_STRING_DATA_retrieve(lh,inst) LHM_lh_retrieve(ERR_STRING_DATA,lh,inst) +# define lh_ERR_STRING_DATA_delete(lh,inst) LHM_lh_delete(ERR_STRING_DATA,lh,inst) +# define lh_ERR_STRING_DATA_doall(lh,fn) LHM_lh_doall(ERR_STRING_DATA,lh,fn) +# define lh_ERR_STRING_DATA_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(ERR_STRING_DATA,lh,fn,arg_type,arg) +# define lh_ERR_STRING_DATA_error(lh) LHM_lh_error(ERR_STRING_DATA,lh) +# define lh_ERR_STRING_DATA_num_items(lh) LHM_lh_num_items(ERR_STRING_DATA,lh) +# define lh_ERR_STRING_DATA_down_load(lh) LHM_lh_down_load(ERR_STRING_DATA,lh) +# define lh_ERR_STRING_DATA_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(ERR_STRING_DATA,lh,out) +# define lh_ERR_STRING_DATA_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(ERR_STRING_DATA,lh,out) +# define lh_ERR_STRING_DATA_stats_bio(lh,out) \ + LHM_lh_stats_bio(ERR_STRING_DATA,lh,out) +# define lh_ERR_STRING_DATA_free(lh) LHM_lh_free(ERR_STRING_DATA,lh) +# define lh_EX_CLASS_ITEM_new() LHM_lh_new(EX_CLASS_ITEM,ex_class_item) +# define lh_EX_CLASS_ITEM_insert(lh,inst) LHM_lh_insert(EX_CLASS_ITEM,lh,inst) +# define lh_EX_CLASS_ITEM_retrieve(lh,inst) LHM_lh_retrieve(EX_CLASS_ITEM,lh,inst) +# define lh_EX_CLASS_ITEM_delete(lh,inst) LHM_lh_delete(EX_CLASS_ITEM,lh,inst) +# define lh_EX_CLASS_ITEM_doall(lh,fn) LHM_lh_doall(EX_CLASS_ITEM,lh,fn) +# define lh_EX_CLASS_ITEM_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(EX_CLASS_ITEM,lh,fn,arg_type,arg) +# define lh_EX_CLASS_ITEM_error(lh) LHM_lh_error(EX_CLASS_ITEM,lh) +# define lh_EX_CLASS_ITEM_num_items(lh) LHM_lh_num_items(EX_CLASS_ITEM,lh) +# define lh_EX_CLASS_ITEM_down_load(lh) LHM_lh_down_load(EX_CLASS_ITEM,lh) +# define lh_EX_CLASS_ITEM_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(EX_CLASS_ITEM,lh,out) +# define lh_EX_CLASS_ITEM_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(EX_CLASS_ITEM,lh,out) +# define lh_EX_CLASS_ITEM_stats_bio(lh,out) \ + LHM_lh_stats_bio(EX_CLASS_ITEM,lh,out) +# define lh_EX_CLASS_ITEM_free(lh) LHM_lh_free(EX_CLASS_ITEM,lh) +# define lh_FUNCTION_new() LHM_lh_new(FUNCTION,function) +# define lh_FUNCTION_insert(lh,inst) LHM_lh_insert(FUNCTION,lh,inst) +# define lh_FUNCTION_retrieve(lh,inst) LHM_lh_retrieve(FUNCTION,lh,inst) +# define lh_FUNCTION_delete(lh,inst) LHM_lh_delete(FUNCTION,lh,inst) +# define lh_FUNCTION_doall(lh,fn) LHM_lh_doall(FUNCTION,lh,fn) +# define lh_FUNCTION_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(FUNCTION,lh,fn,arg_type,arg) +# define lh_FUNCTION_error(lh) LHM_lh_error(FUNCTION,lh) +# define lh_FUNCTION_num_items(lh) LHM_lh_num_items(FUNCTION,lh) +# define lh_FUNCTION_down_load(lh) LHM_lh_down_load(FUNCTION,lh) +# define lh_FUNCTION_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(FUNCTION,lh,out) +# define lh_FUNCTION_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(FUNCTION,lh,out) +# define lh_FUNCTION_stats_bio(lh,out) \ + LHM_lh_stats_bio(FUNCTION,lh,out) +# define lh_FUNCTION_free(lh) LHM_lh_free(FUNCTION,lh) +# define lh_MEM_new() LHM_lh_new(MEM,mem) +# define lh_MEM_insert(lh,inst) LHM_lh_insert(MEM,lh,inst) +# define lh_MEM_retrieve(lh,inst) LHM_lh_retrieve(MEM,lh,inst) +# define lh_MEM_delete(lh,inst) LHM_lh_delete(MEM,lh,inst) +# define lh_MEM_doall(lh,fn) LHM_lh_doall(MEM,lh,fn) +# define lh_MEM_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(MEM,lh,fn,arg_type,arg) +# define lh_MEM_error(lh) LHM_lh_error(MEM,lh) +# define lh_MEM_num_items(lh) LHM_lh_num_items(MEM,lh) +# define lh_MEM_down_load(lh) LHM_lh_down_load(MEM,lh) +# define lh_MEM_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(MEM,lh,out) +# define lh_MEM_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(MEM,lh,out) +# define lh_MEM_stats_bio(lh,out) \ + LHM_lh_stats_bio(MEM,lh,out) +# define lh_MEM_free(lh) LHM_lh_free(MEM,lh) +# define lh_OBJ_NAME_new() LHM_lh_new(OBJ_NAME,obj_name) +# define lh_OBJ_NAME_insert(lh,inst) LHM_lh_insert(OBJ_NAME,lh,inst) +# define lh_OBJ_NAME_retrieve(lh,inst) LHM_lh_retrieve(OBJ_NAME,lh,inst) +# define lh_OBJ_NAME_delete(lh,inst) LHM_lh_delete(OBJ_NAME,lh,inst) +# define lh_OBJ_NAME_doall(lh,fn) LHM_lh_doall(OBJ_NAME,lh,fn) +# define lh_OBJ_NAME_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(OBJ_NAME,lh,fn,arg_type,arg) +# define lh_OBJ_NAME_error(lh) LHM_lh_error(OBJ_NAME,lh) +# define lh_OBJ_NAME_num_items(lh) LHM_lh_num_items(OBJ_NAME,lh) +# define lh_OBJ_NAME_down_load(lh) LHM_lh_down_load(OBJ_NAME,lh) +# define lh_OBJ_NAME_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(OBJ_NAME,lh,out) +# define lh_OBJ_NAME_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(OBJ_NAME,lh,out) +# define lh_OBJ_NAME_stats_bio(lh,out) \ + LHM_lh_stats_bio(OBJ_NAME,lh,out) +# define lh_OBJ_NAME_free(lh) LHM_lh_free(OBJ_NAME,lh) +# define lh_OPENSSL_CSTRING_new() LHM_lh_new(OPENSSL_CSTRING,openssl_cstring) +# define lh_OPENSSL_CSTRING_insert(lh,inst) LHM_lh_insert(OPENSSL_CSTRING,lh,inst) +# define lh_OPENSSL_CSTRING_retrieve(lh,inst) LHM_lh_retrieve(OPENSSL_CSTRING,lh,inst) +# define lh_OPENSSL_CSTRING_delete(lh,inst) LHM_lh_delete(OPENSSL_CSTRING,lh,inst) +# define lh_OPENSSL_CSTRING_doall(lh,fn) LHM_lh_doall(OPENSSL_CSTRING,lh,fn) +# define lh_OPENSSL_CSTRING_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(OPENSSL_CSTRING,lh,fn,arg_type,arg) +# define lh_OPENSSL_CSTRING_error(lh) LHM_lh_error(OPENSSL_CSTRING,lh) +# define lh_OPENSSL_CSTRING_num_items(lh) LHM_lh_num_items(OPENSSL_CSTRING,lh) +# define lh_OPENSSL_CSTRING_down_load(lh) LHM_lh_down_load(OPENSSL_CSTRING,lh) +# define lh_OPENSSL_CSTRING_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(OPENSSL_CSTRING,lh,out) +# define lh_OPENSSL_CSTRING_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(OPENSSL_CSTRING,lh,out) +# define lh_OPENSSL_CSTRING_stats_bio(lh,out) \ + LHM_lh_stats_bio(OPENSSL_CSTRING,lh,out) +# define lh_OPENSSL_CSTRING_free(lh) LHM_lh_free(OPENSSL_CSTRING,lh) +# define lh_OPENSSL_STRING_new() LHM_lh_new(OPENSSL_STRING,openssl_string) +# define lh_OPENSSL_STRING_insert(lh,inst) LHM_lh_insert(OPENSSL_STRING,lh,inst) +# define lh_OPENSSL_STRING_retrieve(lh,inst) LHM_lh_retrieve(OPENSSL_STRING,lh,inst) +# define lh_OPENSSL_STRING_delete(lh,inst) LHM_lh_delete(OPENSSL_STRING,lh,inst) +# define lh_OPENSSL_STRING_doall(lh,fn) LHM_lh_doall(OPENSSL_STRING,lh,fn) +# define lh_OPENSSL_STRING_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(OPENSSL_STRING,lh,fn,arg_type,arg) +# define lh_OPENSSL_STRING_error(lh) LHM_lh_error(OPENSSL_STRING,lh) +# define lh_OPENSSL_STRING_num_items(lh) LHM_lh_num_items(OPENSSL_STRING,lh) +# define lh_OPENSSL_STRING_down_load(lh) LHM_lh_down_load(OPENSSL_STRING,lh) +# define lh_OPENSSL_STRING_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(OPENSSL_STRING,lh,out) +# define lh_OPENSSL_STRING_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(OPENSSL_STRING,lh,out) +# define lh_OPENSSL_STRING_stats_bio(lh,out) \ + LHM_lh_stats_bio(OPENSSL_STRING,lh,out) +# define lh_OPENSSL_STRING_free(lh) LHM_lh_free(OPENSSL_STRING,lh) +# define lh_SSL_SESSION_new() LHM_lh_new(SSL_SESSION,ssl_session) +# define lh_SSL_SESSION_insert(lh,inst) LHM_lh_insert(SSL_SESSION,lh,inst) +# define lh_SSL_SESSION_retrieve(lh,inst) LHM_lh_retrieve(SSL_SESSION,lh,inst) +# define lh_SSL_SESSION_delete(lh,inst) LHM_lh_delete(SSL_SESSION,lh,inst) +# define lh_SSL_SESSION_doall(lh,fn) LHM_lh_doall(SSL_SESSION,lh,fn) +# define lh_SSL_SESSION_doall_arg(lh,fn,arg_type,arg) \ + LHM_lh_doall_arg(SSL_SESSION,lh,fn,arg_type,arg) +# define lh_SSL_SESSION_error(lh) LHM_lh_error(SSL_SESSION,lh) +# define lh_SSL_SESSION_num_items(lh) LHM_lh_num_items(SSL_SESSION,lh) +# define lh_SSL_SESSION_down_load(lh) LHM_lh_down_load(SSL_SESSION,lh) +# define lh_SSL_SESSION_node_stats_bio(lh,out) \ + LHM_lh_node_stats_bio(SSL_SESSION,lh,out) +# define lh_SSL_SESSION_node_usage_stats_bio(lh,out) \ + LHM_lh_node_usage_stats_bio(SSL_SESSION,lh,out) +# define lh_SSL_SESSION_stats_bio(lh,out) \ + LHM_lh_stats_bio(SSL_SESSION,lh,out) +# define lh_SSL_SESSION_free(lh) LHM_lh_free(SSL_SESSION,lh) +#ifdef __cplusplus +} +#endif +#endif /* !defined HEADER_SAFESTACK_H */ diff --git a/Sources/OpenSSL/include/openssl/seed.h b/Sources/OpenSSL/include/openssl/seed.h new file mode 100644 index 0000000000..30fa2a7d7d --- /dev/null +++ b/Sources/OpenSSL/include/openssl/seed.h @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Neither the name of author nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ +/* ==================================================================== + * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_SEED_H +# define HEADER_SEED_H + +# include "opensslconf.h" +# include "e_os2.h" +# include "crypto.h" + +# ifdef OPENSSL_NO_SEED +# error SEED is disabled. +# endif + +/* look whether we need 'long' to get 32 bits */ +# ifdef AES_LONG +# ifndef SEED_LONG +# define SEED_LONG 1 +# endif +# endif + +# if !defined(NO_SYS_TYPES_H) +# include +# endif + +# define SEED_BLOCK_SIZE 16 +# define SEED_KEY_LENGTH 16 + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct seed_key_st { +# ifdef SEED_LONG + unsigned long data[32]; +# else + unsigned int data[32]; +# endif +} SEED_KEY_SCHEDULE; + +# ifdef OPENSSL_FIPS +void private_SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], + SEED_KEY_SCHEDULE *ks); +# endif +void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], + SEED_KEY_SCHEDULE *ks); + +void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], + unsigned char d[SEED_BLOCK_SIZE], + const SEED_KEY_SCHEDULE *ks); +void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], + unsigned char d[SEED_BLOCK_SIZE], + const SEED_KEY_SCHEDULE *ks); + +void SEED_ecb_encrypt(const unsigned char *in, unsigned char *out, + const SEED_KEY_SCHEDULE *ks, int enc); +void SEED_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, + const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], int enc); +void SEED_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], int *num, + int enc); +void SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], int *num); + +#ifdef __cplusplus +} +#endif + +#endif /* HEADER_SEED_H */ diff --git a/Sources/OpenSSL/include/openssl/sha.h b/Sources/OpenSSL/include/openssl/sha.h new file mode 100644 index 0000000000..53ae6f7709 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/sha.h @@ -0,0 +1,214 @@ +/* crypto/sha/sha.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_SHA_H +# define HEADER_SHA_H + +# include "e_os2.h" +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# if defined(OPENSSL_NO_SHA) || (defined(OPENSSL_NO_SHA0) && defined(OPENSSL_NO_SHA1)) +# error SHA is disabled. +# endif + +# if defined(OPENSSL_FIPS) +# define FIPS_SHA_SIZE_T size_t +# endif + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then ! + * ! SHA_LONG_LOG2 has to be defined along. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ + +# if defined(__LP32__) +# define SHA_LONG unsigned long +# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) +# define SHA_LONG unsigned long +# define SHA_LONG_LOG2 3 +# else +# define SHA_LONG unsigned int +# endif + +# define SHA_LBLOCK 16 +# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ +# define SHA_LAST_BLOCK (SHA_CBLOCK-8) +# define SHA_DIGEST_LENGTH 20 + +typedef struct SHAstate_st { + SHA_LONG h0, h1, h2, h3, h4; + SHA_LONG Nl, Nh; + SHA_LONG data[SHA_LBLOCK]; + unsigned int num; +} SHA_CTX; + +# ifndef OPENSSL_NO_SHA0 +# ifdef OPENSSL_FIPS +int private_SHA_Init(SHA_CTX *c); +# endif +int SHA_Init(SHA_CTX *c); +int SHA_Update(SHA_CTX *c, const void *data, size_t len); +int SHA_Final(unsigned char *md, SHA_CTX *c); +unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md); +void SHA_Transform(SHA_CTX *c, const unsigned char *data); +# endif +# ifndef OPENSSL_NO_SHA1 +# ifdef OPENSSL_FIPS +int private_SHA1_Init(SHA_CTX *c); +# endif +int SHA1_Init(SHA_CTX *c); +int SHA1_Update(SHA_CTX *c, const void *data, size_t len); +int SHA1_Final(unsigned char *md, SHA_CTX *c); +unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); +void SHA1_Transform(SHA_CTX *c, const unsigned char *data); +# endif + +# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ +# define SHA224_DIGEST_LENGTH 28 +# define SHA256_DIGEST_LENGTH 32 + +typedef struct SHA256state_st { + SHA_LONG h[8]; + SHA_LONG Nl, Nh; + SHA_LONG data[SHA_LBLOCK]; + unsigned int num, md_len; +} SHA256_CTX; + +# ifndef OPENSSL_NO_SHA256 +# ifdef OPENSSL_FIPS +int private_SHA224_Init(SHA256_CTX *c); +int private_SHA256_Init(SHA256_CTX *c); +# endif +int SHA224_Init(SHA256_CTX *c); +int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); +int SHA224_Final(unsigned char *md, SHA256_CTX *c); +unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md); +int SHA256_Init(SHA256_CTX *c); +int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); +int SHA256_Final(unsigned char *md, SHA256_CTX *c); +unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); +void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); +# endif + +# define SHA384_DIGEST_LENGTH 48 +# define SHA512_DIGEST_LENGTH 64 + +# ifndef OPENSSL_NO_SHA512 +/* + * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64 + * being exactly 64-bit wide. See Implementation Notes in sha512.c + * for further details. + */ +/* + * SHA-512 treats input data as a + * contiguous array of 64 bit + * wide big-endian values. + */ +# define SHA512_CBLOCK (SHA_LBLOCK*8) +# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) +# define SHA_LONG64 unsigned __int64 +# define U64(C) C##UI64 +# elif defined(__arch64__) +# define SHA_LONG64 unsigned long +# define U64(C) C##UL +# else +# define SHA_LONG64 unsigned long long +# define U64(C) C##ULL +# endif + +typedef struct SHA512state_st { + SHA_LONG64 h[8]; + SHA_LONG64 Nl, Nh; + union { + SHA_LONG64 d[SHA_LBLOCK]; + unsigned char p[SHA512_CBLOCK]; + } u; + unsigned int num, md_len; +} SHA512_CTX; +# endif + +# ifndef OPENSSL_NO_SHA512 +# ifdef OPENSSL_FIPS +int private_SHA384_Init(SHA512_CTX *c); +int private_SHA512_Init(SHA512_CTX *c); +# endif +int SHA384_Init(SHA512_CTX *c); +int SHA384_Update(SHA512_CTX *c, const void *data, size_t len); +int SHA384_Final(unsigned char *md, SHA512_CTX *c); +unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md); +int SHA512_Init(SHA512_CTX *c); +int SHA512_Update(SHA512_CTX *c, const void *data, size_t len); +int SHA512_Final(unsigned char *md, SHA512_CTX *c); +unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); +void SHA512_Transform(SHA512_CTX *c, const unsigned char *data); +# endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/srp.h b/Sources/OpenSSL/include/openssl/srp.h new file mode 100644 index 0000000000..03f099f8e1 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/srp.h @@ -0,0 +1,169 @@ +/* crypto/srp/srp.h */ +/* + * Written by Christophe Renou (christophe.renou@edelweb.fr) with the + * precious help of Peter Sylvester (peter.sylvester@edelweb.fr) for the + * EdelKey project and contributed to the OpenSSL project 2004. + */ +/* ==================================================================== + * Copyright (c) 2004 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +#ifndef __SRP_H__ +# define __SRP_H__ + +# ifndef OPENSSL_NO_SRP + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# include "safestack.h" +# include "bn.h" +# include "crypto.h" + +typedef struct SRP_gN_cache_st { + char *b64_bn; + BIGNUM *bn; +} SRP_gN_cache; + + +DECLARE_STACK_OF(SRP_gN_cache) + +typedef struct SRP_user_pwd_st { + char *id; + BIGNUM *s; + BIGNUM *v; + const BIGNUM *g; + const BIGNUM *N; + char *info; +} SRP_user_pwd; + +DECLARE_STACK_OF(SRP_user_pwd) + +typedef struct SRP_VBASE_st { + STACK_OF(SRP_user_pwd) *users_pwd; + STACK_OF(SRP_gN_cache) *gN_cache; +/* to simulate a user */ + char *seed_key; + BIGNUM *default_g; + BIGNUM *default_N; +} SRP_VBASE; + +/* + * Structure interne pour retenir les couples N et g + */ +typedef struct SRP_gN_st { + char *id; + BIGNUM *g; + BIGNUM *N; +} SRP_gN; + +DECLARE_STACK_OF(SRP_gN) + +SRP_VBASE *SRP_VBASE_new(char *seed_key); +int SRP_VBASE_free(SRP_VBASE *vb); +int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); +SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username); +char *SRP_create_verifier(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g); +int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, BIGNUM *N, BIGNUM *g); + +# define SRP_NO_ERROR 0 +# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 +# define SRP_ERR_VBASE_BN_LIB 2 +# define SRP_ERR_OPEN_FILE 3 +# define SRP_ERR_MEMORY 4 + +# define DB_srptype 0 +# define DB_srpverifier 1 +# define DB_srpsalt 2 +# define DB_srpid 3 +# define DB_srpgN 4 +# define DB_srpinfo 5 +# undef DB_NUMBER +# define DB_NUMBER 6 + +# define DB_SRP_INDEX 'I' +# define DB_SRP_VALID 'V' +# define DB_SRP_REVOKED 'R' +# define DB_SRP_MODIF 'v' + +/* see srp.c */ +char *SRP_check_known_gN_param(BIGNUM *g, BIGNUM *N); +SRP_gN *SRP_get_default_gN(const char *id); + +/* server side .... */ +BIGNUM *SRP_Calc_server_key(BIGNUM *A, BIGNUM *v, BIGNUM *u, BIGNUM *b, + BIGNUM *N); +BIGNUM *SRP_Calc_B(BIGNUM *b, BIGNUM *N, BIGNUM *g, BIGNUM *v); +int SRP_Verify_A_mod_N(BIGNUM *A, BIGNUM *N); +BIGNUM *SRP_Calc_u(BIGNUM *A, BIGNUM *B, BIGNUM *N); + +/* client side .... */ +BIGNUM *SRP_Calc_x(BIGNUM *s, const char *user, const char *pass); +BIGNUM *SRP_Calc_A(BIGNUM *a, BIGNUM *N, BIGNUM *g); +BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x, + BIGNUM *a, BIGNUM *u); +int SRP_Verify_B_mod_N(BIGNUM *B, BIGNUM *N); + +# define SRP_MINIMAL_N 1024 + +#ifdef __cplusplus +} +#endif + +# endif +#endif diff --git a/Sources/OpenSSL/include/openssl/srtp.h b/Sources/OpenSSL/include/openssl/srtp.h new file mode 100644 index 0000000000..94d32d8cd2 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/srtp.h @@ -0,0 +1,147 @@ +/* ssl/srtp.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +/* + * DTLS code by Eric Rescorla + * + * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. + */ + +#ifndef HEADER_D1_SRTP_H +# define HEADER_D1_SRTP_H + +# include "ssl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +# define SRTP_AES128_CM_SHA1_80 0x0001 +# define SRTP_AES128_CM_SHA1_32 0x0002 +# define SRTP_AES128_F8_SHA1_80 0x0003 +# define SRTP_AES128_F8_SHA1_32 0x0004 +# define SRTP_NULL_SHA1_80 0x0005 +# define SRTP_NULL_SHA1_32 0x0006 + +# ifndef OPENSSL_NO_SRTP + +int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); +int SSL_set_tlsext_use_srtp(SSL *ctx, const char *profiles); + +STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); +SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); + +# endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/ssl.h b/Sources/OpenSSL/include/openssl/ssl.h new file mode 100644 index 0000000000..963ff943d7 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/ssl.h @@ -0,0 +1,3164 @@ +/* ssl/ssl.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +/* ==================================================================== + * 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 + +# include "e_os2.h" + +# ifndef OPENSSL_NO_COMP +# include "comp.h" +# endif +# ifndef OPENSSL_NO_BIO +# include "bio.h" +# endif +# ifndef OPENSSL_NO_DEPRECATED +# ifndef OPENSSL_NO_X509 +# include "x509.h" +# endif +# include "crypto.h" +# include "lhash.h" +# include "buffer.h" +# endif +# include "pem.h" +# include "hmac.h" + +# include "kssl.h" +# include "safestack.h" +# include "symhacks.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SSLeay version number for ASN.1 encoding of the session information */ +/*- + * Version 0 - initial version + * Version 1 - added the optional peer certificate + */ +# define SSL_SESSION_ASN1_VERSION 0x0001 + +/* text strings for the ciphers */ +# define SSL_TXT_NULL_WITH_MD5 SSL2_TXT_NULL_WITH_MD5 +# define SSL_TXT_RC4_128_WITH_MD5 SSL2_TXT_RC4_128_WITH_MD5 +# define SSL_TXT_RC4_128_EXPORT40_WITH_MD5 SSL2_TXT_RC4_128_EXPORT40_WITH_MD5 +# define SSL_TXT_RC2_128_CBC_WITH_MD5 SSL2_TXT_RC2_128_CBC_WITH_MD5 +# define SSL_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 +# define SSL_TXT_IDEA_128_CBC_WITH_MD5 SSL2_TXT_IDEA_128_CBC_WITH_MD5 +# define SSL_TXT_DES_64_CBC_WITH_MD5 SSL2_TXT_DES_64_CBC_WITH_MD5 +# define SSL_TXT_DES_64_CBC_WITH_SHA SSL2_TXT_DES_64_CBC_WITH_SHA +# define SSL_TXT_DES_192_EDE3_CBC_WITH_MD5 SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5 +# define SSL_TXT_DES_192_EDE3_CBC_WITH_SHA SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA + +/* + * VRS Additional Kerberos5 entries + */ +# define SSL_TXT_KRB5_DES_64_CBC_SHA SSL3_TXT_KRB5_DES_64_CBC_SHA +# define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA +# define SSL_TXT_KRB5_RC4_128_SHA SSL3_TXT_KRB5_RC4_128_SHA +# define SSL_TXT_KRB5_IDEA_128_CBC_SHA SSL3_TXT_KRB5_IDEA_128_CBC_SHA +# define SSL_TXT_KRB5_DES_64_CBC_MD5 SSL3_TXT_KRB5_DES_64_CBC_MD5 +# define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5 +# define SSL_TXT_KRB5_RC4_128_MD5 SSL3_TXT_KRB5_RC4_128_MD5 +# define SSL_TXT_KRB5_IDEA_128_CBC_MD5 SSL3_TXT_KRB5_IDEA_128_CBC_MD5 + +# define SSL_TXT_KRB5_DES_40_CBC_SHA SSL3_TXT_KRB5_DES_40_CBC_SHA +# define SSL_TXT_KRB5_RC2_40_CBC_SHA SSL3_TXT_KRB5_RC2_40_CBC_SHA +# define SSL_TXT_KRB5_RC4_40_SHA SSL3_TXT_KRB5_RC4_40_SHA +# define SSL_TXT_KRB5_DES_40_CBC_MD5 SSL3_TXT_KRB5_DES_40_CBC_MD5 +# define SSL_TXT_KRB5_RC2_40_CBC_MD5 SSL3_TXT_KRB5_RC2_40_CBC_MD5 +# define SSL_TXT_KRB5_RC4_40_MD5 SSL3_TXT_KRB5_RC4_40_MD5 + +# define SSL_TXT_KRB5_DES_40_CBC_SHA SSL3_TXT_KRB5_DES_40_CBC_SHA +# define SSL_TXT_KRB5_DES_40_CBC_MD5 SSL3_TXT_KRB5_DES_40_CBC_MD5 +# define SSL_TXT_KRB5_DES_64_CBC_SHA SSL3_TXT_KRB5_DES_64_CBC_SHA +# define SSL_TXT_KRB5_DES_64_CBC_MD5 SSL3_TXT_KRB5_DES_64_CBC_MD5 +# define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA +# define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5 +# define SSL_MAX_KRB5_PRINCIPAL_LENGTH 256 + +# define SSL_MAX_SSL_SESSION_ID_LENGTH 32 +# define SSL_MAX_SID_CTX_LENGTH 32 + +# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) +# define SSL_MAX_KEY_ARG_LENGTH 8 +# define SSL_MAX_MASTER_KEY_LENGTH 48 + +/* These are used to specify which ciphers to use and not to use */ + +# define SSL_TXT_EXP40 "EXPORT40" +# define SSL_TXT_EXP56 "EXPORT56" +# define SSL_TXT_LOW "LOW" +# define SSL_TXT_MEDIUM "MEDIUM" +# define SSL_TXT_HIGH "HIGH" +# define SSL_TXT_FIPS "FIPS" + +# define SSL_TXT_kFZA "kFZA"/* unused! */ +# define SSL_TXT_aFZA "aFZA"/* unused! */ +# define SSL_TXT_eFZA "eFZA"/* unused! */ +# define SSL_TXT_FZA "FZA"/* unused! */ + +# define SSL_TXT_aNULL "aNULL" +# define SSL_TXT_eNULL "eNULL" +# define SSL_TXT_NULL "NULL" + +# define SSL_TXT_kRSA "kRSA" +# define SSL_TXT_kDHr "kDHr" +# define SSL_TXT_kDHd "kDHd" +# define SSL_TXT_kDH "kDH" +# define SSL_TXT_kEDH "kEDH" +# define SSL_TXT_kDHE "kDHE"/* alias for kEDH */ +# define SSL_TXT_kKRB5 "kKRB5" +# define SSL_TXT_kECDHr "kECDHr" +# define SSL_TXT_kECDHe "kECDHe" +# define SSL_TXT_kECDH "kECDH" +# define SSL_TXT_kEECDH "kEECDH" +# define SSL_TXT_kECDHE "kECDHE"/* alias for kEECDH */ +# define SSL_TXT_kPSK "kPSK" +# define SSL_TXT_kGOST "kGOST" +# define SSL_TXT_kSRP "kSRP" + +# define SSL_TXT_aRSA "aRSA" +# define SSL_TXT_aDSS "aDSS" +# define SSL_TXT_aDH "aDH" +# define SSL_TXT_aECDH "aECDH" +# define SSL_TXT_aKRB5 "aKRB5" +# define SSL_TXT_aECDSA "aECDSA" +# define SSL_TXT_aPSK "aPSK" +# define SSL_TXT_aGOST94 "aGOST94" +# define SSL_TXT_aGOST01 "aGOST01" +# define SSL_TXT_aGOST "aGOST" +# define SSL_TXT_aSRP "aSRP" + +# define SSL_TXT_DSS "DSS" +# define SSL_TXT_DH "DH" +# define SSL_TXT_EDH "EDH"/* same as "kEDH:-ADH" */ +# define SSL_TXT_DHE "DHE"/* alias for EDH */ +# define SSL_TXT_ADH "ADH" +# define SSL_TXT_RSA "RSA" +# define SSL_TXT_ECDH "ECDH" +# define SSL_TXT_EECDH "EECDH"/* same as "kEECDH:-AECDH" */ +# define SSL_TXT_ECDHE "ECDHE"/* alias for ECDHE" */ +# define SSL_TXT_AECDH "AECDH" +# define SSL_TXT_ECDSA "ECDSA" +# define SSL_TXT_KRB5 "KRB5" +# define SSL_TXT_PSK "PSK" +# define SSL_TXT_SRP "SRP" + +# define SSL_TXT_DES "DES" +# define SSL_TXT_3DES "3DES" +# define SSL_TXT_RC4 "RC4" +# define SSL_TXT_RC2 "RC2" +# define SSL_TXT_IDEA "IDEA" +# define SSL_TXT_SEED "SEED" +# define SSL_TXT_AES128 "AES128" +# define SSL_TXT_AES256 "AES256" +# define SSL_TXT_AES "AES" +# define SSL_TXT_AES_GCM "AESGCM" +# define SSL_TXT_CAMELLIA128 "CAMELLIA128" +# define SSL_TXT_CAMELLIA256 "CAMELLIA256" +# define SSL_TXT_CAMELLIA "CAMELLIA" + +# define SSL_TXT_MD5 "MD5" +# define SSL_TXT_SHA1 "SHA1" +# define SSL_TXT_SHA "SHA"/* same as "SHA1" */ +# define SSL_TXT_GOST94 "GOST94" +# define SSL_TXT_GOST89MAC "GOST89MAC" +# define SSL_TXT_SHA256 "SHA256" +# define SSL_TXT_SHA384 "SHA384" + +# define SSL_TXT_SSLV2 "SSLv2" +# define SSL_TXT_SSLV3 "SSLv3" +# define SSL_TXT_TLSV1 "TLSv1" +# define SSL_TXT_TLSV1_1 "TLSv1.1" +# define SSL_TXT_TLSV1_2 "TLSv1.2" + +# define SSL_TXT_EXP "EXP" +# define SSL_TXT_EXPORT "EXPORT" + +# define SSL_TXT_ALL "ALL" + +/*- + * COMPLEMENTOF* definitions. These identifiers are used to (de-select) + * ciphers normally not being used. + * Example: "RC4" will activate all ciphers using RC4 including ciphers + * without authentication, which would normally disabled by DEFAULT (due + * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT" + * will make sure that it is also disabled in the specific selection. + * COMPLEMENTOF* identifiers are portable between version, as adjustments + * to the default cipher setup will also be included here. + * + * COMPLEMENTOFDEFAULT does not experience the same special treatment that + * DEFAULT gets, as only selection is being done and no sorting as needed + * for DEFAULT. + */ +# define SSL_TXT_CMPALL "COMPLEMENTOFALL" +# define SSL_TXT_CMPDEF "COMPLEMENTOFDEFAULT" + +/* + * The following cipher list is used by default. It also is substituted when + * an application-defined cipher list string starts with 'DEFAULT'. + */ +# define SSL_DEFAULT_CIPHER_LIST "ALL:!EXPORT:!aNULL:!eNULL:!SSLv2" +/* + * 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 + * throwing out anonymous and unencrypted ciphersuites! (The latter are not + * actually enabled by ALL, but "ALL:RSA" would enable some of them.) + */ + +/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */ +# define SSL_SENT_SHUTDOWN 1 +# define SSL_RECEIVED_SHUTDOWN 2 + +#ifdef __cplusplus +} +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +# if (defined(OPENSSL_NO_RSA) || defined(OPENSSL_NO_MD5)) && !defined(OPENSSL_NO_SSL2) +# define OPENSSL_NO_SSL2 +# endif + +# define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1 +# define SSL_FILETYPE_PEM X509_FILETYPE_PEM + +/* + * This is needed to stop compilers complaining about the 'struct ssl_st *' + * function parameters used to prototype callbacks in SSL_CTX. + */ +typedef struct ssl_st *ssl_crock_st; +typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; +typedef struct ssl_method_st SSL_METHOD; +typedef struct ssl_cipher_st SSL_CIPHER; +typedef struct ssl_session_st SSL_SESSION; +typedef struct tls_sigalgs_st TLS_SIGALGS; +typedef struct ssl_conf_ctx_st SSL_CONF_CTX; + +DECLARE_STACK_OF(SSL_CIPHER) + +/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/ +typedef struct srtp_protection_profile_st { + const char *name; + unsigned long id; +} SRTP_PROTECTION_PROFILE; + +DECLARE_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, + SSL_CIPHER **cipher, void *arg); + +# ifndef OPENSSL_NO_TLSEXT + +/* 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 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); + +# endif + +# ifndef OPENSSL_NO_SSL_INTERN + +/* used to hold info on the particular ciphers used */ +struct ssl_cipher_st { + int valid; + const char *name; /* text name */ + unsigned long id; /* id, 4 bytes, first is version */ + /* + * changed in 0.9.9: these four used to be portions of a single value + * 'algorithms' + */ + unsigned long algorithm_mkey; /* key exchange algorithm */ + unsigned long algorithm_auth; /* server authentication */ + unsigned long algorithm_enc; /* symmetric encryption */ + unsigned long algorithm_mac; /* symmetric authentication */ + unsigned long algorithm_ssl; /* (major) protocol version */ + unsigned long algo_strength; /* strength and export flags */ + unsigned long algorithm2; /* Extra flags */ + int strength_bits; /* Number of bits really used */ + int alg_bits; /* Number of bits for algorithm */ +}; + +/* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */ +struct ssl_method_st { + int version; + int (*ssl_new) (SSL *s); + void (*ssl_clear) (SSL *s); + void (*ssl_free) (SSL *s); + int (*ssl_accept) (SSL *s); + int (*ssl_connect) (SSL *s); + int (*ssl_read) (SSL *s, void *buf, int len); + int (*ssl_peek) (SSL *s, void *buf, int len); + int (*ssl_write) (SSL *s, const void *buf, int len); + int (*ssl_shutdown) (SSL *s); + int (*ssl_renegotiate) (SSL *s); + int (*ssl_renegotiate_check) (SSL *s); + long (*ssl_get_message) (SSL *s, int st1, int stn, int mt, long + max, int *ok); + int (*ssl_read_bytes) (SSL *s, int type, unsigned char *buf, int len, + int peek); + int (*ssl_write_bytes) (SSL *s, int type, const void *buf_, int len); + int (*ssl_dispatch_alert) (SSL *s); + long (*ssl_ctrl) (SSL *s, int cmd, long larg, void *parg); + long (*ssl_ctx_ctrl) (SSL_CTX *ctx, int cmd, long larg, void *parg); + const SSL_CIPHER *(*get_cipher_by_char) (const unsigned char *ptr); + int (*put_cipher_by_char) (const SSL_CIPHER *cipher, unsigned char *ptr); + int (*ssl_pending) (const SSL *s); + int (*num_ciphers) (void); + const SSL_CIPHER *(*get_cipher) (unsigned ncipher); + const struct ssl_method_st *(*get_ssl_method) (int version); + long (*get_timeout) (void); + struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */ + int (*ssl_version) (void); + long (*ssl_callback_ctrl) (SSL *s, int cb_id, void (*fp) (void)); + long (*ssl_ctx_callback_ctrl) (SSL_CTX *s, int cb_id, void (*fp) (void)); +}; + +/*- + * Lets make this into an ASN.1 type structure as follows + * SSL_SESSION_ID ::= SEQUENCE { + * version INTEGER, -- structure version number + * SSLversion INTEGER, -- SSL version number + * Cipher OCTET STRING, -- the 3 byte cipher ID + * Session_ID OCTET STRING, -- the Session ID + * Master_key OCTET STRING, -- the master key + * KRB5_principal OCTET STRING -- optional Kerberos principal + * Key_Arg [ 0 ] IMPLICIT OCTET STRING, -- the optional Key argument + * Time [ 1 ] EXPLICIT INTEGER, -- optional Start Time + * Timeout [ 2 ] EXPLICIT INTEGER, -- optional Timeout ins seconds + * Peer [ 3 ] EXPLICIT X509, -- optional Peer Certificate + * Session_ID_context [ 4 ] EXPLICIT OCTET STRING, -- the Session ID context + * Verify_result [ 5 ] EXPLICIT INTEGER, -- X509_V_... code for `Peer' + * HostName [ 6 ] EXPLICIT OCTET STRING, -- optional HostName from servername TLS extension + * PSK_identity_hint [ 7 ] EXPLICIT OCTET STRING, -- optional PSK identity hint + * PSK_identity [ 8 ] EXPLICIT OCTET STRING, -- optional PSK identity + * Ticket_lifetime_hint [9] EXPLICIT INTEGER, -- server's lifetime hint for session ticket + * Ticket [10] EXPLICIT OCTET STRING, -- session ticket (clients only) + * Compression_meth [11] EXPLICIT OCTET STRING, -- optional compression method + * SRP_username [ 12 ] EXPLICIT OCTET STRING -- optional SRP username + * } + * Look in ssl/ssl_asn1.c for more details + * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-). + */ +struct ssl_session_st { + int ssl_version; /* what ssl version session info is being + * kept in here? */ + /* only really used in SSLv2 */ + unsigned int key_arg_length; + unsigned char key_arg[SSL_MAX_KEY_ARG_LENGTH]; + int master_key_length; + unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH]; + /* session_id - valid? */ + unsigned int session_id_length; + unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH]; + /* + * this is used to determine whether the session is being reused in the + * appropriate context. It is up to the application to set this, via + * SSL_new + */ + unsigned int sid_ctx_length; + unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; +# ifndef OPENSSL_NO_KRB5 + unsigned int krb5_client_princ_len; + unsigned char krb5_client_princ[SSL_MAX_KRB5_PRINCIPAL_LENGTH]; +# endif /* OPENSSL_NO_KRB5 */ +# ifndef OPENSSL_NO_PSK + char *psk_identity_hint; + char *psk_identity; +# endif + /* + * Used to indicate that session resumption is not allowed. Applications + * can also set this bit for a new session via not_resumable_session_cb + * to disable session caching and tickets. + */ + int not_resumable; + /* The cert is the certificate used to establish this connection */ + struct sess_cert_st /* SESS_CERT */ *sess_cert; + /* + * This is the cert for the other end. On clients, it will be the same as + * sess_cert->peer_key->x509 (the latter is not enough as sess_cert is + * not retained in the external representation of sessions, see + * ssl_asn1.c). + */ + X509 *peer; + /* + * when app_verify_callback accepts a session where the peer's + * certificate is not ok, we must remember the error for session reuse: + */ + long verify_result; /* only for servers */ + int references; + long timeout; + long time; + unsigned int compress_meth; /* Need to lookup the method */ + const SSL_CIPHER *cipher; + unsigned long cipher_id; /* when ASN.1 loaded, this needs to be used + * to load the 'cipher' structure */ + STACK_OF(SSL_CIPHER) *ciphers; /* shared ciphers? */ + CRYPTO_EX_DATA ex_data; /* application specific data */ + /* + * These are used to make removal of session-ids more efficient and to + * implement a maximum cache size. + */ + struct ssl_session_st *prev, *next; +# ifndef OPENSSL_NO_TLSEXT + char *tlsext_hostname; +# ifndef OPENSSL_NO_EC + size_t tlsext_ecpointformatlist_length; + unsigned char *tlsext_ecpointformatlist; /* peer's list */ + size_t tlsext_ellipticcurvelist_length; + unsigned char *tlsext_ellipticcurvelist; /* peer's list */ +# endif /* OPENSSL_NO_EC */ + /* RFC4507 info */ + unsigned char *tlsext_tick; /* Session ticket */ + size_t tlsext_ticklen; /* Session ticket length */ + long tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */ +# endif +# ifndef OPENSSL_NO_SRP + char *srp_username; +# endif +}; + +# endif + +# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x00000001L +# define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x00000002L +/* Allow initial connection to servers that don't support RI */ +# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004L +# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x00000008L +# define SSL_OP_TLSEXT_PADDING 0x00000010L +# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x00000020L +# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040L +# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x00000080L +# define SSL_OP_TLS_D5_BUG 0x00000100L +# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x00000200L + +/* Hasn't done anything since OpenSSL 0.9.7h, retained for compatibility */ +# define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 +/* Refers to ancient SSLREF and SSLv2, retained for compatibility */ +# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 + +/* + * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in + * OpenSSL 0.9.6d. Usually (depending on the application protocol) the + * workaround is not needed. Unfortunately some broken SSL/TLS + * implementations cannot handle it at all, which is why we include it in + * SSL_OP_ALL. + */ +/* added in 0.9.6e */ +# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800L + +/* + * SSL_OP_ALL: various bug workarounds that should be rather harmless. This + * used to be 0x000FFFFFL before 0.9.7. + */ +# define SSL_OP_ALL 0x80000BFFL + +/* DTLS options */ +# define SSL_OP_NO_QUERY_MTU 0x00001000L +/* Turn on Cookie Exchange (on relevant for servers) */ +# define SSL_OP_COOKIE_EXCHANGE 0x00002000L +/* Don't use RFC4507 ticket extension */ +# define SSL_OP_NO_TICKET 0x00004000L +/* Use Cisco's "speshul" version of DTLS_BAD_VER (as client) */ +# define SSL_OP_CISCO_ANYCONNECT 0x00008000L + +/* As server, disallow session resumption on renegotiation */ +# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000L +/* Don't use compression even if supported */ +# define SSL_OP_NO_COMPRESSION 0x00020000L +/* Permit unsafe legacy renegotiation */ +# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000L +/* If set, always create a new key when using tmp_ecdh parameters */ +# define SSL_OP_SINGLE_ECDH_USE 0x00080000L +/* If set, always create a new key when using tmp_dh parameters */ +# define SSL_OP_SINGLE_DH_USE 0x00100000L +/* Does nothing: retained for compatibiity */ +# define SSL_OP_EPHEMERAL_RSA 0x0 +/* + * Set on servers to choose the cipher according to the server's preferences + */ +# define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000L +/* + * If set, a server will allow a client to issue a SSLv3.0 version number as + * latest version supported in the premaster secret, even when TLSv1.0 + * (version 3.1) was announced in the client hello. Normally this is + * forbidden to prevent version rollback attacks. + */ +# define SSL_OP_TLS_ROLLBACK_BUG 0x00800000L + +# define SSL_OP_NO_SSLv2 0x01000000L +# define SSL_OP_NO_SSLv3 0x02000000L +# define SSL_OP_NO_TLSv1 0x04000000L +# define SSL_OP_NO_TLSv1_2 0x08000000L +# define SSL_OP_NO_TLSv1_1 0x10000000L + +# define SSL_OP_NO_DTLSv1 0x04000000L +# define SSL_OP_NO_DTLSv1_2 0x08000000L + +# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|\ + SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2) + +/* + * These next two were never actually used for anything since SSLeay zap so + * we have some more flags. + */ +/* + * The next flag deliberately changes the ciphertest, this is a check for the + * PKCS#1 attack + */ +# define SSL_OP_PKCS1_CHECK_1 0x0 +# define SSL_OP_PKCS1_CHECK_2 0x0 + +# define SSL_OP_NETSCAPE_CA_DN_BUG 0x20000000L +# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x40000000L +/* + * Make server add server-hello extension from early version of cryptopro + * draft, when GOST ciphersuite is negotiated. Required for interoperability + * with CryptoPro CSP 3.x + */ +# define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000L + +/* + * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success + * when just a single record has been written): + */ +# define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001L +/* + * Make it possible to retry SSL_write() with changed buffer location (buffer + * contents must stay the same!); this is not the default to avoid the + * misconception that non-blocking SSL_write() behaves like non-blocking + * write(): + */ +# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002L +/* + * Never bother the application with retries if the transport is blocking: + */ +# define SSL_MODE_AUTO_RETRY 0x00000004L +/* Don't attempt to automatically build certificate chain */ +# define SSL_MODE_NO_AUTO_CHAIN 0x00000008L +/* + * 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). + */ +# define SSL_MODE_RELEASE_BUFFERS 0x00000010L +/* + * Send the current time in the Random fields of the ClientHello and + * ServerHello records for compatibility with hypothetical implementations + * that require it. + */ +# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020L +# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040L +/* + * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications + * that reconnect with a downgraded protocol version; see + * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your + * application attempts a normal handshake. Only use this in explicit + * fallback retries, following the guidance in + * draft-ietf-tls-downgrade-scsv-00. + */ +# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080L + +/* Cert related flags */ +/* + * Many implementations ignore some aspects of the TLS standards such as + * enforcing certifcate chain algorithms. When this is set we enforce them. + */ +# define SSL_CERT_FLAG_TLS_STRICT 0x00000001L + +/* Suite B modes, takes same values as certificate verify flags */ +# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define SSL_CERT_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define SSL_CERT_FLAG_SUITEB_128_LOS 0x30000 + +/* Perform all sorts of protocol violations for testing purposes */ +# define SSL_CERT_FLAG_BROKEN_PROTOCOL 0x10000000 + +/* Flags for building certificate chains */ +/* Treat any existing certificates as untrusted CAs */ +# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED 0x1 +/* Don't include root CA in chain */ +# define SSL_BUILD_CHAIN_FLAG_NO_ROOT 0x2 +/* Just check certificates already there */ +# define SSL_BUILD_CHAIN_FLAG_CHECK 0x4 +/* Ignore verification errors */ +# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR 0x8 +/* Clear verification errors from queue */ +# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR 0x10 + +/* Flags returned by SSL_check_chain */ +/* Certificate can be used with this session */ +# define CERT_PKEY_VALID 0x1 +/* Certificate can also be used for signing */ +# define CERT_PKEY_SIGN 0x2 +/* EE certificate signing algorithm OK */ +# define CERT_PKEY_EE_SIGNATURE 0x10 +/* CA signature algorithms OK */ +# define CERT_PKEY_CA_SIGNATURE 0x20 +/* EE certificate parameters OK */ +# define CERT_PKEY_EE_PARAM 0x40 +/* CA certificate parameters OK */ +# define CERT_PKEY_CA_PARAM 0x80 +/* Signing explicitly allowed as opposed to SHA1 fallback */ +# define CERT_PKEY_EXPLICIT_SIGN 0x100 +/* Client CA issuer names match (always set for server cert) */ +# define CERT_PKEY_ISSUER_NAME 0x200 +/* Cert type matches client types (always set for server cert) */ +# define CERT_PKEY_CERT_TYPE 0x400 +/* Cert chain suitable to Suite B */ +# define CERT_PKEY_SUITEB 0x800 + +# define SSL_CONF_FLAG_CMDLINE 0x1 +# define SSL_CONF_FLAG_FILE 0x2 +# define SSL_CONF_FLAG_CLIENT 0x4 +# define SSL_CONF_FLAG_SERVER 0x8 +# define SSL_CONF_FLAG_SHOW_ERRORS 0x10 +# define SSL_CONF_FLAG_CERTIFICATE 0x20 +/* Configuration value types */ +# define SSL_CONF_TYPE_UNKNOWN 0x0 +# define SSL_CONF_TYPE_STRING 0x1 +# define SSL_CONF_TYPE_FILE 0x2 +# define SSL_CONF_TYPE_DIR 0x3 + +/* + * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they + * cannot be used to clear bits. + */ + +# define SSL_CTX_set_options(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL) +# define SSL_CTX_clear_options(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_OPTIONS,(op),NULL) +# define SSL_CTX_get_options(ctx) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,0,NULL) +# define SSL_set_options(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_OPTIONS,(op),NULL) +# define SSL_clear_options(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_OPTIONS,(op),NULL) +# define SSL_get_options(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_OPTIONS,0,NULL) + +# define SSL_CTX_set_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) +# define SSL_CTX_clear_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_CTX_get_mode(ctx) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL) +# define SSL_clear_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_set_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL) +# define SSL_get_mode(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL) +# define SSL_set_mtu(ssl, mtu) \ + SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL) +# define DTLS_set_link_mtu(ssl, mtu) \ + SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL) +# define DTLS_get_link_min_mtu(ssl) \ + SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL) + +# define SSL_get_secure_renegotiation_support(ssl) \ + SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) + +# ifndef OPENSSL_NO_HEARTBEATS +# define SSL_heartbeat(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_TLS_EXT_SEND_HEARTBEAT,0,NULL) +# endif + +# define SSL_CTX_set_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_set_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_CTX_clear_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) +# define SSL_clear_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) + +void SSL_CTX_set_msg_callback(SSL_CTX *ctx, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +void SSL_set_msg_callback(SSL *ssl, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) +# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) + +# ifndef OPENSSL_NO_SRP + +# ifndef OPENSSL_NO_SSL_INTERN + +typedef struct srp_ctx_st { + /* param for all the callbacks */ + void *SRP_cb_arg; + /* set client Hello login callback */ + int (*TLS_ext_srp_username_callback) (SSL *, int *, void *); + /* set SRP N/g param callback for verification */ + int (*SRP_verify_param_callback) (SSL *, void *); + /* set SRP client passwd callback */ + char *(*SRP_give_srp_client_pwd_callback) (SSL *, void *); + char *login; + BIGNUM *N, *g, *s, *B, *A; + BIGNUM *a, *b, *v; + char *info; + int strength; + unsigned long srp_Mask; +} SRP_CTX; + +# endif + +/* see tls_srp.c */ +int SSL_SRP_CTX_init(SSL *s); +int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); +int SSL_SRP_CTX_free(SSL *ctx); +int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); +int SSL_srp_server_param_with_username(SSL *s, int *ad); +int SRP_generate_server_master_secret(SSL *s, unsigned char *master_key); +int SRP_Calc_A_param(SSL *s); +int SRP_generate_client_master_secret(SSL *s, unsigned char *master_key); + +# endif + +# if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32) +# define SSL_MAX_CERT_LIST_DEFAULT 1024*30 + /* 30k max cert list :-) */ +# else +# define SSL_MAX_CERT_LIST_DEFAULT 1024*100 + /* 100k max cert list :-) */ +# endif + +# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) + +/* + * This callback type is used inside SSL_CTX, SSL, and in the functions that + * set them. It is used to override the generation of SSL/TLS session IDs in + * a server. Return value should be zero on an error, non-zero to proceed. + * Also, callbacks should themselves check if the id they generate is unique + * otherwise the SSL handshake will fail with an error - callbacks can do + * this using the 'ssl' value they're passed by; + * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in + * is set at the maximum size the session ID can be. In SSLv2 this is 16 + * bytes, whereas SSLv3/TLSv1 it is 32 bytes. The callback can alter this + * length to be less if desired, but under SSLv2 session IDs are supposed to + * be fixed at 16 bytes so the id will be padded after the callback returns + * in this case. 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, + unsigned int *id_len); + +typedef struct ssl_comp_st SSL_COMP; + +# ifndef OPENSSL_NO_SSL_INTERN + +struct ssl_comp_st { + int id; + const char *name; +# ifndef OPENSSL_NO_COMP + COMP_METHOD *method; +# else + char *method; +# endif +}; + +DECLARE_STACK_OF(SSL_COMP) +DECLARE_LHASH_OF(SSL_SESSION); + +struct ssl_ctx_st { + const SSL_METHOD *method; + STACK_OF(SSL_CIPHER) *cipher_list; + /* same as above but sorted for lookup */ + STACK_OF(SSL_CIPHER) *cipher_list_by_id; + struct x509_store_st /* X509_STORE */ *cert_store; + LHASH_OF(SSL_SESSION) *sessions; + /* + * Most session-ids that will be cached, default is + * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited. + */ + unsigned long session_cache_size; + struct ssl_session_st *session_cache_head; + struct ssl_session_st *session_cache_tail; + /* + * This can have one of 2 values, ored together, SSL_SESS_CACHE_CLIENT, + * SSL_SESS_CACHE_SERVER, Default is SSL_SESSION_CACHE_SERVER, which + * means only SSL_accept which cache SSL_SESSIONS. + */ + int session_cache_mode; + /* + * If timeout is not 0, it is the default timeout value set when + * SSL_new() is called. This has been put in to make life easier to set + * things up + */ + long session_timeout; + /* + * If this callback is not null, it will be called each time a session id + * is added to the cache. If this function returns 1, it means that the + * callback will do a SSL_SESSION_free() when it has finished using it. + * Otherwise, on 0, it means the callback has finished with it. If + * remove_session_cb is not null, it will be called when a session-id is + * removed from the cache. After the call, OpenSSL will + * SSL_SESSION_free() it. + */ + int (*new_session_cb) (struct ssl_st *ssl, SSL_SESSION *sess); + void (*remove_session_cb) (struct ssl_ctx_st *ctx, SSL_SESSION *sess); + SSL_SESSION *(*get_session_cb) (struct ssl_st *ssl, + unsigned char *data, int len, int *copy); + struct { + int sess_connect; /* SSL new conn - started */ + int sess_connect_renegotiate; /* SSL reneg - requested */ + int sess_connect_good; /* SSL new conne/reneg - finished */ + int sess_accept; /* SSL new accept - started */ + int sess_accept_renegotiate; /* SSL reneg - requested */ + int sess_accept_good; /* SSL accept/reneg - finished */ + int sess_miss; /* session lookup misses */ + int sess_timeout; /* reuse attempt on timeouted session */ + int sess_cache_full; /* session removed due to full cache */ + int sess_hit; /* session reuse actually done */ + int sess_cb_hit; /* session-id that was not in the cache was + * passed back via the callback. This + * indicates that the application is + * supplying session-id's from other + * processes - spooky :-) */ + } stats; + + int references; + + /* if defined, these override the X509_verify_cert() calls */ + int (*app_verify_callback) (X509_STORE_CTX *, void *); + void *app_verify_arg; + /* + * before OpenSSL 0.9.7, 'app_verify_arg' was ignored + * ('app_verify_callback' was called with just one argument) + */ + + /* Default password callback. */ + pem_password_cb *default_passwd_callback; + + /* Default password callback user data. */ + void *default_passwd_callback_userdata; + + /* get client cert callback */ + int (*client_cert_cb) (SSL *ssl, X509 **x509, EVP_PKEY **pkey); + + /* cookie generate callback */ + int (*app_gen_cookie_cb) (SSL *ssl, unsigned char *cookie, + unsigned int *cookie_len); + + /* verify cookie callback */ + int (*app_verify_cookie_cb) (SSL *ssl, unsigned char *cookie, + unsigned int cookie_len); + + CRYPTO_EX_DATA ex_data; + + const EVP_MD *rsa_md5; /* For SSLv2 - name is 'ssl2-md5' */ + const EVP_MD *md5; /* For SSLv3/TLSv1 'ssl3-md5' */ + const EVP_MD *sha1; /* For SSLv3/TLSv1 'ssl3->sha1' */ + + STACK_OF(X509) *extra_certs; + STACK_OF(SSL_COMP) *comp_methods; /* stack of SSL_COMP, SSLv3/TLSv1 */ + + /* Default values used when no per-SSL value is defined follow */ + + /* used if SSL's info_callback is NULL */ + void (*info_callback) (const SSL *ssl, int type, int val); + + /* what we put in client cert requests */ + STACK_OF(X509_NAME) *client_CA; + + /* + * Default values to use in SSL structures follow (these are copied by + * SSL_new) + */ + + unsigned long options; + unsigned long mode; + long max_cert_list; + + struct cert_st /* CERT */ *cert; + int read_ahead; + + /* callback that allows applications to peek at protocol messages */ + void (*msg_callback) (int write_p, int version, int content_type, + const void *buf, size_t len, SSL *ssl, void *arg); + void *msg_callback_arg; + + int verify_mode; + unsigned int sid_ctx_length; + unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; + /* called 'verify_callback' in the SSL */ + int (*default_verify_callback) (int ok, X509_STORE_CTX *ctx); + + /* Default generate session ID callback. */ + GEN_SESSION_CB generate_session_id; + + X509_VERIFY_PARAM *param; + +# if 0 + int purpose; /* Purpose setting */ + int trust; /* Trust setting */ +# endif + + int quiet_shutdown; + + /* + * Maximum amount of data to send in one fragment. actual record size can + * be more than this due to padding and MAC overheads. + */ + unsigned int max_send_fragment; + +# ifndef OPENSSL_NO_ENGINE + /* + * Engine to pass requests for client certs to + */ + ENGINE *client_cert_engine; +# endif + +# ifndef OPENSSL_NO_TLSEXT + /* TLS extensions servername callback */ + int (*tlsext_servername_callback) (SSL *, int *, void *); + void *tlsext_servername_arg; + /* RFC 4507 session ticket keys */ + unsigned char tlsext_tick_key_name[16]; + unsigned char tlsext_tick_hmac_key[16]; + unsigned char tlsext_tick_aes_key[16]; + /* Callback to support customisation of ticket key setting */ + int (*tlsext_ticket_key_cb) (SSL *ssl, + unsigned char *name, unsigned char *iv, + EVP_CIPHER_CTX *ectx, + HMAC_CTX *hctx, int enc); + + /* certificate status request info */ + /* Callback for status request */ + int (*tlsext_status_cb) (SSL *ssl, void *arg); + void *tlsext_status_arg; + + /* draft-rescorla-tls-opaque-prf-input-00.txt information */ + int (*tlsext_opaque_prf_input_callback) (SSL *, void *peerinput, + size_t len, void *arg); + void *tlsext_opaque_prf_input_callback_arg; +# endif + +# ifndef OPENSSL_NO_PSK + char *psk_identity_hint; + 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); + unsigned int (*psk_server_callback) (SSL *ssl, const char *identity, + unsigned char *psk, + unsigned int max_psk_len); +# endif + +# ifndef OPENSSL_NO_BUF_FREELISTS +# define SSL_MAX_BUF_FREELIST_LEN_DEFAULT 32 + unsigned int freelist_max_len; + struct ssl3_buf_freelist_st *wbuf_freelist; + struct ssl3_buf_freelist_st *rbuf_freelist; +# endif +# ifndef OPENSSL_NO_SRP + SRP_CTX srp_ctx; /* ctx for SRP authentication */ +# endif + +# ifndef OPENSSL_NO_TLSEXT + +# ifndef OPENSSL_NO_NEXTPROTONEG + /* Next protocol negotiation information */ + /* (for experimental NPN extension). */ + + /* + * For a server, this contains a callback function by which the set of + * advertised protocols can be provided. + */ + int (*next_protos_advertised_cb) (SSL *s, const unsigned char **buf, + unsigned int *len, void *arg); + void *next_protos_advertised_cb_arg; + /* + * For a client, this contains a callback function that selects the next + * protocol from the list provided by the server. + */ + int (*next_proto_select_cb) (SSL *s, unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, void *arg); + void *next_proto_select_cb_arg; +# endif + /* SRTP profiles we are willing to do from RFC 5764 */ + STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; + + /* + * ALPN information (we are in the process of transitioning from NPN to + * ALPN.) + */ + + /*- + * For a server, this contains a callback function that allows the + * server to select the protocol for the connection. + * out: on successful return, this must point to the raw protocol + * name (without the length prefix). + * outlen: on successful return, this contains the length of |*out|. + * in: points to the client's list of supported protocols in + * wire-format. + * inlen: the length of |in|. + */ + int (*alpn_select_cb) (SSL *s, + const unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, void *arg); + void *alpn_select_cb_arg; + + /* + * For a client, this contains the list of supported protocols in wire + * format. + */ + unsigned char *alpn_client_proto_list; + unsigned alpn_client_proto_list_len; + +# ifndef OPENSSL_NO_EC + /* EC extension values inherited by SSL structure */ + size_t tlsext_ecpointformatlist_length; + unsigned char *tlsext_ecpointformatlist; + size_t tlsext_ellipticcurvelist_length; + unsigned char *tlsext_ellipticcurvelist; +# endif /* OPENSSL_NO_EC */ +# endif +}; + +# endif + +# define SSL_SESS_CACHE_OFF 0x0000 +# define SSL_SESS_CACHE_CLIENT 0x0001 +# define SSL_SESS_CACHE_SERVER 0x0002 +# define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER) +# define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080 +/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */ +# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100 +# define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 +# define SSL_SESS_CACHE_NO_INTERNAL \ + (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) + +LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); +# define SSL_CTX_sess_number(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL) +# define SSL_CTX_sess_connect(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL) +# define SSL_CTX_sess_connect_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL) +# define SSL_CTX_sess_connect_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL) +# define SSL_CTX_sess_accept_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL) +# define SSL_CTX_sess_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL) +# define SSL_CTX_sess_cb_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL) +# define SSL_CTX_sess_misses(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL) +# define SSL_CTX_sess_timeouts(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL) +# define SSL_CTX_sess_cache_full(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL) + +void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, + int (*new_session_cb) (struct ssl_st *ssl, + SSL_SESSION *sess)); +int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + SSL_SESSION *sess); +void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, + void (*remove_session_cb) (struct ssl_ctx_st + *ctx, + 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, + SSL_SESSION *(*get_session_cb) (struct ssl_st + *ssl, + unsigned char + *data, int len, + int *copy)); +SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + 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 (*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, + int (*client_cert_cb) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey)); +int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey); +# ifndef OPENSSL_NO_ENGINE +int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); +# endif +void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, + int (*app_gen_cookie_cb) (SSL *ssl, + unsigned char + *cookie, + unsigned int + *cookie_len)); +void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, + int (*app_verify_cookie_cb) (SSL *ssl, + unsigned char + *cookie, + unsigned int + cookie_len)); +# ifndef OPENSSL_NO_NEXTPROTONEG +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); +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); +void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, + unsigned *len); +# endif + +# ifndef OPENSSL_NO_TLSEXT +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); +# endif + +# define OPENSSL_NPN_UNSUPPORTED 0 +# define OPENSSL_NPN_NEGOTIATED 1 +# define OPENSSL_NPN_NO_OVERLAP 2 + +int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, + unsigned protos_len); +int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, + unsigned protos_len); +void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, + int (*cb) (SSL *ssl, + const unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg), void *arg); +void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, + unsigned *len); + +# ifndef OPENSSL_NO_PSK +/* + * the maximum length of the buffer given to callbacks containing the + * resulting identity/psk + */ +# 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)); +int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); +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 + +# ifndef OPENSSL_NO_TLSEXT +/* Register callbacks to handle custom TLS Extensions for client or server. */ + +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); + +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); + +int SSL_extension_supported(unsigned int ext_type); + +# endif + +# define SSL_NOTHING 1 +# define SSL_WRITING 2 +# define SSL_READING 3 +# define SSL_X509_LOOKUP 4 + +/* 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_MAC_FLAG_READ_MAC_STREAM 1 +# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 + +# ifndef OPENSSL_NO_SSL_INTERN + +struct ssl_st { + /* + * protocol version (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION, + * DTLS1_VERSION) + */ + int version; + /* SSL_ST_CONNECT or SSL_ST_ACCEPT */ + int type; + /* SSLv3 */ + const SSL_METHOD *method; + /* + * There are 2 BIO's even though they are normally both the same. This + * is so data can be read and written to different handlers + */ +# ifndef OPENSSL_NO_BIO + /* used by SSL_read */ + BIO *rbio; + /* used by SSL_write */ + BIO *wbio; + /* used during session-id reuse to concatenate messages */ + BIO *bbio; +# else + /* used by SSL_read */ + char *rbio; + /* used by SSL_write */ + char *wbio; + char *bbio; +# endif + /* + * This holds a variable that indicates what we were doing when a 0 or -1 + * is returned. This is needed for non-blocking IO so we know what + * request needs re-doing when in SSL_accept or SSL_connect + */ + int rwstate; + /* true when we are actually in SSL_accept() or SSL_connect() */ + int in_handshake; + int (*handshake_func) (SSL *); + /* + * Imagine that here's a boolean member "init" that is switched as soon + * as SSL_set_{accept/connect}_state is called for the first time, so + * that "state" and "handshake_func" are properly initialized. But as + * handshake_func is == 0 until then, we use this test instead of an + * "init" member. + */ + /* are we the server side? - mostly used by SSL_clear */ + int server; + /* + * Generate a new session or reuse an old one. + * NB: For servers, the 'new' session may actually be a previously + * cached session or even the previous session unless + * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set + */ + int new_session; + /* don't send shutdown packets */ + int quiet_shutdown; + /* we have shut things down, 0x01 sent, 0x02 for received */ + int shutdown; + /* where we are */ + int state; + /* where we are when reading */ + int rstate; + BUF_MEM *init_buf; /* buffer used during init */ + void *init_msg; /* pointer to handshake message body, set by + * ssl3_get_message() */ + int init_num; /* amount read/written */ + int init_off; /* amount read/written */ + /* used internally to point at a raw packet */ + unsigned char *packet; + unsigned int packet_length; + struct ssl2_state_st *s2; /* SSLv2 variables */ + struct ssl3_state_st *s3; /* SSLv3 variables */ + struct dtls1_state_st *d1; /* DTLSv1 variables */ + int read_ahead; /* Read as many input bytes as possible (for + * non-blocking reads) */ + /* callback that allows applications to peek at protocol messages */ + void (*msg_callback) (int write_p, int version, int content_type, + const void *buf, size_t len, SSL *ssl, void *arg); + void *msg_callback_arg; + int hit; /* reusing a previous session */ + X509_VERIFY_PARAM *param; +# if 0 + int purpose; /* Purpose setting */ + int trust; /* Trust setting */ +# endif + /* crypto */ + STACK_OF(SSL_CIPHER) *cipher_list; + STACK_OF(SSL_CIPHER) *cipher_list_by_id; + /* + * These are the ones being used, the ones in SSL_SESSION are the ones to + * be 'copied' into these ones + */ + int mac_flags; + EVP_CIPHER_CTX *enc_read_ctx; /* cryptographic state */ + EVP_MD_CTX *read_hash; /* used for mac generation */ +# ifndef OPENSSL_NO_COMP + COMP_CTX *expand; /* uncompress */ +# else + char *expand; +# endif + EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */ + EVP_MD_CTX *write_hash; /* used for mac generation */ +# ifndef OPENSSL_NO_COMP + COMP_CTX *compress; /* compression */ +# else + char *compress; +# endif + /* session info */ + /* client cert? */ + /* This is used to hold the server certificate used */ + struct cert_st /* CERT */ *cert; + /* + * the session_id_context is used to ensure sessions are only reused in + * the appropriate context + */ + unsigned int sid_ctx_length; + unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; + /* This can also be in the session once a session is established */ + SSL_SESSION *session; + /* Default generate session ID callback. */ + GEN_SESSION_CB generate_session_id; + /* Used in SSL2 and SSL3 */ + /* + * 0 don't care about verify failure. + * 1 fail if verify fails + */ + int verify_mode; + /* fail if callback returns 0 */ + int (*verify_callback) (int ok, X509_STORE_CTX *ctx); + /* optional informational callback */ + void (*info_callback) (const SSL *ssl, int type, int val); + /* error bytes to be written */ + int error; + /* actual code */ + int error_code; +# ifndef OPENSSL_NO_KRB5 + /* Kerberos 5 context */ + KSSL_CTX *kssl_ctx; +# endif /* OPENSSL_NO_KRB5 */ +# ifndef OPENSSL_NO_PSK + 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); + unsigned int (*psk_server_callback) (SSL *ssl, const char *identity, + unsigned char *psk, + unsigned int max_psk_len); +# endif + SSL_CTX *ctx; + /* + * set this flag to 1 and a sleep(1) is put into all SSL_read() and + * SSL_write() calls, good for nbio debuging :-) + */ + int debug; + /* extra application data */ + long verify_result; + CRYPTO_EX_DATA ex_data; + /* for server side, keep the list of CA_dn we can use */ + STACK_OF(X509_NAME) *client_CA; + int references; + /* protocol behaviour */ + unsigned long options; + /* API behaviour */ + unsigned long mode; + long max_cert_list; + int first_packet; + /* what was passed, used for SSLv3/TLS rollback check */ + int client_version; + unsigned int max_send_fragment; +# ifndef OPENSSL_NO_TLSEXT + /* TLS extension debug callback */ + void (*tlsext_debug_cb) (SSL *s, int client_server, int type, + unsigned char *data, int len, void *arg); + void *tlsext_debug_arg; + char *tlsext_hostname; + /*- + * no further mod of servername + * 0 : call the servername extension callback. + * 1 : prepare 2, allow last ack just after in server callback. + * 2 : don't call servername callback, no ack in server hello + */ + int servername_done; + /* certificate status request info */ + /* Status type or -1 if no status type */ + int tlsext_status_type; + /* Expect OCSP CertificateStatus message */ + int tlsext_status_expected; + /* OCSP status request only */ + STACK_OF(OCSP_RESPID) *tlsext_ocsp_ids; + X509_EXTENSIONS *tlsext_ocsp_exts; + /* OCSP response received or to be sent */ + unsigned char *tlsext_ocsp_resp; + int tlsext_ocsp_resplen; + /* RFC4507 session ticket expected to be received or sent */ + int tlsext_ticket_expected; +# ifndef OPENSSL_NO_EC + size_t tlsext_ecpointformatlist_length; + /* our list */ + unsigned char *tlsext_ecpointformatlist; + size_t tlsext_ellipticcurvelist_length; + /* our list */ + unsigned char *tlsext_ellipticcurvelist; +# endif /* OPENSSL_NO_EC */ + /* + * draft-rescorla-tls-opaque-prf-input-00.txt information to be used for + * handshakes + */ + void *tlsext_opaque_prf_input; + size_t tlsext_opaque_prf_input_len; + /* TLS Session Ticket extension override */ + TLS_SESSION_TICKET_EXT *tlsext_session_ticket; + /* TLS Session Ticket extension callback */ + tls_session_ticket_ext_cb_fn tls_session_ticket_ext_cb; + void *tls_session_ticket_ext_cb_arg; + /* TLS pre-shared secret session resumption */ + tls_session_secret_cb_fn tls_session_secret_cb; + void *tls_session_secret_cb_arg; + SSL_CTX *initial_ctx; /* initial ctx, used to store sessions */ +# ifndef OPENSSL_NO_NEXTPROTONEG + /* + * Next protocol negotiation. For the client, this is the protocol that + * we sent in NextProtocol and is set when handling ServerHello + * extensions. For a server, this is the client's selected_protocol from + * NextProtocol and is set when handling the NextProtocol message, before + * the Finished message. + */ + unsigned char *next_proto_negotiated; + unsigned char next_proto_negotiated_len; +# endif +# define session_ctx initial_ctx + /* What we'll do */ + STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; + /* What's been chosen */ + SRTP_PROTECTION_PROFILE *srtp_profile; + /*- + * Is use of the Heartbeat extension negotiated? + * 0: disabled + * 1: enabled + * 2: enabled, but not allowed to send Requests + */ + unsigned int tlsext_heartbeat; + /* Indicates if a HeartbeatRequest is in flight */ + unsigned int tlsext_hb_pending; + /* HeartbeatRequest sequence number */ + unsigned int tlsext_hb_seq; +# else +# define session_ctx ctx +# endif /* OPENSSL_NO_TLSEXT */ + /*- + * 1 if we are renegotiating. + * 2 if we are a server and are inside a handshake + * (i.e. not just sending a HelloRequest) + */ + int renegotiate; +# ifndef OPENSSL_NO_SRP + /* ctx for SRP authentication */ + SRP_CTX srp_ctx; +# endif +# ifndef OPENSSL_NO_TLSEXT + /* + * For a client, this contains the list of supported protocols in wire + * format. + */ + unsigned char *alpn_client_proto_list; + unsigned alpn_client_proto_list_len; +# endif /* OPENSSL_NO_TLSEXT */ +}; + +# endif + +#ifdef __cplusplus +} +#endif + +# include "ssl2.h" +# include "ssl3.h" +# include "tls1.h" /* This is mostly sslv3 with a few tweaks */ +# include "dtls1.h" /* Datagram TLS */ +# include "ssl23.h" +# include "srtp.h" /* Support for the use_srtp extension */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* compatibility */ +# 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_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)) + +/* + * The following are the possible values for ssl->state are are used to + * indicate where we are up to in the SSL connection establishment. The + * macros that follow are about the only things you should need to use and + * even then, only when using non-blocking IO. It can also be useful to work + * out where you were when the connection failed + */ + +# define SSL_ST_CONNECT 0x1000 +# define SSL_ST_ACCEPT 0x2000 +# define SSL_ST_MASK 0x0FFF +# define SSL_ST_INIT (SSL_ST_CONNECT|SSL_ST_ACCEPT) +# define SSL_ST_BEFORE 0x4000 +# define SSL_ST_OK 0x03 +# define SSL_ST_RENEGOTIATE (0x04|SSL_ST_INIT) +# define SSL_ST_ERR 0x05 + +# define SSL_CB_LOOP 0x01 +# define SSL_CB_EXIT 0x02 +# define SSL_CB_READ 0x04 +# define SSL_CB_WRITE 0x08 +# define SSL_CB_ALERT 0x4000/* used in callback */ +# define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ) +# define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE) +# define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP) +# define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT) +# define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP) +# define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT) +# define SSL_CB_HANDSHAKE_START 0x10 +# define SSL_CB_HANDSHAKE_DONE 0x20 + +/* Is the SSL_connection established? */ +# define SSL_get_state(a) SSL_state(a) +# define SSL_is_init_finished(a) (SSL_state(a) == SSL_ST_OK) +# define SSL_in_init(a) (SSL_state(a)&SSL_ST_INIT) +# define SSL_in_before(a) (SSL_state(a)&SSL_ST_BEFORE) +# define SSL_in_connect_init(a) (SSL_state(a)&SSL_ST_CONNECT) +# define SSL_in_accept_init(a) (SSL_state(a)&SSL_ST_ACCEPT) + +/* + * The following 2 states are kept in ssl->rstate when reads fail, you should + * not need these + */ +# define SSL_ST_READ_HEADER 0xF0 +# define SSL_ST_READ_BODY 0xF1 +# define SSL_ST_READ_DONE 0xF2 + +/*- + * Obtain latest Finished message + * -- that we sent (SSL_get_finished) + * -- that we expected from peer (SSL_get_peer_finished). + * Returns length (0 == no Finished so far), copies up to 'count' bytes. + */ +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 + * '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 OpenSSL_add_ssl_algorithms() SSL_library_init() +# define SSLeay_add_ssl_algorithms() SSL_library_init() + +/* this is for backward compatibility */ +# if 0 /* NEW_SSLEAY */ +# define SSL_CTX_set_default_verify(a,b,c) SSL_CTX_set_verify(a,b,c) +# define SSL_set_pref_cipher(c,n) SSL_set_cipher_list(c,n) +# define SSL_add_session(a,b) SSL_CTX_add_session((a),(b)) +# define SSL_remove_session(a,b) SSL_CTX_remove_session((a),(b)) +# define SSL_flush_sessions(a,b) SSL_CTX_flush_sessions((a),(b)) +# endif +/* More backward compatibility */ +# define SSL_get_cipher(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_cipher_bits(s,np) \ + SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np) +# define SSL_get_cipher_version(s) \ + SSL_CIPHER_get_version(SSL_get_current_cipher(s)) +# define SSL_get_cipher_name(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_time(a) SSL_SESSION_get_time(a) +# define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b)) +# define SSL_get_timeout(a) SSL_SESSION_get_timeout(a) +# define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b)) + +# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id) +# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id) + +DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) +# define SSL_AD_REASON_OFFSET 1000/* offset to get SSL_R_... value + * from SSL_AD_... */ +/* These alert types are for SSLv3 and TLSv1 */ +# define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY +/* fatal */ +# define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE +/* fatal */ +# define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC +# define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED +# define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW +/* fatal */ +# define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE +/* fatal */ +# define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE +/* Not for TLS */ +# define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE +# define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE +# define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE +# define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED +# define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED +# define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN +/* fatal */ +# define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER +/* fatal */ +# define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA +/* fatal */ +# define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED +/* fatal */ +# define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR +# define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR +/* fatal */ +# define SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION +/* fatal */ +# define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION +/* fatal */ +# define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY +/* fatal */ +# 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_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION +# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE +# define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME +# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE +# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE +/* fatal */ +# define SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY +/* fatal */ +# define SSL_AD_INAPPROPRIATE_FALLBACK TLS1_AD_INAPPROPRIATE_FALLBACK +# define SSL_ERROR_NONE 0 +# define SSL_ERROR_SSL 1 +# define SSL_ERROR_WANT_READ 2 +# define SSL_ERROR_WANT_WRITE 3 +# define SSL_ERROR_WANT_X509_LOOKUP 4 +# define SSL_ERROR_SYSCALL 5/* look at error stack/return + * value/errno */ +# define SSL_ERROR_ZERO_RETURN 6 +# define SSL_ERROR_WANT_CONNECT 7 +# define SSL_ERROR_WANT_ACCEPT 8 +# define SSL_CTRL_NEED_TMP_RSA 1 +# define SSL_CTRL_SET_TMP_RSA 2 +# define SSL_CTRL_SET_TMP_DH 3 +# define SSL_CTRL_SET_TMP_ECDH 4 +# define SSL_CTRL_SET_TMP_RSA_CB 5 +# define SSL_CTRL_SET_TMP_DH_CB 6 +# define SSL_CTRL_SET_TMP_ECDH_CB 7 +# define SSL_CTRL_GET_SESSION_REUSED 8 +# define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 +# define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 +# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 +# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12 +# define SSL_CTRL_GET_FLAGS 13 +# define SSL_CTRL_EXTRA_CHAIN_CERT 14 +# define SSL_CTRL_SET_MSG_CALLBACK 15 +# define SSL_CTRL_SET_MSG_CALLBACK_ARG 16 +/* only applies to datagram connections */ +# define SSL_CTRL_SET_MTU 17 +/* Stats */ +# define SSL_CTRL_SESS_NUMBER 20 +# define SSL_CTRL_SESS_CONNECT 21 +# define SSL_CTRL_SESS_CONNECT_GOOD 22 +# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23 +# define SSL_CTRL_SESS_ACCEPT 24 +# define SSL_CTRL_SESS_ACCEPT_GOOD 25 +# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26 +# define SSL_CTRL_SESS_HIT 27 +# define SSL_CTRL_SESS_CB_HIT 28 +# define SSL_CTRL_SESS_MISSES 29 +# define SSL_CTRL_SESS_TIMEOUTS 30 +# define SSL_CTRL_SESS_CACHE_FULL 31 +# define SSL_CTRL_OPTIONS 32 +# define SSL_CTRL_MODE 33 +# define SSL_CTRL_GET_READ_AHEAD 40 +# define SSL_CTRL_SET_READ_AHEAD 41 +# define SSL_CTRL_SET_SESS_CACHE_SIZE 42 +# define SSL_CTRL_GET_SESS_CACHE_SIZE 43 +# define SSL_CTRL_SET_SESS_CACHE_MODE 44 +# define SSL_CTRL_GET_SESS_CACHE_MODE 45 +# define SSL_CTRL_GET_MAX_CERT_LIST 50 +# define SSL_CTRL_SET_MAX_CERT_LIST 51 +# define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52 +/* see tls1.h for macros based on these */ +# ifndef OPENSSL_NO_TLSEXT +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53 +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54 +# define SSL_CTRL_SET_TLSEXT_HOSTNAME 55 +# define SSL_CTRL_SET_TLSEXT_DEBUG_CB 56 +# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 +# define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 +# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 +# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 +# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 +# define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 +# define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 +# define SSL_CTRL_SET_SRP_ARG 78 +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 +# define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 +# define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 +# ifndef OPENSSL_NO_HEARTBEATS +# define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT 85 +# define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING 86 +# define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS 87 +# endif +# endif /* OPENSSL_NO_TLSEXT */ +# define DTLS_CTRL_GET_TIMEOUT 73 +# define DTLS_CTRL_HANDLE_TIMEOUT 74 +# define DTLS_CTRL_LISTEN 75 +# define SSL_CTRL_GET_RI_SUPPORT 76 +# define SSL_CTRL_CLEAR_OPTIONS 77 +# define SSL_CTRL_CLEAR_MODE 78 +# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS 82 +# 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_SET_ECDH_AUTO 94 +# define SSL_CTRL_SET_SIGALGS 97 +# define SSL_CTRL_SET_SIGALGS_LIST 98 +# define SSL_CTRL_CERT_FLAGS 99 +# define SSL_CTRL_CLEAR_CERT_FLAGS 100 +# define SSL_CTRL_SET_CLIENT_SIGALGS 101 +# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST 102 +# define SSL_CTRL_GET_CLIENT_CERT_TYPES 103 +# define SSL_CTRL_SET_CLIENT_CERT_TYPES 104 +# define SSL_CTRL_BUILD_CERT_CHAIN 105 +# 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_RAW_CIPHERLIST 110 +# define SSL_CTRL_GET_EC_POINT_FORMATS 111 +# define SSL_CTRL_GET_CHAIN_CERTS 115 +# define SSL_CTRL_SELECT_CURRENT_CERT 116 +# define SSL_CTRL_SET_CURRENT_CERT 117 +# define SSL_CTRL_CHECK_PROTO_VERSION 119 +# define DTLS_CTRL_SET_LINK_MTU 120 +# define DTLS_CTRL_GET_LINK_MIN_MTU 121 +# 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) +# define DTLSv1_handle_timeout(ssl) \ + SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL) +# define DTLSv1_listen(ssl, peer) \ + SSL_ctrl(ssl,DTLS_CTRL_LISTEN,0, (void *)peer) +# define SSL_session_reused(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_SESSION_REUSED,0,NULL) +# define SSL_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_clear_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_total_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) +# define SSL_CTX_need_tmp_RSA(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL) +# define SSL_CTX_set_tmp_rsa(ctx,rsa) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa) +# define SSL_CTX_set_tmp_dh(ctx,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) +# define SSL_need_tmp_RSA(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_NEED_TMP_RSA,0,NULL) +# define SSL_set_tmp_rsa(ssl,rsa) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa) +# define SSL_set_tmp_dh(ssl,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) +# define SSL_CTX_add_extra_chain_cert(ctx,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) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509) +# 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) +# define SSL_CTX_set1_chain(ctx,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) +# define SSL_CTX_add1_chain_cert(ctx,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) \ + SSL_CTX_set0_chain(ctx,NULL) +# 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) +# 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) +# define SSL_CTX_set1_verify_cert_store(ctx,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) +# define SSL_CTX_set1_chain_cert_store(ctx,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) +# define SSL_set1_chain(ctx,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) +# define SSL_add1_chain_cert(ctx,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) \ + SSL_set0_chain(ctx,NULL) +# 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) +# 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) +# define SSL_set1_verify_cert_store(s,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) +# 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) +# define SSL_CTX_set_ecdh_auto(ctx, onoff) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL) +# define SSL_set_ecdh_auto(s, onoff) \ + SSL_ctrl(s,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL) +# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ + 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) +# define SSL_set1_sigalgs(ctx, slist, slistlen) \ + SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS,clistlen,(int *)slist) +# define SSL_set1_sigalgs_list(ctx, 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) +# define SSL_CTX_set1_client_sigalgs_list(ctx, 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) +# define SSL_set1_client_sigalgs_list(ctx, 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) +# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \ + 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) +# 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_get0_raw_cipherlist(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,(char *)plst) +# define SSL_get0_ec_point_formats(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,(char *)plst) +# ifndef OPENSSL_NO_BIO +BIO_METHOD *BIO_f_ssl(void); +BIO *BIO_new_ssl(SSL_CTX *ctx, int client); +BIO *BIO_new_ssl_connect(SSL_CTX *ctx); +BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); +int BIO_ssl_copy_session_id(BIO *to, BIO *from); +void BIO_ssl_shutdown(BIO *ssl_bio); + +# endif + +int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); +SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); +void SSL_CTX_free(SSL_CTX *); +long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); +long SSL_CTX_get_timeout(const SSL_CTX *ctx); +X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); +void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); +int SSL_want(const SSL *s); +int SSL_clear(SSL *s); + +void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); + +const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); +int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits); +char *SSL_CIPHER_get_version(const SSL_CIPHER *c); +const char *SSL_CIPHER_get_name(const SSL_CIPHER *c); +unsigned long SSL_CIPHER_get_id(const SSL_CIPHER *c); + +int SSL_get_fd(const SSL *s); +int SSL_get_rfd(const SSL *s); +int SSL_get_wfd(const SSL *s); +const char *SSL_get_cipher_list(const SSL *s, int n); +char *SSL_get_shared_ciphers(const SSL *s, char *buf, int len); +int SSL_get_read_ahead(const SSL *s); +int SSL_pending(const SSL *s); +# ifndef OPENSSL_NO_SOCK +int SSL_set_fd(SSL *s, int fd); +int SSL_set_rfd(SSL *s, int fd); +int SSL_set_wfd(SSL *s, int fd); +# endif +# ifndef OPENSSL_NO_BIO +void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); +BIO *SSL_get_rbio(const SSL *s); +BIO *SSL_get_wbio(const SSL *s); +# endif +int SSL_set_cipher_list(SSL *s, const char *str); +void SSL_set_read_ahead(SSL *s, int yes); +int SSL_get_verify_mode(const SSL *s); +int SSL_get_verify_depth(const SSL *s); +int (*SSL_get_verify_callback(const SSL *s)) (int, X509_STORE_CTX *); +void SSL_set_verify(SSL *s, int mode, + int (*callback) (int ok, X509_STORE_CTX *ctx)); +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 +int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +# endif +int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len); +int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); +int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, + long len); +int SSL_use_certificate(SSL *ssl, X509 *x); +int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); + +# ifndef OPENSSL_NO_TLSEXT +/* Set serverinfo data for the current active cert. */ +int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, + size_t serverinfo_length); +# ifndef OPENSSL_NO_STDIO +int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); +# endif /* NO_STDIO */ + +# endif + +# ifndef OPENSSL_NO_STDIO +int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); +int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); +int SSL_use_certificate_file(SSL *ssl, const char *file, int type); +int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); +int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type); +int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type); +/* PEM type */ +int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); +STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *file); +# ifndef OPENSSL_SYS_VMS +/* XXXXX: Better scheme needed! [was: #ifndef MAC_OS_pre_X] */ +# ifndef OPENSSL_SYS_MACINTOSH_CLASSIC +int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *dir); +# endif +# endif + +# endif + +void SSL_load_error_strings(void); +const char *SSL_state_string(const SSL *s); +const char *SSL_rstate_string(const SSL *s); +const char *SSL_state_string_long(const SSL *s); +const char *SSL_rstate_string_long(const SSL *s); +long SSL_SESSION_get_time(const SSL_SESSION *s); +long SSL_SESSION_set_time(SSL_SESSION *s, long t); +long SSL_SESSION_get_timeout(const SSL_SESSION *s); +long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); +void SSL_copy_session_id(SSL *to, const SSL *from); +X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); +int SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +SSL_SESSION *SSL_SESSION_new(void); +const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, + unsigned int *len); +unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); +# ifndef OPENSSL_NO_FP_API +int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); +# endif +# ifndef OPENSSL_NO_BIO +int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); +# endif +void SSL_SESSION_free(SSL_SESSION *ses); +int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); +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); +int SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB); +int SSL_set_generate_session_id(SSL *, GEN_SESSION_CB); +int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, + unsigned int id_len); +SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, + long length); + +# ifdef HEADER_X509_H +X509 *SSL_get_peer_certificate(const SSL *s); +# endif + +STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); + +int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); +int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); +int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx)) (int, + X509_STORE_CTX *); +void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, + int (*callback) (int, X509_STORE_CTX *)); +void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth); +void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, + int (*cb) (X509_STORE_CTX *, void *), + void *arg); +void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), + void *arg); +# ifndef OPENSSL_NO_RSA +int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +# endif +int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, + long len); +int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); +int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, + const unsigned char *d, long len); +int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); +int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, + const unsigned char *d); + +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); + +int SSL_CTX_check_private_key(const SSL_CTX *ctx); +int SSL_check_private_key(const SSL *ctx); + +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_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +int SSL_CTX_set_purpose(SSL_CTX *s, int purpose); +int SSL_set_purpose(SSL *s, int purpose); +int SSL_CTX_set_trust(SSL_CTX *s, int trust); +int SSL_set_trust(SSL *s, int trust); + +int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); +int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); + +X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); +X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); + +# ifndef OPENSSL_NO_SRP +int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); +int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); +int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, + char *(*cb) (SSL *, void *)); +int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, + int (*cb) (SSL *, void *)); +int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, + int (*cb) (SSL *, int *, void *)); +int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); + +int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, + BIGNUM *sa, BIGNUM *v, char *info); +int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, + const char *grp); + +BIGNUM *SSL_get_srp_g(SSL *s); +BIGNUM *SSL_get_srp_N(SSL *s); + +char *SSL_get_srp_username(SSL *s); +char *SSL_get_srp_userinfo(SSL *s); +# endif + +void SSL_certs_clear(SSL *s); +void SSL_free(SSL *ssl); +int SSL_accept(SSL *ssl); +int SSL_connect(SSL *ssl); +int SSL_read(SSL *ssl, void *buf, int num); +int SSL_peek(SSL *ssl, void *buf, int num); +int SSL_write(SSL *ssl, const void *buf, int num); +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)); + +int SSL_get_error(const SSL *s, int ret_code); +const char *SSL_get_version(const SSL *s); + +/* This sets the 'default' SSL version that SSL_new() will create */ +int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); + +# ifndef OPENSSL_NO_SSL2 +const SSL_METHOD *SSLv2_method(void); /* SSLv2 */ +const SSL_METHOD *SSLv2_server_method(void); /* SSLv2 */ +const SSL_METHOD *SSLv2_client_method(void); /* SSLv2 */ +# endif + +# ifndef OPENSSL_NO_SSL3_METHOD +const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ +const SSL_METHOD *SSLv3_server_method(void); /* SSLv3 */ +const SSL_METHOD *SSLv3_client_method(void); /* SSLv3 */ +# endif + +const SSL_METHOD *SSLv23_method(void); /* Negotiate highest available SSL/TLS + * version */ +const SSL_METHOD *SSLv23_server_method(void); /* Negotiate highest available + * SSL/TLS version */ +const SSL_METHOD *SSLv23_client_method(void); /* Negotiate highest available + * SSL/TLS version */ + +const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ +const SSL_METHOD *TLSv1_server_method(void); /* TLSv1.0 */ +const SSL_METHOD *TLSv1_client_method(void); /* TLSv1.0 */ + +const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */ +const SSL_METHOD *TLSv1_1_server_method(void); /* TLSv1.1 */ +const SSL_METHOD *TLSv1_1_client_method(void); /* TLSv1.1 */ + +const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */ +const SSL_METHOD *TLSv1_2_server_method(void); /* TLSv1.2 */ +const SSL_METHOD *TLSv1_2_client_method(void); /* TLSv1.2 */ + +const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ +const SSL_METHOD *DTLSv1_server_method(void); /* DTLSv1.0 */ +const SSL_METHOD *DTLSv1_client_method(void); /* DTLSv1.0 */ + +const SSL_METHOD *DTLSv1_2_method(void); /* DTLSv1.2 */ +const SSL_METHOD *DTLSv1_2_server_method(void); /* DTLSv1.2 */ +const SSL_METHOD *DTLSv1_2_client_method(void); /* DTLSv1.2 */ + +const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ +const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ +const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ + +STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); + +int SSL_do_handshake(SSL *s); +int SSL_renegotiate(SSL *s); +int SSL_renegotiate_abbreviated(SSL *s); +int SSL_renegotiate_pending(SSL *s); +int SSL_shutdown(SSL *s); + +const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx); +const SSL_METHOD *SSL_get_ssl_method(SSL *s); +int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); +const char *SSL_alert_type_string_long(int value); +const char *SSL_alert_type_string(int value); +const char *SSL_alert_desc_string_long(int value); +const char *SSL_alert_desc_string(int value); + +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); +STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); +STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); +int SSL_add_client_CA(SSL *ssl, X509 *x); +int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); + +void SSL_set_connect_state(SSL *s); +void SSL_set_accept_state(SSL *s); + +long SSL_get_default_timeout(const SSL *s); + +int SSL_library_init(void); + +char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); +STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk); + +SSL *SSL_dup(SSL *ssl); + +X509 *SSL_get_certificate(const SSL *ssl); +/* + * EVP_PKEY + */ struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); + +X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); +EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); + +void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); +int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); +void SSL_set_quiet_shutdown(SSL *ssl, int mode); +int SSL_get_quiet_shutdown(const SSL *ssl); +void SSL_set_shutdown(SSL *ssl, int mode); +int SSL_get_shutdown(const SSL *ssl); +int SSL_version(const SSL *ssl); +int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); +int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, + const char *CApath); +# define SSL_get0_session SSL_get_session/* just peek at pointer */ +SSL_SESSION *SSL_get_session(const SSL *ssl); +SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ +SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); +SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx); +void SSL_set_info_callback(SSL *ssl, + void (*cb) (const SSL *ssl, int type, int val)); +void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type, + int val); +int SSL_state(const SSL *ssl); +void SSL_set_state(SSL *ssl, int state); + +void SSL_set_verify_result(SSL *ssl, long v); +long SSL_get_verify_result(const SSL *ssl); + +int SSL_set_ex_data(SSL *ssl, int idx, void *data); +void *SSL_get_ex_data(const SSL *ssl, int idx); +int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); + +int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data); +void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx); +int SSL_SESSION_get_ex_new_index(long argl, void *argp, + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); + +int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data); +void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx); +int SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); + +int SSL_get_ex_data_X509_STORE_CTX_idx(void); + +# define SSL_CTX_sess_set_cache_size(ctx,t) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL) +# define SSL_CTX_sess_get_cache_size(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL) +# define SSL_CTX_set_session_cache_mode(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL) +# define SSL_CTX_get_session_cache_mode(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL) + +# define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx) +# define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m) +# define SSL_CTX_get_read_ahead(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL) +# define SSL_CTX_set_read_ahead(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL) +# define SSL_CTX_get_max_cert_list(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_CTX_set_max_cert_list(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) +# define SSL_get_max_cert_list(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_set_max_cert_list(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) + +# define SSL_CTX_set_max_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) +# define SSL_set_max_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) + + /* NB: the keylength is only applicable when is_export is true */ +# ifndef OPENSSL_NO_RSA +void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx, + RSA *(*cb) (SSL *ssl, int is_export, + int keylength)); + +void SSL_set_tmp_rsa_callback(SSL *ssl, + RSA *(*cb) (SSL *ssl, int is_export, + int keylength)); +# endif +# ifndef OPENSSL_NO_DH +void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +void SSL_set_tmp_dh_callback(SSL *ssl, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +# endif +# ifndef OPENSSL_NO_ECDH +void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx, + EC_KEY *(*ecdh) (SSL *ssl, int is_export, + int keylength)); +void SSL_set_tmp_ecdh_callback(SSL *ssl, + EC_KEY *(*ecdh) (SSL *ssl, int is_export, + int keylength)); +# endif + +# ifndef OPENSSL_NO_COMP +const COMP_METHOD *SSL_get_current_compression(SSL *s); +const COMP_METHOD *SSL_get_current_expansion(SSL *s); +const char *SSL_COMP_get_name(const COMP_METHOD *comp); +STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); +STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) + *meths); +void SSL_COMP_free_compression_methods(void); +int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); +# else +const void *SSL_get_current_compression(SSL *s); +const void *SSL_get_current_expansion(SSL *s); +const char *SSL_COMP_get_name(const void *comp); +void *SSL_COMP_get_compression_methods(void); +int SSL_COMP_add_compression_method(int id, void *cm); +# endif + +const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); + +/* TLS extensions functions */ +int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); + +int SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb, + void *arg); + +/* Pre-shared secret session resumption functions */ +int SSL_set_session_secret_cb(SSL *s, + tls_session_secret_cb_fn tls_session_secret_cb, + void *arg); + +void SSL_set_debug(SSL *s, int debug); +int SSL_cache_hit(SSL *s); +int SSL_is_server(SSL *s); + +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); +unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags); +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); +void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx); + +int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); +int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv); +int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); + +# 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); +const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); +# endif + +# ifndef OPENSSL_NO_UNIT_TEST +const struct openssl_ssl_test_functions *SSL_test_functions(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. + */ +void ERR_load_SSL_strings(void); + +/* Error codes for the SSL functions. */ + +/* Function codes. */ +# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 +# define SSL_F_CLIENT_CERTIFICATE 100 +# define SSL_F_CLIENT_FINISHED 167 +# define SSL_F_CLIENT_HELLO 101 +# define SSL_F_CLIENT_MASTER_KEY 102 +# define SSL_F_D2I_SSL_SESSION 103 +# define SSL_F_DO_DTLS1_WRITE 245 +# define SSL_F_DO_SSL3_WRITE 104 +# define SSL_F_DTLS1_ACCEPT 246 +# define SSL_F_DTLS1_ADD_CERT_TO_BUF 295 +# define SSL_F_DTLS1_BUFFER_RECORD 247 +# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 316 +# define SSL_F_DTLS1_CLIENT_HELLO 248 +# define SSL_F_DTLS1_CONNECT 249 +# define SSL_F_DTLS1_ENC 250 +# define SSL_F_DTLS1_GET_HELLO_VERIFY 251 +# define SSL_F_DTLS1_GET_MESSAGE 252 +# define SSL_F_DTLS1_GET_MESSAGE_FRAGMENT 253 +# define SSL_F_DTLS1_GET_RECORD 254 +# define SSL_F_DTLS1_HANDLE_TIMEOUT 297 +# define SSL_F_DTLS1_HEARTBEAT 305 +# define SSL_F_DTLS1_OUTPUT_CERT_CHAIN 255 +# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 +# define SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE 256 +# define SSL_F_DTLS1_PROCESS_RECORD 257 +# define SSL_F_DTLS1_READ_BYTES 258 +# define SSL_F_DTLS1_READ_FAILED 259 +# define SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST 260 +# define SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE 261 +# define SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE 262 +# define SSL_F_DTLS1_SEND_CLIENT_VERIFY 263 +# define SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST 264 +# define SSL_F_DTLS1_SEND_SERVER_CERTIFICATE 265 +# define SSL_F_DTLS1_SEND_SERVER_HELLO 266 +# define SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE 267 +# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 +# define SSL_F_GET_CLIENT_FINISHED 105 +# define SSL_F_GET_CLIENT_HELLO 106 +# define SSL_F_GET_CLIENT_MASTER_KEY 107 +# define SSL_F_GET_SERVER_FINISHED 108 +# define SSL_F_GET_SERVER_HELLO 109 +# define SSL_F_GET_SERVER_STATIC_DH_KEY 340 +# define SSL_F_GET_SERVER_VERIFY 110 +# define SSL_F_I2D_SSL_SESSION 111 +# define SSL_F_READ_N 112 +# define SSL_F_REQUEST_CERTIFICATE 113 +# define SSL_F_SERVER_FINISH 239 +# define SSL_F_SERVER_HELLO 114 +# define SSL_F_SERVER_VERIFY 240 +# define SSL_F_SSL23_ACCEPT 115 +# define SSL_F_SSL23_CLIENT_HELLO 116 +# define SSL_F_SSL23_CONNECT 117 +# define SSL_F_SSL23_GET_CLIENT_HELLO 118 +# define SSL_F_SSL23_GET_SERVER_HELLO 119 +# define SSL_F_SSL23_PEEK 237 +# define SSL_F_SSL23_READ 120 +# define SSL_F_SSL23_WRITE 121 +# define SSL_F_SSL2_ACCEPT 122 +# define SSL_F_SSL2_CONNECT 123 +# define SSL_F_SSL2_ENC_INIT 124 +# define SSL_F_SSL2_GENERATE_KEY_MATERIAL 241 +# define SSL_F_SSL2_PEEK 234 +# define SSL_F_SSL2_READ 125 +# define SSL_F_SSL2_READ_INTERNAL 236 +# define SSL_F_SSL2_SET_CERTIFICATE 126 +# define SSL_F_SSL2_WRITE 127 +# define SSL_F_SSL3_ACCEPT 128 +# define SSL_F_SSL3_ADD_CERT_TO_BUF 296 +# define SSL_F_SSL3_CALLBACK_CTRL 233 +# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 +# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 +# define SSL_F_SSL3_CHECK_CLIENT_HELLO 304 +# define SSL_F_SSL3_CHECK_FINISHED 339 +# define SSL_F_SSL3_CLIENT_HELLO 131 +# define SSL_F_SSL3_CONNECT 132 +# 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 134 +# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 +# define SSL_F_SSL3_GET_CERTIFICATE_REQUEST 135 +# define SSL_F_SSL3_GET_CERT_STATUS 289 +# define SSL_F_SSL3_GET_CERT_VERIFY 136 +# define SSL_F_SSL3_GET_CLIENT_CERTIFICATE 137 +# define SSL_F_SSL3_GET_CLIENT_HELLO 138 +# define SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE 139 +# define SSL_F_SSL3_GET_FINISHED 140 +# define SSL_F_SSL3_GET_KEY_EXCHANGE 141 +# define SSL_F_SSL3_GET_MESSAGE 142 +# define SSL_F_SSL3_GET_NEW_SESSION_TICKET 283 +# define SSL_F_SSL3_GET_NEXT_PROTO 306 +# define SSL_F_SSL3_GET_RECORD 143 +# define SSL_F_SSL3_GET_SERVER_CERTIFICATE 144 +# define SSL_F_SSL3_GET_SERVER_DONE 145 +# define SSL_F_SSL3_GET_SERVER_HELLO 146 +# define SSL_F_SSL3_HANDSHAKE_MAC 285 +# define SSL_F_SSL3_NEW_SESSION_TICKET 287 +# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 +# define SSL_F_SSL3_PEEK 235 +# define SSL_F_SSL3_READ_BYTES 148 +# define SSL_F_SSL3_READ_N 149 +# define SSL_F_SSL3_SEND_CERTIFICATE_REQUEST 150 +# define SSL_F_SSL3_SEND_CLIENT_CERTIFICATE 151 +# define SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE 152 +# define SSL_F_SSL3_SEND_CLIENT_VERIFY 153 +# define SSL_F_SSL3_SEND_SERVER_CERTIFICATE 154 +# define SSL_F_SSL3_SEND_SERVER_HELLO 242 +# define SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE 155 +# 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 318 +# 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_DUP 221 +# define SSL_F_SSL_CERT_INST 222 +# define SSL_F_SSL_CERT_INSTANTIATE 214 +# define SSL_F_SSL_CERT_NEW 162 +# 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_MAKE_PROFILES 309 +# define SSL_F_SSL_CTX_NEW 169 +# 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_PURPOSE 226 +# 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_TRUST 229 +# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE 220 +# 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_DO_HANDSHAKE 180 +# 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_SERVER_SEND_CERT 182 +# define SSL_F_SSL_GET_SERVER_SEND_PKEY 317 +# 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_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_PREPARE_CLIENTHELLO_TLSEXT 281 +# define SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT 282 +# define SSL_F_SSL_READ 223 +# define SSL_F_SSL_RSA_PRIVATE_DECRYPT 187 +# define SSL_F_SSL_RSA_PUBLIC_ENCRYPT 188 +# 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_CONTEXT 312 +# define SSL_F_SSL_SESS_CERT_NEW 225 +# define SSL_F_SSL_SET_CERT 191 +# define SSL_F_SSL_SET_CIPHER_LIST 271 +# define SSL_F_SSL_SET_FD 192 +# define SSL_F_SSL_SET_PKEY 193 +# define SSL_F_SSL_SET_PURPOSE 227 +# 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_TRUST 228 +# 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_UNDEFINED_CONST_FUNCTION 243 +# 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_VERIFY_CERT_CHAIN 207 +# define SSL_F_SSL_WRITE 208 +# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 +# define SSL_F_TLS1_CERT_VERIFY_MAC 286 +# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 +# define SSL_F_TLS1_CHECK_SERVERHELLO_TLSEXT 274 +# define SSL_F_TLS1_ENC 210 +# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 +# define SSL_F_TLS1_GET_CURVELIST 338 +# define SSL_F_TLS1_HEARTBEAT 315 +# define SSL_F_TLS1_PREPARE_CLIENTHELLO_TLSEXT 275 +# define SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT 276 +# 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_WRITE_PENDING 212 + +/* Reason codes. */ +# define SSL_R_APP_DATA_IN_HANDSHAKE 100 +# define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 +# define SSL_R_BAD_ALERT_RECORD 101 +# define SSL_R_BAD_AUTHENTICATION_TYPE 102 +# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 +# define SSL_R_BAD_CHECKSUM 104 +# 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_G_LENGTH 108 +# define SSL_R_BAD_DH_PUB_KEY_LENGTH 109 +# define SSL_R_BAD_DH_P_LENGTH 110 +# define SSL_R_BAD_DIGEST_LENGTH 111 +# define SSL_R_BAD_DSA_SIGNATURE 112 +# define SSL_R_BAD_ECC_CERT 304 +# define SSL_R_BAD_ECDSA_SIGNATURE 305 +# 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_MAC_DECODE 113 +# define SSL_R_BAD_MAC_LENGTH 333 +# define SSL_R_BAD_MESSAGE_TYPE 114 +# define SSL_R_BAD_PACKET_LENGTH 115 +# define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 +# define SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH 316 +# define SSL_R_BAD_RESPONSE_ARGUMENT 117 +# define SSL_R_BAD_RSA_DECRYPT 118 +# define SSL_R_BAD_RSA_ENCRYPT 119 +# define SSL_R_BAD_RSA_E_LENGTH 120 +# define SSL_R_BAD_RSA_MODULUS_LENGTH 121 +# define SSL_R_BAD_RSA_SIGNATURE 122 +# define SSL_R_BAD_SIGNATURE 123 +# define SSL_R_BAD_SRP_A_LENGTH 347 +# define SSL_R_BAD_SRP_B_LENGTH 348 +# define SSL_R_BAD_SRP_G_LENGTH 349 +# define SSL_R_BAD_SRP_N_LENGTH 350 +# define SSL_R_BAD_SRP_PARAMETERS 371 +# define SSL_R_BAD_SRP_S_LENGTH 351 +# 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_SSL_SESSION_ID_LENGTH 125 +# define SSL_R_BAD_STATE 126 +# 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_DN_TOO_LONG 132 +# 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_CHALLENGE_IS_DIFFERENT 136 +# define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 +# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 +# define SSL_R_CIPHER_TABLE_SRC_ERROR 139 +# 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_ID_IS_DIFFERENT 143 +# define SSL_R_CONNECTION_TYPE_NOT_SET 144 +# define SSL_R_COOKIE_MISMATCH 308 +# 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 372 +# 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_KEY_AGREEMENT 317 +# define SSL_R_ECC_CERT_NOT_FOR_SIGNING 318 +# define SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE 322 +# define SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE 323 +# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374 +# define SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER 310 +# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354 +# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 +# define SSL_R_ERROR_GENERATING_TMP_RSA_KEY 282 +# define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 +# define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 +# define SSL_R_EXTRA_DATA_IN_MESSAGE 153 +# define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 +# define SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS 355 +# define SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION 356 +# define SSL_R_HTTPS_PROXY_REQUEST 155 +# define SSL_R_HTTP_REQUEST 156 +# define SSL_R_ILLEGAL_PADDING 283 +# define SSL_R_ILLEGAL_SUITEB_DIGEST 380 +# define SSL_R_INAPPROPRIATE_FALLBACK 373 +# define SSL_R_INCONSISTENT_COMPRESSION 340 +# define SSL_R_INVALID_CHALLENGE_LENGTH 158 +# define SSL_R_INVALID_COMMAND 280 +# define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 +# define SSL_R_INVALID_NULL_CMD_NAME 385 +# define SSL_R_INVALID_PURPOSE 278 +# 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_INVALID_TRUST 279 +# define SSL_R_KEY_ARG_TOO_LONG 284 +# define SSL_R_KRB5 285 +# define SSL_R_KRB5_C_CC_PRINC 286 +# define SSL_R_KRB5_C_GET_CRED 287 +# define SSL_R_KRB5_C_INIT 288 +# define SSL_R_KRB5_C_MK_REQ 289 +# define SSL_R_KRB5_S_BAD_TICKET 290 +# define SSL_R_KRB5_S_INIT 291 +# define SSL_R_KRB5_S_RD_REQ 292 +# define SSL_R_KRB5_S_TKT_EXPIRED 293 +# define SSL_R_KRB5_S_TKT_NYV 294 +# define SSL_R_KRB5_S_TKT_SKEW 295 +# define SSL_R_LENGTH_MISMATCH 159 +# define SSL_R_LENGTH_TOO_SHORT 160 +# define SSL_R_LIBRARY_BUG 274 +# define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 +# define SSL_R_MESSAGE_TOO_LONG 296 +# define SSL_R_MISSING_DH_DSA_CERT 162 +# define SSL_R_MISSING_DH_KEY 163 +# define SSL_R_MISSING_DH_RSA_CERT 164 +# define SSL_R_MISSING_DSA_SIGNING_CERT 165 +# define SSL_R_MISSING_ECDH_CERT 382 +# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 +# define SSL_R_MISSING_EXPORT_TMP_DH_KEY 166 +# define SSL_R_MISSING_EXPORT_TMP_RSA_KEY 167 +# 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_MISSING_TMP_RSA_KEY 172 +# define SSL_R_MISSING_TMP_RSA_PKEY 173 +# define SSL_R_MISSING_VERIFY_MESSAGE 174 +# define SSL_R_MULTIPLE_SGC_RESTARTS 346 +# define SSL_R_NON_SSLV2_INITIAL_PACKET 175 +# define SSL_R_NO_CERTIFICATES_RETURNED 176 +# define SSL_R_NO_CERTIFICATE_ASSIGNED 177 +# define SSL_R_NO_CERTIFICATE_RETURNED 178 +# define SSL_R_NO_CERTIFICATE_SET 179 +# define SSL_R_NO_CERTIFICATE_SPECIFIED 180 +# define SSL_R_NO_CIPHERS_AVAILABLE 181 +# define SSL_R_NO_CIPHERS_PASSED 182 +# define SSL_R_NO_CIPHERS_SPECIFIED 183 +# define SSL_R_NO_CIPHER_LIST 184 +# define SSL_R_NO_CIPHER_MATCH 185 +# define SSL_R_NO_CLIENT_CERT_METHOD 331 +# define SSL_R_NO_CLIENT_CERT_RECEIVED 186 +# 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_PRIVATEKEY 189 +# define SSL_R_NO_PRIVATE_KEY_ASSIGNED 190 +# define SSL_R_NO_PROTOCOLS_AVAILABLE 191 +# define SSL_R_NO_PUBLICKEY 192 +# 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_SIGATURE_ALGORITHMS 376 +# define SSL_R_NO_SRTP_PROFILES 359 +# define SSL_R_NO_VERIFY_CALLBACK 194 +# 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_ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE 387 +# define SSL_R_ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE 379 +# define SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE 297 +# define SSL_R_OPAQUE_PRF_INPUT_TOO_LONG 327 +# 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_PEER_ERROR 200 +# define SSL_R_PEER_ERROR_CERTIFICATE 201 +# define SSL_R_PEER_ERROR_NO_CERTIFICATE 202 +# define SSL_R_PEER_ERROR_NO_CIPHER 203 +# define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE 204 +# define SSL_R_PEM_NAME_BAD_PREFIX 391 +# define SSL_R_PEM_NAME_TOO_SHORT 392 +# define SSL_R_PRE_MAC_LENGTH_TOO_LONG 205 +# define SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS 206 +# 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_PUBLIC_KEY_ENCRYPT_ERROR 208 +# define SSL_R_PUBLIC_KEY_IS_NOT_RSA 209 +# define SSL_R_PUBLIC_KEY_NOT_RSA 210 +# define SSL_R_READ_BIO_NOT_SET 211 +# define SSL_R_READ_TIMEOUT_EXPIRED 312 +# define SSL_R_READ_WRONG_PACKET_TYPE 212 +# define SSL_R_RECORD_LENGTH_MISMATCH 213 +# define SSL_R_RECORD_TOO_LARGE 214 +# 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_COMPRESSSION_ALGORITHM_MISSING 342 +# define SSL_R_REUSE_CERT_LENGTH_NOT_ZERO 216 +# define SSL_R_REUSE_CERT_TYPE_NOT_ZERO 217 +# define SSL_R_REUSE_CIPHER_LIST_NOT_ZERO 218 +# define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345 +# define SSL_R_SERVERHELLO_TLSEXT 275 +# define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277 +# define SSL_R_SHORT_READ 219 +# 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_SSL23_DOING_SESSION_ID_REUSE 221 +# define SSL_R_SSL2_CONNECTION_ID_TOO_LONG 299 +# define SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT 321 +# 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_SSL3_SESSION_ID_TOO_SHORT 222 +# 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_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_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_IS_DIFFERENT 231 +# 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_CLIENT_CERT_REQ_WITH_ANON_CIPHER 232 +# 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_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST 233 +# define SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG 234 +# define SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER 235 +# define SSL_R_UNABLE_TO_DECODE_DH_CERTS 236 +# define SSL_R_UNABLE_TO_DECODE_ECDH_CERTS 313 +# define SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY 237 +# define SSL_R_UNABLE_TO_FIND_DH_PARAMETERS 238 +# define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 314 +# define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 239 +# define SSL_R_UNABLE_TO_FIND_SSL_METHOD 240 +# define SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES 241 +# 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_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_REMOTE_ERROR_TYPE 253 +# 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_CIPHER 256 +# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 +# define SSL_R_UNSUPPORTED_DIGEST_TYPE 326 +# 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_WRITE_BIO_NOT_SET 260 +# define SSL_R_WRONG_CERTIFICATE_TYPE 383 +# define SSL_R_WRONG_CIPHER_RETURNED 261 +# define SSL_R_WRONG_CURVE 378 +# define SSL_R_WRONG_MESSAGE_TYPE 262 +# define SSL_R_WRONG_NUMBER_OF_KEY_BITS 263 +# 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 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/ssl2.h b/Sources/OpenSSL/include/openssl/ssl2.h new file mode 100644 index 0000000000..03c7dd8cac --- /dev/null +++ b/Sources/OpenSSL/include/openssl/ssl2.h @@ -0,0 +1,265 @@ +/* ssl/ssl2.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_SSL2_H +# define HEADER_SSL2_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Protocol Version Codes */ +# define SSL2_VERSION 0x0002 +# define SSL2_VERSION_MAJOR 0x00 +# define SSL2_VERSION_MINOR 0x02 +/* #define SSL2_CLIENT_VERSION 0x0002 */ +/* #define SSL2_SERVER_VERSION 0x0002 */ + +/* Protocol Message Codes */ +# define SSL2_MT_ERROR 0 +# define SSL2_MT_CLIENT_HELLO 1 +# define SSL2_MT_CLIENT_MASTER_KEY 2 +# define SSL2_MT_CLIENT_FINISHED 3 +# define SSL2_MT_SERVER_HELLO 4 +# define SSL2_MT_SERVER_VERIFY 5 +# define SSL2_MT_SERVER_FINISHED 6 +# define SSL2_MT_REQUEST_CERTIFICATE 7 +# define SSL2_MT_CLIENT_CERTIFICATE 8 + +/* Error Message Codes */ +# define SSL2_PE_UNDEFINED_ERROR 0x0000 +# define SSL2_PE_NO_CIPHER 0x0001 +# define SSL2_PE_NO_CERTIFICATE 0x0002 +# define SSL2_PE_BAD_CERTIFICATE 0x0004 +# define SSL2_PE_UNSUPPORTED_CERTIFICATE_TYPE 0x0006 + +/* Cipher Kind Values */ +# define SSL2_CK_NULL_WITH_MD5 0x02000000/* v3 */ +# define SSL2_CK_RC4_128_WITH_MD5 0x02010080 +# define SSL2_CK_RC4_128_EXPORT40_WITH_MD5 0x02020080 +# define SSL2_CK_RC2_128_CBC_WITH_MD5 0x02030080 +# define SSL2_CK_RC2_128_CBC_EXPORT40_WITH_MD5 0x02040080 +# define SSL2_CK_IDEA_128_CBC_WITH_MD5 0x02050080 +# define SSL2_CK_DES_64_CBC_WITH_MD5 0x02060040 +# define SSL2_CK_DES_64_CBC_WITH_SHA 0x02060140/* v3 */ +# define SSL2_CK_DES_192_EDE3_CBC_WITH_MD5 0x020700c0 +# define SSL2_CK_DES_192_EDE3_CBC_WITH_SHA 0x020701c0/* v3 */ +# define SSL2_CK_RC4_64_WITH_MD5 0x02080080/* MS hack */ + +# define SSL2_CK_DES_64_CFB64_WITH_MD5_1 0x02ff0800/* SSLeay */ +# define SSL2_CK_NULL 0x02ff0810/* SSLeay */ + +# define SSL2_TXT_DES_64_CFB64_WITH_MD5_1 "DES-CFB-M1" +# define SSL2_TXT_NULL_WITH_MD5 "NULL-MD5" +# define SSL2_TXT_RC4_128_WITH_MD5 "RC4-MD5" +# define SSL2_TXT_RC4_128_EXPORT40_WITH_MD5 "EXP-RC4-MD5" +# define SSL2_TXT_RC2_128_CBC_WITH_MD5 "RC2-CBC-MD5" +# define SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 "EXP-RC2-CBC-MD5" +# define SSL2_TXT_IDEA_128_CBC_WITH_MD5 "IDEA-CBC-MD5" +# define SSL2_TXT_DES_64_CBC_WITH_MD5 "DES-CBC-MD5" +# define SSL2_TXT_DES_64_CBC_WITH_SHA "DES-CBC-SHA" +# define SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5 "DES-CBC3-MD5" +# define SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA "DES-CBC3-SHA" +# define SSL2_TXT_RC4_64_WITH_MD5 "RC4-64-MD5" + +# define SSL2_TXT_NULL "NULL" + +/* Flags for the SSL_CIPHER.algorithm2 field */ +# define SSL2_CF_5_BYTE_ENC 0x01 +# define SSL2_CF_8_BYTE_ENC 0x02 + +/* Certificate Type Codes */ +# define SSL2_CT_X509_CERTIFICATE 0x01 + +/* Authentication Type Code */ +# define SSL2_AT_MD5_WITH_RSA_ENCRYPTION 0x01 + +# define SSL2_MAX_SSL_SESSION_ID_LENGTH 32 + +/* Upper/Lower Bounds */ +# define SSL2_MAX_MASTER_KEY_LENGTH_IN_BITS 256 +# ifdef OPENSSL_SYS_MPE +# define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER 29998u +# else +# define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER 32767u + /* 2^15-1 */ +# endif +# define SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER 16383/* 2^14-1 */ + +# define SSL2_CHALLENGE_LENGTH 16 +/* + * #define SSL2_CHALLENGE_LENGTH 32 + */ +# define SSL2_MIN_CHALLENGE_LENGTH 16 +# define SSL2_MAX_CHALLENGE_LENGTH 32 +# define SSL2_CONNECTION_ID_LENGTH 16 +# define SSL2_MAX_CONNECTION_ID_LENGTH 16 +# define SSL2_SSL_SESSION_ID_LENGTH 16 +# define SSL2_MAX_CERT_CHALLENGE_LENGTH 32 +# define SSL2_MIN_CERT_CHALLENGE_LENGTH 16 +# define SSL2_MAX_KEY_MATERIAL_LENGTH 24 + +# ifndef HEADER_SSL_LOCL_H +# define CERT char +# endif + +# ifndef OPENSSL_NO_SSL_INTERN + +typedef struct ssl2_state_st { + int three_byte_header; + int clear_text; /* clear text */ + int escape; /* not used in SSLv2 */ + int ssl2_rollback; /* used if SSLv23 rolled back to SSLv2 */ + /* + * non-blocking io info, used to make sure the same args were passwd + */ + unsigned int wnum; /* number of bytes sent so far */ + int wpend_tot; + const unsigned char *wpend_buf; + int wpend_off; /* offset to data to write */ + int wpend_len; /* number of bytes passwd to write */ + int wpend_ret; /* number of bytes to return to caller */ + /* buffer raw data */ + int rbuf_left; + int rbuf_offs; + unsigned char *rbuf; + unsigned char *wbuf; + unsigned char *write_ptr; /* used to point to the start due to 2/3 byte + * header. */ + unsigned int padding; + unsigned int rlength; /* passed to ssl2_enc */ + int ract_data_length; /* Set when things are encrypted. */ + unsigned int wlength; /* passed to ssl2_enc */ + int wact_data_length; /* Set when things are decrypted. */ + unsigned char *ract_data; + unsigned char *wact_data; + unsigned char *mac_data; + unsigned char *read_key; + unsigned char *write_key; + /* Stuff specifically to do with this SSL session */ + unsigned int challenge_length; + unsigned char challenge[SSL2_MAX_CHALLENGE_LENGTH]; + unsigned int conn_id_length; + unsigned char conn_id[SSL2_MAX_CONNECTION_ID_LENGTH]; + unsigned int key_material_length; + unsigned char key_material[SSL2_MAX_KEY_MATERIAL_LENGTH * 2]; + unsigned long read_sequence; + unsigned long write_sequence; + struct { + unsigned int conn_id_length; + unsigned int cert_type; + unsigned int cert_length; + unsigned int csl; + unsigned int clear; + unsigned int enc; + unsigned char ccl[SSL2_MAX_CERT_CHALLENGE_LENGTH]; + unsigned int cipher_spec_length; + unsigned int session_id_length; + unsigned int clen; + unsigned int rlen; + } tmp; +} SSL2_STATE; + +# endif + +/* SSLv2 */ +/* client */ +# define SSL2_ST_SEND_CLIENT_HELLO_A (0x10|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_HELLO_B (0x11|SSL_ST_CONNECT) +# define SSL2_ST_GET_SERVER_HELLO_A (0x20|SSL_ST_CONNECT) +# define SSL2_ST_GET_SERVER_HELLO_B (0x21|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_MASTER_KEY_A (0x30|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_MASTER_KEY_B (0x31|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_FINISHED_A (0x40|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_FINISHED_B (0x41|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_CERTIFICATE_A (0x50|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_CERTIFICATE_B (0x51|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_CERTIFICATE_C (0x52|SSL_ST_CONNECT) +# define SSL2_ST_SEND_CLIENT_CERTIFICATE_D (0x53|SSL_ST_CONNECT) +# define SSL2_ST_GET_SERVER_VERIFY_A (0x60|SSL_ST_CONNECT) +# define SSL2_ST_GET_SERVER_VERIFY_B (0x61|SSL_ST_CONNECT) +# define SSL2_ST_GET_SERVER_FINISHED_A (0x70|SSL_ST_CONNECT) +# define SSL2_ST_GET_SERVER_FINISHED_B (0x71|SSL_ST_CONNECT) +# define SSL2_ST_CLIENT_START_ENCRYPTION (0x80|SSL_ST_CONNECT) +# define SSL2_ST_X509_GET_CLIENT_CERTIFICATE (0x90|SSL_ST_CONNECT) +/* server */ +# define SSL2_ST_GET_CLIENT_HELLO_A (0x10|SSL_ST_ACCEPT) +# define SSL2_ST_GET_CLIENT_HELLO_B (0x11|SSL_ST_ACCEPT) +# define SSL2_ST_GET_CLIENT_HELLO_C (0x12|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_SERVER_HELLO_A (0x20|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_SERVER_HELLO_B (0x21|SSL_ST_ACCEPT) +# define SSL2_ST_GET_CLIENT_MASTER_KEY_A (0x30|SSL_ST_ACCEPT) +# define SSL2_ST_GET_CLIENT_MASTER_KEY_B (0x31|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_SERVER_VERIFY_A (0x40|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_SERVER_VERIFY_B (0x41|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_SERVER_VERIFY_C (0x42|SSL_ST_ACCEPT) +# define SSL2_ST_GET_CLIENT_FINISHED_A (0x50|SSL_ST_ACCEPT) +# define SSL2_ST_GET_CLIENT_FINISHED_B (0x51|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_SERVER_FINISHED_A (0x60|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_SERVER_FINISHED_B (0x61|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_REQUEST_CERTIFICATE_A (0x70|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_REQUEST_CERTIFICATE_B (0x71|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_REQUEST_CERTIFICATE_C (0x72|SSL_ST_ACCEPT) +# define SSL2_ST_SEND_REQUEST_CERTIFICATE_D (0x73|SSL_ST_ACCEPT) +# define SSL2_ST_SERVER_START_ENCRYPTION (0x80|SSL_ST_ACCEPT) +# define SSL2_ST_X509_GET_SERVER_CERTIFICATE (0x90|SSL_ST_ACCEPT) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/ssl23.h b/Sources/OpenSSL/include/openssl/ssl23.h new file mode 100644 index 0000000000..9de4685af9 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/ssl23.h @@ -0,0 +1,84 @@ +/* ssl/ssl23.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_SSL23_H +# define HEADER_SSL23_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * client + */ +/* write to server */ +# define SSL23_ST_CW_CLNT_HELLO_A (0x210|SSL_ST_CONNECT) +# define SSL23_ST_CW_CLNT_HELLO_B (0x211|SSL_ST_CONNECT) +/* read from server */ +# define SSL23_ST_CR_SRVR_HELLO_A (0x220|SSL_ST_CONNECT) +# define SSL23_ST_CR_SRVR_HELLO_B (0x221|SSL_ST_CONNECT) + +/* server */ +/* read from client */ +# define SSL23_ST_SR_CLNT_HELLO_A (0x210|SSL_ST_ACCEPT) +# define SSL23_ST_SR_CLNT_HELLO_B (0x211|SSL_ST_ACCEPT) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/ssl3.h b/Sources/OpenSSL/include/openssl/ssl3.h new file mode 100644 index 0000000000..328f72cd75 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/ssl3.h @@ -0,0 +1,774 @@ +/* ssl/ssl3.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +/* ==================================================================== + * 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 + +# ifndef OPENSSL_NO_COMP +# include "comp.h" +# endif +# include "buffer.h" +# include "evp.h" +# include "ssl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Signalling cipher suite value from RFC 5746 + * (TLS_EMPTY_RENEGOTIATION_INFO_SCSV) + */ +# define SSL3_CK_SCSV 0x030000FF + +/* + * Signalling cipher suite value from draft-ietf-tls-downgrade-scsv-00 + * (TLS_FALLBACK_SCSV) + */ +# define SSL3_CK_FALLBACK_SCSV 0x03005600 + +# define SSL3_CK_RSA_NULL_MD5 0x03000001 +# define SSL3_CK_RSA_NULL_SHA 0x03000002 +# define SSL3_CK_RSA_RC4_40_MD5 0x03000003 +# define SSL3_CK_RSA_RC4_128_MD5 0x03000004 +# define SSL3_CK_RSA_RC4_128_SHA 0x03000005 +# define SSL3_CK_RSA_RC2_40_MD5 0x03000006 +# define SSL3_CK_RSA_IDEA_128_SHA 0x03000007 +# define SSL3_CK_RSA_DES_40_CBC_SHA 0x03000008 +# define SSL3_CK_RSA_DES_64_CBC_SHA 0x03000009 +# define SSL3_CK_RSA_DES_192_CBC3_SHA 0x0300000A + +# define SSL3_CK_DH_DSS_DES_40_CBC_SHA 0x0300000B +# define SSL3_CK_DH_DSS_DES_64_CBC_SHA 0x0300000C +# define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 0x0300000D +# define SSL3_CK_DH_RSA_DES_40_CBC_SHA 0x0300000E +# define SSL3_CK_DH_RSA_DES_64_CBC_SHA 0x0300000F +# define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010 + +# define SSL3_CK_EDH_DSS_DES_40_CBC_SHA 0x03000011 +# define SSL3_CK_DHE_DSS_DES_40_CBC_SHA SSL3_CK_EDH_DSS_DES_40_CBC_SHA +# define SSL3_CK_EDH_DSS_DES_64_CBC_SHA 0x03000012 +# define SSL3_CK_DHE_DSS_DES_64_CBC_SHA SSL3_CK_EDH_DSS_DES_64_CBC_SHA +# define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA 0x03000013 +# define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA SSL3_CK_EDH_DSS_DES_192_CBC3_SHA +# define SSL3_CK_EDH_RSA_DES_40_CBC_SHA 0x03000014 +# define SSL3_CK_DHE_RSA_DES_40_CBC_SHA SSL3_CK_EDH_RSA_DES_40_CBC_SHA +# define SSL3_CK_EDH_RSA_DES_64_CBC_SHA 0x03000015 +# define SSL3_CK_DHE_RSA_DES_64_CBC_SHA SSL3_CK_EDH_RSA_DES_64_CBC_SHA +# define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA 0x03000016 +# define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA SSL3_CK_EDH_RSA_DES_192_CBC3_SHA + +# define SSL3_CK_ADH_RC4_40_MD5 0x03000017 +# define SSL3_CK_ADH_RC4_128_MD5 0x03000018 +# define SSL3_CK_ADH_DES_40_CBC_SHA 0x03000019 +# define SSL3_CK_ADH_DES_64_CBC_SHA 0x0300001A +# define SSL3_CK_ADH_DES_192_CBC_SHA 0x0300001B + +# if 0 +# define SSL3_CK_FZA_DMS_NULL_SHA 0x0300001C +# define SSL3_CK_FZA_DMS_FZA_SHA 0x0300001D +# if 0 /* Because it clashes with KRB5, is never + * used any more, and is safe to remove + * according to David Hopwood + * of the + * ietf-tls list */ +# define SSL3_CK_FZA_DMS_RC4_SHA 0x0300001E +# endif +# endif + +/* + * VRS Additional Kerberos5 entries + */ +# define SSL3_CK_KRB5_DES_64_CBC_SHA 0x0300001E +# define SSL3_CK_KRB5_DES_192_CBC3_SHA 0x0300001F +# define SSL3_CK_KRB5_RC4_128_SHA 0x03000020 +# define SSL3_CK_KRB5_IDEA_128_CBC_SHA 0x03000021 +# define SSL3_CK_KRB5_DES_64_CBC_MD5 0x03000022 +# define SSL3_CK_KRB5_DES_192_CBC3_MD5 0x03000023 +# define SSL3_CK_KRB5_RC4_128_MD5 0x03000024 +# define SSL3_CK_KRB5_IDEA_128_CBC_MD5 0x03000025 + +# define SSL3_CK_KRB5_DES_40_CBC_SHA 0x03000026 +# define SSL3_CK_KRB5_RC2_40_CBC_SHA 0x03000027 +# define SSL3_CK_KRB5_RC4_40_SHA 0x03000028 +# define SSL3_CK_KRB5_DES_40_CBC_MD5 0x03000029 +# define SSL3_CK_KRB5_RC2_40_CBC_MD5 0x0300002A +# define SSL3_CK_KRB5_RC4_40_MD5 0x0300002B + +# 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" +# define SSL3_TXT_RSA_RC4_128_MD5 "RC4-MD5" +# define SSL3_TXT_RSA_RC4_128_SHA "RC4-SHA" +# define SSL3_TXT_RSA_RC2_40_MD5 "EXP-RC2-CBC-MD5" +# define SSL3_TXT_RSA_IDEA_128_SHA "IDEA-CBC-SHA" +# define SSL3_TXT_RSA_DES_40_CBC_SHA "EXP-DES-CBC-SHA" +# define SSL3_TXT_RSA_DES_64_CBC_SHA "DES-CBC-SHA" +# define SSL3_TXT_RSA_DES_192_CBC3_SHA "DES-CBC3-SHA" + +# define SSL3_TXT_DH_DSS_DES_40_CBC_SHA "EXP-DH-DSS-DES-CBC-SHA" +# define SSL3_TXT_DH_DSS_DES_64_CBC_SHA "DH-DSS-DES-CBC-SHA" +# define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA "DH-DSS-DES-CBC3-SHA" +# define SSL3_TXT_DH_RSA_DES_40_CBC_SHA "EXP-DH-RSA-DES-CBC-SHA" +# define SSL3_TXT_DH_RSA_DES_64_CBC_SHA "DH-RSA-DES-CBC-SHA" +# define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA "DH-RSA-DES-CBC3-SHA" + +# define SSL3_TXT_DHE_DSS_DES_40_CBC_SHA "EXP-DHE-DSS-DES-CBC-SHA" +# define SSL3_TXT_DHE_DSS_DES_64_CBC_SHA "DHE-DSS-DES-CBC-SHA" +# define SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA "DHE-DSS-DES-CBC3-SHA" +# define SSL3_TXT_DHE_RSA_DES_40_CBC_SHA "EXP-DHE-RSA-DES-CBC-SHA" +# define SSL3_TXT_DHE_RSA_DES_64_CBC_SHA "DHE-RSA-DES-CBC-SHA" +# define SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA "DHE-RSA-DES-CBC3-SHA" + +/* + * This next block of six "EDH" labels is for backward compatibility with + * older versions of OpenSSL. New code should use the six "DHE" labels above + * instead: + */ +# define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA "EXP-EDH-DSS-DES-CBC-SHA" +# define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA "EDH-DSS-DES-CBC-SHA" +# define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA "EDH-DSS-DES-CBC3-SHA" +# define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA "EXP-EDH-RSA-DES-CBC-SHA" +# define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA "EDH-RSA-DES-CBC-SHA" +# define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA "EDH-RSA-DES-CBC3-SHA" + +# define SSL3_TXT_ADH_RC4_40_MD5 "EXP-ADH-RC4-MD5" +# define SSL3_TXT_ADH_RC4_128_MD5 "ADH-RC4-MD5" +# define SSL3_TXT_ADH_DES_40_CBC_SHA "EXP-ADH-DES-CBC-SHA" +# define SSL3_TXT_ADH_DES_64_CBC_SHA "ADH-DES-CBC-SHA" +# define SSL3_TXT_ADH_DES_192_CBC_SHA "ADH-DES-CBC3-SHA" + +# if 0 +# define SSL3_TXT_FZA_DMS_NULL_SHA "FZA-NULL-SHA" +# define SSL3_TXT_FZA_DMS_FZA_SHA "FZA-FZA-CBC-SHA" +# define SSL3_TXT_FZA_DMS_RC4_SHA "FZA-RC4-SHA" +# endif + +# define SSL3_TXT_KRB5_DES_64_CBC_SHA "KRB5-DES-CBC-SHA" +# define SSL3_TXT_KRB5_DES_192_CBC3_SHA "KRB5-DES-CBC3-SHA" +# define SSL3_TXT_KRB5_RC4_128_SHA "KRB5-RC4-SHA" +# define SSL3_TXT_KRB5_IDEA_128_CBC_SHA "KRB5-IDEA-CBC-SHA" +# define SSL3_TXT_KRB5_DES_64_CBC_MD5 "KRB5-DES-CBC-MD5" +# define SSL3_TXT_KRB5_DES_192_CBC3_MD5 "KRB5-DES-CBC3-MD5" +# define SSL3_TXT_KRB5_RC4_128_MD5 "KRB5-RC4-MD5" +# define SSL3_TXT_KRB5_IDEA_128_CBC_MD5 "KRB5-IDEA-CBC-MD5" + +# define SSL3_TXT_KRB5_DES_40_CBC_SHA "EXP-KRB5-DES-CBC-SHA" +# define SSL3_TXT_KRB5_RC2_40_CBC_SHA "EXP-KRB5-RC2-CBC-SHA" +# define SSL3_TXT_KRB5_RC4_40_SHA "EXP-KRB5-RC4-SHA" +# define SSL3_TXT_KRB5_DES_40_CBC_MD5 "EXP-KRB5-DES-CBC-MD5" +# define SSL3_TXT_KRB5_RC2_40_CBC_MD5 "EXP-KRB5-RC2-CBC-MD5" +# define SSL3_TXT_KRB5_RC4_40_MD5 "EXP-KRB5-RC4-MD5" + +# define SSL3_SSL_SESSION_ID_LENGTH 32 +# define SSL3_MAX_SSL_SESSION_ID_LENGTH 32 + +# define SSL3_MASTER_SECRET_SIZE 48 +# define SSL3_RANDOM_SIZE 32 +# define SSL3_SESSION_ID_SIZE 32 +# define SSL3_RT_HEADER_LENGTH 5 + +# define SSL3_HM_HEADER_LENGTH 4 + +# ifndef SSL3_ALIGN_PAYLOAD + /* + * Some will argue that this increases memory footprint, but it's not + * actually true. Point is that malloc has to return at least 64-bit aligned + * pointers, meaning that allocating 5 bytes wastes 3 bytes in either case. + * Suggested pre-gaping simply moves these wasted bytes from the end of + * allocated region to its front, but makes data payload aligned, which + * improves performance:-) + */ +# define SSL3_ALIGN_PAYLOAD 8 +# else +# if (SSL3_ALIGN_PAYLOAD&(SSL3_ALIGN_PAYLOAD-1))!=0 +# error "insane SSL3_ALIGN_PAYLOAD" +# undef SSL3_ALIGN_PAYLOAD +# endif +# endif + +/* + * This is the maximum MAC (digest) size used by the SSL library. Currently + * maximum of 20 is used by SHA1, but we reserve for future extension for + * 512-bit hashes. + */ + +# define SSL3_RT_MAX_MD_SIZE 64 + +/* + * Maximum block size used in all ciphersuites. Currently 16 for AES. + */ + +# define SSL_RT_MAX_CIPHER_BLOCK_SIZE 16 + +# define SSL3_RT_MAX_EXTRA (16384) + +/* Maximum plaintext length: defined by SSL/TLS standards */ +# define SSL3_RT_MAX_PLAIN_LENGTH 16384 +/* Maximum compression overhead: defined by SSL/TLS standards */ +# define SSL3_RT_MAX_COMPRESSED_OVERHEAD 1024 + +/* + * The standards give a maximum encryption overhead of 1024 bytes. In + * 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) + +/* + * OpenSSL currently only uses a padding length of at most one block so the + * send overhead is smaller. + */ + +# define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \ + (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE) + +/* If compression isn't used don't include the compression overhead */ + +# ifdef OPENSSL_NO_COMP +# 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) +# endif +# define SSL3_RT_MAX_ENCRYPTED_LENGTH \ + (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH) +# define SSL3_RT_MAX_PACKET_SIZE \ + (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" + +# define SSL3_VERSION 0x0300 +# define SSL3_VERSION_MAJOR 0x03 +# define SSL3_VERSION_MINOR 0x00 + +# define SSL3_RT_CHANGE_CIPHER_SPEC 20 +# define SSL3_RT_ALERT 21 +# define SSL3_RT_HANDSHAKE 22 +# define SSL3_RT_APPLICATION_DATA 23 +# define TLS1_RT_HEARTBEAT 24 + +/* Pseudo content types to indicate additional parameters */ +# define TLS1_RT_CRYPTO 0x1000 +# define TLS1_RT_CRYPTO_PREMASTER (TLS1_RT_CRYPTO | 0x1) +# define TLS1_RT_CRYPTO_CLIENT_RANDOM (TLS1_RT_CRYPTO | 0x2) +# define TLS1_RT_CRYPTO_SERVER_RANDOM (TLS1_RT_CRYPTO | 0x3) +# define TLS1_RT_CRYPTO_MASTER (TLS1_RT_CRYPTO | 0x4) + +# define TLS1_RT_CRYPTO_READ 0x0000 +# define TLS1_RT_CRYPTO_WRITE 0x0100 +# define TLS1_RT_CRYPTO_MAC (TLS1_RT_CRYPTO | 0x5) +# define TLS1_RT_CRYPTO_KEY (TLS1_RT_CRYPTO | 0x6) +# 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 */ +# define SSL3_RT_HEADER 0x100 + +# define SSL3_AL_WARNING 1 +# define SSL3_AL_FATAL 2 + +# define SSL3_AD_CLOSE_NOTIFY 0 +# define SSL3_AD_UNEXPECTED_MESSAGE 10/* fatal */ +# define SSL3_AD_BAD_RECORD_MAC 20/* fatal */ +# define SSL3_AD_DECOMPRESSION_FAILURE 30/* fatal */ +# define SSL3_AD_HANDSHAKE_FAILURE 40/* fatal */ +# define SSL3_AD_NO_CERTIFICATE 41 +# define SSL3_AD_BAD_CERTIFICATE 42 +# define SSL3_AD_UNSUPPORTED_CERTIFICATE 43 +# define SSL3_AD_CERTIFICATE_REVOKED 44 +# define SSL3_AD_CERTIFICATE_EXPIRED 45 +# define SSL3_AD_CERTIFICATE_UNKNOWN 46 +# define SSL3_AD_ILLEGAL_PARAMETER 47/* fatal */ + +# define TLS1_HB_REQUEST 1 +# define TLS1_HB_RESPONSE 2 + +# ifndef OPENSSL_NO_SSL_INTERN + +typedef struct ssl3_record_st { + /* type of record */ + /* + * r + */ int type; + /* How many bytes available */ + /* + * rw + */ unsigned int length; + /* read/write offset into 'buf' */ + /* + * r + */ unsigned int off; + /* pointer to the record data */ + /* + * rw + */ unsigned char *data; + /* where the decode bytes are */ + /* + * rw + */ unsigned char *input; + /* only used with decompression - malloc()ed */ + /* + * r + */ unsigned char *comp; + /* epoch number, needed by DTLS1 */ + /* + * r + */ unsigned long epoch; + /* sequence number, needed by DTLS1 */ + /* + * r + */ unsigned char seq_num[8]; +} SSL3_RECORD; + +typedef struct ssl3_buffer_st { + /* at least SSL3_RT_MAX_PACKET_SIZE bytes, see ssl3_setup_buffers() */ + unsigned char *buf; + /* buffer size */ + size_t len; + /* where to 'copy from' */ + int offset; + /* how many bytes left */ + int left; +} SSL3_BUFFER; + +# endif + +# define SSL3_CT_RSA_SIGN 1 +# define SSL3_CT_DSS_SIGN 2 +# define SSL3_CT_RSA_FIXED_DH 3 +# define SSL3_CT_DSS_FIXED_DH 4 +# define SSL3_CT_RSA_EPHEMERAL_DH 5 +# define SSL3_CT_DSS_EPHEMERAL_DH 6 +# define SSL3_CT_FORTEZZA_DMS 20 +/* + * SSL3_CT_NUMBER is used to size arrays and it must be large enough to + * contain all of the cert types defined either for SSLv3 and TLSv1. + */ +# define SSL3_CT_NUMBER 9 + +# define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001 +# define SSL3_FLAGS_DELAY_CLIENT_FINISHED 0x0002 +# define SSL3_FLAGS_POP_BUFFER 0x0004 +# define TLS1_FLAGS_TLS_PADDING_BUG 0x0008 +# define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010 +# define TLS1_FLAGS_KEEP_HANDSHAKE 0x0020 +/* + * Set when the handshake is ready to process peer's ChangeCipherSpec message. + * Cleared after the message has been processed. + */ +# define SSL3_FLAGS_CCS_OK 0x0080 + +/* SSL3_FLAGS_SGC_RESTART_DONE is no longer used */ +# define SSL3_FLAGS_SGC_RESTART_DONE 0x0040 + +# ifndef OPENSSL_NO_SSL_INTERN + +typedef struct ssl3_state_st { + long flags; + int delay_buf_pop_ret; + unsigned char read_sequence[8]; + int read_mac_secret_size; + unsigned char read_mac_secret[EVP_MAX_MD_SIZE]; + unsigned char write_sequence[8]; + int write_mac_secret_size; + unsigned char write_mac_secret[EVP_MAX_MD_SIZE]; + unsigned char server_random[SSL3_RANDOM_SIZE]; + unsigned char client_random[SSL3_RANDOM_SIZE]; + /* flags for countermeasure against known-IV weakness */ + int need_empty_fragments; + int empty_fragment_done; + /* The value of 'extra' when the buffers were initialized */ + int init_extra; + SSL3_BUFFER rbuf; /* read IO goes into here */ + SSL3_BUFFER wbuf; /* write IO goes into here */ + SSL3_RECORD rrec; /* each decoded record goes in here */ + SSL3_RECORD wrec; /* goes out from here */ + /* + * storage for Alert/Handshake protocol data received but not yet + * processed by ssl3_read_bytes: + */ + unsigned char alert_fragment[2]; + unsigned int alert_fragment_len; + unsigned char handshake_fragment[4]; + unsigned int handshake_fragment_len; + /* partial write - check the numbers match */ + unsigned int wnum; /* number of bytes sent so far */ + int wpend_tot; /* number bytes written */ + int wpend_type; + int wpend_ret; /* number of bytes submitted */ + const unsigned char *wpend_buf; + /* used during startup, digest all incoming/outgoing packets */ + BIO *handshake_buffer; + /* + * When set of handshake digests is determined, buffer is hashed and + * freed and MD_CTX-es for all required digests are stored in this array + */ + EVP_MD_CTX **handshake_dgst; + /* + * Set whenever an expected ChangeCipherSpec message is processed. + * Unset when the peer's Finished message is received. + * Unexpected ChangeCipherSpec messages trigger a fatal alert. + */ + int change_cipher_spec; + int warn_alert; + int fatal_alert; + /* + * we allow one fatal and one warning alert to be outstanding, send close + * alert via the warning alert + */ + int alert_dispatch; + unsigned char send_alert[2]; + /* + * This flag is set when we should renegotiate ASAP, basically when there + * is no more data in the read or write buffers + */ + int renegotiate; + int total_renegotiations; + int num_renegotiations; + int in_read_app_data; + /* + * Opaque PRF input as used for the current handshake. These fields are + * used only if TLSEXT_TYPE_opaque_prf_input is defined (otherwise, they + * are merely present to improve binary compatibility) + */ + void *client_opaque_prf_input; + size_t client_opaque_prf_input_len; + void *server_opaque_prf_input; + size_t server_opaque_prf_input_len; + struct { + /* actually only needs to be 16+20 */ + unsigned char cert_verify_md[EVP_MAX_MD_SIZE * 2]; + /* actually only need to be 16+20 for SSLv3 and 12 for TLS */ + unsigned char finish_md[EVP_MAX_MD_SIZE * 2]; + int finish_md_len; + unsigned char peer_finish_md[EVP_MAX_MD_SIZE * 2]; + int peer_finish_md_len; + unsigned long message_size; + int message_type; + /* used to hold the new cipher we are going to use */ + const SSL_CIPHER *new_cipher; +# ifndef OPENSSL_NO_DH + DH *dh; +# endif +# ifndef OPENSSL_NO_ECDH + EC_KEY *ecdh; /* holds short lived ECDH key */ +# endif + /* used when SSL_ST_FLUSH_DATA is entered */ + int next_state; + int reuse_message; + /* used for certificate requests */ + int cert_req; + int ctype_num; + char ctype[SSL3_CT_NUMBER]; + STACK_OF(X509_NAME) *ca_names; + int use_rsa_tmp; + int key_block_length; + unsigned char *key_block; + const EVP_CIPHER *new_sym_enc; + const EVP_MD *new_hash; + int new_mac_pkey_type; + int new_mac_secret_size; +# ifndef OPENSSL_NO_COMP + const SSL_COMP *new_compression; +# else + char *new_compression; +# endif + int cert_request; + } tmp; + + /* Connection binding to prevent renegotiation attacks */ + unsigned char previous_client_finished[EVP_MAX_MD_SIZE]; + unsigned char previous_client_finished_len; + unsigned char previous_server_finished[EVP_MAX_MD_SIZE]; + unsigned char previous_server_finished_len; + int send_connection_binding; /* TODOEKR */ + +# ifndef OPENSSL_NO_NEXTPROTONEG + /* + * Set if we saw the Next Protocol Negotiation extension from our peer. + */ + int next_proto_neg_seen; +# endif + +# ifndef OPENSSL_NO_TLSEXT +# ifndef OPENSSL_NO_EC + /* + * This is set to true if we believe that this is a version of Safari + * running on OS X 10.6 or newer. We wish to know this because Safari on + * 10.8 .. 10.8.3 has broken ECDHE-ECDSA support. + */ + char is_probably_safari; +# endif /* !OPENSSL_NO_EC */ + + /* + * ALPN information (we are in the process of transitioning from NPN to + * ALPN.) + */ + + /* + * In a server these point to the selected ALPN protocol after the + * ClientHello has been processed. In a client these contain the protocol + * that the server selected once the ServerHello has been processed. + */ + unsigned char *alpn_selected; + unsigned alpn_selected_len; +# endif /* OPENSSL_NO_TLSEXT */ +} SSL3_STATE; + +# endif + +/* SSLv3 */ +/* + * client + */ +/* extra state */ +# define SSL3_ST_CW_FLUSH (0x100|SSL_ST_CONNECT) +# ifndef OPENSSL_NO_SCTP +# define DTLS1_SCTP_ST_CW_WRITE_SOCK (0x310|SSL_ST_CONNECT) +# define DTLS1_SCTP_ST_CR_READ_SOCK (0x320|SSL_ST_CONNECT) +# endif +/* write to server */ +# define SSL3_ST_CW_CLNT_HELLO_A (0x110|SSL_ST_CONNECT) +# define SSL3_ST_CW_CLNT_HELLO_B (0x111|SSL_ST_CONNECT) +/* read from server */ +# define SSL3_ST_CR_SRVR_HELLO_A (0x120|SSL_ST_CONNECT) +# define SSL3_ST_CR_SRVR_HELLO_B (0x121|SSL_ST_CONNECT) +# define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A (0x126|SSL_ST_CONNECT) +# define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B (0x127|SSL_ST_CONNECT) +# define SSL3_ST_CR_CERT_A (0x130|SSL_ST_CONNECT) +# define SSL3_ST_CR_CERT_B (0x131|SSL_ST_CONNECT) +# define SSL3_ST_CR_KEY_EXCH_A (0x140|SSL_ST_CONNECT) +# define SSL3_ST_CR_KEY_EXCH_B (0x141|SSL_ST_CONNECT) +# define SSL3_ST_CR_CERT_REQ_A (0x150|SSL_ST_CONNECT) +# define SSL3_ST_CR_CERT_REQ_B (0x151|SSL_ST_CONNECT) +# define SSL3_ST_CR_SRVR_DONE_A (0x160|SSL_ST_CONNECT) +# define SSL3_ST_CR_SRVR_DONE_B (0x161|SSL_ST_CONNECT) +/* write to server */ +# define SSL3_ST_CW_CERT_A (0x170|SSL_ST_CONNECT) +# define SSL3_ST_CW_CERT_B (0x171|SSL_ST_CONNECT) +# define SSL3_ST_CW_CERT_C (0x172|SSL_ST_CONNECT) +# define SSL3_ST_CW_CERT_D (0x173|SSL_ST_CONNECT) +# define SSL3_ST_CW_KEY_EXCH_A (0x180|SSL_ST_CONNECT) +# define SSL3_ST_CW_KEY_EXCH_B (0x181|SSL_ST_CONNECT) +# define SSL3_ST_CW_CERT_VRFY_A (0x190|SSL_ST_CONNECT) +# define SSL3_ST_CW_CERT_VRFY_B (0x191|SSL_ST_CONNECT) +# define SSL3_ST_CW_CHANGE_A (0x1A0|SSL_ST_CONNECT) +# define SSL3_ST_CW_CHANGE_B (0x1A1|SSL_ST_CONNECT) +# ifndef OPENSSL_NO_NEXTPROTONEG +# define SSL3_ST_CW_NEXT_PROTO_A (0x200|SSL_ST_CONNECT) +# define SSL3_ST_CW_NEXT_PROTO_B (0x201|SSL_ST_CONNECT) +# endif +# define SSL3_ST_CW_FINISHED_A (0x1B0|SSL_ST_CONNECT) +# define SSL3_ST_CW_FINISHED_B (0x1B1|SSL_ST_CONNECT) +/* read from server */ +# define SSL3_ST_CR_CHANGE_A (0x1C0|SSL_ST_CONNECT) +# define SSL3_ST_CR_CHANGE_B (0x1C1|SSL_ST_CONNECT) +# define SSL3_ST_CR_FINISHED_A (0x1D0|SSL_ST_CONNECT) +# define SSL3_ST_CR_FINISHED_B (0x1D1|SSL_ST_CONNECT) +# define SSL3_ST_CR_SESSION_TICKET_A (0x1E0|SSL_ST_CONNECT) +# define SSL3_ST_CR_SESSION_TICKET_B (0x1E1|SSL_ST_CONNECT) +# define SSL3_ST_CR_CERT_STATUS_A (0x1F0|SSL_ST_CONNECT) +# define SSL3_ST_CR_CERT_STATUS_B (0x1F1|SSL_ST_CONNECT) + +/* server */ +/* extra state */ +# define SSL3_ST_SW_FLUSH (0x100|SSL_ST_ACCEPT) +# ifndef OPENSSL_NO_SCTP +# define DTLS1_SCTP_ST_SW_WRITE_SOCK (0x310|SSL_ST_ACCEPT) +# define DTLS1_SCTP_ST_SR_READ_SOCK (0x320|SSL_ST_ACCEPT) +# endif +/* read from client */ +/* Do not change the number values, they do matter */ +# define SSL3_ST_SR_CLNT_HELLO_A (0x110|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CLNT_HELLO_B (0x111|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CLNT_HELLO_C (0x112|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CLNT_HELLO_D (0x115|SSL_ST_ACCEPT) +/* write to client */ +# define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A (0x113|SSL_ST_ACCEPT) +# define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B (0x114|SSL_ST_ACCEPT) +# define SSL3_ST_SW_HELLO_REQ_A (0x120|SSL_ST_ACCEPT) +# define SSL3_ST_SW_HELLO_REQ_B (0x121|SSL_ST_ACCEPT) +# define SSL3_ST_SW_HELLO_REQ_C (0x122|SSL_ST_ACCEPT) +# define SSL3_ST_SW_SRVR_HELLO_A (0x130|SSL_ST_ACCEPT) +# define SSL3_ST_SW_SRVR_HELLO_B (0x131|SSL_ST_ACCEPT) +# define SSL3_ST_SW_CERT_A (0x140|SSL_ST_ACCEPT) +# define SSL3_ST_SW_CERT_B (0x141|SSL_ST_ACCEPT) +# define SSL3_ST_SW_KEY_EXCH_A (0x150|SSL_ST_ACCEPT) +# define SSL3_ST_SW_KEY_EXCH_B (0x151|SSL_ST_ACCEPT) +# define SSL3_ST_SW_CERT_REQ_A (0x160|SSL_ST_ACCEPT) +# define SSL3_ST_SW_CERT_REQ_B (0x161|SSL_ST_ACCEPT) +# define SSL3_ST_SW_SRVR_DONE_A (0x170|SSL_ST_ACCEPT) +# define SSL3_ST_SW_SRVR_DONE_B (0x171|SSL_ST_ACCEPT) +/* read from client */ +# define SSL3_ST_SR_CERT_A (0x180|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CERT_B (0x181|SSL_ST_ACCEPT) +# define SSL3_ST_SR_KEY_EXCH_A (0x190|SSL_ST_ACCEPT) +# define SSL3_ST_SR_KEY_EXCH_B (0x191|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CERT_VRFY_A (0x1A0|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CERT_VRFY_B (0x1A1|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CHANGE_A (0x1B0|SSL_ST_ACCEPT) +# define SSL3_ST_SR_CHANGE_B (0x1B1|SSL_ST_ACCEPT) +# ifndef OPENSSL_NO_NEXTPROTONEG +# define SSL3_ST_SR_NEXT_PROTO_A (0x210|SSL_ST_ACCEPT) +# define SSL3_ST_SR_NEXT_PROTO_B (0x211|SSL_ST_ACCEPT) +# endif +# define SSL3_ST_SR_FINISHED_A (0x1C0|SSL_ST_ACCEPT) +# define SSL3_ST_SR_FINISHED_B (0x1C1|SSL_ST_ACCEPT) +/* write to client */ +# define SSL3_ST_SW_CHANGE_A (0x1D0|SSL_ST_ACCEPT) +# define SSL3_ST_SW_CHANGE_B (0x1D1|SSL_ST_ACCEPT) +# define SSL3_ST_SW_FINISHED_A (0x1E0|SSL_ST_ACCEPT) +# define SSL3_ST_SW_FINISHED_B (0x1E1|SSL_ST_ACCEPT) +# define SSL3_ST_SW_SESSION_TICKET_A (0x1F0|SSL_ST_ACCEPT) +# define SSL3_ST_SW_SESSION_TICKET_B (0x1F1|SSL_ST_ACCEPT) +# define SSL3_ST_SW_CERT_STATUS_A (0x200|SSL_ST_ACCEPT) +# define SSL3_ST_SW_CERT_STATUS_B (0x201|SSL_ST_ACCEPT) + +# 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_CERTIFICATE 11 +# define SSL3_MT_SERVER_KEY_EXCHANGE 12 +# define SSL3_MT_CERTIFICATE_REQUEST 13 +# define SSL3_MT_SERVER_DONE 14 +# define SSL3_MT_CERTIFICATE_VERIFY 15 +# define SSL3_MT_CLIENT_KEY_EXCHANGE 16 +# define SSL3_MT_FINISHED 20 +# define SSL3_MT_CERTIFICATE_STATUS 22 +# ifndef OPENSSL_NO_NEXTPROTONEG +# define SSL3_MT_NEXT_PROTO 67 +# endif +# define DTLS1_MT_HELLO_VERIFY_REQUEST 3 + +# 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_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) +# define SSL3_CHANGE_CIPHER_SERVER_WRITE (SSL3_CC_SERVER|SSL3_CC_WRITE) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/stack.h b/Sources/OpenSSL/include/openssl/stack.h new file mode 100644 index 0000000000..eb07216659 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/stack.h @@ -0,0 +1,107 @@ +/* crypto/stack/stack.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_STACK_H +# define HEADER_STACK_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct stack_st { + int num; + char **data; + int sorted; + int num_alloc; + int (*comp) (const void *, const void *); +} _STACK; /* Use STACK_OF(...) instead */ + +# define M_sk_num(sk) ((sk) ? (sk)->num:-1) +# define M_sk_value(sk,n) ((sk) ? (sk)->data[n] : NULL) + +int sk_num(const _STACK *); +void *sk_value(const _STACK *, int); + +void *sk_set(_STACK *, int, void *); + +_STACK *sk_new(int (*cmp) (const void *, const void *)); +_STACK *sk_new_null(void); +void sk_free(_STACK *); +void sk_pop_free(_STACK *st, void (*func) (void *)); +_STACK *sk_deep_copy(_STACK *, void *(*)(void *), void (*)(void *)); +int sk_insert(_STACK *sk, void *data, int where); +void *sk_delete(_STACK *st, int loc); +void *sk_delete_ptr(_STACK *st, void *p); +int sk_find(_STACK *st, void *data); +int sk_find_ex(_STACK *st, void *data); +int sk_push(_STACK *st, void *data); +int sk_unshift(_STACK *st, void *data); +void *sk_shift(_STACK *st); +void *sk_pop(_STACK *st); +void sk_zero(_STACK *st); +int (*sk_set_cmp_func(_STACK *sk, int (*c) (const void *, const void *))) + (const void *, const void *); +_STACK *sk_dup(_STACK *st); +void sk_sort(_STACK *st); +int sk_is_sorted(const _STACK *st); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/symhacks.h b/Sources/OpenSSL/include/openssl/symhacks.h new file mode 100644 index 0000000000..e17de31e38 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/symhacks.h @@ -0,0 +1,516 @@ +/* ==================================================================== + * Copyright (c) 1999 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_SYMHACKS_H +# define HEADER_SYMHACKS_H + +# include "e_os2.h" + +/* + * Hacks to solve the problem with linkers incapable of handling very long + * symbol names. In the case of VMS, the limit is 31 characters on VMS for + * VAX. + */ +/* + * Note that this affects util/libeay.num and util/ssleay.num... you may + * change those manually, but that's not recommended, as those files are + * controlled centrally and updated on Unix, and the central definition may + * disagree with yours, which in turn may come with shareable library + * incompatibilities. + */ +# ifdef OPENSSL_SYS_VMS + +/* Hack a long name in crypto/ex_data.c */ +# undef CRYPTO_get_ex_data_implementation +# define CRYPTO_get_ex_data_implementation CRYPTO_get_ex_data_impl +# undef CRYPTO_set_ex_data_implementation +# define CRYPTO_set_ex_data_implementation CRYPTO_set_ex_data_impl + +/* Hack a long name in crypto/asn1/a_mbstr.c */ +# undef ASN1_STRING_set_default_mask_asc +# define ASN1_STRING_set_default_mask_asc ASN1_STRING_set_def_mask_asc + +# if 0 /* No longer needed, since safestack macro + * magic does the job */ +/* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO) */ +# undef i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO +# define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO i2d_ASN1_SET_OF_PKCS7_SIGINF +# undef d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO +# define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO d2i_ASN1_SET_OF_PKCS7_SIGINF +# endif + +# if 0 /* No longer needed, since safestack macro + * magic does the job */ +/* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO) */ +# undef i2d_ASN1_SET_OF_PKCS7_RECIP_INFO +# define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO i2d_ASN1_SET_OF_PKCS7_RECINF +# undef d2i_ASN1_SET_OF_PKCS7_RECIP_INFO +# define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO d2i_ASN1_SET_OF_PKCS7_RECINF +# endif + +# if 0 /* No longer needed, since safestack macro + * magic does the job */ +/* Hack the names created with DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION) */ +# undef i2d_ASN1_SET_OF_ACCESS_DESCRIPTION +# define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION i2d_ASN1_SET_OF_ACC_DESC +# undef d2i_ASN1_SET_OF_ACCESS_DESCRIPTION +# define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION d2i_ASN1_SET_OF_ACC_DESC +# endif + +/* Hack the names created with DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE) */ +# undef PEM_read_NETSCAPE_CERT_SEQUENCE +# define PEM_read_NETSCAPE_CERT_SEQUENCE PEM_read_NS_CERT_SEQ +# undef PEM_write_NETSCAPE_CERT_SEQUENCE +# define PEM_write_NETSCAPE_CERT_SEQUENCE PEM_write_NS_CERT_SEQ +# undef PEM_read_bio_NETSCAPE_CERT_SEQUENCE +# define PEM_read_bio_NETSCAPE_CERT_SEQUENCE PEM_read_bio_NS_CERT_SEQ +# undef PEM_write_bio_NETSCAPE_CERT_SEQUENCE +# define PEM_write_bio_NETSCAPE_CERT_SEQUENCE PEM_write_bio_NS_CERT_SEQ +# undef PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE +# define PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE PEM_write_cb_bio_NS_CERT_SEQ + +/* Hack the names created with DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO) */ +# undef PEM_read_PKCS8_PRIV_KEY_INFO +# define PEM_read_PKCS8_PRIV_KEY_INFO PEM_read_P8_PRIV_KEY_INFO +# undef PEM_write_PKCS8_PRIV_KEY_INFO +# define PEM_write_PKCS8_PRIV_KEY_INFO PEM_write_P8_PRIV_KEY_INFO +# undef PEM_read_bio_PKCS8_PRIV_KEY_INFO +# define PEM_read_bio_PKCS8_PRIV_KEY_INFO PEM_read_bio_P8_PRIV_KEY_INFO +# undef PEM_write_bio_PKCS8_PRIV_KEY_INFO +# define PEM_write_bio_PKCS8_PRIV_KEY_INFO PEM_write_bio_P8_PRIV_KEY_INFO +# undef PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO +# define PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO PEM_wrt_cb_bio_P8_PRIV_KEY_INFO + +/* Hack other PEM names */ +# undef PEM_write_bio_PKCS8PrivateKey_nid +# define PEM_write_bio_PKCS8PrivateKey_nid PEM_write_bio_PKCS8PrivKey_nid + +/* Hack some long X509 names */ +# undef X509_REVOKED_get_ext_by_critical +# define X509_REVOKED_get_ext_by_critical X509_REVOKED_get_ext_by_critic +# undef X509_policy_tree_get0_user_policies +# define X509_policy_tree_get0_user_policies X509_pcy_tree_get0_usr_policies +# undef X509_policy_node_get0_qualifiers +# define X509_policy_node_get0_qualifiers X509_pcy_node_get0_qualifiers +# undef X509_STORE_CTX_get_explicit_policy +# define X509_STORE_CTX_get_explicit_policy X509_STORE_CTX_get_expl_policy +# undef X509_STORE_CTX_get0_current_issuer +# define X509_STORE_CTX_get0_current_issuer X509_STORE_CTX_get0_cur_issuer + +/* Hack some long CRYPTO names */ +# undef CRYPTO_set_dynlock_destroy_callback +# define CRYPTO_set_dynlock_destroy_callback CRYPTO_set_dynlock_destroy_cb +# undef CRYPTO_set_dynlock_create_callback +# define CRYPTO_set_dynlock_create_callback CRYPTO_set_dynlock_create_cb +# undef CRYPTO_set_dynlock_lock_callback +# define CRYPTO_set_dynlock_lock_callback CRYPTO_set_dynlock_lock_cb +# undef CRYPTO_get_dynlock_lock_callback +# define CRYPTO_get_dynlock_lock_callback CRYPTO_get_dynlock_lock_cb +# undef CRYPTO_get_dynlock_destroy_callback +# define CRYPTO_get_dynlock_destroy_callback CRYPTO_get_dynlock_destroy_cb +# undef CRYPTO_get_dynlock_create_callback +# define CRYPTO_get_dynlock_create_callback CRYPTO_get_dynlock_create_cb +# undef CRYPTO_set_locked_mem_ex_functions +# define CRYPTO_set_locked_mem_ex_functions CRYPTO_set_locked_mem_ex_funcs +# undef CRYPTO_get_locked_mem_ex_functions +# define CRYPTO_get_locked_mem_ex_functions CRYPTO_get_locked_mem_ex_funcs + +/* Hack some long SSL/TLS names */ +# undef SSL_CTX_set_default_verify_paths +# define SSL_CTX_set_default_verify_paths SSL_CTX_set_def_verify_paths +# undef SSL_get_ex_data_X509_STORE_CTX_idx +# define SSL_get_ex_data_X509_STORE_CTX_idx SSL_get_ex_d_X509_STORE_CTX_idx +# undef SSL_add_file_cert_subjects_to_stack +# define SSL_add_file_cert_subjects_to_stack SSL_add_file_cert_subjs_to_stk +# undef SSL_add_dir_cert_subjects_to_stack +# define SSL_add_dir_cert_subjects_to_stack SSL_add_dir_cert_subjs_to_stk +# undef SSL_CTX_use_certificate_chain_file +# define SSL_CTX_use_certificate_chain_file SSL_CTX_use_cert_chain_file +# undef SSL_CTX_set_cert_verify_callback +# define SSL_CTX_set_cert_verify_callback SSL_CTX_set_cert_verify_cb +# undef SSL_CTX_set_default_passwd_cb_userdata +# define SSL_CTX_set_default_passwd_cb_userdata SSL_CTX_set_def_passwd_cb_ud +# undef SSL_COMP_get_compression_methods +# define SSL_COMP_get_compression_methods SSL_COMP_get_compress_methods +# undef SSL_COMP_set0_compression_methods +# define SSL_COMP_set0_compression_methods SSL_COMP_set0_compress_methods +# undef SSL_COMP_free_compression_methods +# define SSL_COMP_free_compression_methods SSL_COMP_free_compress_methods +# undef ssl_add_clienthello_renegotiate_ext +# define ssl_add_clienthello_renegotiate_ext ssl_add_clienthello_reneg_ext +# undef ssl_add_serverhello_renegotiate_ext +# define ssl_add_serverhello_renegotiate_ext ssl_add_serverhello_reneg_ext +# undef ssl_parse_clienthello_renegotiate_ext +# define ssl_parse_clienthello_renegotiate_ext ssl_parse_clienthello_reneg_ext +# undef ssl_parse_serverhello_renegotiate_ext +# define ssl_parse_serverhello_renegotiate_ext ssl_parse_serverhello_reneg_ext +# undef SSL_srp_server_param_with_username +# define SSL_srp_server_param_with_username SSL_srp_server_param_with_un +# undef SSL_CTX_set_srp_client_pwd_callback +# define SSL_CTX_set_srp_client_pwd_callback SSL_CTX_set_srp_client_pwd_cb +# undef SSL_CTX_set_srp_verify_param_callback +# define SSL_CTX_set_srp_verify_param_callback SSL_CTX_set_srp_vfy_param_cb +# undef SSL_CTX_set_srp_username_callback +# define SSL_CTX_set_srp_username_callback SSL_CTX_set_srp_un_cb +# undef ssl_add_clienthello_use_srtp_ext +# define ssl_add_clienthello_use_srtp_ext ssl_add_clihello_use_srtp_ext +# undef ssl_add_serverhello_use_srtp_ext +# define ssl_add_serverhello_use_srtp_ext ssl_add_serhello_use_srtp_ext +# undef ssl_parse_clienthello_use_srtp_ext +# define ssl_parse_clienthello_use_srtp_ext ssl_parse_clihello_use_srtp_ext +# undef ssl_parse_serverhello_use_srtp_ext +# define ssl_parse_serverhello_use_srtp_ext ssl_parse_serhello_use_srtp_ext +# undef SSL_CTX_set_next_protos_advertised_cb +# define SSL_CTX_set_next_protos_advertised_cb SSL_CTX_set_next_protos_adv_cb +# undef SSL_CTX_set_next_proto_select_cb +# define SSL_CTX_set_next_proto_select_cb SSL_CTX_set_next_proto_sel_cb + +# undef tls1_send_server_supplemental_data +# define tls1_send_server_supplemental_data tls1_send_server_suppl_data +# undef tls1_send_client_supplemental_data +# define tls1_send_client_supplemental_data tls1_send_client_suppl_data +# undef tls1_get_server_supplemental_data +# define tls1_get_server_supplemental_data tls1_get_server_suppl_data +# undef tls1_get_client_supplemental_data +# define tls1_get_client_supplemental_data tls1_get_client_suppl_data + +# undef ssl3_cbc_record_digest_supported +# define ssl3_cbc_record_digest_supported ssl3_cbc_record_digest_support +# undef ssl_check_clienthello_tlsext_late +# define ssl_check_clienthello_tlsext_late ssl_check_clihello_tlsext_late +# undef ssl_check_clienthello_tlsext_early +# define ssl_check_clienthello_tlsext_early ssl_check_clihello_tlsext_early + +/* Hack some RSA long names */ +# undef RSA_padding_check_PKCS1_OAEP_mgf1 +# define RSA_padding_check_PKCS1_OAEP_mgf1 RSA_pad_check_PKCS1_OAEP_mgf1 + +/* Hack some ENGINE long names */ +# undef ENGINE_get_default_BN_mod_exp_crt +# define ENGINE_get_default_BN_mod_exp_crt ENGINE_get_def_BN_mod_exp_crt +# undef ENGINE_set_default_BN_mod_exp_crt +# define ENGINE_set_default_BN_mod_exp_crt ENGINE_set_def_BN_mod_exp_crt +# undef ENGINE_set_load_privkey_function +# define ENGINE_set_load_privkey_function ENGINE_set_load_privkey_fn +# undef ENGINE_get_load_privkey_function +# define ENGINE_get_load_privkey_function ENGINE_get_load_privkey_fn +# undef ENGINE_unregister_pkey_asn1_meths +# define ENGINE_unregister_pkey_asn1_meths ENGINE_unreg_pkey_asn1_meths +# undef ENGINE_register_all_pkey_asn1_meths +# define ENGINE_register_all_pkey_asn1_meths ENGINE_reg_all_pkey_asn1_meths +# undef ENGINE_set_default_pkey_asn1_meths +# define ENGINE_set_default_pkey_asn1_meths ENGINE_set_def_pkey_asn1_meths +# undef ENGINE_get_pkey_asn1_meth_engine +# define ENGINE_get_pkey_asn1_meth_engine ENGINE_get_pkey_asn1_meth_eng +# undef ENGINE_set_load_ssl_client_cert_function +# define ENGINE_set_load_ssl_client_cert_function \ + ENGINE_set_ld_ssl_clnt_cert_fn +# undef ENGINE_get_ssl_client_cert_function +# define ENGINE_get_ssl_client_cert_function ENGINE_get_ssl_client_cert_fn + +/* Hack some long OCSP names */ +# undef OCSP_REQUEST_get_ext_by_critical +# define OCSP_REQUEST_get_ext_by_critical OCSP_REQUEST_get_ext_by_crit +# undef OCSP_BASICRESP_get_ext_by_critical +# define OCSP_BASICRESP_get_ext_by_critical OCSP_BASICRESP_get_ext_by_crit +# undef OCSP_SINGLERESP_get_ext_by_critical +# define OCSP_SINGLERESP_get_ext_by_critical OCSP_SINGLERESP_get_ext_by_crit + +/* Hack some long DES names */ +# undef _ossl_old_des_ede3_cfb64_encrypt +# define _ossl_old_des_ede3_cfb64_encrypt _ossl_odes_ede3_cfb64_encrypt +# undef _ossl_old_des_ede3_ofb64_encrypt +# define _ossl_old_des_ede3_ofb64_encrypt _ossl_odes_ede3_ofb64_encrypt + +/* Hack some long EVP names */ +# undef OPENSSL_add_all_algorithms_noconf +# define OPENSSL_add_all_algorithms_noconf OPENSSL_add_all_algo_noconf +# undef OPENSSL_add_all_algorithms_conf +# define OPENSSL_add_all_algorithms_conf OPENSSL_add_all_algo_conf +# undef EVP_PKEY_meth_set_verify_recover +# define EVP_PKEY_meth_set_verify_recover EVP_PKEY_meth_set_vrfy_recover + +/* Hack some long EC names */ +# undef EC_GROUP_set_point_conversion_form +# define EC_GROUP_set_point_conversion_form EC_GROUP_set_point_conv_form +# undef EC_GROUP_get_point_conversion_form +# define EC_GROUP_get_point_conversion_form EC_GROUP_get_point_conv_form +# undef EC_GROUP_clear_free_all_extra_data +# define EC_GROUP_clear_free_all_extra_data EC_GROUP_clr_free_all_xtra_data +# undef EC_KEY_set_public_key_affine_coordinates +# define EC_KEY_set_public_key_affine_coordinates \ + EC_KEY_set_pub_key_aff_coords +# undef EC_POINT_set_Jprojective_coordinates_GFp +# define EC_POINT_set_Jprojective_coordinates_GFp \ + EC_POINT_set_Jproj_coords_GFp +# undef EC_POINT_get_Jprojective_coordinates_GFp +# define EC_POINT_get_Jprojective_coordinates_GFp \ + EC_POINT_get_Jproj_coords_GFp +# undef EC_POINT_set_affine_coordinates_GFp +# define EC_POINT_set_affine_coordinates_GFp EC_POINT_set_affine_coords_GFp +# undef EC_POINT_get_affine_coordinates_GFp +# define EC_POINT_get_affine_coordinates_GFp EC_POINT_get_affine_coords_GFp +# undef EC_POINT_set_compressed_coordinates_GFp +# define EC_POINT_set_compressed_coordinates_GFp EC_POINT_set_compr_coords_GFp +# undef EC_POINT_set_affine_coordinates_GF2m +# define EC_POINT_set_affine_coordinates_GF2m EC_POINT_set_affine_coords_GF2m +# undef EC_POINT_get_affine_coordinates_GF2m +# define EC_POINT_get_affine_coordinates_GF2m EC_POINT_get_affine_coords_GF2m +# undef EC_POINT_set_compressed_coordinates_GF2m +# define EC_POINT_set_compressed_coordinates_GF2m \ + EC_POINT_set_compr_coords_GF2m +# undef ec_GF2m_simple_group_clear_finish +# define ec_GF2m_simple_group_clear_finish ec_GF2m_simple_grp_clr_finish +# undef ec_GF2m_simple_group_check_discriminant +# define ec_GF2m_simple_group_check_discriminant ec_GF2m_simple_grp_chk_discrim +# undef ec_GF2m_simple_point_clear_finish +# define ec_GF2m_simple_point_clear_finish ec_GF2m_simple_pt_clr_finish +# undef ec_GF2m_simple_point_set_to_infinity +# define ec_GF2m_simple_point_set_to_infinity ec_GF2m_simple_pt_set_to_inf +# undef ec_GF2m_simple_points_make_affine +# define ec_GF2m_simple_points_make_affine ec_GF2m_simple_pts_make_affine +# undef ec_GF2m_simple_point_set_affine_coordinates +# define ec_GF2m_simple_point_set_affine_coordinates \ + ec_GF2m_smp_pt_set_af_coords +# undef ec_GF2m_simple_point_get_affine_coordinates +# define ec_GF2m_simple_point_get_affine_coordinates \ + ec_GF2m_smp_pt_get_af_coords +# undef ec_GF2m_simple_set_compressed_coordinates +# define ec_GF2m_simple_set_compressed_coordinates \ + ec_GF2m_smp_set_compr_coords +# undef ec_GFp_simple_group_set_curve_GFp +# define ec_GFp_simple_group_set_curve_GFp ec_GFp_simple_grp_set_curve_GFp +# undef ec_GFp_simple_group_get_curve_GFp +# define ec_GFp_simple_group_get_curve_GFp ec_GFp_simple_grp_get_curve_GFp +# undef ec_GFp_simple_group_clear_finish +# define ec_GFp_simple_group_clear_finish ec_GFp_simple_grp_clear_finish +# undef ec_GFp_simple_group_set_generator +# define ec_GFp_simple_group_set_generator ec_GFp_simple_grp_set_generator +# undef ec_GFp_simple_group_get0_generator +# define ec_GFp_simple_group_get0_generator ec_GFp_simple_grp_gt0_generator +# undef ec_GFp_simple_group_get_cofactor +# define ec_GFp_simple_group_get_cofactor ec_GFp_simple_grp_get_cofactor +# undef ec_GFp_simple_point_clear_finish +# define ec_GFp_simple_point_clear_finish ec_GFp_simple_pt_clear_finish +# undef ec_GFp_simple_point_set_to_infinity +# define ec_GFp_simple_point_set_to_infinity ec_GFp_simple_pt_set_to_inf +# undef ec_GFp_simple_points_make_affine +# define ec_GFp_simple_points_make_affine ec_GFp_simple_pts_make_affine +# undef ec_GFp_simple_set_Jprojective_coordinates_GFp +# define ec_GFp_simple_set_Jprojective_coordinates_GFp \ + ec_GFp_smp_set_Jproj_coords_GFp +# undef ec_GFp_simple_get_Jprojective_coordinates_GFp +# define ec_GFp_simple_get_Jprojective_coordinates_GFp \ + ec_GFp_smp_get_Jproj_coords_GFp +# undef ec_GFp_simple_point_set_affine_coordinates_GFp +# define ec_GFp_simple_point_set_affine_coordinates_GFp \ + ec_GFp_smp_pt_set_af_coords_GFp +# undef ec_GFp_simple_point_get_affine_coordinates_GFp +# define ec_GFp_simple_point_get_affine_coordinates_GFp \ + ec_GFp_smp_pt_get_af_coords_GFp +# undef ec_GFp_simple_set_compressed_coordinates_GFp +# define ec_GFp_simple_set_compressed_coordinates_GFp \ + ec_GFp_smp_set_compr_coords_GFp +# undef ec_GFp_simple_point_set_affine_coordinates +# define ec_GFp_simple_point_set_affine_coordinates \ + ec_GFp_smp_pt_set_af_coords +# undef ec_GFp_simple_point_get_affine_coordinates +# define ec_GFp_simple_point_get_affine_coordinates \ + ec_GFp_smp_pt_get_af_coords +# undef ec_GFp_simple_set_compressed_coordinates +# define ec_GFp_simple_set_compressed_coordinates \ + ec_GFp_smp_set_compr_coords +# undef ec_GFp_simple_group_check_discriminant +# define ec_GFp_simple_group_check_discriminant ec_GFp_simple_grp_chk_discrim + +/* Hack som long STORE names */ +# undef STORE_method_set_initialise_function +# define STORE_method_set_initialise_function STORE_meth_set_initialise_fn +# undef STORE_method_set_cleanup_function +# define STORE_method_set_cleanup_function STORE_meth_set_cleanup_fn +# undef STORE_method_set_generate_function +# define STORE_method_set_generate_function STORE_meth_set_generate_fn +# undef STORE_method_set_modify_function +# define STORE_method_set_modify_function STORE_meth_set_modify_fn +# undef STORE_method_set_revoke_function +# define STORE_method_set_revoke_function STORE_meth_set_revoke_fn +# undef STORE_method_set_delete_function +# define STORE_method_set_delete_function STORE_meth_set_delete_fn +# undef STORE_method_set_list_start_function +# define STORE_method_set_list_start_function STORE_meth_set_list_start_fn +# undef STORE_method_set_list_next_function +# define STORE_method_set_list_next_function STORE_meth_set_list_next_fn +# undef STORE_method_set_list_end_function +# define STORE_method_set_list_end_function STORE_meth_set_list_end_fn +# undef STORE_method_set_update_store_function +# define STORE_method_set_update_store_function STORE_meth_set_update_store_fn +# undef STORE_method_set_lock_store_function +# define STORE_method_set_lock_store_function STORE_meth_set_lock_store_fn +# undef STORE_method_set_unlock_store_function +# define STORE_method_set_unlock_store_function STORE_meth_set_unlock_store_fn +# undef STORE_method_get_initialise_function +# define STORE_method_get_initialise_function STORE_meth_get_initialise_fn +# undef STORE_method_get_cleanup_function +# define STORE_method_get_cleanup_function STORE_meth_get_cleanup_fn +# undef STORE_method_get_generate_function +# define STORE_method_get_generate_function STORE_meth_get_generate_fn +# undef STORE_method_get_modify_function +# define STORE_method_get_modify_function STORE_meth_get_modify_fn +# undef STORE_method_get_revoke_function +# define STORE_method_get_revoke_function STORE_meth_get_revoke_fn +# undef STORE_method_get_delete_function +# define STORE_method_get_delete_function STORE_meth_get_delete_fn +# undef STORE_method_get_list_start_function +# define STORE_method_get_list_start_function STORE_meth_get_list_start_fn +# undef STORE_method_get_list_next_function +# define STORE_method_get_list_next_function STORE_meth_get_list_next_fn +# undef STORE_method_get_list_end_function +# define STORE_method_get_list_end_function STORE_meth_get_list_end_fn +# undef STORE_method_get_update_store_function +# define STORE_method_get_update_store_function STORE_meth_get_update_store_fn +# undef STORE_method_get_lock_store_function +# define STORE_method_get_lock_store_function STORE_meth_get_lock_store_fn +# undef STORE_method_get_unlock_store_function +# define STORE_method_get_unlock_store_function STORE_meth_get_unlock_store_fn + +/* Hack some long TS names */ +# undef TS_RESP_CTX_set_status_info_cond +# define TS_RESP_CTX_set_status_info_cond TS_RESP_CTX_set_stat_info_cond +# undef TS_RESP_CTX_set_clock_precision_digits +# define TS_RESP_CTX_set_clock_precision_digits TS_RESP_CTX_set_clk_prec_digits +# undef TS_CONF_set_clock_precision_digits +# define TS_CONF_set_clock_precision_digits TS_CONF_set_clk_prec_digits + +/* Hack some long CMS names */ +# undef CMS_RecipientInfo_ktri_get0_algs +# define CMS_RecipientInfo_ktri_get0_algs CMS_RecipInfo_ktri_get0_algs +# undef CMS_RecipientInfo_ktri_get0_signer_id +# define CMS_RecipientInfo_ktri_get0_signer_id CMS_RecipInfo_ktri_get0_sigr_id +# undef CMS_OtherRevocationInfoFormat_it +# define CMS_OtherRevocationInfoFormat_it CMS_OtherRevocInfoFormat_it +# undef CMS_KeyAgreeRecipientIdentifier_it +# define CMS_KeyAgreeRecipientIdentifier_it CMS_KeyAgreeRecipIdentifier_it +# undef CMS_OriginatorIdentifierOrKey_it +# define CMS_OriginatorIdentifierOrKey_it CMS_OriginatorIdOrKey_it +# undef cms_SignerIdentifier_get0_signer_id +# define cms_SignerIdentifier_get0_signer_id cms_SignerId_get0_signer_id +# undef CMS_RecipientInfo_kari_get0_orig_id +# define CMS_RecipientInfo_kari_get0_orig_id CMS_RecipInfo_kari_get0_orig_id +# undef CMS_RecipientInfo_kari_get0_reks +# define CMS_RecipientInfo_kari_get0_reks CMS_RecipInfo_kari_get0_reks +# undef CMS_RecipientEncryptedKey_cert_cmp +# define CMS_RecipientEncryptedKey_cert_cmp CMS_RecipEncryptedKey_cert_cmp +# undef CMS_RecipientInfo_kari_set0_pkey +# define CMS_RecipientInfo_kari_set0_pkey CMS_RecipInfo_kari_set0_pkey +# undef CMS_RecipientEncryptedKey_get0_id +# define CMS_RecipientEncryptedKey_get0_id CMS_RecipEncryptedKey_get0_id +# undef CMS_RecipientInfo_kari_orig_id_cmp +# define CMS_RecipientInfo_kari_orig_id_cmp CMS_RecipInfo_kari_orig_id_cmp + +/* Hack some long DTLS1 names */ +# undef dtls1_retransmit_buffered_messages +# define dtls1_retransmit_buffered_messages dtls1_retransmit_buffered_msgs + +/* Hack some long SRP names */ +# undef SRP_generate_server_master_secret +# define SRP_generate_server_master_secret SRP_gen_server_master_secret +# undef SRP_generate_client_master_secret +# define SRP_generate_client_master_secret SRP_gen_client_master_secret + +/* Hack some long UI names */ +# undef UI_method_get_prompt_constructor +# define UI_method_get_prompt_constructor UI_method_get_prompt_constructr +# undef UI_method_set_prompt_constructor +# define UI_method_set_prompt_constructor UI_method_set_prompt_constructr + +# endif /* defined OPENSSL_SYS_VMS */ + +/* Case insensitive linking causes problems.... */ +# if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_OS2) +# undef ERR_load_CRYPTO_strings +# define ERR_load_CRYPTO_strings ERR_load_CRYPTOlib_strings +# undef OCSP_crlID_new +# define OCSP_crlID_new OCSP_crlID2_new + +# undef d2i_ECPARAMETERS +# define d2i_ECPARAMETERS d2i_UC_ECPARAMETERS +# undef i2d_ECPARAMETERS +# define i2d_ECPARAMETERS i2d_UC_ECPARAMETERS +# undef d2i_ECPKPARAMETERS +# define d2i_ECPKPARAMETERS d2i_UC_ECPKPARAMETERS +# undef i2d_ECPKPARAMETERS +# define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS + +/* + * These functions do not seem to exist! However, I'm paranoid... Original + * command in x509v3.h: These functions are being redefined in another + * directory, and clash when the linker is case-insensitive, so let's hide + * them a little, by giving them an extra 'o' at the beginning of the name... + */ +# undef X509v3_cleanup_extensions +# define X509v3_cleanup_extensions oX509v3_cleanup_extensions +# undef X509v3_add_extension +# define X509v3_add_extension oX509v3_add_extension +# undef X509v3_add_netscape_extensions +# define X509v3_add_netscape_extensions oX509v3_add_netscape_extensions +# undef X509v3_add_standard_extensions +# define X509v3_add_standard_extensions oX509v3_add_standard_extensions + +/* This one clashes with CMS_data_create */ +# undef cms_Data_create +# define cms_Data_create priv_cms_Data_create + +# endif + +#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/Sources/OpenSSL/include/openssl/tls1.h b/Sources/OpenSSL/include/openssl/tls1.h new file mode 100644 index 0000000000..b6b8b6d66c --- /dev/null +++ b/Sources/OpenSSL/include/openssl/tls1.h @@ -0,0 +1,813 @@ +/* ssl/tls1.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +/* ==================================================================== + * 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 + +# include "buffer.h" + +#ifdef __cplusplus +extern "C" { +#endif + +# define TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES 0 + +# define TLS1_VERSION 0x0301 +# define TLS1_1_VERSION 0x0302 +# define TLS1_2_VERSION 0x0303 +# define TLS_MAX_VERSION TLS1_2_VERSION + +# define TLS1_VERSION_MAJOR 0x03 +# define TLS1_VERSION_MINOR 0x01 + +# define TLS1_1_VERSION_MAJOR 0x03 +# define TLS1_1_VERSION_MINOR 0x02 + +# define TLS1_2_VERSION_MAJOR 0x03 +# define TLS1_2_VERSION_MINOR 0x03 + +# define TLS1_get_version(s) \ + ((s->version >> 8) == TLS1_VERSION_MAJOR ? s->version : 0) + +# define TLS1_get_client_version(s) \ + ((s->client_version >> 8) == TLS1_VERSION_MAJOR ? s->client_version : 0) + +# define TLS1_AD_DECRYPTION_FAILED 21 +# define TLS1_AD_RECORD_OVERFLOW 22 +# define TLS1_AD_UNKNOWN_CA 48/* fatal */ +# define TLS1_AD_ACCESS_DENIED 49/* fatal */ +# define TLS1_AD_DECODE_ERROR 50/* fatal */ +# define TLS1_AD_DECRYPT_ERROR 51 +# define TLS1_AD_EXPORT_RESTRICTION 60/* fatal */ +# define TLS1_AD_PROTOCOL_VERSION 70/* fatal */ +# define TLS1_AD_INSUFFICIENT_SECURITY 71/* fatal */ +# define TLS1_AD_INTERNAL_ERROR 80/* fatal */ +# define TLS1_AD_INAPPROPRIATE_FALLBACK 86/* fatal */ +# define TLS1_AD_USER_CANCELLED 90 +# define TLS1_AD_NO_RENEGOTIATION 100 +/* codes 110-114 are from RFC3546 */ +# define TLS1_AD_UNSUPPORTED_EXTENSION 110 +# define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111 +# define TLS1_AD_UNRECOGNIZED_NAME 112 +# define TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE 113 +# define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114 +# define TLS1_AD_UNKNOWN_PSK_IDENTITY 115/* fatal */ + +/* ExtensionType values from RFC3546 / RFC4366 / RFC6066 */ +# define TLSEXT_TYPE_server_name 0 +# define TLSEXT_TYPE_max_fragment_length 1 +# define TLSEXT_TYPE_client_certificate_url 2 +# define TLSEXT_TYPE_trusted_ca_keys 3 +# define TLSEXT_TYPE_truncated_hmac 4 +# define TLSEXT_TYPE_status_request 5 +/* ExtensionType values from RFC4681 */ +# define TLSEXT_TYPE_user_mapping 6 +/* ExtensionType values from RFC5878 */ +# define TLSEXT_TYPE_client_authz 7 +# define TLSEXT_TYPE_server_authz 8 +/* ExtensionType values from RFC6091 */ +# define TLSEXT_TYPE_cert_type 9 + +/* ExtensionType values from RFC4492 */ +# define TLSEXT_TYPE_elliptic_curves 10 +# define TLSEXT_TYPE_ec_point_formats 11 + +/* ExtensionType value from RFC5054 */ +# define TLSEXT_TYPE_srp 12 + +/* ExtensionType values from RFC5246 */ +# define TLSEXT_TYPE_signature_algorithms 13 + +/* ExtensionType value from RFC5764 */ +# define TLSEXT_TYPE_use_srtp 14 + +/* ExtensionType value from RFC5620 */ +# define TLSEXT_TYPE_heartbeat 15 + +/* ExtensionType value from draft-ietf-tls-applayerprotoneg-00 */ +# define TLSEXT_TYPE_application_layer_protocol_negotiation 16 + +/* + * ExtensionType value for TLS padding extension. + * http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml + * http://tools.ietf.org/html/draft-agl-tls-padding-03 + */ +# define TLSEXT_TYPE_padding 21 + +/* ExtensionType value from RFC4507 */ +# define TLSEXT_TYPE_session_ticket 35 + +/* ExtensionType value from draft-rescorla-tls-opaque-prf-input-00.txt */ +# if 0 +/* + * will have to be provided externally for now , + * i.e. build with -DTLSEXT_TYPE_opaque_prf_input=38183 + * using whatever extension number you'd like to try + */ +# define TLSEXT_TYPE_opaque_prf_input ?? +# endif + +/* Temporary extension type */ +# define TLSEXT_TYPE_renegotiate 0xff01 + +# ifndef OPENSSL_NO_NEXTPROTONEG +/* This is not an IANA defined extension number */ +# define TLSEXT_TYPE_next_proto_neg 13172 +# endif + +/* NameType value from RFC 3546 */ +# define TLSEXT_NAMETYPE_host_name 0 +/* status request value from RFC 3546 */ +# define TLSEXT_STATUSTYPE_ocsp 1 + +/* ECPointFormat values from draft-ietf-tls-ecc-12 */ +# define TLSEXT_ECPOINTFORMAT_first 0 +# define TLSEXT_ECPOINTFORMAT_uncompressed 0 +# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 +# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 +# define TLSEXT_ECPOINTFORMAT_last 2 + +/* Signature and hash algorithms from RFC 5246 */ + +# define TLSEXT_signature_anonymous 0 +# define TLSEXT_signature_rsa 1 +# define TLSEXT_signature_dsa 2 +# define TLSEXT_signature_ecdsa 3 + +/* Total number of different signature algorithms */ +# define TLSEXT_signature_num 4 + +# define TLSEXT_hash_none 0 +# define TLSEXT_hash_md5 1 +# define TLSEXT_hash_sha1 2 +# define TLSEXT_hash_sha224 3 +# define TLSEXT_hash_sha256 4 +# define TLSEXT_hash_sha384 5 +# define TLSEXT_hash_sha512 6 + +/* Total number of different digest algorithms */ + +# define TLSEXT_hash_num 7 + +/* Flag set for unrecognised algorithms */ +# define TLSEXT_nid_unknown 0x1000000 + +/* ECC curves */ + +# define TLSEXT_curve_P_256 23 +# define TLSEXT_curve_P_384 24 + +# ifndef OPENSSL_NO_TLSEXT + +# define TLSEXT_MAXLEN_host_name 255 + +const char *SSL_get_servername(const SSL *s, const int type); +int SSL_get_servername_type(const SSL *s); +/* + * SSL_export_keying_material exports a value derived from the master secret, + * as specified in RFC 5705. It writes |olen| bytes to |out| given a label and + * optional context. (Since a zero length context is allowed, the |use_context| + * flag controls whether a context is included.) It returns 1 on success and + * zero otherwise. + */ +int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, + const char *label, size_t llen, + const unsigned char *p, size_t plen, + int use_context); + +int SSL_get_sigalgs(SSL *s, int idx, + int *psign, int *phash, int *psignandhash, + unsigned char *rsig, unsigned char *rhash); + +int SSL_get_shared_sigalgs(SSL *s, int idx, + int *psign, int *phash, int *psignandhash, + unsigned char *rsig, unsigned char *rhash); + +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) + +# define SSL_set_tlsext_debug_callback(ssl, 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) + +# define SSL_set_tlsext_status_type(ssl, type) \ +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) + +# define SSL_set_tlsext_status_exts(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg) + +# define SSL_get_tlsext_status_ids(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg) + +# define SSL_set_tlsext_status_ids(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg) + +# define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \ +SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0, (void *)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) + +# define SSL_CTX_set_tlsext_servername_callback(ctx, 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 +# define SSL_TLSEXT_ERR_ALERT_FATAL 2 +# 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) + +# define SSL_CTX_get_tlsext_ticket_keys(ctx, keys, keylen) \ + 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)) + +# define SSL_CTX_set_tlsext_status_cb(ssl, cb) \ +SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,(void (*)(void))cb) + +# define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ +SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg) + +# define SSL_set_tlsext_opaque_prf_input(s, src, len) \ +SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT, len, src) +# define SSL_CTX_set_tlsext_opaque_prf_input_callback(ctx, cb) \ +SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB, (void (*)(void))cb) +# define SSL_CTX_set_tlsext_opaque_prf_input_callback_arg(ctx, arg) \ +SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG, 0, arg) + +# 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) + +# ifndef OPENSSL_NO_HEARTBEATS +# define SSL_TLSEXT_HB_ENABLED 0x01 +# define SSL_TLSEXT_HB_DONT_SEND_REQUESTS 0x02 +# define SSL_TLSEXT_HB_DONT_RECV_REQUESTS 0x04 + +# define SSL_get_tlsext_heartbeat_pending(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING,0,NULL) +# define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ + SSL_ctrl((ssl),SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) +# endif +# endif + +/* PSK ciphersuites from 4279 */ +# define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A +# 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 + +/* + * Additional TLS ciphersuites from expired Internet Draft + * draft-ietf-tls-56-bit-ciphersuites-01.txt (available if + * TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES is defined, see s3_lib.c). We + * actually treat them like SSL 3.0 ciphers, which we probably shouldn't. + * Note that the first two are actually not in the IDs. + */ +# define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5 0x03000060/* not in + * ID */ +# define TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 0x03000061/* not in + * ID */ +# define TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA 0x03000062 +# define TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA 0x03000063 +# define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA 0x03000064 +# define TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA 0x03000065 +# define TLS1_CK_DHE_DSS_WITH_RC4_128_SHA 0x03000066 + +/* AES ciphersuites from RFC3268 */ + +# define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F +# define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030 +# define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031 +# 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 +# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA 0x03000038 +# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA 0x03000039 +# define TLS1_CK_ADH_WITH_AES_256_SHA 0x0300003A + +/* TLS v1.2 ciphersuites */ +# define TLS1_CK_RSA_WITH_NULL_SHA256 0x0300003B +# define TLS1_CK_RSA_WITH_AES_128_SHA256 0x0300003C +# define TLS1_CK_RSA_WITH_AES_256_SHA256 0x0300003D +# define TLS1_CK_DH_DSS_WITH_AES_128_SHA256 0x0300003E +# define TLS1_CK_DH_RSA_WITH_AES_128_SHA256 0x0300003F +# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA256 0x03000040 + +/* Camellia ciphersuites from RFC4132 */ +# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000041 +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000042 +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000043 +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000044 +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000045 +# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA 0x03000046 + +/* TLS v1.2 ciphersuites */ +# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA256 0x03000067 +# define TLS1_CK_DH_DSS_WITH_AES_256_SHA256 0x03000068 +# define TLS1_CK_DH_RSA_WITH_AES_256_SHA256 0x03000069 +# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA256 0x0300006A +# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA256 0x0300006B +# define TLS1_CK_ADH_WITH_AES_128_SHA256 0x0300006C +# define TLS1_CK_ADH_WITH_AES_256_SHA256 0x0300006D + +/* Camellia ciphersuites from RFC4132 */ +# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000084 +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000085 +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000086 +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000087 +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000088 +# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA 0x03000089 + +/* SEED ciphersuites from RFC4162 */ +# define TLS1_CK_RSA_WITH_SEED_SHA 0x03000096 +# define TLS1_CK_DH_DSS_WITH_SEED_SHA 0x03000097 +# define TLS1_CK_DH_RSA_WITH_SEED_SHA 0x03000098 +# define TLS1_CK_DHE_DSS_WITH_SEED_SHA 0x03000099 +# define TLS1_CK_DHE_RSA_WITH_SEED_SHA 0x0300009A +# define TLS1_CK_ADH_WITH_SEED_SHA 0x0300009B + +/* TLS v1.2 GCM ciphersuites from RFC5288 */ +# define TLS1_CK_RSA_WITH_AES_128_GCM_SHA256 0x0300009C +# define TLS1_CK_RSA_WITH_AES_256_GCM_SHA384 0x0300009D +# define TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256 0x0300009E +# define TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384 0x0300009F +# define TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256 0x030000A0 +# define TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384 0x030000A1 +# define TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256 0x030000A2 +# define TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384 0x030000A3 +# define TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256 0x030000A4 +# define TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384 0x030000A5 +# define TLS1_CK_ADH_WITH_AES_128_GCM_SHA256 0x030000A6 +# define TLS1_CK_ADH_WITH_AES_256_GCM_SHA384 0x030000A7 + +/* + * ECC ciphersuites from draft-ietf-tls-ecc-12.txt with changes soon to be in + * draft 13 + */ +# define TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA 0x0300C001 +# define TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA 0x0300C002 +# define TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C003 +# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0x0300C004 +# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0x0300C005 + +# define TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA 0x0300C006 +# define TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA 0x0300C007 +# define TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C008 +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0x0300C009 +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0x0300C00A + +# define TLS1_CK_ECDH_RSA_WITH_NULL_SHA 0x0300C00B +# define TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA 0x0300C00C +# define TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA 0x0300C00D +# define TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA 0x0300C00E +# define TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA 0x0300C00F + +# define TLS1_CK_ECDHE_RSA_WITH_NULL_SHA 0x0300C010 +# define TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA 0x0300C011 +# define TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA 0x0300C012 +# define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA 0x0300C013 +# define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA 0x0300C014 + +# define TLS1_CK_ECDH_anon_WITH_NULL_SHA 0x0300C015 +# define TLS1_CK_ECDH_anon_WITH_RC4_128_SHA 0x0300C016 +# define TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA 0x0300C017 +# define TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA 0x0300C018 +# define TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA 0x0300C019 + +/* SRP ciphersuites from RFC 5054 */ +# define TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA 0x0300C01A +# define TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA 0x0300C01B +# define TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA 0x0300C01C +# define TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA 0x0300C01D +# define TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA 0x0300C01E +# define TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA 0x0300C01F +# define TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA 0x0300C020 +# define TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA 0x0300C021 +# 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 +# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384 0x0300C026 +# define TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256 0x0300C027 +# define TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384 0x0300C028 +# define TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256 0x0300C029 +# define TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384 0x0300C02A + +/* ECDH GCM based ciphersuites from RFC5289 */ +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02B +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02C +# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02D +# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02E +# define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0x0300C02F +# define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0x0300C030 +# define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 +# define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 + +/* + * XXX * Backward compatibility alert: + * Older versions of OpenSSL gave + * some DHE ciphers names with "EDH" + * instead of "DHE". Going forward, we + * should be using DHE + * everywhere, though we may indefinitely maintain + * aliases for users + * or configurations that used "EDH" + + */ +# define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5 "EXP1024-RC4-MD5" +# define TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 "EXP1024-RC2-CBC-MD5" +# define TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DES-CBC-SHA" +# define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DHE-DSS-DES-CBC-SHA" +# define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA "EXP1024-RC4-SHA" +# define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA "EXP1024-DHE-DSS-RC4-SHA" +# define TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA "DHE-DSS-RC4-SHA" + +/* AES ciphersuites from RFC3268 */ +# define TLS1_TXT_RSA_WITH_AES_128_SHA "AES128-SHA" +# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA "DH-DSS-AES128-SHA" +# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA "DH-RSA-AES128-SHA" +# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA "DHE-DSS-AES128-SHA" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA "DHE-RSA-AES128-SHA" +# define TLS1_TXT_ADH_WITH_AES_128_SHA "ADH-AES128-SHA" + +# define TLS1_TXT_RSA_WITH_AES_256_SHA "AES256-SHA" +# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA "DH-DSS-AES256-SHA" +# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA "DH-RSA-AES256-SHA" +# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA "DHE-DSS-AES256-SHA" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA" +# define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA" + +/* ECC ciphersuites from draft-ietf-tls-ecc-01.txt (Mar 15, 2001) */ +# define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA "ECDH-ECDSA-NULL-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA "ECDH-ECDSA-RC4-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA "ECDH-ECDSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA "ECDH-ECDSA-AES128-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA "ECDH-ECDSA-AES256-SHA" + +# define TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA "ECDHE-ECDSA-NULL-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA "ECDHE-ECDSA-RC4-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "ECDHE-ECDSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "ECDHE-ECDSA-AES128-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "ECDHE-ECDSA-AES256-SHA" + +# define TLS1_TXT_ECDH_RSA_WITH_NULL_SHA "ECDH-RSA-NULL-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA "ECDH-RSA-RC4-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA "ECDH-RSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA "ECDH-RSA-AES128-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA "ECDH-RSA-AES256-SHA" + +# define TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA "ECDHE-RSA-NULL-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA "ECDHE-RSA-RC4-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA "ECDHE-RSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA "ECDHE-RSA-AES128-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA "ECDHE-RSA-AES256-SHA" + +# define TLS1_TXT_ECDH_anon_WITH_NULL_SHA "AECDH-NULL-SHA" +# define TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA "AECDH-RC4-SHA" +# define TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA "AECDH-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA "AECDH-AES128-SHA" +# define TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA "AECDH-AES256-SHA" + +/* PSK ciphersuites from RFC 4279 */ +# define TLS1_TXT_PSK_WITH_RC4_128_SHA "PSK-RC4-SHA" +# define TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA "PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA "PSK-AES128-CBC-SHA" +# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA "PSK-AES256-CBC-SHA" + +/* SRP ciphersuite from RFC 5054 */ +# define TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA "SRP-3DES-EDE-CBC-SHA" +# define TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "SRP-RSA-3DES-EDE-CBC-SHA" +# define TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "SRP-DSS-3DES-EDE-CBC-SHA" +# define TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA "SRP-AES-128-CBC-SHA" +# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "SRP-RSA-AES-128-CBC-SHA" +# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "SRP-DSS-AES-128-CBC-SHA" +# define TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA "SRP-AES-256-CBC-SHA" +# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "SRP-RSA-AES-256-CBC-SHA" +# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "SRP-DSS-AES-256-CBC-SHA" + +/* Camellia ciphersuites from RFC4132 */ +# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA "CAMELLIA128-SHA" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA "DH-DSS-CAMELLIA128-SHA" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA "DH-RSA-CAMELLIA128-SHA" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "DHE-DSS-CAMELLIA128-SHA" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "DHE-RSA-CAMELLIA128-SHA" +# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA "ADH-CAMELLIA128-SHA" + +# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA "CAMELLIA256-SHA" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA "DH-DSS-CAMELLIA256-SHA" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA "DH-RSA-CAMELLIA256-SHA" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "DHE-DSS-CAMELLIA256-SHA" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "DHE-RSA-CAMELLIA256-SHA" +# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA "ADH-CAMELLIA256-SHA" + +/* SEED ciphersuites from RFC4162 */ +# define TLS1_TXT_RSA_WITH_SEED_SHA "SEED-SHA" +# define TLS1_TXT_DH_DSS_WITH_SEED_SHA "DH-DSS-SEED-SHA" +# define TLS1_TXT_DH_RSA_WITH_SEED_SHA "DH-RSA-SEED-SHA" +# define TLS1_TXT_DHE_DSS_WITH_SEED_SHA "DHE-DSS-SEED-SHA" +# define TLS1_TXT_DHE_RSA_WITH_SEED_SHA "DHE-RSA-SEED-SHA" +# define TLS1_TXT_ADH_WITH_SEED_SHA "ADH-SEED-SHA" + +/* TLS v1.2 ciphersuites */ +# define TLS1_TXT_RSA_WITH_NULL_SHA256 "NULL-SHA256" +# define TLS1_TXT_RSA_WITH_AES_128_SHA256 "AES128-SHA256" +# define TLS1_TXT_RSA_WITH_AES_256_SHA256 "AES256-SHA256" +# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA256 "DH-DSS-AES128-SHA256" +# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA256 "DH-RSA-AES128-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256 "DHE-DSS-AES128-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256 "DHE-RSA-AES128-SHA256" +# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA256 "DH-DSS-AES256-SHA256" +# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA256 "DH-RSA-AES256-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256 "DHE-DSS-AES256-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256 "DHE-RSA-AES256-SHA256" +# define TLS1_TXT_ADH_WITH_AES_128_SHA256 "ADH-AES128-SHA256" +# define TLS1_TXT_ADH_WITH_AES_256_SHA256 "ADH-AES256-SHA256" + +/* TLS v1.2 GCM ciphersuites from RFC5288 */ +# define TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256 "AES128-GCM-SHA256" +# define TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384 "AES256-GCM-SHA384" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256 "DHE-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384 "DHE-RSA-AES256-GCM-SHA384" +# define TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256 "DH-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384 "DH-RSA-AES256-GCM-SHA384" +# define TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256 "DHE-DSS-AES128-GCM-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384 "DHE-DSS-AES256-GCM-SHA384" +# define TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256 "DH-DSS-AES128-GCM-SHA256" +# define TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384 "DH-DSS-AES256-GCM-SHA384" +# define TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256 "ADH-AES128-GCM-SHA256" +# define TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384 "ADH-AES256-GCM-SHA384" + +/* 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" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384 "ECDH-ECDSA-AES256-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256 "ECDHE-RSA-AES128-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384 "ECDHE-RSA-AES256-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256 "ECDH-RSA-AES128-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384 "ECDH-RSA-AES256-SHA384" + +/* ECDH GCM based ciphersuites from RFC5289 */ +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "ECDHE-ECDSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "ECDHE-ECDSA-AES256-GCM-SHA384" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 "ECDH-ECDSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 "ECDH-ECDSA-AES256-GCM-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "ECDHE-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "ECDHE-RSA-AES256-GCM-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" + +# define TLS_CT_RSA_SIGN 1 +# define TLS_CT_DSS_SIGN 2 +# define TLS_CT_RSA_FIXED_DH 3 +# define TLS_CT_DSS_FIXED_DH 4 +# define TLS_CT_ECDSA_SIGN 64 +# define TLS_CT_RSA_FIXED_ECDH 65 +# define TLS_CT_ECDSA_FIXED_ECDH 66 +# define TLS_CT_GOST94_SIGN 21 +# define TLS_CT_GOST01_SIGN 22 +/* + * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see + * comment there) + */ +# define TLS_CT_NUMBER 9 + +# define TLS1_FINISH_MAC_LENGTH 12 + +# define TLS_MD_MAX_CONST_SIZE 20 +# define TLS_MD_CLIENT_FINISH_CONST "client finished" +# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 +# define TLS_MD_SERVER_FINISH_CONST "server finished" +# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 +# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +# define TLS_MD_KEY_EXPANSION_CONST "key expansion" +# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 +# define TLS_MD_CLIENT_WRITE_KEY_CONST "client write key" +# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 +# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +# define TLS_MD_IV_BLOCK_CONST "IV block" +# define TLS_MD_IV_BLOCK_CONST_SIZE 8 +# define TLS_MD_MASTER_SECRET_CONST "master secret" +# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 + +# ifdef CHARSET_EBCDIC +# undef TLS_MD_CLIENT_FINISH_CONST +/* + * client finished + */ +# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" + +# undef TLS_MD_SERVER_FINISH_CONST +/* + * server finished + */ +# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" + +# undef TLS_MD_SERVER_WRITE_KEY_CONST +/* + * server write key + */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" + +# undef TLS_MD_KEY_EXPANSION_CONST +/* + * key expansion + */ +# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" + +# undef TLS_MD_CLIENT_WRITE_KEY_CONST +/* + * client write key + */ +# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" + +# undef TLS_MD_SERVER_WRITE_KEY_CONST +/* + * server write key + */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" + +# undef TLS_MD_IV_BLOCK_CONST +/* + * IV block + */ +# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" + +# undef TLS_MD_MASTER_SECRET_CONST +/* + * master secret + */ +# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# endif + +/* TLS Session Ticket extension struct */ +struct tls_session_ticket_ext_st { + unsigned short length; + void *data; +}; + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/ts.h b/Sources/OpenSSL/include/openssl/ts.h new file mode 100644 index 0000000000..38811bc355 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/ts.h @@ -0,0 +1,862 @@ +/* crypto/ts/ts.h */ +/* + * Written by Zoltan Glozik (zglozik@opentsa.org) for the OpenSSL project + * 2002, 2003, 2004. + */ +/* ==================================================================== + * Copyright (c) 2006 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_TS_H +# define HEADER_TS_H + +# include "opensslconf.h" +# include "symhacks.h" +# ifndef OPENSSL_NO_BUFFER +# include "buffer.h" +# endif +# ifndef OPENSSL_NO_EVP +# include "evp.h" +# endif +# ifndef OPENSSL_NO_BIO +# include "bio.h" +# endif +# include "stack.h" +# include "asn1.h" +# include "safestack.h" + +# ifndef OPENSSL_NO_RSA +# include "rsa.h" +# endif + +# ifndef OPENSSL_NO_DSA +# include "dsa.h" +# endif + +# ifndef OPENSSL_NO_DH +# include "dh.h" +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef WIN32 +/* Under Win32 this is defined in wincrypt.h */ +# undef X509_NAME +# endif + +# include "x509.h" +# include "x509v3.h" + +/*- +MessageImprint ::= SEQUENCE { + hashAlgorithm AlgorithmIdentifier, + hashedMessage OCTET STRING } +*/ + +typedef struct TS_msg_imprint_st { + X509_ALGOR *hash_algo; + ASN1_OCTET_STRING *hashed_msg; +} TS_MSG_IMPRINT; + +/*- +TimeStampReq ::= SEQUENCE { + version INTEGER { v1(1) }, + messageImprint MessageImprint, + --a hash algorithm OID and the hash value of the data to be + --time-stamped + reqPolicy TSAPolicyId OPTIONAL, + nonce INTEGER OPTIONAL, + certReq BOOLEAN DEFAULT FALSE, + extensions [0] IMPLICIT Extensions OPTIONAL } +*/ + +typedef struct TS_req_st { + ASN1_INTEGER *version; + TS_MSG_IMPRINT *msg_imprint; + ASN1_OBJECT *policy_id; /* OPTIONAL */ + ASN1_INTEGER *nonce; /* OPTIONAL */ + ASN1_BOOLEAN cert_req; /* DEFAULT FALSE */ + STACK_OF(X509_EXTENSION) *extensions; /* [0] OPTIONAL */ +} TS_REQ; + +/*- +Accuracy ::= SEQUENCE { + seconds INTEGER OPTIONAL, + millis [0] INTEGER (1..999) OPTIONAL, + micros [1] INTEGER (1..999) OPTIONAL } +*/ + +typedef struct TS_accuracy_st { + ASN1_INTEGER *seconds; + ASN1_INTEGER *millis; + ASN1_INTEGER *micros; +} TS_ACCURACY; + +/*- +TSTInfo ::= SEQUENCE { + version INTEGER { v1(1) }, + policy TSAPolicyId, + messageImprint MessageImprint, + -- MUST have the same value as the similar field in + -- TimeStampReq + serialNumber INTEGER, + -- Time-Stamping users MUST be ready to accommodate integers + -- up to 160 bits. + genTime GeneralizedTime, + accuracy Accuracy OPTIONAL, + ordering BOOLEAN DEFAULT FALSE, + nonce INTEGER OPTIONAL, + -- MUST be present if the similar field was present + -- in TimeStampReq. In that case it MUST have the same value. + tsa [0] GeneralName OPTIONAL, + extensions [1] IMPLICIT Extensions OPTIONAL } +*/ + +typedef struct TS_tst_info_st { + ASN1_INTEGER *version; + ASN1_OBJECT *policy_id; + TS_MSG_IMPRINT *msg_imprint; + ASN1_INTEGER *serial; + ASN1_GENERALIZEDTIME *time; + TS_ACCURACY *accuracy; + ASN1_BOOLEAN ordering; + ASN1_INTEGER *nonce; + GENERAL_NAME *tsa; + STACK_OF(X509_EXTENSION) *extensions; +} TS_TST_INFO; + +/*- +PKIStatusInfo ::= SEQUENCE { + status PKIStatus, + statusString PKIFreeText OPTIONAL, + failInfo PKIFailureInfo OPTIONAL } + +From RFC 1510 - section 3.1.1: +PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String + -- text encoded as UTF-8 String (note: each UTF8String SHOULD + -- include an RFC 1766 language tag to indicate the language + -- of the contained text) +*/ + +/* Possible values for status. See ts_resp_print.c && ts_resp_verify.c. */ + +# define TS_STATUS_GRANTED 0 +# define TS_STATUS_GRANTED_WITH_MODS 1 +# define TS_STATUS_REJECTION 2 +# define TS_STATUS_WAITING 3 +# define TS_STATUS_REVOCATION_WARNING 4 +# define TS_STATUS_REVOCATION_NOTIFICATION 5 + +/* + * Possible values for failure_info. See ts_resp_print.c && ts_resp_verify.c + */ + +# define TS_INFO_BAD_ALG 0 +# define TS_INFO_BAD_REQUEST 2 +# define TS_INFO_BAD_DATA_FORMAT 5 +# define TS_INFO_TIME_NOT_AVAILABLE 14 +# define TS_INFO_UNACCEPTED_POLICY 15 +# define TS_INFO_UNACCEPTED_EXTENSION 16 +# define TS_INFO_ADD_INFO_NOT_AVAILABLE 17 +# define TS_INFO_SYSTEM_FAILURE 25 + +typedef struct TS_status_info_st { + ASN1_INTEGER *status; + STACK_OF(ASN1_UTF8STRING) *text; + ASN1_BIT_STRING *failure_info; +} TS_STATUS_INFO; + +DECLARE_STACK_OF(ASN1_UTF8STRING) +DECLARE_ASN1_SET_OF(ASN1_UTF8STRING) + +/*- +TimeStampResp ::= SEQUENCE { + status PKIStatusInfo, + timeStampToken TimeStampToken OPTIONAL } +*/ + +typedef struct TS_resp_st { + TS_STATUS_INFO *status_info; + PKCS7 *token; + TS_TST_INFO *tst_info; +} TS_RESP; + +/* The structure below would belong to the ESS component. */ + +/*- +IssuerSerial ::= SEQUENCE { + issuer GeneralNames, + serialNumber CertificateSerialNumber + } +*/ + +typedef struct ESS_issuer_serial { + STACK_OF(GENERAL_NAME) *issuer; + ASN1_INTEGER *serial; +} ESS_ISSUER_SERIAL; + +/*- +ESSCertID ::= SEQUENCE { + certHash Hash, + issuerSerial IssuerSerial OPTIONAL +} +*/ + +typedef struct ESS_cert_id { + ASN1_OCTET_STRING *hash; /* Always SHA-1 digest. */ + ESS_ISSUER_SERIAL *issuer_serial; +} ESS_CERT_ID; + +DECLARE_STACK_OF(ESS_CERT_ID) +DECLARE_ASN1_SET_OF(ESS_CERT_ID) + +/*- +SigningCertificate ::= SEQUENCE { + certs SEQUENCE OF ESSCertID, + policies SEQUENCE OF PolicyInformation OPTIONAL +} +*/ + +typedef struct ESS_signing_cert { + STACK_OF(ESS_CERT_ID) *cert_ids; + STACK_OF(POLICYINFO) *policy_info; +} ESS_SIGNING_CERT; + +TS_REQ *TS_REQ_new(void); +void TS_REQ_free(TS_REQ *a); +int i2d_TS_REQ(const TS_REQ *a, unsigned char **pp); +TS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length); + +TS_REQ *TS_REQ_dup(TS_REQ *a); + +TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); +int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); +TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); +int i2d_TS_REQ_bio(BIO *fp, TS_REQ *a); + +TS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void); +void TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a); +int i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp); +TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a, + const unsigned char **pp, long length); + +TS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a); + +TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a); +int i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a); +TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT **a); +int i2d_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT *a); + +TS_RESP *TS_RESP_new(void); +void TS_RESP_free(TS_RESP *a); +int i2d_TS_RESP(const TS_RESP *a, unsigned char **pp); +TS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length); +TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); +TS_RESP *TS_RESP_dup(TS_RESP *a); + +TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); +int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); +TS_RESP *d2i_TS_RESP_bio(BIO *fp, TS_RESP **a); +int i2d_TS_RESP_bio(BIO *fp, TS_RESP *a); + +TS_STATUS_INFO *TS_STATUS_INFO_new(void); +void TS_STATUS_INFO_free(TS_STATUS_INFO *a); +int i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp); +TS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a, + const unsigned char **pp, long length); +TS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a); + +TS_TST_INFO *TS_TST_INFO_new(void); +void TS_TST_INFO_free(TS_TST_INFO *a); +int i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp); +TS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp, + long length); +TS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a); + +TS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a); +int i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a); +TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO **a); +int i2d_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO *a); + +TS_ACCURACY *TS_ACCURACY_new(void); +void TS_ACCURACY_free(TS_ACCURACY *a); +int i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp); +TS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp, + long length); +TS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a); + +ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void); +void ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a); +int i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp); +ESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a, + const unsigned char **pp, + long length); +ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a); + +ESS_CERT_ID *ESS_CERT_ID_new(void); +void ESS_CERT_ID_free(ESS_CERT_ID *a); +int i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp); +ESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp, + long length); +ESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a); + +ESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void); +void ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a); +int i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp); +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); + +void ERR_load_TS_strings(void); + +int TS_REQ_set_version(TS_REQ *a, long version); +long TS_REQ_get_version(const TS_REQ *a); + +int TS_REQ_set_msg_imprint(TS_REQ *a, TS_MSG_IMPRINT *msg_imprint); +TS_MSG_IMPRINT *TS_REQ_get_msg_imprint(TS_REQ *a); + +int TS_MSG_IMPRINT_set_algo(TS_MSG_IMPRINT *a, X509_ALGOR *alg); +X509_ALGOR *TS_MSG_IMPRINT_get_algo(TS_MSG_IMPRINT *a); + +int TS_MSG_IMPRINT_set_msg(TS_MSG_IMPRINT *a, unsigned char *d, int len); +ASN1_OCTET_STRING *TS_MSG_IMPRINT_get_msg(TS_MSG_IMPRINT *a); + +int TS_REQ_set_policy_id(TS_REQ *a, ASN1_OBJECT *policy); +ASN1_OBJECT *TS_REQ_get_policy_id(TS_REQ *a); + +int TS_REQ_set_nonce(TS_REQ *a, const ASN1_INTEGER *nonce); +const ASN1_INTEGER *TS_REQ_get_nonce(const TS_REQ *a); + +int TS_REQ_set_cert_req(TS_REQ *a, int cert_req); +int TS_REQ_get_cert_req(const TS_REQ *a); + +STACK_OF(X509_EXTENSION) *TS_REQ_get_exts(TS_REQ *a); +void TS_REQ_ext_free(TS_REQ *a); +int TS_REQ_get_ext_count(TS_REQ *a); +int TS_REQ_get_ext_by_NID(TS_REQ *a, int nid, int lastpos); +int TS_REQ_get_ext_by_OBJ(TS_REQ *a, ASN1_OBJECT *obj, int lastpos); +int TS_REQ_get_ext_by_critical(TS_REQ *a, int crit, int lastpos); +X509_EXTENSION *TS_REQ_get_ext(TS_REQ *a, int loc); +X509_EXTENSION *TS_REQ_delete_ext(TS_REQ *a, int loc); +int TS_REQ_add_ext(TS_REQ *a, X509_EXTENSION *ex, int loc); +void *TS_REQ_get_ext_d2i(TS_REQ *a, int nid, int *crit, int *idx); + +/* Function declarations for TS_REQ defined in ts/ts_req_print.c */ + +int TS_REQ_print_bio(BIO *bio, TS_REQ *a); + +/* Function declarations for TS_RESP defined in ts/ts_resp_utils.c */ + +int TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *info); +TS_STATUS_INFO *TS_RESP_get_status_info(TS_RESP *a); + +/* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */ +void TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info); +PKCS7 *TS_RESP_get_token(TS_RESP *a); +TS_TST_INFO *TS_RESP_get_tst_info(TS_RESP *a); + +int TS_TST_INFO_set_version(TS_TST_INFO *a, long version); +long TS_TST_INFO_get_version(const TS_TST_INFO *a); + +int TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy_id); +ASN1_OBJECT *TS_TST_INFO_get_policy_id(TS_TST_INFO *a); + +int TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint); +TS_MSG_IMPRINT *TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a); + +int TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial); +const ASN1_INTEGER *TS_TST_INFO_get_serial(const TS_TST_INFO *a); + +int TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime); +const ASN1_GENERALIZEDTIME *TS_TST_INFO_get_time(const TS_TST_INFO *a); + +int TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy); +TS_ACCURACY *TS_TST_INFO_get_accuracy(TS_TST_INFO *a); + +int TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds); +const ASN1_INTEGER *TS_ACCURACY_get_seconds(const TS_ACCURACY *a); + +int TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis); +const ASN1_INTEGER *TS_ACCURACY_get_millis(const TS_ACCURACY *a); + +int TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros); +const ASN1_INTEGER *TS_ACCURACY_get_micros(const TS_ACCURACY *a); + +int TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering); +int TS_TST_INFO_get_ordering(const TS_TST_INFO *a); + +int TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce); +const ASN1_INTEGER *TS_TST_INFO_get_nonce(const TS_TST_INFO *a); + +int TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa); +GENERAL_NAME *TS_TST_INFO_get_tsa(TS_TST_INFO *a); + +STACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a); +void TS_TST_INFO_ext_free(TS_TST_INFO *a); +int TS_TST_INFO_get_ext_count(TS_TST_INFO *a); +int TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos); +int TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, ASN1_OBJECT *obj, int lastpos); +int TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos); +X509_EXTENSION *TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc); +X509_EXTENSION *TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc); +int TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc); +void *TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx); + +/* + * Declarations related to response generation, defined in ts/ts_resp_sign.c. + */ + +/* Optional flags for response generation. */ + +/* Don't include the TSA name in response. */ +# define TS_TSA_NAME 0x01 + +/* Set ordering to true in response. */ +# define TS_ORDERING 0x02 + +/* + * Include the signer certificate and the other specified certificates in + * the ESS signing certificate attribute beside the PKCS7 signed data. + * Only the signer certificates is included by default. + */ +# define TS_ESS_CERT_ID_CHAIN 0x04 + +/* Forward declaration. */ +struct TS_resp_ctx; + +/* This must return a unique number less than 160 bits long. */ +typedef ASN1_INTEGER *(*TS_serial_cb) (struct TS_resp_ctx *, void *); + +/* + * This must return the seconds and microseconds since Jan 1, 1970 in the sec + * and usec variables allocated by the caller. Return non-zero for success + * and zero for failure. + */ +typedef int (*TS_time_cb) (struct TS_resp_ctx *, void *, long *sec, + long *usec); + +/* + * This must process the given extension. It can modify the TS_TST_INFO + * object of the context. Return values: !0 (processed), 0 (error, it must + * set the status info/failure info of the response). + */ +typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, + void *); + +typedef struct TS_resp_ctx { + X509 *signer_cert; + EVP_PKEY *signer_key; + STACK_OF(X509) *certs; /* Certs to include in signed data. */ + STACK_OF(ASN1_OBJECT) *policies; /* Acceptable policies. */ + ASN1_OBJECT *default_policy; /* It may appear in policies, too. */ + STACK_OF(EVP_MD) *mds; /* Acceptable message digests. */ + ASN1_INTEGER *seconds; /* accuracy, 0 means not specified. */ + ASN1_INTEGER *millis; /* accuracy, 0 means not specified. */ + ASN1_INTEGER *micros; /* accuracy, 0 means not specified. */ + unsigned clock_precision_digits; /* fraction of seconds in time stamp + * token. */ + unsigned flags; /* Optional info, see values above. */ + /* Callback functions. */ + TS_serial_cb serial_cb; + void *serial_cb_data; /* User data for serial_cb. */ + TS_time_cb time_cb; + void *time_cb_data; /* User data for time_cb. */ + TS_extension_cb extension_cb; + void *extension_cb_data; /* User data for extension_cb. */ + /* These members are used only while creating the response. */ + TS_REQ *request; + TS_RESP *response; + TS_TST_INFO *tst_info; +} TS_RESP_CTX; + +DECLARE_STACK_OF(EVP_MD) +DECLARE_ASN1_SET_OF(EVP_MD) + +/* Creates a response context that can be used for generating responses. */ +TS_RESP_CTX *TS_RESP_CTX_new(void); +void TS_RESP_CTX_free(TS_RESP_CTX *ctx); + +/* This parameter must be set. */ +int TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer); + +/* This parameter must be set. */ +int TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key); + +/* This parameter must be set. */ +int TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *def_policy); + +/* No additional certs are included in the response by default. */ +int TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs); + +/* + * Adds a new acceptable policy, only the default policy is accepted by + * default. + */ +int TS_RESP_CTX_add_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *policy); + +/* + * Adds a new acceptable message digest. Note that no message digests are + * accepted by default. The md argument is shared with the caller. + */ +int TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md); + +/* Accuracy is not included by default. */ +int TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx, + int secs, int millis, int micros); + +/* + * Clock precision digits, i.e. the number of decimal digits: '0' means sec, + * '3' msec, '6' usec, and so on. Default is 0. + */ +int TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx, + unsigned clock_precision_digits); +/* At most we accept usec precision. */ +# define TS_MAX_CLOCK_PRECISION_DIGITS 6 + +/* No flags are set by default. */ +void TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags); + +/* Default callback always returns a constant. */ +void TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data); + +/* Default callback uses the gettimeofday() and gmtime() system calls. */ +void TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data); + +/* + * Default callback rejects all extensions. The extension callback is called + * when the TS_TST_INFO object is already set up and not signed yet. + */ +/* FIXME: extension handling is not tested yet. */ +void TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx, + TS_extension_cb cb, void *data); + +/* The following methods can be used in the callbacks. */ +int TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx, + int status, const char *text); + +/* Sets the status info only if it is still TS_STATUS_GRANTED. */ +int TS_RESP_CTX_set_status_info_cond(TS_RESP_CTX *ctx, + int status, const char *text); + +int TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure); + +/* The get methods below can be used in the extension callback. */ +TS_REQ *TS_RESP_CTX_get_request(TS_RESP_CTX *ctx); + +TS_TST_INFO *TS_RESP_CTX_get_tst_info(TS_RESP_CTX *ctx); + +/* + * Creates the signed TS_TST_INFO and puts it in TS_RESP. + * In case of errors it sets the status info properly. + * Returns NULL only in case of memory allocation/fatal error. + */ +TS_RESP *TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio); + +/* + * Declarations related to response verification, + * they are defined in ts/ts_resp_verify.c. + */ + +int TS_RESP_verify_signature(PKCS7 *token, STACK_OF(X509) *certs, + X509_STORE *store, X509 **signer_out); + +/* Context structure for the generic verify method. */ + +/* Verify the signer's certificate and the signature of the response. */ +# define TS_VFY_SIGNATURE (1u << 0) +/* Verify the version number of the response. */ +# define TS_VFY_VERSION (1u << 1) +/* Verify if the policy supplied by the user matches the policy of the TSA. */ +# define TS_VFY_POLICY (1u << 2) +/* + * Verify the message imprint provided by the user. This flag should not be + * specified with TS_VFY_DATA. + */ +# define TS_VFY_IMPRINT (1u << 3) +/* + * Verify the message imprint computed by the verify method from the user + * provided data and the MD algorithm of the response. This flag should not + * be specified with TS_VFY_IMPRINT. + */ +# define TS_VFY_DATA (1u << 4) +/* Verify the nonce value. */ +# define TS_VFY_NONCE (1u << 5) +/* Verify if the TSA name field matches the signer certificate. */ +# define TS_VFY_SIGNER (1u << 6) +/* Verify if the TSA name field equals to the user provided name. */ +# define TS_VFY_TSA_NAME (1u << 7) + +/* You can use the following convenience constants. */ +# define TS_VFY_ALL_IMPRINT (TS_VFY_SIGNATURE \ + | TS_VFY_VERSION \ + | TS_VFY_POLICY \ + | TS_VFY_IMPRINT \ + | TS_VFY_NONCE \ + | TS_VFY_SIGNER \ + | TS_VFY_TSA_NAME) +# define TS_VFY_ALL_DATA (TS_VFY_SIGNATURE \ + | TS_VFY_VERSION \ + | TS_VFY_POLICY \ + | TS_VFY_DATA \ + | TS_VFY_NONCE \ + | TS_VFY_SIGNER \ + | TS_VFY_TSA_NAME) + +typedef struct TS_verify_ctx { + /* Set this to the union of TS_VFY_... flags you want to carry out. */ + unsigned flags; + /* Must be set only with TS_VFY_SIGNATURE. certs is optional. */ + X509_STORE *store; + STACK_OF(X509) *certs; + /* Must be set only with TS_VFY_POLICY. */ + ASN1_OBJECT *policy; + /* + * Must be set only with TS_VFY_IMPRINT. If md_alg is NULL, the + * algorithm from the response is used. + */ + X509_ALGOR *md_alg; + unsigned char *imprint; + unsigned imprint_len; + /* Must be set only with TS_VFY_DATA. */ + BIO *data; + /* Must be set only with TS_VFY_TSA_NAME. */ + ASN1_INTEGER *nonce; + /* Must be set only with TS_VFY_TSA_NAME. */ + GENERAL_NAME *tsa_name; +} TS_VERIFY_CTX; + +int TS_RESP_verify_response(TS_VERIFY_CTX *ctx, TS_RESP *response); +int TS_RESP_verify_token(TS_VERIFY_CTX *ctx, PKCS7 *token); + +/* + * Declarations related to response verification context, + * they are defined in ts/ts_verify_ctx.c. + */ + +/* Set all fields to zero. */ +TS_VERIFY_CTX *TS_VERIFY_CTX_new(void); +void TS_VERIFY_CTX_init(TS_VERIFY_CTX *ctx); +void TS_VERIFY_CTX_free(TS_VERIFY_CTX *ctx); +void TS_VERIFY_CTX_cleanup(TS_VERIFY_CTX *ctx); + +/*- + * If ctx is NULL, it allocates and returns a new object, otherwise + * it returns ctx. It initialises all the members as follows: + * flags = TS_VFY_ALL_IMPRINT & ~(TS_VFY_TSA_NAME | TS_VFY_SIGNATURE) + * certs = NULL + * store = NULL + * policy = policy from the request or NULL if absent (in this case + * TS_VFY_POLICY is cleared from flags as well) + * md_alg = MD algorithm from request + * imprint, imprint_len = imprint from request + * data = NULL + * nonce, nonce_len = nonce from the request or NULL if absent (in this case + * TS_VFY_NONCE is cleared from flags as well) + * tsa_name = NULL + * Important: after calling this method TS_VFY_SIGNATURE should be added! + */ +TS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX(TS_REQ *req, TS_VERIFY_CTX *ctx); + +/* Function declarations for TS_RESP defined in ts/ts_resp_print.c */ + +int TS_RESP_print_bio(BIO *bio, TS_RESP *a); +int TS_STATUS_INFO_print_bio(BIO *bio, TS_STATUS_INFO *a); +int TS_TST_INFO_print_bio(BIO *bio, TS_TST_INFO *a); + +/* Common utility functions defined in ts/ts_lib.c */ + +int TS_ASN1_INTEGER_print_bio(BIO *bio, const ASN1_INTEGER *num); +int TS_OBJ_print_bio(BIO *bio, const ASN1_OBJECT *obj); +int TS_ext_print_bio(BIO *bio, const STACK_OF(X509_EXTENSION) *extensions); +int TS_X509_ALGOR_print_bio(BIO *bio, const X509_ALGOR *alg); +int TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *msg); + +/* + * Function declarations for handling configuration options, defined in + * ts/ts_conf.c + */ + +X509 *TS_CONF_load_cert(const char *file); +STACK_OF(X509) *TS_CONF_load_certs(const char *file); +EVP_PKEY *TS_CONF_load_key(const char *file, const char *pass); +const char *TS_CONF_get_tsa_section(CONF *conf, const char *section); +int TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb, + TS_RESP_CTX *ctx); +int TS_CONF_set_crypto_device(CONF *conf, const char *section, + const char *device); +int TS_CONF_set_default_engine(const char *name); +int TS_CONF_set_signer_cert(CONF *conf, const char *section, + const char *cert, TS_RESP_CTX *ctx); +int TS_CONF_set_certs(CONF *conf, const char *section, const char *certs, + TS_RESP_CTX *ctx); +int TS_CONF_set_signer_key(CONF *conf, const char *section, + const char *key, const char *pass, + TS_RESP_CTX *ctx); +int TS_CONF_set_def_policy(CONF *conf, const char *section, + const char *policy, TS_RESP_CTX *ctx); +int TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_clock_precision_digits(CONF *conf, const char *section, + TS_RESP_CTX *ctx); +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. + */ +void ERR_load_TS_strings(void); + +/* Error codes for the TS functions. */ + +/* Function codes. */ +# define TS_F_D2I_TS_RESP 147 +# 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_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_RESP_VERIFY_TOKEN 107 +# 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_CERTIFICATE_VERIFY_ERROR 100 +# define TS_R_COULD_NOT_SET_ENGINE 127 +# define TS_R_COULD_NOT_SET_TIME 115 +# define TS_R_D2I_TS_RESP_INT_FAILED 128 +# 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_WRONG_CONTENT_TYPE 114 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/txt_db.h b/Sources/OpenSSL/include/openssl/txt_db.h new file mode 100644 index 0000000000..e16e960e8d --- /dev/null +++ b/Sources/OpenSSL/include/openssl/txt_db.h @@ -0,0 +1,112 @@ +/* crypto/txt_db/txt_db.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_TXT_DB_H +# define HEADER_TXT_DB_H + +# include "opensslconf.h" +# ifndef OPENSSL_NO_BIO +# include "bio.h" +# endif +# include "stack.h" +# include "lhash.h" + +# define DB_ERROR_OK 0 +# define DB_ERROR_MALLOC 1 +# define DB_ERROR_INDEX_CLASH 2 +# define DB_ERROR_INDEX_OUT_OF_RANGE 3 +# define DB_ERROR_NO_INDEX 4 +# define DB_ERROR_INSERT_INDEX_CLASH 5 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OPENSSL_STRING *OPENSSL_PSTRING; +DECLARE_SPECIAL_STACK_OF(OPENSSL_PSTRING, OPENSSL_STRING) + +typedef struct txt_db_st { + int num_fields; + STACK_OF(OPENSSL_PSTRING) *data; + LHASH_OF(OPENSSL_STRING) **index; + int (**qual) (OPENSSL_STRING *); + long error; + long arg1; + long arg2; + OPENSSL_STRING *arg_row; +} TXT_DB; + +# ifndef OPENSSL_NO_BIO +TXT_DB *TXT_DB_read(BIO *in, int num); +long TXT_DB_write(BIO *out, TXT_DB *db); +# else +TXT_DB *TXT_DB_read(char *in, int num); +long TXT_DB_write(char *out, TXT_DB *db); +# endif +int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), + LHASH_HASH_FN_TYPE hash, LHASH_COMP_FN_TYPE cmp); +void TXT_DB_free(TXT_DB *db); +OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, + OPENSSL_STRING *value); +int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *value); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/ui.h b/Sources/OpenSSL/include/openssl/ui.h new file mode 100644 index 0000000000..467bcc68ca --- /dev/null +++ b/Sources/OpenSSL/include/openssl/ui.h @@ -0,0 +1,415 @@ +/* crypto/ui/ui.h -*- mode:C; c-file-style: "eay" -*- */ +/* + * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project + * 2001. + */ +/* ==================================================================== + * Copyright (c) 2001 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_UI_H +# define HEADER_UI_H + +# ifndef OPENSSL_NO_DEPRECATED +# include "crypto.h" +# endif +# include "safestack.h" +# include "ossl_typ.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Declared already in ossl_typ.h */ +/* typedef struct ui_st UI; */ +/* typedef struct ui_method_st UI_METHOD; */ + +/* + * All the following functions return -1 or NULL on error and in some cases + * (UI_process()) -2 if interrupted or in some other way cancelled. When + * everything is fine, they return 0, a positive value or a non-NULL pointer, + * all depending on their purpose. + */ + +/* Creators and destructor. */ +UI *UI_new(void); +UI *UI_new_method(const UI_METHOD *method); +void UI_free(UI *ui); + +/*- + The following functions are used to add strings to be printed and prompt + strings to prompt for data. The names are UI_{add,dup}__string + and UI_{add,dup}_input_boolean. + + UI_{add,dup}__string have the following meanings: + add add a text or prompt string. The pointers given to these + functions are used verbatim, no copying is done. + dup make a copy of the text or prompt string, then add the copy + to the collection of strings in the user interface. + + The function is a name for the functionality that the given + string shall be used for. It can be one of: + input use the string as data prompt. + verify use the string as verification prompt. This + is used to verify a previous input. + info use the string for informational output. + error use the string for error output. + Honestly, there's currently no difference between info and error for the + moment. + + UI_{add,dup}_input_boolean have the same semantics for "add" and "dup", + and are typically used when one wants to prompt for a yes/no response. + + All of the functions in this group take a UI and a prompt string. + The string input and verify addition functions also take a flag argument, + a buffer for the result to end up with, a minimum input size and a maximum + input size (the result buffer MUST be large enough to be able to contain + the maximum number of characters). Additionally, the verify addition + functions takes another buffer to compare the result against. + The boolean input functions take an action description string (which should + be safe to ignore if the expected user action is obvious, for example with + a dialog box with an OK button and a Cancel button), a string of acceptable + characters to mean OK and to mean Cancel. The two last strings are checked + to make sure they don't have common characters. Additionally, the same + flag argument as for the string input is taken, as well as a result buffer. + The result buffer is required to be at least one byte long. Depending on + the answer, the first character from the OK or the Cancel character strings + will be stored in the first byte of the result buffer. No NUL will be + added, so the result is *not* a string. + + On success, the all return an index of the added information. That index + is usefull when retrieving results with UI_get0_result(). */ +int UI_add_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_dup_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_add_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_dup_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_add_info_string(UI *ui, const char *text); +int UI_dup_info_string(UI *ui, const char *text); +int UI_add_error_string(UI *ui, const char *text); +int UI_dup_error_string(UI *ui, const char *text); + +/* These are the possible flags. They can be or'ed together. */ +/* Use to have echoing of input */ +# define UI_INPUT_FLAG_ECHO 0x01 +/* + * Use a default password. Where that password is found is completely up to + * the application, it might for example be in the user data set with + * UI_add_user_data(). It is not recommended to have more than one input in + * each UI being marked with this flag, or the application might get + * confused. + */ +# define UI_INPUT_FLAG_DEFAULT_PWD 0x02 + +/*- + * The user of these routines may want to define flags of their own. The core + * UI won't look at those, but will pass them on to the method routines. They + * must use higher bits so they don't get confused with the UI bits above. + * UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use. A good + * example of use is this: + * + * #define MY_UI_FLAG1 (0x01 << UI_INPUT_FLAG_USER_BASE) + * +*/ +# define UI_INPUT_FLAG_USER_BASE 16 + +/*- + * The following function helps construct a prompt. object_desc is a + * textual short description of the object, for example "pass phrase", + * and object_name is the name of the object (might be a card name or + * a file name. + * The returned string shall always be allocated on the heap with + * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). + * + * If the ui_method doesn't contain a pointer to a user-defined prompt + * constructor, a default string is built, looking like this: + * + * "Enter {object_desc} for {object_name}:" + * + * So, if object_desc has the value "pass phrase" and object_name has + * the value "foo.key", the resulting string is: + * + * "Enter pass phrase for foo.key:" +*/ +char *UI_construct_prompt(UI *ui_method, + const char *object_desc, const char *object_name); + +/* + * The following function is used to store a pointer to user-specific data. + * Any previous such pointer will be returned and replaced. + * + * For callback purposes, this function makes a lot more sense than using + * ex_data, since the latter requires that different parts of OpenSSL or + * applications share the same ex_data index. + * + * Note that the UI_OpenSSL() method completely ignores the user data. Other + * methods may not, however. + */ +void *UI_add_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); + +/* 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 + * send down an integer, a data pointer or a function pointer, as well as be + * used to get information from a UI. + */ +int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); + +/* The commands */ +/* + * Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the + * OpenSSL error stack before printing any info or added error messages and + * before any prompting. + */ +# 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 + * if not. + */ +# define UI_CTRL_IS_REDOABLE 2 + +/* Some methods may use extra data */ +# 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) +int UI_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int UI_set_ex_data(UI *r, int idx, void *arg); +void *UI_get_ex_data(UI *r, int idx); + +/* Use specific methods instead of the built-in one */ +void UI_set_default_method(const UI_METHOD *meth); +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); + +/* The method with all the built-in thingies */ +UI_METHOD *UI_OpenSSL(void); + +/* ---------- For method writers ---------- */ +/*- + A method contains a number of functions that implement the low level + of the User Interface. The functions are: + + an opener This function starts a session, maybe by opening + a channel to a tty, or by opening a window. + a writer This function is called to write a given string, + maybe to the tty, maybe as a field label in a + window. + a flusher This function is called to flush everything that + has been output so far. It can be used to actually + display a dialog box after it has been built. + a reader This function is called to read a given prompt, + maybe from the tty, maybe from a field in a + window. Note that it's called wth all string + structures, not only the prompt ones, so it must + check such things itself. + a closer This function closes the session, maybe by closing + the channel to the tty, or closing the window. + + All these functions are expected to return: + + 0 on error. + 1 on success. + -1 on out-of-band events, for example if some prompting has + been canceled (by pressing Ctrl-C, for example). This is + only checked when returned by the flusher or the reader. + + The way this is used, the opener is first called, then the writer for all + strings, then the flusher, then the reader for all strings and finally the + closer. Note that if you want to prompt from a terminal or other command + line interface, the best is to have the reader also write the prompts + instead of having the writer do it. If you want to prompt from a dialog + box, the writer can be used to build up the contents of the box, and the + flusher to actually display the box and run the event loop until all data + has been given, after which the reader only grabs the given data and puts + them back into the UI strings. + + All method functions take a UI as argument. Additionally, the writer and + the reader take a UI_STRING. +*/ + +/* + * The UI_STRING type is the data structure that contains all the needed info + * about a string or a prompt, including test data for a verification prompt. + */ +typedef struct ui_string_st UI_STRING; +DECLARE_STACK_OF(UI_STRING) + +/* + * The different types of strings that are currently supported. This is only + * needed by method authors. + */ +enum UI_string_types { + UIT_NONE = 0, + UIT_PROMPT, /* Prompt for a string */ + UIT_VERIFY, /* Prompt for a string and verify */ + UIT_BOOLEAN, /* Prompt for a yes/no response */ + UIT_INFO, /* Send info to the user */ + UIT_ERROR /* Send an error message to the user */ +}; + +/* Create and manipulate methods */ +UI_METHOD *UI_create_method(char *name); +void UI_destroy_method(UI_METHOD *ui_method); +int UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui)); +int UI_method_set_writer(UI_METHOD *method, + int (*writer) (UI *ui, UI_STRING *uis)); +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_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 *); + +/* + * The following functions are helpers for method writers to access relevant + * data from a UI_STRING. + */ + +/* Return type of the UI_STRING */ +enum UI_string_types UI_get_string_type(UI_STRING *uis); +/* Return input flags of the UI_STRING */ +int UI_get_input_flags(UI_STRING *uis); +/* Return the actual string to output (the prompt, info or error) */ +const char *UI_get0_output_string(UI_STRING *uis); +/* + * Return the optional action string to output (the boolean promtp + * instruction) + */ +const char *UI_get0_action_string(UI_STRING *uis); +/* Return the result of a prompt */ +const char *UI_get0_result_string(UI_STRING *uis); +/* + * Return the string to test the result against. Only useful with verifies. + */ +const char *UI_get0_test_string(UI_STRING *uis); +/* Return the required minimum size of the result */ +int UI_get_result_minsize(UI_STRING *uis); +/* Return the required maximum size of the result */ +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); + +/* 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); + +/* 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. + */ +void ERR_load_UI_strings(void); + +/* Error codes for the UI functions. */ + +/* Function codes. */ +# define UI_F_GENERAL_ALLOCATE_BOOLEAN 108 +# define UI_F_GENERAL_ALLOCATE_PROMPT 109 +# define UI_F_GENERAL_ALLOCATE_STRING 100 +# 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_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_RESULT_TOO_LARGE 100 +# define UI_R_RESULT_TOO_SMALL 101 +# define UI_R_UNKNOWN_CONTROL_COMMAND 106 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/ui_compat.h b/Sources/OpenSSL/include/openssl/ui_compat.h new file mode 100644 index 0000000000..317bb8ab9d --- /dev/null +++ b/Sources/OpenSSL/include/openssl/ui_compat.h @@ -0,0 +1,88 @@ +/* crypto/ui/ui.h -*- mode:C; c-file-style: "eay" -*- */ +/* + * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project + * 2001. + */ +/* ==================================================================== + * Copyright (c) 2001 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#ifndef HEADER_UI_COMPAT_H +# define HEADER_UI_COMPAT_H + +# include "opensslconf.h" +# include "ui.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The following functions were previously part of the DES section, and are + * provided here for backward compatibility reasons. + */ + +# define des_read_pw_string(b,l,p,v) \ + _ossl_old_des_read_pw_string((b),(l),(p),(v)) +# define des_read_pw(b,bf,s,p,v) \ + _ossl_old_des_read_pw((b),(bf),(s),(p),(v)) + +int _ossl_old_des_read_pw_string(char *buf, int length, const char *prompt, + int verify); +int _ossl_old_des_read_pw(char *buf, char *buff, int size, const char *prompt, + int verify); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/whrlpool.h b/Sources/OpenSSL/include/openssl/whrlpool.h new file mode 100644 index 0000000000..b6f3d035f0 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/whrlpool.h @@ -0,0 +1,41 @@ +#ifndef HEADER_WHRLPOOL_H +# define HEADER_WHRLPOOL_H + +# include "e_os2.h" +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define WHIRLPOOL_DIGEST_LENGTH (512/8) +# define WHIRLPOOL_BBLOCK 512 +# define WHIRLPOOL_COUNTER (256/8) + +typedef struct { + union { + unsigned char c[WHIRLPOOL_DIGEST_LENGTH]; + /* double q is here to ensure 64-bit alignment */ + double q[WHIRLPOOL_DIGEST_LENGTH / sizeof(double)]; + } H; + unsigned char data[WHIRLPOOL_BBLOCK / 8]; + unsigned int bitoff; + size_t bitlen[WHIRLPOOL_COUNTER / sizeof(size_t)]; +} WHIRLPOOL_CTX; + +# ifndef OPENSSL_NO_WHIRLPOOL +# ifdef OPENSSL_FIPS +int private_WHIRLPOOL_Init(WHIRLPOOL_CTX *c); +# endif +int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); +int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *inp, size_t bytes); +void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *inp, size_t bits); +int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); +unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md); +# endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Sources/OpenSSL/include/openssl/x509.h b/Sources/OpenSSL/include/openssl/x509.h new file mode 100644 index 0000000000..ab0a60ef42 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/x509.h @@ -0,0 +1,1327 @@ +/* crypto/x509/x509.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * 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 + +# include "e_os2.h" +# include "symhacks.h" +# ifndef OPENSSL_NO_BUFFER +# include "buffer.h" +# endif +# ifndef OPENSSL_NO_EVP +# include "evp.h" +# endif +# ifndef OPENSSL_NO_BIO +# include "bio.h" +# endif +# include "stack.h" +# include "asn1.h" +# include "safestack.h" + +# ifndef OPENSSL_NO_EC +# include "ec.h" +# endif + +# ifndef OPENSSL_NO_ECDSA +# include "ecdsa.h" +# endif + +# ifndef OPENSSL_NO_ECDH +# include "ecdh.h" +# endif + +# ifndef OPENSSL_NO_DEPRECATED +# ifndef OPENSSL_NO_RSA +# include "rsa.h" +# endif +# ifndef OPENSSL_NO_DSA +# include "dsa.h" +# endif +# ifndef OPENSSL_NO_DH +# include "dh.h" +# endif +# endif + +# ifndef OPENSSL_NO_SHA +# include "sha.h" +# endif +# include "ossl_typ.h" + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_SYS_WIN32 +/* Under Win32 these are defined in wincrypt.h */ +# undef X509_NAME +# undef X509_CERT_PAIR +# undef X509_EXTENSIONS +# endif + +# define X509_FILETYPE_PEM 1 +# define X509_FILETYPE_ASN1 2 +# define X509_FILETYPE_DEFAULT 3 + +# define X509v3_KU_DIGITAL_SIGNATURE 0x0080 +# define X509v3_KU_NON_REPUDIATION 0x0040 +# define X509v3_KU_KEY_ENCIPHERMENT 0x0020 +# define X509v3_KU_DATA_ENCIPHERMENT 0x0010 +# define X509v3_KU_KEY_AGREEMENT 0x0008 +# define X509v3_KU_KEY_CERT_SIGN 0x0004 +# define X509v3_KU_CRL_SIGN 0x0002 +# define X509v3_KU_ENCIPHER_ONLY 0x0001 +# define X509v3_KU_DECIPHER_ONLY 0x8000 +# define X509v3_KU_UNDEF 0xffff + +typedef struct X509_objects_st { + int nid; + int (*a2i) (void); + int (*i2a) (void); +} X509_OBJECTS; + +struct X509_algor_st { + ASN1_OBJECT *algorithm; + ASN1_TYPE *parameter; +} /* X509_ALGOR */ ; + +DECLARE_ASN1_SET_OF(X509_ALGOR) + +typedef STACK_OF(X509_ALGOR) X509_ALGORS; + +typedef struct X509_val_st { + ASN1_TIME *notBefore; + ASN1_TIME *notAfter; +} X509_VAL; + +struct X509_pubkey_st { + X509_ALGOR *algor; + ASN1_BIT_STRING *public_key; + EVP_PKEY *pkey; +}; + +typedef struct X509_sig_st { + X509_ALGOR *algor; + ASN1_OCTET_STRING *digest; +} X509_SIG; + +typedef struct X509_name_entry_st { + ASN1_OBJECT *object; + ASN1_STRING *value; + int set; + int size; /* temp variable */ +} X509_NAME_ENTRY; + +DECLARE_STACK_OF(X509_NAME_ENTRY) +DECLARE_ASN1_SET_OF(X509_NAME_ENTRY) + +/* we always keep X509_NAMEs in 2 forms. */ +struct X509_name_st { + STACK_OF(X509_NAME_ENTRY) *entries; + int modified; /* true if 'bytes' needs to be built */ +# ifndef OPENSSL_NO_BUFFER + BUF_MEM *bytes; +# else + char *bytes; +# endif +/* unsigned long hash; Keep the hash around for lookups */ + unsigned char *canon_enc; + int canon_enclen; +} /* X509_NAME */ ; + +DECLARE_STACK_OF(X509_NAME) + +# define X509_EX_V_NETSCAPE_HACK 0x8000 +# define X509_EX_V_INIT 0x0001 +typedef struct X509_extension_st { + ASN1_OBJECT *object; + ASN1_BOOLEAN critical; + ASN1_OCTET_STRING *value; +} X509_EXTENSION; + +typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; + +DECLARE_STACK_OF(X509_EXTENSION) +DECLARE_ASN1_SET_OF(X509_EXTENSION) + +/* a sequence of these are used */ +typedef struct x509_attributes_st { + ASN1_OBJECT *object; + int single; /* 0 for a set, 1 for a single item (which is + * wrong) */ + union { + char *ptr; + /* + * 0 + */ STACK_OF(ASN1_TYPE) *set; + /* + * 1 + */ ASN1_TYPE *single; + } value; +} X509_ATTRIBUTE; + +DECLARE_STACK_OF(X509_ATTRIBUTE) +DECLARE_ASN1_SET_OF(X509_ATTRIBUTE) + +typedef struct X509_req_info_st { + ASN1_ENCODING enc; + ASN1_INTEGER *version; + X509_NAME *subject; + X509_PUBKEY *pubkey; + /* d=2 hl=2 l= 0 cons: cont: 00 */ + STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ +} X509_REQ_INFO; + +typedef struct X509_req_st { + X509_REQ_INFO *req_info; + X509_ALGOR *sig_alg; + ASN1_BIT_STRING *signature; + int references; +} X509_REQ; + +typedef struct x509_cinf_st { + ASN1_INTEGER *version; /* [ 0 ] default of v1 */ + ASN1_INTEGER *serialNumber; + X509_ALGOR *signature; + X509_NAME *issuer; + X509_VAL *validity; + X509_NAME *subject; + X509_PUBKEY *key; + ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */ + ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */ + STACK_OF(X509_EXTENSION) *extensions; /* [ 3 ] optional in v3 */ + ASN1_ENCODING enc; +} X509_CINF; + +/* + * This stuff is certificate "auxiliary info" it contains details which are + * useful in certificate stores and databases. When used this is tagged onto + * the end of the certificate itself + */ + +typedef struct x509_cert_aux_st { + STACK_OF(ASN1_OBJECT) *trust; /* trusted uses */ + STACK_OF(ASN1_OBJECT) *reject; /* rejected uses */ + ASN1_UTF8STRING *alias; /* "friendly name" */ + ASN1_OCTET_STRING *keyid; /* key id of private key */ + STACK_OF(X509_ALGOR) *other; /* other unspecified info */ +} X509_CERT_AUX; + +struct x509_st { + X509_CINF *cert_info; + X509_ALGOR *sig_alg; + ASN1_BIT_STRING *signature; + int valid; + int references; + char *name; + CRYPTO_EX_DATA ex_data; + /* These contain copies of various extension values */ + long ex_pathlen; + long ex_pcpathlen; + unsigned long ex_flags; + unsigned long ex_kusage; + unsigned long ex_xkusage; + unsigned long ex_nscert; + ASN1_OCTET_STRING *skid; + AUTHORITY_KEYID *akid; + X509_POLICY_CACHE *policy_cache; + STACK_OF(DIST_POINT) *crldp; + STACK_OF(GENERAL_NAME) *altname; + NAME_CONSTRAINTS *nc; +# ifndef OPENSSL_NO_RFC3779 + STACK_OF(IPAddressFamily) *rfc3779_addr; + struct ASIdentifiers_st *rfc3779_asid; +# endif +# ifndef OPENSSL_NO_SHA + unsigned char sha1_hash[SHA_DIGEST_LENGTH]; +# endif + X509_CERT_AUX *aux; +} /* X509 */ ; + +DECLARE_STACK_OF(X509) +DECLARE_ASN1_SET_OF(X509) + +/* This is used for a table of trust checking functions */ + +typedef struct x509_trust_st { + int trust; + int flags; + int (*check_trust) (struct x509_trust_st *, X509 *, int); + char *name; + int arg1; + void *arg2; +} X509_TRUST; + +DECLARE_STACK_OF(X509_TRUST) + +typedef struct x509_cert_pair_st { + X509 *forward; + X509 *reverse; +} X509_CERT_PAIR; + +/* standard trust ids */ + +# define X509_TRUST_DEFAULT -1/* Only valid in purpose settings */ + +# define X509_TRUST_COMPAT 1 +# define X509_TRUST_SSL_CLIENT 2 +# define X509_TRUST_SSL_SERVER 3 +# define X509_TRUST_EMAIL 4 +# define X509_TRUST_OBJECT_SIGN 5 +# define X509_TRUST_OCSP_SIGN 6 +# define X509_TRUST_OCSP_REQUEST 7 +# define X509_TRUST_TSA 8 + +/* Keep these up to date! */ +# define X509_TRUST_MIN 1 +# define X509_TRUST_MAX 8 + +/* trust_flags values */ +# define X509_TRUST_DYNAMIC 1 +# define X509_TRUST_DYNAMIC_NAME 2 + +/* check_trust return codes */ + +# define X509_TRUST_TRUSTED 1 +# define X509_TRUST_REJECTED 2 +# define X509_TRUST_UNTRUSTED 3 + +/* Flags for X509_print_ex() */ + +# define X509_FLAG_COMPAT 0 +# define X509_FLAG_NO_HEADER 1L +# define X509_FLAG_NO_VERSION (1L << 1) +# define X509_FLAG_NO_SERIAL (1L << 2) +# define X509_FLAG_NO_SIGNAME (1L << 3) +# define X509_FLAG_NO_ISSUER (1L << 4) +# define X509_FLAG_NO_VALIDITY (1L << 5) +# define X509_FLAG_NO_SUBJECT (1L << 6) +# define X509_FLAG_NO_PUBKEY (1L << 7) +# define X509_FLAG_NO_EXTENSIONS (1L << 8) +# define X509_FLAG_NO_SIGDUMP (1L << 9) +# define X509_FLAG_NO_AUX (1L << 10) +# define X509_FLAG_NO_ATTRIBUTES (1L << 11) +# define X509_FLAG_NO_IDS (1L << 12) + +/* Flags specific to X509_NAME_print_ex() */ + +/* The field separator information */ + +# define XN_FLAG_SEP_MASK (0xf << 16) + +# define XN_FLAG_COMPAT 0/* Traditional SSLeay: use old + * X509_NAME_print */ +# define XN_FLAG_SEP_COMMA_PLUS (1 << 16)/* RFC2253 ,+ */ +# define XN_FLAG_SEP_CPLUS_SPC (2 << 16)/* ,+ spaced: more readable */ +# define XN_FLAG_SEP_SPLUS_SPC (3 << 16)/* ;+ spaced */ +# define XN_FLAG_SEP_MULTILINE (4 << 16)/* One line per field */ + +# define XN_FLAG_DN_REV (1 << 20)/* Reverse DN order */ + +/* How the field name is shown */ + +# define XN_FLAG_FN_MASK (0x3 << 21) + +# define XN_FLAG_FN_SN 0/* Object short name */ +# define XN_FLAG_FN_LN (1 << 21)/* Object long name */ +# define XN_FLAG_FN_OID (2 << 21)/* Always use OIDs */ +# define XN_FLAG_FN_NONE (3 << 21)/* No field names */ + +# define XN_FLAG_SPC_EQ (1 << 23)/* Put spaces round '=' */ + +/* + * This determines if we dump fields we don't recognise: RFC2253 requires + * this. + */ + +# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24) + +# define XN_FLAG_FN_ALIGN (1 << 25)/* Align field names to 20 + * characters */ + +/* Complete set of RFC2253 flags */ + +# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \ + XN_FLAG_SEP_COMMA_PLUS | \ + XN_FLAG_DN_REV | \ + XN_FLAG_FN_SN | \ + XN_FLAG_DUMP_UNKNOWN_FIELDS) + +/* readable oneline form */ + +# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \ + ASN1_STRFLGS_ESC_QUOTE | \ + XN_FLAG_SEP_CPLUS_SPC | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_SN) + +/* readable multiline form */ + +# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + XN_FLAG_SEP_MULTILINE | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_LN | \ + XN_FLAG_FN_ALIGN) + +struct x509_revoked_st { + ASN1_INTEGER *serialNumber; + ASN1_TIME *revocationDate; + STACK_OF(X509_EXTENSION) /* optional */ *extensions; + /* Set up if indirect CRL */ + STACK_OF(GENERAL_NAME) *issuer; + /* Revocation reason */ + int reason; + int sequence; /* load sequence */ +}; + +DECLARE_STACK_OF(X509_REVOKED) +DECLARE_ASN1_SET_OF(X509_REVOKED) + +typedef struct X509_crl_info_st { + ASN1_INTEGER *version; + X509_ALGOR *sig_alg; + X509_NAME *issuer; + ASN1_TIME *lastUpdate; + ASN1_TIME *nextUpdate; + STACK_OF(X509_REVOKED) *revoked; + STACK_OF(X509_EXTENSION) /* [0] */ *extensions; + ASN1_ENCODING enc; +} X509_CRL_INFO; + +struct X509_crl_st { + /* actual signature */ + X509_CRL_INFO *crl; + X509_ALGOR *sig_alg; + ASN1_BIT_STRING *signature; + int references; + int flags; + /* Copies of various extensions */ + AUTHORITY_KEYID *akid; + ISSUING_DIST_POINT *idp; + /* Convenient breakdown of IDP */ + int idp_flags; + int idp_reasons; + /* CRL and base CRL numbers for delta processing */ + ASN1_INTEGER *crl_number; + ASN1_INTEGER *base_crl_number; +# ifndef OPENSSL_NO_SHA + unsigned char sha1_hash[SHA_DIGEST_LENGTH]; +# endif + STACK_OF(GENERAL_NAMES) *issuers; + const X509_CRL_METHOD *meth; + void *meth_data; +} /* X509_CRL */ ; + +DECLARE_STACK_OF(X509_CRL) +DECLARE_ASN1_SET_OF(X509_CRL) + +typedef struct private_key_st { + int version; + /* The PKCS#8 data types */ + X509_ALGOR *enc_algor; + ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */ + /* When decrypted, the following will not be NULL */ + EVP_PKEY *dec_pkey; + /* used to encrypt and decrypt */ + int key_length; + char *key_data; + int key_free; /* true if we should auto free key_data */ + /* expanded version of 'enc_algor' */ + EVP_CIPHER_INFO cipher; + int references; +} X509_PKEY; + +# ifndef OPENSSL_NO_EVP +typedef struct X509_info_st { + X509 *x509; + X509_CRL *crl; + X509_PKEY *x_pkey; + EVP_CIPHER_INFO enc_cipher; + int enc_len; + char *enc_data; + int references; +} X509_INFO; + +DECLARE_STACK_OF(X509_INFO) +# endif + +/* + * 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 + */ +typedef struct Netscape_spkac_st { + X509_PUBKEY *pubkey; + ASN1_IA5STRING *challenge; /* challenge sent in atlas >= PR2 */ +} NETSCAPE_SPKAC; + +typedef struct Netscape_spki_st { + NETSCAPE_SPKAC *spkac; /* signed public key and challenge */ + X509_ALGOR *sig_algor; + ASN1_BIT_STRING *signature; +} NETSCAPE_SPKI; + +/* Netscape certificate sequence structure */ +typedef struct Netscape_certificate_sequence { + ASN1_OBJECT *type; + STACK_OF(X509) *certs; +} NETSCAPE_CERT_SEQUENCE; + +/*- Unused (and iv length is wrong) +typedef struct CBCParameter_st + { + unsigned char iv[8]; + } CBC_PARAM; +*/ + +/* Password based encryption structure */ + +typedef struct PBEPARAM_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *iter; +} PBEPARAM; + +/* Password based encryption V2 structures */ + +typedef struct PBE2PARAM_st { + X509_ALGOR *keyfunc; + X509_ALGOR *encryption; +} PBE2PARAM; + +typedef struct PBKDF2PARAM_st { +/* Usually OCTET STRING but could be anything */ + ASN1_TYPE *salt; + ASN1_INTEGER *iter; + ASN1_INTEGER *keylength; + X509_ALGOR *prf; +} PBKDF2PARAM; + +/* PKCS#8 private key info structure */ + +struct pkcs8_priv_key_info_st { + /* Flag for various broken formats */ + int broken; +# define PKCS8_OK 0 +# define PKCS8_NO_OCTET 1 +# define PKCS8_EMBEDDED_PARAM 2 +# define PKCS8_NS_DB 3 +# define PKCS8_NEG_PRIVKEY 4 + ASN1_INTEGER *version; + X509_ALGOR *pkeyalg; + /* Should be OCTET STRING but some are broken */ + ASN1_TYPE *pkey; + STACK_OF(X509_ATTRIBUTE) *attributes; +}; + +#ifdef __cplusplus +} +#endif + +# include "x509_vfy.h" +# include "pkcs7.h" + +#ifdef __cplusplus +extern "C" { +#endif + +# define X509_EXT_PACK_UNKNOWN 1 +# define X509_EXT_PACK_STRING 2 + +# define X509_get_version(x) ASN1_INTEGER_get((x)->cert_info->version) +/* #define X509_get_serialNumber(x) ((x)->cert_info->serialNumber) */ +# define X509_get_notBefore(x) ((x)->cert_info->validity->notBefore) +# define X509_get_notAfter(x) ((x)->cert_info->validity->notAfter) +# define X509_extract_key(x) X509_get_pubkey(x)/*****/ +# define X509_REQ_get_version(x) ASN1_INTEGER_get((x)->req_info->version) +# define X509_REQ_get_subject_name(x) ((x)->req_info->subject) +# define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a) +# define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) +# define X509_get_signature_type(x) EVP_PKEY_type(OBJ_obj2nid((x)->sig_alg->algorithm)) + +# define X509_CRL_get_version(x) ASN1_INTEGER_get((x)->crl->version) +# define X509_CRL_get_lastUpdate(x) ((x)->crl->lastUpdate) +# define X509_CRL_get_nextUpdate(x) ((x)->crl->nextUpdate) +# define X509_CRL_get_issuer(x) ((x)->crl->issuer) +# define X509_CRL_get_REVOKED(x) ((x)->crl->revoked) + +void X509_CRL_set_default_method(const X509_CRL_METHOD *meth); +X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), + int (*crl_free) (X509_CRL *crl), + int (*crl_lookup) (X509_CRL *crl, + X509_REVOKED **ret, + ASN1_INTEGER *ser, + X509_NAME *issuer), + int (*crl_verify) (X509_CRL *crl, + EVP_PKEY *pk)); +void X509_CRL_METHOD_free(X509_CRL_METHOD *m); + +void X509_CRL_set_meth_data(X509_CRL *crl, void *dat); +void *X509_CRL_get_meth_data(X509_CRL *crl); + +/* + * This one is only used so that a binary form can output, as in + * i2d_X509_NAME(X509_get_X509_PUBKEY(x),&buf) + */ +# define X509_get_X509_PUBKEY(x) ((x)->cert_info->key) + +const char *X509_verify_cert_error_string(long n); + +# ifndef OPENSSL_NO_EVP +int X509_verify(X509 *a, EVP_PKEY *r); + +int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); +int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); +int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); + +NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len); +char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x); +EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x); +int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey); + +int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki); + +int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent); +int X509_signature_print(BIO *bp, X509_ALGOR *alg, ASN1_STRING *sig); + +int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); +int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert); +int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); +int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); +int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl); +int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); + +int X509_pubkey_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +# endif + +# ifndef OPENSSL_NO_FP_API +X509 *d2i_X509_fp(FILE *fp, X509 **x509); +int i2d_X509_fp(FILE *fp, X509 *x509); +X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); +int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl); +X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); +int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req); +# ifndef OPENSSL_NO_RSA +RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); +int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa); +RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); +int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa); +RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); +int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa); +# endif +# ifndef OPENSSL_NO_DSA +DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); +int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa); +DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); +int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa); +# endif +# ifndef OPENSSL_NO_EC +EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); +int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey); +EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); +int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey); +# endif +X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); +int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key); +int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); +int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); +# endif + +# ifndef OPENSSL_NO_BIO +X509 *d2i_X509_bio(BIO *bp, X509 **x509); +int i2d_X509_bio(BIO *bp, X509 *x509); +X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); +int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl); +X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); +int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req); +# ifndef OPENSSL_NO_RSA +RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); +int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa); +RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); +int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa); +RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); +int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa); +# endif +# ifndef OPENSSL_NO_DSA +DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); +int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa); +DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); +int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa); +# endif +# ifndef OPENSSL_NO_EC +EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); +int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey); +EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); +int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey); +# endif +X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); +int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key); +int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); +int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); +# endif + +X509 *X509_dup(X509 *x509); +X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa); +X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex); +X509_CRL *X509_CRL_dup(X509_CRL *crl); +X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev); +X509_REQ *X509_REQ_dup(X509_REQ *req); +X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn); +int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, + void *pval); +void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval, + X509_ALGOR *algor); +void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); +int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); + +X509_NAME *X509_NAME_dup(X509_NAME *xn); +X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); + +int X509_cmp_time(const ASN1_TIME *s, time_t *t); +int X509_cmp_current_time(const ASN1_TIME *s); +ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); +ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, + int offset_day, long offset_sec, time_t *t); +ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj); + +const char *X509_get_default_cert_area(void); +const char *X509_get_default_cert_dir(void); +const char *X509_get_default_cert_file(void); +const char *X509_get_default_cert_dir_env(void); +const char *X509_get_default_cert_file_env(void); +const char *X509_get_default_private_dir(void); + +X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey); + +DECLARE_ASN1_FUNCTIONS(X509_ALGOR) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS) +DECLARE_ASN1_FUNCTIONS(X509_VAL) + +DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) + +int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); +EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); +int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); +int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp); +EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length); +# ifndef OPENSSL_NO_RSA +int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp); +RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length); +# endif +# ifndef OPENSSL_NO_DSA +int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp); +DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); +# endif +# ifndef OPENSSL_NO_EC +int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp); +EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length); +# endif + +DECLARE_ASN1_FUNCTIONS(X509_SIG) +DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) +DECLARE_ASN1_FUNCTIONS(X509_REQ) + +DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) +X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); + +DECLARE_ASN1_FUNCTIONS(X509_EXTENSION) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS) + +DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) + +DECLARE_ASN1_FUNCTIONS(X509_NAME) + +int X509_NAME_set(X509_NAME **xn, X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(X509_CINF) + +DECLARE_ASN1_FUNCTIONS(X509) +DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) + +DECLARE_ASN1_FUNCTIONS(X509_CERT_PAIR) + +int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); +int X509_set_ex_data(X509 *r, int idx, void *arg); +void *X509_get_ex_data(X509 *r, int idx); +int i2d_X509_AUX(X509 *a, unsigned char **pp); +X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length); + +int i2d_re_X509_tbs(X509 *x, unsigned char **pp); + +void X509_get0_signature(ASN1_BIT_STRING **psig, X509_ALGOR **palg, + const X509 *x); +int X509_get_signature_nid(const X509 *x); + +int X509_alias_set1(X509 *x, unsigned char *name, int len); +int X509_keyid_set1(X509 *x, unsigned char *id, int len); +unsigned char *X509_alias_get0(X509 *x, int *len); +unsigned char *X509_keyid_get0(X509 *x, int *len); +int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, + int); +int X509_TRUST_set(int *t, int trust); +int X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj); +int X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj); +void X509_trust_clear(X509 *x); +void X509_reject_clear(X509 *x); + +DECLARE_ASN1_FUNCTIONS(X509_REVOKED) +DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) +DECLARE_ASN1_FUNCTIONS(X509_CRL) + +int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); +int X509_CRL_get0_by_serial(X509_CRL *crl, + X509_REVOKED **ret, ASN1_INTEGER *serial); +int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); + +X509_PKEY *X509_PKEY_new(void); +void X509_PKEY_free(X509_PKEY *a); +int i2d_X509_PKEY(X509_PKEY *a, unsigned char **pp); +X509_PKEY *d2i_X509_PKEY(X509_PKEY **a, const unsigned char **pp, + long length); + +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) + +# ifndef OPENSSL_NO_EVP +X509_INFO *X509_INFO_new(void); +void X509_INFO_free(X509_INFO *a); +char *X509_NAME_oneline(X509_NAME *a, char *buf, int size); + +int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); + +int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, + unsigned char *md, unsigned int *len); + +int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + char *data, EVP_PKEY *pkey, const EVP_MD *type); + +int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, + unsigned char *md, unsigned int *len); + +int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1, + ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey); + +int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data, + EVP_PKEY *pkey, const EVP_MD *type); +int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + void *asn, EVP_MD_CTX *ctx); +# endif + +int X509_set_version(X509 *x, long version); +int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); +ASN1_INTEGER *X509_get_serialNumber(X509 *x); +int X509_set_issuer_name(X509 *x, X509_NAME *name); +X509_NAME *X509_get_issuer_name(X509 *a); +int X509_set_subject_name(X509 *x, X509_NAME *name); +X509_NAME *X509_get_subject_name(X509 *a); +int X509_set_notBefore(X509 *x, const ASN1_TIME *tm); +int X509_set_notAfter(X509 *x, const ASN1_TIME *tm); +int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); +EVP_PKEY *X509_get_pubkey(X509 *x); +ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); +int X509_certificate_type(X509 *x, EVP_PKEY *pubkey /* optional */ ); + +int X509_REQ_set_version(X509_REQ *x, long version); +int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); +int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); +EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); +int X509_REQ_extension_nid(int nid); +int *X509_REQ_get_extension_nids(void); +void X509_REQ_set_extension_nids(int *nids); +STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); +int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts, + int nid); +int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts); +int X509_REQ_get_attr_count(const X509_REQ *req); +int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); +int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc); +X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc); +int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr); +int X509_REQ_add1_attr_by_OBJ(X509_REQ *req, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_NID(X509_REQ *req, + int nid, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_txt(X509_REQ *req, + const char *attrname, int type, + const unsigned char *bytes, int len); + +int X509_CRL_set_version(X509_CRL *x, long version); +int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name); +int X509_CRL_set_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_sort(X509_CRL *crl); + +int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); +int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); + +X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, + EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); + +int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); + +int X509_check_private_key(X509 *x509, EVP_PKEY *pkey); +int X509_chain_check_suiteb(int *perror_depth, + X509 *x, STACK_OF(X509) *chain, + unsigned long flags); +int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags); +STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain); + +int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_and_serial_hash(X509 *a); + +int X509_issuer_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_name_hash(X509 *a); + +int X509_subject_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_subject_name_hash(X509 *x); + +# ifndef OPENSSL_NO_MD5 +unsigned long X509_issuer_name_hash_old(X509 *a); +unsigned long X509_subject_name_hash_old(X509 *x); +# endif + +int X509_cmp(const X509 *a, const X509 *b); +int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); +unsigned long X509_NAME_hash(X509_NAME *x); +unsigned long X509_NAME_hash_old(X509_NAME *x); + +int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); +int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); +# ifndef OPENSSL_NO_FP_API +int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag, + unsigned long cflag); +int X509_print_fp(FILE *bp, X509 *x); +int X509_CRL_print_fp(FILE *bp, X509_CRL *x); +int X509_REQ_print_fp(FILE *bp, X509_REQ *req); +int X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent, + unsigned long flags); +# endif + +# ifndef OPENSSL_NO_BIO +int X509_NAME_print(BIO *bp, X509_NAME *name, int obase); +int X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent, + unsigned long flags); +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_CERT_AUX_print(BIO *bp, X509_CERT_AUX *x, int indent); +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); +int X509_REQ_print(BIO *bp, X509_REQ *req); +# endif + +int X509_NAME_entry_count(X509_NAME *name); +int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len); +int X509_NAME_get_text_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, + char *buf, int len); + +/* + * NOTE: you should be passsing -1, not 0 as lastpos. The functions that use + * lastpos, search after that position on. + */ +int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos); +int X509_NAME_get_index_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, + int lastpos); +X509_NAME_ENTRY *X509_NAME_get_entry(X509_NAME *name, int loc); +X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); +int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne, + int loc, int set); +int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type, + unsigned char *bytes, int len, int loc, + int set); +int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, + unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, + const char *field, int type, + const unsigned char *bytes, + int len); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, + int type, unsigned char *bytes, + int len); +int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, + const unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, + ASN1_OBJECT *obj, int type, + const unsigned char *bytes, + int len); +int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, ASN1_OBJECT *obj); +int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, + const unsigned char *bytes, int len); +ASN1_OBJECT *X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne); +ASN1_STRING *X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne); + +int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); +int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, + int nid, int lastpos); +int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, + ASN1_OBJECT *obj, int lastpos); +int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, + int crit, int lastpos); +X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); +X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); +STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, + X509_EXTENSION *ex, int loc); + +int X509_get_ext_count(X509 *x); +int X509_get_ext_by_NID(X509 *x, int nid, int lastpos); +int X509_get_ext_by_OBJ(X509 *x, ASN1_OBJECT *obj, int lastpos); +int X509_get_ext_by_critical(X509 *x, int crit, int lastpos); +X509_EXTENSION *X509_get_ext(X509 *x, int loc); +X509_EXTENSION *X509_delete_ext(X509 *x, int loc); +int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); +void *X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx); +int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_CRL_get_ext_count(X509_CRL *x); +int X509_CRL_get_ext_by_NID(X509_CRL *x, int nid, int lastpos); +int X509_CRL_get_ext_by_OBJ(X509_CRL *x, ASN1_OBJECT *obj, int lastpos); +int X509_CRL_get_ext_by_critical(X509_CRL *x, int crit, int lastpos); +X509_EXTENSION *X509_CRL_get_ext(X509_CRL *x, int loc); +X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); +int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); +void *X509_CRL_get_ext_d2i(X509_CRL *x, int nid, int *crit, int *idx); +int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_REVOKED_get_ext_count(X509_REVOKED *x); +int X509_REVOKED_get_ext_by_NID(X509_REVOKED *x, int nid, int lastpos); +int X509_REVOKED_get_ext_by_OBJ(X509_REVOKED *x, ASN1_OBJECT *obj, + int lastpos); +int X509_REVOKED_get_ext_by_critical(X509_REVOKED *x, int crit, int lastpos); +X509_EXTENSION *X509_REVOKED_get_ext(X509_REVOKED *x, int loc); +X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); +int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); +void *X509_REVOKED_get_ext_d2i(X509_REVOKED *x, int nid, int *crit, int *idx); +int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit, + unsigned long flags); + +X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, + int nid, int crit, + ASN1_OCTET_STRING *data); +X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, + ASN1_OBJECT *obj, int crit, + ASN1_OCTET_STRING *data); +int X509_EXTENSION_set_object(X509_EXTENSION *ex, ASN1_OBJECT *obj); +int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); +int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data); +ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex); +ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); +int X509_EXTENSION_get_critical(X509_EXTENSION *ex); + +int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x); +int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid, + int lastpos); +int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, + ASN1_OBJECT *obj, int lastpos); +X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc); +X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, + X509_ATTRIBUTE *attr); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) + **x, const ASN1_OBJECT *obj, + int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) + **x, int nid, int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) + **x, const char *attrname, + int type, + const unsigned char *bytes, + int len); +void *X509at_get0_data_by_OBJ(STACK_OF(X509_ATTRIBUTE) *x, ASN1_OBJECT *obj, + int lastpos, int type); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, + const ASN1_OBJECT *obj, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, + const char *atrname, int type, + const unsigned char *bytes, + int len); +int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj); +int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, + const void *data, int len); +void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype, + void *data); +int X509_ATTRIBUTE_count(X509_ATTRIBUTE *attr); +ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr); +ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx); + +int EVP_PKEY_get_attr_count(const EVP_PKEY *key); +int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos); +int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc); +X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc); +int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr); +int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, + int nid, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, + const char *attrname, int type, + const unsigned char *bytes, int len); + +int X509_verify_cert(X509_STORE_CTX *ctx); + +/* lookup a cert from a X509 STACK */ +X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name, + ASN1_INTEGER *serial); +X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(PBEPARAM) +DECLARE_ASN1_FUNCTIONS(PBE2PARAM) +DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) + +int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen); + +X509_ALGOR *PKCS5_pbe_set(int alg, int iter, + const unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid); + +X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen); + +/* PKCS#8 utilities */ + +DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) + +EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken); +PKCS8_PRIV_KEY_INFO *PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken); + +int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, + int version, int ptype, void *pval, + unsigned char *penc, int penclen); +int PKCS8_pkey_get0(ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + X509_ALGOR **pa, PKCS8_PRIV_KEY_INFO *p8); + +int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, + int ptype, void *pval, + unsigned char *penc, int penclen); +int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + X509_ALGOR **pa, X509_PUBKEY *pub); + +int X509_check_trust(X509 *x, int id, int flags); +int X509_TRUST_get_count(void); +X509_TRUST *X509_TRUST_get0(int idx); +int X509_TRUST_get_by_id(int id); +int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), + char *name, int arg1, void *arg2); +void X509_TRUST_cleanup(void); +int X509_TRUST_get_flags(X509_TRUST *xp); +char *X509_TRUST_get0_name(X509_TRUST *xp); +int X509_TRUST_get_trust(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. + */ +void ERR_load_X509_strings(void); + +/* Error codes for the X509 functions. */ + +/* Function codes. */ +# define X509_F_ADD_CERT_DIR 100 +# define X509_F_BY_FILE_CTRL 101 +# define X509_F_CHECK_POLICY 145 +# 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_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_PRINT_EX_FP 118 +# define X509_F_X509_PUBKEY_GET 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_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_ERR_ASN1_LIB 102 +# 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_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 +#endif diff --git a/Sources/OpenSSL/include/openssl/x509_vfy.h b/Sources/OpenSSL/include/openssl/x509_vfy.h new file mode 100644 index 0000000000..5e8a4f6fb2 --- /dev/null +++ b/Sources/OpenSSL/include/openssl/x509_vfy.h @@ -0,0 +1,647 @@ +/* crypto/x509/x509_vfy.h */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#ifndef HEADER_X509_H +# include "x509.h" +/* + * openssl/x509.h ends up #include-ing this file at about the only + * appropriate moment. + */ +#endif + +#ifndef HEADER_X509_VFY_H +# define HEADER_X509_VFY_H + +# include "opensslconf.h" +# ifndef OPENSSL_NO_LHASH +# include "lhash.h" +# endif +# include "bio.h" +# include "crypto.h" +# include "symhacks.h" + +#ifdef __cplusplus +extern "C" { +#endif + +# if 0 +/* Outer object */ +typedef struct x509_hash_dir_st { + int num_dirs; + char **dirs; + int *dirs_type; + int num_dirs_alloced; +} X509_HASH_DIR_CTX; +# endif + +typedef struct x509_file_st { + int num_paths; /* number of paths to files or directories */ + int num_alloced; + char **paths; /* the list of paths or directories */ + int *path_type; +} X509_CERT_FILE_CTX; + +/*******************************/ +/*- +SSL_CTX -> X509_STORE + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + +SSL -> X509_STORE_CTX + ->X509_STORE + +The X509_STORE holds the tables etc for verification stuff. +A X509_STORE_CTX is used while validating a single certificate. +The X509_STORE has X509_LOOKUPs for looking up certs. +The X509_STORE then calls a function to actually verify the +certificate chain. +*/ + +# define X509_LU_RETRY -1 +# define X509_LU_FAIL 0 +# define X509_LU_X509 1 +# define X509_LU_CRL 2 +# define X509_LU_PKEY 3 + +typedef struct x509_object_st { + /* one of the above types */ + int type; + union { + char *ptr; + X509 *x509; + X509_CRL *crl; + EVP_PKEY *pkey; + } data; +} X509_OBJECT; + +typedef struct x509_lookup_st X509_LOOKUP; + +DECLARE_STACK_OF(X509_LOOKUP) +DECLARE_STACK_OF(X509_OBJECT) + +/* This is a static that defines the function interface */ +typedef struct x509_lookup_method_st { + const char *name; + int (*new_item) (X509_LOOKUP *ctx); + void (*free) (X509_LOOKUP *ctx); + int (*init) (X509_LOOKUP *ctx); + int (*shutdown) (X509_LOOKUP *ctx); + int (*ctrl) (X509_LOOKUP *ctx, int cmd, const char *argc, long argl, + char **ret); + int (*get_by_subject) (X509_LOOKUP *ctx, int type, X509_NAME *name, + X509_OBJECT *ret); + int (*get_by_issuer_serial) (X509_LOOKUP *ctx, int type, X509_NAME *name, + ASN1_INTEGER *serial, X509_OBJECT *ret); + int (*get_by_fingerprint) (X509_LOOKUP *ctx, int type, + unsigned char *bytes, int len, + X509_OBJECT *ret); + int (*get_by_alias) (X509_LOOKUP *ctx, int type, char *str, int len, + X509_OBJECT *ret); +} X509_LOOKUP_METHOD; + +typedef struct X509_VERIFY_PARAM_ID_st X509_VERIFY_PARAM_ID; + +/* + * This structure hold all parameters associated with a verify operation by + * including an X509_VERIFY_PARAM structure in related structures the + * parameters used can be customized + */ + +typedef struct X509_VERIFY_PARAM_st { + char *name; + time_t check_time; /* Time to use */ + unsigned long inh_flags; /* Inheritance flags */ + unsigned long flags; /* Various verify flags */ + int purpose; /* purpose to check untrusted certificates */ + int trust; /* trust setting to check */ + int depth; /* Verify depth */ + STACK_OF(ASN1_OBJECT) *policies; /* Permissible policies */ + X509_VERIFY_PARAM_ID *id; /* opaque ID data */ +} X509_VERIFY_PARAM; + +DECLARE_STACK_OF(X509_VERIFY_PARAM) + +/* + * This is used to hold everything. It is used for all certificate + * validation. Once we have a certificate chain, the 'verify' function is + * then called to actually check the cert chain. + */ +struct x509_store_st { + /* The following is a cache of trusted certs */ + int cache; /* if true, stash any hits */ + STACK_OF(X509_OBJECT) *objs; /* Cache of all objects */ + /* These are external lookup methods */ + STACK_OF(X509_LOOKUP) *get_cert_methods; + X509_VERIFY_PARAM *param; + /* Callbacks for various operations */ + /* called to verify a certificate */ + int (*verify) (X509_STORE_CTX *ctx); + /* error callback */ + int (*verify_cb) (int ok, X509_STORE_CTX *ctx); + /* get issuers cert from ctx */ + int (*get_issuer) (X509 **issuer, X509_STORE_CTX *ctx, X509 *x); + /* check issued */ + int (*check_issued) (X509_STORE_CTX *ctx, X509 *x, X509 *issuer); + /* Check revocation status of chain */ + int (*check_revocation) (X509_STORE_CTX *ctx); + /* retrieve CRL */ + int (*get_crl) (X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); + /* Check CRL validity */ + int (*check_crl) (X509_STORE_CTX *ctx, X509_CRL *crl); + /* Check certificate against CRL */ + int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); + STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm); + STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm); + int (*cleanup) (X509_STORE_CTX *ctx); + CRYPTO_EX_DATA ex_data; + int references; +} /* X509_STORE */ ; + +int X509_STORE_set_depth(X509_STORE *store, int depth); + +# define X509_STORE_set_verify_cb_func(ctx,func) ((ctx)->verify_cb=(func)) +# define X509_STORE_set_verify_func(ctx,func) ((ctx)->verify=(func)) + +/* This is the functions plus an instance of the local variables. */ +struct x509_lookup_st { + int init; /* have we been started */ + int skip; /* don't use us. */ + X509_LOOKUP_METHOD *method; /* the functions */ + char *method_data; /* method data */ + X509_STORE *store_ctx; /* who owns us */ +} /* X509_LOOKUP */ ; + +/* + * This is a used when verifying cert chains. Since the gathering of the + * cert chain can take some time (and have to be 'retried', this needs to be + * kept and passed around. + */ +struct x509_store_ctx_st { /* X509_STORE_CTX */ + X509_STORE *ctx; + /* used when looking up certs */ + int current_method; + /* The following are set by the caller */ + /* The cert to check */ + X509 *cert; + /* chain of X509s - untrusted - passed in */ + STACK_OF(X509) *untrusted; + /* set of CRLs passed in */ + STACK_OF(X509_CRL) *crls; + X509_VERIFY_PARAM *param; + /* Other info for use with get_issuer() */ + void *other_ctx; + /* Callbacks for various operations */ + /* called to verify a certificate */ + int (*verify) (X509_STORE_CTX *ctx); + /* error callback */ + int (*verify_cb) (int ok, X509_STORE_CTX *ctx); + /* get issuers cert from ctx */ + int (*get_issuer) (X509 **issuer, X509_STORE_CTX *ctx, X509 *x); + /* check issued */ + int (*check_issued) (X509_STORE_CTX *ctx, X509 *x, X509 *issuer); + /* Check revocation status of chain */ + int (*check_revocation) (X509_STORE_CTX *ctx); + /* retrieve CRL */ + int (*get_crl) (X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); + /* Check CRL validity */ + int (*check_crl) (X509_STORE_CTX *ctx, X509_CRL *crl); + /* Check certificate against CRL */ + int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); + int (*check_policy) (X509_STORE_CTX *ctx); + STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm); + STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm); + int (*cleanup) (X509_STORE_CTX *ctx); + /* The following is built up */ + /* if 0, rebuild chain */ + int valid; + /* index of last untrusted cert */ + int last_untrusted; + /* chain of X509s - built up and trusted */ + STACK_OF(X509) *chain; + /* Valid policy tree */ + X509_POLICY_TREE *tree; + /* Require explicit policy value */ + int explicit_policy; + /* When something goes wrong, this is why */ + int error_depth; + int error; + X509 *current_cert; + /* cert currently being tested as valid issuer */ + X509 *current_issuer; + /* current CRL */ + X509_CRL *current_crl; + /* score of current CRL */ + int current_crl_score; + /* Reason mask */ + unsigned int current_reasons; + /* For CRL path validation: parent context */ + X509_STORE_CTX *parent; + CRYPTO_EX_DATA ex_data; +} /* X509_STORE_CTX */ ; + +void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); + +# define X509_STORE_CTX_set_app_data(ctx,data) \ + X509_STORE_CTX_set_ex_data(ctx,0,data) +# define X509_STORE_CTX_get_app_data(ctx) \ + X509_STORE_CTX_get_ex_data(ctx,0) + +# define X509_L_FILE_LOAD 1 +# define X509_L_ADD_DIR 2 + +# define X509_LOOKUP_load_file(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) + +# define X509_LOOKUP_add_dir(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) + +# define X509_V_OK 0 +/* illegal error (for uninitialized values, to avoid X509_V_OK): 1 */ + +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 +# define X509_V_ERR_UNABLE_TO_GET_CRL 3 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 +# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 +# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 +# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 +# define X509_V_ERR_CERT_NOT_YET_VALID 9 +# define X509_V_ERR_CERT_HAS_EXPIRED 10 +# define X509_V_ERR_CRL_NOT_YET_VALID 11 +# define X509_V_ERR_CRL_HAS_EXPIRED 12 +# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 +# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 +# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 +# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 +# define X509_V_ERR_OUT_OF_MEM 17 +# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 +# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 +# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 +# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 +# define X509_V_ERR_CERT_REVOKED 23 +# define X509_V_ERR_INVALID_CA 24 +# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 +# define X509_V_ERR_INVALID_PURPOSE 26 +# define X509_V_ERR_CERT_UNTRUSTED 27 +# define X509_V_ERR_CERT_REJECTED 28 +/* These are 'informational' when looking for issuer cert */ +# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 +# define X509_V_ERR_AKID_SKID_MISMATCH 30 +# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 +# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 + +# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 +# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 +# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 +# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 +# define X509_V_ERR_INVALID_NON_CA 37 +# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 +# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 +# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 + +# define X509_V_ERR_INVALID_EXTENSION 41 +# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 +# define X509_V_ERR_NO_EXPLICIT_POLICY 43 +# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 +# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 + +# define X509_V_ERR_UNNESTED_RESOURCE 46 + +# define X509_V_ERR_PERMITTED_VIOLATION 47 +# define X509_V_ERR_EXCLUDED_VIOLATION 48 +# define X509_V_ERR_SUBTREE_MINMAX 49 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 +# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 +# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 + +/* Suite B mode algorithm violation */ +# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 +# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 +# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 +# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 +# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 +# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 + +/* Host, email and IP check errors */ +# define X509_V_ERR_HOSTNAME_MISMATCH 62 +# define X509_V_ERR_EMAIL_MISMATCH 63 +# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 + +/* The application is not happy */ +# define X509_V_ERR_APPLICATION_VERIFICATION 50 + +/* Certificate verify flags */ + +/* Send issuer+subject checks to verify_cb */ +# define X509_V_FLAG_CB_ISSUER_CHECK 0x1 +/* Use check time instead of current time */ +# define X509_V_FLAG_USE_CHECK_TIME 0x2 +/* Lookup CRLs */ +# define X509_V_FLAG_CRL_CHECK 0x4 +/* Lookup CRLs for whole chain */ +# define X509_V_FLAG_CRL_CHECK_ALL 0x8 +/* Ignore unhandled critical extensions */ +# define X509_V_FLAG_IGNORE_CRITICAL 0x10 +/* Disable workarounds for broken certificates */ +# define X509_V_FLAG_X509_STRICT 0x20 +/* Enable proxy certificate validation */ +# define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 +/* Enable policy checking */ +# define X509_V_FLAG_POLICY_CHECK 0x80 +/* Policy variable require-explicit-policy */ +# define X509_V_FLAG_EXPLICIT_POLICY 0x100 +/* Policy variable inhibit-any-policy */ +# define X509_V_FLAG_INHIBIT_ANY 0x200 +/* Policy variable inhibit-policy-mapping */ +# define X509_V_FLAG_INHIBIT_MAP 0x400 +/* Notify callback that policy is OK */ +# define X509_V_FLAG_NOTIFY_POLICY 0x800 +/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ +# define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 +/* Delta CRL support */ +# define X509_V_FLAG_USE_DELTAS 0x2000 +/* Check selfsigned CA signature */ +# define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 +/* Use trusted store first */ +# define X509_V_FLAG_TRUSTED_FIRST 0x8000 +/* Suite B 128 bit only mode: not normally used */ +# define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define X509_V_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define X509_V_FLAG_SUITEB_128_LOS 0x30000 + +/* Allow partial chains if at least one certificate is in trusted store */ +# define X509_V_FLAG_PARTIAL_CHAIN 0x80000 +/* + * If the initial chain is not trusted, do not attempt to build an alternative + * chain. Alternate chain checking was introduced in 1.0.2b. Setting this flag + * will force the behaviour to match that of previous versions. + */ +# define X509_V_FLAG_NO_ALT_CHAINS 0x100000 + +# define X509_VP_FLAG_DEFAULT 0x1 +# define X509_VP_FLAG_OVERWRITE 0x2 +# define X509_VP_FLAG_RESET_FLAGS 0x4 +# define X509_VP_FLAG_LOCKED 0x8 +# define X509_VP_FLAG_ONCE 0x10 + +/* Internal use: mask of policy related options */ +# define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \ + | X509_V_FLAG_EXPLICIT_POLICY \ + | X509_V_FLAG_INHIBIT_ANY \ + | X509_V_FLAG_INHIBIT_MAP) + +int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, int type, + X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, + int type, X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, + X509_OBJECT *x); +void X509_OBJECT_up_ref_count(X509_OBJECT *a); +void X509_OBJECT_free_contents(X509_OBJECT *a); +X509_STORE *X509_STORE_new(void); +void X509_STORE_free(X509_STORE *v); + +STACK_OF(X509) *X509_STORE_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); +STACK_OF(X509_CRL) *X509_STORE_get1_crls(X509_STORE_CTX *st, X509_NAME *nm); +int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); +int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); +int X509_STORE_set_trust(X509_STORE *ctx, int trust); +int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); + +void X509_STORE_set_verify_cb(X509_STORE *ctx, + int (*verify_cb) (int, X509_STORE_CTX *)); + +void X509_STORE_set_lookup_crls_cb(X509_STORE *ctx, + STACK_OF(X509_CRL) *(*cb) (X509_STORE_CTX + *ctx, + X509_NAME *nm)); + +X509_STORE_CTX *X509_STORE_CTX_new(void); + +int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); + +void X509_STORE_CTX_free(X509_STORE_CTX *ctx); +int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, + X509 *x509, STACK_OF(X509) *chain); +void X509_STORE_CTX_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); + +X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx); + +X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); + +X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); +X509_LOOKUP_METHOD *X509_LOOKUP_file(void); + +int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); +int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); + +int X509_STORE_get_by_subject(X509_STORE_CTX *vs, int type, X509_NAME *name, + X509_OBJECT *ret); + +int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); + +# ifndef OPENSSL_NO_STDIO +int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); +# endif + +X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); +void X509_LOOKUP_free(X509_LOOKUP *ctx); +int X509_LOOKUP_init(X509_LOOKUP *ctx); +int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, int type, X509_NAME *name, + X509_OBJECT *ret); +int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, int type, X509_NAME *name, + ASN1_INTEGER *serial, X509_OBJECT *ret); +int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, int type, + unsigned char *bytes, int len, + X509_OBJECT *ret); +int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, int type, char *str, int len, + X509_OBJECT *ret); +int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); + +# ifndef OPENSSL_NO_STDIO +int X509_STORE_load_locations(X509_STORE *ctx, + const char *file, const char *dir); +int X509_STORE_set_default_paths(X509_STORE *ctx); +# endif + +int X509_STORE_CTX_get_ex_new_index(long argl, void *argp, + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); +void *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx); +int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); +int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx); +X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get_chain(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_cert(X509_STORE_CTX *c, X509 *x); +void X509_STORE_CTX_set_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); +void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk); +int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); +int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); +int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, + int purpose, int trust); +void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); +void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, + time_t t); +void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, + int (*verify_cb) (int, X509_STORE_CTX *)); + +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); + +X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); +int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); + +/* X509_VERIFY_PARAM functions */ + +X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); +void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name); +int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); +int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); +void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); +void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t); +int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, + ASN1_OBJECT *policy); +int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, + STACK_OF(ASN1_OBJECT) *policies); + +int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, + unsigned int flags); +char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *); +int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, + const char *email, size_t emaillen); +int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, + const unsigned char *ip, size_t iplen); +int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, + const char *ipasc); + +int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); +const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param); + +int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_get_count(void); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name); +void X509_VERIFY_PARAM_table_cleanup(void); + +int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy, + STACK_OF(X509) *certs, + STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags); + +void X509_policy_tree_free(X509_POLICY_TREE *tree); + +int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); +X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, + int i); + +STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const + X509_POLICY_TREE + *tree); + +STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const + X509_POLICY_TREE + *tree); + +int X509_policy_level_node_count(X509_POLICY_LEVEL *level); + +X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, + int i); + +const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); + +STACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const + X509_POLICY_NODE + *node); +const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE + *node); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/include/openssl/x509v3.h b/Sources/OpenSSL/include/openssl/x509v3.h new file mode 100644 index 0000000000..92bf77b0df --- /dev/null +++ b/Sources/OpenSSL/include/openssl/x509v3.h @@ -0,0 +1,1055 @@ +/* x509v3.h */ +/* + * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project + * 1999. + */ +/* ==================================================================== + * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +#ifndef HEADER_X509V3_H +# define HEADER_X509V3_H + +# include "bio.h" +# include "x509.h" +# include "conf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +# ifdef OPENSSL_SYS_WIN32 +/* Under Win32 these are defined in wincrypt.h */ +# undef X509_NAME +# undef X509_CERT_PAIR +# undef X509_EXTENSIONS +# endif + +/* Forward reference */ +struct v3_ext_method; +struct v3_ext_ctx; + +/* Useful typedefs */ + +typedef void *(*X509V3_EXT_NEW)(void); +typedef void (*X509V3_EXT_FREE) (void *); +typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); +typedef int (*X509V3_EXT_I2D) (void *, unsigned char **); +typedef STACK_OF(CONF_VALUE) * + (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, + STACK_OF(CONF_VALUE) *extlist); +typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, + STACK_OF(CONF_VALUE) *values); +typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method, + void *ext); +typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); +typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext, + BIO *out, int indent); +typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); + +/* V3 extension structure */ + +struct v3_ext_method { + int ext_nid; + int ext_flags; +/* If this is set the following four fields are ignored */ + ASN1_ITEM_EXP *it; +/* Old style ASN1 calls */ + X509V3_EXT_NEW ext_new; + X509V3_EXT_FREE ext_free; + X509V3_EXT_D2I d2i; + X509V3_EXT_I2D i2d; +/* The following pair is used for string extensions */ + X509V3_EXT_I2S i2s; + X509V3_EXT_S2I s2i; +/* The following pair is used for multi-valued extensions */ + X509V3_EXT_I2V i2v; + X509V3_EXT_V2I v2i; +/* The following are used for raw extensions */ + X509V3_EXT_I2R i2r; + X509V3_EXT_R2I r2i; + void *usr_data; /* Any extension specific data */ +}; + +typedef struct X509V3_CONF_METHOD_st { + char *(*get_string) (void *db, char *section, char *value); + STACK_OF(CONF_VALUE) *(*get_section) (void *db, char *section); + void (*free_string) (void *db, char *string); + void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); +} X509V3_CONF_METHOD; + +/* Context specific info */ +struct v3_ext_ctx { +# define CTX_TEST 0x1 + int flags; + X509 *issuer_cert; + X509 *subject_cert; + X509_REQ *subject_req; + X509_CRL *crl; + X509V3_CONF_METHOD *db_meth; + void *db; +/* Maybe more here */ +}; + +typedef struct v3_ext_method X509V3_EXT_METHOD; + +DECLARE_STACK_OF(X509V3_EXT_METHOD) + +/* ext_flags values */ +# define X509V3_EXT_DYNAMIC 0x1 +# define X509V3_EXT_CTX_DEP 0x2 +# define X509V3_EXT_MULTILINE 0x4 + +typedef BIT_STRING_BITNAME ENUMERATED_NAMES; + +typedef struct BASIC_CONSTRAINTS_st { + int ca; + ASN1_INTEGER *pathlen; +} BASIC_CONSTRAINTS; + +typedef struct PKEY_USAGE_PERIOD_st { + ASN1_GENERALIZEDTIME *notBefore; + ASN1_GENERALIZEDTIME *notAfter; +} PKEY_USAGE_PERIOD; + +typedef struct otherName_st { + ASN1_OBJECT *type_id; + ASN1_TYPE *value; +} OTHERNAME; + +typedef struct EDIPartyName_st { + ASN1_STRING *nameAssigner; + ASN1_STRING *partyName; +} EDIPARTYNAME; + +typedef struct GENERAL_NAME_st { +# define GEN_OTHERNAME 0 +# define GEN_EMAIL 1 +# define GEN_DNS 2 +# define GEN_X400 3 +# define GEN_DIRNAME 4 +# define GEN_EDIPARTY 5 +# define GEN_URI 6 +# define GEN_IPADD 7 +# define GEN_RID 8 + int type; + union { + char *ptr; + OTHERNAME *otherName; /* otherName */ + ASN1_IA5STRING *rfc822Name; + ASN1_IA5STRING *dNSName; + ASN1_TYPE *x400Address; + X509_NAME *directoryName; + EDIPARTYNAME *ediPartyName; + ASN1_IA5STRING *uniformResourceIdentifier; + ASN1_OCTET_STRING *iPAddress; + ASN1_OBJECT *registeredID; + /* Old names */ + ASN1_OCTET_STRING *ip; /* iPAddress */ + X509_NAME *dirn; /* dirn */ + ASN1_IA5STRING *ia5; /* rfc822Name, dNSName, + * uniformResourceIdentifier */ + ASN1_OBJECT *rid; /* registeredID */ + ASN1_TYPE *other; /* x400Address */ + } d; +} GENERAL_NAME; + +typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; + +typedef struct ACCESS_DESCRIPTION_st { + ASN1_OBJECT *method; + GENERAL_NAME *location; +} ACCESS_DESCRIPTION; + +typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; + +typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; + +DECLARE_STACK_OF(GENERAL_NAME) +DECLARE_ASN1_SET_OF(GENERAL_NAME) + +DECLARE_STACK_OF(ACCESS_DESCRIPTION) +DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION) + +typedef struct DIST_POINT_NAME_st { + int type; + union { + GENERAL_NAMES *fullname; + STACK_OF(X509_NAME_ENTRY) *relativename; + } name; +/* If relativename then this contains the full distribution point name */ + X509_NAME *dpname; +} DIST_POINT_NAME; +/* All existing reasons */ +# define CRLDP_ALL_REASONS 0x807f + +# define CRL_REASON_NONE -1 +# define CRL_REASON_UNSPECIFIED 0 +# define CRL_REASON_KEY_COMPROMISE 1 +# define CRL_REASON_CA_COMPROMISE 2 +# define CRL_REASON_AFFILIATION_CHANGED 3 +# define CRL_REASON_SUPERSEDED 4 +# define CRL_REASON_CESSATION_OF_OPERATION 5 +# define CRL_REASON_CERTIFICATE_HOLD 6 +# define CRL_REASON_REMOVE_FROM_CRL 8 +# define CRL_REASON_PRIVILEGE_WITHDRAWN 9 +# define CRL_REASON_AA_COMPROMISE 10 + +struct DIST_POINT_st { + DIST_POINT_NAME *distpoint; + ASN1_BIT_STRING *reasons; + GENERAL_NAMES *CRLissuer; + int dp_reasons; +}; + +typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; + +DECLARE_STACK_OF(DIST_POINT) +DECLARE_ASN1_SET_OF(DIST_POINT) + +struct AUTHORITY_KEYID_st { + ASN1_OCTET_STRING *keyid; + GENERAL_NAMES *issuer; + ASN1_INTEGER *serial; +}; + +/* Strong extranet structures */ + +typedef struct SXNET_ID_st { + ASN1_INTEGER *zone; + ASN1_OCTET_STRING *user; +} SXNETID; + +DECLARE_STACK_OF(SXNETID) +DECLARE_ASN1_SET_OF(SXNETID) + +typedef struct SXNET_st { + ASN1_INTEGER *version; + STACK_OF(SXNETID) *ids; +} SXNET; + +typedef struct NOTICEREF_st { + ASN1_STRING *organization; + STACK_OF(ASN1_INTEGER) *noticenos; +} NOTICEREF; + +typedef struct USERNOTICE_st { + NOTICEREF *noticeref; + ASN1_STRING *exptext; +} USERNOTICE; + +typedef struct POLICYQUALINFO_st { + ASN1_OBJECT *pqualid; + union { + ASN1_IA5STRING *cpsuri; + USERNOTICE *usernotice; + ASN1_TYPE *other; + } d; +} POLICYQUALINFO; + +DECLARE_STACK_OF(POLICYQUALINFO) +DECLARE_ASN1_SET_OF(POLICYQUALINFO) + +typedef struct POLICYINFO_st { + ASN1_OBJECT *policyid; + STACK_OF(POLICYQUALINFO) *qualifiers; +} POLICYINFO; + +typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; + +DECLARE_STACK_OF(POLICYINFO) +DECLARE_ASN1_SET_OF(POLICYINFO) + +typedef struct POLICY_MAPPING_st { + ASN1_OBJECT *issuerDomainPolicy; + ASN1_OBJECT *subjectDomainPolicy; +} POLICY_MAPPING; + +DECLARE_STACK_OF(POLICY_MAPPING) + +typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; + +typedef struct GENERAL_SUBTREE_st { + GENERAL_NAME *base; + ASN1_INTEGER *minimum; + ASN1_INTEGER *maximum; +} GENERAL_SUBTREE; + +DECLARE_STACK_OF(GENERAL_SUBTREE) + +struct NAME_CONSTRAINTS_st { + STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; + STACK_OF(GENERAL_SUBTREE) *excludedSubtrees; +}; + +typedef struct POLICY_CONSTRAINTS_st { + ASN1_INTEGER *requireExplicitPolicy; + ASN1_INTEGER *inhibitPolicyMapping; +} POLICY_CONSTRAINTS; + +/* Proxy certificate structures, see RFC 3820 */ +typedef struct PROXY_POLICY_st { + ASN1_OBJECT *policyLanguage; + ASN1_OCTET_STRING *policy; +} PROXY_POLICY; + +typedef struct PROXY_CERT_INFO_EXTENSION_st { + ASN1_INTEGER *pcPathLengthConstraint; + PROXY_POLICY *proxyPolicy; +} PROXY_CERT_INFO_EXTENSION; + +DECLARE_ASN1_FUNCTIONS(PROXY_POLICY) +DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION) + +struct ISSUING_DIST_POINT_st { + DIST_POINT_NAME *distpoint; + int onlyuser; + int onlyCA; + ASN1_BIT_STRING *onlysomereasons; + int indirectCRL; + int onlyattr; +}; + +/* Values in idp_flags field */ +/* IDP present */ +# define IDP_PRESENT 0x1 +/* IDP values inconsistent */ +# define IDP_INVALID 0x2 +/* onlyuser true */ +# define IDP_ONLYUSER 0x4 +/* onlyCA true */ +# define IDP_ONLYCA 0x8 +/* onlyattr true */ +# define IDP_ONLYATTR 0x10 +/* indirectCRL true */ +# define IDP_INDIRECT 0x20 +/* 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_set_ctx_test(ctx) \ + X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) +# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; + +# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ + 0,0,0,0, \ + 0,0, \ + (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \ + (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \ + NULL, NULL, \ + table} + +# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \ + 0,0,0,0, \ + NULL} + +# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + +/* X509_PURPOSE stuff */ + +# define EXFLAG_BCONS 0x1 +# define EXFLAG_KUSAGE 0x2 +# define EXFLAG_XKUSAGE 0x4 +# define EXFLAG_NSCERT 0x8 + +# define EXFLAG_CA 0x10 +/* Really self issued not necessarily self signed */ +# define EXFLAG_SI 0x20 +# define EXFLAG_V1 0x40 +# define EXFLAG_INVALID 0x80 +# define EXFLAG_SET 0x100 +# define EXFLAG_CRITICAL 0x200 +# define EXFLAG_PROXY 0x400 + +# define EXFLAG_INVALID_POLICY 0x800 +# define EXFLAG_FRESHEST 0x1000 +/* Self signed */ +# define EXFLAG_SS 0x2000 + +# define KU_DIGITAL_SIGNATURE 0x0080 +# define KU_NON_REPUDIATION 0x0040 +# define KU_KEY_ENCIPHERMENT 0x0020 +# define KU_DATA_ENCIPHERMENT 0x0010 +# define KU_KEY_AGREEMENT 0x0008 +# define KU_KEY_CERT_SIGN 0x0004 +# define KU_CRL_SIGN 0x0002 +# define KU_ENCIPHER_ONLY 0x0001 +# define KU_DECIPHER_ONLY 0x8000 + +# define NS_SSL_CLIENT 0x80 +# define NS_SSL_SERVER 0x40 +# define NS_SMIME 0x20 +# define NS_OBJSIGN 0x10 +# define NS_SSL_CA 0x04 +# define NS_SMIME_CA 0x02 +# define NS_OBJSIGN_CA 0x01 +# define NS_ANY_CA (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA) + +# define XKU_SSL_SERVER 0x1 +# define XKU_SSL_CLIENT 0x2 +# define XKU_SMIME 0x4 +# define XKU_CODE_SIGN 0x8 +# define XKU_SGC 0x10 +# define XKU_OCSP_SIGN 0x20 +# define XKU_TIMESTAMP 0x40 +# define XKU_DVCS 0x80 +# define XKU_ANYEKU 0x100 + +# define X509_PURPOSE_DYNAMIC 0x1 +# define X509_PURPOSE_DYNAMIC_NAME 0x2 + +typedef struct x509_purpose_st { + int purpose; + int trust; /* Default trust ID */ + int flags; + int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int); + char *name; + char *sname; + void *usr_data; +} X509_PURPOSE; + +# define X509_PURPOSE_SSL_CLIENT 1 +# define X509_PURPOSE_SSL_SERVER 2 +# define X509_PURPOSE_NS_SSL_SERVER 3 +# define X509_PURPOSE_SMIME_SIGN 4 +# define X509_PURPOSE_SMIME_ENCRYPT 5 +# define X509_PURPOSE_CRL_SIGN 6 +# define X509_PURPOSE_ANY 7 +# define X509_PURPOSE_OCSP_HELPER 8 +# define X509_PURPOSE_TIMESTAMP_SIGN 9 + +# define X509_PURPOSE_MIN 1 +# define X509_PURPOSE_MAX 9 + +/* Flags for X509V3_EXT_print() */ + +# define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) +/* Return error for unknown extensions */ +# define X509V3_EXT_DEFAULT 0 +/* Print error for unknown extensions */ +# define X509V3_EXT_ERROR_UNKNOWN (1L << 16) +/* ASN1 parse unknown extensions */ +# define X509V3_EXT_PARSE_UNKNOWN (2L << 16) +/* BIO_dump unknown extensions */ +# define X509V3_EXT_DUMP_UNKNOWN (3L << 16) + +/* Flags for X509V3_add1_i2d */ + +# define X509V3_ADD_OP_MASK 0xfL +# define X509V3_ADD_DEFAULT 0L +# define X509V3_ADD_APPEND 1L +# define X509V3_ADD_REPLACE 2L +# define X509V3_ADD_REPLACE_EXISTING 3L +# define X509V3_ADD_KEEP_EXISTING 4L +# define X509V3_ADD_DELETE 5L +# define X509V3_ADD_SILENT 0x10 + +DECLARE_STACK_OF(X509_PURPOSE) + +DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) + +DECLARE_ASN1_FUNCTIONS(SXNET) +DECLARE_ASN1_FUNCTIONS(SXNETID) + +int SXNET_add_id_asc(SXNET **psx, char *zone, char *user, int userlen); +int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user, + int userlen); +int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, char *user, + int userlen); + +ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, char *zone); +ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone); +ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone); + +DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) + +DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) +GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a); +int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); + +ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, + STACK_OF(CONF_VALUE) *nval); +STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + ASN1_BIT_STRING *bits, + STACK_OF(CONF_VALUE) *extlist); + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, + GENERAL_NAME *gen, + STACK_OF(CONF_VALUE) *ret); +int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen); + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES) + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, + GENERAL_NAMES *gen, + STACK_OF(CONF_VALUE) *extlist); +GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); + +DECLARE_ASN1_FUNCTIONS(OTHERNAME) +DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME) +int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b); +void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value); +void *GENERAL_NAME_get0_value(GENERAL_NAME *a, int *ptype); +int GENERAL_NAME_set0_othername(GENERAL_NAME *gen, + ASN1_OBJECT *oid, ASN1_TYPE *value); +int GENERAL_NAME_get0_otherName(GENERAL_NAME *gen, + ASN1_OBJECT **poid, ASN1_TYPE **pvalue); + +char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + ASN1_OCTET_STRING *ia5); +ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, char *str); + +DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE) +int i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION *a); + +DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES) +DECLARE_ASN1_FUNCTIONS(POLICYINFO) +DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO) +DECLARE_ASN1_FUNCTIONS(USERNOTICE) +DECLARE_ASN1_FUNCTIONS(NOTICEREF) + +DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS) +DECLARE_ASN1_FUNCTIONS(DIST_POINT) +DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) +DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) + +int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname); + +int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); + +DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) +DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) + +DECLARE_ASN1_ITEM(POLICY_MAPPING) +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING) +DECLARE_ASN1_ITEM(POLICY_MAPPINGS) + +DECLARE_ASN1_ITEM(GENERAL_SUBTREE) +DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE) + +DECLARE_ASN1_ITEM(NAME_CONSTRAINTS) +DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS) + +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS) +DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS) + +GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, int gen_type, char *value, + int is_nc); + +# ifdef HEADER_CONF_H +GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf); +GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf, + int is_nc); +void X509V3_conf_free(CONF_VALUE *val); + +X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, + char *value); +X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, char *name, + char *value); +int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, char *section, + STACK_OF(X509_EXTENSION) **sk); +int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, + X509 *cert); +int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, + X509_REQ *req); +int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, + X509_CRL *crl); + +X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, + X509V3_CTX *ctx, int ext_nid, + char *value); +X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + char *name, char *value); +int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + char *section, X509 *cert); +int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + char *section, X509_REQ *req); +int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + char *section, X509_CRL *crl); + +int X509V3_add_value_bool_nf(char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool); +int X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint); +void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf); +void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash); +# endif + +char *X509V3_get_string(X509V3_CTX *ctx, char *name, char *section); +STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, char *section); +void X509V3_string_free(X509V3_CTX *ctx, char *str); +void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); +void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, + X509_REQ *req, X509_CRL *crl, int flags); + +int X509V3_add_value(const char *name, const char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_uchar(const char *name, const unsigned char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_bool(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_int(const char *name, ASN1_INTEGER *aint, + STACK_OF(CONF_VALUE) **extlist); +char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint); +ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, char *value); +char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint); +char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, + ASN1_ENUMERATED *aint); +int X509V3_EXT_add(X509V3_EXT_METHOD *ext); +int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist); +int X509V3_EXT_add_alias(int nid_to, int nid_from); +void X509V3_EXT_cleanup(void); + +const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext); +const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid); +int X509V3_add_standard_extensions(void); +STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line); +void *X509V3_EXT_d2i(X509_EXTENSION *ext); +void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, + int *idx); +int X509V3_EXT_free(int nid, void *ext_data); + +X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); +int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, + int crit, unsigned long flags); + +char *hex_to_string(const unsigned char *buffer, long len); +unsigned char *string_to_hex(const char *str, long *len); +int name_cmp(const char *name, const char *cmp); + +void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, + int ml); +int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, + int indent); +int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); + +int X509V3_extensions_print(BIO *out, char *title, + STACK_OF(X509_EXTENSION) *exts, + unsigned long flag, int indent); + +int X509_check_ca(X509 *x); +int X509_check_purpose(X509 *x, int id, int ca); +int X509_supported_extension(X509_EXTENSION *ex); +int X509_PURPOSE_set(int *p, int purpose); +int X509_check_issued(X509 *issuer, X509 *subject); +int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid); +int X509_PURPOSE_get_count(void); +X509_PURPOSE *X509_PURPOSE_get0(int idx); +int X509_PURPOSE_get_by_sname(char *sname); +int X509_PURPOSE_get_by_id(int id); +int X509_PURPOSE_add(int id, int trust, int flags, + int (*ck) (const X509_PURPOSE *, const X509 *, int), + char *name, char *sname, void *arg); +char *X509_PURPOSE_get0_name(X509_PURPOSE *xp); +char *X509_PURPOSE_get0_sname(X509_PURPOSE *xp); +int X509_PURPOSE_get_trust(X509_PURPOSE *xp); +void X509_PURPOSE_cleanup(void); +int X509_PURPOSE_get_id(X509_PURPOSE *); + +STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x); +STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x); +void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); +STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); +/* Flags for X509_check_* functions */ + +/* + * Always check subject name for host match even if subject alt names present + */ +# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1 +/* Disable wildcard matching for dnsName fields and common name. */ +# define X509_CHECK_FLAG_NO_WILDCARDS 0x2 +/* Wildcards must not match a partial label. */ +# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4 +/* Allow (non-partial) wildcards to match multiple labels. */ +# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8 +/* Constraint verifier subdomain patterns to match a single labels. */ +# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10 +/* + * Match reference identifiers starting with "." to any sub-domain. + * This is a non-public flag, turned on implicitly when the subject + * reference identity is a DNS name. + */ +# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000 + +int X509_check_host(X509 *x, const char *chk, size_t chklen, + unsigned int flags, char **peername); +int X509_check_email(X509 *x, const char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags); + +ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc); +ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc); +int a2i_ipadd(unsigned char *ipout, const char *ipasc); +int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, + unsigned long chtype); + +void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); +DECLARE_STACK_OF(X509_POLICY_NODE) + +# ifndef OPENSSL_NO_RFC3779 + +typedef struct ASRange_st { + ASN1_INTEGER *min, *max; +} ASRange; + +# define ASIdOrRange_id 0 +# define ASIdOrRange_range 1 + +typedef struct ASIdOrRange_st { + int type; + union { + ASN1_INTEGER *id; + ASRange *range; + } u; +} ASIdOrRange; + +typedef STACK_OF(ASIdOrRange) ASIdOrRanges; +DECLARE_STACK_OF(ASIdOrRange) + +# define ASIdentifierChoice_inherit 0 +# define ASIdentifierChoice_asIdsOrRanges 1 + +typedef struct ASIdentifierChoice_st { + int type; + union { + ASN1_NULL *inherit; + ASIdOrRanges *asIdsOrRanges; + } u; +} ASIdentifierChoice; + +typedef struct ASIdentifiers_st { + ASIdentifierChoice *asnum, *rdi; +} ASIdentifiers; + +DECLARE_ASN1_FUNCTIONS(ASRange) +DECLARE_ASN1_FUNCTIONS(ASIdOrRange) +DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice) +DECLARE_ASN1_FUNCTIONS(ASIdentifiers) + +typedef struct IPAddressRange_st { + ASN1_BIT_STRING *min, *max; +} IPAddressRange; + +# define IPAddressOrRange_addressPrefix 0 +# define IPAddressOrRange_addressRange 1 + +typedef struct IPAddressOrRange_st { + int type; + union { + ASN1_BIT_STRING *addressPrefix; + IPAddressRange *addressRange; + } u; +} IPAddressOrRange; + +typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; +DECLARE_STACK_OF(IPAddressOrRange) + +# define IPAddressChoice_inherit 0 +# define IPAddressChoice_addressesOrRanges 1 + +typedef struct IPAddressChoice_st { + int type; + union { + ASN1_NULL *inherit; + IPAddressOrRanges *addressesOrRanges; + } u; +} IPAddressChoice; + +typedef struct IPAddressFamily_st { + ASN1_OCTET_STRING *addressFamily; + IPAddressChoice *ipAddressChoice; +} IPAddressFamily; + +typedef STACK_OF(IPAddressFamily) IPAddrBlocks; +DECLARE_STACK_OF(IPAddressFamily) + +DECLARE_ASN1_FUNCTIONS(IPAddressRange) +DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) +DECLARE_ASN1_FUNCTIONS(IPAddressChoice) +DECLARE_ASN1_FUNCTIONS(IPAddressFamily) + +/* + * API tag for elements of the ASIdentifer SEQUENCE. + */ +# define V3_ASID_ASNUM 0 +# define V3_ASID_RDI 1 + +/* + * AFI values, assigned by IANA. It'd be nice to make the AFI + * handling code totally generic, but there are too many little things + * that would need to be defined for other address families for it to + * be worth the trouble. + */ +# define IANA_AFI_IPV4 1 +# define IANA_AFI_IPV6 2 + +/* + * Utilities to construct and extract values from RFC3779 extensions, + * since some of the encodings (particularly for IP address prefixes + * and ranges) are a bit tedious to work with directly. + */ +int v3_asid_add_inherit(ASIdentifiers *asid, int which); +int v3_asid_add_id_or_range(ASIdentifiers *asid, int which, + ASN1_INTEGER *min, ASN1_INTEGER *max); +int v3_addr_add_inherit(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi); +int v3_addr_add_prefix(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *a, const int prefixlen); +int v3_addr_add_range(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *min, unsigned char *max); +unsigned v3_addr_get_afi(const IPAddressFamily *f); +int v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, + unsigned char *min, unsigned char *max, + const int length); + +/* + * Canonical forms. + */ +int v3_asid_is_canonical(ASIdentifiers *asid); +int v3_addr_is_canonical(IPAddrBlocks *addr); +int v3_asid_canonize(ASIdentifiers *asid); +int v3_addr_canonize(IPAddrBlocks *addr); + +/* + * Tests for inheritance and containment. + */ +int v3_asid_inherits(ASIdentifiers *asid); +int v3_addr_inherits(IPAddrBlocks *addr); +int v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); +int v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); + +/* + * Check whether RFC 3779 extensions nest properly in chains. + */ +int v3_asid_validate_path(X509_STORE_CTX *); +int v3_addr_validate_path(X509_STORE_CTX *); +int v3_asid_validate_resource_set(STACK_OF(X509) *chain, + ASIdentifiers *ext, int allow_inheritance); +int v3_addr_validate_resource_set(STACK_OF(X509) *chain, + IPAddrBlocks *ext, int allow_inheritance); + +# endif /* OPENSSL_NO_RFC3779 */ + +/* 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. + */ +void ERR_load_X509V3_strings(void); + +/* Error codes for the X509V3 functions. */ + +/* Function codes. */ +# define X509V3_F_A2I_GENERAL_NAME 164 +# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 +# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 +# define X509V3_F_COPY_EMAIL 122 +# define X509V3_F_COPY_ISSUER 123 +# define X509V3_F_DO_DIRNAME 144 +# define X509V3_F_DO_EXT_CONF 124 +# define X509V3_F_DO_EXT_I2D 135 +# define X509V3_F_DO_EXT_NCONF 151 +# define X509V3_F_DO_I2V_NAME_CONSTRAINTS 148 +# define X509V3_F_GNAMES_FROM_SECTNAME 156 +# define X509V3_F_HEX_TO_STRING 111 +# 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_ASN1_SKEY_ID 114 +# define X509V3_F_S2I_SKEY_ID 115 +# define X509V3_F_SET_DIST_POINT_NAME 158 +# define X509V3_F_STRING_TO_HEX 113 +# 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_V3_ADDR_VALIDATE_PATH_INTERNAL 160 +# 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_CONF 107 +# define X509V3_F_X509V3_EXT_FREE 165 +# 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_CANNOT_FIND_FREE_FUNCTION 168 +# 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_ILLEGAL_HEX_DIGIT 113 +# 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_ODD_NUMBER_OF_DIGITS 112 +# 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_SYNTAX_NOT_CURRENTLY_SUPPORTED 158 +# 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 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Sources/OpenSSL/openssl.c b/Sources/OpenSSL/openssl.c new file mode 100644 index 0000000000..b28b04f643 --- /dev/null +++ b/Sources/OpenSSL/openssl.c @@ -0,0 +1,3 @@ + + + diff --git a/Sources/OpenSSL/osx/libcrypto-x86_64.a b/Sources/OpenSSL/osx/libcrypto-x86_64.a new file mode 100644 index 0000000000000000000000000000000000000000..5c211609d8b2669a863d2d1908c6b47cc5c956fc GIT binary patch literal 3484368 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

EXomQ?a6=liG+VVn7@H$Au$PafO*3v%jLCb%+ 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

uA6MO`O2Ft4TJ$*M&A z(!9YDG7dK~GwSk>IGTNkPx}PxcXy8sR!v%YBbYRQ^e|0ViC@!ysE%*_q*2EkIumkJ z9yu=MTp*_2?Yulm{fW%{)^d~BUC-LIFArREbg$CZIK7Qe5=&3?zq}*oV558A6H{{2 za*g$74oXvB(sX~Z#H`b6muby-J!*Xal3~GP-ECz*zuW$}K%-&dhwXC}0xafkTfa2K z>UO;ANRGq6u!b`;HkUc*hkUFW-ZR2q-;G;R(_PLX^umzU;~!4TO?=W|!#i^^D1A!8 z>0ZM(rRh6=O1#v3@$kZ}#-@s2)-9Llo=zrMkjM5rFJ!Wh3=fg8y)wyeif7CNlMO{H z{D)RnN;h41b2B*Ruxe$-wbfEHJojf-4uDy?$d~ClcO5D<;&M~1~|Y@5(g)+ za))h>x^?&5wU3Dz4YxkOu^d=fcdlFIOzH4m+c{Ean?oWEpWTyRx&5G@eD5oM&fUsh zR9{%AZZTOo{`{4y;EGTDk*;xLeLaISFHE)8e7=Vhy{oA#ZR)~4Z@zS@d>y^^brpkWZoH2m0D{WJgb+&oGsVdRx`qb4sNb9|8o4;rQrO_Lo(x?vk%UpTgbZF zPfdT9)z)eBCGzsHtdiwh_P$(ia&2yW#a*mU*j;Wt)! zShf$^O8W@Ur_Pl{2MokoPu=?4>r_ne|P>$G(*~`L5?EhvXM)#Jv`O zjlK}(yS?D?n&34-YsDkCoo_$T#xbv4;kdO|=>F#+e%hgVFXeQDldtaNBqr@RZK%_v ze%>N>@A-pkd)hqNt~}ICHT;xb=*}k^eosnmM!ne(#WyM$cBy(pX6>OQmzN72>vQ%i zw;NU$M>{Z&?7P#;bdBw#*ajlV=YH9kIn%yAdhOP>Pc=UM)LFki=G`JpqB3_4i+DU( zCc{5&N55P8S2_(7cC}|_Pkwb_P~^;B`p%!%-(C_viuNc-jN7NI^QGOgcK@de&kwIz zB60M}))>3(pE?a@)Soj*?NQo!bkdHtPs2BISA0q{9LV-wG-};@+u%5Ux?{2N(Bk)! zXYX!5;@{_Tq_Mo`NzdT;>npeScwo|Da`DMm(t@|zvX_^VdeIIOPv#S^X3tv1;?CIA-6(DK10`484XysG#3xuc zT6Ag`9lq{xtt3-oYT1gWB+KH>)4GK#x)at@Umi{?tGUuYQ1UQCf6gvfKjjCLx6&#Y z>)SmU7Pn8^-3VWkaGY2#My!u6@h0Z9hhP18K+KrzJmzd%CGHfa`RK9d(!smlRA?V| z*E}aSkg}VcHqLl+DYt)<}5%rq-1Ck=tGM*{Z%6Fb05z1cja#F}{KXy+C%N^S4i!SPh zDEA)nC@yk^CVi-;GcjLhUwBR0tcbZ1gYPw^w(Wau%AT* zm)3{qjenyod2xS5ee$rT^%*B(53eqHyxwB^oXuyQO(bWA755VV)VWUG-zk|^b7;K1 ztn%ANUz7b(UlT9ya&{W#+)_DxsG5C%g8H45!xlz_Nxrgbj+{=9(ytbJ$1)!gT0{D+ zS5O<&+w6_&%v&^GROhM=`+-{a&QgOqI{M1pk{K+cA~ryZ5Sty?v2aRV`};j-#75Ny z*uP0BaWt-!j@WzP>WGFNo|T=UcVQ0b2gw=tCr=vbahM1#^RH?2w~FJfV12mX;#PT@ zJMzQLxN}*X854H+PqlPZUR(N1Ke@L=FH6s>7kagiwX8Z_u{QEm(9m6TOkFLW5mt=+ zt#sw3yRQzBIVPFYDWy2xtlD;RK(0&P@sqa~*fn^(D&OX@{h+q0=|Ml!Z3bIbTsvlQ z-K4j8NQ_CNxk^z=h_bkxV)E3XJK7a%=Jr>g;?5blGU5S0>&05H4OP;YMs(L|5$DVL z23>7=Vb^WsyOZ(sQ>bGd{rpn7kN-7@@3_7-6Pl3pb7%C}Y)LXXX#k}-;HpSKV z*3?-T9oeQ`QMcau#ES;vRrX7{<5!c+I@4`x&n#s;9iK4Z)u`cfq!aSa@7|V^XQLFf zc=^WNLGwv0|s7`g4S$L$HG{2n(s%W59^ z&VOms$Xh1f>2ESCY0XycV}T!gR^Rd3*eF^4S~BD0fXerZWA+DlT~2BneOlQpr)k4- z*|AoKnFGehCBJMno~$x*gVGq<+B#I)3ZyK()x}#9MJz^-aAFf<2wftr$_ed zsbWiadga-D;n$8-?jspr#f|AbBTuaCO_y`tJLQ4=l-tRrx9)}KoRfPdrqk9L;pukh zdBZCAmOaC?iwg<|gjQrN&**mM;UQLm4Q($!C)_~nmiCRrJM@esX?356&yODIGw!9I zN3#FdxkUZYqU_GIYBy-R-`_aZdsoc*Aw)^-%iz}4vGO~090`>et(;DkLudPiMrj1> zx*G8K;(_y{U*~HqKKk5tOpDHmx~Zp%wq@Ez)Q&k&cGBvF+{QcI?++YkFD9|A+uGKN zaTN<~;(aP@sw*;Vn^iVdd-G>X-?-S6b1bDK`OU+%8N**{u={0KHZ9fuysqZ_h3hNd zFKDc4SrdEvzMSa`1O2e_VcH>^2D+{$Znd+vojjniTq7o1n|nILW&2Wh*GuJ3OZRF^ z`By5f9P#+g%!Pw%)MmH3RexC~dAq;F6cyISqIpj)57SueYx4E}ZC`_6X6qfz9cDRm zl7mYs&E+&+u3J9)ieZQH&@g{%Mr=a!tG=EWJ4>@}giS5+Z|W{7m+ybY%Y96xORv4X zeHq6)1D2(Hm|Hr8wf`wApg(=Ur?;PFZukCBOAMAOAyVhBeyDnRbU~1l{zSFbGwZ%) zEDfkVTysbHW^;cI_j+K~hucQ|!}K}v3H=Hb`8Aytr+8xBIrgV6^pX6c5If>|QxP*V z$;kY3@)orYrPN6Ay(gKH-K_@|EZ&-0`+lb9hyll99=wvy>K=P+*QqN8H{&f@n>TrWfYP>`OeTo0V^vEOCLACwHp3C9QtKnN1_T zCce~scu|b&bzqRc)*I*Y#K(8!x%py&*OsJwZ5i3K_ObCg48UUb>~a2j!bf0(WM3R$3EEf%zfGEyDk$|@3d&$w(s2XvN=Pad;6EHKQdeH&N&T=N>Ux=Av7l#JD-qdBY;p8INf z4cV+*`+WZUeH;Be94-1r_Fg;ondab&o=H)s20S=sm^!$>pM2EWeTOwo&zH=5ac~~H zl-;-d-J?xbxsT01zG(5_tQgSHcZ2NBV?&&RSKG7Rhu93*wJi5exOm1&&%!$wTT1NQ zeI0fv9}C>ee*D}aLyVq%(w2U#@tv``s%Jl2r7?p&TU$Cy2ALa;*sT4)eB9T|u0~t> z4wv#tJ7Vj8pY|j~b-VX~R3^Ep0jBDH4qMt~Tj@-A5biIL@<+;)y{1+~IvAaR$ zh+*|`^V<&!d|gcraR%;GIC5`Be#i6y3Wr=2;~KOchsJqu;$^2hhR4UACp5Ora}je= z-~G%%t|iZ~$!F}if%l3OUeO9my4`B?RE{t5AISWga9nCfdG+$TJEa+3hR3w@IIIAk zQQ4*PoL;FbP7E}VdGsdrU_#+z?rb?%bFqDsZJAfnotHWF8gu87UuyVjkA_7zd(=MO z^KN|PQ=aYS$g<|=vx8DxVh_pWH9Q|gp696#58i%ic82bbYbp~bRnIW#FKy7U$33U6 z>Cv62_H!##1CJav%8}jYU)e1_`uOdI8x|bDI7C%DZs{JYh@d4N8W-+P49%QvJ%Q|q zsJS*GEn-p9wXv#&9FH?2Htjfha`EHz*|ncNYJI-C);o_w+*tTwPDXdt=hxh~mBcK#X`Y$$PHnecv2k2L&pVx?+}AfpJc*aiVz1U7KJ@*@ z;r+*tBpYg?6Bvwlx&Hmmdui&uSUqAX=i$kEQoMi5kfucw^`CD#v8MG{%WTdBFDLmJ z<;bOL*xkxLC0l+RJ#YB8!-`CVTvPeoZ?A{d)Gg|V=-mS8E8*5+tt!C`Wks_GJGY7~nJD%6l>%J#J z2Cq?8&uBY&a=+`iYu*bMlo4NNUz}T=P|#hK7NT%r>oA!@&(glr4R5>9TQ_HHQj!ke znjgNadXdArErruUX5}S+K9g;@W@+ZsS>jvG&FBxEt5@om&$DtF+6*%okE!U)yu4(A zTU>;8@RU2qkJXLobMDaR2@hsyo&Gd}*7&96=%E7LyKGRr5H&d&~wdv7IW9gvu@Vf?(je(A4I-`Ev! z>E`^@^A)Yh6ZcJv;i@A{_ts2%Iow?xN0LyT@k_T(t`m*xkB_&l3y-bPN zJ}71B+}92}7u?u2c=xM@zVmiyyuJKY>{H|xnGdbWdk$XXO*&m|H+}pNsT%8t&*I+l zmX|iZW_?f_U!Rb^^=d}pq6deqwDY<2mP`6pN7YwJX&7))hAcRqzDp@gyU_doK%=TK z*AJSE&TCpOJ8W_bJpv*}_sQRT`jCu6#jtX9<=V7S;{7$8&4`>&ioyK1mc0uujIpg9 zci~;kgc%jxHeF~P*8F);&XPp3_QltS3BI-_U-?7DEV*V(lMMYK zZw$9h-FISphRZIQ_h;Xv7G`YhGq9i`naFk+`67L>_qt(f&L^L6f?dvD%-QJBS3SP+ zVUKr8E5>J#Yvu3OU%0sSl(^K;@tHkFe^}l>xU)}V@1>mT{@!M#ofFra4|X-N*Q;vX z7jhU*7GaO$22%^ukO#E zZnZtfVlVM}^YPO@9{GFrTs|i4?jCmGB<#=@zA+@DUQ(u)O~za6NfTby+Pyn;G3;tZ zo1sL9BV&aHmoakpIDG9rs@gKpBwl8>^!3*PlbbYG1g{BgG#^nI z$#J=tKY?jptA4AyV|L+5?&QiV)u}a+_Q}rY&uy={cXOhwRQv%yG0k@?rw%xp(|_pG zj}NN)ZAwYByk~JxGdOkrqD8)9%k~Y<9D6c?)6b~3|AR5}rHoYfl3uPothmx%{c8^$uYC6+tYpg4 zSkox4r@b_JHfy{sd>96H7Q@FKvQrv2Ir`a$9I+iEXK0Hbyy@@1+fXvbVqyB{Pg8rH zZCmqxhl_^C-C>h6*h6!5PhTp%{86(lQ&)1Z>m^U~$w#(Zi|tUo6cArh=z95_!*YEE z#mPBoI)0gP`tPLsf89INDJQCQ|J<5(U#n^NQ-8Db9mWvxfdpEow>3! zF*M}vYg&1E3n)My}a>6OrZ1l%kAXa!F{r7 zi2iE5F4c{ZN+>+pySH}C%kH~tUwIX8+@Z9?cy#Ze>NOLav=YBOeX5sOv8Q58j$C(* zl>;-3WaC0<6VJ=w7`fnKu zo;?|X-ZPE6MSr^EXX~^g*jp% zS?A2M+qiqjJ-&lPFJ-q@`zHoRh#q$D&O4nOcc1Ssw^@EA*Ru4gWM!2Cf7bH_G$O-k(4o^@MhTFISJ{z?l}8jn6Nd26V@E@`0R8Vh3shp_Rr z6$AFyjBgyZzV&>5%7@emcU-T_Cd!jp>#q%Y);{Qtv`p^GRaT6JTJyOTWzt2t&SP>j z(=PTbnykBZ>q_In_tw%DS&Y0^lA?Cta#la*5ywo;Up{De2-2H!>`si&v3~o)!gsN2 z>~F5mkxT9N`1FxA(nI&E2CN?&N`G*0gqr93jP{f-_95@G-mi#B{IK&&bN8>jz8wjZ zS6Du8=(E>i#Jhg)JXQ}stbRS|pf9&*M0?+xx|@O=ugAKtYxv?`yuoeL1ch!)tG5bo zDl$f$ueV_yogTM4ug$O~_0{$jVy;gcgZuZZd}AD+w3+m>y z&Yya3vst0CdfCytM|FyQKR0gFeR8LiF?&+j+Dl)W^n5l+->A75`0{j;D@Ga@5nma1>$Y8bWIgKr6F1PlZ^VCPT$-~k0 z-HQTF*217!QKxClg^Sf9l8y$Hk9}dZzAiLwOZ~HYa_*O?(xwHa-JV9COu*{I^A?Y8zSx_wjI^UNYP}X6M?ft?RNrs;Dejw=-o^vDw6t8kKT0 zQx9%{)4Id0RRcNY6D`)f z`bLdr(LDNZ>m4jZx^0$@l-eS>6{ndK-2gt! z2|T!0WZ@fva(LYTWhjofCF&&VSO1*cn_c9fnYGrx5M6qIos;{PKcTEk5L`bcaVQ?odZN=YR=ONl}4&h;5TxUkX_=ELof3+?n6On;qlpr9g zgz$vX{|J7yEo_ z|72gqhcKB84-x-<)33t)5-$T>pud(UgwPgR%OQj&(?WF!`t+OLM7HR;`kkRcO7 zJXGKmvJMsh`TLOwsOxi!pW;GY^23gZl;-=k?<^JjwkskP`^~)&|H(Qu-Ejur*40v* zBK(DZO27&#!wCoKC;hG!rtW_K6Rr0Wt)~^mMfwTafI9xJev$;ch=*uBZ51pSqxL%f z1O4<@`w++o;W$vxU{77JyNJs_-4Ahz5MI0xo<86usvF+=yZQw8L&SAl>Y!}Uw*Qen zLAZFL-ud0*hjm^o{!|v38`y>MV_S5$0ns z*Iih=K_Q1bGYT>Zk=qR!w+oT8(P4=-M40OebCgpw#66w_IRsQgSP2 zD2e=s4F)s|r<(aY{Y^As2@*1gSROVrmtMi8=kgb>WNEZSn0tNaLBo*m997DeFa#ci zB|dyfXy%*9PNqIAF{t2%uIQ1uu#)CGa!`6AAO}?k;V6YVvd92Qa#)vn$KTfp{v@Az zEPjCGHJBh1}IOaKd+eqzwgObN+7Fy$PwIv01Xj)KDKO`6GPPXQlU^e|F z-xPFU9qK?#F2tt&M{KSFlK?gd{x07X6fJ;P5`m`_Ep9K{g~>G)c0)5lT^snO@)|{` z$OXte1XZ=SOQQ>gXg6Ea5RhpTT8fA@k`d+t^CLv4s!JXq&k;ZfR_G`M({J&m#fn6x zg_hh5D`75nNee3(!kL<|ng?jZqIckKgnC_N4L4}`wm-uU@&>z}|95}F|L#wSTh{+~ zf5QLnPx$|b{RwwMN8*phGvkDvmqmZ_Tpl}caQyE6gkvBN?rY^E+@BE3rw-A6g4`d+ zLoq!M&N|^fg@_Mz{6+c=kU;%!?pJsPI#^H@t)37o`V`ARqh-4jczT z7^1@oF1p68ev0EbNZ04gpW?!CjURSY{Ht+|-yYxn%`w{F{Z4z={TQ7Do0$nmK%k;< z{Lwh=?~H>u0Mp6_zvm6`!Nc}nMLyV zZJhakxE~`7`~9G=MZ7Iy=izXH_e2MNr>ARNG_EY#k&)89|6otX-`1O5_G5Ii|Bvk$ z|Hpb0jV&G`y(x`f1?LEfGGV0yX&mqxb9R zCu6=S2n`|pD?jiD1SzP${zE@7D0`evD zr?5RJu)<`p&*Zdn@)_>{JU6qn|=~$o)^`V~H?dEQBn8`ESSv^)XQ4 zmgl6TS{(*If)a>iKv}^mJ`emKt*!$ZJx%@;~O|m)U|ND z?ivUGSj7L|XIhBv01wm0>30#HS@SHdEYO?ndix*A3w@kunwU^tz$gFTlouaiC6T}J z5XJwgylfJH`6e$MU`lG9!Eee-xDbwmFho0o{OtpO7{UQ}z8}Am7mDd1InIf|BSi>L z5Tp41Z`l)^uZ6V1LAIk1{E@sMet1HX-#*ZupuE8To3J?iR&W$Api*D>#83`;XgQ)BlIo z6Q-trd+?9+o}TFQx*|Wp$;obH-){fXUx*c`fj`v)DCYo_l5?oX zzvC|eFL!ke>`jDn_T%k;BsUX8pM?_1jklNE|EAom6p~sbH=_7Il^elq=Mlg z6{6hyN2e2V3hDYEAb(|d6NK_1YL}nwF8Xo+^jm)uUT^+j@36oh3bkM9xpa-A*W&N~ z^XkQ3_RAOh;#BzV-G6s{#XxtQe%J98Eg$^}_7il!vG^bLALY9sg!7GK;rz4XtBT-> zjxdiXF5+(ysK09$MEMaO(oSc%V16z*8-ZPM_%prh1LMzkHbX z%ZG29)ACsSg>p<4_b>ps zuoJPV61_Okt~|J71pH(XOSVJUe`dOnk0{4dl+9ZDJVuh&Hf zO40q->!J^(82;;ZF@jQ9Ki0)8a*dIh0qpS){LMF)^BT@l$%OAI6lXH&B}{r2OQo14 zTTqJkc^41QN z`SLIDD9pPwegChwYaNvG>c@8d7wS?4rM&pp>jJaiO`rVhbt!^U%Kr7bUw2=H4xDwQssocNb zl9WCEu_b@5@V`*E|6|r#$QZP+XW-JAMV>`2;bv7SbF-c+o5|*x$(D2Z>_9HxF5C=0 z4`D`H$8yOWPF59-OFrUe)zi6IjdY$Ye2uA^#*=-_CE0OY(k|YN%mE-YGqPBe24De5 z8o&cM2>>VM7ir-0OV;omdMsu#`n|zLni;u+^`$OGhps-jLVbF=K$mKKoCeXU~X$* z?iOxV4KVk|@63Idn^g&o19SVOaLK=flL>J01dTXU(1;Xs3mOr40)?aq8u6ik z8MFk9*B2P3uYmEi1dIpFjSP(V035_e2nX>2IEW80u%D2D|5Rv&42(E~uwmVW!iIGR zVZ*uu16vCj_)l^E4F*P>Avxj<%BE4-Ocrs50C5He_Tva>s4BpR5*9&QfDS->ECHXn zg1UnsARM6}ARG_`gyR5kmI!DFa2`P#Askd#00$M;N}!>Spe-1Jw&)4?^c1uOgKCQ~ z)QV`7U)-?60EV*5B}>ZchquIS_YY^(o%mx^>AJ!4~z}dQG`X z9;I)O&F-`sqP3*r)2Ns7U$bg1W{2A(04hHoE8!sE7aSZsh8TmtF&Bx87l~J|US$%Q znQ(dW1@YnqF>2JPImDbfa4WNcXlNi_zI=I(ICl;ny%HhpfXl5*s%XO-)VbiSy?H z#PSWqh7H7y9Xo~*!-fGU_7q~u6k_1Oflr7hPXOexg~Y;zgo=tv528m80R8$nar`*Z zt5+`r!oUEEu((IuyGNLto7)j~c2LxiN5rE?#Nx$^=M(eiLy_BO5;JEK>FMcigqs@_ zy^&Aw`9w-e${u3R9zfyzXX5i`V(Zqe2}D8ypt8Y>@bV%W8yhtVO-(>)SToVwOx(SD zH(eq4c2P#~T?dp41nI1#E~P(f5w5VvmK>P__S4OO`}ju+8ZUW5UY_XFrw_$gnwpwNh$BY` z7^LzhyuE=`%@IUI1d*7SSVPp*0LemS30YZU_wLQFnsGjaj}Jkk(WD7!X=tK-wM1<#(Z7HHRm7@Q&{VU_h_W(5QBm7cQJ3&YXd!%$Yz;m_S^*bZIm( zdNefYIzz(Hkl40u+gsx8TWDG}Bf`jtkdcuoB}z-7iR-QsSFaNB@$n{vi3v2dLqDQl zKjO=mFK3CfXQ9cLt|iv4B`hs11Bt*uX!=vZApAs8QPC?9dSHRLQ6TJupP%1L5OQFJ zLt!A?1WA(PL8yTx7RiAy6T5cpVuBC@Ygjdb@Dd9aEZ6};3oJ5pAP6fF6BDBXLJF(` zTMYE-h3_fNK`4P`oEL*I5+x-i=^%u_I`SzXe8lzZ*SCVuArCczun`;%=Pn2tu+kA7 z5H6yvt<4^U3Ruef1_%@J`0?XGAVk1g5zjz)2nh*^TOc&RVl~r1ScvlS^2s11z-qE$ zARNThsZ;NRPyow4wE0VJ z0CN-5r%zV~rUsUbN(5#m7!1a4U}9j+)jVKc!qwF^8<-YYwACM&m1t>ckpddGju4WDtde z3!rfccX#&~XjBl1v`%PDV#}5-CD4c<8XDK3@rVx}K5(GXKtw*aL1Pig$;pqQkw8?m zC7^MLuV25GL!*GmBu$0JAm+`R7Y&U7qT^!=#3y27W5t2!AVSj9f!M^dWy=^qWDuoV zS0FB7YHHd7LAh@I90ViCs1#*=_ZAZp<| zfjGqB!-r=8Q9$G(Gk_Sxr%#{80uey;Jbj_^M7M6;HbbRB1h2S5WeIC*>n%`85XJTn zP&wkwn>Wc&DG$^iCAj(&{0G!Cr z&tC#SL8MLe0T_{$m30(=fN1wqhs;EEb@h741R{Pm9}*Mq-@ng-L?G&GtKlJW^XAR> za1%s6@Fqlv18~3}h$lkR2X%_l%mg)vT-G1V3RD~eC1}cSc05y%) z=N+Jh+RGEn8ghR&n0M52r=j`Kn(hJfg;u~D)E{a`X)s^tMa%(rg8*w22hECHx(&<# za!nhUE#%%y;BH_o@+}ROjMjWMsCo1%nt>hB%I^d9iCS_ourqpF4Ipl4RgVDMqt|r~%mB0=aRA&i)Y`8= zU7(K<_kJ395%nDkam*7sKHgp6rLM=ZC%ol2nso<8P zR8Io&L#q`GY96IB8PpzXo5x^o(b|@QnL??I1@nPkPaUW`^z!&%CQ-|XgPVs|rV+#r zrK~%+HI(-Y?hJaTL%{t&?=Jz|MD!XwK+MrvM}pZ#>m3f_j8?4|m@~9?1HtT}7qbc6 zH?(r*;6|f&+5_A>^!iSMdx%z34%}wcHojo)(YxynY7w(R-)`cNMkE zJTOma-JXG4jM}pt#2T&IWN@3&%gF;XiPotPm{Ig5CBfZ6Z`BLjKJ?nGz+Fe{sRL>m zt&%^OUG!R#;z0PI>gu58Q0rKOnMdui1l)483YMTAQA=ikxJF_H4ctJq#}{~YY@nAH1m+sO z#ns?0q1U|v-BR$JK!c`ufz@9Vf0e_f}4k4wlkPtv~qjFe4*Fs z1a2^T!TZ7OA)tvf!5v5IHUr#M^foSoJAl2fW8g-hH7CKHL+{BR+z0et62aX;FJu6i z8?*}V!7W8^Hx0T^=tY)7cMGkUDY#A8t0;tS4O&$_a1*fiwGg^h=w(d<_XVwZG<1*9 zntcMd2fd3g;FhD;umHM0=tb;;ZUpvHI>7zJUf6taZ_&Fw1Kk7kW(~nzM=y#8-9+>j zB*3hrw>ci%VYK=!;ErG~b2zw7=q;vz8;HF-J8<{W>MjHK411H?q5FxwzkATlK<`rp z+;#MhSkR5cUf)b`#+B?4%`;(4P1rpEP4Ue&`l&jH5)@-B;i z1!ouVV2Y+XhjdfZ5xyS3q6~t}f$=mB-&>i(_cP-0?Ho9Q!Q$t&oS@e@$qGhYq&Z}< z1-wdUhI|AxIx$no^JY#645&paDDX&KH4bT|Cc`0lYVtgT=PbSii$4S2xX+eh@fXO^ zLL(tZV~;K)Cv1i!j7{>?;9UdcgO?I)hOOF9@8x-XT{U>Z;ZrH{IeY*PukC+&OK%2m z;^pyGJ=dVjEOLds_fZZY={*!**uz^5&^cXR=hr&}6==hZ2o8Kv6^H@f-e$qeeE5^! z_k~B+a3VLTDYqPTiQ3Ntu!@{Wie50UwSER@#xD4qZEE9$WYdrWNC~6>QsO%mID82X ze}PP+G)xg-5d@nL^@R#ZvIVt)&6ouBrLcfnaY&d|AexbYHK(dAtaBb0vcnt&E@T2? z-C{8Sbx6zt3M#RHg31&XSU^KHAcL36&-F&a)cZgcXv0FGDX`70fD@2VBYsZHA;mf5 ze3?eWt|MJ6Adw;qnpcSh4Xw-qY}NLC;Y50=DRU$J2#RE)j1us^3lZ1h@eO$VRWNm8 zsXUMG2oook0*}p8=R`W{wB(owXJ;zAcz7xcX2&Qm@>Mo;T)EQI!^mUhV)xanVM>^% z>lDPdL0K@Lr+FC02(8%=O2WRddBE$?q*|hVVgn%#Kdre`GD1riLQIGAuB72Ut}E#U z8R8(s1Lsd+TpkkPaSl$L7rPRG;Nc1<#&JG19$|1|yb6Hfu?xZk-4zVh>v!iv(HV^I`!3>ovlUBMJAIoC^~d`T5TNY{Wh_mw z|6({2^G}XU;WK5-1BWQy4X*JNHZRy#uf;xIm_l&;yk13gf1mII;bGn?0bgMxP?QEk z+|Tu|_J@rVCe{>&nL>EN=zj#i+8?$^n8QIBHUm6l&2|xfzdL_WNVg~$P9EE{80ygGU4zf<_QDf5>&21$H@I^&2&>muv>; z{8UUt<;oJwSVVjASI-f&3DbTStm> z9%e!)1)&jyP&sL3VF&>gUk@SfM;nJX;J}HTsAmH)0>@xDG46m7INl}9!I0PeroVtYzaPJxr!AygyfBNUsGh?3 z-_^6~P(IRW351AZS3QgTj3?rWY5vK9dX6~yT()dI z6kk*G)aUn$Phe&>$uP5O6xp&JfWrjcajagyiNhIYRwMKrC_V!)PXLVC?K@ZB{ys8s zKnn@)GQ`8xIb7*C@z{s7VDTx2Wy=;L8oT$dt^R#9VwqWQfF{*YnHGS;xRWPu@SC_q z!)Cw$q832ZG9x!JVE(}G;}M0d!9R;K#FBl3nC#xB;`y7HY(}c^(@|`hvLBg|yIkEX zB3T-@s6B{504QO*MG0H6h{54DGI#@uNR&WC!m*J-kq8@Dmpt^K1mxaqRIcm-rK-ORb6}k84{8JA!m@NQPDjfs=42R6eQCMR^|tY)y}7;iHnnO~Ywd&p35XEDD!x?1 zOBIYS0W2aS`G40w=S(IcyxHFW!{_rn=ab1kFZ=AX_u6ay*4}Hcz4sX>^2j}u1F{Tw zTUB;qMDPU4jJ|dJeWv7{c~a)9_x%*aIQx8v`L#zKSB+V>I_*biN0LVts#Idk7BCJX z$YTK#J426lQ+HS#b-8U*_feC&|32R&OyaYG-zIT_6;NhO=%R~;t8ATdTC;htav6AX z_PH=W{&8y4?o981qmimSEk6&K1`*Hr>;FDe6(FA5vJZeKXP=qrCP@Tc1sM{9uaKcj z7tCkj_p`~+YyqU~Jz&Y%XF(~?_Z66+Vnu|n+1!do+w2QJV^^)LoNOx>Up}|Zs^wHw zZ4WM6wE-wGv*8QJSl!2Z-t^?JUK8WW)hg?#)weQ5I{%t`MGdk=hxoG1R&6fZZ-W;aowCKj$DD?_?A4UE)h_%KzWPh4Aft2|pL97Nr zEImA``Q^VzrMrm5O{28Ov87^-yN;AUcPZ_0|;qp48bXd6j zQKK{~T)xIA%?_78Y?O`&m)9DlBg5sZjndq3dB`Xo9WJjjN(;iz3Je*gW5dr1h!~~r z@UsF4MyWUatjM%cs)wHyi8M+B;qnTjbZS`1rBOOP{H*Y|Q93jHtnjB%IxAfMicwk| zepYzJD4p*$N*8*K8y6YhFEJ*Td5!NZGsfMc`oW%Ap4pyTJac9@+x^^F`wvfa+E=M& z^KXD^{z-F9ts6{5%^BnwK$B)dni*lR9UOTc6UFqxPvmQk&)Jqid+s$~xaubo z9b@$>Ssh=Z`|_*I=pC7y{!F5K9W7qhR*#FR0=`ri(@=tGOssK{DVnFT60&0ZPmE3W zrU;Mzq*n_;aXlrajOteXAd^gus`-dX@Q2xR*R`MPMH=<7dR>@!{?~ zKCJTSb8PduUiY~Ul1HakvKnM=+O{v9$tSH$X2)gn$?i-(X=QScok^-u6^dGp5z?w< zAtX!yA$^XwJg#FtS2LN+^tza=GJ6>F+FX=#hib+{2331$KamYHsE+O6gGotg!>?AU zI3Q!2_S`XQPgORx_Y+z3U7}NEX7qhhdsZf?DE|Hocv^)T9b-k{(q=_Y6)XB2ojzBq z&-E&qWO?~0l*|qq@59*^G3g~dYH`^a*7#G_cSpt%^QmrPK4s;z!zQLl248+!95G=F z!73r9Nd}+eWtPCF(gVi!@VF5ygdd(b(r>)tb#45T8AWuOP)>CMg+@d;#){(D$6CbO|jQq^`QyK5b$GUewCS#zh)wa@2zDPZglk7M_e zXn5jSuj}aDxY;uS9!5n<@3+&DrXZIs(e=VqA#t1 z-a@0O#tm)pI1Pm4_m=Vlwg!sn{x}U}A^Uzoc1r`rq&$#ag5r^EmNCs-CYqxtTWHa) zG8HA7FQzCh&8LiArlK@kC}*p$JmH5eHINa*E>AwK5VKUAD(rGFE4^77eg+dY1KG=5 zuX`ACzQ^lY>%vTMRBcKX%jTbq*Sbwo{(O;eWkHVxTxxxG!NK()8&7MzKdy}%V60#osQRLG0_Gni7?zO{PqphhK zLsKq%^0Df#uC9DQlX;EHmQ1>~@wee?okJ6cwryW~-Uqw4e6ys)ox8eXb=uf`?S}fg z(1_f;etB8&4sN)*ti(I|gZ9lMAO2DG`KgJ622Gzf;lf!{1H)!cn{>$wzrjR~ z6L@x3QuZ)s+OU!(Mfq!LLzyyHXLEFOTIa#Fc{{glyl7-r+Q_|oTE1RVIxerGvNCba zL*Yx>wlxi@T6te`YtzO7#l>!X*4@s!Cn~Slx96oR(;R~bKlAi`S3mmT{g(xbrfARn zcGZ}fH%`2G-P#Sw%S!ZuCm+A>YtHlfo%hre4}9yDZR^i3p6j_h+T5J@OheUZx5wj{ zdgHkB?zt;?-Rc#Q!Kus$88%e=%9a?PvpB!o#)4r?e@?!^H zzOJlv{M93`(7u&@MatJ38Y*%_mEl2Y{nFFxp9o)B_xQ@;i*B9#&Dw`5hXy>s!3*d5 zbM7e#j7@b67?9d;;J_Dt`@jt!?AiLQ&O^=l>zda0uc};?lHp9sICgN$_4A9p*>7#% za@ok?>EG0gCJo9wZ{WpA{gRWjE_YnMaNeXV=ifU1YcfCdlLPCos(o_pEBmD$M65<=)B~sGluj(KWliu;RU&=1)p@T8~x-HtG@2_`1%LjfwYPhD;)cF zZOo~vs7iYHp;Z@-cJ;riwfUt%o7ZkhADf#tw&X64%Q?g`WL$ZB@q1Z~HH*Sh=#_y6C#3V~4ihpnLoS3S0vU=g*t)b(tr$xp}Mh z%8r%`8yi9eX^EP)dgcA;?s4P#WnGbYMeUDP3|Ukh7`b!DOP4%ZSCu_FH)(X|fhL#k z)>ETv*Y;a9Z_2mEx&~i2^76r>WbW4sPv3w2*u3=XUual8HrmwWsDHfX8;wubToV{K zIeq%KedibC54!fPw#~y97V9JKSu*8@M{8FP+u7EdsgIjDaQcnoFDP3wVN6|JMb-zq zULNHgH$M59-&9{U;)+36&Y$c1>XCz+u4&)Xd`07LjKYTBtZ+U0&;wtYb>rmAjvUxn zxOex4uQfcqGB4NVaP8Z@=^KmY21m`BHsvdO+t+1xc1CkIH@!SKR1r$eI4}8vg1mv( z%$%xczS6cXqxjZw!$({`ASWp?B_%gMF@Ils>xj&ugDy#O^zXmyE`MQdZH05;trNd7 zV)(#sta-5JVydWsDElbxNLc$xNVgf5c?%Y3fP9Ux`BR8UF-4tDm8?V5y^v@T?6VLt zoC)hk`D8Jl%B5(}@aYj0w+;wsr`n$cQraMSEmi7-^^y?PVUY3#*km*;sl&P-P>c{& zvIz072Qo6K)^!vs1J?P3Dv826UPPrGhkm?yrm99qI*8o2wsEPn^@d?#57Pxs5 z@*P2p(_qiHsEVDCdjzaLA68z5h-D*cBdPLEAfW`da6`6N5M4K{69q;}V59lK-&2TT z2r>NxR(}eXuRxTC0eh`L%1GFt9@ZHRjI{wxsX*BWu=PIRauzK5FmRa(yB-0urXvv`$lOT8 zDof`6!)^-^l@h8s30B?-^gasAtO1USVc8d8pS_65OrZ2FAbTp+UJIMPMU}4s>gs@& zdc?a8ajZZ@(hzYk@Q?{Rwgb5z0AH(tmKPBFhk@;7!0s%dNW{Gk*e^zuvVfxiFy9JP z3fn&l8x{Z`X~4}$M5GbeS_Df!3VhB4jyr*vT41UZan*s+Wx(`ipdthDK7tx3LDb6- zp?iRY(XtkU%n1X+=EM4nfZuhfgEAoZ6`=MRL}H&nAkbL`tY!jt#}HRH(CicygnD=Z zmQO;&j>udgM5Ys#AAxwyLgm#Xn$uBhZd6|taG3$rgisA@fZqmSZZB}4BQDE;sE1K^ z$54I4fSd}TGYfUK8j;FG9A_ckWvI;Qh-w3Ba~LW!8?_M-yhq%nw<^r8n zsDXv3gj!&CH0o_HYA_o(dlD#ZMZHW#HKd{ns!)MDf!zSAuL3o^8kpS-WEB8UI;!m% zNbwjXSb=D5M^txEl&KVB2<%@+Q7(s_zYUp+U}q;JI1g6(Hst6;4A#O1^ANu*Ai)ib zW(f;I`gTNrH*66_l!qdYkMY?`sxlEaT0*gYiwF!wY_=mZyQ%gP$XS6{=Og}g6fX~! z-G(?Hq`FIB#dgT^BSb6_QJMxDP6c+RQN6#RS{)QS3rKMywo8D6T3Lqywu-`T2PyhC zL^TWY>_OB^g#=XbLx|Ki#BU{4&;+y(F~V8cNbJPk`fNHrEgqTj;4H^P2v zVc8NO@^M(~JYew&SaBQTHWvtNh9w(-5D(RSBjS7);O|V}Buv1C3_d`UVK;#}rjBcf>A41$bRQp`mq6F4=P{sWa z(cc20dl0Kbz)KTVUI{xp5r>0_PBBov9dR5E)D|J$=K;a}9G7QZ4t&o85^n`k`T;oy z5X}dHos}|g5$OLdY+4FDv;mo=KtmBQ@E~Hb3l6jlI+{d0k|yHFKF zP&Lhn!yzXgUbo?m-O*)c*#kd29z`4N9G@zj!DCDrP@~kDb0|41y$;R^^y_QG)TD`Hc5shC&9W~DMpAY2_XIO{#|~y&rK80Y9l!#bn@OgEZ8Dn`+3n5iuSNdv2vFS|Rr! zSbaRKJQ3}mf~aX!c@vNzY%vb9twVG@uuc>hDT0kA0Dr3y!!Tmn0;@-0`3gi?1NJrn zDQUt6uuc*%wiaj_1e9%otv3RfL0Gg3xJ-pzTY;RtwZ?xWfb z*mo;%5rnmxsA>nIxE?XAp^7HL5-WhJCZII|c5XpbMXdTIB_$-mZaSjkp_)@*<(Gio z2ry#+M;=)Ae%NONV&Vr%Uk0*0RC@(%x|u4k0qQD&mN4QSMI2WkA{rt-0eBb)J2nHk zn}M$g(DDFce;=?t3D^w)MJo~a6~KNGqLc_61%dfipz?m$el=`35co&~ZqgBv8enTO zEd2oRIT1Ks3&gAhrkW8~KTxUz)0=^c{)qQWr~x;k?n8v8015qN9RO5DA`s?<^@GWD zz)%NXAa^}bTZKq$0s;pBo#TPk0l?iB#MKQn_d^9mQ4bMVzCR+i2{qwBWTMjOMZ6}X z@(e_CJZh~7)mIH%CIK}Dsv!*gRseJBfdd_J@dHt-P}7$4MH5J zAl?&DnO;P7C2DgpDziUoV+wGefVhuG>|aJSb=1N*)XPi2>SUm76RKw;(EqZmr+|8^ z1`d3{UmB|CK16(-bd-Vl0BRr|_2dTL1^~UusKF;AtYNZI$Fxj$CnMl#s z^Ac-gv*MFH&oGleVSlud+?P314O{TPPqgX_hY|JNr=1-|-vAI($1#;H&Nyp@|Nt-&%`Az5g{)IN5v_U9b*wlUx zkXJ4$B(RUu%}dI(B4%0PxwwB}?|Dgf*@Q>rr^;>LJi}1N$(iwavh54){Zu6R9*0f$ zlg)#yH^ryRj@Nr12`8zM=qM2z@-5R4mAuG@L>}zpa!%qd6J-CS_-jiZdhA`Oq@Zt^ zIBR(*$nV~-Q0Du|>~ed~pX9Nxd4CO(!7O=d&aW=$kzw<`{Xb-#2>;4qU)%HkWX_o! zXF9+73Nw0a|25f%NaW&dtg`w%T7Ju9m{*zI)l^mHp7w-tWbeTXXfs!Ts? zBP=Eqc%I5H{*e61PnA3V!5N&3JopfZ!GZ8#iEhqR?s3s06^q^$NxC1|e19_eSYyeD zU0=QBLzXol(NSUmPGlb`dj)uCLzmC+#v49VP8C$`O;d zuW=nOZ}L3;<8mHtgrZ>m3M;1%K_t8Zdzcv@e;e5`74h*wUz(H6MtkpOVzAZ zYp}83fF7CX)Qw%Sa{6MxsPoxSobVoyeG?|8E<&HUh`LO==4{vcaje+V6>|x$Chr; z!zwvFae0*K`fY*4+t~l$i$M4h`F2M}&{$_>KsVGR#h`I8SiN1VnoYIp#_Tmg3ij#S zzZV4+$k|5jr}Ew(1fv2utoHNo1zhT3Ri=rN(L+dOgycR_nojl`f{}3)ko`*{6UkF# zq4@|Rl-Ey;lnvqJ*-Y-aw)3gFfUzN9wE7L`sq!2!UJDp1pS8NN9D4a0d69+TASv5C zP)wCAU7NrXLL2m)Eo#StT}dpIR~yLLs#kVtjgoI&8-IkUp$&nYO?uAJfN?1kBO&?Ypod|%h|#ANZjJk&1Kk(>r|Hu)ufn_k)8Zaq$v$3}Gtj{}C92ud}|WPLqc zE%iDvlEE^2GeSXF;?p>kaTbOZkaH?TyXGh;0OW{q`fH@9gwzpf3*xKsqH?*^;Ff z9xbOb)^=R#+HQTP=LgL7^8AI{%Pxygza}Zelb3X1C~2tPwN@{DwfsYWZj&SVV#MQv2gN{U=FJlzSkbe`BX35T2|tZOwZQz!bgOamR=Sk?etWQ zDYnA6ft)P?$Gd#zZm%8=*0IiCJ0z@UjX!E%u@t3`%b(^P*Qq%NYD30%YD3cX$_-g8 z56G{ny?if=O8E<0%ZA0r_tYe%g^~v8U9iSy&hk#(c!#OTROcE`*Pr1pSfXo4=?(tM z7N;JWgvf1R^Fi2>vWMZ)%4jDmHb(gl#q!n5zd9%6?erUOY1Q9i{YfI+RZ2;rnu zJ^Y9ufNo5Lb^7Tm)(N`A%}HRrzTWuLNDPHPtRC44KPtg84zs2t45L;3RtQ{q6gcw0 zuiy_WAl`xSY|$&Bb}0&4&HIie*`4J~EDc`k-LDgbfoT-Yh$xG7p-J=#g@;;#HNI7HWlc z6oSSPS&2~(57P64JOnI_L_hPxATeal54QPPA`v1NnYpZ7N2MIqmi|UjC(P%r^fd@@ zhfRVQD$gBbEP6;RgkJbhH(uAn4n6EAF;X@XJI*to{#*aU5 zhbui$e!C~@Xn8RcP!;?h?twpozgG+XUhUMJ)30g;ey`f8IkWRM=c0UYc(-rrg*z!8PtA$oVt-o@e0N5H6 zz}9x6Tm)gX>N22ff2|VLKMEUw$II(2^{=g3svdN8mffaDCXn~`cE1tz=Nu7u4frEB zX;kbWKzr$6fI3}|ECJ&W-kqmMrVn!ZBW3AMJ*O2`1n)E_KmVL z1BL?SvNQ^rZh~~jN1&!)VjOC6)qO0-*wxqgQ3dzq$j2Di*YlJ0|3~tUj34d$8${rc z^wnXHA5HCh{HWll8DGA4s`yzvL`sq+j)c+&6nlZ4Uru}24_FG+vIz9Dr}exYv!I>z zdUa!5mI0f7j@n=RAJosW=w{o^O04TI+s}C#w3XxU?&nzPxK(P{)2T1H<)%iyR6oZ` zFV@eo(zB93^L~!?{Sv|gULM46s-1`x{^R;Nl^+xY3<20?8V2Z2)~xDfGupalWGa;?2PfoZq(gFl*XB@$R{nk$8wPLi8Dm&LrXUUxPiRM0elWtUThe0Lk#Me5=T$UY z%C55do$*y0O4hqJ1R~$>vMRT1D0;*ZFpieL-a#AwwT?vo!7q*8@I00Z-|VmKqQ-wu zjdz!aa?^q+ZwnYl^rn4Dx)?;Aeq+7Fat5>s`_&0OGOwfEU%1|5tdkoFUTwlIbs{Yg ze-8cb_i0?vBHamFc#U?g)hJ5yRqt&Sc_{xz_xIxXBg5j49{l5P`fE}!=VQp(7I1t7 zMOy=okI6W7`EBabYtUP+rpHo2x-_m;*28x+`dfUd+({smAmMqz|aKQ2EuzfzxLq(15DyA$mC^yFovsS4d1%1AHYuPRj4k&#QKj)<#N_5Ikt zzmSo>^jN!OkYoEvo}X6FeQxS4Nnahdo(uM^=ho0pkVC$As`yzvBuY%rN%VNTxUKi> z{CDd)rG&Z%mux-PRX!_&s_~+;vg?f=Q(zguMc*x9i0U7s?~2uEpsAlEU-tEv z)pr}>?1Z8^bFp_^E(xEdU9Z(jM=C>(HQ3QaWfjouSDYSGd+IUc$hR$=v!IkU;_d6{ zzM0d_bNMfJJUQ0b=}~S=1*-czUZ_s2f7yi6!{}}IUdGLIZqFQoe36zU+gsmB{^X~a zi12KVp8aYQ5BBRnN~8m08N-!aV!(XJV-lOknf zX>~8BkNLhz!ZHs`G6G|dOftOk(AU;W`~}V8^kMJvux}`9sOASSv@Q{hjeesk zn6t5LKDp28;z{B0(xKAb%h`Z|W@6-?f-b%A_}xC8MmtuwNFdc2aO`p&w)Bg}v_cyC zX)du!(fM)CqVuDyQgnpm#t?2uC#anM{YIUB#3la7Xid*)3Od$-r(&nc6}^O|ru<;Q zpkI1iY!f@gCJ~;J3hk~E+FjKdF!n*Z%sAvcVLdel4E3O~iOSc*qL>o&@C_)eHk%b5 z=N2l?U-_P9Sq{B46J81CpciH|dVVjwF8yNT5d46Jk6tv^4kK9a>Dmq(OpGL50Y|LS zZjNd>KK2B;BdU7UN^d~_qpH#;N6M}cE?A=sE#|%Fh41Y2Q8I_cenPc0bdkR4V4#Nw z=*CtUq*1?id0RQVUaZsO%Bqs?OaH6#ZdNSvH&t*Nrc!WN#MkD-I04U;{vgIL@Az|C z?2N$pACc>TvCArJBjv;tP4`zTyFTbR9xLc_yP#ChVU-n(zgKqlC>D=)nMI=c_l_Qp z<>OjkTRFy+BfS`3B~#m*-)ADcy79RlzRE1d)uOTO`umIuvPAhsp{TC;Xor^92O!7@`zLHrqoHh6Z0wNSEs7XvT1r`sTPPN<@+O3%v*uNrlqL?$8mq*;k&Pr z<}-HQ&Tc%^oW2Aym9E{~stp-nHmI?sRyOf#=`05x*ZOl_DI3XFFXuPtn9Cin#p7Mg zpuAL1NRvEuHT%0-XaSdZKy)k@d?`*ew&>TEn_@Auw^+od*PEXff}eDH^zfx7KV2di zsrU&b?N3ijjr+W-m7NzfKJiy>R(v!J)~W57iFoi7KvfkSFgo|Yq8N}-lNq&voIOAb zrjzCM(r83#jNlqLh4B^u7-oXIY&KgX7ZOuW(By*$d-2>FUhzkK>=v{Xiw@?+$oI9$5pN!h_cttQb%DYoSkl(`3%`KN z;JmfmTot5!E~YcAe0pIMckT-mc40+p!Kj0naicm|cm#%x>V*ej)eSxtUf5VOV@=hJ zy7C*m!)L52FZ2$deP4OLd-(F|@=>0w&hinO6WfpC(+f>LoslpO{g4Z{YT6KA!*3iO z1)8wx#EFr>;D(@M>y(Iha6-_r#qZd_5L7B7AF+L%Ym%;qe{aakD1?0rIK7_mhEP%= zea%7#{Z+-vj0PQZmVMpizIB~(`n0B~GcQs4w2Hmf3wwP4d)1ok6=RBPXPdmWus3h@ z=BJqoZ~rVE+^}-_)x+n(4zQHJ@(WrUI~6RTsoFJ479R(0a%8&S- zMM2cIG!vEJbyLvlF^Vz|sZTL-DSgNpYg9z?8V5Z#mz{uMl*T%m2>a^)wOP+cfXSS_UH>)n z6SF@m^ijuY`mc>ve4*Fr;)|buqh$vc`l;g-=|4q;WrxlD2tCztiui94A@fr+zR>q{ z@zcn2!DnWCq4(+Hk0t(0tA8)_KVAGq691T)zSPI5;;*G&NuO=h&k5;LUiWW=bOlG1 z67o0dSJbQAUr8wOZndsw5=y*WLW#E={*ZXH2qoSP*7axbl|26`A-6^?u)=Q;N_^=Q zO8j=3lX6{6Ct2c;A(Z%Uz_)V$4}=o$->mC0LWwujy50{R<@tI-iT^mE)OT*>Amu~*l}&I>tFS{{+EWj~D1 z+jq<7md=N+mcQp&*}L*xqjSZJP5H4cxb+`r?-Iu1u*Y|bt?Msq@0yO#+UX&}3AqR* zB7WBPu9;Rk#quu42!t3>Pbelm2{|lDGA~YN?`pKtt2d)3gsk+eOTmtX_PK;2uhIoQ z!QMqg>G_KNtb~x@1bdg{Pkucz$n}{Vz1vp>_2kfgm6mhS|2|uaI-xsu%ja&FaH!d7ps{4 zevNv!W>`}0OP>|Sne;1YL>Dnil%(fpFr<-@)O)1pI$Hm!COsH0 zN;;zF2NGqxC`taQK_gyG*pJOgkH zIjCWXhb>xCxE>{;-}k&IWUu3>*Kshe|6N(a{Aqn)Bw`FR-->o=4i4%z*S488F;#r}0+q3St-><$_Sa6*zyh1EM=?TLN9%r`yJJt^M2OT3}k4K=~K8sB3H8$)ZO z@28}0N{EJr)&w69ZIY|Cp=pkUjWxa}tcRg#{Su-z!6#!+6Xog8yI-A_R1^F~>}h{_ z`X8}(ljYs|*wYkw`k!&{rq%?18GAZFp8i+t-GTD%Q?aLmC-c73s{&(!@V0rrM z*t_ZSZbNi`N@`PRk``Vb`t&u-B^4ehiGBLH9V>QAozgq3-66w|Yc6jYa1^_3_uDO_q1-V^34$>3_z(n_A=hW$ftydHP?mcL&P5PsN@NlBd6l zdpE7d_usLngXQV3WACQRyA9EODXFcYA`Qp2Pur-WkWYJVnAFg#y=%yO`OX1r#fh^} z`MjC+vyl3UlQ*$1i@AJRZ`;jD#s}6Zk4ubUj09jA6k~JDR*mc`oL&!~um_CDE}jYh z+^v7aJrRr(A4F3aP5i-)&eQd(9`QZKI0?3ZHH>Ry=Ou=GSY2iFZ{=wS5@s{bP6A!) zl{so_c|*r7O2NhKCuf>|jY>O@U8_%>eq7mXI-M}AKv`qQ?SNKa{eOGE<`+)#JXaco z9NCCXU+EcWO{)jc6E%`fD{He49Npe&^A??%a zZl+ukjv$o#gRE=mXUcsyiIHS-mK74HYZsyP-)y?cXXV`fjTDgU*g!uEKcID zyE`GOaX+Vz?vwc-Hs9GEP&aS8y1QHPT@JfD)ZIa{Iw5E6UzVE}8*ew~<@{sD+hxA7 z9CrW1zNQ)yy|b9VA)9QJMx(f>fFsV;~bgFNgDe@ohB-?GMs zebpb9UEwwMfrm+!e_67hW)~i2m45}bKX>Snf9fh{G+TzY#p)3d&#IHRUz43Qfp87S zV!phwXZw|wKD$^*Ua{+>40kv&C_08tQu>}8+*EseW)AFxQ|7}eN0^5j|+iZ z@eNn!xQO>kbXs{Ud$`h8O~ZW%e=xMfOX5DH{K3}yjBoX7qsG;m@b#C$-CT639JXA< z=D+sx3zARqi4*3T$8gCM`WVWbEq)YSZ7;A;Jn*~o?l`6WLP=JZS@??xPPK1+!6jzA zEK3^gYa2go3^-H#Xt=ODJ$ZK~gBrND^ku(TQdWBV;_sT#F*)`0ud&my%qag*- zrrJHI-7@PgJbtRKA(rE(`ooiF>KYy~1ZJD?ushLFHYn^)s_&;&zbkLIj929*ES9wW z;hRWp2KJX9x67q*zkE`9c%YO_YO8$Lp?~_e{wMCru}i=FxXdPL+I@q*ZJ(dUt+7qt zwqJKK_wBhlA_R>e*ArkC;k}*u<+xeyx`EL=eOre<;B}cBw(Wi0#rN*3AR6Bbsn~mn z{ic5T=eqXfrW<4+dE3Xj>m9#wZ;9WyX_=oHQm&?;aeu9Pr_Jwb4I1~YkvD1nx)^$# z9rYVOZBS2l1YJ9V#!nm7(`KIXB&wcl4Z2=~n5|p{jm>`7Cy=yFU91nf=+yl8PA>HP z<>cOej5agpf+V`@GcunlBz0{gXHIo?gluK1r&t-D%To8~=Kgqu z+!I#}Rq|YQ|8p`~pyJ{l^;5UH*G2Ypbw;1~7gN>Q7i4Uv#51cD$`$vxS}0dNJ&V2y z!!x1b-eUUM*U5SLFsatQlj!)vDW3hTm;I_Yzs^)n+2ZmN2>({)tEIAp49UTucADN& zlq%;B}wj@AN2Ru z%uBABmQph*)m!tu0X0Pf4c`kjMT3|?R#TM5rr|Y3gALziHJb&0AQ{)LDN0Aej8~1; znn{{3?zPu^@yrD_`e0dWRy`iE+U*6IrZ)i!9C+~;--Ju`!_vL*z z*&CXd?8#f2;tnlI@#IZN4Hc#O^6nhq4SjDw*!Kc=28N0T!f>1o3Kb0s`_^%m7Ai^$ z`!;hnI8-zk_h8P_Lq+MHyeS$62SF9_&R~;L=?vl#%nUE5R+)-^rB7HJxRN1h8Dmde zUcn@tx{kykvwX!e^a%8`o$}htZuT=n%O4qgp$mt(&zGj^jyL>;uifod6BQ#jI|GP! z<$LYQ9&68wbbcEzyo>Dlpj-^O2p^m*bK*@)d--crEK|A4zT$Um)g7;Q`|s4G|vYk6lN@&lMcJfU?d(!&o`h!7d? zbUh?U%M-7$Bn_d8AL&;4?ZN+3%`P}#-6+ivf91Ue30n1ZQUHl_1CGzM2iG=A>qLK1 zIE;h2R0p(GGR3!QyH@=T6;p|`Km1dXW1u_N6TZKUQyOe&Kp>!0nIRUEGCl|6L7;PuwEBk1^RFy}p2l<)msvZ+;t_|F7fK?>s<<#VdU|S$usZcE(RxpdHQ#Y0rRQ^F~ zD52~UJ@NzCdPy-|2xZ1>Z>dyIcnF7u6%=BC2?ps#Tr1@>nrfJ9=E=K2IuW4@bEgk- zi`Q6$i5pRTZp!dL`@%s1%JJL6A96GHUEV*>P$^NN9&(D)Uq^=hWlvX|*Ek$Bb_H>U zWPZK2#lPY+86wtJK0qG9#5RBuAVm2@irj<%V-Ygqs|ZGZ-ATK}A6b!rw*hl4l_B`~ z|N5nQ=%4P^o8BK3NxM;R+C5N@jJ*+CvCO&CBULxb7wp-Yk*e$EQem<=Greh7vg3de zkwJy74RBq+oG%G}G6AKI;gfo!ywM-2$~Ke1++=(T{tEK+(l;h1MR7=B0uH^4BWgZ_ z9xifD%1`>{BqM1g=b4l8z2C&u);ls)T&O${bj25vba~XjVuPJGtnPLG$Rke5`g`?V z46J}$MHkL+INbPGGzl5}E7r?HHf>(9Axbqu%`S)pY1e40u9woAQxWwm)tqu>%&J+P ziGQ5Qv#=`iiYE0Uo4wH}+9{P12>(hf+a1ZOQg@0cF-l6SdRIQc{BCXKUd~{>27kn@ z>dGJSbW%t7Y&Pjl`;(N(y`2EZ!pJgWEXPIDoUByukXh4p%#4vS8I_wjynri|-)M`6 zohhq4=%S1(n>v}?qxz4{ zPBN@5{SR6*jm$2>HP9k}5R+^)`Hc-mD>;{PbEg5a*LUDK)=ZUmT#CtGRsAv`sic^@ z34LzjF;G8(h17@!*`zoOzJH#sU!4< z@3+CkAHL576HK$=`vpvRXn{$c-?+QLQ~9EaCd0d7xtaE<0+d~Fkf-H78&o{uThct? z`=k)S!c77zMLo*zsmb+sMX~1Au+)b;_W-`Bp4_qvP69I9Kp4^)>M>N3;L9GGSvY`o zWY~GZnH@J`CfO^`I$xW|_=`t-SzmEnq(ob(z>x+PE`o01PQqfsT0+Ig0sI0Z_gVNN zlA`~<8((&vh%Yj6JPuz3k-!O-)fe&bRRAnr$9^MH#(nGy3R;$j;`kkxy9O_l+-wQQ zrL~-fA?pQfP%fr1$f@@kAB){XwR!$-eBmn%I#2_Ecp2RDtXLm~nV^z|9rZy(Y}Fho zoH-2~_>iK~oC*aJ)!2s4cepE0uVZ516fgkc@AQ5`T*V;@ON_26?UdL8)? z&pkYE)%q`+)KioCtg;{|(r^Nb)aj9_)Xxm+%bO$>)d*RE5oQW79RnPJsH(lgbb_G# zy(`PXSonb`!VGvl294tws{}g610Cam4%R*p=ok-l$f5^ehqQS~l-Y_HpPKnG8rhN7#4nW$(R~izZ%V#2BYvSIB_{b%-56hB3qH*V znrP_zNO>_*kNkB@e0V(lhsK!5(~{^ayQVw8f_IcswI@PDrPwku6PeQ8oamxCv9+9` zqOC}JrYY!ja`q>YOVb^miG6rh)VXXWGRhE<UN;-gUo^1OCPHddeB6jU0>#>y@^`fppc7Jk?OJVY4ou*+Y?zKN2dIm?M<=9hER#p z+*H!gQvNQVP>o7vuhO!PcN|Bd#QGb(<$?bGR$1l98h9)^l{`FV$-}>z@<6WQn$=I3 z@?bZsQSL>3HLK~O!H5U?ZdTtc!r-Mn(VbsUjq(R#2^Hh*npqb(#mDC&03$ar6dl+U zj4X|p44|$2Wl?}8DMTzjK(&Hv-3@F82viPJO@l=#95!TLD4@TG|a zI9~TV-V!5@Kj-b31Q1b4z+qDYj2&eYL;x)Ar*&ovz(+j=V0oR=U+}-Q0tdPC=yov{ z0r&f94DQ3PCZ7G{`}sZEQ@!~=lLiL7inVJ=ZXo=F0)NxHiT>lF1VqBHJS|IX0#GDB^(otlhfFEAcwgw{e+yU1Tem~IFfXYW*ZJM(vOLIN)c=-ENj= z9_67~K=Y8Pk^AiOd@rs%!jFBF2hGU*Ej8bR^?>LkEQd!vl2%P`J0|2Q?)Z6Mcr*>$ z3(FeNR=nzV-uqJsv3>pzcw(B#fY6Llv51j1ch0)YFrC;CZt={S-P~ z4q3de=TTuj7wfO=Q_=Hjg1v70N%v2PzAIec)g|;-$7%d7-22V=QXi*_e-9CyADHo_ zetN|3V}FLHh*0vO8DHwFNBln4<9Uk+wX!M}htyw>_`Sw2NAghSRTNwEJfuEP7hmR8 zxR03WOZ}cMzRas|TJtcZzE2nbQQ|jP@umJx6+fGYn&bN6&72e+X}O+kU+inU0xP{n+6LX%D6Arw!F(+ zZ@ISRceeH1#tW$%72lHo0d{;#p2Jpr0(D%)e~E9)YmpV-mQUS!ZsXZktmn4;e}`-S zV#oJ;T}#(3{<)aIm$9cf7a`IK(Fi9dR@Z@eRtv9B@4}mmQRzZMCL5MZE4K?z`DhL zD7W9;`(|&KC@XGken`($<>O{H%v_DWHFm8sVqRPC$fTD$N@POGt>3?`^v?MA<}IR7 zapj4-HcMpP==t>pe16Ho-X$oT``v^&Q>OYRPn#B)GjGvta~ChUt#_Q#+qfThdqL@K zC&ZaMcYf@(JLWE8c1w4%x6jSbn>V*)&eT{8i%u5#thHF|xi>wD7+a|2Z2dk)7Zh}_ zzkC|Mj|O3&EPfo~o>0((q15fzznPZYwpnrPYiSP1&xZdq_50WfD9Rz}iE0`FsDYP# z`F-4ZN6FlIWpm0GFTH*7{5f+1UWsNOb~?5&)C0bf7g--A)rWt010{6Y!sL-Yf{w+jIA&4kh{n#wQ!ko?K7M+V~~oZ?*C&3elO zRYbi-HOea2rc~}ui6lK+z9}6?^ z;`2~0!JD&PHQNJ)YnRURR31$%{f6mXUl5v*YM$kWCa|)Gc-)T&O&DmNWrZdT!Zv2- zM?K99O-M7JIzx=_-kBbnqIoKI{mCn<6SVA;T)Cn>^5ePLbCYL=XS%ed8DGUu;y4{@ zt?EkZA{bsg!c&p%4$9IL;hS$S+~2u?FRx#Q0_ z-^t{Zu8zF!WTx$J)zilc*mRFFZPl*n^kVDEPAt(B#-?Y zh3&;~aCLmYf(}XPP_v*ip~NaE0|resLp`|}Y1aA{=8;rXvWVNw1Ph{fQE~53G3mDqleeJ%QL(Cw)K8vOBZWKWA*JS%JMOw zUHNW`r}D7o>he^+m*NdwTUP30HdJK1gN2S?6ui(TbQ%Y}IS0G8cykWBx@5Jvq2sjY z#wL#2KzotpSyLGs=t!jRE6c1g=9=lS=b32Fm3HX^j&B&(MZ9-YwdbzU2YkArpL(e> z+K;i@ete~Lr}o@5O&@Sn95c-RX5l8S`mZpI9=S`?n?6d^E4MiGM8?#OC0S}zTvtm* zlRL(~8FH0|i!5oZtrV4wDXaqX8iQJDh!V53411XipsI;g)^e<3tbW8C3@}H%Ld-hA zR8T8sHW@a=Qr0LwBd#LY7141OWzw&#!)S{cLcAHU^GC{~=EW)2@vA(NYA@vXfuxu3 z!<@*9f|6#w_-(T8Io=y;EG&$HkdZM;gX`oEXlHlZ_GPq>tknh*f35~qjV4T~jFpLT z#TSybm-p$_8?~x`fdxN+Ajbv5L#uKH=pJ zm_G3Sl0vCoF86M$<%XHUM)@2B2-)>3R&fT!qL{;tCRzMxf9VHaOh}G*FcYzSk-`Tn zF=dIL(SRL-rI374ZAg)`#`m*OqAWYoW0pdkU8=WTVWHx8vi-TYCO;6KH^SodMy5)< z?K!-`UH*-3R&Qkf$gi=WG90$mCkFjje6obmXIMk)yfx*&_OZM?i0P?3sFtj^pw#ImT68?_o;nz$aj@fBz ztaT`R@^7-uzouNUHnzpXmV7kW@*!*YpTN{hYhXES;N;o1l9RDSQzYSNYK8$gZ+P~j z;u(AgS#N=J{oQx)VwUtp#)`7=G&X3+zs3`xQE z@AIB~Oui&Gdp;v<`*tt3H6zAztv8gfcsAa+9jA}u@fquzVn6Y16is-{SChs>nOWH* zf-K*i3)k-V9By)#UoG}}r!v*8pLBrYgUZbOOPfFz>&9xEV@f2TZWOiAJ@kXSm2Md3i^G?^6oVQ&Y-G^I%ZzdI` zWq39uWx&C^Qd!=;qo1)81|BmpGJUwC+wN`h@0M=-9;gpEpzwQFYCL|Eo~&#?V3TKq zH`~JS01Hu9%d*-2$P_SqKN!Bz;ZF=?XUUA86H$DdwrV=DrNCIq{Y@VwX;mwz!(b#J zq`~C&DoeGnO0p1$F%U$9F_YP~j8e*)Qp_pjvQuwrPx3pO{f@P);g-{)__@pz;|J}z z(Md9+N_TA19S0f4OTuWFS_UPzk;T-&fP;KEl>uakf_-#*`OCtDe6P9-UiqC?wVWKu zmt~a2X1Q*9!Eb|NjP{wrS6~mP1u<0521uCS9dBHW%ySnCu$-kYKOGZuSag!1Jf% zuC2md5UU!sUfx(XK89-tg=HWoWQ@Z$^tUXEi^7F-)8ZKIJwY^5Ag_3Cfo5wInn?>L zj!l$CKM0q^qgjpbca{#0XOTEO6Fc^2+H)5*b@Z#;lU~`}4}L1#vGjbkm>IgBb&QQS zOhqrtFJcLw-7MHEN1+)&=$?n$x-`u2gy(J6bFu&QWgpJ9I$M7w?CW`!W#9VGlRR&; z?BBmQ$@2>71#nz+lIL|+zgPNbXJcQMe&#TKsRvE_sYRb|J0#EKka%8xSynuYPA9}0 zNt{LeLRLJXmpW{_W*_$CM~TpQ$o#(0uSfho?8DOUwb%6#dY&%+F(MqX?88Fe)5RZ2 zo|jqnUZMA?;tO475r3gIZ&B#44!gXT9d{G;gKciq0zx|1qi&!+C0s+jOSmh^44Zga z;#VTC3X84KZG~A@NTA-khfwUCHs9KIPn!>)vYy*~#qeitjcr6K=PzZ9XjKn$O1$Igh{Ywkuk8wRy^@BpW5i83wJJy$yrb?cRn# z>o%4-41+OCU(fWFg|6qVcw<}756d`SfThGs04=LA|SqH`yx1ZUvf8e^uZC3r+ z_B8uis!@Kn&FM_-X|f-l9JW2pyyE{^&cn3R$+8kCfZruAb%YjQ*pjAVoX(yWvSRC2 zdNZx`tjjaDr`22EZzRm*<-Y7`C-AQQkuwN;w`U5_?X1R7k?9dtGBjvzeYQ?@p_pOObmS{vU8O$DUMG>X^K_TWxa5EdPTN>lh6QBsgws}u z%b&_`*&RU|O~b7=rrCa|nKih<6B?F=>rR8&tUOSPg9mwXiRp;ExWq%aQx7|3eNBkb zHPyL5yVKXOK>OIoqR&56(TIw1gr@uv$#>^|8T+7TS0A3ex#{z-tk`4blvNmIx>F>L zsZB5WwI^E~{xF`vuAPbiVP9&%b;Kr$3F+Fwk-rsm6cSZltwDgxPr?GL!Uiw!Ofe%hT zztjY?`1z%I)`C}R)hpNN(fPS~dAVblg??48i+ko{S8ndrvcsdRAU8J7u(Wh;No<0t ze3+xJ{T`K}J4-!Q;|<~?ak8V<0>CT_KkRE8AAtdNoGCuOY^5XV$-6R+DHzfhJ}zD& zqnqZ@d!DJC4s8K-d}wFHy6zpEZl38*D_?Hw#UrFAMNh>lY(269Gs5ZcHq)ZpGAq3T z%4ywFcPR5h>yZkw`R|moUi+(N@_nIoh_Hk(9&c@&m5fQ+ry&6`PCRV+=Qun7S!87-62@q9TU{-dKpiKZu&go! zC@G|;E6#%Bjo#cl)cg+8D!oh$sfVve|A8E=*TgfG^MOJwDdWUcyc(3l&j3UR2$>fJ;UNkLkP6#DAe8qV=OFjek8 z>8rdnmxEJ^8o@9`6i@kk_X%ygIu&g%pcqW)1zPbodJp;vv2n<%l|@%%(vHdl!!t94 z(y+@H zL{wuWiim2sMG;ZXgosKFPz!1ZNc_;G5-iFp+c-T*f7ez_;_S2aR_V{4Go6unwse>nNrmec`*@m*b9; zJU<=&w_1KEb~-1+f6*7x7qHi9k?*O)?(g){7aI{~rrQ10WYGwYxte?u>9e2?RTte zTaVhe&s2|!lad^g9`&sJbCk)WS3e`0XMO1v@!t_1aMFl>m@r#tKn|b%l z{!e54IG{bpZUK=?i+M!{+FWmXLs4(2Im(2!mL?hI4urkQsey1>a>brbltssYnBCtm zn=r9o1Iv=vBx!!8x&`vRm!-14z}P^3+GU~UV1C*TULmcZtBo0<%SOe$V#QCk<4gM1 z3&ietd_nCQM?NuPcP>avQuVXSg2rO!6H)^PtJKfRrqw+^JM&O;oE{T;Fs6Q!=Vm6O zW<13g;5(=#aVv~aGFhCFpPp*ybX7|`z)=23?8QB3m z3f|D0I*74Jm6U-g``?yrn-+*mswHM`$*M{#!~;ndW;Z}8ZE?Sj9VRH23JLZ@$W!bW1|t| zyd5U)NH+bagZb&w7Y|16b_QIu0$D`hW*L>q0tlMcriR+I=iWeeVPdXgFd(-#aU0~w z9)`>ZUF#H&?@JA8&+UcRQ$c~hRFIj1Kz`sa3G!~fKuCUCa;Ob)oTB|Md!CszX^c!G zeWv;623<@E+!S=}LZBq653QtLwv&3f&!k3vuV;4Hl#Qe$OF`FuE2+KVn_;$dF=OXu zuEIA{Bma+FFzT6c*MYP;14mPO#=A;&|*tiYZu#A%%$uz{M`0V4vt%B-#`G zt1zZCGtyI4?Fi%nEa||Cdz;%QkS&)0E`H*(!1q-y2?UVVpy9-0s8w<202OZeNKICM_4GXjdA8_(H%QtuI zSfIT*DwhKC^v}dU$V+#w<>DY=D>rs>KC$_RB zZ<5%OWBmL0C4TF;+s=;|OFH|TQI~W|4w~goq4ns9yd-bR3-Y48w4_bqZRV#gPX{;wAFEt#<#_taUrk7GCtb%s zEJ{~%P4ry7F`+%0RZ;A&J4C{F=gR+k-Ms!Cb^0AMoRRc>z`qTMWjM5$F#B;zek&MC5X^UIu&2ch&E8AIraMywH`G4irk3n&k8| zFi3$K=Q~wea{J>}lZK=UoG1hmst7qu603BnLQ<4UP!*u=tu-^CKFEvx6uaa2;0(F_hzjQZeSo$aAb>%i`GwAA(Lqv+ zkdi(hvCAtIkOIp;==?te-k1^HT2(8SASGa?Xl2Nyu&OYLFotldVhG7g^fdAT5wdW3 z+@Gc0Cq~TLj-e-rxEofYq~+zs9@86g0GlsHTr!maGgEBAHCH$;_1^ z8rj(>d1|+^r&2Tts8k=1U=vYRieJrdQUK9_DnULcd@YL5EShLSQjs_&AKSdAmHbul zh@|&diPFt~AcM*XDXN?O<+4fW5Mxo;TW$$eRwZCfKAZBJIkn5%F5h0q7ep$07qXpn z|KSQ=Jd&$_jtHBgXS0K11j>7o=Eyrz;{Ow>Md^q>bxWK*W#j|{M!%uv`psk0ubX=HgJWK~>VnZTUH?1xt-QfWz^?Q09K_~q~q zvc7qF$v2+9@{^paM=Trl{K#Y9y#8AiCFAZ&TC$-uv~=R#X=Pi=Ywx}BhZ)OXy=Tq8 zd}rCP@4x+nx<$9%k$va8i|fDl&;LAf;YYVO+*&$s^xVV6jkkS&{@4Y_zZ=#2`Ms0w zo7g&K;N(Ey{$Shq^CnF9{n)$HbFq8YxStlaPai&G{>{I*Y2UPO+_-4!e}B94J9+<9 z_P?H+d1UrAv+lX&#W@MP*0xve9=|8`-A(VU{_Etu&X2c$^za8aeVDoLjs1^y-12_b z7rT!=d3-_Fh@+g`l>@pXGQe63~S+Fv$*(Dcn{$xBaf`lR*hjmtJa z|MIb|*Keu#(YV^A2RA$v`tih{q&>3b;o6_w_|uF>U;XzrYrgZZ!~X5<|6Lckb#?ar z?>miD-N${tonZS*j2~xi~eW7dhajq`>)pj9{B6PukL@U?LW@@ z#q=kC{PUf47e6-ZiJv~+{_OB)=0Ep~-|c()8^2xjoBwX;{6pUJWsT4M{>Tg0{PCVY zz4+n;-7`(kT5xA+mT3ncnPoZwP4EP#W!?HOS!3sxl$74-zO&@E#Y>hf`sSUb-@RVM zDJDO=m~Vv^8P!BcLv7S!gz);Pbj-f6_@#HGDcka;K0>)(h5=ea&j2(0goc}3^H_zn z=hXOwZF9H%ui8mhj>Y_B{K73SaE#(7*Y+W&avine2d(Q8F?@44`N?y8-s~;bwUhkF z@k4%b$+2)T69vzBerI>wzGq!_KaZPDDSlZ@ij2*+>@mC29s}u~-5B$$vKOpBBmaTX zvE8_e2hP21$>Q5bk(XX$A5#9l{0Qv2kmsix|B!J6IqdNd`&#f%el~5-bo|49-%d}` zR>v8Re-!XR_%mT9;RwRM#y{k_{JzZLiXLi~pNu04Ur8554k>3mUna~^R9D;-bKC2_ zWxMPpobCM6yaMqKk)wFvt&8W(oj?EN`xdA|W=ZbMdOVdsNXSxHSr%dJYr7upa-L~D zUMYiD9Fm^ATaUcS$PgD564(d+8>d`%+)l?5*MvzngIEdluE*2)gA`c#s<7Udec6Dd zgiHq6tTOgU@^tOKh5r`X=MrY~6HMyu4^m+I!6wKo$C*6ti*F@= z_D_;Ho5S{35T9{YH#_bP-|O^V`vYe=Gc<7sG2O&{#=XvtTYc5+6ZI*Mbu7;9WqW7l zcO2g*-y&vpblGsm@LAhO-7%V6Q5K;6mZxRBDpaG0K}QxZ*hyM321^WisA8BiDAlSg zcE8rnUu=G=IeF3-F3V2!gr}tXjK6tuUS3x0y>?03y_b_I7D2_Uu1#fwNj$|#ugtLySImVL=S((AHLAXqBQ5@!%vR1 z=c4SU(4pD>9ECeB`v2H__xPx*Gx2`{5e5xTw5U;0f>I^oC{eUTP%|)*&%gxmf~8gr z8d0d+gc*r71neYjJ{?EtwtkoHuDjW7?b2PlrCW88ip>xp!3zeo7NsiQ6NlP>76K^q zdq3x#&)hQcvb(?6_xH!|yfS${=bYy}=YD_A^R$YL^)j@1pPobkR1Gq-zv)Jp)i51E zXF-MVb2w7*l1YOK@h#-?$t%Y8VtE{p+!20AqWUJKMv?g_g2qqD;IvrqS@*Qq4IOTt zBr21d_mTS-=`HZb=EE;DvD}JHL4IuECBfJYP*4 z;G02D@JLm3i91+Z>#mxxxTyXNUo6b?=R;Xd($gppU=dd6t}1(vrU=t%AbPg$RDSy{ zjY}m?5~1fM_gK#ee+y2o;K&`J8Y?#JFpd?SD~9mdYgO#L zXId~;*yAhvs}&oL_{mn)UXY?a_*!WZAG3T}yS$bOUK3JQ|K(OWT;q8U3}TK+fr}9Ss}}919$aN|au{ z$0I7f5<9T6GW>X=Xli?5sT7JYc?~ToV=T*Q73ubxY9BXTuLe}rJ|e4%T}Ubpoz_GF z>=te~xRQ^0eiEmo?Y6{V1e-OrhHsK~6kYDF={b(6rc|tJUMW57 zR`wlKtDU4KuA=k5MHHa+MLVy`zN0vCX5V2udr+2VXlh6{%ZggcBW;8SCZ9Z~7K5^e zK{p>i)>s)xF{k$9Ka)*_m_7VXI-yW1A*r_|UKccRb`LgTk?`P1Huq7;v)gjVX zTvt1EoOSgt+$JFgIL+R1{i1dC8Yf*QzE?vDuVCp}MuM1aqt*okXeDsIb+yw*rR{!IlbQ!at_mz*G7cfTnaA(WwD6f#JDG)1YXdA~Cs>jC zcrW)?KOxRQE${QiJrF(7aj(by;N)S2;UPR4KX?sO{Bg2=aEa25@AJ{L-Bz-&S<1+| z{9u=)7tiL0@I>6M2%kVGyb?8Sf1rGMf~=r045z=DDjerHQpIH(@Bw^lCIqT(;HsY2 zjF7~D{U%Egs?v(AY$4@0$ft<1n8pVoJ&lw2VB)dt=TvAr9zQ%H-hD;^x++@BIyP34 z!ZO6ON^*Vn%L+%ba{|HIC#$;g+iyoUSK1E;Rq9z`J|X!~n7r&2Fx%y{9jME(#!w5aM&pSd>dZmze-Q{9KwV3!)&ZO71nzxtZ#rNGG~xy z!$R5cJnvBnI2*6uNu8>~E5?R`VEZqcdI44>_a|-S9O9#!{m;mXsh}h2!mI3t39iOO;}M`9FBd|WZTux2VicG)_3+IIec~KI4c_J z?6K@8W>Z1FJ zyIDB@MZH(ojVNHhis%-3V=Z;Im!$aZjxnkM5R#owwJUZLN=mC*Cd@3V9}8=F3mo%n zWM^81e1_-gf2u%{rh}>sc-YqY0E3Qs5PP<#Q&7xFA2XrtevUC}0G&9kX5B5!5y#%nBLepg;-Kav{OM3mx%5751U z_gczC;)_j>bO?a_3tFYyJXsP#ak%1&bGJpx!Ua6YCty1TU93J3# z;4ETdVd?A>c{XoFPYbkfBbFqu=|eYK(J4|*8>~a&4M=0E%BH6mokr|WuCe$mlMVHUDIP^nFC2$f=>B`!LH%I*V#5 zK6kRi_PH|~ljPbosO}A*niWeeZN?ax-}9}<`&&=TI$72cW6e6*Ss$d{Kjg?Wt%g1g z&wGqTsjNe<19C*~mG@B0quyaa&ilO687BqrWT3boV$^3z;1zweh=TK8Z{Tm}NX*UN zg+Oti3UmX{2NKkKGLWg<+Y2#1PuT|)`z~XD6e!{3-2_p4Mc$;q6M-bvD+3$hyqgUC zPXm8p;6DOMigz_o(g%=q4@wYDhF9zB+9gZxRUa&i6`Xv->>5;&##Oi}nFa$7(`z zO`}}H?oQ}AhB0Hl^DS@`KQ%?>ytf=Xk#!b+l~=o5`$z%d`pAoP>f!?YzN*RI2SoOj zD0yfsijVpZRt+okG}%zJ-G7LnkQJxgu>3c5nY46$V#`XVTe55JLoD1*FGZ!riA9{$(Dns+jwc&*}Y2= z5*ylik+aOb4~LDD_~+a3F#i?x-!YLTyMK*Ug^|%weF%d3ctAcxB;PUONG0g*$javj zh=2VwHIJpw%T&r)=f16Q<-n7)n}snpL_o4qKc*!5=tEH)%aUyq<~(1&MUkRNkmRpc z)cQ6eQB=Ms0axz4&cpyw*{D;&awf8+BxB)Z)&l;wt3t&*^kDNPXfvI0b@N_;^dtHV=(C z)vOJMa0?OU;C1K><`})t2ve3D@8F+r!%yhTs)Sh4CC&${EE`K#(*q8cR!ieo8a*;q z8nAE)b3VFqgQ)b|YaQCpB3rbJh+Y%j9B47JvaX>k(7X_8z=y~PK&~5WDPE(dh2pF9 zuxfOi*cdJ2}5J1m9E#rJlw(2)?JKAtSoL-W_Q@=4n2JmFow#6ezaiA#?IMjRBQ)_8b=e z2dh25J}CL_u@148?FpZ>zM!h%yj*Kq|BXVqIu`4uO6%4(4106P_?RHB^ z$iwiJ8&nj!cDqYtK}>a%JQ2W!Fb#Hpb2`JPNJTDB(NaMY_t2_Hfq1dK)UqyBF^3jQ z#c~P7-j|bd6iV#YAub4*O`S%Yl3lf;$Yia9ONrP$p|7iy($FshcM)zL-N@uE(3 zMl{aH=*5T@hz^nw?K*~wBcq)`Wf8?_29*}4GI@2)InVpt&8nSRuS!mE!lF)3(^dddjKLEHkRsDHXvbP*Bb6Exn$}~LE_}J_!jG&|NP1*(Mi_M+p`BENfXb#0@N^j< zUBG_0Q;5pT_9DnIZm=0|!O7D&P{=mz@-)gapRKQoy{VN-3Qs278ju3^>*aeCEnGQj z@ihL4^}d=$Xgm+6Vk+M*6_&tBLLrL)EW-LCNC{-jS92IQ$uF5?y~YhUS4MwS#l(}i z1MI?5v?w?s$6)GdycRk_#7&$DPot`@*b;`NKbizWfv%#Ynl_~$*$ z{)~H0-FBpOW`Rj;QX%#m)%H7#(_>BwMh6G%;>fW9+#!1&kTEjWaLkI;6a-^;4hTFY zH%+*?0wZ4yh#=0$;ew4~57h=^!#D=pUCoWJa;dI>b)#*?&>#a?AU1q=pyIWAu0nQ4 zi52@+iE~Noxu+FI>S;av`x>0OF!KJT6Rz2*IIKEZ>*Q_I7qz>CyfdzNIrLq-r>xUg z_Q!PtLubloWbeR3ySe7yX&w4wz@Eq}?9Iv6@JGH#a^Nx;ByJkWdB)BXq)>F0#2N;c zy=g_i)ny%mFJU&vG2dd^mCqhNd-Z3p6+K;jl@L9zzvD#TS}Iq?TYdID?xusLJ)JQe#f7>Kqfe+RPwsFU@TPUt z5qd;y-uIS}y4sZ$P4=&i(LQ@wJQXTy*1YEDaNypgbqNJ)Q0Hu>#G zrIC>`NfM1wItO!s@Am|8MK(!i7~qq02v>bIokOr*PD(jaN%rn6?} zE3|^Mv#N@H^}BsLlYv@RWIx&3NmvE|38njYP7ps?q6bOptIAk2scd@e?@2J-TN#oh z0bC#`Rbc61l#cQ+{4E`cVswb>dQBXMyiQ_^Y-%NlD}0juoE)E{CQQ#49Kk&Y*$zBa zjf$Gx)P&ew!J(CMPVYCe*XQ@|tE2EaUq-l?*5PeM&ypIjqTGwm=~OFqPg9$?*sA!P zh%LKmHIYi+-ia@Rg^I|5Omd>+5R9}-lPWry)gOigf?=?M<2n&HmVGaP(5Ggh6^-XtYKNHfpj%0wq8c~&g8 zCaaK`?>GcbMgJ!WlRMEpk0TSEq*+v~*6vmNNrq?@%(5F_?-ZI+#f`G=h(7+hv@^Aa zJYZtXjO0#1O11?n-l^Y6{}sBZ(&oR(V&YCpKzfH0Lq?5fG`k6NSaywpmTced-y#h( zW96mhymY0gO;F-jP)#6LdasVJPu)otWO`(DWB5_Ut#D|}RGQdRV@dc6@0^csRQ zBue2qL*h3nQc0;E64O{tEOnQYn^ZPJXTU_okcg69!mzUGDBv20&no*p#xxlm9~J8L z+kCM(jEs^L4lq=ug}(u(RNW={v#4(|C~qm#O9;hK>#JZ&@2cOSBiq?)v28U2WxAN0 zGRh*bpQVkGcBQh$U5Xx6be=r+&Cu_DLE*gHz16@?20mfnuYjt>s(X;!@lAZxegW~& zpJlW%1~+ryQO2;aha-M{=1>p5*&h4@ZBP*=h23|%g$|e3;pV81)vOWzUcK5mV3G3h z6M~u?Pj&01y$UYd)28j=1zZHv-BLHWl5Yug9F+BLA6iG8Z5e_BxnFB)eTwwp&83TI zYuDd$KjnPObxtsC{E?WI>nkZ$0v_!b=rWSS$bChgRl}c=Lq$eq<`9)x=W6nGE>x`O1g^l8 z)WWEUY2i>RyrvpqCDjP|P}uF0-4fmz!J`A8Qsg3ab)@7ZO7kg?kdM?Y#V&WiPjPo5 z_W9WNlhUV#YWrO5Z;73|7V)2rUD#2dlJiXLGqK0TF83DLE$qJ$yPWT0uf+b(Vy801 zJ|6pz#4cx_*vDd*DdZ`&C5hCH#(uZhWjBIEI`+;+tZ|$TvEGy7fI;+wM)#N zrhP=mIUKc>uEoKtPJKpY+u6oSU7z(eAw>OM-lzViQ-9Z_>Q6#u)L*Ln!n4w47Y?M$ zEqrCV%);gA@(O=FT~^`K)8!N%nku94fb#A3H1`HoX544PrE9C3boC*q;YXWufRR$YkYRL?&N z`*G}MR{;Eur^dRGmw-J%BtnC<2{!B9#NPPDB}oeUt)A7 zLhQ2PB@9}hP{Cb9PW^6GXN?uKJ^K;i9pR3?y7p6+!H~F`GAqUHca@-8W$4JRKZ_2$ zNlGnHtM>&`j8$t%ja*$aV@lDY`dl5x1w7RpbE;y8vGy~G5UUG}VC|!l%^-XQo?myM z#Wtu^sc!%cp53aJ_NsM)-Cory0CmNW@!Qf~wO*|4RUH~UEUja^^kE561W~J& zjaSv`U=&{MiLbfpuA+2`Rb-n+15~~_j9Mc{SXPX)GcNO^suJKbP`)(krZ$>Fw*_TH z){Yrq*#)ei*zwCYmf~mYIfbp~lmTgGU~A+y(c@EXALj7%d33hx9jIQJlCKve&DAl* zmi;OW$d)zc5h>hYK|*azgB6_ZKDUBB;Z$J<@5Nsgez2g+s)*lHJvBD$h1rm>#yqTp zeF$dej&%*Y)qreSc_N&5%Nj3Lyv59%2LcrwW41#Ly+&o7{-`QAUs)&HS6{&1W5o*p zAjyR_x}(w>6VnlP2VxUHHPmo2hl z-yO*Qb{8A#B8S-a*=b_F*gXTwj%D&gThTi9z?}Wu%O1FnJ+OST2d-leET8Ow$E&Xj zy$9C((vfZKfwQZawj#^TT-I2a0}k?%hMz+P&fU=c^aCwFP8K`qsAAV61ISqQr*mJGQ|&-%P2WQHSJM# zDh@bVx=9xTZEfgutG37So{3}n{4=$+N^il`JRoe>RB84U(3YJK7GSAn-gpOO8LnvA zkGN$SDMP?LUC^wG^d6EIZu6uePA!^I5Q@y1jOoQ%DaiZgY70gJiQdY zn*~ctFdCEIJR>%|gC%IgobrP(#}|aSAv%7VUDTl_!^kE{r7MJb?cf1A)r|$QahJo$ zUr_ePf?eutrS>2_^TdEXoW@*W)$W3A>39TJbAS>rj%+LBs3p>VER61H6j9l8Rx@30 z5V6cpNYv`0Z5A4Qbk^}}v1-HX)D+}wD1N;#(AamECP>bmay;aYY{yVi{Xe z6-FJNCj#0WItIy0}5=7QY`tmYWJgEaDl1C`HJV?bP zL1g)sHweX+i_4_f2REG^DO8gk0#@7mINXMtPp8Dml%A~RdNntNPL8@#VI+C7dd!4fNxAyh~`R8-~Wbj(vEDfufm zO-QO!8mLW0GYIF9K;Y}=l!hKW`U`vd=Z4kQ+F#f+KR2xIa{Yysv)BG>Q0h08U)XoE zJL3o^?8mHnlo!jT5~-fp5?1zqwH9o?s-1!*H%>7j6^tz`nCyE-4iwDd)T}{M36$&jHJJ;+Ir&nC z>Nr)Rber;BYsi0}bOe&y5D{Np@qYc!h+CSFKem8NqpqJGQftYo@?_Jlx_OZ}wW+-A z&g^zm-RzGoqtVP-OI^<=e7e1`R(IOVHL;0x=>~&7k0yzVJghD27*o|;UCWfQm9t|h zRewcz%gR%vE}Xk7b#}I&CZw*N{=^5bcq@attpx|F#zQ$ppKxWx@B1N)OtUsL7Y$&0 zQ(f=@j4;a*vbPX24+^&}>5wMLc4;d`?Xm`nazmbc${EcA;x9LF*Cx4*w0ExR>b?&r zrPYHqp;|&Zy-&9ym+3Q}#_{YjS=E{hF$}NuG~XpV&&bwK)8)fk*+S;IO(RpW zv*oKY_b)<{LOy!0=w5;IOU14>g${@<}3?Sv3i zolqVjWOP7zgg_yzGZ~4^YSE)~Iwx}QBk^^&kZTIT)BGQNm~k8iNs8YeeN=Lx-+2iC z6SHjQSW22rVf+h0a|$EbCgs4T*Oti2$DkWtb8oQ~TiH^s&(f&O&?{F5q zA8Ytb)O#8|EIGrIx)k}&9o)yd_%(k+_yaLxnwl6=dRstg$_ zO;N>km5TEBAjrKcSA2Z=o{^mu$G+w^^%>dXVKuj@&&alrvk`Th`g7tVy@ZiT6<2Ok z)dQ^;5$_Sd&q;#qw2Uhfkw`u!ZxO_vl_^bx#d2Q zl2BnZ5A$|H^&w}sb^k_FqYTy)iPPiZ6q$(plkjNVC2}>;vfjvBHo^>|?vm+k;oo)# zu=;Jq9>mI_y-6~R69-e0r2%?Ss^?|j9DV=k`0HCh)m+o_Bm5s%n6%|ycJ7ZV(&n;L zs8oppdwtm{QPpp*irrBVQ7LiBE$2aX%lWzaDc>WtEekSVvc0O}gZdr*=o3QQxARz_ zmRpq6MW;iiZ<&^6>8Q5ULQJoY0{NL&h|_Qm|h@H;=7nMYdFEk=f6fa(3m~_gkLIqOw2iK!SaP~8KeE*qs!*=|DtzXOJ8Jo#Yp~@ zapV!?=%pEjXOQ3CPK|HMgJy7I@%INz9%{1bx)7WYKle_JC*`7ygO@{B@PE#4^dB_7 zl#?b^(T!l<)+N%;ES|~-n|-M%JGZv#|gf9-zMeydHDBV>~fvQJFpty z`RLi14I~TROM&csy)Gbi;C=cc4Q~N*9N^vO)%G@^*#8YE_zwX`0>eN?ty8{j+{=MN zCrJUgft^6H-vlH}-gAum5CaQ<97lOSpnb4E_qGEieGdX9y|qA^miJsBhYQ}%c+4^y z_y$nY69{lI;NKZ|FHq=z$H1EmoNC~B0}ql3lIEQSlqgOEO1SXXb-MP@U?qJYoU7gIfK-Kd z4p7olVeBJ~{j+nl|9e33j~n|hjlId(7a4oN*e@`4m$7$ADDnN1v9B=pTA-A} z6l1^8_`8k$lTz)!2Pom&fI{!@jlI$MFEsXQ;sLxivuK~_aac}Z8Wf#&O}r2{@%caKxq$`18G86 zUJM+J{d}Ng`Bb1(Xj84(MG7BuZ}+2W8@ZCy*?8f5Wkw#Ipn_RWT1Z z0F>82q6vC`4V3oT0EC41Mj%mn&!F>4)7wX*75`^|V}UI|!5arG0-g#y0hpw-4gtOg z6n~LpDNW}WK#6Y+Q1W#rQ2O`RfSd<w*@GTN0 z15Y$?5D?Pdu0cBAPXY&G|7W0-;}3vRj;?OTpg_6#OTFfaJUj|CP9|KB#F9S+` zMSuc-rv!~%_6=fxqd-Bguym0G@8dwS;B5p-c`OD>`>F=gHNCPNlyqMJWT@~Sb7}wQ zfFrU01}JnN0ZO{R3zT#$0t%h$fs)S226};#-c}$a2elZu+Q7L6RvK7pAVA@dAdrWj zV+xGjS$8hQL;Rg}A|D`$pvKQkoWhUm7$IUtR z*K_EJ=IPAvALjUo?8>Q(+7%a$yvS+rzv=*}gJ<}K4A1@gHq zT5`LR5|D$M5<^fuWBLs>B41$fycM4#mq5tyfM3O!k~|{wpS+HD$ z6o^m(WlhE6IHW>24*5kKh+KlZkzLkTfPqPntLD1veK*xyR(=UdQ%O|ukyHg!0?(ZE zFPm43Po~@h@lo=liA%vuO__Jxx?rIqWUy)ozW|}$wYTEz$d|5NIPccQ%jYS)dv0AA zo>#MEv9>v}NMp67w{XFo3vLrPQj{vV zJC@DUE~%2!E?VSxP0BkfN)ZI7$Ycq3aD+xkIUsqW_O6=R`FGW5rJxe$;>8eA!K6}@ z7zh)~qFWa(TvDs*A8`~)48>*2wsgsgdCTd$MeM>%`uVu~^)Q zDQ12aGv3&lLuDRSKXL!E^5;rf--;1>%*!roq{}69W*)f{(saZ}nOr^J4xLIf$c$wY z7kd2}TL1Fp8J;yYeiUz}9h`hIm#0i-v6yI5ej>*rJAK*o=E?+xVa=n=Qa+>z=boEA zE*fvj@AKtY*BN@ODU@k;2pfB5TE*#$daaTu%vzJa`J~TOaTduhlCxo%^OGJ^ z3A0&58PbYAYrFaC!~7csRArqbXJa-VWAJmIPXJOtxRjg?)>pE|Qt3Mn$a?N88+rH8 zl&m``k{q#t{hiA*z1>!HIOIGja?EkuW*m3nc*JqsY#g`ac-V1_YsWcgq#5CNxrBas zt9_Wajw>#*V#i%b99C^nvsDmJzNPhg&uQxqdPcZj=Q!#;et+i2t#nf8K}Pa92c=$$ zzGe45g`L}uAAx~TthGyd7&I#?7NK`tBv>?(t7CY+IbFhlV zwYM~jXen-)DWNFS=h%|}>t|ZEGu&L~A@%x{*te4LcLrHVs*BclXkN|&SQfXqznv-{ z-;LKJH$}v4O@=jJ7)M81wabgF`1=F9BzwWw@?kuH9}qqfZ{@;O5N=h`%b$^MQ((6Qmy`AsUx!Jbjt*u|72OGnx_+%6ojhz^LHN|6uGMgvPacM3 zH=$t?3|al92+O^is&6Bp&}yF|&D~|S%SfA1|FO${#UAeWlGcsIj7%yIa)CCYy>gh0 zR7T93)m~``NO%ZP?#m^lq~V#n`L|JqK;MRw93thdQu;ah6S)G{&-B@cC{=&OeMKu_ zj)6Pjn2MI`tMXR(d3p8%DJyo_$@!D!|JQLEzra=hpFQAU+dv)>f()W(#^Kn_R}F}~Gw=}1@jR4| zOZ)H?7kG*T#h#M}drq2xAa=OgOXWp$vMu~>;(9XkV@6e7zbZ2eAm-a}A<0b)$2Xkq z>r=k+z((c6l-e9#JjD|$bfnW`!yhgLtvVJgDD_2-3|w|oa$CCnXQv0L-lZgOtmmXD zrKE2x_DbwCu~%ZBiG42irP$|UUkd*^s;^dCk-x0w&A_VvoWc9;$lC)E5g9r=a%4b= z!FQmi=}rnO5Vep~5-0{D13!Sw3c!$VxsLAJUT?gfm+~U_h*tSC(oU5eK_s;L|5@a%qj__&-No)|-M50Y5>?Q99&$LT9!?yGFx zEiuqY|9AQuVkPKr%Zp$lm;Rx<_jekjaNk*+-PtpYPdA3H*XQ@2=uuIl$;pOMMzEgJx-!MPNh9wLwlS~dz?gjoJxDVhW0p}_Be_5ICW_xPJ2Z2dgQ~^@GVJuyy4l> z8L?4Y{B|!%Ml4cjIKnSNC-TZ8e0m@{i8kpUMWdWVYxIwzRU)IIa1`Z)(ur$|?a9Te zUX5UMXMDdtI%Qb&mSMr@2tShC{Rl?&N52V|$ElWm8oIGjh#kGL$o^(g^u}WQn+%0# z`|WEO8>bifZCo}--Y&3Tjl4Br$WD94FqA|@_6``b+rDNP6W|?d(({p?iiT#*e5P$X z@6hzDnN|K09(5U3dn>gl%v-C5mbU_s=qXb!b4Yf5rQ54+Uc7d6H5?a=PDos&Z_P~$ zPc_?1avIfy_Q~=X&v_eHZGS_$tzy!!C!05H=@zZ>r`ofUm#pNZy@H|u8-60fg|DWo z|A;kXZdaE<*-bQ`I|(tB$t&bnNDa(Do&MNe+>Gz@#rF;L#X_SBsL>*X;?`GG^sKy$ ziH0|>9qHk}lTd*ui>qX4sD#!&$UX|#6kWIjNfkxD$a{lDVns^se({>*4w3I^7w-3M zl1bio=nv(snf-wQ>Wt)bYIXOP+vj<5a3I-k4e9VDx6&UrBe_RaN4ozYr(~}yJT#De zUf!_}kP6%n%3-a8`Rbry(&kcAw1za-u}&|0fV z7RK$JW&4GT?WL~ffpC)8oubsEr)gK{&Sb|LBaQm3g1G%`g}MFO9*TC336JiUr-tzPN{8iv^354)$^u$j7Wm+ki-KGW-w3CY%Urts>Z?o5i4xfc3Sbb2U^j~t%6sqfv2eoPpv=Is<@$4gwDxexeXm015hy88+u>8 z#n~Xe*fS+Qr>!h*cg$&1{YTnpxy2K#3!_tt8Plpx-|joK(}(Ps3D*>dFH|nA!CHnP zv{_VaZWw{=fJkl+9HJqack3zSM zanWJNi^7nT0?B8EU6AkPula4(or+efJxKqSH77GUujt{a@ihNZnuC2besn}UafZJD z#>dxv@y`a)FWs<1uUZJFBb{_Qo%DtJ%PRJ-ET@y&Ve>+X)$u~pKTkkPqH0FSwxf4O z!!N7ODMjA1@*L@p6nSjoPV~)`#gV4%JoHjw{P4=qg(L5@`pVwiAS0K*`LOlU-asuH zR!+5s6h5o@aYQPE8n;p^VKVlIY&P$<_ZvCq$fD`+#d`;#jmJ-E&%XaHY1Cyq6!FUD z{Sdbfbp~pCEV{tR!u`sfLcQ3kMZ83Ce{W`g%8(DdEXg{`KA_|ezhbXogJ#wP=v+Ej zcX2v?``P%BK^5P0H=OB2ZPjj;$fAXD6+chV3M4f1tJIH#_cX60k@kW3krD9^&nP%x z?~ETFG+~B&<$}oDt!1x-Mg?o*v1<#M%gj`g$_Rv~j+9=P7--MX1ANo=hD$`TPwg(% z(rM$V_H9M3Q1X;F_r~s4yu|xees*N$hnDP#tU`+N5H?OyBXio!4oa`5q*cOUU9`=r zC~6O%%Y3%^SY4S_`z&47ir%n;Hh9B}y@*(&2Q_VnzJ5xb?mHRl6Uo0Hf=%1+y)ei~ zP}>?T>j)&bBWh`z%OL9BK6yQ zUEym~7d|{-<%i(>FQzv=UnXC);(xi?O1>yvhDD2yql%;ck!|IyAKc|PA@9lu?{4o9 z&-edIF-8ub;CbLX6sSLT>tA`!I;tQLyLl92J5z$%!AMy%X$D5VVU65vMb8dKPxk$u zX~h*UbU~@=$lu%wTNVOzlx!@#+c>k8G#Kh9|5F1W4_<=Y~LJ+wpf;p2h8` zjBWKJ_A3y1_n0$&eC+cq8N$0>QTn^{4$q!W;IlZc5=ZphV)3j(K~`MYU3v7p+SbD|zJmA0)-@@R#*gmG!PG2wgojTF5KGSEq@tsPZ;zyq?*Ge1m4Ot4`H5W)l3}fsJBeDcXBxTJ#Rz(q znQLrUYS_nrz42GaoO!~x8vpnD3vVdOJv~~O`_SKOTqMCGT_Tn$+srhl<3XJBg>Nzb zXX#*l!nYcKQy_i(9eqh#2%k@HmUG$h5+U=&zgHc_x?HV<&zJrd_&~%|^UFuS$M`=0 z{d{`0R;!JK%XJIk^Tu!dFYU*_bO;`pb2R9a|Cz>r3I6%g*J}K?5HcTs>l(Q@z{q+a zU;0~$w115Tec~6UCNVAQKUvH%EyjNj?)l+1cqMW{hLQ0l3ooO*e-7SQgLh6Yp0P{3 z&x1GK;4R6;%gB#N4q9#SWZY54NnalR^-;8sQl1rwQTq}J;Na)WKlrX5jc>-KG`@;V zx3_xm#v8mA=y!m4&Hi$C*zbdPW(A~3#A-h27fNE@WhyLD{uUtg15oonei(x z-l#(Qx4|>xSYEs!c;gS~cuRFE^WufT8*A{)xRw|1AHbV!@XYwu2T#gp3wV1Co{V$K zIOP+F41QoxETwtzO2+dG;O83xJP-H@0})fCcQf-0SKr>dfZ}c$I0`r#`|-fz;2V_F zHu0YclyC=_zqsP|z5^8hC{X-EK=D7q{3-EW&Z(fdp9vKAm-#1lk+&`OzcKb^pv1Qr zDD-9+_iq513cQ1X5??Q#;(t2-1V2d`i2W@CuLTO;Bx4_D;5(GhdARQZO1L;s!fgaH zRe0|PO1RsMdo_?Ky=MXizreV^LLU;mcA$h`3lzGG47}RF(ZDj?Pd0X0M2cPZW>VgN z4U<1pHL%6N)dtQru+qR%0|7!}&|Sb2$&14`Q-`D2 zC!Q@Biq}}#D~_4l}*1(Q}h|9#K`~n51_7+pVx%|S@@CQ9*5`1OaAHkAougI}0);`Su zsN~EYnHFLRXgdAOuo^3<}F*kV98jUZgnfQv9Xa+@>kpMYrD?x;2HQGHe(`bGb!RY@=BW zqEf;s)={Uvj0<_7+)UnFHGLUF9nQ`FhTdRDU0A8&+pG=M_0PBIq7S%Abr)a`bTwx- zcR3AiriPi^@tU_ zucS*Nz&=*n$2xXP+bzdFSKH@0_Bw5^Gxp!D5jvqFE2h32*L5jZ`Ep!aQ?Bymxb9B5 z%9rEXlX8_W$5rm`b!_tGxR$0|<;!s$pK_Hi$8~1PRlXe8`6*ZV(yr0JZ{}M{wCPDs zgt=o6a67`?d5I(qI9gz!{hG1HK3<^W-bvqEN&Uc!(9QDT_my~WOy`j+gv$0x6$l1B zMFgmb0!u-L`KVGw1}rvqw}$ec`z`M89~9Ek)Svkd|2F#g=iBfa|5YvwBVXzsE!|!e zSJdB-L$v=~NTmj%4W%jw4JmPs(|+WtH2MQ62+6$hzXdLrvsF`5+(G|;6N~-sOExi2 zIM<$rpz2@I75h{nNe%`(vXjeLMF}icNeJ7h!;_p{Z=Vj@WfwqK24j(?In4 z(dbDEaT~L|l)G01CTW?hk^7`+Ske1*(+JwjOZ|53g+wM&QIQi~QEptsKi`HyPK?RPW>!QA6+q4w3Wm?-(L%*=r>F3&aw{WVoxdYG)8cYZ1zOn_9S=s%eJ8vFLX9JDNH__ z7>34Tu9#M@R%JcKy;06WliSJfwW)hLth++TgM0=~eo82RkX@lc;GBBLntc99vPI<8 zl(FqoRA=tPx18d;gBOv`HV(m9FOVc<5h+=%SYTc#@lCj9xTmR1QX9MMzW~2q!@rGx z%Rg0FBK1Ya_jx!38N!|R6O7f4b%dwjZaLy(aG#suUYB;j$kQUMjKCR`rC+3cjS?2-3K@HmV;H!;w%S)amp9DW_YnL zc}+>;Oe<>Z;M3jZyOOOw`g4MjhhI zG-|0Tm3G6oX?S;JVb1!k7Q~eKKcMEle-ZkaMh%QjTjc*(vugRbe!}mSkstFazkK%_ zt!9Du2ZiP8L%)UDL(C`mm+~5IOk>==frd?S8uPzGx?;!_q_*L z2;N*HS3~lvjDu(B$$8yR_;nr8^d#TPICy!^Q@4Py_Nc};<j|+LQRV z0?Cs1X9mU$Tw&m?22L~ZG6P2#IK)8F%_($VH}C}mHyQXV10OLkX5bQ_q+^DG!-0~I z0YLsvd6N2(bc;|nvEK-!2)vaBUSQxb1CLRe;xFA*;4TB@4oK|3Fi-|YvCFxNKv`1> zyve|+23}#{1qQYNC92g1&NZ;oz)}MN3QyXwoO?L^Q)WqZ4nk(cq|Sv*|2!8r@pp`D zm&D#;+~gcm?9O;_1NIDbb3f~ZW?aef|3Qvj@}C*LCC6TsV;9^^d{@n)d5da|y6?;< zw(^};`7O58sY>cYT$Rf2zE5A%Cm5Mqdrng%O#WA)S=)O-%k!$!^;O?lR(#{qOG=ed z`*q%W_P<|WF9lP|4-?ql>$& z5iZwV;?#G)zGTtTTWdo#;l(Q!EWW*_Cg|58_5U@7PN_-P+~GPcE$66lPmoN@)%ahu zzg~Z)#_KTjM6QdIH}Row&(|3G|0qDQeCE6p>>_?C(>f69p+&ep`)lbd@>Ah~U&W~X z67QaTiVxLqxB2WB0`@Bb`xAK0WiVkCAD2a$s7*m?a3D79kf+%zme{yYU?cQ2J_=G5 z+}vt?iBxYGE`ggw@t<9eUHUuaIOz#buG~ z$kAh-ht^}EB5U=-0PrrW6zK`*+A&o{q#o{`KMdT}>tw-)xEx6Ri%kCo~Dto?vj+qRFK(okm{@)V_?$ zhCd*9bTDN>yZWQzg})yn8GNY7TpT#SIz4GcK0ttQfzr>?E;TUlyKd|BRtt_@w1&9t zk5vN_k%!hmnvD~{SFD@GPj!%zbdVD55fhKdX4*@o=r8Ka$OFL&$qa)xra#Innsh;@4r<|~Tf z6_OG9u5&)oC;zmTofJ`?{15QhzgIrl`ET>s(nAT5m3y3jB+eOm|1sJyGV^|H)iV2y z^44-*o~6!Lq&?CEZa(ae4ZjM;{(EPL3qAJc!^O&F;JsIh3!U`l!zIe4@ZK@vQYtQ# zGtKH~!N)ZFhTkSmrl(7@>Xl~IE6u7mr&(o?XVD0`{!B$`>0pyej5DE47hBmbJfNugCt| zLi%B>=w?5fieP$gtZuGOHUetEq0|JUdn(f{3t`WS)wdbrsznxvRZc=PmsXeQa zgNV`gO4N#ffC?o!FF=u|lG?9CoCj;su(GHFbtE4VhW%O6C*y&vs9qZ@3Y71P`Q3$)UiXTUXmz6%JEe;W#;Ps+o>kD9 z+^h5riQdq8Yq~#?ibe}KyFZ@jw2Cfn(d|d_bbQgO4hE+-gzVPIXlb|l4#BdFveH@X z``_wb_ho~JH=yR25D*taiObWGu7?<>DEe6owf1=tszj-09SH^}C)xc_$ca;h)!8mb zkI~-9-eZ(d_;zU(H5C5ZK<%GUMbTLutAE`knzQ9ms9pW@fH~X%%F>Zz&ncq~EH$vi zKsC+c@78u%wYa(qAft5at;0rSo~D1|BVU9vf9MG7BqW5E8aUs;xdzTQaHfHlft3c1 zH}JoeU|FC`@<__$7?QHr(lR=Ou?x3J0mUZ1A!YM-;P5Eqb&1D0^XQg*5lHHg`D&|p z&{nzx2NE=_FnT@?QQd2m8~T?Ko9nc@4a%+i-~Z<{65l~0Gp%SCDm*V7#rmU)T4%}f z92?;b7bi7zFj7R2bzQ#%LsBJJ87UJ#(<{(BB<;6rmC&NGprMq_=4ruO`+81{Ut% zW#x|L#k@n<;pRLJVFs~Ecj!>|Sk_j~K7J&>r3T8k{C;6z7tnc!nVOFoKSx*D?KT6! z$Nq|5pC^dk>gR)=;5%qy@OxPKc!IBrNbCobQbAQu%ljAxsz9`86z`Kn+A~6s?OD&; zn{_cnt6L?tTDg>LHKSEe`zqRfp6YgKP}MZ3P`ngLx2f~UY0)67Af5|Ojn$85(0?O3 z>v=_Mn(e=;OSC|>9%~2-RDi)9gk-;w?WSgs?00Fo^V59$ITR;b_WsDx!K=RRE7T zS=jrl?C1UVyvI#*B#!DCn*M5>IEVp7U5>FWL-|I(p9FCoO8OGIK9 zRpnnHDSfh{if&45)YXXkN1vvoM+Qhn1I9?BCQ)Z)*fxbrc~YBFllsr<;`JY1P=~(9`#cf!RV}Y zRTa@{E6t3pgE(G5$jHruaO+4?nbtnf@(M41&7gCIKO zYWF9uLp2mdwPAYf!XD3qM@c^cd}S#7+M%dT9K|>*Wu&Qz*0_IU6!XOjhx-e9$Sbi^ zIPJ{pWxM@lJ(&wL6iJXH25O$+riNYKVnWZVpx4J%Gd*x;gv1Zj*3jr!(RJA)_o;H?PA&Skxp{|}Ieuq!{I;MyuZ1ogK-Pwy zU8?O@bX&1|c$wx|bukKz*fx7qdy39$Vfa{ei76mP0ckx9Cn`vH0i&1T5roDisHyQ* zFI3y8(TcYEvHptZ>c{XEI*zaKI}|=8Z`noJC9jD-#-&|<2!ogyyQ3hi`4?*FH1m56 z*UVon?()mrFXfJxC8(ZNM-I$HpD=V$_zBer6FZLv(Ga31c4y&RyN3_#S5a-!(RH_!n#}Bil$e|% zB0Z}*cHtX30R99}MWQKBgfiin4IRpk{X@<^vR;6H(R{(XUwzoZ=J-?Yb^P{+Dk43f z-cLH1#E$W9u#^XXrRsczd!Q~~Y!)vR>qoJf(6VWmvKwy1r$=0S)Ua;|#b%+Jr{N0x zdd08T34w6^V@-P+MiMD|6xkIMbb;_QoQjLGymUIuv3Pgg}n!nV+5x{k&{mF~uhMN?4W_2POzZ(S8t?uaSiZV?-cQ~4ea7U{sA z2ZV=~JhaNLziF4+JX)R^&!X~Gjws`*>Sy80>B>R1HOBXq@;w2&BM{m9shpd*JdJ;& z(8BB3^B}%sWk)a;JjBu2xc2g7uwuuG)0q)FD8qHtv7!U0!Daiit2a=w^PV}>42zl2 z=3+t-x}F0OCWnB%v$|=!iY?%ovD1pY{i*2hog(^sJv`~%b%*Duyz}Mg^k|&ty*J{q zYLGre6lq7BKV?V81XRJp-H$>SlRaXewJsPd+{v{rZ)mGq*N}ziuwE{9QP^vb>$Q-Y zQSoAZHvy_;Ttn@e%xC&s0d*_Bg4Z*u?0reMX(5SP`IxZ0sG*c} z`0T$rNkRKewVg`M<3u2-v6s6M+M-h8W?jwP-l`Kc1B499<=aIH39|62TCG}r5M{@c z+kHxYkMAW~{Yt%l4Z!bH{^x3u%p!aol#S;h**Hl^e?`x#`zFQ4J%QatGFyBTmKHUP zpqu(+?OCMq)PU)l3PI=8P32`p4a z;ixKmugX#)Ow@n<(oxHJ=0tr;o~T11r{F$6S}Emd)#J!13e;A?G1%HL%8H(VOb*1F zh(0uA62yCBGm}VEu{)LAip@TImdmG_fDEKo#Zh6>d_!d-RnE+LbQ&w8(@4&=5joBI z-kUn_4g}`&Z(*SzrsTN%{(FaLf8h|z7rs(1*f8>5D4+jQY514}{POxEHBXGpDEa)y zo~*oGW&NaYHS%4>$QzP;;fHDOKKv>d;?9+&YwWwMYB5rN$~gQTIq%>EKge&Uc}MD$ zYl?3r4}LxPOU*k>DPLtA`gz_3J_dsGj!??`i}3#h!upSN`lbB82w&c6tp8Z!OMQG1 z{zULsf1>f#j4uJ4^ykU%Lhy@4U;;+!OBn}0Pk#Ra{IP~_N9ynM@awp5rYU-t0E>Vl zfx?GzfXm*m0beli-+-Jjdsi6ybp{p#kH`H8r_#db@<$*^^!^ek;b#G1$@U5}ujsir z+qmzgeMz{dfi!h*6i=G8_g)|<-s_EhqJd`_ILP>S!H6OFkI@hXt_4cCMaF)kvCI1y z@$V%ulKwv#_!}Uky#H+Ay+8?HYoO1-F$NYIxSf6@cs~a6=WQ_X1Rzm)Kc?Rae9geP zfjj(>tzV&D-9S<{w`7*PD1fI|0Hpp-|ofg^!#>{6)$chfioZZz=628InRH}HKb zldO2-2Cf1M{fmH-|G!e{Qa(Ek{C5MJ46FbO-hDJm$;Yh*27!{lON{*q5~J$Rz?gw| z18ExGIR*v{^a3TnJ89f}dVg!+!v@}Mpu-0yoj~x`lX%I`8Urr?3Y`H!{=EAbA0!=% z8RsOu^4w0+DNH*24cd!cV5@;G2Cg=6u7Q;XmKq39;no9%-)J?3BIXRHe{GKat{nWI=Ge{Ktqg{%Y$hwkP9=<~ zeP4{-di(9UkI0sXZ_9Pccvl7)M~uFHb0!qbn=|8=?IPrif95MPh^TjALX78kHH()l zL&$#0DaWdxj2ZfZjyi%c&(P%Em~mB4;rcpfxWFiu#SWJ9z{~KFDF!h^vv$d%+io47 zib7e(DQoJn*MCP&|F}zxn121<3#9}7^N%Ucs!}Q(!?gCf@4ZGd4v8r>>l??;*ec_z z%UL#jS^hE63nWJ9NmzN;UM>!O`Nx)rmMvI(r}$xV<@7srO!8dsN@6mMvmA4rzUaMI zr%9Le8!FsML4_`kM79$Q6xk+O?%nc$ZIh@Yh&!Q-o{aKd~hEHa= z)^ZxTuh}|Rv%v~iIc{eZ4iVw!AN^0_onyvPW(t^MD1;Wa|d(A zM-qtd@^ngGBPG>lUzR^5r#LD38Yz)oPTq7l9!ZWnv|MzgkY_|}$B{$0Jv3VF-?VIG zJFd=I1Px1yynVWg=A`4u2x|*W4GNjJTTf4=xNiTjY?= zd7EKi>Zl{spo^@!;#g=Xr}#m08=r7<#^^Mln>gA-YOOw}b;ikR{9eU3H))ua6O z0ZytFf}A*ORC_lncU#i~hp0SG7G;^n5N;*-#+PP2u*R>`*YGz$NO z$bWs%=ELFtqj9AY@qzj(YpYx4uQ=-S%-|?Vj$Jv{Jl)nO^`@-DzOpwHr>OfP9as+` zxA>ATsvvq4;owbD0R=|GOuWlU#j5Y?D~$^@IF~z^uahkOL}&$H8yEA>w_zl6fC^jQ z>I`IUva(>luLU7x?%^w+e6!UCL(UfRz0Yx(`DzOO`Q8`F0iBrs!aIEC6T!(BzSzv7 zf51QAc}tJ+58$6K{gq}C?JxdT6GbDKG}NnE=kH? z8Rz^WL*A1g54U-jB>7Or!OQdBCR$XatQBlW0^gP&0jLGW4)-j^u{;m0rL3|~xt z#P=vr@YiVnE0+NUf0pqdZR~@AvR{9Z#IsiP{u(IZ{sk!UGy^5v0-)g40A;^_6_6#c z_i`YEyLTXvaNaj4J4w$IK%vv3?N@#eD0JjasrUDB&K~?q1pNivKmnf3)$hBs_nEN(~f?*!SWuu+_j816Lb3*T6~xOAQ35aKa=m z=K-t50ppx6h^LrRe&X+pAJh02yE7jB$@n|t&(DnA8BZQ^!c%@?uIDG=o$>A)hMqIN zK5P7)@l@D%1m7{o@tt9HU4ciYowk%^&pm(mL5{zK%?zJ=z9HjTrvHH)`^7o-Z-bnP z|MxlmQm>i*H97XlIpIalRwjN!4*o?s{&(j1XP;->zTh6^Ag{O5=Ne3+H4B%|UvP&O z#FO!vdO*g8-r3?S0un?iRg{B({K^&km5d`{)sY2ZQ!tf;n!CdbYVS%#A_pMZE^-Kx z?V=N0p5dAjNs~tnA+d&`ni+%ocHF{5kn(iC9hfeva)o1}R&r{bgNRZw<>SU(I+nAE zZ;a2cU+}W>%f~51eQvRoEq_R#Tu_0S7mxh;*kG!j;Y-y&!=aXKRmum3vBM=Y-TE^# z8N9@_8l17l4o!7_!SSauU-tYWJVfIQJxNOsgVd$s^cBx996F;kIoD+-UB)VNOqP-J zi)_7sH&o5OA&t^v(#066%v|V6`ua0pq_@y1r_u}pne;OIqM&@y`N{^9KBp7ckv^%@ zW+p|qjw36}Uv$2*K?W#Hok>U?latVM40GIk=UbqZGg0+9U+KV6&R5nkV9NcIoTJPX zJdDtjpQP`9e!c>8lP|i;t#?DGq3_~rNM*Q=Vo_`SjX@$woE-n4F!CabHZH5cW8-w( zy7(cWK*VZz8rSfx2%!8V@C zu)r^9{rHS$@6t*O@#;Fapd&VME6Ia%;j;JW^c(M!@08A~t&?ImPdIL)tUl8UxzrBz z&z{C}$uC<~Popdj>^VFv(mO)be4t4Nc9Gu^3^pcts_Bc=k8<-Z4;bMl?-YA6Uq?g3 z0^gP)b>Gg(B2qd@ZbIim*CHad=^JMU%fqjp#;;T|oEqDtrcqbc^e!Sps$Ld_M7nt-hGA71p`j?I zA`xZ*v)`|-rbLv+pfe`LLhG)M9~LF|gbOwt5sYLA51Vy5KhAQ0q`< zb?xhs-jALV(Z8M<9VjarS{&~#w5y-4E_kD=e3$Pj8R5uLMth3%{>6?T+G*7u4tS=+ z*Y>ehb`++y@`L8Q#PiGvzUB_!>efz_Ky^lr3|TQW67Ni0;hcvwKf8MKKY5>0{VYgdl$H#5jAI-m1eNOp zmF}qHdm3)+>2yr4@tB;9NBtbH=Hz%xPGWqG5n>D)ClPf#>NrM?lPJ?M>X?W|4fnsQ zYB#%E)MUZt?0soCF zL2&hv(b}zCwuVl%JZa0jgX=KZl^UO1H(Bq7Ry!tLSFak6BH=6x*-+8bb!Wl2>kI`( zY4`BbcHj*k654jf2Qou;%t7#Pw3f6fEJ4QZLyo7ta4*fWZv_o!fUX^+P$4)Z^Jjw% zuVa-h(TOpwSYbiG<88&HOQ|wZp(Gz<=d(%vX|jFKt_tc#e^oaxN0aD&XHZa&nu}-A zqXN-E_yIaE9AjxeK>dlof2dV`9ByUmKs8uz2hO{uca#LNu{>o?QT<^n4i-J#(cNaf6Jd!(t19~9Fe;>JR*^x3esPh9q? zNLDQbfLw+b#pH474}z?Bw3a}qZ@240(H7h+8*~n({zCH7TlmDYR>OgL0ohHET4qTt z`#8ooNyf<@xmXYvj7bBZ-gezX;OTxZ9rA$Y`j31Hfe&v!84TJ(?8v#s-E8WX*Wsyy z?I|3wrigUbxwnXxCLU?&)T+8GxDU(ZFks)u(6P4!>G}M?|4F<4%I%eBj3=Nmt+uu4 z11_3V!85;<*N8jO{zx43N<9*Hk=qk3gdqA#;Abq@il)brq|ewmZv$>f(L=bR$qQ9ZlG^U!aj z{Kp}_=02w@>K#4U-ELJQ+66_An-0k2iX4x8Quvnvf{bGrhqL~HcE(p<`&ZuHajyyd zML^JroFVXE3p@=FOE2v}K#29)1V!1BG7$r0{Kk10dh403 z6gVxsVu62+LQpy0$3LnMl3NnqByf^f5?+9RSi&(o?j%=z2bDx}#y13f36SE^SC{0n z-DnS@{}mwl|CTkLBCZ0E($V^e{Nn|@0Enc1tpaWkaJhg}1S}U&BOm}vhdO6ErqVi{ z`a9Vvm)6-N3n#psBEq%cNAf;t9MIvJa1DOs2*~Auv@#@I8drWJaA_QRQsB~iKSxr2<>8Y(;xj22Ojl2@U!bTl(!UDR=o)7Hn`DOd+!#3f zDzT`IbIdS!-88gewlMqcCRP-oikb%vR!QPSMyh5ix2TO=nW1cCRohf2Jw9JA9>GbS zc^)*Oh^MC6Ea_B^&7ap`hQbpIsF~U@6VEmJ`l+>+ndV-iXwe1mkDf1lgmXDDq1re>sY0r{=hSPla?HNgyxQ49K??0kt~WU&4FC!ag>pF~*?N4Ki^lj!PD5$nB%HkIhgX}qpDJf` ziUdTD9t$y8CliIADQA@E2yvMrNbt#+!9T&Sgg#b|cU$mvL8PE^VyIS3K?Z`f8_CDX z@lN}4Lgk`vZwq>YJbjy{OV0$8@S|0(r`@jCkw3miiYrJ!V*`Lojz=V0g#{b!M;rkFH}VSi+%|{!HLi_sR0A!fsg9TGDD0 zRZ0!ArWHC(7mRh5KSJ8kBhwS&vCi|DL%Q`xCYY6VNz}J{IQ9Mq!$)F;b~Hg?$$O!0|L-w>hE|augkl}e7)R56dXRz< z@M|tt$UeJ=Cfa19hHOK0=({ zXK_30K#-&w-DncXHW(|t=A&*dL{wQeQ2i-pD5^tJg;O_2JP?Vq<`(H&^iAR#Cbk~n z`nR1Oylb1l=>v?DnK#b(zatiVUEJ5%y#2XUU)BY%dS;);IuLa^%-P9-q`T7ybPl>$ zZ|lrgsO!ODu1)TN^zS?-yhDUPEdT2w{1_S9=3wq&>s*ysUyA(ERo&NX zG>^yYrcj7@a|A!GcpmH4Bt$jiS1#6#g0BbYQoP^eSNId+eT;ZnBHp9;{08x)buHBw zb5ePFS+5R2oYP{x`Y=8(`>;mU?gFIs*}nmz3Lm08+aD50KWUbUPoxdO(Ud3XtNJ0^%F5%>cxwUmFUD?|WPTApYY1hDcza-3Nwp zYPSF<_#z;!bC&_qy15<@a{_HABGdYjr26oRd>4@DKM6?d$#4Phg9xpEuL9C~wF8jW z%bx&Jy6J$#CvDvkF8Y_Y6*x%vZ4hv|fKvo47f>T00E>SBkaT7=MhSV);zb+ zT#w@@%u75!xEjML7QS*3Hx)f_;gGpu7A>!ylBm+iO2g|k_=(G>b~TXpEG%G zHpS!l;y$D%GfU^03&VLtRtBcm;c>+fvLuZTxSzeA$}h~4t*4mQ%;WSno~Aygq1^a- z>a@I}xwq^86}AD6w_G z1M8`oSP;*votZt1#rLE)N6?{uPwoN+AEGBY&$R{gA|82;Wx1diBnVswJ-HLbcX>Td z&*Bw9Z@H8LgfSi}4xzk)PdAc}Tc3rBb~r8QEf@4;nGQ8Tk__($km& zNacMRKe;3R=qI(UJnV7LZtJh7`Sy>g=nHeU9VQoSPlVc=RJ!69f)~ej!-5gt;px!? zk3mPI2(}kg&Oti+3p{FcZ&AMmBYOKJ72C)#kd@@W!lxRRj_tVy$5PWGyms+vSopu_=Y!h^8=g^Bx_A)A1yAQ3j73L){rt|V^=$(7Yfu_OA!!d*H@5Z__ z*iAOo{RyUWj*9j`rJcq}jgRyz4;xSX-54E-P-v);!)OUU>w)AtII<)FKjBtjIyMCog`MEj_ z#)i~k6sRS9DPASdP?K>MlmNGun=b zckBG_GI;CLZYbMqM|g)-0{T@Ib(^OmX(+mKaZT{j>2&5#m}PYYm6h+V3iASmDe2RD^g5i=L_M&xu06#HeLW^xHb${#MS`BGmo9a$h+v81+ z;1gALwE;yi*gi6({oPi>4epJ)L`pUH$O|n$`JyiHae(cIp+Lm zNJHo$L)sPS{WzXIq0-%I^;S32-VgNMOx7>Gxm9hq_8fqb@-O<87mX*rGzR>`Wb1o} zjux%FgPh2!leP7>uILBLDP7uaQyNYr9W|!4V<-WCoqEvar760iZvG1}o_V!njuKt? zLt2W#Q&E+0%RJ*r#{k$iKLtB_XYnQ!9h)Bl>y&q)R?%iEI`u*o#;^hu{|GFm-O#1| z!(?rPCECSzLrvYSWGKtkAJm~Eud74VI(3-tI{pP9A}m(5!%$u8JqygT;jO!g@144t z6w?jR@YCJ;$lsg~qmEGG^M`7NhrG;a?|X-pnTq^PN69`$Wn$lyF`j74a;Om~{rO}SyHpJuK28jE-O*WW}ceBR_KDk2^ zGe=_?In3qx9Jo%3!C?bxu{XKI9O@u&C-CbnoXwRHHXoh6w{U4aw-&EsZ{cFy`B1wx z9b#Xe_+#!Na)1m3R^b;a_T`CR<{lA$F(R~z_{9I?;{OLCNauQ}JdcY18a`b3(^~Nl zTg}=AKqQGA4X6T6_mATvpk0K2w66C91PhTSM56eafE0f{JSl!UAd+awbQ0meLgoZB z1)KtiAir_}H39-Ke@tuH`dMnPT7gqIIjUZ^z6KxU#^Xo0)c#SxDURek*S|>!kca1b z;3f~8uljmD#L%&BeiEcrehZ41hmjlJ%} z(O$kngC88}`xnY9g!%UT%R*z4>kx4yTv|7x?V0&DF@0nuYk2tw56K$bH?;@{)e zWm^TE4I=&m@JU`%Ku@qNy(uilV?ik2eX2iTX?rLR_H zpLymw)Tt%8K3lHn&s;aDx5KLEHJUVtx%Wv^9d3`rzEU{Fu`X`At+1d14q+96FBm2` zuq2KJi`(aBs!RWm>@$!`qxd*sjdd98SJy3t*}`sf5kE9P5*G}zM#d6X($GYRRCE?e zT8TXs+W8`@4vNXMCH?$P_$jgvyXGBLMR%4AHeqpT&x2;~d84vRy6Z)G(`Xy;snKCV zd)%FO%2}c>x??FY6fX^4;tLf`XMdezKF;L3ueHtnXr@dmx=%pM*Y8Q&fZM!8tlT{Z z1YGqit;0yavRnExtDD~kmu$L-nQju-htx?2%BA%d;WP?}a`HtOv@LOU0eYf^?b%6j zN%OLf7GLcjQP;r?NNIu1J+-muM$-Ue8urHuBy!GTbXXUEWG}=1>?ty~$D*0>==g<_ z5uf*^5mujrF*(#1ePr>WRY6ZhA3zoBd*=DnzSmKa_OU9iA&+ZBe}&#+9tD$u*mA~1 z{0cRVI6YqmaRn?5E{^PWDUXuwF5)L61oJA`4m8$52Nx>zC2gD{t$$^jrZQHDuyB(& zd|-r~BEm^;rnmV2{G|IB1^;-nd*7## z&ihh1n3Ll5vj0J1#pPmOh04X86kq58QvSck?-{XALgizwmv|o|AXH2kshrGt#9NJe zz)-B63P}4JRe%`FwVP0X7=N`d0aCb_SF!WB6p!{R$bSi-58yW-9su}XfEc^kxmue4 zEC-G#ep3W27f>T001GF*1e&Kv?OG)8DS+hW;YZ<;s~5P`jxPzkT(mnyl|^UgU*&kJ zNB9#SIDK>F@!#;k`+MMQ9weRM#8gJoPT~fpB#k6sBm%EDLqls?t(n<=f`=5@73$Jn zlIBo7`b-ij7MG4iy5ja|I&m?(2$9XJ!1K?QyXO@a43o*-pPPxh_2d(%|FIqu31;Cm zqTQkePTzj|p>HwwQ|C`ZC=nddqqK#P{}z(RgY&0H%E=`q+1Bh8r`iY`udoCmK*!}v{#b41*Bc)ArVPs%sZc_&n77OG87k%gNzKL ziw=9jK+%N>B^!3G@eW2#F6){KuJ`EhPq*u3{AWbnFKL#^#pzpq7j2ssQ=(@8@dPxv;QA)xC)l)Ez#I#p>i@V_^e6Y{9jYOD^g!rR7 z@w1*LS|wP*g+H6DtD6In1pU+m8L2sjdLE{F?JSDaaZQk&G8&{t2mPQ!6w3#`Pm{8c zgcvcqG}-4zv!s;cyNJE_Jo>H2`UeKSmtk%^0VU%X34wwogC#R2cVl>f^m(S`h3*69 zF`QF3x|R=}lfdiKl6Ir55WT>K8tH_I+?81 z5#ozClQ;cx1n!xOf4W_C%O}eWsVsqbLoI1Y;+#tVY9Ao(iunvUpGdQ6*Xu=PbHijW zBEn=ZqBH`a8LODxYWaaL%D0pL{f+*em(9ne{z2;n2nVrbg349|t|)*|pS>Xit&0k~ z&84i{^UfiRIANk4;mkniCle>U2A-!H;GO^Pcx2_uZgnPLzyXT39)(7tb)(eVneHAG z{A6=$)_r@{3le|){#Ryp?u1yi;$WgVfiu~kF*#huB&q?Gndxi*gU_Kg9?l?QIx7W- z+#)y)vsl12xlTQzb8sEQD^xeVltQo8U%}24FNW)&7M%wp{;~eXrXt$$I8H9wpQ0{h zlJsH0-T_n%XOAX@qW);EDC%$W0gv{=r4Y3ELHS@xj4r8dCAv@YkwoYvf-W`0qv?wC zct-n34Ki`9uOK6K#~mY6-NNl7%iVC>eBhX;@!3@!@^!h1C`WI0p{Br}9LW!r3Z=l9 z7yH*Ld}tlfTl!WpZ-@l!ZGCmYhts0%y581T%Q0e;`y+n6r7y?ipPYe%2l#tMgjYW# z{DKI_w1(UR>90Q~ToN8VEPbe$k3B40^O*35tq(K6EUgb!T{K1L?xyx*PFi<)*m~JgTGY{4~R$iCz5+qygwn{Ge05TcZetHQ9g>^0Mxal_xP}QC((bghScr_MD)n_0mFeW z5&m_;|5@R$5l{(;xw!TVynmFQ?9#IIfWg3j1xR#CMR=kJSBvm%c(3~*d@~@v?OM7K zmmuj+5~O_$g7tuyLTifwDIe10r+of`-iW@>?15pbt=$cr&eLrN36Qm{LU1x9FX!G42Zu-x?co;+U=-&;(H??(OWHGi-7Y5Bz*%) zPdAuTdYUX!I?^qrbfn8jkVX`O^d1qs1c>t-TI$cl_uB%}EQRpFfY>|H(*6n2U5@nl z^P3`Ixquo0DG+~t7Z9IdtAHB>TrS`g0m}u{2nfK^{Q{7_Wzu*|{fTgC{H1edgtvkz za=#Jy6hLxR4homXyDcJI8eeI?P2uI}SL6oaN4PXT>jX|=Oosj(~V%xHk|vKGy^9@`!Kn2=_eKM{*-Mz40FL7kPv~?-72+1OM71{xJ{y zBM+R3W$GG*9rKDR(^GoWQzOZk(hK$T%-G>#5nTQaZr;+dJy-Ap9)eD9L|g~l#uXNs|ZXHAG>u1!=tcB)h{k(aN^Y}Tz zx|#L0^CS<5oJbgj9X!UHbZXE=ziwWAt+}3zve(XHG33_BT(K;3aQ=?#uTnUxohFVy zN>$Z$CeTIbK_4o&c{;cNS+2|KicDpHNRZ6iU6u9c%F(h5-1Jvx%xj!27o+vM4@m=! zLW3V1#@I*NO*dj(C8rVNfP~XDhJF~nnfs}7w7r53(WA7}@%_Mer#Cs;BkhE>N_1H6 zd>oT_5ngWKadNZ^9`s0ZKt=BW#H&kA#Nf!|TgQO2BO`D?BU^`cL&fQuxG)OqFKlVj zMV&To=9sfYSvOJE?8MNm1K8ZVX&#u}O0pY;InZeLHsbay>ji(T)uk`PF z!gTEhCjVnnC~sXC6k(A@-Apr4zD~on#Edsd|Bd+Ra^nXzB;8gis))X|V8eo2$Zl8J zoK9R}=cG0MF3KGz#2#Qsy}e`w;<9~E9qiDU`?eh3%_F1IjP?NNEjra6enfGPL=mgy z@PuQyr50tl)#inD@@=#$Hvh=LJ?`ITjV@J}c@Cs;kZJKfSytp~+xP00P&AIS0Opo> z7jT*c#PzdEiyGUayoQa|LZw-Y26U#12pZfmNc*`;OCQ8y;UN^RqJQ2XNGf}_6P$^& zyQqKZ)Osj*eJmHAP+6Em^)W}Cg&rg*`I8@wJH4$ZG3R8?^V}4zb7;MFLCoK!am%$I z=dsRN2m1Ka(!3JyA+y_nqH>=p9UoVS%7%ewWL==a2O!Q zA8opTiGUd2v;g$Z`#lHP2YE^3;0WL}Uy|G}@gPGLIUYF8_vGR9EXOH7IbP*~V~*|? z&c3~_`H8zdQm%5tVtAZbk=rAsPgi~2jC#xh@X_zx(5EZTP;>2b|J?ccqP#5Gz7uSn zx|!+xAAc`3XjF0;A|Cy9=K=W}pcn%MjA{r~18%h`&1yO{&|*bCr14`}LJAp`c=WQALY#?P z-7OJUhzZ=Wnthg;X6wXo(4*jw%gXTyV^Qc6`AbwPeIn@maXhMw%MllXz@9nyr`tt( z11vV%)xn4j>c&SQCL}5ZHr(lmfvnw@66=GbmqNW7}TAzUTmNBkdDm`)WM4Z`{%bAObfRASO{n@H@Q3NVS3ZL>drv zOLI~RCZf2#Lmt>N8G)Ve;h*R^Q64>KJA$Z*sc9oj&`QIH*V2bK?Q5-0KZyKs4Tbsx zS&t&imCnxNQ2IdcEBZ>^+>S@7!)2fC+yxXBth7A4hhAsTN*v7DJtVHc5T)gpTT^LC zYZYnGxG3!dAZx0axMvG(Rs_>&Zm3w z;1g`t*S|#lbsxdFrb|1Ii&khjTa0FB8M@ViIW^j=&FYnvstW&9C!NQ4Q{` zj!TVP)#pA?>1^lKEq}!v+c^nQ=vCz{0_LFR%6ri}Zj6}elJgDJxkS@JLBJ963UZhA zn?|6zUB5$-rO}>AUP0!V@@WqP z65W>pG4^ZCfW-d<0Sf`K_RuB@+zXJ(dl{8WblU)l-c~@Y-nG;LG3V7z1Elgk0Z4R* z03xY&pnzl-fp9+oe?WI3{96IP1_Z0x&4AQycJ3cJACUN+2}t>j10?zY)ZTt5yW6@f z44(LNxsiC1@CYZni1PTCAhFE z;j-Mo%rPLgbfboJz6SOB&)ol+pO-7w3!PT?|I_`SSr`n+Y4B2$lW>f=Om2#?i@BdF z$DV<~h8)qOv`=FYdX7AP=DJ*>gRze}I|e(s6YRRY9w*19`zXkjv;WX12R)2iiYXX~ z1T8m`k6V}T67&`bdURhk(UTm$1=FQxf=T#c{G-OF|13|8*NQpFALFJX6oWJEnfA6W zC&uVU@qe!KT$e{fkB-Z+$3u>dvms=D-cy#18zH$DR^K>wfMu1sxdqIzb@*aDKs63) z(ksLao2${R0xJ+qeR_o1&12z7HriRSB?&Q0DXl}QZI`Rn#{2kv!$kz@W*T&=9rY@# zu{MJGE1=r5Zc#Ur9JBj?&hC?hIcCc;U~KLO;X(k3zi%m&mS~>D>Bm*K7?UW3Gl}Dv zu}NMuP5n=hkVPb~HzhBLO*b&fj2F^9nn8v@{q31Bm0*EluzP zGmz0UX4Eb7;US|BMu_pj@O2J@25Da&Cgkue)I5+?c{izav8BJOnwi+t2XWSnX7 zko?N*m2*3VE52EY!r&%MrYU#tR%Krwb;~E{OSdZM>5q6a+QzR06D$)6qS<>MW%dmW zXbv9JXlq%(OUAjg8J71188-Ahw@g7aI$zaFx`+OGG?bO_YVGtRwWXH>1-UyOLyFWUax_J#f_mC;2Nt}AsGWbGck!1KND$Q+i zuWI&LWYDwKVFu~5OQU$EqTzXN7Z4vchqht`p^nmmI-`;k14}hLb2HvyTJ7=TQYe*o zBPP0dn>XM#2I zHtmN<95$yRkk#rJCYLy8K_cbHx$IfSc4J=4ON|>@p?^(lB~}pL#Kgc~SrpU&gb>n6 zJ$3UZ@XbEUE4AevtjKV~Nhj%UV<1~j{kNK~+;s24RkkIsdvsE_UX8p>FvMwwFOBi1*)1@vfX%W-%&DDcxq+HIb5M3D0E7i?> zHNKACDrxkEB!?=+f+4ZJl8>TxLnsp1{$hc-K%6Ipg8wPe5(}QhpcIOlWkOb4^;Vs| zT4k$#2O!v1{l3kx3*miXH`IE_&t~|e(LsVcjAy5?t@S#ik$sqQOGR!>A-7dkW!ph- zueA`}XCGA(I7Q|Bpl+tw=q`A4qmeDIfC5^wdO3El_^?2NUkrdGA*GQL+S>rZHp8EY zMVMB^g&o!lN}YXtU+b5*13t2T>Sr4d1C%g7Ng@m!xSRaC$#&Y+#g^kGV1qh(#g|pK zdSrG+1e&L@fN!g9-yqd;)QlAHl-)sfX*<+)8dnowoL-^=5mlFs2#|6z zXu9Z=5k)7K13~>m*bHF}{eWmDL`amg{!?7shQt zsq;e`!+GAFZy{aJ@bhPcutst|QDxglm4RDBUa{{RhbP-@sus&~_EH(`JE+uju?xLW zb_Z)~TlEG@NT)wzrK@u&%cdIb%|g*{Y%N4cdOzq=Uw#y{=zyghJ;(I|fH}$=vS86P z>gMm!eegD*!=Od+UaXo<>FOAZx*~kDPOP$#xPV`Ms6E?8Ru zPO}iDWeCZ(Nyv5^x9IGkMl=rv;$`7iG+T^P6FDdH;-H{>?BfR!oE1zaZqYEAwkvW5 zX!LA_Tw{W8aq1VMFkJY8OtYle@PXAQ_B}=amwG&EsAT~Xx?YlM+qKTStRU#+{G}7G zmMH*-agSJ}b3IF5@4UpSg1udx?RaMIRyE!&ytg)7z>N0_N0%i_IA`cvYWa2NYQ!XU z1YE<$UOuUBth`3q+P6`cV`C`B12oe`df!+a8U_U~>Xxr5GI*Ve*vvvM<+^Moe{XT# zg1@)^?7cNl!28;T1pIxSjVJNGhM>(jZFF{45R~5(@EyMNqM%ZP(xqoBK3<8WGSkr3 zg(ya(R906(F?E>?MrqVRjl;+<3Ie*)B!<<)GYE06p|ZIZSrinX7g16(&JiPJXXg@p zUa7zqf^y;#|1GV^gQ8O#cNXx>J2L?xRHS8T9hmQNSMgr-CRe-;e{zek9O^9`%OU0- zrhkxn6FI^WedZ*6Xb=5^315@;L)Y{QeOT zNwg_|RQ^i{Bz|@QQu%%_;46TXPm6%HfF!5X1EK-6g#u;>7$;!3fc^r~ej&yG1`vN* zlFwp&to^@$BzL4$0l`K<;$tEpmfG3^K$5?bel>-6fe7K}00}2~EvlZ`r=|FIflmRX zddmi+^2GoW-EUDTRK7C;ehx_GJ0Re{0aE#X1BfKr*#bT%;8+1i3Rogwwt#7XU{!kx z{Tz?lj{zyaw*aZX*a3 zDPIjBC(Yp%;BtMMmjy1p&qsKC{O7J30O?(hWF2z+f(O3T1E;w1_-GS1+*7VQ!XrG_ z0}lZ)Ilcew5&pghj=ta)zs&=m=z*tt;Iw}x&u@!I_#F@Ylm~9{z^{AYQ$6tB<+Q!u zhb+@Sl1|b?VEG7Dq#kLlht4vRJt&8@%ybEB<%-3v5TsC_PVT;t z-AZaC*x1(LsBEhlcS@L4BDA}M8N_+uJY~;)s4KpijzU%09J_FfW)%+f+Z>1RWLxt- z{_EIff<`;Bj^z?9$2)dWCF@pnN5E6PYBi8u)C%w!1E^lLf_$jF@S&qZ%bMr|PFONw z^}F!xAdI#XmrY>GZopO%X4<9VVUr0f-i3(=#iS3?GA$FA1Eb+?S^O?^CJJjOEDR6- zf(P~Qp@P%u(6@%$THXQsSKx=aKCa@u$^_7)@?^BF+saCMnT0Z8^5#}4GUPq4;~5E< z+++z7u+_niSK#Y-qTAN;5+3L(+?EY^kZ!rK?;{G%WIgU=;UQQ(Q4$fs?fkaUx{qoY zi}bT#Pnxz%5H=O8`>5^_{%2V@iXlaT6pD$__oJ3+{bAoh^jL9d9k~_W*~fRI(hz#t zzJoY+1==Z)R;Wx4(phD1ah09Y&SWGZng3e0?rQ!ee31*)8!U9Gn?C?)Ny0>_hCPs~ za|5EV`yK@!SX{6Q>6{6^VECZQzM06Wn^nY+#4YaOV6j~6(q6b=7s}JDXI9&8yMm7( zSS%G?VjFey4*0V6KFq3sRv9R5XESoi#IJg1b2W>hgjvy@i>uLG#;z{d^i{sl2iDn)EADjTGqd!x zGaP0@y^Je@Tov#jPr6e|Q?}4iHlY7gHoIcwuDs z0nX6k^HR@e=e6qw8@#Y)uDx|b>r zij7h~V>in{Fhh+*5(1tdi_ES>qRl$$RiEHsE=C;Iz@&P&kCS~c0ZDr(!5SoR)xtAw zwGh1@^+_*lPel~4{Vi7PZ7j^K*suidDz;nN4s4R`1BZ&@b?=}6>X%Ycv(DM9Q1%_< z)qBxeV6gfkz9Phcc%8*42vsmJ&WV!sk$9&@-i4iNG&97ER9&o+XcV@uBUBn}T(IYh zRBY(53?xGYD?X+VnM~#(NI7>gVm*4Up8J`QY0)*r&^7)uGX}w;gB93$mDoU~zx)xt z1u$IRat&1?^+%?|R?5GGH0^fzW1LWw^6%k(xjzOwMJat1)vLD1{pkx?O5aEIs#S7- z`c{^*FXbW^ZJN`SvhO7%*Sx0os>qLhHOIRA=<8X^zMW+*Kdj#srR)ou?((BAX({`T zMoE69vajj0t>HTRXgW5O#^iLNw?0x@(lFoBONZhjS6RXOtUUuHKLuYTUIrJSWN?>HpoLlPTY&Kj*tIuzz{qzi2K z((NNj488O*?4Z$ygu>)R_tW&^XLd#*G3)PiT_$OEO7A!{P^*EAQS~GvGbd1;zGR7F zjg8MQr_Kx;F=bh?C&dbBu7Ds6`hn*m=H~m<_%8DVY|9n9-1FEM1)oqZ>UC{jW2YMO z{6kJ3PGK?(TAXKDf`asj`ISpO&qbBZLxG-b_h2kc7eNW;(A;sU&Sqbh&N3Us8{ZV_nNW z`86WSdnC4SHlSD1cLBYUFm+2I%f5oXJcw(C*=$+Iw0+Ty(bqQlwc^PiQvuX3eF|A> zC%w0LKRU@|_Yw1S6btQ2GeLFmS}ZDZhu!d6cdO0tTCw3{swiIiIK1Bcv*Dz> zF=)FHEljmP zz`fja70VP>g$*|{tx>F1tW#`KY*B1eyrn^P;OFg zR&H0mtK6yFt87yqR(_^Dsyv}Que_{uDsL*gl=qbZUO`@QUWr~>uUxMpuVOEq*C?+s zUK6|~dewN87K6O3~KFfSo_}G0``>gZXH}U-wD2xed~Sa`>ya^<-6KwUNQzU{ls_dVbJ zzK4B}_#X8==6lljtnX#to4$8_{ry7x!u+EA;{6i+()}|1O8sHPziocI{r37D^!v>3gx?vz^L{t{y8Q0?-S-RdkMNK8Pw_AC zH~5e8AMHQJf4u($|62c9{!RW1{q6n^|8@TB{df59^*`W$*#9&Cqy8uS&-!2VcluxT z@ACImsa27x1XZFcMU|$?Rh6l9sxhjus)?$}sv1>;YOczvdQ-JtwOO@IwNJHQbwG7Q zbyjswby3x+x~BSGbw}kJ;2#hdkQk60kRFg3kRMPPU<#-X7#%P^U}8W`z>I*o0rLY| z0&D@R0^SVR6!2ESwt)74GXa+ZoB`JYz7OaMxE~M^7$2Arm>pOYSQ=;woDf(WSQj`g zurbgQxF~R0;EKSOKzrcoz_o#I1g;N!EAZ{W9fA7-+X9aUo(cRa@N(eQz#D-#1HFU7 zf+B-rgA#+%g0w+pK_i341WgE<98@3F7_=zJ7UT$89rQ-fn?XB+b_X2@Iudj==v>gn zpw6K0gYE|T2L}a*1t$k*24@HBf+q#n1lI=73T_IXA8ZY_1-}}+CU{-&d%-(`cL(nc zZV$c`{8g|s_(pJ7@ZDf#hp2XQWi2gWPC_N$ik2nAuS;aL8vNCqhn!oDKOZ9eHIi+xu0S<~muKJWI~*=Kj31AUJ5IoaoIpR0YY^|{l>Umc_l zQAeqh)oJQ%b)|Zwx>`M2JytzYJxM)HJwv@ry+*xJy-B@Ay-od|dWU+i`k4BJ`i#0$ zeNBB=eP8Vzst%10O$bd6O%E*!Ee$OT9TVCR+7!AlbWvza=!>DRhOQ1>7rH5QbLjTa zcSHAvwuK%Jy&QTY^k(S&P~Whiu*k5KFl|^-m?3Or*u=1!u)45@u*R?zVb(B5*qdP+ z!#0O)341&2K-j^sV_~PlE{9zU`#$V$SV(wWczk$bcv^URcy@R}xGsET_}K88@VVhl z;S0l;gs%!;8@@gKz3?63yTkW~w}pQeek}Za`2BGIh>(bwh?EFzL_tJlgdxHdF*;&G z#N>!+5e*TuA{IrghWFm_>m#;D?2R}OaWdje#Q6wk#MOwK5qBcGBVzj| z^v&#>+qbx{p>K8HiG64EZR|U@ucfb}?;CyB_ubg{-M%~f?(2J`@5#QG`d;qq8yOTC z78w;8ADJAP7MUJd5Lp_ji>!<^Mb<>tM^1~J5xFFCS)?^`RphIYYa`!`+!47qvMusp zl0dig_#M?U;9CcEq&D9E~{}b2a9EjCX(E z{$c&2`X}^H?62*g*+0L3S^w((WBNDrpV5C&|0Vrj>~HJ8y8o8`Z};EU|K0w(`ycLq zwExNer}|&&f3yGH{@wk3V-sVOV>4s3V+&%7V|B43V@Jo1kDVA>A3GzqDRx<`HTKom zb+KDw_s1TLJr;W^_Dt-x*sj=s0TBaY2BZu~AD|tOJD_xcVZf*XqX&@^Dh0Q&&P zfHwwg8nAi5jsZId93F6Sz|8@71_Z>##wElh#^uKq#g)bB;zq@djhh@-7uOIsH_j5b zC~isIi*dHNHF0mmt&iIrwtA9!Toxq+7kUK`jo@cuw$d`P@H zJ~qB6-V{G7eoXwdcuV}E_?GxrWW~1h9&AXc2ngg1HnoF9?nyZ>?n!B2A zO-MpSLVkiS!IUsMVPe9hgqnn=ge3_r32PG8CTvXDp7376j)b;^_JmUj=Muh3=uEhg z@O{GF1n)rsgVcj!2PF(j9+W;Pdr;A!QG-Sgsv9(IP}3mGpk;$v2E91w)j{h9tsk^$ z(9S{o2Av&ranM(Tt`6!N(Kjh5DJm%@DJ`iqNtaZaRGn0lG%aaH(!!)A zNz0O2lHN?(n6y1)=&`-yFPt@V3G44L&gV@ZckZPYyme_}bv_ z2S=sEq~xa*q*SMjO&On3lQJV^R!URK{FG%WYf|1!S(maUWqZndDZ5kJQVymZOSzPC zEyX+4KQ$yZA~iNOJ~bgVJGC^mEY*}cCUsKkeEmOk0)qX4=NIEopD3?N2+9 zb~5c$+NHG4w5w@1)09IZhQtj?9+Ej^^pNpGYKGJgnK5M6kftHlA+{m*A!~=M8?t-I z-XRBvd^Y6VkV`|HLv9SYJ0v1KB|SSmH@!5yEPYh^==AaF4e7Je8`Br1JJQ#tzmdKv zeRKL->HE?@OTV1%Ouw0aC;fhUK!!RaDkCu?Gb2BvC_|SqA!A}jL&p4!6&WvPtj<`U zu`T1hjGY-rGLB}P&A6CxDWfyvT1Iz66(A7iN z4qZ2N)6mUB-yOPhXxq>OLq8jOV(8_e&Y`}U0hvLWVVNnJX_>lAL*}T=>dY~j6EYh! zEtyL)S7cfW*R!i2aS!=R3WxbWPJ8OSdd)ASxV_B!N&S!m#GJ`FbvZL~8gnc;^K%yEIC9>|S)a2dXIsvDIXiO>=N!p7nsY3tGv{i~ z&73A9J?`MJ8>k-3v{YjUUM&d6=bU6{Kp*P6RAcT?`R+}*itxkqwO>j;_$DAJBQyKet)=kaaeI|aYAuov9`FV*ibyScw%u)@!aA? z#Vd+!#cvj`FWy|drFdKM&f?w02a1mrA1gjpe6jda@%P2u#mbV9lCYAflK7IelKhg& zlF=n&OD2`nm&_=cThdZuD_L8zrDR9R{*v~RVIq4JnN&jV+BYO(@lt z=9U(emX%hPHkLM(T1pp|E-Gy)eYJFL>AKRlOShNqDBWAyR(iPfXz9&T-w^>L)FZ-1 z#EnQCkv1Z8MD7UPhzTR=M%0g(KVrp*7e{Oyv3tb65&K6R7;$jK;Sr}soE>p-#N`p! zMs$w|DhnwqC@U^2Ez^}vEUPK2FPm1juxv@0z3kPpZDsq*J}Wy>cCM_m%vpA$?0#8n zc|v(|d3t$vd0Ba7xuJY=d2RW$@>%6CmcLrQsr;?-cguH{?<+rBe!kpU-c^35JU|zu z3)4mF5_Gw`d|k1wOgB+iubZKpuUn*Bt$SOyQ@2mIUw1@zS$9o$Q+G$_Tj5_3QxRX0 zSdmtdSy5Rrwqkt6q>9>#rivvM){2%2Tg9stYb(}O?5H?cairoz#kq=06*nsUE7g_p zmC2PUmARD#l|_}KD<@PoRN5;Ym8&Z^SH4xby>dt8J{Ye(T6wYZa;3BKYUPc}JCyBcLe_OvzzfZqke^`G?e^!4-e^>8o z2s1<&(hb=Loxx-nYZz~+HOx0GF)TBzGHfzzGi*2PHMAQfQGj@W@WtIdEznyK*7l}{ z_B07>;nWWapThQ%m~Ih8dw@Q4ftd5uV@rZBv!ip7#Glwg5b<2+X9b=CsK-zBC67mZ zGWQVuHHvS>@AMTOpZI1@itnKxM|}JNzg^$*_@rOMoD^T6vr$eT=mVJmNk6It5TvzQ zKwrSGAe@FQTDupJ^p4gFydDsBpe+L=eYYWiq^I?JY_wDSMnH=Hguwd(Qv7d`3B^AH zNbxrSA}Q0KLlo^S;Ls(~{tA%vv@!spVxWxx#7=_tCIskcI_+fv|0>`fKnnj?fm;Fb zr)|JL6<{a+^#eQ(2p87~NP1qA1RN<~u7L3Z1_{`OOey|(0ow)KF5p@L7XwoH=K?|n zL|Xv}l?ZJ=Kn+Ctbncnz*B_AT_j@1&|0du;K;rLhKx!AVQ%aERvJu<_7z;@Ha+K~G zJgHpA0MTUHRzRv>I>$`@Wq>h&q!&l=Lq+&^5KvS6F9f9RS&C2hW)b`sK;mNwAkm}! zSJE>ZFK{vjfqt%~Yb8m4?mI|^DW7)$iSEAw5}%|WNAaEqq<98EikB+FNre_wp`~-p z1pkgVjo_Dn)P78G3qJmhzkzXdB8|c)itu7UG?BI$%xX}-Qvl)RS1zDNKmg`{46qOK zS`H@3UByqX_eOeUgiGT`qQIw!_~?c_988e2BQE}2PVa&5LWn&4S04Cm4?M>sy~!hd ziwC~JBmS>F@G~Cqi5L1wZYmz+`0E}xZP&`f7kh+X^uWh>#Q)eMoVHix^wxUd4v+Zn zc!Y2Dz-M^iWS16yE_cs^-U5$srfBA};{_c#rU_Ov6*fBA4ei3vs4GC=)9PpAvT-uR zNs42VInwIUPmQagVOYWZ{Tx_Wey8AqOB^ivoZl_~FeXzaPD<2*BCTW(FPM}?1Z z#I2I{c655A;i<}sn!4JV(BiA9X)@Q=&8VrHJ_99g;Cg*8)Xucj*EG)N=0au1pJn&m zyI654{ShxNgbMYz>vZIKPqWm{<0^kdrhYbme(aHJxf&qsh-T+#dR%s1UT#)SPF6u- z@A`kad4+jAHq-xuIaaRy*PGrSyCYJ=yA;MQ#c6p5c23NjMD`^urj; z+)vf}%M7@{BXN4&Z*2>howrblRJ zEpUb6W9!W9HTeLp_8}~rYZADy$(`iu=C0F8F7PMX0|uxWPWtfNsTls0gg?#0r%Ct} zjxUk$IUILL_;QYKknmSH{_hfA&hvj?!Z+}6QiEeIl;{7cgulbXPf7R&9{z=dYdB8x z8s^^N^zTY|D^Kqwy-3S>c!-2&@$?!AFXuR&J7DfB9xyAn*i% zW4^`0M+p3X30ztaHVM2&gwGfFEP*!)e38Is2%PR?B{x&xuL~S&HkRKefzJ^*tsBVA z75Ik&pC$0)0_U-M{#QKp3*A$C1r*?2X18TF(cQe|mcr!$J+{*2zBFZ#$KsCO~+SrXJ!^Bqm?XC}1}R{xsj=pk{Vs&2#vg*G-o^=GE8Dp=UDog5zZX zwX>hkAs@ptPosP_rl-ake({v9io8ZXku!^oqRXFIN?BM9&KbCcH#N?Dp}uA=&K5kx zyQX&DJoliv58$jE;s^yY6LYm3K3VJW=oROB_-4!wDHr)Pk57$co>FZ{k(wH2&6(*+ zCY`Ym2?Xk1r<9WOi6S@D&5*LB(-)xLFlSyPW_*$_v+P6U<}~CyH=BG#`>`1pP=aE% zM;O1A8c*y%M(w<5IhvVf4PdU~x!UJ7vJ9SUn1+d{#@yJbnb|mdn&PO` zW}WrVYvwnYr)%n8sGqF?-}lrdE)*r2R`0@ifhbw6 zrU`vyUcG{lhS?3~2BiKC=*(^eimL{iC`g0eWHC21&Q{FPG&HgN*eqK?1)Wtpd!eSm zOv?epXzKAZ*Uy^MIInizLd^@c^BQWOn^}*+MRHpi02oyx#q2l1KDU z3wTICk`s{sRsm@pPWVaz7YI0Az-I(B3Roy$s({e~sssd}{y^s5nEa!hJm6@~OY)HG z_>s%OPc9D`37pbMPJ;(I&K9CrDb!50%&s$wds%_vA< z&67y*doYAQ^7^^!x}2h1u?%GEIt+CWU)ParK|uwAqjep%;lo^(m~V85I1*0p5&h6s z%>C4LU8KbRwsjV~DSZ2@1ov}4FReF&X0}`Dn!t*xxBwntA zp5RHeERXQGb<;}0*H%IA85B+`8+rZIb(0FhyS|8T#JY=QKJs;wAkF9!ZO8?GwsY4P zU-1pSchb#)_l-T8=+Gjss;k3g>wi9&9aSsDGrRBuQVqD0pdKXf{e_npq?o8FbcrDhsTK z7URf00;#=>jm*IqfEYRq1bbx&4 zs|bejCd5CTxFO5QSS&2oEdF;bd3tKlZuJEK?f8jQ+Z#-@+I>aoQs0|?TsmeDN#?Rvd`#^x(;sE*;(*sf?;lNtVH>E7leRROYF^Ue@CmmW z-goH3yN$0K+kM(uU6GU@s<%IQsb3<&B$Qtd864&$9HE%pVRYbbT03loI~D*!m-R&UldYr1kbC@9S-MSg~RM1-5W;YKvLi<_hs# zp&E8_5DCV`QhTb3Nff3secPV%ht_Xk=lxGM+;I6lZf3RKRgqmH9FY3f-M~6aYrX69 z$WZmNfjli~b6@O*01Wc#+OEaxl;?HFx=nSb&?>DahxsI4F-r%kf)xtJ*MgZQGxXxe zcQ`Bcwk3aBkm>M=HNI|g_&`@5I{I}uCu!Jfa+CmtIblcML25mg9QE@jXDQcf2F5k!mHxqwKbH3^)`kHLrC zt4I0oLE$L>HvlPqJs?=tjuo&35T9nz8)DQks;8MGP z#na(GcQmgAJ(ojXZa9U>!&^P@W)GZ(ReAj59{5upIL%Mx@u@6w{8^9iau1v$%j4hh z2v73BAun=^@4jEuBk-WT2uUacISE#@Yp+kVW?nYVAnOG-|fw@WyE*y)FN zlDVHcZ{LBJo1AOj&QW?9mrIWXAGhDZj>;omx#)~5@p2O{3oxM4I|YZ~pvOIK-hP`F za&W9}01u(uQrXBKW7c$nlB0gkl6crnI3)6)4&{y45eMm9`yEnR;!p4>dHrN4&D+P~ z@@SpySoUE<%VG7)T}YpO824!TsDJwwo(+zP_Y7=W;H7K3?DdpmT(_p$G2aL0-E24U z+3T6tRoPmNU5Q3zo6&k)VN|LaupMLGbt;$tXq8()Xios4XQnv{V&&REaf26s&bPzvwBiRDZg0q6Q7w$5|C>(UI`X>u@)# z!?~!#?{sb7pbr0rI(+sr>Tq$A4`QJf)$z*_3CjVL$#9zGU4Po7{K!=uSbkLExE9t= z#8-WXR6H9}qdM)Cp$I(00}sg)P6$OH))sV)4yA0B>eMzm+Os}Qw&Us-$&8>O?Q8Qa z)aj2@r7mS)Lb6eSK(h{>%y z%GRDJp$M+BbCw}Vp`@m+1n^*hTJT}qv7~G> zg`F^3PbiEw6c2&5xJ~c4NqN8+cEUujG`a^;^mtU+YR~{rgu)ZUi1L6b?6}c-OvJ0j z``P0|)bJj^=*fEwd%b_;Z%?IRbRc=1fj0-7I71{(`XjoyW6pUSz z!u|vz5*sofBF4r8DiVu>BGs}nO7bDDG_pjt(HhPwZje0AiXf{Eiitu=K13eGWIn_K zFSry3jEcIEd{V)>ERn4S9ruYWR;#G&o?1mbstK77(L!y>d?>$YHy`3jx`#h;#Smq5`63q$WjM7)7z8JsX1(yH_-2;NBR-gnNTg zu?u?|1NHi}V7Ab05U?|LMRka`lX4VQCVYrpQLTLF82yZ3mtGf?qi67-#8g8)KEy6q zk$h0rDM(E5P`m7nkOmaW2CPW6Vzkvv7umRq(m`Eh4!)!dCOu#W%5A)(;SN=aR+UBy z`FJOL5&3v0^N^2sJxv5gsGF$dK5V?}@j%I>@y@dmDJj}p_HKl7Vlp2z8HQcSLkxJ- zjx<2adMEFh?r#Fom%j;YIAc9Hx|bg8-t%Z2qHNGZdFHH+@hu%)h&mSY9jt809?AZFSRh%hf5I{k&b%0wBud!Y`%@W+l61eJ9si%qmN0T5Xcw7VZO zmCdfZACZ*}FxwB!2)V+)g-t_K08UH}ZBDzSzhoJ5(@Pd0H=RLC@@*7wRw0^9nkeZn zm2|49=OAl}*LwXxI}>q%GMkfVf?kSA-k4o-iAqmYAwMRn#a^;>Bf_w>OZp21CI3ZT z0UJ*_Rf>p{v-Zh$nPXXI5z^J~Oqe5sw8*@yI9b7jg(&?JF}+RCU%T;x9lDcBDrE43 z?p2Ib)BGT_1n9Eh2RRFn<_F#?NaHX1dk@Vw%@4fvMsbTkk(}KYII_>vzo+H|!syqq_>t294u^vKNJ=PQP=mWJmFa{1RPfkz%!d08SsI;=W_ zzdqkZGUaaRt8#UdlT!{e82_#6oDS(LjFw|Z;^Gc#%Dcn#I3UE`U8J)xI^4K;-}_Rx zT}yq|7y^_Xl;KHtVRZO0@%;NiGv@y={ySATjc2xA3B$dB{{t$Vst2r&&nWzPpE0Ma z?QxOb#|RhrOy+yMaD36QScPM~2&2<8;-W^G?{qz)W2Gi@5;Z!~4#P2?Y z3#fO_Ref~}SBx&qX)7Gz4;px|l+YZaWXV5Ne^3Id3D-v^|uTDN0-3cGIi70M1E z%+K-5@VZ@6ct^W#$2b!u?3GLi26~DzJ=G3xRd(HODYj&M-4Cx*cHM7;Bo}H}TGZT4 zg#C?$*4^dDOsZ#ba>{oEP^A9HN!{x^d}KwoJefx;QUc{%^5jBAL*{o5{weqD$y6#n zQKsT(yOt;Gq)t?xtm891?BDnng3l0U%ahp;a>;8SQsG+xCnAhjUQ3qCf8xZ>lp#=t z{X~q>kz~}G??SK`STxkE_$(*{UvOuU@vs+68-H+>S=i^haWak_Og3&ZZjLxxqKWGv zh5&aL~kr6QoaMJDaV&PtDJ!^M-z*2bw10mz<5n=yc5P{+ZqOS0M&Wm^V1X74c{jYVyKU(oh z@Ml+nL4x8YZ~aP)D2Y1T+D}c-hpGnUAA~Hg11cJa11z)EwXNnOGrrr$I72s^9nHM< zcxV#w%>J*e0&x$IcSd~9I3jp_zrW_ADmV6Wz-(+_%d_2UYptGnB&JNvke@PWm*O#3)rR0Pw&c7obi(fY5-U=swITd;@RW7Q5pK5mTfgQ`6DO%0v>` z{0wM-p&be?IAd0DMSjU4Tnz?(e`s`Y!K5n+3G6G1XN?Z72#=s`#iT0>rLCAY`%3Js zEiPvETdm|feN?o}@F&a_J^L%B)8b{3FB-{r@~q^$r&t|(u%mZh14q%)L)N|Tbzz1V zt=PNh47>D=s>F=@8rm=5J<;P60}~DK5>C<5omS%p4%X4&=)DMN#^1-YKQGF}>`L1S zmlQ*Ftz?+(Y@KBV=kGL=pPb^J!X2*mv&6k9e%BjHe87ES!9((Kw=vxV(qmKmJCjk(AtyF^n-giFe*5|ivoE7^96>BdTi zwV#)rFYPJ4KGYRv9xEyf`BTiFGU!27;-e4#N7H#Uokzp@hDxhzOU>5QxU{?(0~4N0 zo8N+gsTJ+<0NQ1znfT73jZw@QXD^sH6UzJ1nz^w%7tX!2TIlx|&swmkSSl)9Ts-E6 zTPIGMFwThH$kPj>ZeNIV7L^MY&YXYOU2`v4uxR!*zE!h8yL{;7kcOB@o%bD5ANHa6 z!RQ!L>#Y#y=RCVST}{$Ba?)PQSr&|*?@OCJv&k^pd=DR9JCD^s^JC-^c{l|&%&SKz z8&y&`&6bCbQz7r1k5dfusWviUVr2Y{H`>$gy#2D_)weI4Hu0qA;ZW;Hov&4T9n9@= zJrVy)=iyUuNdb+Xhim&cormlAOpj~X`*7I<^sG*J9{xGPLvPIY1Qev60QAnoIiKf0 zabuWoV$^)Qrk|W^ufpsatRYO+n&uDD#I1d-j(wPHzo91ERZdt=wlR-Pegr+z_xf2K zJIur>Yk`Cne>ZPJV#XWO!L62;H1l_EbATY$Odhv-vbBe**DTms1Hi<%&PQwn6PIWPosU6xV) z?#qVEg;LISM>jfjPo?+8#}}9!WGy~U5%~RgtUHdw-`O_2qsXe+83XO?h$BW?BQ?_6 z4VlAiP!6+pL;HmSe~hzHHO|@%ImcNHvSMg$W%n0D+ldTBdR~M{#VKKTVqkpYu~XT% zI6k87{5tItx6PFW@@oVl-v8vS~bBPct-XD zkJaDX*umPKO(}LR%m(mUdr&Zd^gJ?M|15Si z@20|D+X1S!#oPKsI{*^hmW|%_z{Z2tr?V3a;b`8syEQm(vtS$YW+cj#tF+yk2Wtnp z$@XzhM*HZom|5*4vy^z!!@aY|f_j^bDySSaP=KsvlXnSMj>ONtdPYf6@Mq6Jk>4); zBs!qW?vHm=I{eoq2A^RjExX36&YyQpp3LD23rn5ilN$@N3l4i~ z9b_f`s+f!w)Uw^!B`sBnr8f4f!Cm z7CcYO-tJ7f6rpx7bf?wvp?CxXL0>ZyQJ)B@q6(R$|6Qr+G%48Gjsa~jnEHpDCo%C? zt@x`lhDh6;at4H;(6FGqterrF#fckeo(>L*Ci+@B2jqW7A(;Y2pE8?N+Q2%9w7O?d z)MExyf=CRV04IvDG(BE9%=i&su)Yi(Mdg>6Cp()I2HVc1$eFs9-S|f@M8}j2w1((Q z6Pi{OFoXJelKLc%sEKI#`>C4nlUAaR@@8Dx*^OX=u08ST6o!2oDkNSdbTDL4vhOV%6f37qhVuci*^i-sYP6tm|v zAx)fY3)Vl!vr_J2-D=0`MthrXvx0Ie1gtbjy2e8~ayvXYU}@*TE2EifTb zauX(I*N#tIe5;jgzc$+cHQT+pFp9@VI$Erbw-Khu8t?++b=uB%tpTrr*WF}03j)z| zx@5$B6%i7On~S{>hnWNLUV8o|&?zgl2H+6lJm4^{2ocT1iput)Y#yQOKQ~SXyh(Sa zahlzdMyfRzQfGT32GTek08Y#bICZAt^-2XCp8O_M2wzgD$lxIXY729r)6s>A$L#L) zkfY3FQ4PHmS=Jm1N}@Z{4zPga=dYRN4OIy{>Z8dA&ILonOBf~>|IH(T?_2HmC9MlIIty!@v__MRc9PUU}0)xeX!<@MFKfqMB znehXDe!OBP=5F$FI+uNpV3zG(XuCfS*n?(b$MCK~dk`3#dk=)kKPt8d)gZs`+Jlxs zh&!*6j1pM`74Y7~iefx>Sfixahj?}YCN(Wejei;Y)#VM{0v>n$pL+&bkP-o4U$^)5 zfA;(_>bzu9+)cT6yN~-0_`eAv^aWTwV@n|)BJ~Bc%ET5zpwLV_Rf*mLNp?WG6ytNE z+=2)ojTN`hVLAv@S!u=FD{FoSdaL;<$|j`wS#owMURV4Hk(qe59Nmhy71z9XB7%x6 z!rO_n?Zh;{b1?a7e*B$a!sv`2IV~C-w=+1d32)2gFWT7}Zy9n3YPoWL5qzONB zo479#YvRVl(xxKMd>NHg<`x<30WI&jk@lXG?C?Cz=;T*Pfu;=(8#)zup@ zsqGcH6O*zs#O#@|X}m1!a*@Zv1$WO}BtKQfUe0{dJ2=y1J%sq)K5 z;>J{(>8I-RxU+`O)7v(_zjWVbp{i@WZ=>zsbl*nDXL?L}H8xsA7Fp+U*_I0Nk3-7* z6}nJ7%ie(SY>o#2%K*LmHf$>TpWAZ$K3QYl`|(P|u^N-?=GXzJ==I`c8u|u=G>Acw$mt({3IV-HUD#jV*%i6x&=q+iSaM_PCmlGzuW|{23?bU{WrW=UG#tIr`Z24{@ZEW3ENfS zKl_3=w*+s7>w=F_+eZWVc@sbTU&a3>s9l_m|8a$!8idgWu$Rd5!L}1CnaFl^3tQ!M z6JK+%;z4`E#zL_P-(g&Gm2m|&l0v#ltC9OLSgE6jY;9#%;Py))LvhKDpzhp~O637v zIJgJsj#U?$zj+x$T$TzUG!@Z}D29aUN{ngDMaJdL?0Dt7@$@W~GGF4#nj%5E&*)09^c^>L*znutmHuVQ2GsZ1D96^&KP$LW!JS}W_&e_+ z&_Rs3BnS+LI*xhGWN=48LWf}ZlHop~Oi;e09Kla^yt%yM@+8b=; z(DqsNb5Ox53k76=-tLp&Wi~WRB=8lZoU$oN2cSPkc?rO=CfE4N`z-M1TZcK>64aA- zd?iBqpR^S50Z+!H?n8jy@r@X4M?xfoZL`n7EsZ=DC51bA|d0MD)?$haNOOg!66 z$M}b3>nf46SqjnV!>7>APCRzXs!zJQoW1wHdjRyjcS9vg@LVl^%+h0rHy74?+rkB0 ziH9#2DV)x_#QWs!XPDyCPW(wF^MnY1OP@^V6~S)B~Ua)(6*#yUEPbPx?! zTD&8i*Rz5=(Ne*XjyD+V?*xJcPAnK(f+w}q?PZ>Vug8Tc-Y^1DNd`$UaWxulJoCn3 z3-+YjQ(@Q6pWqJ6D%i| zY=WLJ>q)2Huq31P#OWz}vYQhK#-mc6U^%g*s+=dxdbYXVu;dER6Q?IEd6|$WSkCOZ z81;l%Px|+kJ-MPMPEXlW=gku=XZFxT^M+Z^M%r8U96LPe_LM#E5cUMinf;*5FzZ>b zy=Bj7nkU_!vgh@vo?xl$qYm~oUqv@3Gj?8zItL`@!m~>ZkBb?FowpY{Pd1R(yY(Cu zf=^9c0i8IoW#Ml;dl>A&SSPy`CY;B_`|}5dCtfH|b`D9lo`)OxlAU?D#L-QNH2yfy zA70s3`%b@|AI0AtA}$ydd8jOz44z&$ojn>YBfjaYpZwZbCmAOFEe9(v@M)P-3c14g zyTP8)!~KFfz0|-Uvr4qP zNd&&)#i^St90GA3^uYqsw&1Ei(|NX)AZv)NFJzE-OWD(vs1&mlN<6#m#1p5}*>;{h zfGBq2(bEgX68YiNClWf3bix_8GPqZorJtG31Hu_PB@4!3wXm2f#7V3a>Q27}p@nl% z%4v>v8kTb6BEoWUh8yxi$3CTrgJFjr3?-dK0o(^!HZf?l3JR!!61QJ|And8;DQ|G( zRgWl>PYsl*B#oyz*odZ&1vhVm)HP;2o#O7@eAxJM$4T+pZgI$AbH@qv=tF*&J5GvS zb<2lLDtDX|kLebNoF#Xh6l3TXN3Po5PLWsB4LyS`EgXDm`n9-`Hu+J$NLf!`6jAlO zMAnKCe;@nSU<;V6a3+9ze4|clL``mt=dT5Rw)?MaX>y-VWimGSRBR-!{Ctv)L3h>< zfs)_}GVO?S&`7pH4nTKY@GDxegO-ZEE}Kpd5yP(NKL+IDDso0F93lw*GR7|8s?PKz z@$=-2&di?kTm#B18lR`X>CViKn%$XE*xpTL??L`wh!h1lY5sraFQ>qCaIswX&(fV{ zE4XPce@7>r9_i+Dg;SqE^80II8K98Oiz7*UL%sSK`5UlwJeE`wp zLI=S=!N5Y>0I`Y*tp&u4F!XC>zgyWWlzou0=L3RSigzusvI%VkhbH`kg1=U9g@Q8` zyiUP#1|4+)D6A!xIt?aV_8E>MpS1NzL2gP`Um3x75C);Fxt$>Wj zcQt8G0y5pl0U7TR<<57q=>8LBzY~!0Zcz5o%Ks8T#yelRpP}5pL_1^p9|1DnPGzSY zkM_ru{b4}nLwO$4;X53RH%GZoQuZ()v^X0E+Es{0Z8`^%KdlB z{u@B1^Eb+Vx3W)H_KC_~q3orAO!q86rhAHV{{oGH?(YCHpY4E5m$NF`|Ch4=y|TxZ zeXg=kQTB+kU#=kUduO`5LxPYulHl*Wqv*7>x69sp-uuel42Z4~N-FrD3SI$-ruKtk zK*YzVgbQHdyBL)~lI9Nli+4kTJWUJ!DL2)IlNQ>iqwq8a{ypBlOS9~=v+Oq`us8gG zEIaS1@cMUV#lI%Y|K%)y-XHCaKQzmJLzex~EIVbK-uQo;Wv8Fl--l;|AkDqJe7L-_ z_=X#e9|{|vDuRsHPl9MXt@0Xy0lPf z!}WK#|CEY$*aO84cT(e3I6%b@7dJ|UTj2n;K3s(8(bLJC?(asO&&MZ5{53L!w;~&MBel1c z{20h2aoMp%W{+wJ~n)LAuFzw zdBJvCRiEHt#O?1z2fQC0fU_ruyH(C~Rt|P+dEp!y*Ct8D*GZ~{B-Ikz%`dTC>^eJ$gzKRp`I6>fP4n(=m zDY7?01=geItV+NEqL58A>epOH7LNsy3|n|^PY)uhJSpa#q4F$?m15vgf3`ljWJpne zwm!JzL{Yy-A6yj@TufcMq!q%oA~>`@sT+PSR^LkNxF>~UCiVZ5W|=jVXWnO|+UJBs z{z|q=(am0@k_=Qs7^N-F!mn&ZD%9Sc04TSc+lmS$2&ad zw8S|NT!Y;0oJaS5ExL51NcMM6mlljjp9|S*x=+a5ICa8c%HbS6IwI#g;`B#$uhz## zvU_zzj`-eQjRy~UJmtZ2bZQhz)n6|pwRyb3jf(PjY`2Cs+3w^*Yv>kST4B3Wi>#rz zt7a#jVJo(VzGQX0if6cnSwmm8I&i?Mrpy|;)#`X1?`w^;hQ4BT?6QV#>*XX#FW7V& zLT9ZKjF~KqLr6dJVL60!8$G%W9Nor@-p7k>14Y&tF%O6ER;Xb@>G9)LIC(Uv`xqfH z>Y*87DxWS~ z|BY3XSR6prfWbNAD$T_6($U)K-#YW1WOC?l|V4M&_8gz1}wwEly~D!3}*q-{Tx7s z8;2jSzB~M+UCEp-RQ48S|26ECF|Af>YOZmGU8a|MyLGz6*B4j*)45QFxfTCHW+m}Y z>ANpf=~2By_%krgG>_1v=8o7RJVWZ0qll-dQeqWIH9Ve_ainB4sW9@D=B!{j)KN-j)Rl(B^ZCr^+Y(uI^`bKBjZ_2WlX4w~H*>#)L z>5*=kZB#Ta*50(4bMKseC!X0>?JG-QC&K+77tEckJnph9%gVGqEYxiIG`y!(=5Ci{ zF1}*?!%!Y~JblD?gUnQ+5AOrNK4{M5@0nAw0 z0Ac2!Loz*Wkn9}&O<02eT=K_-2uMAuLh#&)Nb7k0keXyCYpAbt<3yYZX=O~jQClQF z8plvL>}wn|QaHz72#6;!Dt#(^;_@LN*z=X}U4I>ZWNc?6j*Qmti(Ld23gv>^OB=J3 zBuT{W1R_^TGo`pQQ?XwTO;M~N9#X{S<(8#F+|uOt>}oIB{aLJ?IAL5$MOEJ+o8_^Jmopd z`i59hIdnK`nxNgqM}TpxTLd*6+~pwY5O!Kn;v$cpMmByUqdY02@cSGz(CTU$@=Yw`?uzK_O^7%k~kh7uu6&gKU7Pv*TQIQ!7O5}9 zCy;fRI_~s62Xry@UDlvnYo2O*5-ySQPud=r5Moa4Ez*!g74`e~2%%|bJj;~YYGtJM zyO2WreE!_YpBWO%_9+TZQqV4MFyatc`C@r^(#{aaY}`n*TUmG+Ubu6k4USPLQ*Iw> zCQg3>sXtHV`P|R&vwkLijCC*JS75JEfyyQN#z;@!;QT(Le@wKTt$3-A??hV;&Xmcg zqBX>IH_wo?(fY0!yM?DE4aRjIRNMNJ{Zeadp&^~KFWmo-j!)?|_!8a-oGM=l)Z=kA zP}SyQeB^pBLaHRNBU!UuT~t^ z4-j*O&=5fC>u|D#xsuQuf!c0pGw{Y-IrIo1?LPy=7H8;oKjKAk!bI{Hf=`aGjt9;U^0I8IbX)*TM9E3kXz0KLk1?`j2W6`ZbMrGmu@0*LUffLw3r{>r(ncm2WiX)gn$sm4F;&BEsM zk^R!H`{M>>FNPb<9{kf^_s8$yTX_lp7=FF>3$yI!Wrb&0Z+PnCd+q(Q!jH-FU!P^K z&9dK;Ww*2JTqAq)OJw;!nq{Y6k2n06S^j(v$Ls%KmVf4Z+&4tVOcc*>&!2g>@WG2F z0%ktcoeFm6{5v7hz_Z$^kGteSeBrq0t~qzklK!a}@J}U(L;K=ezo#uM;(_kS4L3|% zSQDEzbJ3y&c&{57)Zhtl@xeD%xT+HtAv1w5RY)k{fXAJ!CS~*$XkRt(e>&GFcliTUL6LeW6|Lx*Q+`myqf27GsvbXi>bTD-q%6n*PK}V*i4YHe~zX?n54^ni~ zmsyAWFM#uIFz=6%7SWu@a4<}o|KQ^SN6H>f)@01*OsvPCPmo&gd|_7K3OVyveS-J> z1_>J#Qv<uV&Wo3*JvYC9a|g@9y-jAInS0MuE=0*blITz#1W1@kQ)(aTGxwuWZLQuDmr8 zXq_rwruPpv;JibpPA}|qW~~>UJ?(v*J-DICc%D_!{-#)dr}xXU=_^!!oG-AD zj8=~w7A2uL^p8u7@gXOV26=gYltb4B3&PrJF3HS!yN(3#ak9;WB40$Peu&;tddy6W_nYha>=_%1g-6zhzHSc1{69ssK zVPK){OkNjFOxlFkho)>rXPDZIyGnMN{?Bkt)6Qsu?|m0+vnqB3e--(o?Yw7K>@$MD zdLdfzB5EUAu^X0+cEw8o8?1_E{D$jh{;_6hxOh*^-A3__nnkw%fLXl_8+_}K+W@rv zW-~EqSD}?yx)ne6wnDROvl;*3Xz=ESH2rXu=Ye41fZ%`$2Z9664h|R%(8r8#z&2GQ z{*(CMe6(hdJ9TY)QRA2ZNhTygZRexZaAkH_^sO-~lEJ#ag>Tr|UYac3csS{g4Yu5Z zM$mQ>F7qqEx^;3hsQx08FuNKczM2Wn;Rj}o0Sjb7OMcy?&Ia+0bp(vWPyON2#;pEl zy0>m+y?w_E{r!Gt9b>2h6b}5igsw`;0Md0 z4~2Vh?PRCyAMpxb4FV@S6BE0zVs)BVd<+h-!MQ15R^u(o`Yock%ZHop*&yeOWL_{S zd7K%)O2psLnfU9j_z_&tCE~y0+#SeTZF}TzT3*KWHZHZmV*4;St6nE-D45;*l=EF6 zdT&a^5c?L`tdxOBz6J@HjuaLWFz+fm6JPQ#$TJg{bHVid9Mr}7$*4)uX^^3mPhQg~ zhBkqX%?>@S_`sI=RC@rzc6Mr~Y#A^IewU=Vr#4OHf>tT0_g(ETou+ zgLU_y*g&Kh1J-H`Ns>4m2=0J~ov02dVX>K5wnlm;A`KM9HAbG`9HcR_jwRDIm@uzR z9vPBsJ2w#yTpMp`aPow3MZ|orQUsKPAx5})7WVf|yawSQ#l}bz)8SzKU_U5GQCC2g=T_c|Q5@+^gPw>jS1S+CCr2DU^e=QHUD-Oke$TnqR z%UgujV_Ix1YZ%VDA1ImmrEnezXVoRND80yV`#O1YI36<*@D>yl|GTvSJ;gt=+g}kU zYv2h@hSOo;taIX`+t7-5I>+~P0a}Zm-dOJW&y(jp%|jHJU}$%Ai(vgZqD5X_!kBXq zDBZ;&-7eoJ#L-{C-Dr&97lT(~SpcoKK@{0aOhr?c^7N?lu?3l-o-SF95z#jRMVCi> z(dSWblm~mns4*Mos5$3*o|EmTFO*2i^yAm~Vm|^amf7j7bRNcGq#46tAe#cp**>Dj zz~%d7aEK#i@bZ1_L!!vB9Fg=|QtUW}Q(A7oy33D8|A7veDKbPT2&)&jQHrSxvqa}TX(dlQ& z30e2#WcvIe=`D;7?~$v%3XfZq9F%kyCP%oV@TgVcNPl6n!d(nU_PaGI9P1$?T$a3) zcuqo?B~U`9VZ8{W)Ah()Z{sxfg-3Q3@?gd0s58Vn#`D2xW*C@zynCHU10FdF2qFpim`wH#= zr29_*3*df-f;@jo`+0za0eSB7Je(&x3<#&tp8>Iy4{1_f6uSgYW41uGRSRuDkMn~liS&6&p{S@uh_!UwYKFJ^`RRhGRrD||Pu?z+w_nq?>&s@aAoL-XjBF;`-uPYy9OpCTN*j*;Ub?YFE1;*VgytR%SWWoRg$I)@04QkT<0mtNPWflhoKDhc=}s&7#5~jL2Uog|3E*WVS1d>ti+FCaVIGc*Xbzs=;IyGUZc=WIrSzF7g7v_u2eC0BRwYB4E$7D z8AQMj_ozw(YgD@W%+0Fl2L_YuTj!lTiN*yHe`oF@DvF>*Kw*4MI z!Kdg~vsq6f>^taIL55&jxfm6Wj--K21J$Y9DMk_Hc->iNG^4yv`plVffrYJll z7v&AG2J3!?gs9B%SK(h&Uy#GfmC8Z2Cwf3EAG<@982tM_K;fyV;Ylv0pawZn0 z7XR&+1Lv!dpa*9*0At;3{ECdr8`{q_8pn!O02qKfma_+_5F)6ex^*?(Q|3W@-R|dY z1es>FvYrN?0jK46^T!-dnCx{5+aczazE-7g!1RUD^X;*5p=-eTNf`gr@#X^!^ASde z8yD|;UrH;%=ldJ@gJ*>10ivy*H3JY$J9H}`+HL4c=^o-72u(foG!kRDzXn9V31Mz3 z!W9F`C=yPBo%0xNEM;G<9J1#nm%-f=T<{*Ro!?$N=Exa#(#PvBMixDg^6G#^yjNYi z*31)ktox>Q-=4i={_s2QoG*d_4!=Wwf@|wf1c2@2_eU?gLXHc(PhAcvUM=&#T%UKk zXqLXzc%bdybUgT&5n+l^*=P^GT1>XTM~9Of4|F<+E)3UIUW4Q_OmE{sr^ZXgDnfeX z-_2mas{S*Q>}@8o}r`C-DG1w7PFfl@^x`NJ*XP)UWe|5L&E{H-mY30yHB41+D{+7b)MA+v?{&SFV z*m-s-fGddc114j-50cO;E_@oS)b|6C%-P}=zyhA_DIj=0A=`viaX0FcDpbApKK9^!NyM(6+qRD^`tC8laSTM%{WR8BwY zSyrj;$(Erjw92XbL{uXg zY@x>|%^2!jKf-n(cAOM>=0QEXRS*!nYR=x8VJLcA8PZo<26Bf2`%-Nq;fP~}*!~lV z*v_*gFs>Gr^lSyw5xZHh0~!j_{Y-WGf6q# zuI_w>TtoLl)2VxtJwkMc8WHV@H;DlirBn3t;xdtey08iR)zbB{@!(ES5dpiFxsV@% z2&(tEq661&ahlu&TXXP!-VhabpA|j4VjDYo*Ov0G#(Gu>@q~hKr2H_p^5f6a$ybBB zKv{2SNitL1r~0Mgyo@F*>KaWJZG{C8xVa*5*m*}ZN|2B~!MeT3)e#tA@)m&-KKg|4 za-I|%#(iWB!nHj{GD{DGeDT?b;3|WN)Wgn)z>hnsB7AIx#0}+qX0rPNc&{QTN8v=^tlMP0ev*w((0yGZk)L!8A0>(AB$g0Jh-rU{=T?LUNaQ3vBtQ<+6 z+!@xK*7nb-+;Mv>%igs`HT3wG{@^dGWy&iBc#@40w|0uQi2FC)sOF$*pRRo%b>^RC zXi-+n+pZeo} ziX8O(u$ojWzdX1L9OjF(XMTNV61Aj5MnlHsdS zIG`E|0|KSc7oZiqLhmW~s)Ab-OadaSP%R+lcA**tCjtgxzXA~P&ngBa{QyY6zBdAT z*Fo9x(s~(=!G($77x7Z&^(;H<)$1S2vNL0^Kfk^9nOXL;vh07GWoLu*#;5$+Yj4W3 z|0c`+RF<7|_Qn@Wtt`o&aO+Kes@Hb8HG9=vY{S!%(mU_sqHmg(dY+&dwEGHCD)4$` zi&Dx7apL0J=hn=W*U@=}i#hahz0tdiCY78~FBmCi>|M@y*_9*9L`bo|ob7$93nb6^ zehTky^cB-r${TlQRE%^_{g%qFg^WX^?C4WM-iSUV%!%sX)?XmQGd*;5-@@&}P3a?rn;UbBjwr0cL)~kgV${5oXBDF{le8gv# ziTyizW}w*HdUYY<)2w15FfHGe=}DX5O>^`&A;}>mS6T0!wIF{)^-YA}g>~Rvud*5N zANz~ka}*HZq>Ns#Qip0Mh3zmO7HGHNNOkYCo zX7!B$YIW@h-oFhwN8O<9o@u#PVBp^ota}7b<(Q4*>adoh!Mf$Jnu*cSIkjK!v=XB> zSc&|kS+SYAhgQWF{F)WVg1>68gi>O8SGaCpO|-bF#xfJjp=0<%{9BlXHsfmgqf*~3 zSZF}Muz#@dMu0)Vo123-?+FgL8Cr%zq=w-}rDfP~v<5GzH<}e+#)f$0qn4ZhrFB{U z5!^3z%)~6RV%O4-G5HW{q~L@N2A=;ltM^pw4krFZl-ZHAhOGpr zY@wV?3!BTi-J8qr&=(jGvf=yd1T}*ebS0}dqpci{&15@iU^|JSx+iv7iNV{kHmull zcYi3bZnrA7FD^F|KLN#VMHARS0tbiqf`wy1uhW79K(+zFbd^hbp+39OYar?x|E%lA zr3b78FM5ou5#@&haM&$u7pD#7R8f$!?F)1~9T0~X*IMp15$AOyd2EQ0{Pf(2|Mf85 zO+C`riN2f|+vP<5RMF&Y2;T1(y<_s9%<81jpF`?UNDXA_OWJP9E^$V869|Gk?(FZ+ zYw*@DG+MdUi8U(DXPWu-TX4QOHX~i15ofzmx+Uy1iS34S!~P~`bNqvbWM|*7v!xVI z1HNbOY&V>pM(IYYdZSrBxX~y*7%O_Z5^07@x8VG+xwFOSddaGO$t=&`X1I7^z7g5f z{2Pv6A|a~VA{B&ctt!uls(Ewifml#PFHKrI-ydH-V}GYEME!V7V$H4>-RR5cz`rbp z4X~bP$PA=qSGOU#aOpwg8D?*kzEtH7+|Rv@o%bjhz zi@I0f>*xtn8?Aodz~jkXkT)e;@;v+qZGZWVxWUkN2j^K` zFY}N_6dPZB^1(>H)At$i;DgfuW?v^#vg$X+&Z6r6ih^kMmqw!CoY9W`Y=hCY!Q9?j zzYhmIaJpk}`!7Y1GpyhH)?g+?SO%cniMI08(c47VM+t&02-R zEw{zH@&%_^kU>B(Jc_#!P~N>p^4-2h{KadH=PQvbjxO;0v|ayF>{}Jh%L?r3130d6 zRl{hf;Hj<#b9=kdwQa>a?Z2g;S>4o_e?Lpv)u0%-rdO)I)cpx_a6Uu40yBA)MZwD{ zETPo!Z8j@j57zx}6dMZ4ntKDHW><>h3Wf2*)Bvs9h)}lkukxkGWwlVB4ZE`fX#1^^`3~cGC`kEK|G{vy8f|rz>Gn6>d^{BsS!2du^oJ`p z7|$V;FP3k+BeuKa1NGo_%N~-#pyfYJwI^|f$3a&C9w`DbAoQm{;G}Nlt3Ss%uf6xVi z66orwRdd zkr~5+6{QLRbXC~?p0Geyg+0X+7U+tw+gm+Bfo+o+e=lgAmcKVKo}9{Z^0#0Vk8eJP z$t~n?4?*b9Gh?VJOlEzCGcJJ3dzX*2P&;gz8S@p6Cphbrao*)rf0yB`2(Gw4U`;)E1d~8s`D{8*U_kw#Z!!j#)<63$UfRxcLx-{hEif0jB5E zI2Sj;awmg_4m{QD0wt53oIiYMI7tp*Ps;(UQS)Q7{>#{zk%|wNon}=ZHWGvT8_wWA zQd+!yfBlw()wSZS_P?VyhOW&T|Yx-g1tKkn#J~A3z9VONH2&BX@0Qo-)ZjxU-%?9aaW;@k)8ufPL7^mlb&BF zdOl@zZSv6bw~>mkNzYB7=g%cQH&JSSKHOLE3@2#GOMf`$(X`woXgLEbYe~zMz+2Ih z8eD?ndWe)4pLiAiJ?$g2z3MCGUt)8`Xopi-db>?ST<#-?hgsCG!3edp;F5nU9B>rJ zQJbe3D+=w$YL-HV)(=r+i&3rr{C;&E9yq!GQb>)m$CN>0*A}@;XY0WBgihChvnT704#Y)7yLw65CrU>MI6I1w~xR!9`z{Ew_f3&8w0 zc>kHm2fI-uytz&v!!?I)pk@_1O;q%*2P*~Mg2-V9wTx|fxLApSo6*8wz#X_NA;;K= zD{@ysfiG!Mx>bK2LsYy9p%(;QZ;9WXuwbfq7)Nm-=#Xb{-w-Epzml@C&xM5SNM-O> zo5OV?g<$=YKqOq;8mxazd~9c54AzsyhKu)lYCl;2H*l*gJ|s}bMk0|8)^oLr)3JOW zJ+cZC7tB}}^LwS4SOO?o*D5WKD!d6|mh-iI4VD4t2MckSxA4?p;q?ILXfId>V0x3J z%nJXT@lW{`#BWbv^3r}z`Ih#x%C`{J_CDoXJXo3)3DP=P_m9BKeUQz(^hHI_(x$^3 z{4uN(CZom&zG#&X#If7StJL?)W>*r&_+}D!J7G8RxbG|MXed>Twxurz61VzY(M!+; zjMClZ`&4^GOWxCImWTJEjfCIg*V~5 zA6>r&ZNhd^HIE5`I#xL)(1n#eqz7FaA>Q1a+21gKb4TJFZ{k*zbRv@Air2)3>IZG3 zX>)68Q-_HKM_zuRK2Pjfs%IZ17CoN*L~dcDSIB{kL({!4JOqMzMtUNY>i-$zlbX+C ztjClJg_Bwq8e$nE=JTJ##(IxZ#*cNyP{AAX;W=xSo_nD_irvfT4F8%o!CY%F>%+UL z@+Jk$S9HR?&iC~BNpb8`l-0eA*^XfPne^3zGG)|QSD&56;m<-G(te5n;+$l+`^k8p z1=ig>YwvKz(+s8!cC0m^Bos48%x;i9O2wxnF>_GYQ=rsCK>Q|DBg#tM5s!Y1svDJD z_gO>gJhNBc%KJ40KCfwfG}SZ|t8!?WU{(GrR5Tc@%E552AdxPzaPa`tJh0>qgQF== zVESVOpdTx!Ri~z*)W3?266=3F#JgA5TYZD^JhJh{FhkP?m2YUah?>!ju(Lf6nd;;; z?0zAJsJzrY2PifS@{kqJkh1#VwCvR=Qu`S=e0nPW`{KV(`96)d z(EQGveR}Z8=-(%`UYZ@il=oE3VgzOXuU#+I_S19xI@G(GFYw<3)B2hDK&{J7rmD; zWXfmQe=w~9Gv5VVFuP&1k_AG#Sie1va&m2a4^%AHkJW`1I6`oPCCGO$%Q4(>dTq=@ z16W-3yf)VBx3jaBZ>?F&;k5isu7^MMu7{tDVt>5OJ?*4sJ~$RP6hPJEDXXmjnRC<^4TaOAA*0j%L+VeoV+N#KDY15XTxgx*n_>fQhH>+!~_$=}*j2 zQHxT-A*RNM#Y_~NOXAWFj7Flxa?1ZcYcIZnYrJ>(c^Egx)bmy-us0N1r9qLYgUe=9 z)|3E6B)^vPV9b+kXXYx580A}>=)>hZ%JF=Zq%gUjdrpt_C~~E$0!;r3CSv zsZT(j3e-7=0xdEE2okwdR|97Xp0ETEYMrSOtL`;H6ejJFO4U(QPvDEYWD#jiim<$O z6{upj&z<^2*T#yCa!d@~Hx zIz>;|e>e*KWeej(ef?kK$5{6-x`nkZLT>E(O6gVT54O#OBS_W8+f@j;9_bcnBpjKO zEH`UCP4qXBi>TB1HF-d2>1_0BgcEg>8og9C3Ouv@SRU?8%19(?iarf20Up}oq_}Me zE*k0D-ic0)+k}^5NlNJ-LNRYoU)ji6X@LY z=QO|VMPA0!KI^w=l>e`hmyJMG$eQ^%zSLN{RTmTEo2b_AGhZlD3Pq@D#8L(X5(bfl z0S^|YP(kSK2?N2SFk))}UzO78GZYLf7*TMdg4ZiJNx{hqYH&8XWUg~z#c-!N9f;-9 z^DM(iD*RD^T<69rG2Niynk-lPEy{m9^2wRLQlMJgga2A6UDEJeSg!bmP~N18^x!`o zN|H2xk8h{{xxxs~dIm7AdV*3+D zp9jo3H#p}F8IJ8RBV5)!9n?dO;oodg;dPDZbg#=iXIO%;kK%vWJ2E`msW3WxBz=DI zWq7Ps;n-d?!sWo@C;~LRC(~v7%?O`$zY6ib7`PUGAj7jhGs5RcpKniBekj9}{=J32 z4`HUa%J6LO8R4_^u89v7%9}rx;o1I$(R9hepLFC*t8%{#&;B5c4)3{lWguv=M1^C& z$OxCCoMD9Dt-`aP^cJ3Xc&s@f@nFB{E&QVh-*ixhKM}gWitwGE$?)t~8R=)yg>=kE z-?>HIDB`>-Ae$O-dPHEA(H~w-vVU%&nmbSka*1lWO|bT!74)6 z0D{GZ&H==j89H6TV+ch1Yk&;5UfF-A;QvtYp8&z)Lw5k;FBHKKPzn72ka%7QNIcI4 zBz=N_0l+T?%lmfT0AxO|0y3RKK#(BR7m)Ej2XdtE9{>?G^zVR7=V3sm69+`l&|E;K zGXs$6TnI=!1_2TeKOocl;#?W81d#ch3rP0>AoF<+KTQ7-K+<>5)knsxu8UJ%cV!3t! zGM(oD>HicU{c8Z3-V8vdQw7L$E&*h??*KB~tN39$e*k1UwSbIQ1IX}`l>aE@|6M@F z9|DNK&|X*=z7Y^fhF-%&3#1BN40r)x9^iKXTR;@re-B7|LfLOq_A3BMuTlkz0GZxr zm|viKhF$?=zE3OosDcRv>j8<+wScVGD*;)r=K-?*1^^<-&_r}n*6Ub6x{m;4zK3vl zgz?$|8E-ov{Wk%!em}<#<9!53_uYVuw+fKuUjfK^{+*m}op%o)%Xu>(@ty!k{JsZx zAt2SZOK_ef50LQ>g4m4D`>2TLMSvFp{u+(=0>B>wGQDAdOpo_RF+D#Z)2YBbkm(Kq zB>ub)ig@xqD5g6akl_Y_n5^g9;K}qZ^+{L>yC3ITiWOvJ+FS5L*r4EQ1#1XuVChr1TcT|9HzU)S6|BQr4RHN1Ohz9`xK=vAt8Ktz;GpT$aFL6r(}{JW@f9Ld6o zE&YCjx>+jsAuXMQK)`#M)FRvwm8Lf?&PrR@4$>4z-H4@MUAXc38>YqX5I1be)IrkW zONI*vefQMKzQ<5rc7=M7L7WGhf9GAjzsE2UZQNIke;Bg0-RKiNnOiV8(D3XKjkc4W z@L$VSPV_w37z|c4Ob_FbuL*)d9X^wuLDF1W-a);`jie?zrCFYGcoC*sZ_LGhk=6ltxDskC@O;C7PFai@S?}< z^JZ%Mq{uCkoIQIkh;;_kPz2fw;e)NQKBxzz-@2C ziU_uIC^pK7FDvM?V$gG}K^;I}XBDhlkC0KkVSz1b%fT(wJWq#HM(&tGz(SOFr4&Eo z(YySm--#raeQm@y9fdAK5iZvM1QS3MZrMW`A?SwnSuxncVf)0=O%FZIhESS%u0fOt zI}wn+KZGp@9AnyU`(J^Mi|yZRI9Hf>^WAXA=bQe6CZ38n{oA2a43NYzv3w{J!*e+h zt67a2@ozKv_qOeCG#t1l_cLk%lVCigfFo-nCfpeFrb5%d*YMlZeB?%)kHo>y2=v*$#(~n&7`Pw;Hnlwrq4kz=VuEI2}#FWOO zQa)3WhaF6JAQW*2Zo?*3#Va*v-%Zdt%v)qY7cLKq?VFmcM69vQD1Fs*Z)!E2>stX2 z03HB@dgk>|8T+=$LsAX6-7X0osLjPj{Dq@6%|`r49=j~MDe@GJIIGKI6KpLu=GIy0 zWl+5pik{9}RQZ3e7@<9~rXojIql>DGr^kj#ca8sKs=M5|QKEmPP z1Nyh~AeDFxcQPtrGTtYNtODs#iC>z@ci{^j0bM12_J?*P&Y?il6rF9AxY|hXtjfJN z9T!YxB@R#^a^xYP=RU#=pr3%_6G#QRpwZO`x`x^0O2rk5t7e{5WpyH}>^xZ_r{*C$ zZ{|vDKmv=YYjVWp-Xy#p!gC_Q(#Yx@A@Dds5&0QZ#>WX9pC%fV`=Kh$WG5)qa*FOp z{tccKM4PtdnU{!LGuY^O-GbU{`z-5uorK)7N1yDk!nIq>!!GaaJ!NVVRYSe4!34j$ zPzA`rnZgXGcRn?`ni0vut%@Cc%%Pxfli+hL_Ruzx+l6W^ zUt};uuLBgl4p8FwPfy#(A`HIq?9m z6injQZ~%T3qXO{uTDW8wK8E30k@(mBmJTx#Q@;dDID$7&_=1<3`adg%e09B8 z{Hs$|4B<)i#Gf|NUED~RHJLE@)Qy@b%v*)op1;$b{DA4-5OLaV|6Vr&#(;x&s`uZ9 z-oI1M>JMRbe@HM9IB;FC(JcMSF5QRDjqcCReG{rjobrv}p>e?oFx}saq`_J2(vL9j z2NxhuSzKTxaU9(Lf$2Yn-e~*Zvi+ahrJL>2*G*i9<}3y)VCTd-frFHD#C=2@`S8EU z^yDcOJXMC{C;rdeng@tB_?dqT_#0Rk8C#-Y5mpr77)O{4IKzI7@9jYPOR)yQO5`Kr z<$uvGeG$aG0k{nWUPT-oKnUEn2J!(flc;Sb*0vwG5nHg3v1$Hs(_mTBk8Gsne;0|8 zoBBUPf?yde?AT(kS@0vgaMu80+x{kU7k@LD3UDIFx~)V}*!J%u=Pca_;)1LtV0Oc} zSaX`)=zZi~V0>Vor5&U<7%7>LVjXQO$K^5hw@_RNf>4)$dqd zA*OUFJCFn8yaD_yU-cg#FYd?0JYKJ%pxvpN*mQYETK$eCI6N(wPkU6PRes`WS=Dcx z03(~XTA{(W`4l62Ig^pK+Cz`e$jHOM&_q`P941m^cOqkBAC*&{VZNHHL@xm|EB4h~ zBKV)03Y`SQYx^Z$LJ?j5o6mRtQvUWh=RcXt&%czv@s3Hw-(uu%0q{3$P5syMH!`|1 z)Jz#aM&biUg~KJ4_^1?%!ms-W?>mf4BZ){yt~KEVtO;MJ6l=m-t_g!Yrc}vAA*@Fh zmswa$;*GgwI8$|ktHNj}7lkW~L``S*ny?mY!WSz4Kla`PKFaF)A07}P3TEPt7IcuP zD2^t8k_c)d3Cv(3Q9;uxCJ4bGTMRQoRWzDJ8OLbay3j=%?XQ+;pjIPp zC@xW{5+jOB5to|x`#tyEnP;9%7XA1A|32^M?fqnOo_o)^=iYnnzMb30oG{sz6k@8qTnt>}^W{ax+#SN-kY@L^LFKamMiG){V^nLiq*dr$Os-QP`5S@B2Xc(}}Zq(%AU& zJ0XC6@StC(e`gr{Ce9758{_7rcg6`Q;Y&9sjWaCk-^z!y&h)Yz66cf~-K=3*Bu=0I zqW3OaK1st$LY$2+-7J5`$=aQ9qMJ>x{dUHWVI(u8r6JCl-ek1jl|RF`@pj828Gp*e z%E>LCWb~Agl^egmN=D>xbIZ%5{5$-2W~hU2|37W&Oql)m*8`<1L9&*fSS=(V+1tWb zPk5h+PLKGEKJYnx;ENRhG73YobG#WUmQRtHN%7iP4(kD*qmAYZJ>Y$8Kw(Drfag9Q zO;6{9i?MvApJLjIpcdH;26LWfJXs-4J70J9w6iWG$7-%0T5McWCI}M z^K(GPJF4zgfTUXih&}C*vjIt$1;}{+K<%r5#E$sLs{k4Q5Fq0}$JqU6Dn7%wpE6qE zAqM&fD}FTwO^p9#fQka0idBUEJIPkG-!|BHacuTlGT z3a10I{0ve!cTbb9{Rf%!dWJ=_dndj1AD0Q`On$n@N(_K@PKzZ+2*IUSJc zIRbDr==N0mFCYxW&tCv*%%`sfqSd*&*_Heh%ieuTcBDYOhy2Z(b6= zM(wYHFYV20znypps6x-jG$?+H;&T_Bo+pkKC2-Q`C*2M_#%Dc_&zj)&2&Y7kF$br|apSsq zgj1r&n1j<}X7)IDh;T~u7;|uXJaJs6+asJ3J;og1(RK3Cc~mi`jz0b@rV|}kH@{>F z&L!f2SvS$bEiP8cI2<<3P`Anji_0i~agT{w99*0r+Bhe%AmVOL);-3__;ST*oP!et zpFB?L9^)j0<}D3*zSEsjWJElEVo4G|>mK83d?m&YITPn3mL#04dyEquJm2|T=lJpZ z{HUDkoL5#+X&w|seWOYCt|CF zTdn+Zz(o0o3x;#$iV~2H|I+rm&Q0?DP&V1C0apRSU+ml@KE;qPf0AzF)bIc9a}dLG zBQNF3i=fzJOKZt*W;(EV3OxvgZBUJfV}#*R(Crh5JiVQPh{}(4=wZm*3{^h4oI-g* z6AS97lZ+1=J;TcC7*YiM8a3J=4hnK(N6mU4QHdWg3Ly!lX)?$mnY zeiszi)qO4b+ZnThNIp(B&DtHP%g0Hlr?5(EctPbckAdcxbD-Vn3k*GUjXUTWcWZu& zk7V=bMkP4TK+R?A3-iK0@R&A)e{_EfeWy(Jf5Jk^F84&f;p94rzpF#k!F9hWH!I}%zZsiqFd%F@` z1?V7`w;!E$4!fLoemm_sF1s|@xW-T+{m1+{%R-?t^zUUW5)o>@xNJ#T<(yENlB=tI z@}(P_1RmNsI2nkOocaIG?d^#ZvrqDgk@i*|4{t*e1YxzUois^5A`;F3*AN{Vzz)gZk(%$y=4vNi8ALidQJ`^?^7vqxnzpwV&he?na zEhIUJ6x+n%m_(%*%y(+PeVAO)6kC267n7eg{cXRC5k801<*4|)bLDKm887>z44viM zhSL|6bMH_TX^xMqD+N6snV8){f3fy2j<4zi-`oeDaqN|UA9xns-uzR>z2Z?uVtB+g zw%4)A``X>3${(Nb#Kw!FRj-eD{+NMhrrdDxGogV)*WEK||6d+)*7TGg-!x&+8z0|# z$lv~P@{}KBjNNcE92QItl!mBoZUT}KHJtv>!bFUKrNBK|O zv2bYD1%Lm1@Pj)(%3ApKk0QVR?Vo;~zVDT19R6N#%>1)HeD9oV{#V1_cK#`kd#-G{ zYwlxvu6`|W(ui3v{9?gDr>*&S`g0}KWwS@W{+mDEHsYes&h^!v{qUVH9W$ijw%Zn8 zJnY0Xr$4fK&?liqDNl`FcJ%+J<3D`VmE-C!oO=98&rW*x&gI7qPrYuBUmjh3_lHC7 zzWISCXYX8EaQ3D*$3DI5*5ZSQXWtsU@`GD1`R9R~j~c%Et3A^Wti0(*H~isV9*j;f z|5wY;|7rgHpQiubC;WdLfABtoiY_0&X4a_t-WsuX-iKe;4l3UI@!mIlaOruo2M=5M zx7%?{_U&yg_xnvkxCT{NO8m!ybP7;PWn@GkekUy;e1^eRb+PDeuf^2>tWE%qd&X|EB%lX*Zp5 z?eo6hpS=001mVN-U-|!El>exd0f$yj-tTwUzxT?jOMj8}=-Ts-`uT>VhhOsfJChH+ zrF_EQ4;=d1k<}ef9s6Rz_N@;;zID)>H+^~hP2U`F_`0X=8FS?ir=7X5dG^o$dfSYK z`VDuFo^;oBXPy84j>G31Q}OIOul%{`2X9<9svHfBxV6|6iOZ$;osgR`;7^U0oU^0;=q;HC-+pxCbw7#>f9=$*ozMO9 zfE{_yE?WESix2-`>(vKLd+(Ve&lvAJ>#VV_{Q2~yO`i{#c;n{Beu&3fHlFd*4|k6H z;K1iANAB_YwXZz8B=qgBmoBV0Ve0B(*FLZ&C$oO&h&zAy{-&$fwQT=v^zSdf>ZE5@ zt@Dn|f3U0gM^B#d;*h_N&7FDgGdC~3>aoDvTMl^U!p+{QiS56;{lJet{pGu32H*8k z^uZ@zyX;>@_nvaY;g9X?Jmi_b{AT}`E_m(SO&=cr>22e(uHOF2lF5V02c3HJ{L=!Z zAMN*;|NNn$(97@L^5tQRpUFx8Z~6ak`TzfI`Cqs14@1BC>C*ka{pYr<U%&mw<>U9*asC@84<0-DUw^xM#XXCU-GBFKdAt2@Wu~@= z?z`lq{M)zxyy3{%>*swo;>nb$wIjd0FL2209ar7;mzUBWz3TnKWnX=^aKmBG-CcfS z{nXDpumAN=bM~4N4UAay%Bo*@j(_Q+tg)L8+2@{b1}>R)Yw@;e=PvKK_s)!>cP=~k zmbY3DKX-f8LrX3#-Bk6)>K!k&1(Op+S}C*t4+FbDZ!S~MGKaU zyJ(4rn`kAK^XHD6kddt`q!Uld>cRQ=v!_lG!lJW-h502;!tp1LJ4yYI%a{;n;BqGi zaWWiwB1L4dDX39%u%Nq(MNg!eCyr0bg6=LBJ&~T2IRV>)-D5#_7mEZ^hb%KQxRcmj z#&jnOhcpvN9cj*zUBd3Mpt~y;J&}&jn27Dk?kwo;Vj-j`CEw@W@bQ@^I@h;XWRK6R z=xcquk%iM|iY3>#d)rT}LSsYIMn5pt&T7Y>R?mL#CmyNwm;BI9d5W+=>j#9Tiolw_ z)}zNLpDOjR8}VdZnsC^Pd||XDF_yme6W1ueEr#5)0*SL}qf>v^qqiV@_KCycAsuOS zu18aZ{E;u?$TjKjYTWyYV+teB$Ws`2U5k%mre$uW3JdQ|#YjHhliKCM(?|vUj_|1? zzRa-_y8pl4&Vac`IMnVB$}<;TPJ4?*@p6abyUpogxjaO8hFM3d)928!p!QU65Lj$55z72XcB%*L* zTz5c(z))ucqC=${cqlIZXot7v84y_3R&}|z=I?ZcO8U&LnY(xliIOm46Je=F69#Z2 zkn2ccZ<#_z%@vXm>Z*sv7%PBKS#C8RIU5kh)82#9<^7W*>4F<7BiD@sgNF7SQ~MkS(z5S5R(ME9 z2)j0PHmgII`t9j$j9%~Y;im4he7OUvQdYJhGS_^~s_VUR4Z`yNeFJi-_6~eL|21%u znN%OLvQ6*qGZVQJi$Wl=lEM%+TI*5Y>ZbfElK%`e0mS8}Jdoir7V_ARdAz_BBFoJr zXj1+&S9|4Q${o4aeDgjUm#fwy3MLS0tl!aHv3fi_cYBh>a|q_GBkcRP@_7(G`4laK z>J}qeX*8?_iNI-t@K9@)M~8N-D?^(37KDwd=48y>HXv}%Mx%vmvxRAa2rft$MCPUA z#KN$22mncLMlnZ=#agv97<)@eU$e4dn&f50_26tk=+@kZLXqs8fgNZ54TQ4DyheiBLde~W);Q~XZ>V*l0uSB1X>1c^VY@G3xb&3-Bz!k?cy zNH|ZS1zX$x9gs8qZv>>jwSc6*SKTK9qAT`O9|yWt|Nel(0KbOZ=>9Gs-J1Y0^!Hx_ z$Z)9Jn)n|9rT|U@q`x#k^vV9O5P57J`?mqo->ZP6XTwAK-vVOG+kcJPO92_*sestJ z_8$j`t#v==0JQ%LLZhAI2in&eDf;hL7y)GZRw}$y;e3TW-%5NCkm)Z41na>$3VjLz z#Qi?NR1ny5JQ{Y!#TvFcwA*q#S?#vmvN>{)d&*q)^IY~{x$OUT*`IaU$=k_)PgtCG zPSc!r%FAir$3@RMy%SIQIqjdj?1#AgZ*}42NJ&ipXSWk6_Fzjf#?vM9$|@H?`=vSh zqGwqIk^Gnol}g6dfcB{CGm%4a#ibG@(R+!h;Y_) zW8AomiP=8ii5Z!28<#;uW=6(I6D9yo9G@W$zS6zR=9Vm4aFLmfBs*vGUG!D9AIBIO z{gQ;%jylVF%eo_`zvpajP`!&*UuDq=c%pyNcFdaXc=eW*Yj+yB3u+3YANKkjRbDl(hG^glKkMxUMfB(t2 zhVMgui}8wiJ2Y5*6<@siD_B6!9y9K-o%mi`jDKtnF_zze!3<_6_%4Wy5421v#g`}0 zQY~otoRT6=byuXR7rX-6GRAy25d~8fh)l_8nG#?*02A^jED{)bE4S<16pUAw*+Ebz zv>NS0z4VV!Q0o@q-&+35ZK4lh-I)iHH*sdqL2|l~%#4wY0?EUPB)LNJBTJIG6&g9@ zh0FMRW9MLu-i2q-yfte;##{2yoHR_DLVIEa*3}k_mXz{1>7fO9Ff)2ZO4m7Q zkShcM7Q>4tl=)y45jEaMG zR~u>K!-z5%y&80u1IL2$?)!zgCFbN+-0FUxoatefhcFX5j4}6__bsVh(H(!xOuuIQ zQT!0$SO~Fmt>+YBqD&rmyK|3N)RBJZV#A|X^x%ljY#gKQKCX_-m%<1}p&Kf9I7ASJ zW|iC|f*z&s&&K5K`@Zsq08$Y~u?@^2_;oCjR{9q9oD2H}qsxmWFPSg$v5qwd`68D8 zX#P0T+wc52F%TWvJ*kpWl2j|go40xKfI>v*jwFvA^_6q&^avN5p?w}##hprQp)&QaP9%qu6elo6T zxb7D3;zEt>u)pJapsFti*CUh@8jZJp~*+ zolq;g&s_&3M8g!%e=(E`5K1un^U#6tih#PFhu6$aT)7BJ1TRm+;$E;WjMDK!T)t2t zE7&W>0HysO{ZMeZ(fl0rfB<=sDR}_s4+8~t%Zh^4D~llKE6}dK7AoUg%CR;+H@dPI z#pEl@$<}@b9ugAtKNdz#pdql_1K z9+kPNBLX*ufF({7a|9b~nJPlDt$uVM8g{ffukeY-gbLc#4i;0vqI>&LRLC;;4|&q{ z8+rR0Pogs8SrR&ju>NZOI5Ci2EcK%t^#ip8^#hr408(k%3Rjj(s-Z9tW&c#Z5(|lJ z$E-76lZ1d3??|qS1R?>{=wejza#ZpasG=w&5vZFRly20Nc7H+J)?XbTX$N;YJGkl< z0Z-_B1Q}+K>>}1ajRK-Mv5}o>Dd?co4qZkUyOVIpb{;Z@Ifeex;BVcJ>3ItNZs6YX9S{?tfVrVDXYUE z8>_?9jHh;X?rr6j*=&-Kpf4Kn=cSq|gedoFqSFQ?*hOFZOpIyq4EZZimX38*290`A zfJL*~P2q!W?Z-WxU<8hg+on(jwOmJw&^~PrXA`K%x=M)3~Xf#yA+Yp ztULy?5V6gSVa0DZv9XuqSZzZf`_&NI4LpAQX4htYdi|YX9TuipsSm&kzsSt0P7UwX z`9!8!|0dBGiV;M*BCZ-1LG)`SvdNW9>WsL{1LY;-FPkwkL|w60=2kEcFX&tvjE_}y z0NQfB&?3!36e>`!;*9Y#GBPt*w;X9|K{F{xU8)Xad@Cbg)tFORRN7U7uVd@6fcQc-? zn=&TAlDSbL>hzM4=%riyBFl3U%42j|qMh@fs?pQ(uAwfDtM}R%S)P|b-$ZBNkq~*0 zIFfR9c~w8zRjb`ZWmVTVGtbQJb0q2rCE$Hc!yXJjoh3zd?*^xXkN7ZCdwQ6Q{>Da*ozbGoIQfL{qBmQG!{{I;F|3dHna~%FVu`FQZ$MsH?-y1#ocfKbPz);3Ck?fPB zIfF1o(EXC!LEc(E+K@}#gUBmy^o$&|k}27Ec)11c(tL*x77^t>iZY8q1U5l7dTV|U zY#=hb5&NOB$*Zm07(3ffr~{6FqMb0aTzG17d~?rHf{@KsM5CM$MT>^E5@D?2PF-Yi zLqX(A?0s|y?`OAlUMdNR zR<(hmu(p|Qp~*o^CQ>ji4(}C=o`;Wtp-WLehGH4maDW+RZ++fG>6%3$uaAiXbc{VpTGd!W`@J5W07`+48WT!&1e@RIY zm>Ks_veJS7ED`GxC)??+*&Al(cC{yrci3ijh5VV#c>g7ky*w>^XdwH%;o$=U*)x2h z;feiOAbJ{z!&@*0kY26(c(ZdqXaC2wH#4O?D!?h_$ARpk;o*)zcEA^Yw;+n))ryoZ zY)6|x7FOqyjGxfkJI1r$ga7mW;cv!!E76Ba#-m{{j@ zx9(9E*9?XwVof&0hMzsIm+9aU?{b9pMFHX9>Uk70^kh3b|A{5O&UVwky2q0NS$!&J zfkXsTLmVGRu=r&ncy+u6j4pCqjX&Oc7#!Xk?HL=j0a93B zhc_dOig-wO+K_l;#ep>;{oEarV}51YPmYYxO*z_6mfK5X%$CK2`hyLM`D=m_tO;t3 zE2ws7`)1l}to~lZQF1~Rq-r3;jJ>nwKQ&TIQ@wp)0@eieKtfPxrnP*Lf3utaJuwcK z#rbo%Ec{m`Vh#Tdz3^{!^Pd{yusqJ6Stb0(Bw`JJY7vpvQ=1TH{I|IIzlTwmkjzIT7nU=(zk%%n=Np4dLu(8B-8{bzE#r)?KA@LshIZ(WTal=RuVD$9^ zi~@J!)ZTXJ;AlsLF`eTA%D)+AtTH+V!W^dgd;Q1xdFu>?Oko1=oaF3iA!M8 z?44n(Xg@LL{MkLd*Fv7vW^fWhNvhhZG2JT`Q<+|I(qi;}xafCxqi6OqHBjk2#aDrs zF?~zt`({*>Ejj0$0$=9w8OM*C=gam@4==(la^{I1-7ubOyvYB9KeWg5r0W%f9Wd0i!uWY*cZ|(!%rg)x#-FN7q zZvN#!KEl2Wzhv^Y@9HX>ZvLBx!6OV7&uO~h+ZCT7$nN=@hM76dc>I#(Pm$t#N`Gk| z_zJ}zBB6ATU%ld0twy)_H}t{3u@8K+;;%#a$>h)Xv1xjeZ)qR+3dLs`Hr?Xi*av=R zANUL$qN3@Ee?=eo#y;>n75@S1d9wP|zMl!dr}|U0zrp7i&@KJ-isu=JWc6!jANV5d z*UzO;7wA z6~Dlcbqn9>g`C#|zJ9ntT-XDCXCL??t=K*JZ|nn~hLajJD-7rs|9Zub=mFoTcup&m zwO<)HPeS82pd0^E#UI-PUW;FkdZrs*=ORH@7yD;1_Ppqn>Oma)r^7K1ztwLTx=n@( z<0I8aJ+*qzn+Dyy2k92!m-D8fV}B|p3EeF~lq((kZ84Va^lIsG$?p;Ts+5lXw-`(3 z2zMJ0*vb9_ZJoo@@5=3G}XWy-e3F zpbw~?ZT9W}5qO;2xh zPk_#*N5>IK)BT}?UvG2=V4=pwuQ$5Mplj50_eM7lbgliMyAgEleb7El1KQMGT!W92(KB}GkCV+0Z(sA4)#?m?3rwc$=)DOBE z(5+HBj)QvQ_Xp6WsXqVS$}M%J?^b>~E=rmXo=444emXu%N|!za<*Ofb1)ytCIvvj> zn0&{Zkj0=Jyi&ip+9bJA9&o7W57WYDGUF!9sz zQPT9z16`mWbT@*osvmUsgRZF`bgzSMr_!zHB^`rMm;xV}bm%xNX*!MrU5?UmJSN7L z`~3L0WG3iVE1izZlJdI}bPY;(tecsC}rycZVDLO@QQcpF+Ge zEPO6hdyc|=)crGz<4OOL!ruT&xN2XhaEiJgqxPW+-^DzF^qT-BT!q!@zCi6~D5U;* z(hpYqb_@XMk9zUxevjH$DJ)g@scPqOKGJW&0J#A4j{(x(Zvp9ky}~lU32;9dkaVwM zzDJk^NczJ7NzY42gim9>iSzFMzX47Iyi?(IfC1PSDV(A3c!l5M1k?pQ?7B+6Sw>Jyrb!ihs3Vr}j+1S>S&VU?JdM>b?!@9h7f6Am#PR zFazrWDW59}{dTqAr1p^7 z7XlW5{tQ6MW3sw$K^sT=CP4Ce5RiQDQ2V}s^!FCpe#&z_An6|jB>f)%iC+pB06b4& zn&R0<68|~i48VH<>5uz~gfjq{ejnfzz%MY?I34h1K+64AK!#TjNcv|78GgJs$ar1~ zNcVFT9%Z3d;fMe!kkzR(lTMRJijVAt5&x>F+4T@4`4~3hd7U(tUx# z!xX-T`3c>*%|OWexk13cDCA)tx?cxKJ{PJz4Up;Bh4vaj9k>IK_7~Ltl-e8B{yRYO zSqeBEaIV4(K+0(pAo-L+{$M>gN1;!lM`1hUO?G=EmSUBBo1L!`Is&72d`Zr8u7ls;`A<9`$Kk@yU+ zvGbi6+UT6tsKMl(<8>oNYLxmxjdJsW+q__yolPilB}z4jgJpM)?xO76wa-UBUE`Fn;L z{68TtrqP-jmpufe6Mr2Do%Y9EcJ!$U_(~VQunRxe#h>qhIr)!9+@1D$F8`0X=zrwm z_oNH|XP5mb$ivB>{ixIa3&_`L=X-ok`(_tEuID=Oe1y|!&voG!yVBz+$)8eEG$VNC z%o1Gso)aoruw?#%B@04$&nSlA!#km+4h*hD7tVkWUZgg6#$&WG>$J0H%qmhW=o6nx zax$>5Ads1S$9P$rVP$O^*(H~iRfgntHa+V7a(LBn%gg32ESa}p*<8HOuwcoYB_NF< z%jd}L^|HB37gvPwC-0m2SF{rIom{@5s=3;R;6x)@B4d zcd-*EHfEo?8XCrFdPU{ZOUmYks0m>1QiK30;|YwCX;Y1VL&-$-kCHs+%tzVli(M~7 zChy5tgLKa$)Yl+Gg($FU9f~X#DYg(CG(e7 zE_QkCnI(J-;2va1&EQ~N>Rud^>opSaMi)PMHQuvE8 zU=dx8Y6#79Yz@)+%`IP85`P_y0hBEPI#$-{gJs>}B#lbU%|t^KV`#98p?_oP+(Zv} z(+>4w-ki`JX+xdOU>t!!^NUOJa%biuNK5T-WW6&i9FB3Jl_1>ic&0r$#^JLYSMepT z-$%b-W>&^YaeW>YCCe69Eb2?Y;CIpMF+39;Gz|4{&{#XBvz*d$S}CT#dOemOZRo9D zk5%J6o_Faq$Wvu7=0EjjBr^=HH%%lW}G%P8R#>ORvY8F@_Xt zL1KoF)ei-l{Fq~3dOezyUlqnbG-JSzpDQNCbPXr4>`Sjl)^Wnd(~j{M&6?v4KVy?M ztaAHJn2sNo{HP>`|2cj3a0p+F#j||CH8~#7Gsrxqw+KHPijqIBrSp)ZCIMglH*$`) zPD(}W9HQQ9yP|wM`2^}7UJYQsxxgadE!C|=!la%~SUOnQ`XGv19?(gxG!F?>;89lhiQc3##bEDTWtr1Ca z?qigB9^NR5Yq&_f*XF!81$~lF1|!ed3#Q*%)d|(R_qZ~Zw+gRH!5v^K>>G#Eu?L}+ zn4`J(AdIya<6mymTKpG@V9Tk{TZhCMF`L(gHj(IBA-4>$a9^E<9B z(OYvrIpJQ9=sT$z4gm%09;9q3K3s&yrJPyt)*)Ag4(g~S1{W>tRVPw~3hN%E)FrU@ z68MLT<9tcF9~g>yN$Q>?%g{touZWvJ%@Rpok_tD5MmZetjGy=K&AE~5TM>pSuyW~4 z?<(PP5%1#cscFn_>-Y(j5$L(xSbi4CRpFOJuf(p9FIYFN++6*Hf3nJSK_S)&K*#IjOQQhQY=?PuR>#)t{`N6Qcc^Ql#*KptL32)8sK!O|$9SJYN zy4xv8N%BVpk@X0wtDa0GETkRxLw1Gc8%iTUBb@byjH*M!(>kY<-$9xywj`JfxRd2- zu0Dl0GI&i(EF1JTv5jbGKe?Mr6$&Z#s<6F-8!MA?Z7H!nK%-B&Ihk$FrN`un^Vv|x zq4%zHIW_mFFpTP;VB{@t&DBV&DT%i3ScsAy|J-OlQM_9n->4#bnU}?yM}&Bt4yUn2 zhIO~3+hRIVuCslF2O?RdyfxWM8U&4z2yVNfNqN=C6;d77L9NxigQglSq~`E!Y_RTr z^`mzZ$&e)^H##*%@54O@olq#QrXQn%HO?)xK-7H}pxU99DHB|~4xPm`NB|D*p-B?a@YqhaOjjOZ zTc+PK%v}7-Z8{c76*ig8oktJaB8pglolu`d z*XTc_zX?OZ>MmTpYNGG(!MO1);zT(QM%KgKTXQQi5Z5BujkGeW=0hC_bE%-NG$l}X zUU@L`Z>bef9K5M8@|<`FPZrDq7V~I6N}ja$ND~TCVdP6F4GA5N7E*Kyza##h>4Lt| zw^0h{?*RB?TU2VoS>ZF`d}A9pg!2z)IBZC@#tvs}8P5BK=-UtoJRxRKT+GNZkS~E_ zAb*A@qp^dP0=H7UHNS$B39>xP1PQMn!)rnOWmwb-NnNOtl+`P820&^|V|CVm@V>?^ z;6Yc?IT$5=U}iHOh}|8C9vp~Xt8oh*n-4J_6o~#}j6`;82r4Sjraaa4LMQ40YWD|S z%oUUXD3i)>%ZscivJrK5K}OMtv!*!iStaCmA+=YaOZpr#cl0pcnm-`Hxa!g>t$VBp zJgY_E6Wp^z$KkCR%y^nnMCfSgMP{b6#!9rG#{FK?+@TdQN~j;C9C4j*l+yY@8;Cp` zBQ#WZi?qY&R1w4tu#md?i7a7^QlVT)jFze`yrgq^AtSUSbSUouBLZktV=wlaeyW7Q z9ze7YY6c`71~FBVDBTCTObG=8miL4L<;Cm4Lvm*p@LcT)Ii?<=KbgsSZ|J1siHiYp$n=3y7Et?35ku@Iv@ws;(anO zSU01*HE>X6AZcjEO`15$gI0@#9yLKvMJzt(KLZk_*!c3_!UCmh48m!}#K45Z0ma%& z@GrNCk9ul29q-{Ag}{s+4-!|azXBs2Z_P&F**xHe{2J2*7evZ%JDy`o(|=efikyrS zlnhx{l&i+rHzGAD7%jv&@fvo$(6`eZsQY0S#yp|pK-eI)(MZqSDKCiNqH3&%>;YkD=t%RJ(j2Utg<;vO)lx9uL|HQlLpUhktjtZU zte#L1*^lU<8CY45@hRvHW#=@=?nX>X9kSz8Ft_Qvxa?SEBuWwRVrj*IQ<|cc^-{W1 z;9T1*)y|T7Yi3Kj!)tg=F5NVq6vA0j+@pn!R5noW5ue@~&Xh$h7LSBGBkrxa9`^24OpkD&^E%kT^bd)~9j| zz|AOM2Buww+5ZYb4G^0{ku6IR7-MMFIl&e%D3*8|0hGt90K)rA@Y3L+vUzJ>HC3SvJ)U4J6ulY73I0)0W8WyB zvF|mGZxsBPI|{FUBg#2oPz9y^MIPvzs0(AF8dt&Kt!YQeKy$DP7$0kr!~#XlTN?$Y zVEdZ_NWjl3y>+TGZTUJV5fS zz-tmc#HJt6&_XnnlSt6Y&s(z^zD2wo&3c6yWAP-MgVdoiyMY5=M5aC__1YmKP>i6q zGCr~L*1aos)RPUFTRUIE4+ve95BP!g5M zhRz#<)lX)jm?KY7pH1~f`9&cMV?@z$5sGWDdZWRbYOL5Xz~(8|WT-Iy1Vy)NR+Dh> z);y17nm8`Y0uj~cNaJWoFdhY7BMme(zZ#`8RVYuKpyhVGOi3;!m&hFzT6LncQ7$0Y zS*WLPD+zay$w5@Fd<2}xIgwRF&FvvVt9RWQbSWknBUG&&z1V8$8&AJ&qu&=5s zNJk@7*d#UITf@-?c&s+<`1>gIs6!lgbCKKa$?cLZGWEb+b_QFjV+DAwGA(Z(-fa z6qEv_n@gGKfl(%@_bI;caxJJhI7E-ZGR+~D13LgAf;C$!=INB&mGfuCv`tE8y$47`tE>6lVKWZd}APIzH==zZ_Q1JKTs&@SgpZi z7ljoICb330bUCU@In}3O549hu$ctzp#`2A@JnE*iALHBuC0 zgnp=0`&+pJZkjC=`4|UpEgRDgJ}!xh(AKfTez4M_i@<1Qc0J>WYO9mKPe9n(^#U83 zCh#=wjjXGzh~obHn0o`Xw9wnYh%&mU36#y;0EDoTZGZSH(HnVAKXBbkAK+@Gl;JMH)o?IfiagJT!ag#H zo?Vs@V`Am1M`m-!{{V;zxYdc{rZ%i>QP;1~$Eq0C!BB+2p6g$zX{fVL+w{d@K86e? z%@{b@PgdF3H_JJv0$LYOFqL*?O6OekG-#bn#^_>YETy^CUkvErTt@2-)ytwIqUWwz zvRboJkeoPk8SOj_3*{|8|*JbJ3eZ{H!_cvRC;S)M1naaiA@f?wd>);Zl)`7S*S%90Hk{{ zdu|w|n7FZ8nNPFwA1X6E%@{BK?q8^|2lo@>al!<(EsWC=`|vh|StXs17_H4?)-=6{ zxrT&k`gRiApt)7eVkPKqTgTnx!S!vace7eCox}!*^xLv+aWDdba!<57x`}R{umJv8)FRZ_P52>P{I74=U}&;<=FJt7&@OWVY}gs6P(j zsLa|gZ3^YA1?jPK;jNhfFIc;3%-k9upGYXdNZuP@-wdthT^kCrKdbCOQN}zrgCh^D zf;5JF0jx9xqbrTzKpM{L_$OOCAUmjE!7LDtLDfVwIqnFhLa1yO@cu*B^PT&w0}82a zkpS81+(Td0-wv#tBN?arM<(E5TdIGYE7QA)lv6A6y|!3xdH5O$$5b?K@f4p*{Vx!PN^3E$|%0$ottHoH{^0ntHEW6zEQ z9wuq#KbRU+Ze(F$0|eP5ODpljd20@_5i4v6M29_1X;1)s4fP$T7`!#R8D6xkVS04( zyI48MB3mm9u*GU9qm0;KSG9H-hkVgVnVYJwHrWg6CJsm8FY=jq!TUb<0vvK+&9|C}6ZA1Es{6|J+at z1x1PMfehnP;I~K&h&6$_OEFLoUOeZ(juNHzhYTrNWeOkkJ4l21C#vTQ`#I=4jQ#`R{nyCn)BvYo`rXx|4#ZSkTh>KJ-W}JLnVn62C zk7D~V10Sya`9PhX1A>O^r!a8Pvo3Kxt`7X;21&_!ZsWiIntn;3Y_6V_otsF$kFj=> zWSWxY04CGtRHXRvJ>cv6z_XIlT!vpVeS1>)f#aLa$@HQ5&{xo8_JA)%7ek}h+PbBW z_vmPNS1K9*D)h`W6Y)!y{$|Ddd%*8h{J0+Q8AE`8nTKDp^fxG;=Tc$1#lKnc9X+JK zaWCU>Q4e_EP=l`qNS6La#Zz^0GQ3CcH*y4%3~%+h<)W2HhHuvUYB>l$sXjUEAJb?# z?3VsC#h=?l{3;GJ{)hE|uNtNJ9^_Mhgu(w70aM z>N8vO0@_I!t)Cbds-80SmkyYRU%k@hsC$ggp$}>iaF!qIs~F4AL3axf&C0Jgx<^2_ zMd?_7#aMo-|LQn6Zo@C*MUxKJV=TYT>EQ#$Nm;}V*IoD?9dPO z2ha^yI&F{Qbn1`kd(pv0a4MP1;y*g~C`l6oz`m|4sJchaRCyBi0fqtjb zvmNV=e>#x2fTm)X;jislw{(*35zv(@owje?=$4`V%YdGUa{*5P>^jQm+4v_Ql6v6N zfRo|=Fd%sPZv#Y=?T-MWO#2G~vjCSJ>G9yxKUv{0>;-q%NXJcq-+Q{i^NQLsM^=mT61$nY-#WcbB^d4Q(^(*J0{DXo1rjIVV1%SKzQ{J z1tkBiU`l_#1k44zNnsHn{`^z$kKv^NW&^$o%UHk~g(-lz>g3-s!nkh+L>uPMQu{9S zucTiCh#>vHQpkJdwAU(J3CMVz56F0p1!R0aMFBb)@L53Ge+9^R-2}*Z9S_LxcOGKk z%YeAz$ zSP4jfM*uQi2Pqt?u~GRBRN?3Q89het08&0r0FwVt0V%f{bzcC;^q&OCbR4Yky?sr1EeeMLlI}A! zScGRN%v5*)Ak&+o@EeThXs4bH!fgt-DEx=QCjlvk`v572s{v01ya z43P2KHPrBX9gzH<2W0$iQumO$F9tjv?g79_fI|Qo-`8=CjPYEn@J@xFVq8uBKLaG) zV8980x1|_(yuy!%7`nd#G9N1d$?rmiL50*`gr>|tMB%rCjlBc#Xt=+k@L7cofMei( zyTY3kmIE?A=L1sCrvp-+V*r`{0|1YO{p&qFo^gQh0aCtgfX4v-9q0!{{G{HQmHe7{7b2(JSq-E_650g`SY zAk*>AK-11W4>%h3I{_*0YXIs0RJ9)mI1zS^@96&V029CW0Y}09EFi;K1DFSR6Ci>( zFa*f>jR2&-K?*xO#{L*!I^6G7c&Eav0hvFSD7;W1+5pKP$XX!MA`sb2Gm;BXgE=h) zglJRS;fN+PbqgSxg48xZ#4EKG5LG+184y)DwFwYaHMJ2CB1~Nah@_^j0z}i6S_O!v zGIa$Y!b+_GL{pwx4v3~UwGVEr!uy@y+Z%=5y{ znro~b!lL2QDDie4Iu>#eJ2HW0KegL=!Z|9A5>fg@e--aLYkIbieRsGi+t7kbN z@oj4VTJc3{KMDSbXTH!_JvMfoWHfNZGhb=AKR~-(hj|okwA*<*KE-Y?AJ0;HJ1<|a z_Nr0j=J7nJ@v-Y7v*AX5b{*uGif=~cpy2@};_W)bUTUvWe2v=eItI%v=^M17{aVAf z^Y{rW&t}DkkzXK>8R~Iz+84s&wErHIPWuZkdxOhApJ8&+e}niq?QE}{_68R}uC6-q zr@-R0Pj%UEana9#Je~B{xWcb>;R{^$!7lsjuJE|w|{^QmP1cf0EZ${w>RXQXn2uem|Gyo-HF0Nb}u7Ku&3a7duW2MpzaaZLS zR!xw=L@o=G>H>SGv{x zz~_?i;*yINgqFFpATG=9%3qSxQfo#sS_HBf>Q@EE|+EDi(D?oW2SXYl!hr5RLZri+?|~Ur`k@EQfRq1 z>SubPNY3B*rj%7DPh!*zn(|GGPSEB98IjMDvWw?XXH-l+QhBM}2LzYRSrjgV1|ZlH z1Cn&Ql=~!7BEK++ZTiwZFDfYj)~Rl>X1){^=5?996r3ah~d_I9-o50FuC3W=*iKe zUO0o?h9hvn=p*SiC-#+)f-N=TLID$N^CFJ5nSroyctkad*pp#KEly$NV{Z*tF>r3i zoLDisM!YqD0b3polk;jHsFb`lTrn}h>y7yu>%h}A)sM?DNu0ytg{AH4D>OG4`IW@A zFmk`dlZXDn7-wd1?yC@Y!wqRJUOV2JU%M-OflY3YDUBf>zmDy81S1G<3|}QKkgJI=NC-iw|}56 z7wIC;Ktzw(fahoMZsK@doaez#p0WBLh{n>Zk#jP-H^!(o&gcjyBe$Lq@Y9+BjS!63 zMo9-MlUz50co4sHVr-v}v-LaK!r8Qs|2;1xqUhJZ*qCH)B00Kg8pt=%q^Wf*V6yWv zIf|dr1HQfwe7oZR0hsK(2-k~feh!%Iyhf3By3-69yV>-+w<;2G=q{wD#+hYH*1ezUrV)qRP&j|aq3w7e^U zF`@qurRzc$fzJbZEE!AD{-*#*_cy?!0Qvkj`Es1kE!Yyk;eclYV(96g2#C7wr+NaE zMgO;u0r|88lF!c+UIvIV?dR=k3|;-F0n*=bfTI8p0>u7?|0~Fs{ycx?55wYAA0VQZIvfz`Om*(JK$NNN@HY;S9SinoWWR;` zB(1O?1K12W2Cxb6Xuw85>_f?Z3-@VO!G1ho6<`M73P8+TWWQxRU^(oWfTe&a^RnN9 zx+wcCe!u|SPXNpT#2TXPx1AzrLH1j?50iuR;cqb0 zOUQqO?Vu-YR@k7hN@1zO9ECoG0OF5*B=xyrg#9-aV{#+dlpleo1fJ zTe}Zo+rPnzZ$ReIaNtGydSmrO0BLVm`wYeBsGZ$C@o8%3IyUXL{pUFsSYzgWd^zn8 zyX@SjbmCuj;cJ0(;%i*=Z10?S_qzUHUG#Y_`eK*;Gnbw1fRjJ#ozuPt3cb_LeGaGH zy$*eu3%@Ujo%DXl(`moU6`utz{Cbz2XO5iy-TNqayXe1m@uy#>|8^IB(8a&gm7b+8 z|IfMbuYtLff40m1Czsv5&VRHkd=9yt{M;*N-)s3Ei%jz?moAn?p^KL;E~~`yysk}g z;frfU);Vz%OV=Z1-Ci-G9a>i*o$k8t;KU$^m}2bM+JEdLhO#>Wu?GX-ua{kc#29LL z-)A4dkrK1`pNzA?I8%aE&)9OHuyAe-B(gB#OTMV>&R9d6d~G{ME8+FJ<}b?s6Jzmx zmiiMp^tphq(4oV-39zbpMvv zyGxa9u`wqr>L`={d+Y15${W*HA6Iyfh#A-J@h@94cj>(NZh)h_%)=`j#9%9kn>Kt8NaeaKk#0k2bZq~=K`|=-MAK#6Blg6%(TRX;D9B+N+_3^{ePtn-* z@p25_M$_Rtu8;eak6jYXq@)dT zWO|F#7yD=a7(Yap>qs3oYphsFuSChyWdPQ4AN&HJjj|q8PPL&E_UV(&y z?`@%lSi^k?;m5VSx5x!>+?j>8TFDqFIWf8&tp1mnO7FUJ%aH@PiV5o6uG^RnS%ZZ7 z+IC*PbY5C-?;H)mahPrd*9u})QTi8rN^+6OE)}J+-w`V>MWWQfk(eb+%mOB69@3#V zwynB)laRv5H=#=qOG$)Pmz2xZY*Fgaa|*U6+#1b`Y?lOFfYN6Yu!#w{4*znSp2q*= z36T2r-}P04AQ4w19}Ke<$RF&jYssqKoo30&>0XRzP&k{vaUfP5>m`Xh70^ zg!m)x{LcWAt`d;$Wq|05WPL0hkmvibzIDn3K*;)(v4B`7JcS!1`vD#Ti1oKq(f}FG zE<~E)bOLg{t{sr;Xs@W9Y2>=w2DLWl>lPf-XF8`G- z{33XE`rq!N&vD`1>tOR-;lJaech3U9*E(3T#Rsz|;f#5A=6haMBn_8TpSM(u}VWbuY2~IZTOEWXLGDqyo>t zmX(Y<@g(tP3O-I+S_e1b_^b(ugx0}LIBuMa&^ovYGqcAfa;&8bh%s(# zT?n6I7%~1*jP*PH=em${-j2s)pn{H%o3Kaa5{*K$vJ+Fc8Cz?B0!pF43Bf%Bku9AS zVvDT5=52WI3S9FgKw7xy$S#cT_xv#?E!DdRF3VM>Mt7oG5<}8w7Ia0!9SYR%8Nc0^ zB1BZiXBkoa0a6ls4IAn`2c zDS+nya=w)hNcz!$r03c%>3x7EC^tJ{lk_d=SoaybYhoVh zb3ELT-Wc`9PNCk;YV_B$j!IF!K zgDEMQnO{89eDlBM!#0@a4vnX=#rg(og@3*Z-*Z2+O5@e8KGuLA>V>Bn6@_VqQ3)7J zU;RuuD;A9HzgA)Kfc&gMe^G9~30dBg^)tH>KK?vou*gx27&!YG%8x(tWgJ~1fJ@&d zp`Qs{^I;Rb1S5E-&YWl8BRFYrC>smUXF)z@-S%NntY!0%+f2ciLAAi6KY2}JT&VJ8BQV({e-m6Gwu%@&@U%iL^I(m4r1?Hry&z+Bbq_yxKc zjU*C?05f+PpS6q)5?L(Z)*JxPWeNCghB)3)1TejB#PN8nBtS%6`WsACLER}=BfzzP zL;!izVXF%Np-_1(kE$fPRWUv5-}g0vLsww0mOxiaVExA<*K#q%yy76~lSe96Hn07Q zVSs%Nab}j_=^Jki&p+~zeV_#&_^e*pihSXTK9C^Gh^B0Kp0XhF03W`B6zidrGb%|f z7_c4o)n=Q*KIOVAa}%VJxz*}XjTAN(WOpuuF6{hmJc}=cKB7(46p$B%&DbJy{ ztV6HrS)OqUH(1x9C-f{&m&MU_tWnE{SMSc3w`-TDR`1^5dpnfS?+kQpoL?V^On|!Q z!q&Pov0cJs1Yg*Oppd4#Eh(^i5ID81LjR{m;EcKhCfeYe1Cc?mN*cRBiug1Z40s!_ zhP*|Mt z28}mlSR(keUlpA3?f}ZwYOE$ZDsCR=a+}@)x^pxMAYTwIOC-t_q9zbY#BmcMa~FhM z5S5zJ!8`x(bZVlfOT`ldR!>s6TjhTDsgwQSby_ zcqi~edmww-7(B^^HF?DMCe-R~lK6Gs@$DEOnIJ_F#j|!1nqec`$;mjr42~U7NS(!d zPbiLoXyx$fkqO%ab+fQVX;Tz=90EZ$s!&6V<$g={dzUQ@c>jC{D{&zEO>gz@n3l*Z z&}EBaAg*E#7_W9q<1j=xo{=5PVI?^p@3<7v zgbwflfk-V|2NvY%kps3*Z^_%9f`CD`vg(Y;1ZcI-hop0SD6#d^BZE3Rq>8dSia+d; z^5vmuois7o9p38>gAj}-J|vopdTbi2Xf0c*!20$*;KEP7zZAKZ<=Z@QT8{^gm`sLT z5Lw(1m~;or^s=K^aS=QudcdoJV_x=NI}H^WD$|>IEeXF>kW%NtbTE|ppq#Kpu6Kl2 z1tTvpZD{s`EqSj?($*dYF`&U;f!z=hPB1d)b*Y-O(HaD!2cQMVHn_Q!#cT^ypGH-~ z&~&~;2nM~SwH2JvEKJ@Ks5^fE-T?^?z>89KlFR|msZ0XdPebAj$l_JrYmY>FI)`ei zjb{;@)Wztdl!ZiyB487NM>Uf)zKHsx*uYskg~`w-IiW#Z-VJ99FaM^eS@}x2#Yw^XsuA?5*L#07`08LG-umFV2ii-pO}A-dDK{fmlKrc;GJu z%@jPfo*o^xvuhLE2h=lEvJI7+gIya7CWWCHI={a1v5rn)q`_ERrR5vi#+#@)*!k?R z^THD(Odah=Gv=!%`FNQEcjrHMX19cn(;7KE(W_~H&xKbB6?O18*pb8wUKG5ENF=|34I_KP`N1fkpi+-POEga6ilLm@o8#EAa zx<$iP-c`RtLRs=r*w_TgaDrMY3+C>WKBv+2)r|v?Da~sJgvY4BA+RxImlzbJ&(Lm^ zJ_-@8D#)I&#e3Z&kbW=ztd20ymS1h ziLAM<*6DL`Mk4SGy(2Fq9Za#ehAK5V#>oEKd+o7EG5F)I8|p}5-DO?gn>(btTHFk0 z3RLo>mRB?I>H!nO#Lgy*9@ElsGR2Kvh0_Ckn32LT^t^QJxK14LaX7iu?K2Q-fsTI4 zRH!k)XaV^P7w?(R5BL<8Fsi7LXa_}8 z{rJG#$n&|?Z|~0Bl^bcxt#04#t+@?|b!3xUH)4F`%`aZA{`TA4wc_AC^V7Nu4jWkg z?(XUhyVrN_QFq0F%w0LVT84zisgDWcBVT;+N_E$_dEObXS^HqDw)#+gLLLU!P9ml>1UCs!0NZ!M3d5-r_ zLa5VFw4br3ubl6Q^FDb(_%C3Y!x{dsdkp{oA?_={q6*r!cO?x%Q9?x*K|)0uK@5;u zq#Fb2P6r=OXWx|i>?B(XWpgVc>pGEFH}kvzM1x zk#oIO_CmT*hLZ^G_HU!?m?1DoB{Rk(qxo(Vy}`ir9t;r0)@VQuLYW0XW$9C9V6j+m~lEV0$ZcfEAZPs6{O0XQnHpDe3n$NL%3_hK%p210#sbR#?uc z$1$A*Wztj0)UR6P4S`j_V|*V?$AhMXBD;7=g^?5~lFCbpJ`5!kX^Ta90jFg!Glkn? z;F_a-VZE1u`X6tR`4er5kUd|)6KWVr1?Th;b$3C6h$*LC=&>bRhmPV$H(YrD{1B0n z=l_VMp{*>fGZihW&4eMhp!%B;6N7-#AVFLi03idRQMH*m=nYkv9Iq1tN3`q)>TV&7 zgi4VkbU(yO<7nWqCb5*z2Zp;=giH5)s!~u$?Y{7h7+Rr|5s9Ok@Ojc`K=2VHaM(NC zacB_^l}@HlLm8S{N&SsxS>h&_!NU@bm}QC6C`0-avn+9vW#F3zvn+8#s0kJ*+A8Mq zPJUvxrIML#MdOEiECt#sAtv;E%xnwjsI7BYj~y_<1}8vT+&y=^leq3*cq)8O2BjXI_ee=Y13#p&8SFn3zF10M8dFGO^{Tp@V5;B1m-56FP4XvZ`0((_~H|3Fir@ z+xrtN?@tiipTNF9fgW#xRc4!5+GvoWiinFwze;RbLO04km?VXhlih2q(LrEvGkjrB z4muSUgq2pA^2};u;=ZLq$TSv*qD*0C8cSPcMl-B3LzFpN2&-&#i-31H{1{J}qAJ1^ zGliK(_e$#itsyq2sA-!?R1}d)h>>jkE`#TCBls~Y4T4{y?Ar7|j4C=bb(>i((GyHL zIZxLKmV`@aSofi^K}cy?qgnjPsK zfAsNBsmrlCAL<^*#|Eh5jc4n4$%GTLnovC|;C`U85a=hM9Q`9RE7_B0Uq~tg?Fu@m z7PeV|1uVo1OCKm=Y^veGkk@k%Q$M`;n^?eJqXk z6RIh%_|;*W5E&`x)OgA5;Qbgfsw6-;bDF=cBZz+m?IswMe!@`e0_>IxtrpA{Si_HY zWFX%YqICq)UrF~`gk$)j+_UY+5d+rh*d59j!cgwm&Y?heSO#{7@`o^7?k0gHYG`QR z$aqmc5r%Tdwa*4}{|)}@sq-8l-w4x>dj$|GK(1B7sqDz$eC$mZ_8t!T4AY*fL4crw ztT!NdlbuKAzpOamD3A}p_+19pEdXx@MD|sfmtowE?Uw^W)~kjCLbxMb0EK~@0fOqP z3_u2;AeOgDll&GSa(^7-a%>-j`5#zBkNmv^MDFflUWWO4K&V=(D@ZPz42aSb4+utf zCLpYlRTTt;B&oiKmo5nJVLXem0AnV`NQ_c|@TYnoUR8kVs^IX;!JnX671OzM9m4L`UnqEi# z{QzMmRMnm2vMzuqowk4|ox=bbAn$;}MeZMCJcn^3AS%a9K;$k0+uLK*!Z-|L2Shdm z-2DV4kRI>h2Zj3_5T#=cwok_P3otSOQ9S4z135q;%s+r7;?00i6sl(dQGMADh{8<= zgg@2A7`*^deKP<=?i2x$yYD~{Z-O7hmjl8Q2vtQ;3Z-iZAhN#&%7YixOMuA!ARw~e zf$i5}`#5ZG0yrAnH9%pY@;(EI$~ztq*^2|Ba^DAqgzA$OAaW-Hi0tn}VIucy08xEd z0*K=E0z~mDVw3_zdI@0s3^xhNkNbegz6#?WjOhFVWS<6z@*@rq{#3`n4~pj+++2{w zs^BqPa{(-Ghk+}S7XYI2M*D~( ze+Jl|fw>^&%@7E3kB%2b;k5!m{?PhsC+8`=M&lm0R>q9qY<>#L&Ybf}7| zXeb3vWzo)N@Fyz{KVW3Pzz@1lt^%U_CJhkPgIRzKKxIJiH=+^{ya?uFOu^`h(GVj8 zBLLwZO__+oKhSEwuS_hb`o(6D!yn6_ zr!;nc93<>qlZ(4^@d7Sh!Nm=^!oSDGe{*r}{Y%h1G`l{iJlT0ISA3|v*yZoJ!e7V5 zae0F;(m>tk@Q>E_v4?ksi(7HIpTWhEUv~fAT>f8j$?du16S(BWdOAB>3mYe5J711n zzhS8wDIvd+2=fc`K^uFsfBC?2LN3OmJoNhsM4XM0nMa`4B0pHc4PX3+MaIVX5o1B( z0|i3bM*#7`*B-FLHqww4J*=}P*HyE2-$pCz9BiHKJcuRO0e<0rQC=|-uw^#a&e-hk zJR+ie{m5OlAzoswm+hVrrh^kO3#XtYtbOib@FS0C_i$;1eRkSTP{#h;EflsP8<%2J&IZGcx^=t zLQ^*n6C)=hqAK`$#ds0QQ!43zFl2Yhg{%JtY?IEo8<1r zyw)+=!97c3z&{x1yJ!vUHw0nZ`;!BWD>9MD4;YF=w?eF)gKmQ`|GJJ*8@os0K^H;{ z4$!n$-*t>cRv`&tJcx{?7>#C#FYTcJMy42tr!GgMT_UYGe*d;FLkl#A;l|6zKr7Pq`n&{ zZb<`DBeW!Qxwl3^}Ryze3Cz+crnR8QoNGn!qoj&PjY#RH<5fA#ns9D zMCY85hU6g>|3tdarnow(-)V}|1`+AIM{#kIzo$5Zt5Lj|ng0nCXOKLP;+3R6XDHr8hIfhLpGe+F@g_3-?-Zwz^;Hxe zl1Y8Y@DwTDMDpnr|3q?Uii?x}Ln+Q6c_PKtNsi`g2;)ie9TYbtc_GE^NPe2d$@+SQ z;why5A1F>kGZ!!%froR#h?5+hS4kKK$;VJ!o#c}!9!bWhPjN$1zJTI(Bwt2x26_J< zrno05KTGjQlB4-A!laPAmBq>U(0mzTa!C0g)Y&7GPjV@W7n6Jf#dApi(+`DV<+ zFfYP98}n++w_tuB^HrF?!rUM84$K2E9|)6s$iSePxZkBPPrzIObC_Qu~t^9alb$ddY{V?GS? zEX>DZz5;U%%r{|fj(IZXE|>>nz7TVm-y+hx9P`bX=V2a-`C-f#VtyL)6wI$-o{Bj- z4;h&#%v&&Dj`?@Y*I_P%pNE!VJ_d6#l-^&M{D9d7GgB*5YnrjGwVkt*sfR0i!1mP) zf|&(7uP870gwQW4nzFF$YZVo=$ScOr(r+=%#1_p)Senl9uycSZADXGL3Dd*a+R?+r zl$bN5C6kscvyM(MsC&m#C`e+m#EEUaZjlO@6i1YI$cA|hpc-UAtI>FYtCLU;0 z0S*ha9Ra5WY=OXGfwmWbGB$Fw(IBV8G>x4dTu|Y#+nHIITA5gwaM=?1ZR%v|;K(ho z=A5kYi;TPwUU^Kw05>~vaqw7 z1G$7;u)dY;cduWb?pR;wat9OP6QfC#9k+n6)C4h40b3=3c|s_~pm4aWP*HLyNd!Vn zp!Ge-j@vDvB20ot`9()V@%IT8?}JKitAck(C8FaH;7wKg3eaq2Ut1I@-b0p$5RMpR zw{4CMR1_LqXIq$OSvfFWQhJ66z}6OQ+XA4x1(CxQ8GFauYkkE18kK zcP6jwA;Up8Fmdo?Kk<=F&-rECmxpQAL8-oJ*ki_x3DeRQ-|HQ zpLBEVDdW?3b8H+0hqKb#?-^u*4Dwq!p6wS)RDb5v+sw~ z-<{1XWRz$B6f%+ZyxRfJaEVfYQGkP~qa*ap-1;KN#2XNz$WeRDMm>CkqJ3c79B8(P z9+Z-yP25>7xn7;H+r$0m58u(l3l&b=*eH0LgPLjH_NZINQ4uc?`~uJm4Guf<9Snz6 zq+fW9S9nBNkXNXOw^wvfG^Y==LjX@9>T+2D0rBu&jQ4v8hjCJ`$i~#w!_2|fnw*tq z`GA&~dW(U&{$BU2n}aK*?DlLaMdbwB7C0Djg^!%~zL z&x1{l6N$vsaEJ(qAml)Z;3&4pSntpvALN_I!Kx@i;wIp{p(tDQQj6t;I5Czb@xdyR zw-9;}#uD*vv03>>`smjYk%_%-{?iU%tQhgz#$F!n;S~c1`l8LWVu)NN17ttHl;xPc zY3j9vo|8pzc9UWBwpT29Z&SsxLOI{J`{&AoejTyp0dj+CWZw}2kHGqM$Q9r}Wh#o9 z{cSKxn*(Yht?fKaob8D0p*Y-4sKIBwBBidmZ>JzlU(RP1Y{51_r(vt!XOU=qDBgjW5R*1G%Cg`yU9*I~FE_UeV0y|?T2P+yo z@o;oRc@QAo@2GQ%&yn_PZ zIB7;iYz!m9pAqF19^gmwj`jEVi(};^KSqRiu%8bcqzyN;S7?wg1EPuz zgPwq8(ObhA#9h}%5EK#4fRzHh_NaGaG2fs7zvx~eNf|MVBYT|?gK4z=45b5EE-V%i z6~+>g*+uqVlmoVoi$Qi=ED2eq8K@zr>{$I6b{pdB&tMfEE-Y{#O=dN$cnAxMjt1>| z9YyzAv4xLH#*2aO2?nuK9*wkM6&AOMI5QsQG?XK9iW*MndV>-OPS#BZItMvCf-PzW zv=OvOFZArf2#*a7?G@1?{h-Ez<~R-PwL+83HmYJ0<;d_tapLxxw1H}gG=cIY&!UbF z^ooLbz*PheG&&UI{tz!MHr&?_JcGEmbM3Vw3y8YUh}gjgdDl_0-kc%JJ1!~$a+!#^ zH&xLz(wg+tJ4b`Av`LCyJ#!f9HAsKw@Z~g<>t3<{KI>l9Av9QLK&%Ucz-8qy$J3dz z=(R7r>sA#aW0lnd3*dsv7^N`^W9)zz=1AU(5v?0Uyar<_#zKs_7&9=&V+_RThLMR; z52G?hX^g@cJK%Lb5kJNTj5QcbF&1LX#h8IH9%CRzH;hb-dKi^4N@Enp*a7PoiTE)# zV64Gdim?!5F2)Ru@fZU!x?yBu)WfKZQ5s{1Fpd{v1I8MRr5Fn_=3>mi7>_X!qZ>vh zMm>zm7^N`^W9)zmLZlmG1I8MRr5Fn_=3>mi7>_X!qZ>vhMm>zm7^N`^W9)!MGDQ3s z8!*;jEX7!eF&AS7#(0c@7~L>3G3sGd#wd+Z7$Z85g@_+x1I8MRr5Fn_=3>mi7>_X! zqZ>vhMm>zm7^N`^W9)#Nn1~-^1I8MRr5Fn_=3>mi7>_X!qZ>vhMm>zm7^N`^W9)#) ziTE)#V64Gdim?!5F2)Ru@fZU!x?yBu)WfKZQ5vH##tvAF1DAqmeJ#QUj5QcbF&1LX z#h8IH9%CRzH;hb-dKi^4N@Enp*a3|v5kE$>W(;xkSrJ0CZWUo6#$1dU7~?Ubb-u`* z8%8EZJ&ej2r7;R)>>%4|!B&h77;7+=Vl2d%i!lRZJjOtbZWx&u^)M=9l*TBG5df`= zBEG0b`^+063oz(q2;z3oP9dWS|Lp61&4GhImSMmZJ115M!j63&{;}a`=!OQ(h(`H& zMMs1q4tp_%MtJ!mTNt^p+mKFsEm08U7LM34#P#2v^Q5V-qs6w4km$k5m4svxc&#VQ zhxF4Jq#V5_MRlk@V>p+TRAM(2hh~mgPYBHoVg7YJp%p41Fep5@RpHnl8qEn|-+d7w zJ7bW9Fx=}2?Ql3~y+1MtQF!?tG};NmhV$od>j^#a`jJ04Tn1}>0T~W=7NPZooceL@ z+vthk_vKF`{WIWW1nw}{HT>K9MA{tEbqe-WIghw6Y3hDBAGw16+xo;599|_3&u~5& z9;W}kJ`v*g22YV8ur3uU1u70Z9EcSl`bXu0?1sVre``4RZCw7&%_y^*II&)A4eENB z*#d?TWbb!?Ci;<;G4k*MGh8&qj3h49;rMvire}GjCv*94`>3aF*FmFJqzUmwGWw(e zeK!uf2g8P4u!%5y4o_~0Xq6QzENq&UC~V=p| zk|BKSV(ZM-9y?|DGBF+Pv;fKMf^}o$XQoA<4zbG3s8kdN&uyp&0tZhx9Y9|I-`@&? z10pseVa2eC7Q{z=8Bc9(09!$jn_ZQHA6gmuDMvr#p-SYQmUxfD^y?5=+jBC;AkG+# zkeAX_$o>*zip(trLZoWty86IRvt!kmb1<$CBA?mH7g)tXG0Q(}h?o)9;9-O(2qlDoZ{U zs#y96WSK4U5EfVVsU!v{*IuKrvqjEuIv^{F3P&X&_auUZLekn!lHQUzy^*CMPkC!Q z4BtpX;B$Dn8cn%^oyC@u?ld^vkxFQSyY^WSiUg;Wj7yaY1wMLimjhStVOeXRl|@mR}{fWBULZSTWi}huZt? zRg5rve@}XWU1EWJ#Dr@*IT6sr1n=2L95<%J()$=>ZFwsE7?p-ldc&Pa>;mM*_Ng=5 zK0L6)Y>Xk&!+`no0dslxF=ln;F?dXe%_grhf7UaJ{U(U@%KkZ7Lo;1rQ#N~PW~LN# zc@+bM;>@0!*p^azh|~QNYOgh}rS{x~ds!^42JDC}Wm9_|5*8)M0H9l$|NLXkp8-1riF^E9QCkB#!t%7;#8IlX^dp3CPA3!Lsymz zjoy}QtoE<+iMWW}UxKf4U&Gm>p2WoYp%D@>H_@DagMh%1TR9+d#t`+|KayFDrl zu(tyHx$O3+T))ex5;1C@*7) z<>*{4US=tlqjsH_*@NZx`jOwl^80_0qgI`l`GNhTZiJViS-qrQcgNx=S5C&tTAa?~C1GW)TA)aUUsl>A6P@;li7(Z9%#{Y75XkNg)7AAPsS z%Zx)4Fkp`VMSkKh^3(muXXEhC^dpbL@{+&EOaCH2+mC!J4*y&~@{3qr(U1HsmY?rO zK1_zpzYG1yr(!vJM&f0>vAn4tIdy+G_amp;pBMeesrvP@A34>3qVqj@8LEGJ-H$vI z>;I-7c@dVk^dqP4|JJ|A+xn5;$Kj(5u6UW>SpK0OIkmn&4-M0Jm}mF}*4DqsxAh|z z!t3GDwqd*sCEwAHTm$>x`4{=Fe&qA8|NOtmclRTwz85I?i+oQ%a_W16y?>GK>qq_w z>%admay~q7NA+{mcL!9zBZlQvKQRJxs@)%jIn|EKVNUhCN|;mqoGRv2zodmZ)z9c- zPW2lzF{j2!rkGRXHcQN@afm(U)VRzQb7~w0OIOG_V;`EMsj<15tCN)@eh(b62;OOX zF*M-2c35ISzF5c0HjvZ*ktMhhlXW$DC<}|~`*G5AGcg-;pL1~mb}8%?MDZ$aCtdnh5HX~d8A&SN6f4s zd8n$X#lu72aH(?Q$SGF1oT_T-@d&aXx7zAt`Tt9}I#YO*7LPim!7E#Nxtl`PCyuyz zxzqo*cs13@=IC$X@ytse@oG*X@3g;#r=?Eb?SFNr!y~VG#H*$IZ|TtHbzAUi@p)7S zUe5ZqD?D8BXrWoIq8Yf8;nkoH8fanX=;xzmVQH#n>lG3TtEdH^Wal3d#ena=9F0I=9}DZ@V9gvM@QaV}3y(%C=!i8?a{KEB=oda7vr|Q9 z;o7M}H;Ts5=;aZbdO|aY#MI6A!2{Mmnq=SjIo192`sJ^btuy1lkjkkh(e=8EVd@|6PD!rSAp$xR@|Cfqd%{xU7}L8VEwcA3CqEMH%emc9+6Qwdb>xk>p-NPrNOX zzcmlkwO1J`omm&0X+8DBLc#77k4u&&Gabl>)KeJ9cOWUxzQ%7U%)Au14m#uJ=(z^6%n(YT1 zFN(JGm*n%qTWclHob0WKls@8)b+0B3f3W$@qLnTqq#O;tc4(Q>*cC+A$?(t1vWqr) z%lR&+ii9k`BOSX^@7+6k#qXCXZT9BVfor};E1UTSWd>f#DwDY0wTvdeU)fnBaAV?} zr`Lw@%iB*$xbhqA*@g}MTTQ3ZvAeag<6QgdShg*%IPauX7+}lw~u> zGLm+xS^MtqIqg}8U6m~O{jKMI=gTOkIXo@aR+&09X{_z%QR+Wsc4(N~45M`yb$@xO z@nv(JnoAFa^2!FAU!k z+s~qvu5HH@ixUT=lzh{c-FN%=+osUOZE9*^+g+3oq#60tk2t?V+i=;Tj7JO9c2JQ4 zb}N4Ak`fCt3yx|0lTFn-^m#Oq1U854m!Rb9u>V3qPNxF2-KO)jtUu*FSMO5Z9ke%~ z?Nwy#L9rx1(K97`=hKpecfC(8*PgYk_VEOaeyN>_ttpn&W5;?6{sBNBizq;$G>FHg2$_}p$-k5cTJss$pO*eGJ9J_&J zvP}0WfkEj*_)i}GZlvjAXHs19@Iphm(qMgKdFP%}C89$rLQY*s)|AL8o6T2s*X82S zaoU4AIB-~x$Nh@_ji}*P~pNqQm2^v)173to7b=XEq;$U5sFQ#?($<#-xM+P z4KCbSu)1E?$cSoJ)p2_E=&TRkBU6wdOUn!nh~B#_q3%dDn}1%HM0rq&+q#*k2NGte=4mU?kmAP)s=Yh>GGWz!K zk~S=nbf~N_IDSD$C;EBD^hw&EKbnrc7h*S)M!TB6MzDmRzpZZPjO+gLn@-Kz?whJF zF!QurhjNi;i1qaH-IfdDKDNwJ?v|}mD(ER})MB2jN)Mj3turY}o$`>siF!gr5XN{wtR@nTkuWM@QPg-edbXiFP&+TD+;16 z8fKi|xMX7gU1(B#+s%)ijVKwjPS1BBRbEtk zuWouQqGpzw?|aux%6C&4Z=2;d-{&e8_BMxIMA>)w$_dE4-k#DTcA)KWl!CfNcWL9h zDzmcV(%FTg#p*dfmR?}A8}H75Ey4%=S=J*yOh{(prk|~qHzRU1l=CT4=6lMFosa-&f56H z@SOye&uFU=)K|SSIOX}NbVy}oaqQwX8&f^R%ahsi8NtN_{83?-aOn*UfeMOr_ry z2Ghz86(zQ}zG@rfek|P3sn&6DzM0d>K?dg}VuCDoS|Ew%kZ<$9Q|LVzG z(P~Cmei!{wajNF7)6R|I-#q0Ld$L}Yvug$V+&a)Y$2jiZ@JcE{o%*3&(F$*j%)sH-1=ON~E9lNSizF z?$Pqca;K(ld4X0`(w^0{vC%aWmZNMso6*rngc+bAziH}5-_zE8bsA;Y+8T z#!)|2`Awrv`WFf^KZUJWY`9N1Y^S1oTf2f7r3*dCsX&W=+rhP@E=WK0T#NFbD_$g` zT_b+Eey9@Wu%-{_mZ)@Ga&G96LqZQXG}?qMn7{Eu>wrulv0`_<9yiUglT!qA@9W)o zyyp?63q(s7E@-+TlGm~C<3H*nbS7icp^t^Oo1A*mlq)h`nB9q=@Ipw!OSSIlsX>P~ zhCEiOUH5Zpr(4k@zMw6ew;VRkjLUQh$aG1LPl#W%--%|t;K{6yMJIB1*mrlmtQnZ` zZEVMKKI+bab(M$CWM15UKwN3tKkCDg2bjMNEvUP1dVKW!A&a9GKC|V|`tG=vA;b2{ zTWR&y9rU^zm6!O;W7Vv>9G86M__~kk9QRSLZYgw{RQlTXgxoFmLCp()E-_r$IB-?X z!J*HW&}n~uTU>Z^sc_ekqlXg4%saQV>f-AL4fBlQ^lz!>Jj6O?#~clP9?|&ig4bei z$Eb$NE6ud=FY~_SOc{3L>)V}EN8U~@KFJsr{PX50bkb6}niS*!kk}p4&{E#)4JVtwTCQ)WGUqB7t*PSDimemg5Z?7}xm{-zT`pu16E<%_1 zkEpaX{(e+T|Gv3XX`EH#tx$H|>2nXejG{S7+_?84?|yGRKw}kDG`#d=6&ZUty_xZE zS9E%mW_kM5r09{KRlcZw8@|bBugt}e?}My%gnvBhrAU9`nE0+$rsSuX^W1>TN`-aX zKCf!u=F(Ip?(*x+9$E@VB!WBUm5n%eFZ}n&`=6r^Kd0JYlm?`K%>7-Tl0%H9i|)46 zwqz7M;ooM*b9v-Hri)JV_f2XH)tZ#NdZ7GSH#q|>14i4;S*hJaJrdXE9Hsrb_Wb&h zB{FXtQ!2WBj7--?!t&9 zdWX0JSB6To#k8oc3L3{JtH^h&=^;uNGE~{55DfhovaVPcTtTty|K)X|J%;zv%zc4$9iI;cWPwkbh-<@o)yuWWLnuOZI=6L zj<>Fj_E4|5XXEDdeOhcgHn~1FPSL$5d86qV!7-B4yr?>e(uwL|+>7Gq$ab;i6T>XIH;y{PT0P^MXO};)o0dj`LoDWeOJN0ROZ|tiZe6} z78iUM=+qydUGglad4uih$l~YkCchtF>YQ|Bd&-OE+>W~Qbt{fD9QgtQow^lppNt@-at$vuD?aRXLLL_$Ms=c=V(Y zRmR$oI8?^G+7O=UPGQ;p-_%}KApdYdr+I$z@LOw9b#&_SOtFP&a-x3*u6!v}W2JQD zR%z#tr57)IO7A><=#ck^ag&dqbT+)zHeiYw{bi8A;H5URj+DzDxxlZoUE4EWZQYu^ zN^dmn{o3A&zkKWwI;-u9!-zxM3liLX-Z2}Rltb`?TyN*gy6W~=e&XI+hN0+X=fnkf zU$)fFvz))Yv}ugTEvgQod_;L@n0I=wYv+Sqi{+*dw6d(Tp5-k!`2SJf(rI%0F4lb5 z)jr>HYplT%^N{2RvnGH3`YgcQ>sQ``BT6*~cW*fnwM;GaeuDEMTf1W#OC+2;=-eq1A+Ntqyl`N-!h7-HMY?5I4phiw)7=i)I%U+a)w8!9``psj@Q(B--PB9IK3^h<6N}w*2Ec`TuuD z9}r$rIA{ILbIYVRYjlXue05}d!4}%E`}aH*Qke9#(R+;}H>GVjA@IihvAXrCo5ico z-Y(a-FkkdLH_Kegx;CTw#YTta`J*$V_$;2LB->t?Vmte7qe1N^4eR@>-|bRQaO$}_ zri&J~YSIpi#g#`)jvcT)f41yr)Ul^$7{w!(94H#4$**2BM<(qDz0PX*jL+43{-wT3 zNZU1k-synN1&Zsw7zJ8#uH)dVqsrlV;YkiiA)2Vv{l^+UoLcZJ2siInk znIU3c{Nh)pCQHbR|GjVdm-6{vD^vP_Z=y-#dE7ts)qcySRXn@Q9aFyAAr02%>3_Ii?YTcq=UOObYyC+%2IVypVk0z^K z>Y@@VS$R)n+QZmE8*bm(^W6q_eiO^WzqIE?^I>@mVAkx_1I@y*o~gPSa(k;?|j^+cy;=W@dYmV zLP5Kn%wJA;<#Jk-@28+tZhPJfy+0A7I_ELF+nG+|Cl2WBShCdBdT`^dRpZ_`n8$Xm zZmhU2P^L3y$cP0}Z<*~gzb?$moc?{QKz*-{-6KB?7aKaLXR`!+nnkt0Qjj^}Fr(9_ z!zUCJqP=?aL}ioUe8a>Y`la=omu!x-ENr_rnCAZ2e9(E{;f-smw2mpaoqgE#ZctOt z7h1OD#T5a$XK0?jPqd-%z z^YWLxhbKmE*IhT|OU>-&Ln4djwP|CIwqS+!^U|Opn{Z_OyMf$fPTcrF2qB)mx z0%|s#EhEO&XxO^@b}NMZBadpUq^D6Sl59T!(!;vXjA|JInX zP{}s4hu$JB$l%XbK3BnaMqzuN^u(pBZ*QSp^1d8Q*Bf}E!TjndgJ;8=Xv*c3Luy_W;%p>!d0mx1fXjT3iSH#+WNQrv;KmX?;}>kGR_ zb}HUVTb%jvWA>>zKYTVm64N|7b42SDcdHk+jm9RKjVsMsq*l=F2EGZ`JE-`~X|BGM z*JfAu+&Ou=;lX#Unhq>|IBbdF`4P^&#%su6nZRKe&M2>%v4^U+Xc;%NyKlYiy|2)B zi~X7!ububidcTpIJk(Qr=fq!WCi=g+Cd|C;vvwyf^Uv>BhnqJ%-!$jlr-aIz@y<3% zY3-}W+}@W!6LUU2Qm|#s)=R7SJiap;iltJ|AK!mg*emfRC_*pqoWDi>%92pI$CGDzwx|W7t%)QsJBc zm+!{2W@Ia^jEx`W8h>QbVt(N-A0B^QUp(yn$CLVM>fbb%4%zc{?4{+G#~oTN>AF5L z_t%EWO9ySf`)6Kc_|Mnht6Z8xl9sOEOLu6K^=kNF7k6pqyC0u-hbU&h3c6GsV{`D} zLf>802fcg*7@S&(SLA>W{l(fRa*T3TFtt zj7Zlkb$XoZfq-AHSUg$FlyyCga}{`?g_E~!R~y>>x8n--y*K7PB#%dY1m%oH3{seTZp3w^D+ zQz(K}Ud>~6J&WsP7^U>4g!76>7hQg3jDK*zqA>qOKjYslIun#9+9+!n`J=7gT6w!o=DKMw9S8qu$ur{{R^WSZMLtUJXf?Re1U{O8O{3Ue9?#9bN09hf7P2(BiS%`@i(s_H#p1@i(z*j zJH1paq*g03U)YKs>Ppt(2h0Ilh?U*9F1nqKZ?u74h`u|29rQj+hN>7gZgt0b4K9pk-8 zuD4%Pg0xKL(LVGhk?jgL>-r-Sq+zjJ`iK3Sr*Bdi=~I$CGE_&|4>pmc#Z)P$#Ou!G z+g$S|l~(a&%WLO-gL2jw7mr@NX5Zue@oUEvEVk+TzRQn zw!L^1{6x%STJofxii8=ZXSy%VPkxZB`0R)BTwmLmL5jm^&AZN*gp2H6XrFY;aFm_$ zwok*wH8UI%wiyMBFGx`w?6m9YsP&ZwsBO9L;yU5*k(Azx0jl%YJ(HTb_O#dIz&uG4 zV*yx5MAchWNSYP=Pt>tsl=SvN^LA^gUQJ<3c7KVzL;NIf!h zS!x#G?DBb&OTL-p>3}=(`P5ps7pvoTS^ zef3_`6nFh|+AfO1n^(q6^igRMOp%w#m^OaRSN^zwmiJAc{~TKU_=BF2Zm`5;$*DK* zy;q<=-yZU`F}Jlvs4`)k{_)~1jt`sCRh%N3!^Uji^mVap1OH}y=2zQeOTO6@%KJTy z5A1e*bxifeQ1!Wn3;8SPMam(yBfqRTx10Uq+V8a?=~rAbCovARZ?++Dx~DlP$8^%7L2mEs)N7szZkwiUsyAhi&HW*#Eu@++ z4pmLN?fcE7sy`sl~olouB9cj zP3gQ`#DM1C62Ts{B{Pm!JT3RW-*7@;n}h3?uIOcx<_K)}o@&~oXMD4@W9jYmxsMCS zOc1gw6?-fXrA(*g*sC5aiYi`i@o1I%z3O7e$+h-3`Ci->Gf23yxMF47z+;B{KWntz zx;gJrKyO~@Li#=721{Y(!+*Nq8d=guE=&3(@}Nsp-l~W{G}wJry8b-*(91_BeVs7m zXvMW>KN!XBd4lzul0zfj)_FMvJ{PxsvAJ%o_@h(sE+;W-gz=oizegoIr59VZuUIza z*|o;Uxf24m&Rw_7JIuze@LBXI@q|2Yy|Jeogf1vb4->0&pB8X%N3++RZvz#_b=O9Y zdi7n*+-;%Fs+DKI?05UPTCU~F$2LFRv7st?l^4y6pFAA$ri4*nl*xB6BHN?jqH~P< zG}BS)lQx(=DtVROa_-gGkU3*#tPOs4z4)A!+Qx*$=E7~>?!j}irg+l$47L0HlfNYK z>$E^-q``u#**Yt`uZl>Hu7XLg+3TqKCk9!F#=7XAW#HW?hvBAl|HX^<4&J-v_5F*H z@q$vcZx#nO!Xj4m{uvn*7jemYI)sZqErhJUA3jb2 zmnM{=^mlKaM>b4p>x~ONr}c@8h_@?cEoYejfpNu7y5!P+B2g zK8s2_wO)}u>FAm*a_;G6_Vp|O&(|hW^#hI5Q7-h3Z)r3`QfZ#~K#JIYg|v8O_YyW2 z_>x{T;1Ff1zgB0As$a3TFqG1RdM4wjr!*Ra^4vGP|70@;Y6?$-qTyvks7j5>?0x4_ zlP9|r80B3D7EtAj@(E=~+k)91(UEhWdOoi{y6I$t#HJD6V%nlhUKFIX$GkZ2RsJ}} zeM{@lOSCa=Thlkq(jF#Zdq}n7-KLs`fCX;n?-xnFof&NFy76Az{ZH=Pj{+ zKgl}rP{QE(&RKgqYeUEs(?zaIJcqYoBlEnO<(^(k*unu2khoWr%I zqrKtv)dOWD%8yF}zR7Nwpj&rfkD2<0+u0>+Z<>cS7kY0AUMFR^=y+4}cKu3??iJ}( zwM~YvuWnWTXa@gFm2d2M8YRnbYqI%VZPK^l5f{c^tIYRJI&^05O2=ZYE1|`oat5i* zXF5*tcrg4-&WhlQd8Jt%Oyw#I+JHB4GYfvHY+K6~uiDO?>q6$Wejc#(@{ua4y#A&i zn}2q_H%i=(`1LM6a7yI!#u}T(Wp-+w0ZKeoRwWo;~ODlPOvT^AR`Zc!jdFn^C7Z0nn4=Eb^ub3dMK0fyL z!_9$EW<5cI%aq z-bx{f;|Jw~Ue1uyx#R!jWRza0;b4&*m7|lA=6}-`mOoLLcy;wotCvz%W5WM@7*?6+ zcF5&tRAp3z!qw89Hg!i7bS!t~)$aLmchT?xbsW0X|IWQFdCoGd@!Xz$2R7`Y^7UWz z<_L!~Oy~^}8ueqy`!RP!c3TObJnQ>;m1jnF@bQ->H^=wrZJuS5+&z5J zsM7)d#aqepTZZ@_I>yam(_P>&a_@CVmZdB=7z}V;0lkCW>2g*;_F9m2ClCM zf4e@}{o&xb8UBNEb}Y}13OD#6e_xTI%#dKpjtzH=OPo6}wri5Q>xUn)>P87YEx%Ko zs}!Hk4{e)mY4TP5^dt7`vk#YE*pw!zGXH1u&5#>UrF&Kjoyod$tn7M{>-9;NOtr4m zlA^LkrRJ9v@)xI?I96=Esp;*M)S+|f@#Q~TI?P56_maJKG0s#%_5B*B`La&cYWzW4 zxb$1NT0ddWX|Mf1bH<1++ro4?K$XM4riUv$?)1j^Px88~-e9x0+y6lH^udctE^KJO zT%=|(KKOMiy}NB9|DM+NX;rscN}|U}oS5q8Wl^+y*5!nva}yWuUgt7dLg1TfUg$Dy z{VQR~OU5;unHVJnojcR0U#~=yJ>2?r-uP?hx#I6PJ<7Oz?k+HA=$^AJX`U9p;10dX zuXF9K{Xf2me6(F(_AY+IJLRr>!;XJGIaz7O%fT*d%Zodf-)O%VHq)TA;DCG}7MWbZYAjji+@PruwN7 z3r-zbd;If$ylU~HY!UqzfHR-jFx$k-Mw)vBIhJ>J%%$KA)O9N64 z{Y)<1XMXeasqSy%wD}y@&ujZlFS`2MdPbr}4qYr&TllbesO`Y(Nlo#AHzXo@v|N8E z6pVWB;8Q*|L5Vrzg8#xN9}~{1w|@|}amz1`J34D$e(sJjEu%(lt2Ff}zH^C(e*ZE3 z>bU$@myKDrM=wlS%snE>?v2s&5o!wuzISptHSG9fndFk8@<;9-P|1-Uxp1X9O+rKH zo#T>A%dSpeJz~hTDB(dj1&Z=7o-bHqdqQcY#5%u^$z-WoNn*3m(>wboXNc~b(e8bJ=_&mIo1R?TIJIQO=3jPJLuE(%ehR#0 z+EcK9YHCT<%#aN8JuOL}ZC^e~uI(ODA>P`m*rcud!0gb+l_y@9-zyrk>bz_$qx0h4 z`N!MWY`S&d!MkLzO7}ZA-{$QCww>!#ltspfU;d~0)lYo=<*!|`{m!EYDhfw6C_dS5zD{hlJOvqR+Ae3!y!Ymq*0nC7 z>+0DjPhPtt`oL#kuslsC$$J!-1UuBIy=@^o>V%KRFy zzDFa=(;)MO=0ejW@>W+iUVoN7y;D-WP}`{XZLZHb)%Wgm3&&60J!tahYgt=sPA3nQ zIxz7|by-W*5$m|FjkW)c+o!@a0&)%QN*0vAex^LI!Y4)Yr+n(MR}~GDANkIe)118B zDtJTs`(2TzA4yi7GVuQJt$yH|9)q#*FY51Q+uaUavY{-|V`-S3xnb~vz$~3{1J9Lp zj7x0Pb9eF4d{_DQ!oged-ovZ^_7f+Ld`3V^fEoc-m+&+k?4aUae)rDkYy| zw`(V=6@GFOjISFbHnl-`{a^Ag(s{;wBdddoGDa)BWRj1Fo68=*n=0)7_}S@|o0n}r zNDHFs@BdbL{6(L?mFK6WXU}z-jQ&*;E}io#FzxM2xt~J@U$;ngh~Hvo`EG{p{)u(J z!*aK9ceymqb^e-sa-i#W5o7jd^g)3ZIDYl|4}aFq3oB(&sXeMQV+k?8Fn`7 zNOSI)F|>}8ntw_EU&{k-3&PBSZ5(gAajt$u0#CHPBN#gp`aBaBV|jZ&@_aOb59SE? zq{DIl0X`fM=`R9^^!N&yhU6uHD4l3qXe3AbN+NkGmV07U1#|`bF@RuX zQKqAK?*Ku#3*%xW1v%t74R*>^9Y;`bKbVM5@Do0-r3qs_#!8IE81pgaU`)XniP00I z9Y#Zp>KGXq+0TiwgzXPHU~K@TTd);yHt+__YXB{PmttNB$ON8?c?O_4@OaDv0nLEB zVa^0J1+Is=GN1`?Y0QNIje&QN_n}}b;4I(`nAZRr0Y?ibkbZ@LhQM<%&j6eWJRb8v zz!|{ZFlPcz2d;;?GT=1e(wGYa!s`Ih4)VSeYz1ThM|;_$_-X*h0x!k95O6B+T+A~7 z^?}D@9ta3Qin?LW1ca(3s)xBUpfYf2%!L6Zfp?JitzawQNZ<{a*8u7PFU7nNa0>8T z%rgLWfyZMW2&euQ|R8$&sVL(mb9dQ2>K)4r0J0S5y`r$_ocmw7& zfT%u{VqOS{>O(H(8G!Jm3IeJ61XJJ zi;)42_Ax~q?bi!)Wuj=`O2i8RVeO7+F6J44sQ$!b9tr3SJP;7(;6>fAJrfZ6a#20Z zl>sGyOJgn!I1G3P9qR!I-!h3dU|s_#4!jieLO^(*AexJL1|aOAA{vi*AfO0vH_VxU zLxAgHt_%oGpQtqE!hp~;iFQD{NaO<`G!3E+nAZTJ`>GW4LO{56L~}9E0EDV68jpD( zAXF_;H_VxUP}HJ&m@AVgDvh}?AY_54Cm^UIXo!)45rD9Vwu3xB26+I3!bRuFL_+2v z^9v~f5mD!Vh@(j1zX2)%G6h&}2bBbwn~+!}zlZr@lqleCP^pkX;{?Q8F`ow4h_8l9 zh|DG|S7#8EmW+8l=4d}_;c4BGz}$=_k_j@@5|MgW;tm={7Lfy^)LUl|QJ!6;$< z3Ncs2`e~z=-(Vg?;i2#=F~5n!vx7zo8DkuO6XvB@9tn*aGOuualc3Q<<|7WT6?1ey zq41ADBZ-V7)+Y@bQDm-Q_e^MHk(rF$t3xA@>2jO5}} z{+g3K56c_SjR$58j?ct``9Kk(?j~EIFNi4 zC5J&dG8vSA7z`sbmkJ*`0c5JNJQ4<}$aKL!`*~OBHbk6yPFw}oh*QsnC>X@4=S&T_ zhCh};*X+E3i_hnB@5jZXxVSYJhrW^{{Fhw3l8dAM1pZhiluM5GcW0N+;Nl`&?zeIA zG%mh@i_<)2*}y5fZXW0qW#W`wTMHW}79-Cmr)0#oZyw=6zMA1daMl$*xjU4&MmD4c zdB_+#LE1YuC^RN0oZXrX5FK9JdlV>f23cfm40*N~4IM7#6Bfy)4RX%&xMtE3OUeJk z-kX3&S)KjEgCfL*Ow^*NAfrY_C7Q4aDv}|I%t!)JL2cbuq*_?CJk}X0 zJk}X0)S73jYP?HEj6L6NYiUR3vMur2YH%eZa?y?~@z^Tum||-yCDakv#98vSM8%o2 zboTtk^-Gp4tVR`xl^BYQC2}^~5?PyViCoFH#IcOomL+3~vn_EbWVR(lTAE9wY)gog zZ3&UGEg@32B}B@$gh=k@HW}V zy5h0cAah%noIb`&txQJythGR*sOR9#nx)phGVQj_l<6F{V@95z!xkmoZL8%JC0%XZ zX^Jywt+fcD!TD^J1uB4>v6DoT-L_6r2UnLQl^F)x%z@tA&cAnlx?@ z8^G?pD})8&dNF=24_plBB&z4`KBPnDw!ZTCF1ceYd|7yA`0{Yg%uT#da5DnHT(LWV zMhT!6zY;trgs;;f4&idQA-t{^b zbd=ko_mCfW9oVV(YhWJiIgWyT(f5G(lXVf&Uuo^WXU z-6^^ch_c zgwIUAZgdb&shoZ}3vzKCY>5R_gV^lMD{<7Mo^B3XLg~f1GQj9V|h%2mJ z!$-#-hoBg7)h%@iv#4RApR>yqqAtlV*Nybr+hO~1DzMvWZf z`rg*#?(NwBo8Q}cC~SN}D7<{E`G5Pp{ZRRkA6c(LA!lpwO~1F6kNAc60jM1AM}u*! zdi&lM@Z*Z7QGW4#13y}ET}zX|!?L&U?Hc9Bdd`RQOll=&)ctw#qCbVeT;JPO2tNq7 zt2KRqHQ<8frY8sGzPB}eQTW2}^zgI`C@-!J?!>jTUD5bw(fC)^dot30 zQWNXtG!Qi*q_LL`MdHus1ckc`FKSV>bfem7L{4)_I8vjel)+*dU zdnNcF24V@Br{H>FTwjZX+0;;AZ>rUF7!j>~9#-gFRL1{VnW!+)f+s}fV_}d!BGR;? zD}c_1CX;or*VDSAnUx=rIHFh46`%fWH2!aNhDx@2a>FEfu=xQ*15rAXQMyH<)U8q4 z%qXFk!!L~Kk|d@-TN(dXReYBxW9F45Z=A3Xc)SY24Y%P(7-%%lMTR8DZ-(s^d`=Ax zZN@wLCBcWj)h`l%HL~%ezPB87_Ns%*n%)lHa?ly8D$Dvry4$1UIvQS|xVi5Q2->7E zv)H`livAiW{*t=|(fISx_-n}6NJoWKrATtc7LluDD+?2@ZQg>^uZ(|z7&-DLl*Zit zTfkBzofC8`OaoaPC@vW>a@6QCr;i;Mo>*31agIdB_46yd=jvyySDI}-xUbQVS9eeD z+KSAC`@skD-dgX|TR*1yE2H;A`Q)*BKR&&q;c%?Pf0xp46Jq@Af&NA~H`?0=_JW?@ z_G;ZN#Q4Z#`A=@@cdMfX6$tR2FEsT<&zbla@xDVeZAI4t*&pJ150UFe_!~F`KkNq` zs^)!w`7pnZ6r=qMK+^pgNc-hL`mYC~9W1I*^94Zm!^Qv)0gxdAXxS*RSYQt#C|f6{WM#Cj#Kj*FyZq< z{JZ;cAQiJMPwQZ&oqcY?i`(4kGvDGfFZG#U^O@iEng8H3b4=_GkIQs!^W{FXt20!; z1bvbb^Xitn?7W>exQ!4h7sZm=SeD(K#aUK{If$j7wYXssX6s{EIpDNCX6@%=+8(bA zKxgnx@5^|j6$vx*`^L3)VcqPdnJIU-vF!YdtEWv>H#IDpy>Q`@T9k`D^xwu7heD%^ zOVCvtfwxeoq_}ttXG%tlC>c9eI&d;yGJDzL5_k74@WK}#?nXW7!@dL48)Y$2%`y|h zKOWAPY;k9V*k*pJN1J!*NAR&`@Ra!y+ilw0`4TFb@F73S(vE`AU<7NVy?uI{FR^^4 ztL*hBTAv10T*s3Ax5Zd1vQJG-d3ajbngW4YCzyBY74hjBX5^b!mfc^XdvE>0c{0KR zUnV@BEvK3O+x804W1*Et#NPUYoyGKG)-8#+ujhZ&A8f~$ieq`MyLO_%a`y+>Pvn0H z{}7k@WZ(GV_gC(9-%hWQc!wY_8Nc~+?ul#|73pZ_Cnz|ykrYjTZfYh*lBInbJ}G&s zY1cj*evOm~R=n7>t8d$HNLzUOewVU2v5Ln10x)6n~h(Q+L@h@kH48>L02gDemLGQ{q_~k zJ@!t25;CE?!A@^RvMX{+cB+-^_@+lB0b-EV2nJbig$PF0HFyieMncw~9cN|T2rHHK zTD*E?b!Jl75A7R{R|GiYazLVq%){}%g_(FfV-kh2X}A3`rY|~bpbgAS@mIQQnf{t_ zmquX^?*F&_k3hBU<8gRjDu^Z~ zM1cEAVT#6wq90GMpiK`4o8ynMh41^Y-OzxaaN7%L+k{?;F|;rtrANTaCn1j)b~wUq zulT%JS!`cE?^4s#M&*)P;nercc&(*7C^NE&{uq|++9%k&8_i17u0FvQ>LgSqZpw=$ zCShV0Go$RpMViK9UX`DTND~IZ!RB-E8cj?sh_pNvY+gzGL?5B1N<}2G99|Iu^(`Wa zC=8&QK||AZ^i4gBL~+SWnodv3v@VtC5okdqQJO~%E&|RY2b+Iq2;ewYJjxY1!4@h# ziLf@*foSeZcA7NRDe9AuVof&`1cEJ8d1|_WLIm+1ot`w;=MpZco^O# z1Y368!(ez?>h;8yGTin6!+Z*^(;Qa`6V`C$Wxz)0TR>8hi{yDrQc?0@Maj;Rt*K3Y zp=~H%n{mv`%EUYrz=}XbGbRqsVD|11n*tJ^$(XmnEcI=ZF`K*uSBgMU$d#IH2!7@z zFljh~1f_=HW-o!^a25z8N-1hXVJ5(tHo=leu$fJKG_k^D_;}tl5N!UE631tDjhBya z%K&hXCT60(fS#oh>mH~YWd)IOn}e%)A9ExzIWIDI?tO|%=w7QH|%TPUBcGrs?>XgflyCh0>x~*EaQrg7KuGFaz4GDe2 zU{6A`0SvdD4mVjinCW#5i!1L&H)-?bGKT=-*A%P3s`xh)_gcZEP09^vD|}oAfZhk8ClD0 zghTvIW|Pa!R@I-1Xwn`*y!O~-k;DzvY~BY53vH?j5@XSDPd*CGz=a4&oFefu5F$s0 ziu`CL6H)wMofoM+*mkX~_ed>@N!g5O(@i0in#m^2LE@V&u{O6{JhN>T=Eu-02{!L9 z%qIE#l2)E8@aDQgh=sPP9Yy)$S?7dn+76g$+7;Jnq+-!MQsmRK<706zfXPaGPmI)Y5z>ky1+-aB{%?hv!Iu zTfsJU3`F#dKiJ>EPK6N?(ZZCOF|ej-1@E zT(Wb!jYgWIkilM(>xAS3OX6b+dCKEE%nGlJp{~fx&+7d93^VV}KIqVJqCfg^4d)@H z*$InXqU=QObfpeUH0`-k(0~SPz%AIuVXD}j6xx)*q%G&EB8+g+t;x4cO%KHYNn^VN0fcYA@3UkdX8`_KUD&g91P=`|{$n;G{J6_Rl)7nO-WTz-PyssVN_k?U_8?+-( z@6h-=iVrPxs!S|uLyoV-B)7@&A0ufun0A4E>C_5LM}gp4hv2_R5XMiq?POadq8*d+ zU=v8~3zn99@9K&r93c=|tZ(03IReUjW8;QqdeJ2gp zMlm{fOj_QgD;aEg4*YbcB;54pW`26W6mum1dYs)d%#FnIA7@8|L!g#>;2K}iE*Su( z%*bf`jbQUt2rg04u06RG68NV%Lu?2mn8HTz3B<-!Bpxhei2N3u6izf3u7UwPV}rwq zTMIckfniZBNFQrpK=%Iz9Wx}#?n7+OY=pIIjzYdj+Z#5* za)%Sj6R>toTcuC6MS%UjV9Nxo-hlo}hhC%#!&A78okXDq!8s0rFU3-KnHqJxLm*Yo zaNydBa7bNhsJfBVu8QfSvNb7HMCy31THbsoSi%YIM8i6K4%>u1K3Uc;KB48wdM>~Y z4R8EtNb;imj*4Hv4^pM-H7w<>m8IH9{P_*ETnYuSiuLhbP3`?R?i#vr`;g>~{rhk1 z=GyHvh`NEBo=g(xVB3uPSD^hd9rO4TEiVO|&tR%^%^AEpnmY2?^{!gq)E!)UK_uR= zDn9-8iOCy_mGPIDLEZ3AhcO$!4ww)bG-rrM#d--bUhxY$aZFFXuwR>)emj;US7A72 zgrfT&5DSja-~jhuh*#P(o1%$WAv)_j;a(7I=3+EHA`M4sggT;e9h;0q7>1Tp6iwUk zLGHv_@}z=rVp`!0%d&-IdlZE;A-^jRO_A>p7AgK{3w)TD$kedsY^2lYg3qT|?aJb_ z3nVG3s)67oFF_bF3b$>wJSr0n>lm1=V5qgJhpi);I4R%Fhmlph!)6y!rlr#KOk)mr zDe@*7age9-utJIaLmpSOdz)!x`ZgqqBuIc{uR^Xx&;_n9NPWCZD$|h;XIE87ThSmV z2Q3xr8G+O`vPuqkAHloQ0$(yj^-b%=(8D9WprGT+*OvOd@%h_aK0k)f^o{H>=yG26pn%PRS5NJ$FHl_x4=2IpJ^7Va}nH5f(7X1gTrYKfh($9w~#_(C2rZO zLTd*GMSXpyJ7a4uD}eFF@8HP@CDRO=KGa&5UA&@Ax-1nXPl1e;4~;_n2`$@(p1Fyd zd<&LkH=GZl?D$a!nF%YDswmAnM8>_C9b_-#eTf!VT2=As@Z)VE5AM#q6f z=`v)+FVKxOMab1chh14=yWWWvW`@VIH3}(*+Ikd?*PwT>wPA2N&-Q54r&WEyib|!Z zWzKME&p?7>y%JoFVis(%`nSke@CD_avH5q1CB~IXI*ytqNsf@93#b5;u z9EP0bg?X`~*z-Eb_L%7;p+@6ylmhb)CPSh>7k6YfndNa1xR|NvC|dbJjt?_GbCiUE z>5@!6jV3T-;*goUbJ20LcxopYBP2|aYax@6 z!c3bso|+Pqv_FNHYG}#?PlG8!*Q!j}LaUw{B zH5p<>q-xv=)Es+X>@YKKmvPL(3>2CiWu_eKm(+)YmKYW+z$sY8c;SmFj#Gbu!7302MwgQpnxjZIa+QD^$NtYNRo%*dQ5ZsvUA}9k@xNVM26`7*Pd`CD~{ziO@ zPbCoStGvEVX}J=<)9pw)Zra|k940&Dmguo+MQdNEs{IdosqKtj^rYua->$Q=kC}gA z6&wmWL<3b9ZL zqrKmQ_HmX-@r?-zQ>hDKO~3dA6(lYwv}I3;Hsh-Xb-K;L?+hVba^U&sg+JVi$f27B z@jfosX)S~niEpfo?+CVhhA@ywJbT2I#9>L|pLvoP{!`LLhVInMM&N6`1g55}Ap!f-;BcXrz{H4b zQ>=aH_2E12BqSt2KO!1`4pSSR4g_hDmzb^g_N%?!h3|o?GQOx&r{Y92^gT(7_$CbR z^1`yHmOcSuF;iVhXXI{!Sec|_I%FDcU-eEM!oDr$KXUQm5MB7B3qdl?OJdTHoAPZ? z$kCFm>Dy(!A3e& zhw^TIi|Zuu$%WBAo2%ldOXS&EG!a^xiTtNFLUw7?E~_IRmwG*z6!@C)cn+@Py{;yf zpVRez-}i#~Nd+AFQZylKSB>#CJ?Qo9j9tzt-ixD&eC`Ztd8*+gl-(C7GEX!rkK6Cl z#%MfW*4%#xw=icIJdDvCJO#yLr!<^df&SCJRejDbkAErYaU(pK^tgk}P02h6L5P=< zt*#FsqC3S)Z4x77slhw;0_JALYqSF&1Ej-a@P;{XcOWK}j)1rHkD($gI(W4K-S=HF zWmQf;^yGh8;U;(TnLkCxR;yJ)I9oD;36ERU93vgzkvSP`fws|Iyd1;{U; zVY0`_-PIR{r&Ua@xHzz&B(PvaV8O`1qCo7r`no{m(5?Y*ib`4IUXP|XZEtX zfZ5klyX1=5wXr2j1J}%6*id)sVjNH~*Bm0CHubZY!Y&3rYB7IN{lfXR^J5FID+>n@ z@-?$#b(8C^3%CgD8|Hw7mV5DBcl@4-^3?gpUg%f^_}t{9V?pF&-HpksgGW0o1j%!N z&%atb@a|WxdF=xA{BTC&%|~z=}4!(jMq+zS#Vo?4z^pmXBqRPq^m^scC^P zUN*fv#4z~N#k&8hhlI4@$9?>{WR>f&^gr;?bFnMeW9jem(fesF-Mzig`Tg|}taC4p zpWde1!@h8+7?$g?^c#Kjep*Y{ll(K`A=mlCvy{;-z}bEF&5~k=x_1I|?Ne%3A6WO{ zljVO~FYZ>my(j-6P2ir~OM7vj)r)&$FYc|qxVQJ>zO5H`TVZ;NUq~xdPwu6?xXg1jCm+`LT>I444>9f` z$dSu`*D=O@tbwfZS8%Lxco&e1KMyPA^EdqGivKos4}o(o|5)9Z$A2C`A#9-?7#Q?| z>G`n!$z%7e>G|2DE60De(y<=OW9iOmlHF~?VYv|hZA!=bD37J{oi9MX)N`59Wy06; zgRxTfdEifiu6i%%J^)>0FX%XzTe=r?XMt|)UeL`2UGZMfaf~}`FX$cwU1%@pUI*Qv zy`bZnk_CG~Hym_%dqFo1bb-B~yAgD|v^?x7e}4hG9eY9dEaJRz$1+P-2d)IKy(D~#b-%+3sd}R2t z-I2%2;Yw#}JGUtv+aC{|kMBRg7}+xL6(D9SiaLP{fWK4wpQyP}%~t}ig8Lc3slXz& z&sY1$k2Cy!s(1^K{OZ*_1vnq(V&FXBUyn8P&jaVc{4kL8_o#hR&CAq$F%Ur&oeiu7 z@{nlKzjut`^Cs{ln4bXBex2IiqvjShUk5CQ`_;fBa5VH)K*s+fApMO8?t^q02CRU2 z2#|CK083$hCuGv$mq60BD9%-!3?!ctH4j$vK5G65n;Pi;GLZfs16ITQYc>A>$aG!| z3YoPcPWtJj8!}mcqQyp_;}I2Q}JHK{{qtA&1&X3%%nSC?Z>M5 zaK$_z%gN*T&a<5S5m*OY3!DVJ!hHXWW&+QHc?^){VGytkcrcLh*m0x@_f;UnYg7D* z;*E-zD~?wjtoS9E(BIz_9|JO79s(W;{&xadZj!(#utnW(1Y&G3gj&*!_Y5HUOa_u} z46q7#EN~hyPt7|p@VXf0t-uMuM}cPpe+FcESP5jkTM8t<8nrJ2UIP2mfae2`1~Qz1 ziUWX@vm0}Z#P@-e>p39#+^3jOtOpjueX5#I1CoBAn!kcpEX{8N>Hi@h%g+NqRFNU8 z)c!i)>9C&-90QyNq+GbjS^S?2r2qXDd1yNMz6ZTx+HX|+J#ZxKn}8#LH9*#bNs5I) z)`J6qOrJhL`hOZ7E!zJcNc(j_+FuHs40E;O>A>kQ4+T=b!-16JYh*I%{{^J^H8nq^ zc)!~JP|Y_3&j4MWnu~#RVIBs&6xe-;;rA(!;cN$z@AGQEUh!_VZ&vdPHP@=SLUD}R z4_5PTe9$TH{Xm9$FOcD`1TF%OSNqXweGnjcm3gFyPf4@iD@0r?%dP0dX}w&ztq`VRw{ z9;1M>fFU&(04e8A^lM1>K5#6|e+JV2XKJ5R^D;G8Dh>vc@1el+fO$ar`{+QG8+ZlG zPXkH!sN#A>>IE%;{VhO-zff_qBGun%A5{G40Aqem@jk^nfRn*z0g&=v1e^~%8#o(y z1d#3goBLz$KJXFXRNwL*>VA{rA|TVB=cF_J zj|GzM0N^BGs;|M3K$hE6fGoF#K*sX`Am#4^EQfj5zQ+AuK)SyMr28{!zY)mtb}tZ5 z(H+1tAkUp5-$g+3xe|y^-;gTcIWSLBa}lrt<`dOC09Xcde>H!I!04ZQ>&WjpApLi! zncEWR|6VmGf%N}fH7^26_(0b0Dxid~<|1`J5y%mXSj`1MbcOTt z)Vv)`(Y4Os1{D7Ip}cKsUaPnqh^)z<1!VkZsQp-=@KWkukQ2I zKBDGQHHXwZNX?}P6hZb2DN+cUw}CmaU9nZMQE`@HsbWYmptud5#lK>!Vx!_L#ZtwP zVnA^l<6Z*(s$GVU``Sb2`qEZFn89vCD)4gZg@qkE~kN0fe>ny*y)bt=zK zmA+lwr=k$kzkSX?`qIpD$!D;dXNd`Igp~&}@TpM#jT*m3*oi#qUa#~a4ew5+xA)xq zRp|rj&U(%Gb!vLE{L);YX5JG>{@YaM4&}Gy1TezGvOxECb#Fj^(%h*0yU34bARm4g zX}0snXv@TG=c}ix|A5lR)!eH5-c|p0ew^Q3^0V{RM=3u$zdc9&GhTd{&7`;U&lo$J z@Q#{CE5O zkMYS%?QOSzZa{XM&w#;gzStLjz0ZukrHB51eBphC`sL=g6Xo4)-r=K1AJ*f3ywCrU zKJ%SE|DXB%-|Lf?bHncN@A9SR_k8@iedc^0{ae2H@cu|Q|Koh_m-yVj?~4z0yWIZo z_WA#l&-{RoewvTpnLhe&`^?LI^l$n29q6OK+UL&xj9cD*zVwRu@?)NlAGiIv{qtTd zxB1sT{y*^X8|2H+ANcb7XFhrV?xX+M$NwE)_y_ykDVtlq0Iq3SR9lbZi|3A*kE4mJ zGpbWH^GD3hvROhKN0F*#iSd-N2wyOzq-K7sZjrfaM~oLtJ3l&QQVrF}oC|oMV&=SO zw9YbCnZuL4T56Ueqqk;kBp}@IQ!%OHd}EWj?7*uXXIyd2o}Bq7{-#W?taN*-&M4Wr zs3u0I)o4^QUZ+Cy&TEZhnq3iER(EwxOb&f^No*~96wyoI7RT#SMx{Pnpku-?>{RW~ zvGt{2?L3jkD&^J8t-C@jL~}1%?wA=3$pqKIhe$MD*n<-d12vLx;VBm*v&|`qj_RP; zi1XBm=T?+WQwq1Pp|x^!5i@>l9+GX3>Ej3>IhP@Irxa}~r=r|B#I6i<>^%9GVPq0E zW44Lv__JanJv1#`+%uLQ_8Ds}Mi~ps&Yb&glfI|JBvmQ2=E|i@8tO;XFK{V2+G;$x zI-?wC;6d z7R8qg;z^LI(OPrGlBMqZw zaIGz>q+E2iWX@GuZl$qCX>g?!qeiXcnkyF0zS3n+iE`PSo4#t6T;ZdYf+Fp{I6&<< zGPN988>^AlCgalkZDpCnpfa#8oVj&ZdT%XrpOEV0v)fXdCyBXp3_ia|j=|M}XY8ao zG)8yxW(hnEoMV}3;*3>~`DUCw=eeT2b$fERZpL23a5X$G+i4e9SEz61Ir4jiT)mcw zIX>@!8t;*@*0{9J93k6t3ykuVqlnpFgzF0!(ALLerHzkU`#jS~IVmPpFt)^eYP5ya zLTlSgxK5mcE=>UU6qJkzWuB5zqed2w7*TxsxZLO5jvF<0l%bY$ZWq*DXO6keb-t~P zEkg`N<}UYmA5a(8k@$qrPvc|F=$3Kbh;umd?Ctrsr(iOV5BbsW4y>0gr^PqC56JT2 z_>|A&ph5eq;#y;`=h2Q;xk}MrB7vFtAjTkVO!>t{Yd8O$4!e7??1eA~eI;DZPy?^w)QZCm#j(PRKhROKZ zPXF9YRBle^=_r-in2yqrICPY9Rt?9ml#0Ya48m|FXelS#0mIlKhix%!XKuoVkc|h~ z4IvM~YC{-5;kGLLN=RAzp)R~2%)P;~b=@zOoJ0|u*&!;M9c4zavJiM7NUkCas$gYC zurec9nF>}Wg4s(6unV2rgd2+NPW<#SkT|$!iLs?0J4G*_xryl~=lOC26E=?BFbtkw zLM}Z?aN|x%L{v#2xq6EqOz+5Ix2W zvQqL)0pXN_Wgz!?px9%DOB;4$dyzTeQ+8KZB6nnmB?720fn(pE=TIdZ2G2agDF#TL zVDmWfb}hD>b%-a})B0FiH{FDNuIE~&;b`IUm)UL z6-nSFF?moWHkQgM3eG0vsgVSBm2Yi$F`Sqb3dhe00SkeJvW>hSOv7OsUKRh3Y!-YQ zt&rJN^?L-rp$tFaw(sNDidGrlZch1fP9OH{|GN--#aP~dLO#A)Xv+I#|L5f$nQAxL zW*7I66N8);)G6+AK3SxxgQfg~JU#GKOF5@5CBi&x_MZ0OL)hl%JuL7t2U5HQbxH-AgpkPoY?Jr1XO`wbAKs?mldK^Z1vq$#(E$-%PZr%?O~8C zp%217b3U`Af;s7pj(5P3JGf)-^DF@ti-urkr#}nva_-UAo%k0uR?+-r^i|b zFp$TfK*JzgFVp#zaU4@+_5|XTCGH=@87yW$W_eaw%eDVf&I`uzKir=f8)qA%V%>Nd zJ5l67yrx0eeH~#Rps-irC)~z!E9LA5t`M83h^s05r`im}ZpQNXHecb_tVMRe%UzE+ zIY{@pnZPS1qvV_w(m#kHKS6X4qFb>-*FoR%grkw#{Pm&6Fe##~6423jC&K}a?6 zltkI5eZe3pxspCMably@4JnLM?i_2LAjerYS5$5gaW1E@x51U$XI-vFSS}Q&u0~48 zf#}ZtHFm$Rb3V0m{yPd@u=!zdmKK4TA}7GHRmbVM=H!l_z#!3+wqd8V4ZjuwEiiI` z0yEW=1;^HWqi`^mO%xDf6TjU>i<6CzF5#PZ%elnY;`FF4-Yyh>%kG_RX~$tfo#yI7 zlT4)egy$VulJwO`3NGK8r1%HK(t6AT?le>Md`I`u%T|i?yFCRPyR?TOQ6EdO?>tkO z<+dcSX_w&O%%fT|Th~P!N!TAAsGdH>R zSG)MR`cN)jQhGAHT=ywSe-|g{_QcQC?{e{jty{Kieg$rR=reGGeoub< z;d3wK=>hEV^)p8ZX1F;ya9&czdj z7xzYWmjP=I{;leM4Fb=Vz9EcH`TQ9Fx!l{;eV|Zf%fC(C5AVU9N>_Y(ia+%__vFqA z1wI;$tn|}qr9e;n$L4*E?+6~PU-*P&@82p1|1PCtJ(I`Ml{NKUjXF{Y%Z2!#vBU6V zeUr!1>3+1~u)H1r?MlabCy%AevCr&D5R`sm__7|#W9ePte*lM0rPKPD6(5Gr{bOB9 z$9gG`<>w2Z^z1zr|J#JmdfFR3b^7Xe8hX}S4}Fe(K)(P@DGqhy!+PwYcg62n(9KXf ztxs9;V?O-b#gFw;9veRwzrl#h-ta32ot1A-{1)ydzuR5>wA|;62k-6}rt#eq-MgSG z*bBOYP)>J!X3|;PgRF3w-=jdcL+RKq$YawlNBNiwdYe9MC-y|o{J9s4NDH?rg) z-Je0XPU*D$$Vo?Cpw_*Ke_!0&wHI{UKUS}F+OA}U`|&|$f5i*Hkx(c4Iq(GF_khTb zfvbQg!+a(1B;a&)5374X&F>)qy1xvhf9jRf|82lgFb@TWfQJKz0AE1C9}esQ7U8c6 zh?$(CYk{acMdtu9M_V)+h^Ocnb^n&S_fh;03KZ!+1WpA050K$@0-@ho)Ta0=;F&Pr z0t^GM0n#7O8K=JqK>8a4JOk!Kfu+D5_--Esd{^Hm53W5}Pw?_+=uDBi6| zeINS27D)e#fsD^gbsrC8_&mLc;eLiPcpUI=z*B*b0gna#7m)INSIyMNEQI+?Ao(5x zWH|lRyc=}`uSL{9hkMbTz!QN2gf{tj;2(iyKz{eg{~jRA_4k3~(*&eH4mk>e zoCN`kfg^wuVIHJr>h3XKyHUtXfcF6zue*SxZv>M53N;@Fq&u=*+(U>bSoGs!32_@d z5!)486&n?2DV8dR6a$Le;92}DwkkF%&QdH@3@HW_w?Qtv_G?#cRcut8rC6#MQUr)U zF6J>!Y=3$g-f6b|Ba}@s+y4IXkelwde_xBlq`4ITe7=u=nr;965T&>M>E-Hf`^S%} zxfJabpJ$Zb_D`uFOn$b%J6p}R|92e9J>6}8w6B_N|ML~_q`Q5BDz6>?9IX6oe{%)$ zmGtdsXZi4+TACYGzV9miEHzJ6v+Zv(UrBGr2eZI~=77@wQq8l_p7QyF<%f2Q504Ne zy&WIbLtc8fPZW}nLqT=^R^JT{{=q&e}|*noqZ;^Su{hc zMN?z`vYOekn)!>bn7?>_3<{1=1fh;c?GkD`!eFQzqtQVzMkro5_Tpz=UF`zSW;k3# z`^V@?dhDU6Qp`)edH$TwVR7A3zol>yNGfB|5PX7e~{@(pg(Z zp?+yy?UF_H4G;_ZLq=!ML^;bvLqJqK(WNqwQTrl4(cYGgL0y|zX|Nv|H2%Z$7|O6E~0>rpfh zm8hMmzR>Ksb8B$N^a4kL$QWFSpG!|nq{*RI=G7l#oEz$Emev_{G7}M0<|T{u2*{eL z(1g0+g320}xW&tiHdxQfW#osNP&4N`Rj2c5kmYbg4lkX(crJgg1bb$<>k4j-rBSwm z8>^!+IGODjO;#CWZrv`Q1{PRU%#h2Zr8vx;9h)sB%~~?AvMkBJ1}a+_7e;zM(q?Il zEen*qWAm2G^*WQ2-;H`y=0fn0d3w{MDk(XAq|v*g9@U7NWjKe^ePMVmeX44->46ab z@f?BwEuIEkteu}V7<}=mryo4l%>FO`(Y=yqZ}q9pghws0L#X~-tHf7Jk*eCw=A&3nNTqH8htlEwB|S@wWeY5wewL_ zYbwhfN4%_2ezPbP9}FD$+Irmo?!Iv9o$+avL_>cX8E0A39&*nk+NTgN1vL2dvzEgF z<44x3l2R(TMj`7-M&BrT!@TWe7fC*{7GU0Q z-n5=px<=Q=&{f~awO+C}{@uDoe*J+x_)k8<@I{u6rZsrw6X|GLW#0JOsIMJOoNwi< zmm?u^+`HZ+=V5;xO|F<1NiH+dHS3VU<|&9s)b6H1RFy znVt1SvbxW>7lTzVc0Ya66OrVoSMuP#9sf9czoiWjP9(|C9G?!4p=jdpJ^CxRR}nhP zfUf)GjlKvDdB-W`(Bg?EFDsm9ifHO4x5-h_=`4BhxoB<;aW+Hsp#9)V?WiL7My zXD;Gs?X88aFpt~Fq?(Sxan{qx^ZJbI3RZO?sh;*E73DBx<6}8S-CQBd0&&`0_dg$r?la!B}b zL^;r4u6Z!GCPw3L#xAs_&Z4e15Hc@Ko5tGEGRb06z@s0t zXaBC2*w_C1!%N;URs!xQt7g(^vzj}-sY@U#8A)8Gk-WyR!qrBoPcbN{-4KGMMgulO zVKWvshCgWrgcIjf<1*y%<1F0eav_pEMc@Cu=s3s7lUzAguV0nqaK2|OpK>1%Gz*aP zFU3|cbCyGm6H0Bk-0D?{70&8s#k?88m2Bm`obQV@s6u#0Ghz}Qvd#9ouQXC4ubt8k zqO-`t6z?zuWGo)xkDQX<53^II3jQ2cs@8KWoK+InDfvB>XP*CWD%_{y2|*qW<(&J_ zK`@+uM$T8^C*1a1a88e^Ox9XS5ot#kbvS%oxyvDG_~zmpMQy#koM08i}|m zYiD{ODuMkDAQg@k>yI>1jK&X&YQ&{}0*$bT5ye2mAwp$amuURi*ekf24w_gd?=2eT zE@OxHc9%VFHFNCOyWU$}?`vJ}>zsFpdN!D?LE}*!h@BZtHsI!%6`e*RTN0y9e+j`B zA({xGh&G&x_AAwf4lZ#$P~!hlBrzSgrci%un~i%jwFARVE5UyPY8UypW%zSyEZVf0 z{2}>H>j1^HwuTb&=6RXKN*e}lf@wg6siwBx9SjeD(OYaRBSxSLNet#|AiP^)_6vlI zn|s>e1F7*b)yp9JdKKDy@`BB;fhvN#?B)J(XdNNUH3+kN4ZBw4{*Xfe4oGgQ*LAPS zQ`fb0P5wYS0f|L$Mn}LY6V2Dd)mS0qbxv~Cx~6kDfd@=vKB%8*Z@_8c0uT~Dx*U^*4*BjT> z!fpjF{AS+S8;@ewJ5sKVNRF-(DLJ4($;6HI@IeV34^g#p`vl-JlIdcJSA|M9AP z-c7p{-zW_WE;V+~@$KxVB7W8Tm7ZBTY9{qo8nME1IZ4VOhmA zN3(-#p4(V_aRH8V84v0^be4n7ePLf2=f$WMUAE=42s;!q)0&zPgK-imjK;k>($hLMveW6R7AS1eAgu-P1c!1Xi-~mf{}Y9cAMEO+CiuO8EmXHUt?D zRng=R*9%J!TNU`&=_F1pf`lJ|1u8@L^fqu0RYJQDN_xCp$SGn6%4KJ_Q|)t`jS(d9 z6q0Soq_M8Hyr=J@=EpG6Cww^?{|~l6NCe`Wz#6KHCN^7R`N$m!a#yNKQu%Y!=U}Ft z1q;(YA0LK}JlfGA7%ZYg6Vto;*br?-oJ-nMuMuA2)jCHC>+s{uY-B|w{sg`-!RC)a z5Q$HRUgI-}xzJ<~8pDnquEfl|uXnw-IXrQDrld3?@)1(E-PFKNdp#Bsc(I9PWugvA z|F&tk|K)O@BAKYE&>lOXq&+>7Uz=#tlgJyimexrVC*1T|pY&I=E^QleL)`)gT0;Tl1tY}zEr`MS0!fd+dW%2P(jy&qn$v*p^|jcU4z=Ts%A^Q zFjYU(H9<}rEA7M2Ldyf`r5vWLo;A`cqW4^xJb}gOus|v}-&|Y++7;%QD-b&lpUkl` z;<6*Zst!S$w~9FJu`L8eAFGNHUIy!cPZe^0oQuz2N+{kN){;DIAAWlUKt6&4Z2A= z-Pfr9OM7tNq3%h9oJ;Ss5nVk#)aS_MUfS2VHv)2<``@na2OF}i_-#{nPJHCz->MVX zJ;iUEx);HJuJqw~etbsYKbL#8y3d7sPWjb+2$_(D@7bpA8)2X8UIT8-;=_8I%Y99r zI0vZ5lQaIR*PzqYS>ao~hbzG*m;A+Au(TXy`7c%Xo8gix{4Pvl@M-PAyjQ3p7tx~#; zety3D1xQc5;9+_n0ow(6Yc(Ctz>t?pU;B>zFTP3hR4c=-9`Bt3N$OI6>T?MrX;&r;t1nDWZ@#zUW@ zK70lGHL9P^_GeG@OpoD6+b*T=DZfcaovlu#({?E^eg+PXPCXjr;#P@^Yex%5A z#~J=zK!*Pv;4#2U6pIx9jRu+a&j1<$Z+QXp_^7z4Wz#E=|K8FPVp1Wkkb4&#dgIO#c{yX;J%-ldCoWK6N)_7 zo91ai(v1f)Jr4vj|2~2KH1Sm+?SG@@+Y}psjQ4y+p6^Zbd5RT^;}nY&k5N1V$aLa{ z8>Z9W(9b9VJ_BUBJgA6;4AH}#4?GF4)oSKBtu%*#)C2AZM0FbYCHgbNVCK1w#lS8g z?f(KK-!(weU!(T3fJOK_4@iFJ0O@bM+7DNI>T8pZ=L?eVCG@LK1+D?oyi#$#VlnVU z*q^9)wBr82lVSfE`h~=g6gL4+f%#90zf)`hQr-nX#$yhURXckC2G$$nf5$y znf9B2CjeW4HjoE?zwt)A{wm<%z((K^z=O2OJAT6OmsGL>12;21FB;9|9f#1TCuyuVtXl1&;wmq~ISyGHM}33QhAi2t{mH zWd6|Hs5ncpR57F&P}~M$@vqpb*r+&5u~adn7*N~>`S9AWU9nZMQE`@HsbWYGApV|! z=X}Uw^>la+EA^P|!}3qF9iO}aTAJ;6U@_8x=2j#opLg+3v+a*_(>Tqxe}9+yxBdC! z;6`^l{(C~{*9bSWcTW7P`5)@e{N-~j3J2XwfqZ!XIL+;9zFYY-Kl$vV?v0Rx&u;t+ zy~+=AG28LdM5VXmqgFNB@yjeT&vUTd?*HTSU*~hD&YGLv zf9^5QcyPPF!{(fKhMtR&pquk&-ck&=ZjyZ&#dhdLeZxN+sP-LGh$KAGG6svSCd1#+tC#DsD1nV znIjviiHfu1Jj&t5dzMR1|3*99=OoI-8O3qK&!Y`RdTVk|`nwj&j3HYOE4oS@A zGM@)dLOWZzEsM>jDYrPHx;}UQvRYin4n69{F2XF$Z_8oc>}%?>HO8&0=732_D%bZA zv~hxr<^`Iq?hG_4si!Wbmbu0Q8maQWxM2|wnT5i4&LDFuHTOWATen$)aT0&o)k|w; zFJ0=jgt~LKrH871$-?VKh>cH7lX2jhrLm5PHq=sg+~-5=;3(*vK)?r%Mez zcT|uD&N=4Uf56vt#g=s2_;cqR!Hiaw_kDHT^ z9$O#NjJ)-EGQn^ZgEp|yrQOK@hPW7r=3=+@_2{ib#gciFwi)-qZ z*F*aq!!|ir^Bd`dj~-=@;WYZ-C{3~6^ugI@41^e3@8@gU{!55{@K`hZ?fl1QOP;;e z2j}>g5Bbq=H9E~@w8+*6U&a%VucRBEnwn`9Gp3n${#riDF2MW3+>eUuSW&-xPx{;2 zl~JSm$U|oxpX|Uq3?ej+9+thGuQ^Zqft|{4mGV;~#{~22JFyV|(zo>KZ?8i5oD<^x zcJJbwO)+hs6-MbJP)^E-amqJ-JnN~ErVnORVkK16XkV^OtSG>usZpqD7*-X3K@=0r zDmWG|vG$HN#`x!0LuG!<{$fF=*B!R_QD!_cvy`~LflhX$xK0{DvthH06p$&Yx*Q`^j%|J#N34q0P zD*v__k$P4s=e31_&* z4vQxG$x1y`q#V&=*BD!bMUjw_E{U)#9lL-_y;PqXmtL9#dxQf0o|zzi!={s*PDKHk zHR+;~t?7xNGP*`sJBQ9!dbrCXT?jTLB^xX*3mdFoOWMp_qeq2$4g!?b>=~}LeV%{m zFOSPbe-B#SuNwWms&OC3&JZnMq-X4KXnE$L%mk$rS^ccoWHIiB>cH|0`xKH5Doz7< zvVhTW?1IIHdi;djsDULSBU3!SHkGs+1&-|~OI=p;$RgB!omYqf^@ggh#MSj@E<0%D zX&n_$N{CcanMuVPl#^#nvLq@x6U*w;M=D9`2#7=?$ICNk)*rO;V5r>CoA@DpUz(!H zoASbEUi+<;`4MQ_xZPH)izX+9K(ik1!&mOlJQDXPRRd9Vptlfd`e&n)Yb?WeqY)Qv z1lXF8XuArwj(*pAXl$Y2yOiU2NP^?6N@_0WbLpJ?!Fr~5{D;di!4Br@GCDoM=3$_y zjMueBS(W%SMr$w3L!pf%VqLqStQF~gsuCxQBJEyGM_P8r{*yd^HxJ}1f4b!Uk$6kJyiSLZ4Q?ft@jc=3?hgD4p6xIiZmjOWV3NX zlhPlWIYtbKV6`1@$~aR@w7%eun(r3#QqV9(G%vw^m9TduNYjcnfnf7w#yeXBb`27R z$q{Tm7@RVZLDgWQxTN8k6B&1;swk$q2zV(}hJYEyy!FY;o!%Lu>`)RO_cd8kEbzG} zOi7Oa%bP4*%tDfY|8B^!#wH1@TIJoO39riwCn^i;Vc&=(hP;|PZre=Jqch1+?N|d6 zQjUWyXMfGQWXg97&PPPTJZvgZpfUKp&!PR;bUn35+wmQyGFG_hreRK|1)DkPhL$u} z=2$zF?^X6)HQHIzOcNpPQKLkQg^G7UQDezz3Q#kcl_-{VtuAfQVDoK4X;f07xlJN! zduHlD0|?|Z#zLJOXNr#wORm5O3_Z_gYF_m8&8Es!7OS*Qm+%!8&P6R0$Dxhb6gaV5dA7&@=%Z4uwdP1`a3*q6LkPd*s>S` z)5x(1{0F7a@vBL=%AG-vuy~^6kTY2=bFJ;QNUQst@Dgf|a;PZsBe3)|`cM55Wa!hJf&Vf1AA$c<@qaS@ zPr(1N_&*x|N8R zdJI0@M)Oaif&M~axMPy+?2xlgow#Z|(HlUrqj(HFw;M*MHVS;Kr({+#RUzW`l(FLbXWo>(_3+6=_HQPD4f z_?#8p0mKlrD5=ODF&Od{%>g3rMH7Iedj|qQhKNP?14;K&#qR@2cMXtqrz@_8 zfo87P691iN@JEWHfaEg>h$;S}gA}<~Me{E7xbRx^10X~xTA?@-$ndzHO1`xqCjF)O zA$=4`_p^a?e-j^f;`uS4z+*;JG z_zOj@W73}IOOgK>ioD;D{0{n=MbRiAlCEeL5MKM0 zDuxsRV$U*59TQv6*g579)7G0i)NJb+x02A^KKuZ?jDa8e%!NMl5_oje$9?9fee}gX zGn*y1|1zKdW}o{5KJ)WFdZv?`-_LyXbaT7k;4^a$#O)sT`R8^YxBG`a`fGje2l~ve zY26-IIyhsQdlAF8=wN3W7cE&FyK>2*x~13Y%~foV=hrX9u{JunXitnWYZrEvg42$^ zHHL4vbild)^QTU)uIX`Q;o2$Tb9!;j3R8u)%LdMTzRbz{&WZso4pCVai_KqDSF`Ne z+1YdOcH&zk5d-{W%?f9xV4Ydr922oBS@w*pdv^5zJUyMaF}67Oy+tLXM~xa4;v@GK z;V!J$yx!(lxpo-{;U5pa5qmywBSb3Kc^e@y%G@g26}DmW?Ct#O+f+QjQx6%?)QU3L z7sPKkziRo^(J!9!p={xP7)AHf+xZ<4CIp@?1A#X1LlYk8I$7Frwaq|p^RBFJy~Db75oN5tOdYqziyf~Sp4@I;`DqpxDdw``ug=uaUK-;J#EHiiuk1g?ek z+L1Ve6dx-1bLML~Kg)l%Q|LnkX5s&vJ~BUc;RTqfEsn%@@LHA*y(FijLedr;(`3W; zNOJm?NV2N)aq`E`x9voB*zW^k7}6C(>L5K;ExIBbJ*a8libz1Q( zt8W#;(f1(>HY~@xUKoVq-$BZmVQhV>>jWE2*qJHi_@OFFb*2krX}Q`5YHCW0_ba!@=?j-_}Na*QJ|tB#4G6!W|UAI2Z8d;Gd)mB!3g_mk@Lot zF26-UNZNMCrlrwsgY?Pl?%IqQE5laXX*M9S^fW^qII z3K}N3OyrlsWO}>So%h8-%1r9-bV?2wgf6WqFR#F2gQ*)|;x%=zA@~e^QWt@#U+l}I z=h?~#HZSI)Dj?NF7u9caQ5{CA!Qhe1<$4rcO?oB=EX+l~>&y)SQa)Eb?y3CR{rbaf zjZUsW-eYHX+-@5UHglT5R>^R@qddO5>3L`4Ag&?GRP!+EGVgJ^3qH6*8h2Mcir)K% zb0J>2j;GC@K66bMR$bV}b!E6?&FD=8AaSW+;rJC;xmtj#XEDpsULG$j#GXx={zF5M z5^@v-+0VB<^;45+6A`q@v{zxFxq3Q8N#EcK1!;bSm(b+yB%7pZwEd1upiX0)<6;{I zZ(LeOwwP|#1(@W3zj&z(&uNw?QqA1Q#N4&w->+@%BddK0ZJGIa@ndzk{Ul+(tgta( zC0>@d5hFd5QZF+DOd9YQ0in~I@~{M_-xq&;Xg0Ay*6O}(|9KNUuLM)G+TbFN#zTA) zwxe?!=h3)*F64?gR&UI=#hibHD0^C5&-_jp-~0HdjuhC?ooUT+rxZUz5}K7R`+k~h zLM2a`9Af{$A3yj0^X1s@j0Mr~qcRWjeADj!!S4>oKs}P&Z#tp&p!JbH8@t~!mx$po zlwivMah|>kZFytn5DzS1t_nZODHmy{w`1@hNsPsZJ=pv@-bG;CeM!?iNdEmz+ zi=b~!DoRQ{Mk3acM`wYJFf_N!NduLf-tPMRh-*u`*;o4IIuq+!u8> z+{Utr?{6fLNg{U9!jCdNH8ECy5A=|#GFjE?V$cr^DzM1w^6JRle3|j$BHy>C@ElL8 zPK2lMW4}jI#Ri}&6@Kgwcr6cB>_Fg{3|4VkC_ZdlyiHtKh<$N!c&~m2tZ;8tYoOsw zlb7*|RxgwNJn@OfH+qZ2>Nq*@%a-J{z9~-N-~`b;j|6tH3I*rB_~!DsIcLm6R|-1I zfTvyAYN6!=-(zcqS}j6IhZ^@K;ycWtRJpU4zHgzrmlw)KSk3Pu5nQzem45Y$u*zI? zi23tFGp1+w3;VPJ0&*B1qRcBLt0>AgK32>-q9pt8#fRy8cV$)GT8hzzBuT?av?)|H4Z=2 zfW(UX#DjdEOln}MMy#~?cohE8_~BPuywq(dRFS4H`UG26;mu}`X)dHod$m}bbrZHO zEnHH7tSA!eQ6yTk+mc}Ocrrzj;3$eJkpX~CNu)mJ4HyOg6W%= zY#q;$lBtcsmQ(Q#^^&G;4C$J>_iMP&c0t)aY*(sguJ}X}%k?`O-(*;#mrr4tQTvd9 zh0JsvO14_R4M(S*L5d(@RSuUY4l6VHU*QYFU}nyCStOB697BoLPu; z$r+m~a-n3)=?X^p7;a;2Xt&G}JJ;D4_q5|IlI@l8chV>0Tn84E%+OYnw2S3WOHzuP za~NNq5#)@3*?T~9sm*N5hr#CGv5<9Cv_W)Rw>xd#BNV3Axg-%4qOl?|?N}rcsr!&) zYqi$WdN&dlEn=c#?RaU#4j#`2EZFiM?87n~bkz;EhcfapMGF2`b7tB_;c3-uR+H{W zptEJ%=^s&m6wB87vVoO!xE)<$A4`B(;EW_ z{q))1ehK*4w89V&L>OiVo8LlGMiVPcm32OOPA874C(Zo2*nEf_-yhTek@5RrGAG#b zbGU$0$xC{RWw$M*jNW&Ibwi#F6?ZIOW8cwg!k;Vkv<*Y#E8@E}=T=Ta+rCOkSme++( z`f1qPN(?K02ps;Uta$qS!yF}kgZ@AIBPMolP+~Kz9%5tHYyY49@1_q5pt0E0-LGM~ zMAIDj7;OF%7}`><(C+ zhN8RO_S*1;!TRztB;qbKz$PNEXCgxHCMTzWgcm4ek#N?}kep&muw*-LdvFnlK^AWN zsU=3kC(}*^GN8zekDT!W#ynKZgR&7d^2XT+nY4+WWP?Iv%UtiLJL%NF4TU0*z7%2~ z?MU(_tTx;zl1#CZppvAoLMtk9KvkA%`(f-NRES8^W>hVclHqs-COKCgUKKyB4V8iV z7vXr{LR0$FCpqOmIpBU2JQHyVj>O@%SvI)xtlJzN{Y<}p;@EJUCkrA8F^JQ}kv347-3d@xj$R2%$W_2x@C~ zJb)BHKpz^a*g4h#w(J&5OA&tpGZf~FY;Lv;Hva}J?Z+k==`ZI24@s8i_20N_-^$t@ zO<(TQa9ue5cgqb@ukRyG-*-g7igh*@{hlLhE644q3{KjCSgcRiA$!maU^X@NEF^bK zHic3TxoshH>c3$j>agqN7Yalxy3)r>PssSDMd~I{A>mv!cqrXbkPOG&||4skFGn$ym!M9 z-nd#BfuoHFoLa;!z+2(Wh&X!eVQ?R)e7G|Qzo(e@WHnX-+ z#y27slMxOFCs0gw=Dk)fNAr(v!%NUZPLAfZ5#1qiIW$5f5Y(?rId6^gJ4X+3+^Oi} zCYc~?p;MNaZoKJiwaDF2o-Ty!@}54@z@Y{XGO(WjYHAEZo2tV}%WxZa&WRZ2z$sKl z(=VoeE(~TO$}^YE#=@zy(!#h8WUD9(Os%h5jQa*c6=k8>3$I+Vbbf5!q5u|E&FWii zpxWH`Q8XDBgjCD59r9XHR(?UasCxEN($y_p7C3&{8KGgv&kbR3(@6&ecuU9`0bKKO zMhNROkedJYvFly`7-Vh!zlmQ$>|FP)+Qo5>9&()TNJ;q-X zz9;_m>P}6-T=F-5%gFy3AXoT}1C9F}e0X!YtM@=p=PKpBgN`8{mT!5ie%K^)k1Cd3 z1LgSNrgSn&CZVO9+|=*Z{Z{w=9>V8Sh<~#Buf!j8 z)k?>5D~}D|b>At^Ra&KVEI&Qbac-e~FT(u*bnBGPX>M(}%AWG^T&32Y!l}rSG~9lbP+uliS^S%m*bqHTR}fa^($FlJ@meKJ%f{I|}#-kaSysr0W3I!u)68>A>~CF~C+J`OX89 zehQHE6~HrLK2zsRywa1?M8ungD+JOg+S5Z|1lwZJ-HGcXLi z3b+h7707T$1Ih11;0%}#0oDT_#_}QU?*fvpNzGTQ`64w>0kRyF0_OvH{?v3}U*K@y zhggE6`Dx%3;A6n4z+VF|05$=uflGjw1Fr(W5pWxj=4QpIir-S? zy`Kx={sxfYKL}*JZU;61W5Cn?ANJk@E~=yZA6^0~*p^r#_Ek}_tO7Q$vI4RzpxAo= zDS`!1ST$C3A+oNknAl=8A(mL8vBZLC6l~a{M5D1r>>_q!FTCF~ckb@x3Ngv=`TgI| z|9zkPfjxI-&YU^Z=bkfX1~3Yc+FdX1?+Hlw%>ai3Dgm1SK5`JsmCn7Qa@!0@^wR(d z|8qd%o6f%)1Q-fP<=+-ijlX=Xn<)GeAcY?Wr0|u1k$_zRseRD-Raj!O{nhS(W#FcI zEx@{t;4gsG|FQtR0qK6>7J$om_-7mr2OI?6>usb{?z{XA^L8BM87d$Gq}rew;f<-xanLg!n*`W zcxM2~e+zei3m65r0g%cwj)&8^R`GCm0i^o!1f=+NxqoFqqC@wwdIA1v$M(~yw*XRk zt^lNTX97|@19wMrw?BtIfPTQM&)p;^B6oqU5bqBTe*vWO+X6`8bRL!u-~vD`U?L!m z_pyLo0K)-W0R{o;0BN5&m1he;8u#k}#sS&_Qonu!p=K!Jz)!hMo0U-%y z@n~N;#ix66i5}f4Pvw3Ckmd=JQ(!7m9|ENO{|E@w%3lG-z&#Bx3~)3c^@qNIRKB!x zh49*O|Hgn|O??-WGnMB>K%%!7knnbJ_qW_V7m&(lA|Q=lp@1NvMqg$5LYq>If;%0s zGPbI31gr$O8W2-K`7}Tb<>gZWF$A;ovm5~v;Z_2U2P}_2lo<^@>^!ZqfFW?B>$CH; z&}G?qTIhQ0JS}vg@?Hop1xV?msj&03P{rk4;6^^ms{rw^^R(b5^)30AOv4ZO|G(yZ zECXc{42w@1WfE@jyQ;Mq&T;lqVc=c-uDXHBCb#&VehKd^9OXdIebJ4|qesi>Q903b z9gUUn#qaPhIllPaZQ|*P-`Vv2LilNjM^CKCA0Rz-xm)~h?#J=P?_^i*7Qc&qxLf=V zKEl%%zk6G8{>1OxOkO_XckLiCeKbaTo^$*V?yd>`l_(=|pYa5QBMHlM4e_P!y|Qoz z#FvKCzCx*cG#aba{hKU)8RSnIF1L>$VVg9(K<1t*OaD_DeT@u%hb(-AEWDbGpI=cD z()63j(t9imUnVQBGBWob8U1xKetwhTFOsE45??7lbe@{j{X6PX>Ru|NPv1V$@L@9g zHDvhT$na_Kmd5Wci{DumzF!vKTUK6}3k%WnlI4fK>7?m3ghT3nCM!=;#Y)2m%jo|p z3nyGD{s5l_O{DzB$=oqAeoV6Zp!KsfexeM2sSLlm z41a?xJX7YD*mDWSS-yRPf`jOmUNR_x1rsj(j))i|TrvKBkl-&|U@jmRam6^)*=N zGguSg*S)83D>{s?7?!42H@Dzky?g4q`AIx_4+!!VoVe2+ypkG*e&}F4(-^aP{TqXF9d3t?_c;=> zYF@A!WKDQj1X2%8h<*Q5Ju>wZPD+ayGlqp*Nm2JgBaMonXkvp3k3glv43IhudL3(a zmXv~Vlp6P=rbtNaY&M2PJ_0wEo8*Ov?4EeuG|&#%L4FnsLD40kG8dI{Omw(=e2j#z zP}Jlw^6(B0>aOe7TQJjfA1Zk9vc_^CsL(MH;cP4sQ6=STiO&7dp=4M@FFfM?G(W|a6& z&>8=%>SX6flEHCvggtb^4+s!1LHMVK-szuMCid&$|DQgzACBJ--AW50d%Qp)gG%)_ zk-}~?>`u~Zvjw@1Hk&*Z2fdsM;Kleo=vCDQ?3`KxfEy)!`&cqqnQYZp>m6 zY_VTMeVBp~^+G}$t*IRm6-F+cE>%8`TQIMOd%?&BE^w>DGs^;PbI_)Bz=Ye=!c3$p*y_nj0 zN-dlf*AMt*S-{PkU9E9&%oKJJv*u6Dt+cq+9_G$wUzn}4%aXCZ@LZtr3X6^nvt>-a zxZ$)^It>Jx}1Ev$D`;Wm$+mc3Go*zzVym+cd&Oqul0O6-HJ18rXTtE(*R{m_J5??YP|u-s#9R zbaP!hUk_#SbIOc~bvkYgZkXt#P$n&7h?A)&=B*@c6Q=?HD2_BrSQZ2 zwz!wmLq~g+*^cr24yg5)5YY&2>>OCmn1vrr`dR$4xcSwPQ&{Fu;-bNcxINd0S(8eu z@xA@aG-e;w;4DB4JJa6L)G@WD;axf9jMGRUeT6-w>B}F+_hwBZ?;!l99V~c&;|1S2 zC}(Vj6MJLdVrsJ3gNoa3#huO#5XeVIVSv#YYcpc`lML@{^ut6}4KKW4Kf|qCI;5d^ z6TB?WzI0*eM}8hGEH4Tk8q5Ml0XMHdA@JEiEIT%w zE0aD!N*s>G2P9ncY7i}RHyf6m;pIol8KvRln=;M`tisOa7FC_8J945! zr|n@+)~HFhU{7h7;A*3Qwk?JlQBdpoqUrJZ42;H%i?D@{?Fn6Bcxan|F!Vn6#xGCAB6uI_%CX{ zB75=Q`H>ywR#lOn*pM-NL}0jaD&(b1N(B$_t|#+8B6v%&adkNoEr4}fGL@k?m9d#m zu%aa^uKYG)03A*!d3UtF3pP(eL<~lX9X5z4n18{_D1R*YnS%Z%Mt~I=n1_i_tI-l) z&W>P8MoiH_CZYL}g=T(zkrK^Z4J8a0vI(>HVR1G-fouvbghr~2h4|5=laT>yKXf#i zBvfc!-@}u)A1l3mk=FZ^d-r0-Eq}7!f~($rFaS6aUpW4zpG$yg0-cSnw+k?RrlP&~ zT`gmS&V&OcQ52YxaS{P;MQ6z*XHNCY?~bNb&%#YnqdJa+X>2J3ZYT5Jl(a}^EXg+S zljRa$XDkBQ|1Uix!(iXGVYKm|eU?KW$*-0WeMm^5z~u=eqr-413W;#SEg0cZ!6U*W zgGYrUKHkG(BSXU=%M8ZlFAeh%O#ECP{w2bT+V4#I z4tmn?Ule^6`Z+zB_%AAcE)NeWCY@@@J2@50~G++7zBX_*e1!KdBzrBjU;KHFZWHlOFK> zuv9PX5%DE-mmt7}<5B&vN5m^)KkP9eEaLcS0yYL1ey^{L590d`{_XjG+e|sWZ2v6b zH$~nSar_WDei8f(2L2(APxZ?lksld-DwkQnvFG=OQhgV~m+Yh70=$ryLcLJE7llXs z(s$0;R{|c@KYPUVW#ti!Z*hnq)cpW!0{R1jC$$?OSgGs`hzUSl9```aX0M~r0@aU-Hp4uaQ7K|A>IMNs=%Wab9F$v|C0C*B>%jj3z9MM9 zXeeMgz{i+ZX+P!>KqtUt!1{n=IUL4ee-7z9Rtj&=VSPY|nABwfs{qbLzb3jyK-865 z4@mqB0wg|YpB_Y0YPt^%EU|rg5H+dq*a_js0I9zA15$k@0uo+(Ky0;9I|0@Q+zn#b z2c}*LNNy7#M0@I~fX;vsfcUH2kNbbj{b?T^`9B1#0lW)g8y}R1Wh1i9X^mH*lHz5FnaX`Ak4G0d}t>s*vq#L(#MSY$#H;j}1k{_OF4CxNnW! z1Bs;AJ&+(#-U|-=l~i#^4sz!rkYFZ z5w1iWQNG(8Zv0uE)d-Wib7k%aGPfErrTCL%^q$My=zE3m{bb=^$>@)hxd+MImu2zy z%jnboP5fCNvNe&qJIU~A-jjy+mW9)|xHNpE%$+84zm&PR%F@3h3-^$P)8~&gy&*F9 z=d$>|viQHr+=pat+IJ|We^f@lkIbzQbTU{G3fnxGh6XO&*B2d$ofga{RO-?Kaa5c> zA%c{o6wY=Ha9y|DlXi(nHga%ew%I{U2sf$GMg~zm_}(4@9tRpBiI!c|EL-*N@Q1;?5;3Aap0_Q}ycy+mj3hp(F(c=u>&V9NBkBS(@wC9{P@m-=QC8YI8xCODc3R1f`0?w7SKmyVZwsBq=egMjLw#qS+m3jFzC729L$)ovmtQ zOVU{H3p)+0iHYv+LB8E!Qq0OYCSI;;rs^YIuuQQmru`umvUq_UFVGL`c!9_+$-|C> z_yj>4N~+QL80-5;{?2v7qRtcTSsU!{(A}>8>^$QUP!z{Vk26-B zcy;d`<~17{-l-pAE@K<66)JiW&NHStqPQoOCI~z#^kaHNH)t~bA)|-)zk8nXQJR49 z5Iu^!5sQwA@$fukXae#c)cPDDi^0I=>!7 zBO_4Pf}myr;$~2j!GV_eWeG@>Dn;pk`p}89)9w-~W9(0z@vYW`B`gU%tK(dX9N~0d zWs(*}%qV7P5C~r;%V!5G7?ZX5tPzzdB;xM@dR8EVK5STR6`%iFKUVv6^bT*Zy+O)HXsR!>K%96- zIkjqw3!UGAP)g1k3J)s0LLOAV@UZqey+eLkAd){zgEX*E>`Q5~ z3T#nI#3D<;5^5fdlX+g-YCJD%l-`$tLKRdP#X`Wx^R=Y=Yh24aR3Mt9Rn;s802FhMo#0SvK+u+iL?CCX~rI+|Ai7BcFIut2(~>$%o6 zpHheP-^a9)#yVePE=$*%r{vGU4mixm~2 z`S3HjsHn=Jg&TgR&R_>+p}Ey=tk?1zGoHW)6-VBuU`;^zNbdj?vii&~g_m`B;T4H_ z3M^=hXL)&{52N;g^U8{Y;-z*h!y`E-@Xi;)qkb#H3kRMs3u+BND-f(0t;l~e(qto;U>!<}&;R=KZOOD{2(fYRrXB~!@jSon!~n?spmRnHr>*a8Ma zzAW>KA}@2RBWONCtz@9=#MZzG7C}lmr#T|#mB9}~D(ZYX%SuqlFkfHrC2C)c+0s?2 zaC$q#6b9`CsNx=odn=&%tB!Gw)=@ZwQ8*wM3l?#}6{pdBIw6r(2*M1!6**zNYtjef zl@Uj>?{8|7pC^vhtjIjCEp`eZu9&rM_W(;c*BkRGCLJqFg_hMHNmk94{b6iB7wI=? zzg$rz(;q!SS~9}=otMmhQg=4R0BF73E}>=y8aQqCvoeSEy>&jg%;K`Lp;1pL8xpnh zvKe75n`ihMuxK@{`dHGJgI(c3eqMpJGep8fUCsm>#)MO1Wgi(R4T-WBTb9}9ZBM0|Wic%!ybe?9hB7abDy+0Zf3giRZORo!(yZB_N-AuH~t>(yK3-KS?? zU-Bre=n@?}2^?qnp< zR;BRficGxriiikri$l&7^N z48ng=^l9%UJwM{VsPH)cJx}qA(koV?$av&>!=~_qzCe-4^@fx`_7tOcBK!dS=W=|$ zEfzxz*V_ddO3f;1wwwq>_>=ITi5ZF>_UQw+1-}SA+&TmYVcMmK^1~jHzDy5B^l7|L z?sD{8G&VK9K^z>NcvoFx3#RGe_0FIkn|UTjR5J~js}2(06|Nw0mJ}X*#poX zZdbtifb{_>o)VDay+Qp^yyt-U09T&}M3YdT1O$qD6(Gf10_Xxra(jxW2c&p(&mpB( zACS_k0Z8f5`5zR|0g&Q71yPE36_Dax0;KdZ0r96!#}B2q0I(_GXh4Wu)B^#Dt_l#O z)YZAW6o(XfJbNh6Mkzz3UAJ#3XtfQ2PC{*V74USazMf(yGU|RA5+^8!R)Qn%#cD!|%smj)#LUVaHdUw4qh@l~){KJ-`7xygLu~;%>74C44$9l*+j>AjTs#t@9}UZFE)Aza9c4{pv+*vX=iJ7JGZ^*(?=7qw)kh$reP-*3IS zYo!(!OBR&4_Y>;Z_~_V};KY%U_x=r4Qypnhz~w&EM4%iZtZ(;GZal5u|wm>kTRt`u)fDmqnLL ztJeQ5mm=CrD|fg5mP--kqECn($qVNHul=Z1OAp~%Wj?;dh9!tih4o8$x!92}4KgZv z`S3mj`p%_CMRD+mZgG5J^x*$@$Co;MT}<>SZhw5#^d-Xoa36w5hcBxY8hm_8AI`4D z>qGkxTsdDMJVp@cVdu#%=r)mrx^o9X z{U^)`wGkwM$%k=;gEDCjxWa`SnYheh3oI~mZ~??>Q9&m{2pYv#h=i@LxQXMrK#>$5 zWb1|v25Go9A{9489MYNlMQM$6-x_435sPrWT_z;7;$>bGgHDAcJ6=P&3U6SeAOYq$ z4{%=z#Ld7@XL=an@-M=t-K@C2Aq}$U0OM6=y!nu&pWhl@EE;^F{d-i9Y7bnBLpwaR zCR-*Wy#l*WM7|Sfd{~gG;0Un-(L;tkhp3Dax{z7#;p}G--#rdBFn3OuxG|C?|^h8%{UPvnfFr3hgIL#sNh;(HVeS1i$ zgG-h<7$()qJIn%K!cS8$S72R;wGja*s`ry7zP@CExJCnoY)WKIm>04b5SmwE#mE>) z7-iu+zohso8fPX11(-&qf-{yix=%x_^Mr7;mPHzquRY!Nd|Nr2K6ee1wgW0O>2Bo`hABXsW7A8UgX50pcy4@$3{I zSss+zGL_p7dmc*Ym){(Ejnx=E1=&4Imin$H{d@c}zL2@RT0{&SBs2gzop~!k_hIOJ zMfAMKq~Bs!ncT+>CunwA)`}PGVqfGP7jO^=wgsh&;RUYz#@2zPZ4_oMSFunkWGq}c zV-!njizO)&P&#Q4ScpYYZ%)8|fOodqurs)+M>!u#_8jf0Tx~%nC7TuC`C@D!%EPvBGT|(l7uIC* z7Xs-Ii1CD~VY~=Px2#Bcv8YI+9s^?^j9s{Lhi(h!BKPja@w%)zo3XdY`5XnY>n=z+hv zWqXv(BIb>IkZfMyDkOb>!?m}D*LKR}rJzA0Hw%_CsSP{JnbbD=gP80DCcTSd(uJ6$ zHU)&bMIq1-mp=iQ_j>wn(U(AX$*=5hZr_sE#mzvQ=ekCh1958_%_25}wKEPFuz_8( z?`oarK|SoM=_1P zW#O>Zt%7%DZ7)Sp^EWKg$tV`PlDhgTw>9@Q-qlRI{tlVe7~Yf|*E^kLm_Ewox$!#O zFjxOIT-4jgfGs-tRbXovd@~{`PI@pENn3ccKUFwXh)cWF7|YOv z3fA<}uBkQZbJ+dj*Fj2a_QP!NdkDt_pt)tUSk{W}jV}8NUG_2ZAoSUXLZ8)oo>eAi zQGB#zW1lT<=*7K~mZoea@ zN?=4o$4KjHp5(#Gk}Zq)i6OLwX9%YBu58!?9=~`rIdeP>GKRubg|eJWR5u_K)Re&~ zy2(p@O~YsQiYXs!O*S)ew+rT4jpxAx`+R53vjaBzT0D2?5yU?-C*~@zK5=I*2Q`S4 zeIcO*lu#EWL_!<-s0ss?$epL{BOzJQK4lJ)y;fe@Jf|#O)O+efEfY zPno?U$)yAEANK;8#6$eB=P&Rl0bwK8+Y*0&g>Q=w5p?*<&+!4~1bxe5KyuFkBz@Ib zKzl$R?%x8C^g49_N#AwHfqnm}&jKPT^#(wSKbu3cCq%`lqX0=SMs|Y~-VTuHHvlC1 zB>^!9t6#%G@ChJ_SbY(&B;aB|vZo6NBsz2t0nus7AsLd9dlMp|NYzULiJ!TEgg*|D z!lQWjKpyS|h@{mnfTYKJjl>A=JcpYADcvss32!1G;nDfrghzIU6n+9sLszBV07(4P z`Mm_`3UZKEPXq+2dH^8t(+QB`x8&|>+4QL8O?oDvs>#la z^mv~FqRFU9Uqvt%{R^MOYSJ4*j;NjrNdA$45ILxAdH789cfKtAqRjoZ3}2#qfqo)10f%bhEZOJ; z!Gujv%8;@IM;BT{3Mt9D(a{IN@uSB;8^!~mav>MY<)8qB?Z!ILnKgG(=%tcgdtQsSYJD5MB!!jw}qi9w-Sydz?ScRi@1ef=9fP%GCKt(h8#$!Xo$k^-^_%kw{# z(>h}Cq(_DRMUUvFVU7MVCbQ@7%4y$X(xQjxQCwFH*4@bCAIfP(I+$bFQxk)`^x^DU zygnqSrSl2s31Pq30|k1RXB26eWC-FZMDjy&TDl*Jp49?Sq;PuNNpn(^_)gFn|Cp~V zdM`>0^QIyl>0_QzL}8M0g(p=<5dNhP@kjrJ|4$$Jcb-R}@qjUKKjaEHxa^6z{}hXV z7)c0XD=uMxkpO)X6$BdJVxK-Z!>7$g$l`7j2O^~JF6%pFwL&m`Fr*2l0zz?5xt&)*MA=p69%g zaYUvcOfq}BAk`6}M3r_4>C9W47XgD3HJ)eeQ&0i-qHijR_dVwQ2Yq260yspfmN=&o zNK9(za}Na1O(~6!2cMa)n#7wnR)+Dl2m*a_AeppEd+B4xFnK>oD1BTX;$s8f&H^2M z0Ar0s;YsN|^G*OC)smOZQtFdK*`SPqGx{1W#F;=xne;WnS()iKQu;z^h}9-ipR%Ts5BYpKx;5-Qq`g+8yf}Q4 z8TISX9X6tqEyC_|e0-xkWnw|dp_EBJz~y2=e5Mx`3kn@q@RN!NjlOA2Uhy$HEHX-_ zc&0w+;#Z_XLeidqa4KEd4Ivvo)YDU(0`M80(3Qyw6TESnB1K0hPopnq2pJil#uwJE zNefu|#5at`H+Thl)0z~|6gCO?Join1hvDonP?G5n7%Jsq=N&+BWWR8tRaXNPoTHHSB4e98_S*`Avk`D=(q|B7WOasOTP+bVra`qTa7g8@V}mDI_VDs#vc(?? z6O3d8^+ZsVE$VSjAy<12fixIe=T}fMKrQW?X&w9SBEz(fAlajBA=zV7CVOlkX5RQx zB3#92W66BpJ1SbK3^EP8@D4&}?&Q%ym=R&Z2SXUb`12EbMUnDF_|vlieX6K%@t!(! zG2xYj=*8NNjOX_mQ~K=r3wdGy5bU}9k@)!#KFJ?bxcrg$`z!p*_&xy(l}`bJXN!E$ z8*VJc)nu1|rM&vBy?}QYkmQDR-WbW-z6Hb>tu_N9DR#~n(d!I1!FGToH>&|i^2(36 z{}Zf?i2f-+qQ4!GVqv;RlNWbtgbaz)FBb?-e{Lor@gq<}e(P_zD6f zzI*@)zcCN5&cn;`@Fz$dpJwWdfFv&^IU>=W&0z!}$fD}Il5Py|JxVsB?(|N=sKc;hy@cpE=1*Cevj6PBZa3dh9NbL(q@=TH| zk(<6p2&SPip-HGG15*A*a~R3tKn{BXQa)P&Qa=LJ|VashHsX+(N+tEt7YL%GB??4;Lq~N&moh@tp2t9k0eD> zk)Qjhza#UrV*RDi&x%&OxQq#={JH>D6h#JyjuC`+7T@1@wr;^HR(x0ptM~$e{IC#aA=#dE!#B>g8a5_^Hkfx~7uZ?0i&LG7 zVm?-e5G_(8!o4zX{Gu2pzH@8YvV|))FBiMt+f}+B(<qhqG((`k;J|M@Zx` zTtJUy9fL6^U5Mm|6ep~HY4XbGj2}%p%{vg)v@4lV zA1GuMB|(W`D82A|8~->lVaPrrW;aAraAn$fJ6h=LOAg7SFyU9Q4=*PDU<>gKMBwR< z!K*d>_JvV|^v40^pQpcwWPE|i7bN+Ihmg66c;o4l(8`+ruEHon`g7s=Ui#NQnEy0H zD^&i$7UC1|#?$`+uh#V27e*1%-vH0|(l5IFq3)6GF_?nLcu=l|pG58~E?kUJTzDd< zSX?+81CWN?Zk+l>4gB|qkbxc^A5D?lfpfkH&j_){|!e z89hKok3(t_gqHwFc>MthuOkm9odDs70D^Q$FAh~40xxY^;TQ|awo*IBG zTyQF$07}=D*Wu=<45OON9V&D0khv+YG`?2mo+ES16`2xkC(~V8mobtM%X}~KE3E01 zERAGjBq0_u62HP^ieD*kzOC&26{>uRB&rUJk0Voy{v{$-EXCVRdAJsRZ=G8ktUy}Q zQp9RcHo?7kyD79qMH(8QLWO@k_{LJWkh_>Cm5%bllgV*JH_d7EkG{j6zq`(GbP@20 z9`O>C{E>q82*8mjgb2U1F8Hf^>qI)PypiTK7S;vnFh8gxCB)x9v~KZgBp~8jUU-^{ zF9MVo(fj=M_U+$W6310|SCN4{o=kTp9}ql?`2Em2NR`Mr;Q7r(z0f)+6CcbN-{>jC z;)m8js%ZjxoJh|g&=W|p^-PrbPS6?uMXiGrb3anhH?nHMM~X>k5YlxJ#y=VZ**HS} ze)#{V4_gPBF_L3xvQK_*8qTGB0sbLDhkXjvo&hHMOjiV&V7;LicHBamND8c{Xm-My z;UN$*hT}(*-UDRw=z~@p*2__Acx5*=O4%<{*(f;?lM6r`fYuamug$uO6QF)3=MELn zZ{wfh;7T9FX(_~^2?=q6gg7c5hn$7tcp*-SNgA*;v@lCwfTkwBKUiYq-7W;Q)8ib! zqxLu_?JSP*ql`*y7y^tdb1|g`7=OMEAh6&iu;41N;32TEl$?wOQT`lY<|i^*q@V%j zh>eBCty}lD(&CG0r3|Y7l3kwuB>r3${Hjg5CHLoN!mynQnYGyGBNn-uW zSMz#0eT(V3{vEgfGTr}ZH1kT=|8phwALac2c4Fe*ft`uymy&aFC9S;RsQ!`Gyws6u zNT?|EFs2$147>yv>p1^?71S;N3*{h=ME?t<|97j-Jf8-r{}XJR=g0jIQZn};UAU+) zE9TWq`xZWkG@ngPRy?H(JC{-EVy4qHm5t1~!VH!}GnjelLk6}om#8~6|Gbg;&W|I& zwRkxAkS0S|xCEHiv-vP-5lzvU=mZiJht;NGVp-d%pU?@Kv~NhLU{VWuV|FE@PLtV% z(bYQPRVBRQQa>}JW18>8e1hz?Mtj_J%cz)acQ9xe@1)Sz-9c+ItzkT_N&RF8t+4QJ zuh5sq<$tt8NV)Bh(cgY2t-09YwNB86VLHwsvSxm=sdef!uS^vJf&heRQ{dSA^FucG z3lp@)Fd3Puz%nInV!>vQgfX;R1H98GwbsaTq!3;yM??XqR=yx$WI57g`?4%iw11W- zjWN(ZFW@<4qMWI=xYBxxTxMwSqe;Jx-#lj^F#e0Ww~yNgUdM^WcWJ4M?QG(jt^*=t zP1h;FxXU>NL6OP_nUTt=NzR!lNA^O>o`XrwIaID>ncB`ap%GXiLup~r_Xq(Q5%|%h zPeN@mE}*>5>r{y<;<~;vjF8_P?jvO~vraBJ z2=lTru+E+3yqXdRi|Gu`a!w;?n(V0AjY6k`y0M$*W1;@Y04ZCUM0fB|j1(5b$2pFL zf}b6f5oOX1fB@4LMp4{0!*=mpMS#|r#P*HpOjAN|$|oYAy;l|h6ni|A;*r39NXkM2 z$AE(YALsG7pqIF1v`EYd3}J^@fGLS_g^eH;D0r}Qe_XqXW`kCQtkPN(??G$j0O~GyrJe2kbv0h;f$uuJf>$E%LFApNj7(Zr zdUq7wRa%pm3uWJ)-0-IeT62;B;hzW^AeCZGfV5CNtyH|y1B7{aMO4I{$M_?DDXz{4 zgE6Zi?*T$F@rp%tY=j%z^soz$)fWvP2bmW)J~pAW#A?es&ghrZLss@)Q%nX+d2#4~ zR2@mqR0F(X^4{S)04=y<;b^3!)TGZxG?p?)w#G)27HclA;m5)O@jS6Q0E&u- z-4}U(I#NHI>L}u2|Cv^r8D(-cl#Z4cfnkcHoo){}qCFP{%H(jcWtidu+suLN%?od2 zHKE0|$=V(5E3I+*&Gpu2+7|ZO44ZBDg5S)~&}&bX=48*9b+Ua`;u7 zaj;LDm1Bcboq*v)7_i8Fepc&{qfB{=5f&s>+8w3)&OhF-*W*i!Z0feK9%U(8 zTqP{tonEL9atC^+GU-!DBgB@ZGxtS*yUYx>vv|Y90R_sWg@j}jMhRV*kFz~4hd`U0 zy#_U7%+i@EIcu|WZOvtWp{jCwW_+GiP&?~EO&dViPojovyh>Tpl7`TfT`f0J1!IEF zdf?~^nc`sq{;C&vm&pAvw7LO!nM^qKlTbyMz26Rnf}MT=U{pl`7>PatG#<*jZL8cij}?q^ zTaq2sPgbtILr&tAQm2sB%wh`UkTJ_}1x2D2i-di*aPwp&5&}9@8eV{ZSsH{`L}^gG zLZ!hylAPm&ka^BQ?1h&GImBAglK4Q_lBJt=kP5)e z`7kYE(%>fEDH;v?s{sRzPXmkz&f|q_vgu!B27|CNiEedcqf0W5f(~#FqS-E!;-j6Y zsA!dBCq0WzO*ro&E7!r?-pg>p3)y{*H9-amAsIv9TPR@47Yw5{y8snC=|`DF=SpZs z6hL0q>Hx*+DaK+W)pd5WLm%LDHn$hb$J}Zu;q?;n*pB0HXBCz(IKl*3-pKGYg= zJE61b%swT(Xyp+?xy5j{kFIu^eT>FmLlRr(V2vSEE1lZz1GYcEAbl?XQ3 zp2H=q)ViA5KVi9IV=ayim|D84sm5!=L=3or@&Ol#S#!>^GJ+UHYE%JTO)X#0K!?hs z0a!eegjz;Dp!u8a-uN49ya_NRI7hi1W(EyFO$4fPHvL-8yD%QldRIH^eoY%d46oQ9 ziF=J}JWm<;GG)RmEHJfM_c5}Lc`dwRR2}n1c*Tf1=B@CG(R2(p{Sq!l(lG^W6s@K; zWMO)8(uR>h@}{lUuovU$qe-(df=;cWqiPGw(%NJP*gO|U&;p^2Qdvh~aPc?!JXPS+ z1RJ{tJBKLel!xrTyV-fHF6+8OH*@=XxXRlJS;255TH+AvIykcMJ3 zVFk}gV$z?Ji5`Vrm-SR#vwiA$Py~8$6<=J$7ZtsLmI}07h?bO)R|%zg94F*O@%xL> zg2WfC_~Jz`Amjl;UKT=>S#39SLOnDwbVor5+10$OUM681Cpmjz@4GnskU#4_@OKf7 z3&=B<`V{)=B9=sgvlnBMLekLIiHs{Xg+g&uwAMigmJxzsiX~1WqxOE%UYwST7(>bz zN%yr#!&T~;$ktN{&K{y?H}jTyx$tB|6Bx3j8A8zoZlvscp>V~FQ9&R9tw@WN5>M5V z0LwE);+YbWb@=i@mrXZ#q@2__POe^>@nyh;m(>rM@hkXDhJ%Oy&xP+Cz2Ddb2-Lv&IPqvx%nvj(9@Ex70 zH3^?sp4cM2gf0D*<{nhg@TY2<_LAe8bp?hir7$?IrnuIK#v_gPV(#$LW!-cLuuX6d z(T>QhqqE7@ngX1obT%h+HV1SzzhDYTM?8&kn=k!T$+~Lquop=Xu~T;pS37BpziG1W zme81eoI7crU#yd3c-+aS&Q*uK#vEFdRO+lTT(|j^Fxl$OIt8;fX5Qkg5=T$EcmiW& z!7*jtW(DPCYGFaVM6f>O~u?JiG7+OWS+AtL*Y{~IhZivrYPg&gC0%B7!q`b z>^eHbfjR|8l*w#2vPq~1!#Bec7<~q+;jxUY*Nq%pm-F-u4yEu5z{2+5LOR1nTFhswD2im_U}Z?K*PgM;v%pT zTLe;ZOZq>pJl-qr;?{qb;x4@Y`!~f*UyU^VvlWkU$`UR4SRo&%qbWG1Om2cDPu>Q? zF_#M}FMcFGh6fj&^hW+!iRT>Ea^6{_1B7E11jd7)m4c2|;K4eB(#V0inx=Q^`1wr`H??qFBn!^M#kkfO z#b1_12QJx*Ur=nO7g`3*!#ZLRtAQXoCj_6^!dgl1Bw1F{^iAc>%F8gZlCAaobZQl? zd7?d&k+D#=B0PjPrZstETAk&5mP(gN$!0m{2=B<>Eayym2i-%=j|s}My&W;+vY7u& zPGJrs5{0a#2Npn>a*aK}3;w(yW6|LM<7{u*2uCca z{wWJChKW7`3m!5SXb%XnpkT$~kBRKBS@7a4cvx8w8{OZNgnH5POGpjU9ZJ>k&?cb8 zE@ykZ>m0JR&wmYYcp1=Qi?b8+I8IB+=Vt>P9%{30cLJ`_J4iTrCcib>AK5qyjr%Eb z!u!v4ys{dX2uJemMLq)|Cq;wH7TN?x7(oW7#T%q!7HcZ><5Vh~WZYOMiX*wDRX{s@ zO`&P(eaY^~9C22nqy#)W;#qst zkqhW#j2DMdd@ZnVgg8`KfU%wy(teEE3P2}H5YUlewzmomlS%D-$y}3`3JNae6-BS3 zK|*SlDXyKdk`hteSt`PLN_{d}%b*djDZDj?srL9Z^TR8(6ko_TTDcIvUihZVP{W&{ zBV;3nG*}fOUN3>17?3VD1+8InI%q{Am<@kJ=*5_gxQoQaFC|OSVStqi`=*Ur<01a- zrZxAr@zNUSkH>_iH4nB45!hkBDM&XRQ4%5VPKR-*aA;d{CMynQk{cuFyPB;T=*T5& z7C%7{vWQkW=MIhU=83r|+ZR-ffDbtoa+2+xOKzQMoV_lrANvkr0f6=0^jQ}Q8 znPHz7qIOcwZilGwN#*UGKKgKB8LMxjHzpsnFrzo7+sdp&pu5ITQ2da^dJ{!njC7P=+AcE`?fRHlAH9p?^}S20xl~I{JuJ z7i?0;fC>h5T;S*Hb{$7~<=q5|&?4cT?+afy;S-gvp=2q;Kkp2%kT@NVBuRV>Bi{gt zGx9(bV-R)fQ+YFlh(8vNDDc&+n27m(U^~4LCV%NT<2GL_I&g03B4*|qT9}xy)aou0 zqhy%?9u>mLP)x}^pRh+{{9>R=z;S#NRmfR6(A!~4j5fon62RIA0{GolmB45W>u0n$l8!|1kCZ8M1(GUlhE*j1 zl2(-fCuvm)aFSM)Kw*;OJ7cN!KbmGfYly-QDRP3g6cnk0Gf|}WgNE$0$d72gXXVK& zv^_?L-6&86uh3ayh0^B>k1N-w3h~h@aAzKC6=W)0OsklJ!;%>X?==p=KMzSu_rF;A zlh9u%qyK}*BrZL)&^JtUQouODG|_RUzdf6damMN*ZS+Gg2sed7LHlGcyIrV8Mg2Sm zYQ`dCg^Ggg75@ADy%G@bm|%N?!~R~J|6={O1pZqB|1E+4mcV~Y;Q#Fs5EqH!`cPaJ zimO3!#V0QI#5JC{v-?isZ@DTdc^sHhk^5)JkUC5_RL-wLQ_{y8F&&E3fPh zJ*92k{6%cN{G-1&t-M=p_eJ^FtE;w~IjD4xaRuHniyS`|+anY`$ zGcJu=A2}tVU|Xl*UpB~JWjI`WaKOfD??Ua@`*rL;JFi(aH~Z=1OC6hWqtWn(r;nNE zb}6@YV?umZy@U6@59;!`wBzk{>&}-QQDvj%>CpIo-~Vv*dcflaYQI0vyc(S}v`Vv+ zmu~#gdgO?(^nn4M0h^MZh7R8UShZ*lnD)UtcW=B(XXW8R^9C5$B&lsfF# zJ>yo_uU+$-q~zat5Op9vs`i8_GuC*u`XujH_0F+r@m(Xwb!_A3>DBT6$d=s`e(bY; zd6hxc7L-06-?~ok0sf^b`d=S+N;UMZ^Ib20Uumr{&kN2evluGU83shm9Ym&M8+fVskBH z*!FQcb+0wcmp-kW@y&_J?$_!(+!?YvX=3{dV=tE+_qf8{zPDA~8qA3~tk5BbdC=dySB^ky?FF^yX(F~OE;K&C-?HynE9oyFWp*gow@RgC$-~KmxMn` zjq8}wZC;bmTON7( z#~(j@>e1%@(vuF(eXkgfj=OxNoA;odHO^I7SGG-Gu~gp%-3BbPi!2tyz{bar4~+ou8pY>(!g-A_nsmL8(s}cQ&e6?M@wc*}2bq(M2ZM6Hst%$}Qt6smov-;X*7fUv*Jg7v-uI*=cjq#sy zweS6U$86)ioOazgp~ZcN^QTICmtT8z$bLgu_nzrq^{cPw+`Coe?+g8Aj{D>L2jPFN z|17R_mCmZf*9Xf)lrbfaX!fp?K6iS5-BUx;NzEUeuD9KGZesg0y}$0Xtmm2Pj~>s6 zDC1vsUtH^N%J<*YZs`6#s;dudHb1`?zI1T=(?@GMESy-S^tx@%V;>c$-!;{HKHAu= z--MB+2QSZ>@zt#_ySPoRTRwfsZPz{e5<3k}<)%7!Yo4<&!M#C+)A!@{_ruuPplhWVpTj=64xc9pe(E%54<+WBH z7`NtiSLc%bv+U$>+*BpMNqS!*FuQxvvuK zy1gFsZrlA|uMSZpjn~w8F#X4)1qD^^{*8_&H~@71@5J7l~#nOw5W@D=@AZ{njp6(`x68 zRr6N7s~0$2T{e7ctG1QTSIJwNkTZBlDRalqqJplgdyReZXH4y8-`rl6-6qR2ydPRtB*KZp&T(aWrjnU25jjlMmq&7BkTMw1hnkF@1E2b=37(kuwo>-MX1}^7R=Kz3-PMJE zHg0NHF@DdFzjq#f>i4(Z?eh7g8P(W7G5h7J?`v%@tJa#Lx{mMJ-z)gomNo8IB99K=GUU_5{$G@9yI}XDt2?UL zHjL{!Pun3xJK$yH)vr=igX1GFEL!gLdYPZIU+TA^lg4>QFPK^VYP-gbD=li{{nH}% zO*Ndid>7Gui>}*u%YT`W-S(F=e;#Q6W?Rp#vs`j^mA0$VeAcnkUBBK_vQ`iMHqDB* zU$;3w?97o+lQ?(LaR&Mv=p;KZ8)XZKwG%qt-E?e2v( z>)-VsK5Ewr_de0%;_7-n?fl@vsE$`1?7u3l4gcC_idVD6>#HqUFmc7+x%0pH-EC+~ z-$-TON|k5WK8o_6^yBg59W(ny{J7s?UD-`O52K>)ws@2^yKNK0{^1W!`}KGE)uB&9 zc~9vF#YoQl7qrKx?cM2()7cl zUv3*xMltd27qK&9Yad;=|lXYRq6e*I259=%?AUx%)zM@B@qYMb`Uyq|x}zftjBlTS`f z@Al=vv>sP8GE4h5SUKv_$KRCEZnZx?>%hb=iazElQ)l_M-d6JLxbJ^7B^=0~xBT*q zcc?Ua>Jp+DPdu)l@fZ1n~*8Uv0FL6oY z-WBIMXAMY8nRj+gmoLi{RJt`VHoW!gPbSx!Q*zzsZmsuU@6~@%^8;b^CZD}JHf8#> z$W{BB)tK1r%B%2nKYQn@(Kj;7l?$7m# ziRvzkszf|a`L4{lmNkB8J?qNBgaO`9KV2SE|A*#rYk#c}*~NBlvy;tqA%R2dx|E9D zntM5Rblu~gl|Mdmzk8_7h3=&t7tI+uc=@vP8@Kr_o^q&J;LB~t&-JT0zC`gyAgLQ>0YR`_?Ayvum)#Ofy{C(m?#+v#!lSMez`w(L2OIBh^eiPZJyw$H1& zvBQPrB~?Z)_&#*#Moq@*8yD~N%$XkOwEX7EcE8O1ChgMZ`Q3v*^P6NGc)Iqaw|8GV z&fWaOyt#^vr>0%&qADLe_oR8vv-&NA&j*!@pAnh1XKFip|B*iR?5ea}dSf_y~k7_x&dtS9=O~x-c>X*H; zMU&^zKJ^bwEBhk*k7v!sZM}J}>ARzCe?OOcU$<$i-Yesqn6$+$29M9J|Kf*17)vw+=*ja$%rOny9 zLpi=@RK>NgO{<2#+H^YV>g#)}ewfnaLi+J?j@z#;HYR?vXTcJm6*njR@t{lFO2Rz_x-tG_vUH&4#5dER?Pr@`fRmp{3@mUH~7 zZe`j;1XugCMvq6KLu*7$?{IbHSL%SL%M91tezzOoV~Bb3MT5+jz8j+Vmv6S+MSsx7 zePC+m8#i)VPJNy-DJr~wBlCo3Lt9<0`(v{m^}gA+`)hxjhJ(#Y<&p-EA5Sp{j_mER zpw+_9x;*}3f2SqE=hhuseb3Zv?#7mpu4cEkcf&W=*r%ELN#f&*b$Z4&Pw%ks%7%+4 zclFt1=-I`4!1?c9_c~Ew^Xx&L(}E}UdC{y#v+g5L@2~$d)+MXQp$7NwC}-}R;&|rP z$+$Ut*G3Gz<+DF`%BI#;YpxjgxI_N@`FA?S^r>d(>w4?uPE-AxgC3OHv+}-MR;5E- zx|Yu`cgc18DqYh3!GAPyN;@!r%bhLXH~ePCxBB}>oNgpW4L`B>&nE$oI@#Q=UulAQ zikD{poZ(OU&Oh>`_D&x~NTp=&q~T#d_DJYjwo^vqCyQ$j+I!@(f1SshKEIG_vu?rG z6?+FQ?q=U~Q} zy2ckCJM3sYK6G2TlG=VY6TZ%NZ}7u`24ig$2M_w3e>nZls@sZ@k2frCbiLf6BVS!H z{XS*ewb(Pid}Iy}9uw?ZeRHRw`>Wq;vA$~9gpR%9UUhsOyj$J(hbkJsVSVT6+LWBV zw#(o%-F}PyH7sZKsnd!&ttb7u>`udlN4NL7G_(2-O#&-pm~L zV%+sfHqU!RnkKyNvPd^Ht!m87doEG6E@q!IYFgKO(_)urjbT^k#C}xytJqz?1eE>l zh`#)bovpsx(6nHE-LxJDD=b*wqx;WxrT4qvzP{7JX1d)myMU?H@`trf>h86sPGp|} zrMDiR((BnTqhGZ$eEq#o*RP_#&c9Ig#jD@TwfgOTV&C?D%Xa#lk4%c#_T)m78Hw4| z%gt@R;5+@JRyS5X?SC&c_xG3<%Z#eb6%(pd+~Rqo?Z#c@W?ysP*{$=%YqjD^Mm@MO zCj5S$|FlH~ewQ3_*R?7*5i;UN?U&!Woja9&Z+4G|3hffx21lpQbsxKLzPaz4=`B}; zmC6{~(c`q;q_~CCx=nZ8v1naxxq5TwOxp8B+}HEHY=+NBO*Abi@npfM3p?V!wXf(< z+QX*S!M%nut0rfAeBF1R;r0CH@9rg5h-klf`i39p>=-d-&I|v} zHEMjO@q}qd4}|qD7`kr9w#QSpE?xiAik-SPRlYynrD<)q^`qJq?46M~VS7Q#@vWcS ziQVF{>5P6oCbQRVYfIF7TD$-8XT3fRoSUy(>iNr;dt*lFN_#x*5jT6) z&mH1RSJI`MJ*L<`yU=C8MtA@FzeZgz{R9@Wnh&$7$Dmwr;A~dgAo3K~FctsP5J4)iJem?Y$@C>dpHu`CM+Z4M!f2O7a}z zf3RuQ7Zt*O^qW&=lD*B)1#@d3oSZlL{N6#YUDJ1;dZE1ReKSY1V5U>XxchD&oqo1! z?edx3lppIByGOi!soH!-{j7@N*MWET_0-&JKc(xEev>N=Z&a>In}B;ASDtCL{ABqK zC%mSAyRvQX8zlnE&Dyf1#iiFfPy5b3IkjT^F}qi9JGIMxaIo>`k83@3d-}4I*RrSa zyWZrUZrQ!lTzgei&&TsS9KI8JPjzSH=I=*t@wnGxV?*ydyDkp>d~M?)V+J?cFzWop zp0k_lPi7oDU!_c)TaI21&p7j4!RayKm&%VUV>E`1 z|FvVam}TqNw%3MLZW!C}?YNNU=K{XC**>OA=|%5Wm8h*w-L!FD_M@hDtEZ>5u5)A2 z^oGA|IN^5AYt_Q1xuqAEoa8tl|H)4mN~h0W`)RHD9T$zCz2)PrtHW*{cx*ef+%dOL zu8zL?ajmRz`qag(?FV~oZt-GE`Kn(ZNNtq3ZuUXn(8bd#rR{Gvbkz6>=CB)%7 zKXutOt>)3|pH{ED#^sD=-FFkei8j7nGN}JddIzQ$6W5dvqg=;_Mxj2e(T@0Z0eAJ`*UX6y+{lgb=&!H z_O*~&!%O^OJmlh)R%vsy$gBPQY_GIgG<*N;nF;F>hq@%pcwBOXQ(dpUk4oDm1n>Jz zy{_NkJ8wqkFZQZ;cYmMhzh`v6J9gsC(0c=Z3h5equYoS1!Zr0=|EcC$R|gD?doy5Q zzpLeU{XYO1K<2+K?cUV!a=0dW>$xN=JqcC5&9jX7zYApDJU#nl zH}qmPZ!NY_F&Oh&d-LU-*T)OJ)enhg>>z8e{R~uNVC-jHbC1jU<-%FAP^-q7KblW- zxP`o@qtz44_*r%##Rap$fK)2MPSj*m{{BT1XkG+|y?==>Sh4<&e_1n<)#dTa=&+xg zQ=RGz+nAe$NzXJ}48}Y_q*gpwUblsT)GZqP5r-F2ZhpK!$%|VM1z4cxN627;+gMFa zdn$zMMzAnB<89^Idzwmwj{N=i6P`NnGN`*6NiT3&0NBbktX<6BkeG7yll47hofb|HGLtoUJHyzo13xUOB$|vYi)=v>{2YPK2@j=3ssbawjTSivJ#JeF05|__2jlv)`aR5<_ z>0DZ-v|10{EggsKY>Vfjn|})*C0{B!&NPHdB5%a?C1HPpCcs`)NZh_6YTR7Av7leB zC6Bqe{4Z#e*3;MJk?4N{GI(~Na~FL}@nPNHz_XWx_()HTD!}f-_aWw1H}rE=sz|vd z7(k*Ez;cC$V@0zA9E3qSW$G(Opn#gj3MVci^!8L9^(AcyG?AtMkIP7=0Dn@pY22)b zPPEL0;y2)R1yax5P~?e#7#a5uhp5Sxs%hiLAJ}ZAbQ+T;7vfIPLH+DtHpsHO3mA@p zB;{@IriXad=TXcd4-w^-ov7pGwZb=0|D9qMw?sJV#8?Jk;wYjPa z;2rU_Vb}8S)SK2adk?mVLUCuVh$H8rH?(1t6^yP5SBXbGAKG!4f4~@#hIryN_ITR+ zHLM*};XyW!b6@1zz&f#%XBP>~39MvL2K_*V#wj<&CvkQn?~Y6@4Fpmx_@vPV8RqMFf0CJJJ|=lws(1MEc0R`Ka;PswL;uj#dGzM~hF|DD3xB0OmbM4h?4HxI&@D7G)=_9V`JL=x3CHRF6&|A=ec`|@=K8NHKc za-ua$tL3nAXV0qc^#Ndu9e|ZvdE|VLa@v9WK`QMaO6CFVPt;s!pRG{;r_9~gKK++1 z3}n&|M)~xD>n0Q=Iv}WyYAoN;7gWM5@;eQ+vL+NMx4LYF13B*X1g<9ihq~mx0?d}S zoYoJ51_T%qQ-$dg0%^kEr3so37W#j0W*3&tyfe)M#iKBHy5#L$Hiie=T~%X@dA!q{ z{0<<)ru|;y?;COF2ppb z2bS%UhO+?E9PAYCVUqWz7VSxfYQ|#_j}$(ihW`A``|Pu)0Ku30Eb+oHaXg!(&WL2$ z=}!bLM!}$hfiBfkOX=y61Jm8Mgb5mSu}FKXfPXR5C)5=V>>g)i8rvQGjgniO)L&i9 zlQE-oHa*pq$*zz93G6{GFfeGa?aZKfB9NBJ`!ZPq9olFOxYGMF48f*B^V&v{*Pv+c z8#$p1t~yJ1jbo*_#@D0^h`k5%91%5u8OOadz`nzXh&y}vsb0{=g}kn4J?j}c8J&u_ z!{ZK%#7GA)Ex|^o2YkE+b@NwkZhS*X{2Hn1&xaM)TP0Gw!3YHHq-`P@C)-B3&_gYa zbz;q)5Sw*TCt66zb$S=%oJn7|ussaHc^(?3PuKisp#aljz^D%obxeozP08)wgZV73 zDH>ykjWlsX_|nKJbP*R+ToL9M>3U<6<-_te+9#iSwGZL~+GFEb>ic3s?C ztdSU5BLUpUx^fyy|5JqDVqxM1nO`P5=HErYI;Y!Hts68yidtfOgUo5dj)@WDI)Wz} z*C1i(RipW|kI!|O|0DQHfSW2rT~|*cBY7sq?4CPK9I@T!p!*`)kzu9;Y)vw7qZe&A zUbfQ^msjINFz}d+?Hq6-WWMWU!yMK#cTrt`G{YvS&bdTZ)ksyMRjuI0fTtirgdJq3 z3Sb6-F@fwj6hlBu-Uns+opS;{%-9vR5VFtMDBWgY8@>LXoRLMa)AS!4qTfqhLemF! z)funlUxW}yRQGfDyU{+dlxe*+ghs_oW8)pI*~%c~0Q@8LEZvqcpnz@C?$Qa{q~{Cv z*Y_d@mYr6A^eM-da@SvyPjG%I)N;G`48bJnOEDpdp{~VU4U)+Pr{k#ji^WgAeHbU4=w*g#s26W2tFMk**}Qq1OQ8)UW@->!n8ee78NxQcyc( zAs-gzaSB+xq*wfOHB%D2;oTLGz^d1D(XvN-O9Wk^^XS-eKHu?y;}E?fIW8 zZ;Jk4Hx(Ae7!z!4@W1AkdU4RA4iE%-P0pp_3!6@nq0hym*jM8wR}(9{D#PrT5#5Nc zF@JvzZ2msG{TdCj6*)jya3-n-%}1Bqr)kM|A{E$Gc!!myyehMZQ8=QWiJcq_c8em} zH`*9nn-RP3$Hm+B8OR$Ae_N2|2TM40NQTX*JE{xC$KYL%!uvqZuu>T#dUFPZa3&)FaoU{u3CWTUObe|?H)=)a8QXz&#nN^$wV4i$0Jc5t(=kr{BkwcK# zYiaZWho~15>)@Y6n(g90y*54X63TfVLf)l*K5WC|p7%EY&9#_; z_xa6LU0#!#t{F;J3xQ&+#%WH} zI~?ebibWmKoqtA)d})qb>K`R?_q<=X#l5rauI2E5h%qzD8Zn{p8UIOLzHem6<*E}b zSb&+~Am|dR+myYl_Zss+k7IWH9jNsaAHYxRtnTrFT|y6UUIJhxHpp-jb=THsONj;O z1DLi5CIN#c1^m*$&k~X_Ksh~>ro!RSAHt9-8Ft+9Hxuy*vX~OTmj+(U@1A3wAuwm# z%WsSxxE8?)(Ba)YGu0v2)nb?cfP$gZTccMq45ZDXdON7|CxtNh_D<)D zwQH?yE`b`6DqCzl^ig0a-q^&J`9aLwOHSh93cxNg=d*=mZs!uw`1n#BciSXBO>Hkq zXhH7dNKsYUA$^r$acnBF&4UtS8D!y5E`q2(zjMrHF=I<5_BhPwuCAx=I{o=JJ7WH@ zdBC6H{UbY6ChvlTm7rv96D3#)n{hYxBQ6x7wwBe;6br0cGsdc>Uez54^S$VxhAP25 z0C}CbU(_@%_d3HB_BHGd5kTtM3r?fn!CSl%9GOP0Ny&s|XhOM{jMJ5^6Jm8-P8wDT zMu~rO@~)(mp0;=#H^!88_2Zs*=@qn;9H+_vq?%&%_TA=rn0ldg{y5APfR)ikBgi+D@MhK6v zA26RTg!!v{im!vKUcb~aqiQOD0lLp}(&M13gS-k>Cv|H&4u>bR7f@AnI(~terZ)2R4+$t**g?q7X zQLCc{ek(V}(r>`NbEa*Hx>Zm2*=E%NvEekLy@3f@70$QqT0^X>) zi$Fwwp#8p7|MMz(z8#C3y>d#oPpQgL?3b2@V@rCIxz&dz>>!<*d=&8YZcpTM7XWDt z=@Rt3iXIk1fg;d*I4b|P{8cwOP-E|H?NDL_GRG_JL_7d}~4)LEs>yll{4vw*L52uE5>>iK>e^G9m|Vb}^v*Tte<&Ao837 zdO=g4qz#E9K)7g(sHmzpb3sriy!3>#4y|O{zBMFRRP{yUp)~-s}36Z9%h{qcTX9LUTuc=q+Edi`}J+vF)-%+a9 ze~dwfa#|VpcL{gD`j3O_t!H7#jx7OCyQqZ{>OZSKngcb6*1`mkF!&^0?q2Et6Lw2( zsiZz4y%PT43{#qOw&gBdkC=g$-KDCuTx>c)a#9=<`UBZEm5^%GQ;uz5NYn6evb>{H zpk#H7QSZuz8n;w}2+;4f3bc&6vt5)0Mh=i!T$OW(q21xE?A~Q6lQs{QKq*zJI$Zw| zmNr@*e6SUQ#U!QS@K~FS)VSY}^=pL&v|?7-oCIEA$AZs3qwY4)4YO7;!>n-ur7jnM zO6nw?@b8Y?cE)laPVPiKUfik-=8qklm!|k`049ximmG?aV8HHgCR_OkZcfSQBElzx zVP#qrSvfOdJvU=O`e?(O&7e|>E#n)}f{?|bmnVCN_9ffP^_ziugGmAj-q_JkDqjwn zbmx64VjEFKd7z~age`d?U#0563xis7+x^>yIcujEZNqDYgoc&UaD0rOk0FXMH8CFVjS7e)zr!X?i^!iDq^9k1qHO zYqOA!<>$2(CPvaYWLgxQX8icE2g~8{Hrle-uuV)D+1uLHRCbv?`PCS^Jx6^M(N+&W z3JHd!ppA_BDlBw1yy#O?Cy?!+?tVg#i2!>?K7N$+CgVYeFp7lOibg6**El?IY@&Oi zo2dmpUgW8{N@j2R!R*#SIGQa=M<(MsWvw|9heNwerz-cn6obIjAP!|Whp*HQ5jJJ` zJyoSVwdZfx(m2)Cs|~P>XlR7f8l$~|&$ed~@XX`SeC8iaY~V*v&w0CxDH;LM;?@kgb*8l zO6zpE{*T$T+e_0LAk;CyH%I>1MIs1ad9I)I)eNNc$C0uR+mhW4bHUkZ zE{AE?NmLL{b%)zxb{&x!o)7-#~vxJVLmgN-;x9>V&IN?yPXW!f7`ABY`oJh-0XC|2ohSuH6Lf6MjFdN z)yMXP&ra=Z(L)ajEu8ydg|wX`Z+Sgwev}QpcPRNbr|wW0EGgNv2eT2}Rzr0c+Kz{6 zdaAqMrHZiZO)1N898i1@Z;Ong`)$lkg}9>Ys6vLfHk#=8U*9^1_KqA32jtR(WO2jO zyD33I4UaK+`wKhSYMi4XCifTVsls%fmna1LVMkUO{M01ozDkvNP5p+hxZsvZxf6>V z$qcM#W-|D^LlOlTpEm&kptty~`=^S!vxz{P#)Zy@=FPgq`ar9GmyHNyk&v@sC$`1( zQB&0oG>;=V(#bI$+rwssHUIT!P@dLWItFY1+Wa*X^YFjk)?1oXt}zqfb+_>4SOoT?HvP?jjJNjCq zc6S?H|0P$)zC>i8zGI2FEM^W5bT1#raLglXD{Em~RM(3Nw9C&ZMIv{yDl?XY z|C-5K0@){#1UutnE1=XA(-}qBDCZEv$hw5QvxAAt4;V;eIAJ2iEDJ77wDc4hP@~)5 zRH}jD_l$8_=kSl!&!`8r(-hkb`PkYE#g0e4SE~8tP~w-tDOJb|-S^mf`J>jpn!V#ql0Tin<^ZTbq4bi@jR&tc z6CO?Ug;Gq`35&o}SxJ}Q^`GRmp?zO-Qn-(5Giztvn%lNAv!ohPw4jKKRaMN@+fs*k z3B6Ly*ql4G7Hesu!l1>TdgVo32v0y z=e=?p*S1C7YMzo(SUyQQ}q6|7cUO6e{{wl*RB)!Rzgzr$)TZywCm}mTcHq}rCIw%=_?Of+P zt7~^IHY3F(9|+@+=yvbS{(`n)xsq+Vi}ewXi^O#!D@@ERkNRx*;!=8l4Kr5$o(j{H z{WSSeRBI%SEdXjxB;&?3B2bL%-3?nS-dk^Xzgj%yECqWtU~xclZ+bt!aThmPvY$!} zL>y4khd@)Xhv8BML^4cbA;^5cx7*G7BF?5&LGL%1h|4HKT5;A-{nplp?+&5b!hUEo zqL%Bx14JTXb>^G#i-gfKcJyC!KazQr@Y^`&oF;kq2BmR4I?5VzjS{jxYolyQX3{7l+{qT#`0G4uaY85nT)2$cYD{Kznx5UQR+nXbXTVnfw^1Ig5-sminP-5PG5$n8s#f9 z9#R?&DHvA`Hm);=Dnjw0;QH$pJ{RxPw1V4i)$G$dgZ|-$dOu#+`OvrZsvcBNo>xj z^mwexaHloS99TKB_M47KgAuT7*KnXg16U>-t_GcK+ER>U-7xzBx6z;bQY@fMnT9Y{ zZx=C>2CHj@7XX1PJ#M69S;$DA=*MB6sdc!DWwaNCONVbMZdS${{M`J+Ht%haqoF5K z-bIN)Vpm`3pWbZQ{ed3IAl`sP+J5BQTDIbCIS)4ppuNZJ@Jl^dm~sXksFyZBtgw0ipJ!Fvhb$cnO##rQ)tNQr#y44z+}0!3~2r z6Bc>(rOH1N(rb!KZTLpT`HH4)BQ}j-`g3U0!4qvmjg{nf&98v4k0HX@)U`jY=qMLl zX5ezwvrWDp&mdk*SZZ{rr!{cgxuH&eCYy{@xz80kS@ROmOEn>GUT%|*jB3m=-`qjM zwFFK0iiZ1MG;a!-W6NT>xnWN4ZwMxGB?*r<_Qv%b6Wd@C6Rh{N`a3o2Kq=_%H-L!8 zg--Il!~cO5OsK`f^~-htTR?A4p+CszHOk>GGdypb=nEtR ztts^*$lIm9nEsl#g5KpXmR2Z_R`Zd?VA~2=3|OcrN)$@RA51?WvzR1iJ6d)*Yz@!j zkqgQ^tj#*xqEI`P%Lp%zC>qa0&n#FJB&g}`V7!a$jY6QBasr>nRMqt|W$e`)*k9p- z&pI%2reg)1aj36qH=oB}yxh`?&C?8Z%b(jnFpjVoL@x#Z6d+|SKF@?u_X*Wb6!`GH zewbVG)AH~;^f%a4qt9`zhH^FZCX)UqxL8MmU0bWu-@%lSQ##UJF=#zvW_shmh2Wau zdvbYPSG6_`-b%Bt4UAZm3+Zv;t8!Auz@&x2xL^`B+AA5;XGJA)TWoMZWyzC;YRG-bVHKEY(KZc zR4u^IGo0CM@c}jP?fYx z`M)(&ErOup$fnpzi8xfFtwAF`TuzLe1d05q^fb>GpISBRz7YPAYz`hVKarTLk~jd; z!l~(uKEd33CGI=Lh>4di8#)xa&6?P?3TyN2rNV5b!Q0VgY z2zYMWjC78i7w{apYG559NK#IR*Z>lR>ebXp`3i*j<{s2`K$mTq9g$rhCq#zOKbg^tWgp zizkC(_tPmqFnX;q$ICv@SE-y@{->9`K@8QvmLz{qo9CZq#P4UBJ=lTQ{f!_jUBkzc zc(Ytou6$4SixTO3Ml6OOz|1f`$LU_k^v6E9YQFTQANf2!P8>XXptHUJ3`OtwhdxXV z0JFm4Fk8O}{*()#8dC2hlBzSoGF@opGP@SvI7Id4SZUy?XvXWs&G)ZbNnaC-H$|qD z_|Jag2?{k9^PLy>SRNql?7Cri={zUwE-t>4)~+n zvR#4R7k%7!!C9v4*Q3zhNpZXVAjQ)(`_!tkOf!mwU??5)EDxkgqVIEPJ2$%#EV48L zRHJlE?cHVrEnV`(?%HUn`9d+aXJ`;$Hq^G)Xe@2b2SO=?3<*#7sP3_7cLWr5;^eMk z{)v8HOC}8miFa|Q#>a~s-A<13p%)*XMg~t`>fm_W`zj>-c=3n@i;~61$sUq575$*M zwl%Khy^-5n%w!n<5?)9ww5ph^+Y>$!p(GG{p_@jX-a0Ktz&DHZBaH`Kd^hD%H@Qw! z72Rs6<9VX{fTyk#@U;OT@@%(Ti>r|+@D#ci=F=Hslcs`^(;3TAu9WfNTui42znF!O z$Gq{&BJx;qZ5Yk~;~{H=J6$IcEik70HJh6wpf+6MUqIOf-(9o5*bOp%AFwO1P3j<{ zZDhki2BV1+f?fKRZ9R_7k4Tqkl0(6^&KK`*F)Ma6*+IDcXZRP35jB2;yCF!@pD$IC zOOvOpMh?eot{X9V<>avN92WNiSiUjFjZN;`y>Hx`2?dL<46-XV%qt1GMkUocks_ZtJOja z(u1=Yz+Z%TpYIT;`S6{(y;C=@K>7V06a3r@xq`PE@R0>_7>FwIY7z1y$N@yb4fB8- zrQ`c8`*)8d-cjeT4CO>x?;+CM)SP^ob0k28-qD8rGP{JEpxipO)zR4P+!1<>0E8^F zbjZyzbDPG;czGt$SEB5?VM6L2I$E8C}3zt);NWSK9 z>c8_KSZQIcDv$Ozp54+A^nm+U%=GI z&N9$|A4Dhe(_06I%X+hDdfSrkuia!v2Z{5?dr;}o-e6>PxlqV}#aDr(eWb$fuCs^5 zf`3j6KU19XspxGSBTnOVX>+|7SE-Ls@fOnI*(9Ob+F>IRpGb2%f-zncfN4Nutkv+? zO<2O0BF8V-<1uvZobJzWC#kN$D_$G6jxm%n-qnw0Pky-MII$|D0}Joaa~DN7;e*LK zh35B08dr+vXfE`(14@GZwR$13k zQvA^9E5O)~|(x#Qnen}h}I-pd&Df3Wl(#0s4t5MR>QG5u%GA7#`4CXwnn+2kL zRY%#B&CUI>otV`d8%eR)qX+@o4$LnVRuEGIhX6I_Xh7ULKVxC&%;|WdI6|oh^pX;?DxDiV(Ol1T9LIj`leEF4@krc|)cuVid324cvp#MB0B(H+m=4|AxXM9am=RUu->xa;bJ$Aae)_@Ym zO)WV7Ms>Ztwdkigz5XcjxG@trs{lhB&U~i{2dvIF^HzQ&YQBhKV;k}`j|Ic0$aKp6 zodlkd>Kpy+ZTOKHj*V#Y&3>l%&_v${<`B?W3rpXH+4T4%48=6~SFQoSpjPj8>2o8) zp{$i-QxghIbE+p0HN4epUe>ko((UU#A|#$uD{&pF4(v>s)Md{dW*s<#DnQ3ndoS%8 zU+$&d)}=q{3p8QOHiWiMo!vvE!1KGgjw*dSI4%xQ{8v(UTO4Aodcb^-3Uo~T)__D}~-Xlv(H-vzLC@uzK3?8n_Ldb?9q zS9AJ0Rik{!H&Mb>P5eJ!F*RL2uPQ`F=qUe{WJwXZVZ&`Q`qP!nBkC;t7$4g79a(*& z(A=88Bpz-JGE)F?w$Vg`VSZ-$maj!*phDn$%sRY{))a*;pj%oCDC7yDPQPIZw5+E= zSNdzEYByQhO3`Jv0!5MQe}WaQ=DwF6R`r58+P0;{yJ+-Awe49Z3?MCGS*qsexZvm+ ztRVh9*o-+fxL?FDg~CCKv%jbYVcXpGHKzIKA?=vt$~SRvIRKv|*fco8aG*COtBd2atmlK1dwBw`@1BIBKkD~h(k;C|{U&0XAjpD!=&Z0QJW+G7jOq?ew z)VSd!4luQQS%1n?!MBFqJiTLmaI+87s2#$tgBR-d$#}Qm@sN`>G*vV*E2QF zum2X}wLt9gFPXPcwf$4+p@%zRYYp$aGAF4}?hF5Keu0+lNG@8mFL z0g3L`kNrKl%m0srMuyqb7T!$;sxm>+ zO5x}%4Z3cW8T`vfim&svVrJ|9M>IFP3SqVS&aqtc84l*1M7a)s6%^a}Io7{nJX_4J z{{v?sK^@ejrNSIeBJHb>e^c2ShlYV#4XLRu()V-+@eP}b%y_1_MgJ_ry&~tr*`)$< zGxfD`zqw8PX)k}pmEi$hc1+XSwlzkO%RkWzevDW;c2g2{VJ$4LftM*<*xJ{*fyCMO zz>Pjr2(C1WgAs!rF$l}V6%-y4j)gM#mtP71g&y3e?sQ@$UA9?Z48V0zxz6gF>?nBo z9oMQo7k7A*sI?r0zdUbb0hGmquu{{;P|q-}JLmc1+A0r+I^!(|$bKHbr7anX@-R?`MlUu>L7l|SOB zTRGbOan5cD)ebW2&lcTg$}6dRzI|Hz#%t3EM&QsbZCau3<7%UqkL#nbbspY>9LyA$ z^*_Qh9I(a7RyIMZZ=@Y;sZnJy-gF?pMvrWDAA4?wJ8SKg6xb(sa_8KFwnIWWvhxsz zbxuXNillOVg@n#S!VfpU+i?vtd&>9VcsKf*|36ZD>fq5C0YZI@1q)F`DQOh)z;$%DCYVmHkCa07P2;=*MBC$PKy6qK{TFBiiknBsAhO^AU2LXd6 zw$JMHcq0h;R!KVFOM7=6bbwF~x?uN<^TTl+2?ASUn-A49mSNt>xI?$>10YA|T~rcv zw6Yw|bjk0XpYJlg0BTQ4cOs93bN7X#td3Rq^A^|IQ~7bkldv>L)VDR)k|+&768c@O4X91>h2_fWM@1el+CLzjPhfL7&XYQyR3%~ zs8o%e^5B*%V_vBMOb({7Df;OV;6Q)zE+cZc7180q_A*Ye6k;sws*L4?J=lm=)7x={ zl}risDyD)4b{T&EPkca{<9BefOd;d&Pe;XB5C6zC8>Td$7N;A$QkD?^D?~L|gSR78 zqJp=`3f0wBU6RPNE$kv@|3bElYeDDyNZjMsX^ffHG0?8u$^?L~+dKsw*g^ptfW{7E zS^SByl#VQRuQZts5(K2i{iK?rQ%ISRp&sDa8G)AQ*YT_TJU1;9P7S3YGZA5^>0@X~ z&}F=%24UU|jPH)0{7GzvuR&3N{|+@~Aidvh<%vd$Pdb<~{s#;j>dUx1hhlUwE1x2h zE!^#mWmxZI4^6M{WvIstbA2d7{&0N+J#q}ZuE{1X**T@}k|t%flvjl31}y+#2@kkj zK@YLqc4fuoiT+uV|AJ||i)bdinp=73PqB|@9yImTwYj2wd%p7lW(8N!-WmDAAEY#ajZ@7BcZlA1GjYOwjK z2};I@aTROIhggw`L};195buI+?J1&JSWd6&W#c&W7OrQlUWXIY473aHR4CGO9LLC| zbTLu2OlqxZe{dD>TLpdkZ$3rFN{*@4shh;G0tG?Sz?T!c!^0?oVeRNjgD z=uGW(C1+zDG%FxD()(BA>)GmrsTxfSV4!Y8QbeCz!y9#Qqd5xxmN;r-e>MkCOv}}F z4!1v)pNosOsJaj}upfHRo(gzI!or_aZ50#+Jj#K0U@sox}pnyCM^wSX#ro{!fjUkg5vBTc} zP@XW^P90orO%O`)+(Hv+Ra+)(1;?EPkpzX{=nCSx$@M7{6SU3T+32&#mbB(h`#AVt zjPT6pLF<}Y{Kin=`ee5kbbug50N2A)3FznFID#fOAxoXND;0i0>MhUbb{rpMSRB)zC%x=ba{YZwVuoSLPbDr@FPv_MP0ddD%MeD5_6c{EbF=|@!ebFjq4SHIiQqPp z{R-N~%j}V`LYLCfT5qf!yKeU!sZ$;1fae|`(-Nc*L3hvZ6S~8PEp`n>-?U3NAFGWR z4f5i6Uhjpt^w5r$;}2I9bBA2icz|ia zGZSXv!OBZbLT@-*p58!L$cIiROeRtl|7wy1m!RYbYb6bTo^AN++3SQ*vEREsv+ z!S_57)y{~&-An$P=?v$^NNzk6|ATF-MOs%;3;hWyOKI^#@|F zJ`8C2B?|~tLkVVF`5gZ8d!@f6Qu>&ET;c@4#bB?R0UW&&2?`3~6=g<+8HNfy%O*&D))C^^ zh&d>o3vTwBv#4B0y@*Bmr3<)sz-D=C;B3Mt+JzL`{@~RQ{yNi;()zGZ^GD1JqzS9B zAIJ=LwBx^XqLT^Ak31m@_Xqyu6Jt@Z{gS!OJGL1s3=vC6jN;?+s$YT28np4BxHVaj z#^H2sSeSUMMa65cxukF^W-yG{Zp8 zQ`{$XH`&1(IU0E2o#6*KX;|p4kH^e`PA5}_ql8<7Z}Jbr0@OG?4SPcbwmpKOT$qad zvm^t)1Id0bxHC#<&tca#?tQ;0pAO#vT0K|>6Y~OMXf9%WL!b?@1;~492M?;6ze7%s zkNZyPC2hhz`nSn7ip2x}mXrJC;Leo8>q9txr(oV;gOz38&P6quq4pwt(zJ9?eOaa-$qvVYpldMhr@w7 zg$R+gv(9dyj@jHl`cv1;#)rFLMo+fp zAs`6pnm_w%vlFLQihtB5SC-)XtACmr3$g+2o;OOjPSncjFl}b(Q_LhKdoKV>k2`27 zY9RddL3#}!!pw>@I(qav&vl6s=li5NWzT;+!xS9D&MPv$$D4V!ek1lqX6f{v5t}L3 zRHY_*d-6s%g4YD8bkcJlrI!A!{Zc%yLu`O=rb(s^K241wy%I7jovy{<6yqF z_X#V09G|LCIVv|3tc(UB={O9=DVIec!H*ON?vh1ehu>x-&Ed=(-GfeT9`QJ)kA$$nEvm&344a zSRMYU?^3x2(Ww*v4qJCzJTSRe;JQL2B)tr`$<$c%>6*CBqev9DX+qa74)#XwL6dX_ zKt&KgR|LaUo&Qwfu>y5EjcP;CDj|UyLoKRG?(Gq8h^wuF|GOA^R>8|?T^ zS(f+}7-e`Od7P)lhrQiaoA9CnuJar(imbIc6Ak~JgU4yL@;#*K{$%L6uucZMcR|Yd zPh+1X{Sqiz6q;yn_^iISI$mGX0VnLQn~|zzLS;+^C_?^T0|bMyq{rSlmgcaBXr-=F zJ+1b*^b?92m&}ur`v*;vOkJK8KPkMd39;!=EGf}capq;~2tHi5Fp2f=Pm>%;l;SVA z3%g>kiF!Az*q`KumXH*+*BO6F1bdpwt3T0t8Vc<-8`f^fJ|P}pYw>mr&bj=N+Tkaw z*LzSXo_kxAV^yUYd?%Rvs-f^hYmr-}I=xRjM32Z~X=N@emddaV&eW)#6Hjc78{Gvz zxg?ki828_tcelq^uH8SPyCNl%8}dR^G^0vwRsMjS{b9Q$Wx5ABpfiaf|KSj@IC~LN zs#LaS!0P7mlpq-tj=mOh)i>S}|64M`ksgkR@^5b!)r_9F0PthnKv@w4H0~ z{Zh_;P%>1>vJz#b{06<~(1CH;73xO2#uw8~I3%`GIUwpmRQtkxPVNo&yu;`yW^Ms1 zHzIWkwrAF$2jWgN3LA9=&+Oid5lEWA4o1#B*iJo5Zf^Y2nQbwqLretER*8w7skdJ~ zu2e*Se3HJa`ysLBvUUJ7;rmb+C=~#Sm+XNx3H5jXb?x1;X$4UbtBtFa$F|A1Lh=&`WJj<eIX99MKSdM)2HK zxx*?%^C#ui(|s_Ox^(n+{SKjH_wXNXYS2q`U7m?|rz$9i(%w8j(2v><;xT=&P`h=0 zYUG_aZGEpLVVAsU(5QPc;EtF}CaY_G zk{+@T>EH*Cp`rYzyMQbG0JUe$l_!5VAomBC)90j#Th0eWi9fA_k1}B*Y?NC9pgX|^ z`Nw0G$0e|PPBD*EUlY;B>W^zoD|S4A4xB%Jrn&UtKYVe5ISvKbCK*_USRilk_Y7q7 znZoO4Di#7^+z1|ec6Gt>QX7YvSsD&z1(QZRZDJP>YwCOLHz(HT@NFVnx5ro)#XDh< zA1H>XK;VqCyQjLHh=Hx#y=6;4;2&qni#pA`{&iCy?pLGv`RUaF1o}HF~W_#PZD0130SGNCSMDfjG0QfXvPpZl1`; zn}Qv_1B+{OMwTx_z+ih_)-Oc0-lOO1-J)s#eFsybc_J~-0+el~Hwq0k^6iSNi<%94 z19tMm6RupwM0}NG#)ul{!ihk%h-4M_(R3-n%K zo6tp;#sb2+apz_mYC7;0p~Ov(6*^Wd{*0#*O`x+C_c|dH)JO_{kK61^z-@pvAoYiZ zU71SL>~T76pLsBhP4=jjjb|z<8x0K+@_n6*#Xq`_&((qM-e})^48Y?nq^e#!)I#?r zA%&Zz-)09&1x5X95;k59osWu7IM@65q0Iba)%AdOF(|2k@>NjENY8k+C$fPH;1s2l zDHz$R5L3y$w_xYpLgzFW&h043GsdJTX|ncMa%;ChWaR~KL;NI4+RP4 zlE$cye`qP@=`89t@R~t!y_(u6V9enj7jyMd!W#ZkQ}maqKW-!c_+OoLrOCE2*uvsa z;~g%Cd;{bR9@#)*#mn_{X?L*R`6xFWmWR4feHbM=S|*hE)JY9JgzP*iQ?-Wz3v*m8hrAH$jUwe&gAUY+&Ou9uzc?h03SpV1;)rfM0 zpY9E!PYQRJ*VuBP>n5H;za7b7b9sWVfU~0ja^u|Ef>4nhYLtgv!>7~c4&}O516XA) z1pOj2WQ}QApJy4SP!+CulOCAK{9>-TWX3cpZ86rJKM9&=e;mZ8**xK@zwG7<|()p9EnlRT% z&<IMx@;bl8d0vG(7 z#^~{*QGsJAa`njc-{t~|aFBp-zaYg+_=MV}CEaoQ@$= zk#M}0{hKC&7u$h@l~CoEC3(Lzu2WGsUu0lhyGVctb_IEIc(n&fmdz7*cFhzY8l#~>l z7H(xKE2(;<({|kez@$DTrcX|WqArAq+ed71g14VXVb|B+65RH(;8rY}J7-<^*D8j- zMijDw58c?X1IEh(@%c0iMj4*h7z11`^Y|A*sJe)Vi+3h+z}z=Hk0%ct9O)a<5XPYQ z;An(=)ZoDEtrH^fo0*HWLK1zd3zk4aNL^;j8~a@Q>(+dPiw)7#npUpDhbCv^4I;72 z@gcq6KWIDz=U~)%PHKYCOUt6sOPJ;L5pH|_w_rh4m$E+!K$;j9eICjvlz#u9BAbv z%1R3GHficU5PNJFcIa-`n)eTmQ^Frbm$0)0W(k=1l-JKmGHyc=V`)z!LA|H6CqXH! z;2P4k12-Ad!c+pAC(x3~%2L1wGxM>i?~==>YNf|F4S*#WS|U^}G&c-56O!-J)n+ZM zlEz~U1Ich&15)wiOx-15!3KQa`Ei;-9~8UfkrX0ZZO*ixgUrT5{4Hx;l96TbNtk6A zV$<0-ODPr`&~d3$j0FzWQJ=!8;b9oMafP=DQ9b#{&|EFDNRzuW04qS$zlNuT`sfI~ z>sq>|`%~Db?&b4+@_$%y%4n8{98v`uZ_Yat)w$%p4*gTjP%Rekqs7)0A;=+;2fCgA zKA9Y-T}xgp+T?}(Gl1LMiJFlpi7UUJfne376kQ=JkW(R~{nt@Y!)k;w$YF)JYRnh^ zO!qUP>lE@6xaHI|IHFq(I#$*yfnT}+X2t<4YVUZn|-u#>6CMGGg%?|oMsfgSHENs8VujA zU4|u*Cxg=qw?3=d>@=TSJ-n}6bzgq%R~iUJ`Y%T zK`_g&sTaZ_yZy6gnlFE$Z*{1_MWP`jYbuc<@Jf^?zGVIcSSrS4yFNVgUa>CV4m8;!ttAPaHgdXU}Cn+!`+G2esEtvOV% zKLl!oCfGv|1DTWaM6uSusbMFCaYsggwAzaggKnGu7vDz{n&jwyjX9S5bP1^SqFbZ8ebZ(D^lD>nEL1E$*Tqwt*(N@tJZyap1_ny+Uk1YQzRly3 zTm5|x=66toa3=6c#n-xjWtY>T*nNre)On9{ zz+c1I(icr6eRzZhgK$M-{O{#D_vGD{+g+teB^R+2`;L09MI!D#w{AZ15$YZWq`X}p zurM7$ceN}PE_fu1XsWsbHNA0;U}vCp-n1ki^iJg^Vf|j-jj%sd38W=RNZyqq%w?F3 z86TqG4sLNbibBU<^R1$nmQTmS%J+FZqyd^`(+^p2U9g%hf4dCxCyCR9`HZa5BS1xZ zi2~DJ5;6rsK|QT4SNo}g`s4Br0CRy=3i0V^2u!6s3u|ZmVOtDDu6$dKCBZRuD?mYu zz#$o_!X~>LfI`9Bb+vwyQiuc=xC1;=blD-YM}bv^#IR12Cb6?aTJf zf!Az~k<;-5QJQfw?n?%&4)wxKTyC=>gIC5hUNVbAT;RKafYx;h(RPsIKG z;VTP$^?UAr6Co|VGpMMMwJkQUQlihaIrW$yJkI`+9Cz;E9j* zyO9Yugbf(La(vvwwVC^>rKzy4L^vG}ill<%XSUt9cyXGgBW~%1IYroAvH@VoR7#3` ziTg-@(+$}SsSXgPieC+b)fQ+hiO8i)QSZR-OY7#IEa!Q)jz?b&#M{~+%9~2|^nga(W_`S zUx?N;I`}L@0^7dsoN-{Y_cD6^(b_k7Z1Aw4K~$+%paV=ko4C##X z`RyCy3tR;3_SjybH!4w5*o@~nmLqFSe4G_im)Q53K-a*dI$--UaR3ZG)wnp4gr@f@ z(P(*+UBBlC2ENX8+NxCmrJBo(e!9zf5a?e2^rg{p3}KUSpjxNlE}nd(U8hR`gvtR_ z=RHw5O$U+{F}qgxIQbzoqyQLp8J5U+ya!@aqB(XF7YYh-k0%I^8jb2kgtB3#w&TBn zM;P~c(&in@QFmgtp2gOc|M;ig(^$8VZ5UMdwBNzDOAg!tC@X9ATwG07R3B30VZ{@F z-SA+H`?SZH|1&U_g!r6x7ti|t8I}sz{TucR3HW3FEJ8`4*%a#eZEs-1RI}v_nxeIO=kn^ma2Jt4D!{3#0{Osv6&9T%VA!|R@^ffO*6d6D`Q;gaE!8wGz; zwe0DVkKcoI3@OaAu|yWI-YQx}5vME+p@CLtOO_)xz|NVS6;JAMGVdiKQw2##?!}|N zF|q^klyFc_rB_n3n3WwuEk3j=L1&z#W#|&A!yF}wnbKX>bPNb630--VRhT#ANE(VA@>uy{v zW4!X^-lJ`H^y;>No+%v%nG#Vl!0r+r>Tl9H&C zQBEP#=!+9%@Qo=p!an-mG_i%Q>Bn`{vK!E`b6^d?V<=u>t+~WXUs63uDV|TynojB+ zE5nVr4W-BdA3ki6+63xwU9diYW!MT0OL1PyAesD=)Jv?R$CCH4L|ZkI?7Wk5r=nAZ zH_eA`;9dt7V%l?o|IU!o^_fgQuq&)I_oiwPMJX~zT+#$)1-0(4dEg9^MOhz%iD#e} zZfNCNO1J2~W?4p!B_5)4rZ|-x6oc}?9KD9*mJUzPE<1Sq<#d*)I?a0ef+P&VUO|8} zP=FakBNdXf6w`WwVek}d#FmJ#aJl;g+x70Wv9NS7Z&RumHDgNVI zj|Ds`vbT(*{x<@{(kvIg7cP31Fezmm1`OT_@P|b0#_g<10n6*LuRF9Hy-A2REht=z zy@9V68t{I&+8jFu5a+~t^C6Rg{6cnCY+76ardDu1b@W6ETcKWg4+2=JSc%ujH;=V- zwxpZrw`1xW!w(D$`?M|}|ED?TmF@c!mSLmyfS9XMag+l8w%*&^XsC=4#apG$AWT&t z+Sr=b#1w9K!pfUjEn>kU%gj)_sc2KS-K4ZZNgGk|Pb`R~`);%u|KZ?8gT!M)12x3o zDIPs8R7LH2pEQxnm+>Hk%8vkAD?8Zssw3!L7ksuduQeg`+*BS`)+Yx;p$p=%bcbn}xa3i>aqEOT%H7GZG0=(3}_e?!cOC&R3x z?WT@_%{d1yE1o$*>EbHoU;>-dXK5ufWsuB;CDc@T${_{Tn+>y9?SXd)qEEgHO5^zN z!C++X_Jj-suvUYFudyU6z9Rq zAR5;AH)@DdjxMb;ndfhKSHv12Q7q0({Jfz6+9&CW_v*`JmNPEGe6l^3`pyZ5P6}? zBXHEHM7a@?0Sh*>3xtxU@+5ouX{OveHGBZW$=>|dAlesCI-xJVUt%b8!P^?Pv7#YX zQK`RWi2z3bAjUZfX-ORE7l(b)Ef|+MZ0a>o&RXvaVZy4KB~&@xfIL6D81Fgy!(Usu z5NYn3;6o7g;{0V+XQ!WR)y`qta@ee8;t*-hpRO)}f@zoufX>DdzA4#Y1G!QcyK<1# zN?MmO87#ot!JkO=qATF*kmS4Wpb|H_1L=X!mvPu_9Nwr(ea}p2)j#xW zuacn(Hh|CWCM$w!Q~)p!mc9Pin)O3GdqBE^oFx9`%7#pIVuf}mKLdm==!?;?ULNl+Sb7eBmWlcy>890(_Pn|Ydeiev?%!p^leA@N@RTsXHFg}D zi({W&@MdIqW_Bf~O~43fugv_+k9Lr@F3MuFHMo7#0`$)O{o>HT`VNrUIJWQ2$?uDr zX3=sh@hZK{bXUAK#WN0vH2Vn|vM|b8@_qNBkHhuzfxj#8#dLv1ey^^jB?YcjJVUyw z(ul=YYJl5ym+gJC?ZAq2Ak$GF%x3Pk{Uvq{U=SA_W~_GY(Y^D*9+UAy?ipeo!DW}7 zf?z&;)m-T2OPHgPY|_0`42ubqjqvK^7QkDcyp$_F)Dbyok<(QXaC6sMY={*HuplOO zH{e;ifU4}t0e?}BQ)n7NgD|fsf#~sY1D8v|-jUnGTw(_?tO0Ch`ToOt1=V-esIvE6 zzLJ?@@~|X1H2~$vdG&hjK@*cb`nXA*wWlm6BSNIaxPwO-%RS@*6YT*!K~By@e&HvP znQi;6vom$ShVIIiswL(xkoJA#s^#QBHMfivN*j9}fHG;L;wPTTapjls*$}{X%RsKc zXEBMw2*dJNdF#`i@20VN2r&F@BBwS6-+p4V&}{8~!+UJb`%WQ{X^jOc`E}!FC3ksD zZCEzyD&ZPUk zN1u?|hqV(eF+uz3VrBl$@$Xsck*4-c`~`YPFw8yu4+~)=W1&`AHCsDx@u4K_Btlb- z6k93*clmoxgWSBG#dDIIeCnT5c? zEAO)QLX&$-iI(tjj(qa19w7WaA4;E{NAm=iDsV!l_}~nr>$A2*{p!%*!NDn?bNOCS zonabBkpMm>e4Un@U%@lJuY-khOA&<{CuAdqc4&@{D>cmdQKFP{zd1eE!|X!XrqXk{g}KCHXTvcm_-N zU_@F+kflkDEUcir2e=2cK>Iq6|7k5Y9-X9Q@5_OfKBKa}TT;pL3h30BI#z zQvazOG{ZsA;;AO481CH-SSf`zsHM&0eVu^}NAsM|VjzYk@a?ee5WxB(HT15rq!Tqk zF)&NHBHJq9lE+)5>Y?e1J(*)19?jEit%{0h&c&ykQi)Tda^38u;aW_M?} zBiEBa>U;TkvrTg!jdO}R{o zm9MM6{Hj4BYbOWXn|q6--CJUV`Rd=a{G;;vcUfCYECugE(7y1Ibp~;N=%2?<@*>J} zoX8uWO6H#WH+?52RuvkA5GORSL&6iL0W1lI#w%7_6CL*P1B(?G%EE#jxIQgxmdQTx zZI4R7D!@Cma*x+bvv;t93^tD;_OH^pRgG+Nr3(AM>6z)<3fwB^x$m4*myi)L`<)V3 zbr$(YX!3;li`};jv)_l~xV)V2aZ#r-{lPyrn>fcmf0v-Wy7VirZV`?=5%;}ltNteS z-nV4%4WH7?QTA;yi3#N0j}LkgGHkq? zYNEwlzM66NBbWPN_0K$6J%25svLTiRx+K~d%jASJRKp-5ZWt*nF^J$~FLF|M+!vWD zD3porg<8LRMq;3L0P#@9HS`OmvqL!*|H-`XQyL5tGI6)Xu=iu&zcI{|sZM>G7qDAJ zU&ym$&=O(*ZjUIFB}duTb+`*zPWH#VlC33T-6Czh!?}(FShmO~y8G6!%>Z4*Vh}eI zXbgQoGcAl;QP|I3yNsS`kIUHC2*&tFLyX%1KD!Eq5iA*EJC%ax z1_$qGQbI0~2y_HX!<$kMxr4KHNhHv-P)BlImJwJ(r1Me7jhu96oEPw) zJ<|To82?A&C?GR90mON{zw_dN;+BL8h|s+k1olyZRw_N8JSGw7EG@GYzBVBpDfq&` zZG_v;pLoj-`dpe@Q`hajphfYT)|LmKj_lmFnpwETr!k-4;`#4IZPQDY?%eU7^gNsY zYzXsA<7*E#qdAe(+lU>#zYWZ|mL5_ie#^i2<-wSpfhZKRM+M8B>Ux~raL34K9R$bJ z@UEzv%M%!wE6fMRhW>WE$A6WYDo{6*duwB>P0=UZNEyCI;M$ncog@OHfvJRLHRy*k zi8>hFF*ONtT*#0g;Tu{jrQ#m`(vz2KZS3N|C4%0i3cd8!_MBgzcT~$+6p{0>u7=yq zNmg3UCO>&K6EYq{4^;x8iNbG8xO3XiomJPwI_?=bmxO|9VDjcw9<^8d@{nP0U*de@ zq_HY&@2mzV&t080PKFk9<$M@xo<}{hmO20>t1S0z@s47cNbR*)H}8y7Rv-Z}UGZLq z->278wP89_#ekGT(N32cZZ_7uz_TB8AZ8d;#O=h{(IK5m%)y?8TLAE4#Gx?u0pG_U zX!7%H&=p6%gf#9Xf1fXq3`&+h^Dk4x3tCt7y#U)dq8hK?cq8&4XNBw_Bqxz_d6rw* z*(z8Sigv~9(rNG zd;=hah4vCY)Yb3>E@%*kAt#h+!&&^&d_PUP%Y`b^JbEdYZ*rG|VoKcAjGyggF~Yez zxfj$UC=$P2U;k}HN@ca=@#F0#P=bKSy_tEWven9>9Zy! zQ1tF1SOcko3UYP<&m97uSUrzf_)si8*0KM11m6eEaTUF2fQ!v=me)_J!!Uo|8k9@@ z=p_*Vc{1GV9X;@$KRUhKwq=~=J$a-yCn(c99n{01Y46@^q6f*iGqs=JF58zKfa36a zhv8|0O5DB;Sv^r$9BfyUPVQ?jV}x`wvw62RZPVtWyqn`QXtag}{Pz<%i8mQXzh?Ip zQ#jmJ7_*aN#d7{(kc3WcLD3U(1W|aav%Z$eK=5I1e?$x&i(?HjZO|@K(YilDisFVp z0D{YQT48XjAv)) zru>4=n#PID9nh{(WDwFa{2B1~v>Vb=46yt?V`N37o~@cx6ORQqGW$@!qnW%-O;e&J zmJFl*qQcSfxJ4TLFr}d(>~=KQTb?SMtV@SAPJ3$CmRaN3f)Vb`MF2hV2NJm??ixW_ zG?$kyMP|?pm7i3w~C)3H%LA(HX=WFNTI5ja)WyLp({&5;J zn`8KE2J+@RnK6u?!4#V&Nr_h@*{O1kMj`A5#iWD9%Pg1vtkH1$KXO&$RVCs?@x%sgZmD4oh=<*%Xh+rL z2;~(xR23Cowy|>O*9o96Fs#;{Lu0}p zJWq_CbTS3}Q+NuUye&7`RFsoXeHa@KfV7>?g68OGUKZGz5~*8wf4()B;t#h1o?8s` z15@Y(?lqE@e4{I4)-)i@MqgW0td_EJ?^R;3k$WFp?5iQ@GrPy(c?uUnpE@YC1iM;C zD*cc0;SIDjL^{u$0WsWEc^VOcMWd&3N#hO3+Ns^R_HdTbJq6)SZz;N_uJ_&0-e#z=U0y{@<-l2(J7=_ft zwhkYY<~amg`qaHZL`}GUzBF!l7*xDja-AXNfMXEXnAK4OtRSRKI?HB3EGHk{ampJ0 zg4+*E_1N-xZgiVIS4%d>e{MifOZ`Sa&~7qEh>`FZ+|+-{u$be9 zj%2ksJeWl>orR0MdSh%CPqF5E|H_^FlP6kgrZr!sn0*QR9pQu$;3tm2x;T(>45`8E`JK&_R5qvJR}i22OP0mV0>aqYPvzC2F>N-)JaK+ z7Ab&e_DTnxWHU8TsOg2sz`simLHrXT<+M9drg#RoqufIo+ny>)>XO(kZrc_jWCE0U z)t|J`MVqb>oyOa6P7z;OS4f^7{E0uK90gYDgA9-#w5f358p`&?i?8m9q&{{&nB{Hu#aQ_=%X}pPM zJOF)k=taky1tq_42=cOJN&0wTk%p!Yg!XJ52yh^Ftk*?`GPN<<0Oo*-n^I$MkpVt$ zeJxl>4(NQ!WY*{p>nRL7wC8(c7w~2!%XS9Hb(-0dNV2i4c8^8=2p`P3=X%%&Nopx` z?-}rmB42T%aDh4M&GW$HtK2R~9}8SEhP$+OuRCRw2oT_9kkppNcaAAtt2>pw zJsGCMHg=ihMzWOB_1<+PYbd!`EV3(xfXz8MxuA$6neaNu0x(SB%j%mS;BA5g*R76d ztZIr*N_#5ljd1U7igk0{wsk{1TXItKOX_GSk%ufF1Q2>D3GbD@v9St<^Qpxnt{F?u zT~Rss@Wg5`_Lrl~emt*8|tBKuXTp8NqaT|qFG5w$qX!@u9y_~Cl zorKDExSeq_Cp=4b;_K?%2=e1sGiGobTUImJTZ|3-H<$km$Lw&8nYfFlhSA*1G|@;cS`^TN66tBKTDm4ObqGow?)jm zrlE@SgxkT}{jwFySv%-u(Ldi5Rk{&~9|oz`pGg3p@4w(5&2ox=vekp)nc>(8-E-=b{i628yo7+lS`HsQyn-`G`VTs&4>UT zAXmq)hMG|#>D{Q#HNBNM1mg{tRfXZf2zFkRH6^LvXM&5PE;3gN#?-a=PJnlLzu@HT zZ@?(44H})a=ae3q1=J|3ZE(`ILdE+S7OA6+BFpL=eGp_pP9pKx_0Y50pX<#*ZViT` zE5Jr^ADhK;YG(_uY)zQm*8hBsF5b$;`OY?Z9Aww^yP+<3kM1zCl^d}otmrPOW%tIn z7&`n+u+Cu`}3hmyx+->(@0Ewtv!Tk1UU*eX?QQ{FtIYNt&gFu1Qugin95HynXVop;Q*x zK>eHhcsjZm^Q&I@DKOYB6;S%uip6)`!JijgSrZj`rC+JDVvlG>P`R*GF#jZ5dypmZ zgqk&8nJ)Xhn|^7}+K1zoZRpm)(3M=Ll`TAOa%CZZ(yRfHJSK#KCBBd;T zixAX#@5EV{?q9~Z)If^3V!hUNd>O_|3W6g{QI8hWKtrfrm+rFWa?;EK6M}L<%6ySLj5r z##kYJeQ-q2cAblWITO#^euQN z@(i{_)N$mlVO||d2*tlP5+U~L(@&bb6@K+AVyiSP-)J^ZzgZ7YXP$FS^VgeZgZLeL zNin#=io`o`22ov-J2D6$2y{Yk6(Y+kNXQye{O@@*7ZSfQXk3t#bHtBQqRLG?8;>dw z(u57{n=QfLWY6zLrFgCDKSS}(b9=)cVjmTTGdCyJ>}vMy*a548AQon8=ouM-I)mG_ znbJ|BBVdV3@Vhz;yY)nxbgpUZHD^2C6Gz2Z;Ly!XJuE(1^8IHv()~_Bj~nh4Ao|Lx zQr-V0mc19XF+PluwT&$@$zGIFZ>fc>bG&M1pkeb{s)9nS2)__mbxHi~9EsK69MTZJ z_-A{yjFBd%|5kh&T{e^6GGzqCH6#MfbS4m9{J=u7yPWv^QErk3#jjd!LmeWnyg&c{ zYj(KPRsH?KNHO{%G9$_T$5Lzi8RU`>|A}`=B_)~L);y;y@f=~Hg)Yepf!usl(ybzV zC7q8&KkA#Y)+fFnEM%sE1QfOA2krRa(uP7E+G^FGiVh+HlI2MojBu|u$pZiSODpaV z^I&0Wj)exTH)hau(?4f-OwRk>h;c1T)j4KsYV}ak$*A1nPqJPQ{8&u#b8GIMubu@5 zWiyLd4XG)|F0aL6Ti$N7!qcwLa$MRqL<7|sjD|(we&Lf}V2H8RrFZVcV5)M&U^~*k z^}IvBj--iL4{M)Je4vETKV1~wC#w+w zgTu^?;4}UyNe-iPyFetZrS!^|4@tkmhTa&?p=ZVkk0^~tL>Pv+OEy5T?ao5_KzKJB zV_MSvX%c;le54*9c9dpf97q=~4E(2Gsy(7^;e|*LNs=>Q*v!`g)bwL%FAQ9UYTw`Y zHe-h>z_mO^DhlorFTdxT;;@L>x@H0(qVU(jBas7s_$Qc*iZWH4W+5p>@sb0WYZ&uQ zm1E3S(9`xtS{GRT120&GRS~{U<71`IfLreEKjG2a0n{L&a_DE)spuAVWm1!7jo`MV zjl6X}a2vb14>x0jGt`E$b7%j1@9cQf+8Ek*R+;UG$Er&fHw2670Z3kX{&OI$F!Xcl z<&I4iWU&r>j}X}Ggb0`hQeT$9ZVuVF_eB0N24uNtTBH0l{gO`4Kuu;#TAV$2wt&A> zl#~z(GCKYN=YX;~3K~jQ8jahB1u{L=HWXsRR%LB&3H5$mMdHAtBfR-Aa)4CsdOH1r zt|F$-p_>NR#hH2qI)lj-BZNy|=!+6Br)HWLgV4=$%*|bW$1gDM7FK|YxFUlPtLKkY z3H!}(5>XAS){3jyBx!oZ_F)Liu8?xS_n@SN_YKL1pM(P)ug?{n$0yGEW5jj#`MX1< zTXtnEP?6nW>O!nM&KR@oLvF0*&gJW_@@Nq00y*r*@S<-;Nm8mI|1>RG?zQ<>Q61aJ_%0wz!if9uQMm|^=d#fAI1jq zDhzx%S48o>UDDvXyvi5QjxGjMfxv~l)z}}Ghz_bXxT0XeYY(Dvsk>FaXwg`#63OT=V(}7Isrgef{hzIo;*hv zF(IqAnS7_Bunh8u_`8R+Fl;~)MLk$wcS+hPpk{LV`~<* zUw&!)pl)Qz@zA;mcXOpIsS#gvD3*GbhMHJ;^I>vOW~wZk^P2A@)9<7&GI%k)C&QF8 z6+N)pDKT;K)q(XVfb>EPF2@(=Hif*+K&lU&HZ6K(TJ+|0f9k})JFxAIa}5~8s75JQ z-r%rX8gF$LsEfHU0`b%{D-jIy#xi32|Ja=pS#<@!S+qwRC~9_RJNi1k!FM{BDR_Xh z2?qsbGNUrGCXBy99qw|H);RhqXfzD>OYJU2`E|X+pC?YV@(roSc zHfR1unnk;X%ANoXzfkNUdWTY2f(w*-QxB&U1TdnesUbkR96ta&ly>e;f>2$$JoxPV z+n~Vnw3A4IQ~B3T@;;;*1HS5VUGf-I=Z2@&~EL8ko1^>Zm!lP#)}=m>7pGAD}&L_@bO2)H=`@vl9ZFj z41oHMpuQaylS>|S3f}nh41yDV4;eD2)4o6Kbl67X(l{-}IW{*bW;l9js=4P6>^0mZg{%X@)4k_lr={?#i3Nf~e zCyYBX+Y5xF4??gRxehzl;R+y@OQ#*>PS*@6bf(Z)R5=i(AVv?9Ofu9btos>FA1$oz z?VHNzhCsNQXPX-#-3-M3kZ^q#a9Lyg@%qW~AT+d#j50biZDC6O@mEYXWqmrwaOrCol~*S=Q((W&Y@-|e%?W^WeEcTE{PBx0c(|F>TJd?b=?h0K%0 zi^1mt@c}2tksx%d6Gkh)AjF*LC91-HGmv&Mr2xlY0)0cDzS7*|Z*GPA7BdtG#hUdB zQYRxqj+%I0`Td~9zE&#V=eJ#+72ka?0{4&p!OF4f?vrQ{MK_EXK!E1lXW5FX=zf`! zygKK34*Jp0WFY)3GiNjzWw72coHOdnJ1W&En{meFYMm>{bnfPk^15EoCkZH!ah)vB z&Vq>ov)w*54GSqQ+x>UBOa7ky3uKVFTe}D$_JVifCel{j{{n>x@JqF^p)87ZR(Fy9 zg;JwpE5kt1oQ!HzyzL0ET(1+LM;`L%JO?1>r@XElsTa5^3*lpb;s|A{nz;GhquZx+ zFne+-3^NJNARIG(&tJ3`nQKDpT$DpMdFB~CV_X#?{1|jpNXI*-uy`#V8jg z0kQl!=3q#Y=Y1ss=EB#;FYyFq@98pKJ1Ph$PfUvIXvZ$oT86f8`x6^80<0&SS(U*= zdjl*8ys!bIM}7C9S;lA z$JW3CyBone2C8_9RaqjWI0-M>HH2x#LsQ%kL<1Om_Lc+)QG_Jq!F+wY-xfbqp@x#x zTU$b@ACf%KJ+p4h%$*+fL%7-9frXwt*MZAllT@phUJ7~X2W_isI?oET$4wFL3m5aT zdKBc|ub(}RuL_lmic`zmv-)v3@ouy9T|h}%jR?!>^zj`(vu4vI&6~hQ$pnni~j zz(Z0dL$^aw)N78{wN)@hbA)}mR2AEg2!VBzCLS!Mpsf(>#Vy1)@c9wEzmx|CX235E z#L2rbrobMqUzEsw<_u8lV@K2ubDCxitHB}Spd|B1hh&puJ7ke!JZ+)cf*DCw zyo>j#0B=q>Hhk}U1IJYC zA8bf2s}_g>Ccy~of?9-xpsNOLkN z7<-tt$ETrcoTq-ks_MprIlt!A;Fca37>_IV8U=jQQ-zj9`3viqsp+Ab)v%vWgy0jn zujW|QKbQoV)@91TaF#9qrEcCLD|0(y*k7p&WY>ZhHKt>cVV^@#?yT-7{0jmPu`Y9- zL9PY+Ly6HSz!@s46aV)d@NqJshlqZ2karM-F=h!fQDMT zAuu9J_gNfFn{P>q!ndo?Dv>{P8tt5Ar2(%HsY0ua)_dT_LO93@*LFDiS1aqPQ#_~# zXNnlxv}F**!D7dq(6al%;*C4fYbFxy-@~?jveladeUjQkG7$0bvM-r)zJPn6RrshU zpC8UAlkNB3n{vmQy`YEZTFD3WlsYE2;o+M0TtF3WXV+|3<;ovi+sjy*25aTz;^WCFpK6uOL&NHxEj! zWxV4ti(n>5d?pfW3~}*Hm2vrI$x#)e3JsIT&atQ?y@rWd6(5E!MfsfhFRr5M3^Y8I z-PkjeE-rOaH70HFhK2d%)D=dx%J-<0zt-@YYPSlS#WVL>3A(cibW)(4I3$YRM8wOW zZE$0lZ_LjXC2OZar?pAPg_Qvo#BrD2gXT{SHF)*4&|@SO)-ekS&imoT40>BC%lqvo z$*MI>*dR&XAn7LFv?8{k28{FF=dX*^P19TD=E3bBg;nR429_39IniHmB44ru1C(H> zqOf83LvMk}d=7#V63>=Owh9tr7!o`%)sZwj9pHfKNZLW}r5wSePtT4X=QPLR@p>h_Dlw(>Qz7fkuj86tBLLTgT%B)& zOpNr?2m|FUGl>LiroiuJ<%yZo4PiAFtkGbk?)cxpq9FUT%Y?;9O6Q2QuRu_-CexUK zb18v9*QS4T7b+BDqE!V<>R|rGh##~|QB!O}gMMd4*6k$=MwaZ$*417S+-T0wFQMu{ zcxlo;yu~pdGp49^n3jO`FGm+*!(fvW)Jg@HBJ`4rJD~8M*-Q5HM8Owx98g6`Mi{dR zkQKhh#dJ(rUTt7D8Zr@ZSS=#Zm^iV7;n4(sYD`i`pj%}NRYfZv`bVXyz)0}g8I(3M zBz#jTHfD$_v0Sl42hE6KWGk9)8&<%;!e*rvlv$eagAZ8l1sM>%x9fovbuuqaBhkI#DC+r<`Ztk^6$!T(lnlx z7@I|Forq?u7bQ>K@4eu(XYm2#X7go)m1)4fJEyB?qgo*hBzp;m6cPrImKZZKj5pC! z{^8DZP0L|J3=qOJ<+AmcBLhmh>O|hBF@AfK zR$k#@Y(*FK+-QiSu&7FvF1%H@s9>irRpZ_at#hs|L<10Fvd%~6|2O%rdwA$YHJCBp zqlPtwjEmbw&HBsRA;!CJCRyo1qrK0yM|JjkXNvKGeyN9ffhdE&!pMaQSVgbu2j9y@JIMtfjmE4@d&mBwY7mC5 zrv&_p9Za%Xw4VLLLECgLvea8kBU_4<74qyoCEB3hPM~gJ;AasVb?D;aN7Z?8Piy^A&4opLf-CH?sA4gZX=SFvs*xMZ~YcC7}58E zj=fvk`uSqn0$L1S9dINQU>m0 z$S@q`;HyecB@;!9SZ1Y{(E0(teiU7S4q>Q1h)Gu75sJECP2_EQdV+4=aH$#m7hWV3 zRKA z=W0E&uIqY`nz=e$Xs8SHYXVS3=kcD+0>~$zb9*&L?@xS^ikc)683+vaw&9V$PTsq2 z62yd!<4WB0-{FP%E>GK6Ki=J;M$|V$mNfQvo`s+n@_Y3Y9gZgj@sB62?sNn11fyE| zozX{LZ~QBmt$*Wv0NeEyH(}9QASj+viFhez9wm5==^BJlaB?!N94CEK82I%N^tXOn zp~#aX_JMCTbi`{hLc&_y+miLK^xLdp;H$=tnvniDjBb?67GdQSX(|ykM~%IaVn~$t2D3Edmt_RqHpaDRc4X^^q&*C)gOmGn{mhc7j2fLbEQtQ(sK%@(F`|f zXR^x0;xr+jX1@jt1?NVP-X69{>HAqGW|vU_Q=r8p0rBnB%UH+;Y~AEWCf>j}t&9kP zFEiqb)@zV{8%Lujjt#OutX2(6YZKdGMz!RP{iYEfIuh@hccbe6+eCc9YR-4LKt=DY zV6UiiQAvU-963!WyPoI>gB4>)-Mq@}@q_FZZve=~U1>KgKB0$t1xoN%wApcch1l24g5Vj670Tn&pX##cJeL6U!F8~tHvUN4sy zp!EyK6i3l)sziA@0U&;0E;GasmUQ!fo& z>9HZr058YF^sJELU+X|Zm~O6!fFz9rY}U_kP5DYDO@MyC6m#zaxV-}HGehD{wU5~~ zRw&?M1ayOwUN*?G6G2k;-amsZcIv@axkoN;>`tT)Vr9M**rQOq*t9D~)tYcu8L1Wv z92jUSL3kYg)a#7&-@v><1FmN118~npytW&pB#P>78u7v;Owbw?2UKW#TiSin$zt~J z%!oBYmM&@S2a8X|l!XlqO~^dwcok?UQ~y;EPJ3FJ?6uXvNTXDmC=^wlOTTy5`&gz` zp_?5^gc_*VZWsUwOkpr9nbb?d0KFm6nA)Mg#D2(4Q-8cP+&6UgUrN`ZejT`$!DtB5 zrhtJ_|FJhc7!rFseG@RV<7|As3=EiPl} z&7`kzJJ{V_t8oZJ=mn^BFp&Sp+0q6K!%p5mY{Ucbb11UhF< zC}eTAZfo6Ehqy9%x#(d&e(_RF}!+aPtl8>_+oENf~w31!^AWs2{_dtHD)RfTf>{Sob!lQ`OT z2xfFPz168T|6R0HeAW?^+V!MJ(f4XG>$|`|OpUuLv7zA6>!*ibsS9_F_)Z?n=_=e@ zG&76?gvZKZO7(IK00Fu|rRrwL(gUKios*d0-mCHgY+ybtY<=TH_8(Go6_WC!{NmTd zvw`-{H07GWa5ITLiI9jZovr6NQ7&DT&%W_cUS8(Uwc%HRF!0^0M-j^Ndk^D?b z%HTe1qG3k72Zj5=q##x-gr5Ye)I>`w=s*?K#jDO%@x~SX5N9xQ9ou6ov#`B<$NmzCL*}uy>fJ!&eZ1G^wJ5wZsAid zE4foH^bZ)up)@Q4%$vo+Ml3@4)&n@As1#gJ_pcZzi=YsIzphn3Sv7H3eFVLF=NBSQyPT;g@Zl>FRvWM}*yQYb?}r0>!vWyWLqHPV+q962=3d z#kK?$%DIH24H|ghyu90Zs?jG+2-as8J~brR#b}u$sR+b`dgQ!AFFBjade9mP6(rOT%_fZ-Sqw{>7V(n(-9jyrBfm_nv94pUqLBu7=;c0b%(6R6X z76`|c8=x+i5V}3dxAKf*P-Fgj zw8;NsUQHY3AmTbp8#m{8s{}+8i%QhYw;NDQ0 zU)(h!c8Ufp_EX6xU9kJSM{U1~Az+%gV}3X>;JK7~wj!rS~s35{J$4 zQ_eh6ZK}eZqgL^4*O;+!^2MAvJvf1HTVcFw?mph=I7OwA4Uwxjb;nq}c+yzBz2z~k ztYf*~O5Qx276Mb!ABeGw?TM+N52lRnpqBqwl$oJDC~T|)9~8mU{`zf=KzDYC6=pe8 z7N9erZ*mLl6`VZUR-0^-{R|293dEzXOHbqRDG}1!>S;9Sd>|f5XHm@g9y`b+J1HKt z3v3<}Jr@@>ZFi8BMgSQi`Q~jj4w&a6n%(rvR5gcDit)=Q#ufvCz%no!Ws^-!gGM=V zCx0M-zs)eT*9a_OD&K~*PkIxgwD;@>ob93iLeP8SVC1sw^LDBtyy?)|8gUE8p|`5D@cYF5$NO*7VW3bm;p1@a4jm}?;vOBGV#5?ainHqi5lj;2v~xJI&FCZ>DE8DJls*y z8Df!&c06P(ad6k*x5Ie-K5WSL;o4D$&DP zA16W`#loe0XmMZ5dwB)MP#?>%PSe)e4(%!H!h=RfTmI!nd_aUgL+Iu={+ z#Yh6}FZz>EIrcH~3X^BaqRJG(mv^UPeyk_%fNoOkin3TH=H}t>{>ihjcwu9{kY8=! zQg^SLbz~ufOLmOFp^nJ*q_J ziZI1<)fK>MW_mFPmzNqN&WOlZNn8!)!9nqJV~}CxeLJ<4m6_|_x{ZZ4T%M(}N4tzd z==9vP7z1W{OS%%x92UJQD9HG$+L`kW6SD3)V}})e-8kABF=eEichh9Z?sZ>r!DOv= z1YJBRM3E|S13`x={Nj+2sFr}j>$4-BuF})i&w!=d*1eEyAF##qx7$+Oq5|R6-j3$* zZR?qLTX+|Fw}x|3%)=&*q!(m}*YljZR{Ddl(*{g@3msX}-Sv6f$!zm(<$&8PDs$D!J*OP4hr4#SIPf(exI*%)c1dT=ko~ZJ-YZX%@cpMQ7yND?FCvngwgxzG zuJ>%pStMHS7gDI4_K9b#h1}y_D^SpJ`QFv>z6S{PD>Ia%KWMm%b*ZXA`^n7 zJJx$oe+ntg*ZQwvw1xtnoIq=@2c-X>fU8(@z>3E0E)v6jP4Z4qp1&6nSSmi0my%rp zE|3Ce$eU47sK`0mrMq?>m6Y0?X8GwD)VOAi^=eC`Ce#;n5Hk8FVBVdnW{$^Xxl>Am zz!n8CBVhkHon`!&$i-M(UbPC}#fyWonNXNG!Y{@Ao*f21+QDilCo6FX{)3W9fo1#m zqN=!*tW-%)=dypKt-yt_CYiX7sf+GguhAoY)A{6H0h_w{+sqVrasGQ7NOZPnSU_d2 z>m5#ghK$4^C>sXqFgsB-Tfu3F5QjEq7D_w+u^ns$2821l)LvX!xhfYjt+6%goD6?N~(u?uZ z>)RY6)u{vVCY3LQ*2I!gFwQ{D?-F(;*940ouAFZ++T6Kpg;?+;P23Iuc|wK1=JI6f z-wE8666if_@|!n@L>ttpHSuk2EVfW*{w>F}igQbK&J`UbE0Ga%7Q6pt4uU9(IUZW;{MJIH*0B6Wwb& z{@QaM8jC!vd@)q!td~TyaTij#3Shpt=-;rOKrXZoF+w@lXKFYo%rQibjZ`Hh#a);} z@z19+zQmKE^j~8KXiFvjfS)OVzmAIY0=NG zrr?~{nY7dRKP}|(9Nbm1;lsvkp8EuJq-k#*mgYx$vqb&j)78#H@S zsy&SQ_X}z4C}}T2Y|e%wvz7$St*sDM9KHeh`n5~vXHLL{nOxy`_PRVrLdsA@A<>Mg zFx}^Rq#C*;?vLg1-GMLYu*vQ=DMbU8>N+HWJKT%q(8Cq487Z1!gOm{LK&GD0%nNQ? zZOB?c^lZZz*^>C2aXHC1=+mxbiy^?$2z#*IkeAN7%NuWwn~`Ac)`Uvy`N4{j2awqB z+SLuJK}q<7^tm^r4Fz2;*LfpX>sLLO>0bMy z>$U01I2GZdjAQ|Hc{29)cDpjSOF#d(6pu44nyc4pB27|Q>H2*Q2>_hJ*inZ$^`#3f zCb&A?y!?tg1fA(ACplL-l)SDxCQED5?IqimH;Y;-6})&q}{)6iyu7yeOzEQ37TG@H@1lDsPOlR1c?~NE z9d6VMJI{+R6BCtX z@U03KJ!{T)4j@3Suif6$y&~G-at$%`+TM1L=)y~UfbU7A)om1!5~yqGS&e;q2c)4% zvn_zQBB!GmX z<~>Z!9#_ll|FvVO=`Za7IrZw08Mwnrjmh5r$PAt$H@F|#Ha6rwnDv3LrUt;oEc zf#GWaG@RJ>1l({6gtVr#S0zTkA-!PUYD`p1RCD>ljF9_tIFc)2b+Q$LH7m zXHwjl%&)_U%o#~b&A2VFYA&j(KE}`l>~GXEsQ($olFOkVV>;w`(T!)bh{rw6;ad9y z-gj=0`?P46yKV6Bypnkxz!$_5YHo=EzE-&`GnS3HqB=o3$uE$l$e8>U*`%2_5nomZ zl)_Sh^5h{8X>vevVE+Qo2j({1jM<8*EPbR2X7%+R9Y?>Qtz_~eX863eT%M|j1`M}s z96%THB!S5_6sFW)V~K&Lj@hZNxR28KQNlnfe5Sd+MB1WwQDPeJEtx zX9N{FxU0>(-eKWBnuGB|m!799AT4FW(~Y~9efjD4XFhw$YRj>Y*QHuT4IRpkKB51W zzojePm6A4I@UJ=e(TmpdgV!ech7GU5uR8p*SvpjFseOCWfzLli?p@MWppeNd&YV%W zb!R?f*b}ZF_nQ1%V8KUkN=kR=1=24?Lb^sxQvK7U?r)&Ntl@1zMsglPD^4@<7C7}J z056h`k>yD(GRI}MFqK35v%#|g%o5Lq_HqG+0Sm_+IanJa?iINt+ZUrd@co*^|F{=f z#@>fe(9`65Sw?^70A&E}!J&W-1HX8dDv*Ro0aj3&oL>7TBsOD`3a)KH4CATv?5^Bv z42@B{huFZKTbRpI5g3_)!+YnEIkcA*`i4!T}fOaMnx6czrr zb0duQZO%HZH@sc`-@|qMCCS}$D#JYs?qx4Q$a%KwzZ^xCGFovdnr`=Kmx$R%(u%Tw z&LHf0O^E=+Mv>{KK3<=EeMNCG00TH;CVL5}f}hXkYJb~0M~_3f?42>gRyZhzvpS|5 zHfpdh7vmFb09t+A_*p4Zr~7rrC%i45EW(GfdLqHHXrgg-ANB^~oOc9qxoaC8%dH9$ zIH;`EvZ}7U;Cd+&pZi`ISvMCfmg_l>sL6)Zq3a%AYysbT!?p@Z z2a2NGN1>u+kx}l}AZ#QR2Z7VE(P&V)V1aau0q3z||A6!QvGoHUEX(uVv48K{r;+@q zIkoCxwfXZ0x7~xJ_kI2m;!wpvZ$Ad|2hFFPhjuA7Hr}w>L09F4Klrshtl0Bj(y2}Y zpMhd;2I6mIrS#6ixw1;*E&5-UT@@YxEvLhqp|B1c!xM#DW;Z}LM#cocwz4ld#?1(B zO~XZ&*B|f?;qg|uXEy!;f%{Fs&>@ghqV3?T#s-T2>6ChcsG7Ukusbaf{RQmhwfLMd@{y7w5Bg15ve-Q<9D^22Q)hB)oYBvFW_J~y5-mS8x)Yk(rxjW8xVlm zc5=054==d=g9vu>@54)V-q(phtHNDF2DSsN?pxsBQ*O=8B{RHY=<)Ky15bA$c@Nzi z%u+=ma>|!-pV1utY7JWJ`-Ab^6$zp|KrDkmOWL18R6@Spj&m{^&+N7K9hye);kzh8 z|5{6v{0&!soi#Bih6wOA;)|iF(+;q@53{Ad_|0>46UH=`XT_^VUtBEWiYmB0`RrWq z`)H{_zCC?Ce_R@aMLp8TsfWOzX^-;CaYRRPRM*1nGPh1jpX@g6Ys#^`JCtmact!Hz zHAU72tm60TsDz7O-I*lQY?I(uPS6g1Jp~e-T`=T!0NqQX@Mj;nC#5v%M(mvMN}A`# zn~PPX|JWyRh-BUL=6QSRDPjw4( zMg>2;C1FW-Rv5o*0ChLWBLMrEcmp~w2M_vJ>Pimlwjx4W(q?#eUfw-#sy9gZ1naiA z&G9T6Srt<}XihCbPy1~;AMQw`K9YXbuc8I_*#wqIN$Nl|N*%s0y-c+9@kLvHb<9e3 zgRfurkJe+jn$M?8Kn~w&FV>3Rue}n&GhfzDv3H{t-etoK_BoC_M)hk*f#xhN4Fh7R zL-^+JXIR-6uv+g#0-DnjUA0QV*wPDWkz+x#Jy6Mt3}*MRB~C5Z#U$djvkZ0_X<=xL zuRHouB@~Slp}e2<>uGlJi?JHrCEuGq_2yMn(QM1}3(N$7km!|3?^{{Hno1C;S(N@V zyXnlzi7l;#g5LMxW$N8ay-~9@jO}8l84e6K|4>0kPG2+u$m51=CORN-AM!gBA6tdg z5aD_kB_;=IuWDWKC_RDU5)U3DrPq2L;Q(NJp+v{;-q^c0qDJt}GC_h=N`JU6%1Z zJ`^oS*m$6Jqsagbj!MOIuzTa=d1Lj!V!&WP&VfSW9eCRG-1s z?tWWIEEr&+->G`dPL;vU%3*)lMSG1)^22?p6(p0**_%72&`B^d~t<2*b>--0cn3om+x+>?f%nOD;S!tL9TPYzbpwi{O4udh3=B;P zp5R5LyS|c(0Av-%gmS1ct?2ivyXTi|w8XdU^sJY&ry@Q;wy0hJ#3lrVl9o=Ul`>v% zR-~p`ys9F+LRnu-aVfd&f-(BNXknVVQb7=9rWPV-W0JN5jgUtBQ4(5o*!8K$B`3$I zM|YN<=>IY0Gh7*7lVs@+A)R0+BH=HnZ2iieMkWN7Tbr*u7?V~^;GQn;ZxqNgql6Im z(b29mnPirbFji3WuWnY)IWDd6S5P!0A%h=V_Ky?|&y>&9i7o`QSPW8x?3*zSs$o+m zb|xyVhrEvhqi@L728&#)(u4d)tWN%-g{QH3cW;Ee6_dFIrJnB=*fGzA+}9Oq{*fay zYXP(bD-$orv>X`Ye^e=rX~C`G*Jf+ba?J{pZ2-?&HzH$}O4lvA z^=h?hM2p4ow7KAeCMi&(|LPjFOvB>Ahn1T@AQy`aHPPw^l2vU4mVf&dqGl^}zft~P zGEfMV07hP(S5KTJFWPo0xrbac@9S^i;P$VC*i*}11i1{K{UlR+R?2b z%>uZ$XmxeS=Jx=3msNG}(yR|px#&1`l&T9tLuEnT*!y>y<7By|4z=2D$J5X}p2E~*8PQgJ z=GuTS%>U)Ts0VX9jBt^v!MkPa4!kWLFm(syi z$T~uF3&q-p4Op*Cb7@$gxUwkwC{Bkqxucmn_wyx?ku1Bn)v1ISX`dN%19yHUBffs( z?>Gks;X?G%f{@QvKcCMChhYifX`gYi`Gdh^gPzQS<1W%cY z_bu+QMG`0I%AB)LKjfFGq;MYw4{(VsC1Di<8fxl1s6vS>@?1tOrIve%*MAZ8J z;}jXzGkwa?#O4ZIFT<&5m6mfJ9m=VGMyDDvJOr4=S{veA=Q8L$5;9WidP_0ehOT9d zd@u;@Xhy1B7Uu>z?9;T1MR2i(xtqbpJ}yn|1Ou){Nb|)am!E8)m3EN|9IH$hbAN1$ zE^VC-l$Bzae4kXoxERxgIB}N*GDRZ(K%}TkgN;URdAh%{S;|;Dr)i~^i;|%kYKY`T@;c~B zr?qlM)p?0$>G>JFCikFDzx(J?G0@pSeQ>uO_14ee=JsRRgfL^Ter8qNoXzcT)kH2U z`L}ZvE0#{SIWGIZ{Bibfk3fC9iAomSO=HXjz4Jb@E2MP0?2SUQ+kg_5g)Bh3_5)#3 zS6VfJ^(*>xW|RP^mM>O2BA{(;p-fICs?#W+fk*y|&)@iUFzTKqm}Zr#@Pwk+KYfN! zqWrTSX`Lotdvze*rMQzIK*I8-ZNTeUGx^gqoO7~1DR>d(hSt1r=cCdz6_m~NNpGhP z9LM8pKsOEJ_m?}DlPwqC(0{!-;uq|qYe{cW1u5g_P^~s{F==Y`@8^S}IpxI9wBZ=% zHz#%OL$7EollP*%06lPyMgmp!VX!Zcm)zy8704(`kfF(>Rt!gtQ?JwQj6E4&yqXpB zju0SUBsVH}aX%s+2p9VGz{n6Q`>-cR1!X|$!vZ0vzr%{(WJOt)t({OaAP|@niqY{u zWQl3;TKw0Mz3w&Guj=}035^Gs-t*o;lc={kr}FHLZXha@8C8y#V`>JXQ;oTb2x>a2 zBoQrq#^($?5t?;z#?DCkXKzo_bF<@nayI>W)Kyf04LqUlD5T{pXoeif+f%qIE6}(n zCylq7GQ5uMoA#8EFQKtsu;_VoQtY6B3by)@a{_2y zy|ETw>i%of3gb;6@K^y%e<4mtpnO*JHnvEYUtn!pn6~C0Tlcm zlnY06HT0c%*4SDQ*kuo?xX(<1y??6XfX*8V(g>BUkuoO+D5*kgw8ZsFv}&mAga(25 z$qUL0WRXQwU`t&5&F{4m-JWg-iToD%lGoHw3!UO^5d)hX&|jpaWf#abQUis2wzRae zsp2051_J2t4bj2aSb)6zt7M(K4=Qo8xkHHr?>##d+3t}4b>~c?I;(|1ki2`!)L&rx zUB}{Nr8J9Rg*6aL$^SvBC|sU$P>L-T>&Hy|pcUy|4{eVHtMBQNo1W3BN2}XR6?Ote z*ZzzR-u^7ES3?!=r1cr!Fa}Z&HiF}PpLHcySigwL1>3f4)L3jC))y&y%OL%cVCUQ|8{+Pz7^Z&>%FG}1E1JbfS_k&Ga13D z4!>5ueuH9XL?p<#LD(RRj=eHZrMTNj1$q)T0 zASApBrb9ohl31jOQhgeJ_sqtQcI)GQM}$ zGr#@mUhC4=TnGvk5g@bsEO0I8jL3!C>)^H*)&U+o&Z8r&GjmpsVL>o!+kO>~{m`Ab za(J}@NB1Y;UwvgyYw|8YJu!g5hg0lYNZxKO>fb| z6{Z5Wh1;rS$v@1n(Fe|R+G{v?L9JNA5GmO77beZmf=?1~7isT}UN6kd48yokC2)dT zSB@I$YK41Ql&i7tFM_*{<0S07C|L+iOOLwj0t8)))wBS*)O^5tej+K=|BYR5IKMFr zP1IpcZ(b8C+=k@u5R~WZVhL!qhyd|J(;KFShT`IOV5e$vh`EmuJw|~4YR9|7^(M;{ zHsJf+j;qw}EziK4SL?_@t~<#UOaRQXqwG3euKPx@njR0&H4Jc$Swq>RH zlZhgW7=tX5^~(&G;qyJKFnjo@yh3&{i)FYM4}emCEdv@wl)ri9${ht$;-XaUxTfop zR!G#XoQqt(>4u38q`iblv<)w$7H!dpK~14h0LYH2dit0LVY0GLs&nwFBR+O;kib(PzwAAl)r8{Ne!H1Kb7y3 zqJni=M#a4aO{S0+2T|ge#CggeWXl+QyA4+Rt7c1vGL9Vp2?JT>Qg6~4l!R47_TwH{ zS)W!gH#=>m+lfanrt+V+$+dD7xcre0nvZOK%SQCI?6*0=CH6?T8Dbm(=(@TiFRUop zVx{MZ1>z<$hqU2Q@LG4R9PS49dH?!Dt|{8!=`Ljwq(Q;ZOJ5mpe-a+}G%p8FtHvo3 zfkZHO6nuMDhNI;18nuEDP%$rx0`e==jHqrOprpwdSbingl|J?sn^Ck7`i|Yd5UCB| zbBXP#|TekB^)+Uu5vFgW^KVffR+Ia&9{Y4FQdfjWkPK|by|`-x zA=A%St$@s;glH`{wyB0S{3m?P==81ax?wc%LULgmB~~5uzE#Ny(try`u&oBt$^zf+ zPsd)7%h&Kkx)Bj|Gf>ht%TwQ8b#ay(RcJF3w%k;tC7{Txn$~7T^nT~YM(Jym;FYP- zMwxNg1Rmw~Na$q~F&=6FGcV=?DBB2PmQJB)=`P z2G=Z%;|e^v7mzhuDgj%r_26=h!$UcvZx>hUXJL5Ufk;_>iTUNhAh^%i`d(|^7*N%d zkQcJfR;&v$eXTix4*V?OB2l%fo!ItaMtl(o`ee)D0WCJ&O`JYXn=opzN$RV&pO^Z@ z#^Mlt(y_F9-mfFX!ePBw(}tJ$6lUvLbZ>uafn7>_4mJr-q%q`7kqN^xpeKyj!fBU}CRbEhM zij@)(2&tg&AB9b75PsGU*d0Tu5kR=vY%p`me0=LLx3keH-TENYvp4=*i-m(+9VNDt z(M-Qm*-{hJAIcn2!26J-S7F9BhPjD2rjU8zz}|-{X{zM_owN6i?F|97pwCpufE#-# z>iD2`xV~l%&2}^~_192IIgPMo4n3yEpGQ-v?g<(~=b7}8n683m*r!|&xmc?-JKH+q zXDL{`!0OCLM6QYTYV~`3W}K1N-1T6w7wnq6t;*e>duiq;RVdj632G8A+?uLc#wppoVIWmUVw8&9-%8q^S$-b<+DWu2fLY6|k$VDLicoPYBD zJ1S+Lb3Hp;w!OBWu7B*d++FKhZnp0fCtsOTT|{Y)UFqH+cH#*}Eo>VW*C~N99AYx6 z!B`3L2|2K1uk;%Ejz*03&87RFLM#?>lRI@oBWN$zoF89Ww8|-#+eNagBNkVgnb$uF z+XuxmYy+=S_AX9bjsXRD%HxDhTjGuT z&q>IV`UBg$X+h|xLoOtam2chjQTpVKT151JrzL4gi4EycD(B{qV;?KyNM^k$|8mOE_3{g}=l52P(0L9|!XbeFldTecPSy~u|x@$SOoi8|WzadbSJ zyOrLQ#S++CA`f6|rFAP^e2`Q%4z`W(#XPAQGlTlpJU(>EgBJKfT&;b65Hy_G=fQ9X z3BIN|O56_9x6p<)aMU(n`YR^`+IEZ-qzDh{2TBW5-N8jEO`d7B>m4JQSlr6s0Dq^) z{7K&qT0W=0dj*rxOnL&%ev2;}0TjlwG)EC=d}n939iZn=KPP@(zS)WI2$%>i%O%nW zL7vrpqWAI1xejS< zI~(Cg6}KvXEc(~L+#M?V);%f*cY9hew5$nNPMu^fO5I9sQWqJpqEpSpO0*y_BPPWi z!=k!sbSOYf9VujxgE3JF*;?*V@kqacRv3F(f91?V)Ko~Y!8&|#!IQwleOP5>EA%8J z%X+TMmRXhCiZfap`B7kXR_4gD(6}hNA8}@o3c~`qprv2PGG5)_{MD~|3)^^x?m{v=kS}7OSF6;$dWCB z!Ktoe&h?`GrBsozucFYV9e|ZgM=nT9!V$L6a+$$V^Qd5Djz%3JWY2qPfOYGU#QTWu z(4FiuE^L**(pg(h`Q6-PXxwvUcJ90(BVPT)2AW>)__U{0_<(ZV7^(Y+#;%KC!m7JM z4?r^y@Ux@j=JIAKx-C6*lTetH8uzx$Bc#qB12d2N<_Ad7jhg^WmD^n9&tp;O#zD^) zkIVyHl6wOxJn->+Legf;8Jxr97;JmGBt3#p3m=dZknb`s9F+L+U_)pw2`DU5|GEw@ zlWZm9(#|JW`bv6r)0RI_!Gz?) z6bjxWnY}pcBuX|SbQk5Ijqx3uiqqJFk4_hn6W-?l#+NSLb-|%fm~h24P_8ndL6DYf z2%>g7Q~k^S=)%_bapn=evHcECHRNgv-^2MlRK>{K}D zuHk^kooE+CzkMorK(9Xz`~<)(h7sSMF7UFmx1pd9UJCJm>^6xbrmQfU4fFy9zdZO& ziZLu`#DPY1CY%l!R#%uV2}c-4(0RV#0ljz%NFJ}b9i?*QS<`K{y07CQIL>03F>@ET z<<7;spZ#ytFpJ=~5XLr{##?UBV&a_g&qMRU6uD?MPA*dAvyu_;WTz}V!(nQl8d66=S$zLSScm-DZi-xw?f zlyn0*aR8B%qQk|N3wq;EBX??R$zir3n!*BM&mI)k@v6g9FS0wHP?eEa6V)OFbXh52 z?R!%qI0zf?iE`jIZhg)FZrE*%#FQWUoDb`QAG^qXxh@;#x8R;JPS-Rp{!&`Dn)f>p z!&0M<>;9`+Z2y-9bIJAZkG{VMMv$lG90=A)qWr`(w;WkBF8&$Omrb^QivWYI$Q2_PoZ>bauyAlm_?;%cp zXSrY?@FK+>bN4N0zIQuc_@@{0eFWSs*;!u2)Hx)LP3Guzq}sazS)5tX11-- z726R4`_}N%N4Fo<8qt3%b~7+p`B1A`ukZUCaegYlEAKyeGC9Y-`SuM&qMzaw((iG5 zb&`D<6!QKx6caHLWMIA8kRT+KcYm+hiRDJ>LwJ%Jcddx?&dami;H3)lm$rM z;g)mQIxsNNs>L`++>2ahP>)<6;XppUYb1?m=hmwM3Ns_SK&oh0lc77-a5$q1wA1GJ<4+uL4`PnL45ibhp}Y3ruE5Xby?9E! zP>jGv+=x(-Q^jeTmdE@nb zNNtvokb77s0lG39iWzFG6&4f+4sxgR@@|=#G(Vy}%L_-eWMA)D#ki7UsV1cl3Uq0} zsuT>Rz`ds9sX-0&u1K5)A=Q^VC44?Gy%x{G?fpj@OM}cVt2#I3#$t2-koCo0*iI&J z7}RFK*+zN^x`#)xAPl87M%3d`eqI>d*y1sO;Ip&Y>3N}8<6nS4#!X~!<8-)zGf-7Q|~Z9b{|7a_tU z5qFb2Sfc2nqX_zmU@yKB5e|>-)d@&m33}S2NGOF%X-r|`q!UaOIuwppugNmR#hT)ocTv1=g>)y9 zdEo_L^&4yj`%-Qep7G=*LfWn-%UrLDa`bQ_f0VM(7$IG`ZyhKW>LhO$>G7^N( zo$mv(pYBCteUrN(1aOX~H%rXb@{iwWd+l7Z)xe}#k1)sY!8c{-_%}NyYR)Cj#_Qgj znhqB%*C>Zlc>~?NQ~`xm4qHTfGpBN{cCO_Ti&NeOWVG(x20Z0Zc5XU0aw-L_fMiO z4fg!u8F*(cIZ9#ZDO#$2Oy_$)U&v$5{!ptov&u%P;-akMZz>Xq18{$+1S*IF_i5W# z?Rw8$lXseL$dQeFAQs=4neAh%Ny;yl-+iY7n2Cac)$Hl)@fJ9$b?!Ws^;8Aqkb+qREA4Fv`boVCZX7 zQLfeH3g~vR)>ddQk?TV@a>B1axpkGz~Jv*2dE$- zWCCPjoGQWn ze-l+(Kjz8QulxrlvTii)QZ|;itS{_^u=;%_-5P1Q@;fI)Y_#$~Mb|K8(8BUQ=ja8= z>Mqm(iktr;ogkM5(#tO_>J;Ak4|MAo^{%KB`5(uk&-DMhbo_frV6(OiXciaon)ja0 zEE^KjvmT%}$n(E@2YFv=9P3cey9A)tGK{1h_GEn)lch%%AP|#(6lh>}CDD{r_QevB zYrM&)aj@@|>LYH&pe=k|-J#UBMg8l_29e~(8L+Sm0iB>k|dn5Tpg0LZ%shKEg3@7i1{+n+=NVp zj(edW)+XKvbbJ%G+-AhuW}-H>*EpIRzrKS8%k_Ta6wnX9%gyDWWm)!ZH>xmR>9gy? zi2h(8Z|-Jc3;i>o@IgP@+$V^T##Rg@or=F5WVhX|T_!*)W@|dX1uIgUj7PEl9c@ON zMuZe%X<@3LkKY1G1-1=QzqmXC%6r4;95*3G4Dzz!sVrF2I|_g$H)j2rpP~^-p~e*_}_X8&UHKW9KpNQ zhrIjDdb^+E{jGZ@jzytX!a3k*HnbdF{TFId zqMS@U6M_t(*a5VGL4IwLC8erTvD!FW=NThmxM6`P{|DOWU(6TEpZK`Z!DqaU0HRmGUdAN>ZY*3m` zV%5CdBz~yyu8tu!`rSlFXyrFY_p{o?#m}7dZ0R09-@%%X3rIVmaRm%Kdpb+iv%W8x zyUkr`Ho!GHTS2ni^`KIk?Gr?_S$EaNqA)$!N9G^gfr|Hj_g4s;N*WV1qty}hlhY~r zN~ypa?55faTspk%*V2fSeiFA z4SnbhE1E%*g#OqAkK~~`vIxcY`bYOkHPtm5S2yuExcU6zSYDs?JpHHcY#7JWp?K-e zXt;L-ExCF#i>BjZxTS}bmjY28)L}Zq1_od8CX;U`z7!}fJpRTM98xb)bKk6eO-2_) zet&n<`SlQev!5nwVUEt_E#`d$IQObkLETSv5uvM_v~V}NSyxeEIzp=W>j{gJ`$5g2 zMIu=?iANBkmm26Mqjvbr^uXm%0 z=T21N6QPv5iS$(Hw=bDA))9|KL!_drr)dEI4g!_0)JYu+5{}>^SCo~4BGaUJIODeG z3Ia%-0&e3_x2ZS#M_Aw)IG(aBfp+-t7dq086Rm^}m9y}GM0;)Ede$%WuBhMkIx|uv z>OPIkT3xYqAO#J?TYH!-Hg{24lB?lzRR$fV~f+bhr5T=~UB5^J#Zm8Yt={MKVJXr>81}xS?V1 zFamH0Zm9YAtr@+ch4l*Z*jn{r^F?+{VZ%lvVrOnY053q$zfE^ed?m{x8!Zs56NRIK zrD_s;h~3SbkIA`qD ziE@{WYwtjanxC|z88k(j$rOx$)uQkWTPXlscFap1`xHb{@ras5(vfzs4-pObV>0x2 z^ZBc{;H9l(^-NS-PWjNU{u3wt6*{4`^mGg*Zhf1%MNTpxb1#1h2!i^r*f&d={HiJ3 z3me13e_%R#QAVdd)>Uc#!MNerf`&oJ6&P-DmmSG{e@Govf@zt?X-1$(E>Na}6|0={ zRj`fbpaEC{)i^V{SeI7wg!(G(s=&yw(PCx$(}ihIdeJTu6(1ip{$)eJw9pPwX7I7) zIDz@2+ymb-)|H*Sp3tiqZqGcZ+kWv+!IwY_&IU@>c*Lbx{a8v={lnZXxKn|iJy1#1 zn-_F<0{tX23=-Mf$VXkT+m!k=VgZKh^an4O(Y+T~>%4o?E}mEArsWY|A9{p_Nbo#- zRnnfbRWA0T7i0(FqJqyGkF%O<`6=sq8N;_rMtUL_qkYl#0F0Ioz1>r*3y2H=?591T zP12fbB$gw4&|vHV0R${z@m-$~lLXOlP<5|>FhJV-v#Ghpl|Q*K7?gbgaqM&qAC=o~ zWK|cGg2Ezyc%4dLmJyA!l?aEoe9kDM^F3L-8f5co)LV?l%srbu3m^h`1T*7{GC#)+ znz#R9eb|14k`ZTZPM2Kx5B3(`3J???mxsfZS`EuZq%8uQx;v5>Zs_N`ndmF;zh__} z?hqA9KF-yIRDq1ykSi+r@OSqbBvQNUS+3iboSCh7CS=+Kdi(%&VWplla4x}F6nK0FvWFFR63rg~{61Z+z zn4yT!3zTA48#c%yT-m_+mmlzEuFXS^auG&|!xbyHf0|hl%#{s7Hg#GP_TqY9_wdav zqHX%u9d7&;wn5a(7QjUm29%9=x&cq%itt`L!c!dH(9hu{ylF4 z%1@{GmO}W+g=N$puz12d`>48q(92J3)NJXfUkbK!0ul<8$gZSSAmOSs@Iu$ybeaxT zt7wcO*H%P%#$Mv2XoxRKnDf}OtraO~Q^|x|%uze>))%>3xC*Jw;ohT8U{zsD$iY$y zg-(lC#9y}{m8P-k#N!M!=U;ey4;&cKY23VTKT;z2lw)PES7fm3ogIa|Vxl|%TJ1?^KMmuPHnVRl>z z5LVnvT*!Kn0kfVLydGw2CHVoBf;`9 zcNvN=S7sXo$6Ynrd@9b45)FjQbtbcYpREA48*iWoGok)?lwcpTX(9t%syFO|^*(h6 zcJdSJR3=!csU9b`VrAwe z<`tG;Rlb&_eRkn~uSJPu zSu*j7oB+rr{iQ{ojH_WE+3PQ_g;OVrhP?Jec`g+4NF#ZNiX-O6S(4Zno1KG7_R=F)G)g&hrGoXhsc0dW!x$;pI*7V}2XrW%&M^Y*mN_KE5+WJ@*X@Qp=Q96LE8{l`|F8-V;CyA-B7al5Q zl|%s`(cva8YPEH7pReG0m7h!2fGXm`3I+<<`}q$|g@E(A+b3#C&ue$u0aP$Do*-Xx z_Rh_?x(jMUHxIgDNdSg+2%$eF&q6iYj=8>)IF*FeO3~D!yrJn5Xq}swXfkeJTnE`< zIOeRGscI}W|3eRwRZ33Y7r=AYN)+Vf>IH6Zt`~G>R=v^Ot`;<55jSau0b;XW6sa0I z1jTzTby?hYnG#wTToTAX^56jJb%+@ejP{;Zv=gCYW7`stW>McQbQcB6C zTwZgk2`Zkg>1B&hOqg0g(V+2d(V^tM+JL&>p)-^kF0DY6`7asilKz=cmX>6nN~I?Y zT(;dMVcL+z-Fbo+8ff18nW=eHV&Ojl1y1PD8%Hf;lH3u#p9l{8MGOnyB|sERuoe3R zCz;6;!e1SxHS6L%;OR4EF;K2hs^O*AOZ-LgSWJG|XDYg3>B_Xn1 zt}msPPPQBlU?HguS_9#dIll!n6f=f9QAgS>+EjlT-+0sSPA@4Qb1E!C=vn67_ zEhWz~YmfW@!uWg<=2DKLZ5}sFo5&rVC=c&8bq2o9fiEef30>e_gD^fdlQl4?yQw#R z3R`iZ!>*4j9`;s@0-pq~R)*BxKHc;y32ByzsGCIR*qG#QOnGp|(hXqK)8@!eynm3*?YKG5D;( zI+=)tDTtGg)&aHGOnu!x?k8rM$2855VoKCEjXs0(nRGI!Qv>x&eUTV0`(&V#YO zdOrl}pWcaUX1ZtoBb_M@G%wGSU5_a5n8 z!_9oZpuwKDzfEYZm)ReH@_c?am4)1}xAUP4E}tEr2u9u~r-I$OIluE7NF;`3d1^Iz zQlRZ#n2-nB$ULyjen_#`0}r{(ACwTsI4Yd_?am}; zBRFhzBLgiNSR#-*jssrm8Rby1k#$1HWhlDbG6#uxeg74LH9=JFe+Z4T3+9aXXrqpfyS){|3!;oelw^tnQ<% z-^Ul6E2?9F(`?9e{}e`Zv&5B!%wi9j$^hP@xL`2kF<9xE+ z-EERsW=c2hxD|kqNiB;LxOyMnd1Y*fdJ6)>pqh(_RpXXAP6O=In!XS7xUglqdNv{d zP>xInZnOjoq>fM@Y=(SvNg7s|VxSlW{^hZ|2sYg8i%$O_CqNh=?aftx@P&-?mF#nk z!??qX-=A1pZ?+N-nBA4W0gf{c2^zii7+H~CPuj`eAw>`Gx^kFjlMCF6nU`bR{xbDJ?a1BxunP1k^do%V3 zTlpM#vVEC@0W7@@2JvssH0hilYwC_qAvu{2OMGus$3JymB%?NB=^|jEgde13vfI%^ zc-R;WobOC6KvuUZVW)p+t2Ly4B7h|`B>No23Rcd6!> z8{f&%PzJo%`Iz7~QDi;uC@t5vg0A}mfI!&wv7O3y9Q=-@|11%TO3P%$9CnRS&b86- z4s^9?g%|7T%sFszf;06Zke}i|T*=34R=QM<4;}gUifw?LC|4?|@vvb#RA<+eEdxMC z#x&SR-nBj_Q%z2L_p690cNak3zh=(2vvE*yGHbe@m>N2*Bs@Waldb6B#K?bJjfSgV z?wV({^F}!<`qKHa3bln++?R+&^UBbPFv*x6k}hO;Urbgx7_YqznsRp==7OGAA_o`w zrC(9x7Xu7v4|xpxg#TRlWd|;8t176+GAqb6sk}yXPZ(oust4v>rUNJ@s74xmHGsaZ zJuw*4_)$E^{XY?sY~<$>gWxzz)oT(~dZW;31b)DCOEN$EXL8z)XD`B_k9{mnQ2;ED z<;vpA)6PY_ck=M42hYagn3}mB5+gahg{;UtetT1OJ9PrxS6_0CFW)z}Wd8;I9aGZw z5{Ld(9I&=(sRYhfBsbZ7i7KFJn`ws6HLQY9GP1Ost6~)7T{ZXPFYzg>biBLn=Jn%)^1(quJO6z+YvZCV(kadIeoSlt#sf zZS_|XK355wrK@YQ(f_R?umh_sgY#+K$P%PrIZ(1xi|KalO>ur`(`W9~l(hhRNS1Sl zn{e;Rb(cZTKsq2Cg>Uyjk&pfA)>6|j(v4S@J#87UJwMEM*RxCND|n8%1HGj}4U!}V zK#Y~F$oy9POcOY`UM^RO&rIxw;CtkoCN;!qq5de#*nK-PK}T2L6PX!qMrqU4J+blClmU@Xz>WEu zh2K}0@WZ@KB-t8V0ak!CMleaxrHw>D;zQ$3ZIUVW0i)=Uz41e1KU;x7ku=Hg`(}^c zBcy`(SD)MG^wknNCrmgzilh5|v0%n;{Y#K~9I|sKvt4ZKN#NfcX6{hKDGyXc&cLdh zt!nJ0tF~9XsvCR?!{~e#RxA5cr2{&$cz*>>=Rx6Y*^uOk!zE>Tb$%M7C0EG{2K^us zk!Qso)(eY3JUVW1sq5?L_iN2DaJJ^Yrff2&LktPc9EG1fh&e3r6OSHN^@K}c>58V9y^Hrjs(!AloAN$GMKp15tZr%Acyqd+O zgj%HBI7!OvZ#g{>DL;F;3feM7zowZPrCt-n?(%D1T2QGvli*uF2Jd|LE)_$m_@L33 z-60$rziJI5Y>98V1#J};99FXKm*$(01j~}ZBxF#vv zcU9Ab!j5h=Ih{1hsqs5BGCj6%v8K^CD818ph_U1)*yo*UxuOyzL`g4>up@*t)RK&yl&N^2B^-C=MWf|Ql zPElL7ljD;i&*y67mrX?V;iTzc?KuAcmQGpc0uK%fFHP7(A&NQfL9uO%zQw%bu2zb; z>R>cCFQpm^o3RTPRvOwMgaf~2otaeo4j5WpBu$}l1bcHKd)q|3l8)U07|T!Cd9+0O zdz0RPPyLu&nN(0yCx`GTs}kEDQ}6Sog0)yoM)D_v*fz4iAoG1qs=uSd@+4rnS!~(t zGXze5Q#vX95N^*}D>Xq=!&2t2{X+xAe|lFKEqU`wJ%Sdm7sjOF3SB}o&Cn*Bf5dy6 z?U`dR3$kl)GcS26RS*%F6qX?|i_-OnWWY{_{dXdkku5n9U+rqULV2pS*_r1@+>`(a zo1u#!j9B_ggz^%F4_D{YntAmC=47tRl9WqP@8|2@|Cqw%m=7>8A2xV4zG3wj7MjbL z67w(hkkn#Tyu&kM%cA3wp%waj8BsRo(a#%}u~UpJzbV~2xOvy%j-MI#Uw84YH<7 z$yYEWxIF1F4l>>pYDi3Z1Upq6~d6FYz?MFVAY=D1k0*FUQ}iKEh)3M`88Euq3=jm_ka_Pi=+bI?{8z-@GyijNQ&* z*Fo}`RyCDioirK%*V{_&k>rW0YQHrLMs;r!^mYJ$J=$cFx)_?#i=wAu&C;@Namita zAC$VyT}r;Ai&0P&47bo%@Z#vuqdODLE@7zd>}o+o@NhD_X3#abBs)Gz1{yGkOJ=#;-=0UPRAaUyDYgpBtW&$1)Yz6)VZI4 zt}2=GSz+-zIH;%idGbK5U{+xTF{Z8&p>H3c@#a#$$*#gZm1zX;5eEp^$-Z59cHiEg z3dXMCCcz>4wU_7YGAHE)kBM%^+aG}l#A&-Zg7C*L_#Xa?I6+SrlcVRzm>-SR9j&PQ zTm90%&d?#eVGZVPf|`R1QzFu@Sa#2#QPEZEaCY zLxT4VmHpq?)L{e8SDtY$Tii`Bh42TE>Y}SnZH!(CsVJR4w9PYG128D!*j%}VGe>l} z8OYYWgI9n2IQ7LTDL%~Y1(Ztx~K+9FIb>_IeXHk2X zdybEZW4JH4QC7z6AMl866i8H7sdYLgm5!3I+WaCKZ-chaeA7EW+Y}vTWJayF`!_fp ztCUawIJIAV^0q1-MXA6_guSmvAiko;Z>il}iXpj=^b-TuEEL z62%m7JW>Z6Hrs$l`eYm|&KY7aS`aK?uz`!iVB^SLAWu)L(qetjg2~e$P=UH5o#Hkh zoE4^kQ*ZgPDVeY1`EV(1eQZg>KSu$u5T zo)oh0Te}cS%46{Zm?4GxHK?9cRiKaoAYZ>BPHy|m7LO33Ci zRgWT^ny19=mPA~|(0zQv(yO~AS7WKBWAoRo@?(Bm-|=%Uf;Y~caUZ#|YN6%fJQko^ zBbZ3!trg|=GMsht&+Zk5`0?VUQPtk7=bKS<5Jb1gxLDHzso4+?3$XxAw^G_Dv9OY3 z1j%&^n4&~yZ29-7uCN8eGWjeR9YQVy$~H!xP+k1?jK@sY$wydud$Mes8)8swt0I8k z_?rm_9okO7>tgsw7Cd0#?J_6PP?VZn4-Tjq{In^wRDUJn6$M5`#k1h`qVq@hgz`*)Z=-MU5*%XuZo6v=#tyhZWJ_XQ^H!yMB_sz+s30vq zRKuWuL7gJwG5R6t)EiTjQpPE%34+t6CtwwXy_ef-bD!4pF*bu1n$ZS{;~UijE=;3n z*c?#~J6KuEs4~I*{cFydW3BJZ z;FyHqi{@E|OCe1Ic;$mxc=qUe|*jdBRQ)~!56ytm?w_`wUjrvN!1uhXlhM{d}> z`|kpU6097NX;hZ%LIPDSegWVql6IdCg_xIRj|V?v?@{+mNz{k?nn5M}OAdMA{XG9m z19C<-Kj^k4hGW~v(r>M7BcH}>xr@eYTI3l5G;@C`ws}3|e92u#Xj4Renv@GFGU}d7 zAS07Lc&xALs2QKcL0q`hb%;~X_HM& zCLRO}ae~{WK=A+LnVJil0um>D-65~a=+X^O;j-ei$9gvkPkesom?3%%KP(_=xDFsF z|F>E9PBH%6?Iv}|na|ZzB*ld5wm4By&MLLB^rQSEjQ^)vCK`FU!xIbt7K_!*+9Cj! z-qNa9l3dl>8Rif3qpGSq{T_%7Mk7m_Dqb>1z!qds)EHa?b{;s9uormpzG%C%H~AJ( zzqr2@Ly0EAhNWbD$f6m9!(8HVWArtH#IV+%4i4_*zu@`jT8YatBcS8{xeTP@#Ls& zaZZ}g@E2`H8O!xM5Fk+h!0cks*q6`T#0uDfui3zWb|^ms*l~C0+rwOa#%>s}9lXgq zfV=2e4)$(u%#{;OphRLA)?z%TQ(FoVBVUe@t9~1F%6LfaQ9j_?8rL{5Mlw99w*&%& z&9u3oX<(}%7(&*uD{lJrkzv*I4z1=L$0-^Ah^h)#wTBL5YfRt9%nV<~@^p&c0nGO1 z)i0NeF=d1cwl@Dib>yWG=0$$G#kNI34$+~6ooxhO8u|C}*O1;slBO2}Ucs61N*x-N z>pj=WMu7K`Pa?SbC@9EukPBAl{CH=o&LrrkVLk`6sOv)3JZTO8IPc6|dgbDLMy>H3 ziO0f;{YHZcB59z5cfl{(a$RvP9nZFf9oKDpu$=mH3T+C;sr8F8E}7Hqf{ZMK(A|K; zP`{v}5Y&Rv+bE^kICPzTlsWav>7cRbe3%&y{^i!)odpXS1K+r;pArCrGCFWm{X4{H zVs>L6Q9$JY6B)g{#i;drV$3gr+J*ZmU!9ge=vhZ;3gGl|wW7g){%W&r4JtO&2rl_y2s~7 zvUGg<3A}s(JWvYtkQI|WLaJ+FU{A%$51%%&fYWT7QDMg;4X4wW#;IbM{MMacQ7kmUSggJ?al={A0|dP(wPlY&LYwgs>R_X^SIc2c`G zxEJP*6WsEw)UyPzH7yNCcN^>eG6;DFoPTA7Ib63Z1OWEH?bHj`ivgP<%zkd3~T}v zKuQ#kg%7oMZ8~+lq|{tw=po$1cmo|$>MbV4ZyW&y4vs5;>KRN6yPTmL?5gnVwPf2N zoi8+S=}tKx6iUP!?h2ukstf%-8`JKmWlj|xPJ(=H?&oHif%+rv4U)G7s7mZ))T)pz zEk;Bw)p{r2mC;S~p|(c5@o{90kWh&I6VqiLw0Ef!^#G_d@8OpRA=jy_7i$0fpoLnR z?tID~^P_N?<4aJks)mw_u}@tTivmez zT@3wZ99Z-l>wJZnX0fNNhT%2ltRk0XBHfKA2Y|L6OgxaF0u=H{iA8QUqP=Rl6r8j% zkTF2u2}_(Z{zISAqkI{c*n>$Y9^G?*k9=`e-a8uF(fMHmqD?*h&f$GbfzUD&5Dsms zqxXKBN*qu1b1vH#XI0ZouKzu+aZYdL2K1t;$3M<`o^@u4#@MJu&+3$w4o-uSi@oEG zAq0$6Q_AG8#)0nUR_NFLIvR;<>lR3*`%3%G#=aOOHgdE--hm) z3ZGoT-7S1uo|u(FG^dB(+K@vi-P3fib~m6=19?Co2Y_HId-t&`g)tT3 zPmjeVM`Uhx_F~`WS|?HMzR|PqKS&QR$9?2o-@d|^j@dGKq4*gBCmF%jPANL401|bb zask4fN<)ZWYEW;Y)1QsfNX;FcG0l*uwA1u(!LI8H0FC?)X%ia#IC#}pK*HI%VZ*v; zCY_Q+rd+WlV9+dDMnp$$;e$L&G*KSzcy+8AK`$Q3*7X>qi`G6Niu^WdBvJ}d?dJ-H zQ=9PKH3Md2jmdeHY*golNOnL_JXg-Dhtk+*yPc(-(01`f5_M7{u;Pwm1~4G z*g3+}uM&*`6>cB_2x2TN#)7z`QzYcz)nWmqqi{rpDyA23cytvA$5#V_v_HKVtymOq zt~nr?p-QwR#q%ASfl@u~R|9x0)YN*%O@7Z<#82P(n0cDiULbKDwWwu8s#KC>rVj3) zao2mR&+cAJxnjaKb1;W&=V6^ZNY-22(qI%aRBb&Y%v%}!CRPm6V~f`WSXo3R^N#En zJn12-ejvzu|0F z0#W0AO}bn{;?>1ik6(0a-!2kk_9{S#iJF)@?fH-~Rx!HkhttzarD?>+*;+X7DJ*0^ z-hqO!i2DzbhzPzQMkOiLO5IcQVxo70-X|76IM)2`6QKH~!*|SdCiXjzUiC<$WshMp zp6l{s4QUWgld0c`2od=!HXH36Nrv<~%FdIK#gB6>eKIurZ0=u| zH?WsxrFlTWpj}8WtfA^JHCNv(o@G_NAVidQ3<-8aE8}x{8d*CQ;ZM7U%J7!K?HWW7 z71>$@N*_Zzv8=D8H?$FK*t`94+sCjl&041IACp41HL{YN=;o?Rp_4gl4!t|4G0;6} z>|kxs9EetN8@b8@OINcUFNPJ?8V0*$g#lYg1|Aroh)F{ySI5A?)Ed?-1N8YXTJ8Tn zDUc&#i;c;R4YwB`9s&j;6#!Ac%D}#_`VA9+WO41E_1prAwZd&Mzz?zhAZGALQO{Re z)#1^25ce(_T8!_l`7v}mOTDj%o(v^q2Xr5P2keWrjWIE9PMi27xWrHWDr&<>h~1@S zr@AEY|I8jwP)4cC@*JWf_f(}q?w!(=y2LI3rGtrrJ-4lk_n{JjIT(DRmx$_lgZ*XD zr=@9$yr5#Tk@uSPCs8Y}wy56xye&*t;S=c)QSTwV6rCecl5*ut>pUFgJIuRBXz*Wo z<`I6q9&WUT^d1C&Bf6#zE;M3d1?4Z-)RfXO{cXI8$-;ONq8H%1iZY3_3Hto8wQ(2F zV!SUhzeTWMW6;0^0WIYa+%9F?CuZyeER*k0<52FwEjt_D4XHQW#l5#$mOA4x6LO~h zs+lQI%e8`J-SEq}#%xD8y9G2C%lhk+>}ezA=daBb+qX5@q+2c2&7_$e1YnC~TU529 zy#Y~puYcB^io^0toJ2xIW8A8-xKFJ!8j|VYf^BH36C+hzY=&J%`Zea>if-;0N+LYG zFW^G$rbyTB2+efV3X>1#-%9fT?50k4N)1T!9Nyvs8qbQn$L-kgoLVVp12aDIeW^yp zXkXp>v8?!(t(R4a;@TT$)k)pG^h4btDAoKH8Wb635>%w6TH;{CzqaX&cp6#}5?yDkY7lirC73?z<1y;gGZWbo3H^QVc=6g%zV9)wp!dE-g?J71#&5P>N*<1OdFFl=c9>UyOdU+E-q0Q zw)lG&^GU;9KL5uEx}+{6T@(@Z7M)L=!+EnaqY3fMmss+lh{N;%5C>*>8E%5U$nt$7mkRd`rA=_{Ky!*g{WHo4sk!c>mdcwJGh*3E z`>Lib)P~Xol={M;>;{&=vk(6x)zE2(WepY3%w>sUhi?lhJjGPS1r(9MppO^2Mhpt?jsmuJQIlVYR~OUicESv!Ra?^VCUa$e27RVyjwb| zBT)tSbdI}wCGt;|x!=Q=v5G6iRDl-Hut}v=k_NTG=SXL*%ge=Y4|sJa$k)l?xPYrp zR?XW#;o518&gyBI`?TgqTFV8eg%B?QRq8)&M9L#hXa#}vhMcaneez-|8@aznjKaFv z$+X^JOvC1Vl-QD}eOQ!4S%T(HTZ%s#PT@|Gg#&OXsy-3B$+Q(AxdY09(aH#kI6W48 znim+V7@-o$fiP}}P}iQ|$`MB`Ls;It9FZ3qHuWq%c znaG{*7IW`3EakuehKhmyBu*Y%N4_}44dOAKbcxnJEtBga#D`9N2)s+=@0#8XZU`Yk zMMF;$|D0=%xegm~A1sNMRJjUx$npib+mZ*O31i}{CgFqzv&o9=MUr^ z!5Z&-^AUww#bdDzGeXxx8HRe6BK{?2We?iO? zTt2rWQolDa7(@Fj*CoezwQU}@*X6UjU_kwjj!3NA0Y?EYNu&xkn$LBt2u)*o1^o=S z?-l$1ZBvn@Y!H0Vf_1~P`6UAN+&?L_11sUMTo*3IWWT7;y2DBK#^Z|X?~ht^!y7VK zqvh8yNZ-T@=PPruSWxQelX)Q@Mb}S0-W;d*yIV|&K2ywwf-u-=*~b-WM8XwV1ud$k z8_a9l^$AB_A)EG1syPoWP_l@jM_H&9 zyBHy2`t;!a4^qD_IpttTDW49c4}Y~H>rrZZN@Re3xigxC{*~|?Z_(vY0`OJrPPJ6m zm`ZOWBD?!sy8vhg=~)a5ba$FskDA6xNXfp|1o$&6X2j+)m6CF^bDUXD4{eob%rRUQ zpCo#uPAJad4G-8P0k4ag`yGPKM`p3xeHt_7V7W{QGp)EDrMw%-ILbU(R&-V-jjT#I zkYr212?P2-_Qb>(TvWjoDa&e_kNLEh)v%LyM zU|5Wl2v5BZ@Lel3j+258&1g|R&|TlK&cW?^7A14#*~YtTrm9_FhSa~uo@|=Cw{rbP ziTfm>v44c*y#Lsuy_}VG?uezxWuI3^%UX-$vVfSIJTfx zS_gER3uvCskPu5Q`kIYvd97fBGvbvirbL)7sbHmaX~B zl_W)y`88JAl=M3oiP?KfL*LZ`l@LRv%!N}>KJ`QWedd_msWc2wY#JWcVm*pV#zsq8 z(nEJ7(8OtkGvxP(J)yHJNm#xC5IVAAOd36=w3apKK0g?J>VHl}9I&q!Va`8fI5tci z=H+EhTf}tlpB4300uE$Ys*~I+7v7D!A;m1r_4K;uDd8<$}W6F6jN?HG!6t-_7 zE2dd(0_?9fZY=Ev^hWNRSDKT3H5b}getFT40tCfG%BId-d_INPU(H{mjZkGk>&je7 zjNfI6VyWR0P^c{r#2nATlp9Cxb^8bk$eZ!bku~0d^;k)8h)?f2viN5xUz(rlgp+iQ z^huD6H&r+rw%C$;^GNAiYrW#OU2<>PO+}2Aydt7EVZRB8yBfyljqyekynpaU91VQv zdU{s-deHNJ$YG>}n2jgd=Gug|h*51R=vy!_=lK6aFgjBa>AMn-H$$HK9X&pe8Sqj6#co>rHP=+Rvk5!Df z6Zs1`soJl|>$<>0(`oTk)nR`(3-VvC;|JRKs1B*9oy2ywA)BIuEC0cPcGB1?td}x4 zg87NMFA@PTNaPr2zLeMD6K+0yf)s2d@3kgf_-Hyfv5?%Mz7xAp;pP)ecRilA*)y>E< znZzS-k{Kd&0XghA*X6IM@PiJi%de4Etd5Th1FF11)o3P-`Cp6UWf|Cd8YmS95zfW~ zeEi58HUwph;^w}~2$<_|g2s4ouj0rH|^B2c;SurlsYQ0iGtsEMa-D0hF@#FCWv z&!U*m!b1siIdWI|(7BK~^-Ki1N{I56Bj~7Fub_AW?dDB`61^o~n(pDqak6@Es?J%G zb_>vVqL*!cDuXwq>TV2N9k>Qo55h81aXL2=nsSgcbUc>)!LD>CTD*zxj!VX3>M1hd&r8&^i|_b?aXvheWQ!zW?7?{T{9PW zqK(Y`zsLK7Fer6fglWmy)EVSxfCHog^f{V9ym#pzuMd=nrrwT^OQ}G{eN++c7tJCb z;=})0&S-_==j7hORU4{cW3zmN$d`1+@+(>pibMMbAdU@C#C|m}5ZiDDT?yG5{d_ye z1)5lYC~XahePBfO1Mv=`v6H$Ndsn7wFp-6=pcJBS_8iG&r45-UY@F2BomRUbjqKU% zGra%q0wqhmX9VqQTFO=+jB;aJ_n{VfX7!{~eM$M$5NNfRWJYs|A*PfBblTzgXdD5J zlWJ6gV!;~58Ou5!J`Js_ocj1uL+ZD*BV{!eC4peBVXYQggwd`~f4ID`U-T(Z9cv?B z{ISLh2X-vfWZkl3g26AvwqEH+Q4L-{W~QLveMCi&P$6P?Z>j|a&o9EjcO30&rtmNj zIoAsx6`%4kg}&bA$BB6@n0{xDat;Sv)gR~v(|dsmm8|lxFxU{mPUax1TA9#Dn$0P9 z;Q&4lMrl>uAPiS3O(BL({k$!am{eiU;!XiAZr3n1=CR^c(bf9wrr@qxLRRW~zrP3)H!O!|JF3R@Br^F! zgWx9DSQZ}!rP@>&v(gOT@ofRX-cUV*KJuf&7cjlM(t);fz(d12#BBsGA!KodeSUezQsjHpBErFZU!%sg11NJiu=j} z-bpUP%D)lv7t8i zXpT=OE=wI>{Yay1nE~;rc)rslF!dD5Sok%CQ7)KUWAW#vV!z=w5`}z(7=%Ovj>V_; zwn{ho12;cdML||>m61<|P;F8oNI$$YmZV}5fIKpvnrZ|;uBVr(ngfd8J{a0?rVFZ4 z9QSBjEu2LmQU2hYwp$p+~ z@!WJm8g1`wxI-uRW*FP+a28wASZ@pkj2=nE_1F7{tFq!N?D!GUom>t+VCTfQjX%S@ zQ7SpTk(w`XE$K4Bm8YbA8x^q&;|dEJQ6l34$h!Vic%Dvaf>1i@xIq5o!Tyisp3mUX z{E}7p=(6X)4PU3;PFOX;&lN(zDhXFFC&y10>I;+WcX%h~S}L$!%dAXLn;Rtc_Xz&^ zRHrNgPtJ5bIW+p#X=zUJH&vinToX)~d?@ zXI?7V-uolz5q~rvta(YwTUfwrg)J6|<8VBzuT)~)X||WL;IvJj?3) z=ipZ8Hc5_=olj7;f;myL_Fe;JxtvXJ!k|+H300`RRt>Ri5!yncw^!LnXmTrO-P5EN zYpDW-d}Dq+J4Ow2D+9+T6lxRX7%RZNzcP+zotDqK13aAFqlt~lPt3j}3PO^5TvkoS zcptRXm4fmR0G*bf8U;PEc7K2Dg{3X29$u6PZ$d^`eQP#V9YlR3iJs8sNWX7$O+X7# zeZ7R|&;y`{aT_uV~{iG_r`uje5rwKL1oJSmh|!|WCWJUsNoHnCHCKp`_Eaxrn*RcC z@GGuglp@Gwoh;H?&TaBao>L*LunvI|pGqr0=8>S+keckko9V-Z6OMv%OTHJX9s z($@n`f~U4ao=>hbhNg&|2eWM<+3o)T;E3IkKuEn3pW1-3LFY9Vip!@mrvkosiU1V; zFyML{G_$Wi=?vXk=Lpq*QLP8o88XOnN|r#43Y;PjqK$_fHpAi@hO4sbLTAa~*Njs> zk%o^&Q>_S&Y##up{}o-o=Ek^E-4zl6q%?w5ML=6UEuC8bkU@}2w(kG1i+^B9q^zS= zDrcZDTxPwDXfRkp;57J$gXZ@0>nhp;NFu=nT|Rbe{H~~Fk2f%K%H`;BwSc{oBqg@9 z90aRVE>)at69tAFW=>MoEI>`@H(7u4b2WdXrTpa4eQXcw05?F$zx=R@tW>3CDXexz zCv5fm7a-U7tl4WXE@np}5QvZbLGL@&g|ifTQPHP%eWfSk+Gm1+#ATq+YQej~H=7u$ zGm2)EgYI@A^oS^#}cBC*-ml))OrLl=K8$b#LkTgngGU%?ax->o;UsHa1) zbWC$`o}sU%J1!4JoPI;q6|q9%Xa0j&O2ShaEW*7*Q6Pz4{8Ni7R0!^znyC3ZHVAG= z!w_FL0@83^j5|~}AhbYMV$8e=aXT!=iyj5R%jzaSfbCyJ_#`AZ>#NSKYx(t4YkbbB zqM29vGUh;#&Qz2rHmVTpQ$I|!pXnBPQRDgT?|kHMh_zq zM;vzvf58b40(`TM1&ib5{!2Y+tH8@sMjz{mlJ%S$)vHF&zONwxp8}k!(saTN>C*SA zHauFnNT5!hklWibZ%a})_CYpR2IE*T~w?k?uz1J zYL(6L=9C~OGe2h-4Gr@Wbz~I$TFRvNGJBW1YgSeXF92d9sLDrgSZQ;>8m(x^0=}#h z#znaDPD}-c13p&QLwF^XtH+(%R0~b$Ch|Q(wL&0=o9j-tsNeRGS%Oy}ta``vA?ud* zPp@;bs^r6Y8u7C>lrECIDSD#W*7$ya|DYm|cRlK?f@ySKTj;V7`+e>hD1d3Pz%Lpc z$@Kpk0T@IQttQc?m0u|?=cR$bF?HMY@;WHHHe&S7dJj|;(QI_~Gx(_U$I6hY{$+3E zA*rz4%Ei@RkyS-ucoy(My;%EiLNr8gGz7xi6gHGqfPb5oTK*v2^O~cX=vL`jolDQu ziX4})@wkusFJOp71EdQyWjw5L@L1P>vX%vnK(J)Pn52%!=e3F+1*OEQqyms#NMP0B zxm84jh>B6on!r|X(2r=!K-_~?g%QhN7vAhR1CkYzbT?L@`7xclxg93)v{_V~ zPPZu(RZ}0QZf`CazHy+VY7*bk#}D;({${3qQyC=~#tW&q;A_wSXm z2tnpMK6R!z;K6+otRQ1tjPviEa#Jh~snn0(x6^zcXzZ|bo8_g z%`7=6eOf_;p)h!F>Da-9!4Ig@ff-LA!!jh`$U(^9{lVZ#fj&DRcyl@h2)n%mSp{et z5YZj{FiCByNxUP%Lx(^YdO>m4o(OQ6)u3qKLqn`J=NR(s|h)d9jdb;KtuDqIhwILK~=Gv3^6z7_l;C5dkg zpEEyT9;Prp5X0@1c|L^` z3*lCAEWl_S*a1KTlC>4F$N*g;?eYh?gCd-NBf#QtL@)EA4wX*6Si$!tw_{YUvHHp# z4+Q+88;4QtSxsFL&=&LH_L&uF(=V}rQ9%lSQpqxY6~OG^s2vCkd(aI}zly55ZI&h_ zO~;9{nf_$>+g^3Id8^aPcCq4gX;;?W2I9WkHEpT$FA?3#=UC@!2WS~Mh+QAa2y%XN zEp|8ThGMIOU!kX8l$~U%m@^6QayRUE^syI=2_7r;W{YzJ*!x)Qo}_B%t$Q=HHAEN-yVI9|34r@edS&kn&Zv9-dWHCDFAg1u)P7R}Yi-OMsNu7!y%<0(}d z(L|KGdK&sCBm(VZ=?ZtDBrQ2870oZl5-iSAp-FbYj-*pXaZ}WtMUcX@7!a{!dla`a z>Y@j4E~US5xSKpKp5+p8w)T*!MCDNO`v#Cxy}0dq_iv_h(VE{3JBJa)`0Ahb?Wav1 zbnIul1w}&<2r>`fN3oKZy9dkqR^%ySkLd^C^AEajQuG7SVtJi2u=l<*Pr?41wR<%| zm<4A}!&$qH`b?;;RW=7PFA2lYIsnCIP<08<$L|szaGc7Ai3D{2*6OLz-@f`-i^rTy>xb)!5 z-1@acLlY-~V{s#JsFNLG_bqL|N7vyYy^Nc3Mt$cg*5K5HbRVqSVCrrTgZH8a+JwZ| zBU@9-P_PtdiJN-a>qIt<+_ZNgvHJOL5S(32Q)Kj;_X{?wrb(kWB~Nq=pi@G{$95W# zSuBMxV}yppsuiu9UAf=4-#I(R$mEi*;}H*__YG` z?Y0Dx1-Wv!8%*Q08RF{8P+EkbKY*POleM4qj`z&>RAUJTh~ke!JDa-mFP8#GoL{Olx2X#+JT>xK@XJTe-lc-9q80b!_=@oZB0;8m$zTw{2?SNI!!1#-Mg=VD zRz`vH^RJD<`jqsZl{&QghhGrI)Ik=B31z*1ZH^D<8nC_QzF#6|onY9+e_1<2J2+P8 zleTT-;o+fXkyuGjA`aKo_g4_!x8H(kTmMr*Z?)TEdJvqYMdzTQEXIHgZ& zREU#~W88ZLpqxSGKgw6?sz~-na2KolL6C~%RHEB!S11dP+T8sr$Gq+b=)ZR*^ldZK z2PFyOzeK{QVrS^wkHeb5kz;T;-PNU*TJ|Khyfi8D@1a_%3zkz-7BkxFGk>Ut;!o$@erTRk)JA`t|V4#M}ahr_twY- z&}!-diw9f*m+r5})2^aBPO0(DM$)0vg8}72di38xwP;dH)x7B=PB70TKO{D85*GM} zLt$+TI|FK@CVY1-i$%yAubk(7Qn~@eCAPa^LexeR4#!J-C`-haOD|SbQpb~oWgtqT zxc*7`BR{1q_0j(87gI?4yuKT0n_ZxIVr%~wR=u9dW1T+e{ z!pwm+qztiOlenH^a~r4R;U6=)PZ{}gfRk(eZ!(Z)WgI6{Zq9N-@kC@GXEazdvZFNj zz+hYvxU){`?Z#^=zIW`7NHa0HL*WK-v1auj^fLNRWpa_8Mx#H%K?Dy-v@V*M z!LTlIw5Ob+lMlMfJd8pa))ZVIZiW_QvsZcBkWP!NMIC7}1W*G`_N-Z_2NxxmoSfJc z1;c;lsDBgz7ruoctBVURo>xvNtRxs^)nqn_bR|O#iKA#<#cp1Fidx7yLksB=zg4y( z`GsqQF#y-}3r)^cnw3JK@jB@A*ZI_ivRsvKk-FOdnc%Q{NGHXu-6ocnh?`}?&$g&L(~=&4IbA&VP|Zkcu_Y$ys6lqNQUeA}gi zgGibl=4~N_p94_WeTB_Ktp^PPt69bp+DNW9l&w-!=Ig>qWWm?@EF4UH%&X;!sPM>xI9};P%eJGeyg#D$*Is)CyJCxem6w$Eu zej&qziy}Xhe0oQzQi2Oa{fct-US7TAY+2YlTs|!<^7Vj=k;QDgw?I&hHXNaqCZR%M zws7hh>pEDhU^gVI4w$=qG00RVUR8|1jDIlL<{)J){*#G9SMx{l>G5p+(iDB1U$Dzh zEo9K_qxV5`j`042ty~dfI-nyzWJ9-F=Bs#$)11idHL-Pkzi9OhQ!aJbJ%Yvv<9141 z_&3jr=CW0pOogv9t3BUDrIYkrqV>a$OY1LU8e}JrO-a1m@T&K;dt0=-aQRW?edVGo zpXBq<&+m3z9|?!$?5=rz7Tpe#GQoa*`l9%q1Cg&VyTArw^jT|XBK6|+A7&k;ZaJXz z5hi+lfJGE+P$ZjLbp==2V4g7=A2Q6ykA2oNlua#UgO<{LYLCmMe+S-so7<6PSNj&1 zK_xvG6aPT7)ty-|>cw{cu$NM6{M=fPtH@|+9F3A3koCtS_X5;&mm$LgLPy4D` z-#p?gReIw|J%?^u3+TT7S2^d{d*r_C#dW`9u9QjCc_WGYI1kW^7BDeW(BzKPbu-^w z+p2d@RcU8wJeKH|Gfrpy)AHNhFXiLVneO(uyKpbA%TWfoQR}FxlLfrQ@0s)+-HC?H zj-_YwBB+_}8pU*iuDONOm7KFMeMQt1Y=Q5=ybG!Ry6vJ_qzz(k!#66^1ny}qI!S=YG)K4G;dT;j${u;A9nUG zJ~m^}Hk%8RQ=6B>kF0ZWG?!J)UJed8ggHF^#A__F+=7CAYRZ@)0YN z6mU1ZQ`=ztTC2!KMx*k%AXOs*st3gn&PKhA@&30}T^dOu(>&mvR5vnPbOQFZ z_qO7;8ls~zHh7=)4vD%u4Vo+E$wOrP4M!AXa+#LL9kC$3vllr7??^c~v0ZbL41Imw zz@jPq!D!GvK$o_KWZXN+s444XMTrK@}WiOal7@u*3w#Ta1^46L)G#hKB@X zH`;e9BE}n;1rh5&Phce_OH=*%~@v#$36<6pee#~0`GAUN3gcU(`(P00C!O^BB(ef zD!*G~LEl*&)xe{t!2LoIsP1EMOl``3q3qn*VC{#v3soeoAW@Fe*17_5rU+y0>j|1Tc=Kip81<{XS8H6ns5udJK;(x^-*J|5Ukn9+uDAREe*tq;F|O_UxFf20$4> zIv{$cBKEVmK_HNj0F4v0 z4Qo0zf|R8)s;a8T*+-marCy6t_5Z~qFEIil^P!{vYI+pt>DA6^vLfd40l2a4Wu{sz6AYA11Q~0QPQ0pZ6TG~F#k2dDQ^pl_XtI9 z>O2&TXVP777iAveOBjR{2*fzw=Uh_vC#128bO{c(A2US$UZ7CAobp=t6{g2Vc&I+- zURNx9Dw;$JKcr^mLOuMDtvgIdMOV;ai#@(abdtbMI`JHxKIW!?^Hbyl7Q#0an=#~u z3kqQ=@A7j&diPg7@TV!KkA5MXY;JEDJ|vZqk$Es3zOhd|6>uu1l5sDL)-*otGPkI) zo__*`*XS>@#dqsBypf^Sx$rb=Mi%%5ny-n901ClEefub|8MyYdNiWIhf8(v7rNDfU zSbQ3tRZ&kBv(^rI*|zUyP&;|5ro0S#r!E9OB0OJ_8cT=8X$0?G9NNLQb9exQ4tiDC z{L+QbRk8D61a^FU4`YDkM$0M%hi0yRkbo;835gtXP2gy-JRGb=-L64-sJjiS4Gmn4 z-fk{Xf|5y2NpPu1>V^D zUt%PnHLLI3s@w&8&Foa49qsr+)XKHfvKZFmi{dP6;Lr{t;=rU08(*4ff~Uj4arFlA zKMWW&4O$Oak9E`6A`TL}PIWd>>CA#xUT`YNnG9HUB20|x6~CV~=x|;^d$^6XQxsqf z5I`c&svR$7jSWPT&+kkVW7 z#Uo4#EhNPic~Z=?Yvd+f>yj*x>3|bTatT3*M+BPwGOK9=inx7}j9`rh z>Oog!l+QO`zv{=f1fl}eN6T6AYL&uKMT_ot?dNfeX~)$G^U!+G%UgaV)R}q zOxX7XtIntsLzHrq9R5tolC0!1<$9^7(14F~iCg`ErHG6O>`|W1Ld+g3VJh8Uvi(4q zk2(0~0l;|LJb+Z->^ePbR2B)-fTX@uS_a_Cxq0;DCGa5 zh-Vkz{H1B(C^c$O+&anmdSM8m4hRnV17Snb9_N(SqmruXmUO&O?@c@Oz_d*fWQ?V1 z&eRV8eCp^Jf<%a482ep;toy5170Zx*&EM?5uT^HzBTB4X2p=c&fJZOp(5ITif8|ID zM$sA7h#nA+(!`ooSr+J;%IVpGc>{vOnk;2FT;+ddSAY2Gh89#G;&Q}~R<)Pq=bZEZ zDyvRyB?r6PI*F@=f|7<=BL1!%1S%2uHH%CJrQ-tMmGesg$8I%aP2R_Y+w=$uBe$ms zhj6kd$}PQ`%fw6^4e0(*b#BHBihd;boX6ChHs`msl7uc+b$hP@SfCB<=NSKG=TCG_S@LzcnF_)iQap7)Gm^VZu=*?@k>{v+4Rqp$*t2Jj6e2&Au zU6mDPR8!H4I4pR;Q7@I?#yZ8Mo2cI*8!C9_C&Js(PCbw>XoD>~e8^e44mFd0oK47` zj@Kr#4zMAcU#@#5uawg}Vr9kq!q9V#?C6aQ!jJ7fB1tI`8eGWRkkZ5VNvy&29+$h{ zsH?)qWlT-8uY~Hw;^z=X9koh4mm6(AiNvK_l6vHO> zTtUOKBT6;aGBuWhIv6Y&s~?b0DNhzKaQ@3*?51lZ;s_)$&=m3 za#{NZ5snnXK@<=6p!L*!R51^hW3p14?O3y=uKY}PJ*p2EdcvD;##?a%Dh%4uun zE#%wQ^0MV+hV$)eLL*mydlQ9tRgl;2j!JrJK-h5Is ze{HxX33Ug7#0=+{1qn7PY$WL<@KRoNrpm9houmi);E)%CW_`}X71prJrcm=vTWMJ! zw#2VWEKh~U_5wdvLP$H99o5ci0acfjnb=md{@0tM(Sa-~jOj{~<_|PPkJ&2y z6eg)r4__ESb4IHPbo&60FS3c^faZ991<~b*s4N2I1LEZEof;8`JPSq%cpMI!TgR)( zaZ<=p=gA$+$0$yeiwOEW9r_<2PtGA{K3tIe0!(MK(Asb<)uau97|P|sU76i!TywI7 zsia)qgeN7rW5nK4$a0t*FA3h`!jm4LDeLr@W zI={j7SVCZFeDOE0rQSFtN-Uzw)Bq-=o|U;AA&HmbtM961{82T+Amc)SE za5a?u;vhkI@MCLD5F&9_Q^6})e|N2j_C^xC_UYXf4+Tsi1%fMI4XAc{q+%=RVlYi5 zyY5xVKHy)V5jLAroo@86e)c_{j{y^_RhV`$nQ`M|#H~l#%s3P!{pyw0BS$ry%C(8* z7H(qBNQTgdvBzXvYe;z@vXmDt&>az&agXU(i_F9M+y!IGkg$nB^K$-?R{wx}{P7x; zVC7NkBBH>XpqlWUszh?Tzy_ZcfPV+5HV#(Y-JY0Si$fnSQ5N&k8DjqktyIP80!|Ck z2TZss0paA-))nE=H>eqVs~SE;wnfeO-hKv+@Y(}jXzBB6nmen!g>jlM30nuca-3#7j1`bZx>bw!iKvU8KHjPZSJ!?m zvt`wbZPo~1fIH^&CAGo4!wn!ve@ECQuxJ^8PN?9^hXkyzbdc6#ek&~PL%7W&0`R-G z@BY(-D6Ty0PoyPY*XGP#262%0Y0i`)Y-WZ_1YeGt4Ue6+7dY|>Q1{y3#s2syJj7_O z>yJ`rkRiIoFfvv+TkIO$9~totRCr9f&s%~w&r}q#zJU4fcV@7`V3DbzK*ynp_<)H4 z=-^AjcIhg`x%3WYMb5nY1;?7AiVzO~u5iQzPjYcfh$URR8RGrad}#=T=qj>zWQGR4 zUs;HTsJh=45iYxJOD@Zo`AfBPN@k1AK12Q+nu^qCDhVht9O9`T10H8;%}S#~ z4k|IjzSBqVRXJ9Z9qM!HkBKCpUb3$>pk%X0f=sn#Ql^K;+>adCAjM%qJOHZ> zuv0Wk{bDd~(}s`Kb^`xHp?6YjVlMP{uikWlQ>@MhWQM9|BGq!`a#3T~`s*-ry7wA} zt5=4NLC46Upi-JBAj=_$n5`Jh%pxUoc_-ke@r^&SYLNW8cp_i&h zlF%6Ra7U58NR9#q>Q0IK+w&qZ;TTIN&h~kmzTc`?%H^G;g;8@z5mnb>$225K?>Vq(L>U;m>?xIXlB1hyU}8(x=D%F z2+gYo>BmX)5f1Qs?S<(~MLU37wVqt7tZl*LG3sbEuoAy>(mf$0T!(mAaqBo0AuZ}1 zb1zDc87h12bn58F+dW&c?XsQY15=pztdW*SHZ|NFb1{CYxV#!~%R`;iVXua#6WKW?vXIXnHXve-8e?QoCEz0;0C_813SFD7nNv6lc8iWv-4n^t`4vcb^ZICn_FR#TK4xv@4s9Dm)}uQzoo=twDK5nutChNAuOan z1Y1-L)~n%b=~SvA{DA6FPA|ht=#5>QCGbVAJzg7+!|TU$yM1A<=t`#r#^T9@fKBGW9u*CLre3wfu`jSj&-`k9rdg| z&&Lom>vI=99fPh%cM@^ts6cCd8DKH=F#r^n&F;)01!z}O_7QI+XEQMj?^?_+a64%h zeqF?TBuTd^$4O2|{SPu2vVHF?QnQn*Sq1cN<#7-gpAouWBG3*q6_sVZGxsvv9o1>R z#C!-y1ZZ|lCax_*aX*kStVh530A{jLI0J3nY!TBAKqMsn`2Klb1dFL{`bwAm{W@nJ z3_g-QFGnSRmzBeU>PDs>W*Xn$%TZJa zxsk=p#}giQfns?Vf?SA}k#AX7+Hk%9C`srSyl>NSCP4~r9`*cEK`e)^VN~aLp0I}; zL<#>*qt%^x&~dS*h(u0nc9O^O5fY^a+&*06OOvhw>Yhdn>1|EQ9GC8RKeV&+y*QIiFg>Q*5$;fWl9 zS=X`=jQ;VQ$iNKd1QR*7b#>DvMvWeU&SK>zE&M|c1E4mIU`q?L`xt>zNG$kIV-Z;> z&4u7^d?=4KnZPh8e+g_}W?rdaF27xPn>~F%2ltwQ#lg$Qs&?&@;ttIXkip> zEBCvnQ3NcI=449pcJP_4FraO`n0hhUX25D$%ky{m^cnF)OfB|buoiT;={EIMMLX86 zj9JjY$EmVd!_K$T45MF^MtdkTKaq!g)*xGW_z1l>mSK8I#n*Yh7>rreRN;JW#LHTq zh<8{Bi?>@*nov-B3q7F0`ZZvZ@``glee1AnD$c?jhI!n2k5wryZ+2q=Gf~vUVUUp3 zT7WG5*`YSLvN$)W7+y7|WX3{r|ybWS+TnX+Of{M!tM;qKnU` zby(&r20y$mO_-b@Uq?hs30liQx$TAWN)Ru|e3I7&XZj`u18jH5$Uu?WpmuML`tal) zSu~yMcVbscV8{!`-hDM9P*JG^+96T`0Mtfd_Oh7bLnfGh+NVUC> z8>e%EjFQ8GTh%p$lEf1C2!I1KdGYWZ2TBFns3a{+$6RZ~LjiIQ%k%HIzg3aGJKvIhcjq#v#X~_sdXw}Yry7-&sP=r*yOIo;{{QaJ z-eg|AMd?FKq^ZIUkxlif%qBlT%iHz?ll#4kl6>awsUDR#Ji}p`_fi_xJ9(O1Ip#Q` z2`x42VJ*r)X)#uZ!CqV*ebFEr9xQYj9&RrDBM8|uMoE#C2&pM8}UB5XHtY+zC{ zY*%LQ36OTBQ##N8?Naz-ja6?7JOu61w4R$$65gmf+nQDi9>nQ5UE)VKFuy1jhmFCt z^?c_Dq9gfh%7~m2ou7jOzkeCOyp%CACou4vo1LYcGmBaUJ0O*24-zA5v?O1CNgtnh z837pZs%Vr+oSfBZi;xlSa(Te?td*71i%8H6j?Nz8J{WJ-9_)tR>qE{T)@zVmB2Cx6 z=++0TT(??W{%J4vLOI+BPIIpydfE@H!mASKOS=NY9?t z$M`nmibS|FC-j9+KO;A81_O|E6%qGxXGTxA}lP& z;%i7jiZ;KX{veb)foZI5rs;0evxmuyGK#?6Z((FIIxNjQ3cA}6*qy`!am1u}ODG!H z`9WFLOzFkbrF-kXc@PPzFm1 zp3>{rQH~cf8EwTsQiSG@xeNy#P*@a75}Ljb)<0{!lE`6Kq{}C7{#Zyj^*eT+wfAuX zOJ0szTd4*{J(7Z?1)E*k9!A9e=Fl;B+HqLakdrp!qm6AA20%b|=>r6*iGnu6wKvxB za)Wu%OFG5U)t+Y-riVMv{n)(3UQTIhwi9-3uH`5E<97UDbndIlm4cf_aN_}$h^0&d z-euBm2L{~QYqIzbT5BV*4EgJF3BTQCKr*DPB6T?3@pk`8bkCQIs3bj({{5OY(eo@& zkt@2RQeC%A2&ghREXlDj-rX&s1Ps<6MJ9`(@Akf(`7X>A12^~{_@3^@U23<+JWIIccx_T6&lhoOg5k*y2n%t!@pAvHL zZp-`PW?{h+^fC%Vt}o@Rh|_jw9(@MaQY8AoOB>AxkE({k1HrO| zsf_cuOg8^JjDWt(gLUO&Qql`r0MXo=CE9%rMr*5F`a)J5N{IaApSjz6E490q%qWgQ z39ca{p|npY*iN>GTzvpHv0_O)#^E1RfF;`>n28=#P-`np{h^T(+{#birWZPCzytCZ z0Zw4Vve3Ah3S${xBt$GB#;PFPuBcKEQdUmwvEzGG_;vM2{+M6nsm(KR3IGAc7^%}m zOWHvlrfSWmvTHn(SM{{JVElg#E4_|Wr?w{6jE$?Ko?2o7HiV>ef(Yek0Y#XFh`maw znX;R_jB%#0`jW>was0oYY#Cdbqf+5H5{_mO=k(vWyI3WOR%3bb+pB&2i&GNbvs(UH zTdw!1H0vNUe&p{_*K*J3RwxChaV3Bmgho7PyEtM$yOgwbaPRe+s5XMK{J}_VmIo@~*j1p5mk8t0G9@;C= z%z|YbrUP8Z*3s(@{2Y>E2fz?e*dqu{(;v@70L!X6*NW%0qq|u_`#*1j<@d*jA^{o; zSVH&eN_jg%U|m6g@I;~Br_CZJ;c_I_S(ZuaNfS9ASMQN2w2E4?^%U|D29KV%Fongf zN1|n*2lhP<`843-L+f1%U8*ENL^N9aQ-7ZfYiNvOs8%*stenDWoVG{Ky6Yb!TI`~w zo{0j^y*`Cwl&l}x1*&+SP*N;`mXa0~S8-SS(?lGO+4vzR>*1R@GKXMLz_{3X*%4J* z+JI;E#$DBZbM&Xj4FoU^;sY9#^#OCv0y_9G?G;k*kzd%7K*4`rERT*f2Pa)C{1 zx}q@8r+wHkunA%ad1hBhwSeev}a+L&3=dS(p^6Ad&rHj^O?$u0bxi$ce zm@-|6H|fyrQ*FGtz6UdY<7j7Gp9i_C=?@n2QPs?rL#AyrM~sL7B}2|{lG&a=I4~*N z1jo^xfG4s{ik9{EFgR-$co;sd`5Y`g z*?CT%Xcu2>ZMN}GvXM1F_{WS0xgXxRW7q#plq*r z3pQ3CU@@b1T%7Wx`2S((s!5HH)9q%T~$Y_sW&$xJV2`_<&rT)d;VYWIf(XI+fG-4ZQx5!j~gv1 z?hHla%!bg+VG@c&s%J@&_p_1CtL>!-8JqAoMdv~g^&UbJs5CkY?7YtP`kJ$*Oo#ms zb3)Va0_}49aNCYt*ZDO^>rtwB!dD?5!N2}Hzcuz*#2;YUYqanmI&;e)#3Lxt$)go1 zJmT}3K0q`av~n!S;9r^paemG6afv(=K003ZELmW)}b0 zCDxMGo&{eO_2gedPY0n-m6@uF>GG>;(Te!6mY|ExkZJ-{!GcGBmC{zPQZxtdRC*M& zMO2>nyljC|njtR`J$Ej)Iet+HXxN$-X(3eNl30acyK&ed*PH*;_O9#XU_N&8K^X|4 z3r8~UQNBek%3pf@E9`R7W-YPMbT5yJQrvL9+BhD6;XIg=pB8gn9Wg#a-%1#=Q4kv2 zu90#<%el&1Vw1{LAn=%psbFY1RDR`3rNs7APMwZq?vS0)~uOjt`%+bo^H?_9nUk?#2| zUmPd-vyZ2}FI4=4kFSB6;6YLQie@;m23>~ZLk~#yIN3+v9jJHRa`#^#OmXR`^4N+9 zo!Cj#MsILk80r~jl45_|$Lj)qyL!P+9 zY?B=uM!kb0ZQ@cY*+w;x*ICQF`Vz4eJz=L2VG{P$v;KtT3hXH8V2zumUNCS7RE3EL zZ2logtOTo^WEA4ui_h)sC1G=~hH@`rwc@!raH=N~4tM$>taGyO&|8<^d5idefj&@~ z8HVy}g+}Z+P#-nbv~I6L{KZlVbUzxqEET&rE-5sq7yg;+!*si5-SNv$%KYf%&DMkm zh`ylbv>Z&x-7lvVy$w--hv6{nfv@qrL_P;$3aC&X6t0K9M;KR?4RS+j_ZJkVXw$<7 z#)p1>^)mBPQuz8h1k$8Z6(Qji%(O~PyOQSKwxkv~pvZKqwkb+EZ{!*Pghl(6*F=Nu zTcuT>w|#ChSNz}1O5i+G$pre7Ij=lNQ^@o^p_A(dd2i&)m-bOUr})g|3gJ4d(Y!rd ziU>tvB_|uF5n}o8VLAG@Yb!x<-|zF+E4Zc`vndT2X%)n|u;txM0a8W5?z>BSB1>W{ zaPx@i)57Q#D+K-bq;1SQ?uBfuLMnm)owxG&9j4B(Em$7jLaWls*I~PFEhg1&GzqUS z8kH%Qvo2vJe1N5>FOX#QeA)!AFkw0B4hSh`bw>yYJ;n72Huls(QaK$6%VQdrcMv%H zwESkfDuh`K!bS1|`FyHCJsxXQPBtg8oKF+8nc5`UUat|*Txp!WuYHUN#|q;Xnx8la zG7wj`T2p#J=YLcQ8>?>IPuKY(BTe2gbS?7oz^SQ>=9VTn8E9CJk@4^G7X(6YST(k_ z<3U5bKY;me6i)44TYxN|H67%FbWU_NpTZ=v^X$W#nyyg%k^ZJ(k$n0S#%spRiCXb8 z#}tbui39CtwBq#Ed=9i$&S{wU`z)T4~`PVG&?Wn`x??U}(vcUiIknI{I2v+^4 zf#|QX0N8q~l~N5cK2~rNKtuf539;V))0Bl8(UDyE$hd9KF<8=cF3{h#0;7DKf`&X4 zX}-^i1oZP6Q-{uc{dS z`-)_Tfa3TSR@qR|xqjpUb9cF!vfcUlc@%@UrF(j5cIS|MeQ0#n5Va6;lLP+$dhRU3 zC`&%?TCP?73E1qg?`mBt4Ki`+Ojl#u0ij>}oW&Y$^H&RAIeq)eHm#|T0Nca}Q*hsG zk9Q>Pl{b1)Q4tf;TQKeoy4R4LkRlt@Zqt^Ad|0>k#eh2KJgDlp4R1?JvN!&h(hVOi zQs}Q({@L4@j5dcgmnWrEl*%T;YtX_|&Q3Thq1pyUUVVw3cd!!dbFfD~rLFN+SGv0` zMz%Np%JK>RX%{Ze?7tp8C;bQZJUG?CiX{x;694x#fFMtWAbMh3tL8Y)lpF*mH)7r@7MrE z`G}q2^B~qO<7hIdlA=j?VxP%Ak%EXfEc*S}?f#5!?mqLDucfFz+~qfCz#TfUural3 zBd|B{i7B7uGgB&|*{8Mn6A-iSQO@=a4Zih_m9#Ef%UO;UHYuJ();8m26uIK6f;Ofa zK{<+L`!lJ))Wz&laknP$Ns4t0@gFe>%a?zH^k2kN$HW5r-Tpwx`L=<|80Mq+u$s_s zguFd-=iMq6v9>yHBOtACa3*7=vh~`G_^!w`B7NcwS(8 zpVAnlYr8BvpbxMh{cku_+BeERh$MeQ^FQPZ|2(scq%yP+>1FqwGAN;AN%!V2zE;&8 zto);(B>50_Rr$k#==6KxIGL;s?XOR$YZ$riS;Hct)V4zP6TTgs$5+%P-;lmV{xgG=SS)8dcMNvP-oYW`jw#6!+Wc6=6ma4u5AT-Ib=Fx7pf9a5Hla5lS78M zs|ze1B`Q2@3bs z58nyk`}v`(sjY{bHXoEwa>m%1HNp+%Yfgod`_L6A*VJ@W4Y2pp%Wkr*4J!z$`pKg{8HQvZ> zW)?zH?$sXs8@908L7T;s&AQfx(KUpMWt9<~71A_)8*B8+B4Fe;Sx^3!nvdN@YEDOw zxinOg_Z9C`01^a2LBE&YK@yG6arC}`yJ8UeclggLkV`r_aNiGX3JlU{4?feDAZa^LHe=wyK-29dZ zC`Opk%t#ivn|3ky0MH;YWreh!)?&QMO!Req(XsqVw}OA5G*nglyNCBWEck=sV$jrX zu%Hu?p`VB%SG33T++GMP7Ro-|;4#atyrmN_<-C6*#+SmnCj)CM%u4kaxy8!iDo?IO zc+>|-N8oZ<&XV27{<{@<9YH0%!^#Iq*~DG=X3Frqy@$ zznjs!knR@1QdV=@{)ca4IO`LpH33KXGG2o`lg|>f0|(|ue;RJLThJ9GoRkbtUV`}6 zP;w$xo>o2qXk|L<>AUdB%IhPfCI-A5zy zw7NzO9A|rTc~>f=;M2yZwh$b&H8Att8T*x3#F;-dHq+%-$W%B<{$bTuPOiQN)x>o_ z!@JAK*gSp5Vv>sRfpQ}#8u6x1KL|4}x}P2dm5AStL!3$K-~2?n?UBRWcy{nmy5fgB zd+-~Kltb@`IKe`%KoQhh6T+v_Zj$o^QI20}_K3?cMDifPb8UNL;0%u*WB%p=+p?%3;>$_;i^%oNMDNWT8+mhR^uYZm;_@dl^_JAI(Ia7 z(RO+dFzeb4*){>_we9?U&z(#p)pTgGTx6m;jx>4hC!xC?UsqGiibx(7=75EM1C`KF zCMkoG^0K4l}llknJ`BQ*YIe?g(kY|JT*GCnD8t&9#%r zRZr-aC#DfzB7!X87|YS>Y+M?p^@I$rfkViouYc1MSv0_^kpzN(kv&W%X+9r^N0ZI) z^t3$PslMmatv+YarM=j^a|O7;GXQKzqFs5DSS9DatA<@b>P`1HG?8P31+i|H+BRf8iw?57W0sJ)&#<0DuPIn=3LIqEEMVLM| z=U{+sHn$E%L08|~H%Q79?&NPV)M=aRWv3-L^p47nR0QjY=vquppPZSj=~hv@I&&$& zYPujit=f*`qbt+Xjhh|mYJ{09bFj3m!>Sorgck`Al%4}# z&ZiNf%az0l0I+{gJ#Sx&@{cEMIk;VymmEW`sj=1m+2yaOd!4q0^faIFj58J`5@gKU z4ZQww)CCgSP^8J&jbcz@I!rfMDbWMb$7wI?2RKkZiK3Adw7uTp;np>R6JA?%Fvj5; zW=Nh8lE`!>E9&d#7mc;nD8q*j>;RtsdGJMsg>9`~5g9%t-)zrMtV=#Q;T&7?DV)#_ zmMjH|IGv77zF8~x-q38|Mh!?OG~iv^Be^|FZIjKa)AybU3k%E{g;npDaDw>js6Jiw zRM6W~lO>7JE^WM;$b@`q365!tR9sz|OPLn-ht&aAgr)W|6;1HjA4MLsDtXHGt!1)% zwa9a=)f~$YL}*XiL}BJ&$ho+_VuY%OvMPUhM(_WRYs_(^$RMN*f~>E9|97DUu4#AL zwZAz(7P)$>b1abM1HGONl(JqchJIxAnoEW~W;{Iu^GDpf2E z2||@dh5sC#d87ahAJf*ghzdq)@}eaOwD=fuz47g_DeP{@BuhKRkj z$3e%6g8RI4452A2mz|NmIb^N-qC>E>^GiVJwSwQ;<~dBgmtzQIaZk(a9)D=%eGkFE z|I(qwWmr*U%S`$aLiboDv%rXoHfAn?*P6neQ(N}-IxoHSbs4I1uO79@KH=h7(XcP>Ht;ZF#dK<#cdq7&gR98+zgh6+IGdTugU!?KJ>&Jh zC%dSU7yxf?HRe9O-+IjEJHMT*(K8&#%dXsE=;jHz{^SAp^;4urqL5c^G$+dn#Q_`4 z8b&T8DbA6KnJ-Eq-2{8`y411h9w#Da!syW_Fn;CSAQ)U^(IK370d*`SZwLv14*CZa z2Jk6y7+`ngJo3<+-VfW}y9INE*(EYaFK8!(Wn6{+2lAo+W3%^QpQ&@P1~Gs zks^?jIK3r1d7AK6H{?s>pYzF9`Vx zU|m9QGAD`8l8my=egghdGfvUussxZ5S#vKg}M1Qzm}`h zlBM5K-@DbmEdhNOY~R3Rd8N-O%7zpjQ3EE0q<|2;1;v8Lfetw%Q0AQ)8Nkk^!VW8#Z1j{%+28ADWUp&T-EW*vJaqZ z+sw=3yu<|nx@yGFGSV>H98m8(iq$Uh+?`30;D?;g(gIgvmn_GAUEJN*Pz!FDM`S7y ze}MP8{fPGI3a~1I$ynegJ#A3AziLmPLW+k(r_c#zQQIqVNe17wY3EnECb;sd#~<=t zGlG@blU!%;i6iEFXJ~phtXUhC*&+Xhd8f`C0fqZki32xIbGyq(j$m)HlmLk-Gan0Z#`tfBvGxII2r55gSEArkh}DK%ooB zlW8-$Jmn(|)ZSxYMnxr#kW@_{Up+BAJV0XpzMdqeat5`aPA7329YvXqf&Y2Wd5=RT z=z#S%&T|vrWug5cI{r`ZM5mS$RnPV3@pEfujE0Vh7REL#M2yEM9A|wo3SL;{<RSGRwP!T~)Vt~9=#rqh<#h&p=7i zzn`Lnlez^ZsV~84tz>RlxFM!BJD5q#Pmgj&b#h=g3Epk~zxT+@6fZp{lwJR8Rwpp* z^DV~dw6(gXZa&r5@syih%BmWLx0jbYaaJLvic$7q3KhrbS2JlVEbQXvLU>4}XlP}x z|BZqCXyAgqW7#uzk!6cq+GHqmBzymmaFRj7n9`@oOCkMyfL6Mfw&UCCWJLma9PhNV^6(`IeTi!5|%$0&qhGyv*h1e`8v3wfcD7ZS8M!qI? zji9pD2Z(u!YL*R`{EkxicgKks0dgU?09h=Q}lFIdrQ5fhtEjxX;ZAu}%< z9{D5P7b+x&R?ixpjmm`)k4VzqhuM9{@~tFc#9;6_FkkeQ;Bj>e*X0lAU}8{))q(}l zQ1_=^*EwXvx^=P8^NcAI&>>A$r}L-MQZLN}FBn=@-{P7S-cR?kpQr3z47iub-6DG( zNvnS>F~%5d*O^xuq-s514a%TnQ_&@JAaTM{vc6@aD(J!}G3)?GtCUGUIF4f2c5Le; zFu+i;Hr#2f+EaIwL;E9^$BjyMX#BGKK(t+%hFcBp#mv8XXx7t}G9;HpcL#z2V+Le#`j^AL{nkhi$rJmX$sl9$ZfJ8-tk&yJ_Ws-prN%P+ z{f2?Eht2#x%|AY*O0t@c2)H!BCf({rJ-x|I@1<{QOo~{Y`J!y39WPbWtKHGf`Wnvo z!*X~9)ROK_4B3=BV#*)1i_#I?UUU%${7_hR$US|n*_~t_owWNgY0ml3i^-y(cWkkI zuWKo$xnd$M_so%B2G4PjV|nS!19C5O%lU;!t_kxLgYN7*d|rf7y#1|00HfPC?R z(+FEhFyrWJwF51PB9ijB|E~9ouf+B^|CNk=#UC{-<52KKv=>soHD&;L7o~Pm(F9V5 zh4x3g9Zqa{6~-b~M_a#V7-@$C`lisvL?~8Wf9-uoq63@HGse~-H!VP1zV_y5{pq(Z zF|Xl#LFdwvCnWXf4wrGfLjNA5XIyRE^dDF%h#-5LaCaf_E%YDI-aVmc)9h&CVu~N*8-16AKQ0jQqsGgf!9+!6`fZ z9fMbg>-bW12EY;mF9K|mn|tnQZ$I?fLhqn00}12}_=DaG@OhVPBY|<-5Mm#A;67Vu z_jGa-%MT|^!`={Xr7}Z=nU&*N4nX);}OsfF(>PHLG13r@oxYxmDG5S*FVBu7YUH~7_ z8IZbiN!)r$nhY+NrXkl4gg1{RETw^+>B01$RrtUc#-rA!;RvT|j3h(-n6s2ODAAGK z{%;7Ug;;Ge(=LWjrO$fWNaM%!Kh< zoz&^+m;j`G2pPt~PR&>2_O8VTojkZ?kDq7)nuC8}*v4Y(>BZ!gscQ9!mUS0{w7Y3W zMsR&W0_4AR6q1ZgH7Z*ZzRIT7=?$DA6Ck9ouw>AAQz{44I2qM(PuTHiVjFx?rwD)nLxc z{nfBq4S_>#w2;i@*97_4IcGC`GYwc890EXm=4fIOrT`xbpEo-}@0FFS;^_ru68@YS zUoVA=S7#GRxGX6H!1dUDS2r+ZmG_AL#VPbExPvmmz0D@-8=Rgq1e}JTpIG0SH?cUC zJ_9t+mC_-L`i08eoxMNz7vD5vw%sDpEAvbQi-o6%?^T!MsanEm4If!m*g(Ua{Z+Ev zg?Dn_bjKVnz0>yT%w5p_U8o@1Fzdt#?bEyU*IvEBse)XiLVYbKkeHR}JCv5%INN0J_Dx2*A*y2sYvKF& zlcIRhvBtluAk_l4^$&VEIm5ki)|C2^S5MEFeSBe3ArWT{UVPN1#iuc*8JkTfMS5Zy zQOKDMrllNW77WWsUeAcD`}YX$-S?tw9;-ZmhUd-*y@Mw{!77T5Tx%={j~Y7ru6J!BXn|A0 zavmOan)dNcS?QWJ1de9}OwoP)Uq@W&L^!d+qP3Lo65U7k%7p+u2JxRN%^ndmgd-{9 z(j7!{(Q}>P@Hp{P#*apK-aZ`SAl&s?M6T+Yg=+dQ+W-aG&oDVGXc49o!KHN2G)a~I zi&n*B@Vy#DYyk>Hns?m$)|VLaBMhu+ci@N3rPJH!64!En679*;;0rAoaP#m0|+`L7D z(VP?NRr|+x&Z9Bnwe>yA^3o?oYu;aPvYRub_7Jv(O$3hHg&tIX8I%ZmX~U>a%csDM z;bm_AaimaBjH8@G6EAvnG4P8q2f(_f#8W-X>>cGk+NiM>f>j)|RRzN4c`pos$B;bj zj{Z%bW}7C#`rycpIdC%g|`UUnpdZp%zlRHx1p=fVemf z5d~KblVy7s52p1sV)JK8qkXv+I2e54^+)tdIonrDX2*&5HgH`bx;b*RCoc}l(nhz0 zI`{5JCd3_&NMuEIyhPQ7&-4fS1a(x!{c3VEt`D&ht&HDpSj3BjRF<<7u~8~W%}+PnKz zZg2HHY8HrZ7a$}`q#XaXx8I2UYLlSU5r#J;OydI~6oz%X|9(yUG#?wf1ZN_#!4Qu| zDtzgzYK#!3vo=uBpmnFf{HroP<2;vkQL?umBXDg7eeJ}O{x z@iy5m(|;yGODJg1tqjN?m8S?VLSvcX2MF{eD^`$1ts>Fooc^@2vJDU$^}-DuROJ5? zHtRcqfF=b>EWOqU8&+MVdQwu zC{;)x$y-&<>q!R_fmEhzw%?b9DQ}negc}Wd9gTqmS$S5aZ#o0M`q?#Ip1N6_52SZ> zB=*5^7t1R#rs>K@DpbYTEmdGOOQRM?c@5xA`TdkIVw|ZYVbrwfuV`IEw^pH!4QxOK z@+X*R7;_YUw-OIYd2~kI!`lT6JHSGi8kLs3A$hYq8;c4qAS*_*bEQ^IB}ZLmu(d)eEhO4Jb5m)#JKC1Hc4y%b4$6Bx1IRS*D{D|;MWOj%@b8<>g*JUdA zBJp}`Vx@N#lM|%X_;BmlwbdxHyVvL4S~oHa91Mnw=rO9>J{QDj_0a;~SyY4kk`;cM z%@6y)>MII6M;o~Prm#r-=nrp9BI8@%e&`O+3uyIx=O6-KI54u&LQTM!tLb-bfz#5F z(Q@V47YWMRWEFqyj~`j9PC1r1yMK+U38Ie4YQDMiWL57}HrE9m(&}`L*Av94(P*G^ zNo@!h;9)A$=0*TD+JhJYu4ttEJ!)y7EzrrNxuF7stLw-4FAFxLOO(S0ub7_?UzsLz znT5uSwQ=CBe?}`>V!c{Pc&!Wsg%uRHg41D_|rL9Gb&Gt^#Y&H8U?GjFu~5zegrTWMgJe6LdC4uLGYS#jYHMP++6i*>%f-}iFr zpVoAK1uI1tbCP;-h13j&Hty&`Y>6$x6G8n=@Y)kX5Jb1P+ZyVW(;uN<{pC>wP8yV5 zBWO_p(HOqZa%Uq&m`~60`&dYb? zsOwAKuI{jm(>J!>c6sQS#0&dJVQU0Tl(GqyANMss5{o3T5f0qT|rH0u(=? zv(sb9do062G*@muj90`SFiU>*+6u(UZ^EO_lXU$X=ayC!_!>V;UC@tUjB1K1%G!3a zB?tBg?^9O%BzV&Mr3ZJAC=(b`XEaHJ#NgGR_FHv$sG&a!AhYyo&#L&xwV;JO(O;~>8i83UC`JMgIjOA7!-CvaKyYX=B*^{P|M#WE>DVqhO_ujpPYUYcZGyti^K2wzCB z6gYZk8P4)&@^+K$ZnF<#Y+?gw^*h%LBUPX_C(cQEgLv^(Y^q=_c@5IV$JPDY7y~Ud zD+i~IkF$#7jeFd^X*EJf$)Sf>Tk>G7Mk$1{)v|tY(dn%zPlX9ZYAoDYQK~nX7+1iQ zpNRuorSwtUYR}cO<2Bx57ba1Af&>yU#7sgI0>%@eBF$-)d?XsyFV4!oQqgk>rCHP# zr(+RXgKW?3eHiUkWWwi(&Pm`l^(VCqiOe~LkQkvVJlLxVi7?YUw;C%H)9i$+^|M*O zg=)s6zVc`aGCUttq-{9Gjje_e#J8|c^XkNxe3vN!cpUno&?E=x;V;O~V-J-dM8+Gi(ISsTj_eutIDNXYe|TT|Gn?O70U4qF+>{AQ zZC^RFe8eWWQtn(ePiqR38}(fe5It#+W}mDtQS@|7Y#`NvXH-ZoP0Q5OA38;sYq#rLz0t+;!B}HI^Gmm16 zZ09TU?I@G=KS=Bvizy1}=w~6CZF4xYs+dIHHGY63O*XfkqeDGYR$s{pZwWORiiF5Zwem1uWhxOcge#>Vt zARibgx5xiWM1nJbthzNjFbAQ2JJICi9v*-}=inrpNak?waDEWR@}-mr(Y+E>WuZ

O4p%?M^t;v-abX0iSY|E-qoiuG5Qn%^2 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%0DP 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ⅇ1ypU3pu_u-bl$JJjkG3m3_Z(K3t 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 z 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

T&rAo96`LR|dEw;Zma+b-9 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 Cr9KN3 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%0DU|o_W&0fbX#KvE0O1xgI_?l%vYW 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%0A-wDaQI4xSJF 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

BtcC8-h$AL>9arOS|kBS!cJXW{Gz_%zG| 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%0DNF}lolx8w83 zzryAID-ubP2Bv^oTkW8=Sa{$bH|1Wh>E{eB0+??Yx=4rj8hW9ohfzS6u1?b@8@ff) zlMSu8?EhtQ6_9YQR&)!5UaUz^ozQ&SN4G}k3Qc-$5t@5Qx?c#*<(uv?p*h&;o)Mbw zbm{JWiDQ~O&u_%pV;{ClJ!a~8kWevrisuDp&9;fl3g!l8UcrRaxA0;z z<;|ZPjQ5!tm>rmB#rwf)e#|F0$DdzZG&gV=WCh&5m(HMPNfj-zEcaE_mXwv3c_?`8 ztF0{aHPxsyr+kZR>wVQ_p3>Ut>XMo=UrlYJud=$Xs=OL!q=CPzq1Hz;HBI&99%6Z! zN(q9(zPkF#Yhi20N1-=&P}8ES%2E}=1SM|@dHWh`YkgHE^-Icq$e2U}&%^RGL9D{g z$ds+5YDsN~U#R~)r1oJ)f<`ftC=Ubk6b>*cr9n|1!tSI-@l{8kMl^SlbWW07+*dA~{WF`kdfNyG7Gi>?jzNS1ylUNF;LnIhab zN{9aqkSxAWE|KX|pVyLezU>|{U`G ze+!5Y9$Bvl{S=Vt{tkF9{2v68{}({={{%?>9}0b=gx?_aG6}B{x){jx&I3X|)B7~O zgOc7Pct4Q!x(9eZupLOgi+}~7Gl1iOqkt^O+aq4jp?gx@TM`)jfe@WzZXdUJB7YU!dryKfodweR_GES+kXy_<@*!v z8*Kj{0oney0@?m$K$deNknKMZI1>Ip!hJ~b0m&BzGQHVA@}CSO|7*CPp)0*N0Li}$ zNdBcj@}B`D|6m~bKN+UZ)y~=nJP-5>z%jsGf}4Q3pnnErI(Gms1bs7b2Czx+L?HX) zDB!uk53q2s-QEGRz1{?}ytX%|c%*;k809k?^kxJsXIo@eTyCpWerP zp83(vG0XK6Aj|P>@ec#lxCOEt*9lz%oCSJ1knM6DknQp=m|34!flTN3K&HP7h(GT( z{9`(sguV|r74-LjY{zc`*^bSEOMq<0D}ijsc|f+~`9PL;yx_OebUtf<@bb0*na?tz zmjE$EyaRwN&&NYG-+MsvMTPzYkl|fIKP=%73Vjcd?H2&D{b=`?{AUAMo~Q5_#d>cA z(x3K@S)TiW%;#>QZv)N(eHAbt?Z@{@7+T(OKp*^1&~zjn$o3p8;eQ{j)9(f{eZD_p z`cDFx{%)aZ-+qDRj{`ElBZYns zfei1#KbGe;Aj4k}`Y|A;aAX^BB=A>2%(ut}Ao?Y8I}l4zU?OInfbg1WIlfa zW+1(%H0}KzkoA8Mh^Qlf0c8Dt0%ZMoEF@{3&(820gywng46hNo1jzCGRp15iF9PBg z=jFNYj5i&K@_Nq!jz@U5_^Wf=;eRq{u1{Z-aK3G3yrY2ZC)$PP`0fRcNBqA58NMIL zaN3JTy}kb<;d>WE^;&>k=^f5rT;}Jl%8$Usl{&0XwzxvNW_V->O`}+@?_U-~= z>8b7n=D`0qKrE%+UjrHce)0b)5KEr-PVv7LhkKTZWb8+Z;d z0A#u|fJ~P!gz3+h;!O8UAj@%zM(-FP`MwBbeU27-5b$)+pJKm=rO5j(@GQ_#AeIm> zzu;$sehP>w@7)2M2>LfbOf~P%foFie3yAjht^-a29RXq}c&`U$;qO`?n$WuhI01Aq z5LtVRfL{h}0pYw@dp&1^MxLs_#sSX+eWK7PlP44OZbU|YL->x3$giTrcEL4*&4Lwz z3j{5}9Klh7X@b2vzajes_X_S7>=0}RdNCx{0!IUz1s4MGs!QpuqwGifKx6By^max8 zL8|g%3@c0%T#x+mH>5>ypR?Pc>_k}j^1BR0y;kihM?)QkRXbcXzQv4K+!9#Z)ex%Lw{8C)g zzK+ow;Ce=z_G#>RxNiJN`-GlIe&j(T>~y(8w+PL3o&1@?{|3WBPZD~Zgy)#_B)?HY z&k&k7Q@V@sWBd_950&(Ch30r*xX~+kM(EzLxPYT_GV5!e@9%*h%YQ)HcMi*gaP$6R zq0r`i#m~X3;$tzR!(LO-omgDy_{^!=6N8HGONN&8??HO$@H6faq~{<#FMx2;VU*WN zXCuCoW93ctY>{+TQPi(TPq zE}AENIrFP_#ed9|A9anaYi=T3S+ERt_z+S{Q{QQQuIajj4k!t6WmqSW-0)3TY*ccp-cljjY4pj?MSH#e6Ny zSHf=ZrbWt^ufnNmR^F^kq*vCIQQ@wlrmV6|%t|S}H>G%2Fnd;Dw%C!cTUsLarl|5( zl3%WDPeDg5&(HU=QZucMXBUVy5QRPUM*8CNYCLzgixH`z!Wql06~-=^8kzE$1-*4vS@D7?lcw_1S!{9!12c+e`wI)~NX(00+u}Xu`Hj7x z&vjlv_SxAvIX*h-sg{)2iH_<&tDjnO3KnWOqo2x6EgkpU=12N)^;3Bs7oE{h9pS_K z3Eqf4r+#X;q{HV!x&wG9#Vy9;!$ZVacb< zZ!)cytQh~GE_Mf-(db)q{LU+);WHV&>8rnsV41PmFFNhB`@@4?<{9ln{fD}G&Ro2f zO5mCP@QRlQY56uRU2TuC%_4(N@^=lo5tkl+SN@Gydf|C!hqdYxuD2^5!pRYRX$tPZ zVy?Ad7c+&9@wg8}a}hIjx39IM=x+ZKqwxGbQ?kDDn`cL^Q29+@)av1dx^67sN7-G~jUglC|Hs#L~2e)98J{uzDYqnITZ zHqjU6`|rN=g58jHcu!C>euD}2=mEA%`Lj8^`bOz8QkO6e)ww9yJ*3e_e% z6hS9Lz_e4v#=#tp0IdknYiB?S=+>Q?4jIryeJ6-|;+PkxP6b2T3q!m0P0Ot>ru3g7 z9}A0u0WjM$oiBc9$}jx2T&jjQ7lvyr>e$s5hOaNeEunF7AUt~k?J`~kEilw#1lhrA?qiJ> zj(G@#bTfyxXLq(e)^v4rB{);(z>mz^mLl;jdIdNFJI1~S)7NbNDpjJ<;E&A@r{HaP zCXgu}ZaE{=HEzPy1BhA=t$F(xg{O&q^oq%5xY&)AGQHH7X)<&cOf zL4LUUnTL-+^lc~O-{$vFGFt&L;>8yL4~Cdp0IUc$l=zrBwd#>i(^o%;%fO*7QV`_- zb&ML8zWTlxb-cdQgA*ry41#LkK&y3!&zjD)86#xHFQXh6;j5lO>NzN;qbU4Rs2k}q z*`Q6mayRnoLuyqq9sz-@)S{?}(dnz#=@4tx$2zkoS3InA1*}833GUbj zZL*%@E{a_F@t~ez8U`zX!kAgdCEKQ>XLJqfMQR?t9AxGrBS)gB_(`h`#9c=fRsFNV zD|f4-L*B!_qw`QvX7r1YK(|6q(uU`gJp=KtYtU{q08`3~Pl;w)RU)d%qc1}Q9k=Lw zZC^l7xEO8k2d&oqIfWtUCut2$*vtIPtU%LOrQt4kY0AMd{1J4%R>5sViToXW0j)}) z4vBgLYN~qO!0M0_TOFd{Me*%9*%(Zn!$LcUN|i%RiX2p~QGQIoEGXa!OLp%2OqZmu zehz5_L)9CgYrQcTT8SBQ71p<=-6`|;cB2J!4Qo{X%aKED_&22*{=vv}J^bHReG!bP zU81q~P%yP|C#C@>9@H~PVQ6lSQ5c#J#3+o-do^XI0krbsrUB=So(9<{ZlBXYjR!p! zwjfq)F8qj;nG3ht1m?oGG!Zu!+LYgJ6a;hO(VpYxL{{v_T+lFBL4N2%)9_8{d0m6{ zBMNp|e1F2RdlN2_%>qn-4VJkZVG0DXqN&d9!3I3(ESMgjQv584A9*{HjQ=7Sh(&om z91_=ZSDU${^3Hy2>R^^Ty^Sl5Ol|4Z>=)Oz<_t(*{U$>WZEtN(1Hqe&B1V9C%n+kM z@EZ?8u$uX-RUfHsCbTcq(}OyPZUpS?`diP>@T9Ni@x9oM`dguA2=a9Gf4yOa6$VY`B+uXVolD&PNRzTD{J zkqQ4jYW#K$+Rp2){OxMT4#comH13rO)h!SH#|y1q{D9`9gb|R=LHaJzv}N@#8k=vD}QwI)3`3(X~r zZoSalNYmXXbhRcuJB8-0p6)rJxlyNkL+Cn9dfpZK8lm48noAemaCzU%%@N&rp}Bt0 zT`07sV*hu`Wl+NB3v%Wjj>DG_kH5SwrAidTsFEWeqx7efQWYgX=1s1A%P{#1ii!(s z%L$c^L-Ht*yxN+Y^3q0rWF*JD^2Qmn^PovIqoj0c zgYwF&s%l z)Hf$G@q?FPbg5gFvJ9f5)S&d6pi>14pHlP&UuBIChje@REz_4u2MZr6RozW|d`pug zoj&^GrSYkB>Qhx$!ip?3w(zBonbg(RK)I{IgLBb+<;``z(t53Wg`ycRt0WA~e48q`KH)t9u=W>J^4xpK4d0zhfVf%uc!a=yW*- zdNRGCg}g_?iM|d}iFch6PRl;Y&LP~Rm!*_?S9`FNq`MQpWcgEWnNB`yCFH+e!oPxh zZnF3kQl#UsuS57aK9nw9$my_zeQo^39B*;_N&4Ya@YCuaos7SPa@i3uL)#fQ)wqkn!dM8Sf$>&q@t`*YF~qzN08axg`aY2# zfzAZIPQu%OEKePf<*5X+ekDMbXMxbU5 z^Sd3${JtyUHv^epo6wCw%-2XI5c4eZH6Z3)WF8Rx60v|7uaW6MtOJp=fEW*v(}2h) zG8%XW()*&Oy`SJ^3G;g&$nxw5GQZb^roIuww+p>l!l{2m{(FF&@BF4uzSZKt0?2e4 zgkB)wmk1q@@LZvX0Xc48Mj{-adw}fU2Y?vL)jtRNk={>$n3CT0K<58F@m~kTl=0py z{*>EAJa01){T;am$o^fTY3~dm^E(^J_T)L0Y)>zc?RhMa?Ku?4_WTt0FSh5qK(-_0 z`q_@%n)W^qWdH31BFf0EK$dS4knQkup>L7!h|p~kzC!3KAlKt^AlLD)0lBVT4rDu1 zuZZ)HdPQ89rUJ9@HwnmmCje1CFYR5?f0XziBmQ3y|Ifal`9A=X|1}`_Ul#x8#DAyw zKP>(o;?Hk5T@WeHu%VcY)9}XNRRm=?zT;AN7Xt=bb1> zy&=*k;@{~A9|?r>9w~ST#0>bq2RsM(77$B?_eJ2jpq~a}%6fMKr-J@15L3o`A20{> z-9WUr_q)Jppl=4EtGzb>&j!5=$of9lgCOPCNUsrW7OW7Iejj29og0uos16diw3Z%+3lu1Rkcx($AO7tcXKcM5)_7ork$o5&BkQ|KQGZJvL-!9zVGBmYVLI`W(6 z-#C20)UG;AvA8t@~%kQu|>jUUU$MUUrN6-y|3gY~qg(Z6xg)N^yD zH^)WiyUIVpmH+uJdZLSd+!g<0SN(Um=;K}WU+*eUw~PNsSNM6ZaFB8Jqh1>QjH9Tl zlOF7%xt=@2x46QCuKIq%RUQsYXM70XABLV0UgO2oi}>1z`$yQpcZh6)3fd2|e?dQZ%! zALSk;P+Lw|@Z>{R1%C`0jVv%^#VVI`>)5__8ry)M<~uDAQ*>wcSGj5qt&me)6; z17}n&fzFPnxUghtxr3B;scwQ!km@~sJeoeltg5yY%0cutYCya;TTD6YaKJ`keryLr24&5J?%0aqRfn3TyEVxq7iEA6` z>!`-zMZQ%m2fI_H$R8tQyfMFgOU=AuXznB`?m$n+*sXL&yFIdfB| zhX+{{gTn+G5ag*&AC5UKfqz@@mzt24mzX9Lw%PW^!S{5 zJPRcq?kni(up`A1?n%Q-H$2xSxc>Bb*5aXwE?51>z6Bdwrq_Y=Bnt`A(4QX99!Zb- zymZ~%C_9`x&HnUwOuOS*$9A|y*)Hzh1mFJjc-G54Y@tNlhC?l-&3E4-{*Cd zgK(WQ*NOC?LGb{3%t-CEb*8WWzV^P;<-J;aGhZinb#iZ-*+`;Ob769CK9nWlJ|?;M z$1FmkzRqjOy`O;hKK!V=a~Nto4y_w^tQ6uswieDshjl!iD8Zb<2Y;LbG0KQ)>k4Iy z9cN?a-C%!b*va|t(^=7^>KqO|imAFH(uAs(i9Ql4<&hKaI?y4|s&LvR<|!R%7|k4|HkJN1Mv#mk#M^n_kweIrw*kjtef z^lb*&6`KGKRaLDg)VM4blwpFXs#6@Vs$=)grtWuO*8I?+r$gISE3`ePJM^F*@!g+OWLV zEj2eM%=6eKP72bYkT}LA&KaQze^o4VX54*DIINCS3D>3hr(HYj`jd?La_Z5n=9_OP z10)o|AnP?5R=XIQhNa*94ONYIf}#6Hm<&~7d@UMFtfxA4`(KQ=zgpQ(xBtr+DAC!7 zo;u1XJ4!jS_jl}Ll>fm$DTaSqW5%%Sk1?l_sRHpmdiv#^=@Sb0+lb$K{MO>vl0HG5 zXanFe5P%{Lxd2%A--A4`{NKlZGUrxBtfAXK8nZp>jpU~d-QGJe)b=TaMIogrXTt=LKzw0W3p_;%gHy4T#vS?!2oP1t1(+@!co=Y~&CRRBB2fR_!6I?G3n z$0%9m$^3sn&n&4P8tP8>fjswU>fitWIQ1ps-ok3(p<6V))X=V~^HxoFy@Ye+ql*Z=Sd*UHgyvnEj&db*6&gH`3eClq?oUEhbXQp3JVldB0GlM+cYOI9DVC z=Ou(BlfR_>RJzR?65=0_@Lq%`%m2V&9g*Le;S%Dn)zg#T(36I*m+(h$?@1i>(ys~S$Uq{$WqJGIyA=J8 zSGHMG1V2T^P6quJ&aQi0;d9p0Wl>;4hE*->+@%L z=A=Bv+d$GU0?9}F*W{z-B>f)(l8^Fmq}K!SbnX2H5U=>M%79~mbAjgrFBCjl!g~;j z;oXc3+${8ZAo(fxM!Z`5zX-e#^nN^cu^fK^!pr*-kmYzrXv)7aobqoB|Cxl}A@q$v zrt=j+%C(Um38dWJKtal{k$zk7FF?qMWNioHR#;8>HMaBhK(-I%)tE02W@Elz0kT|| z2t8H8DX+%xFH87Xp-%!bz0a`zF#YF&*lKy70*-_KE=@-s295{4Ny6_2GXJ$e=1)~d zroRfv{F{YdDB)KKO*u7&TS8Bg@CibXmGDtQ9|1(Uyssb==Jy1U`8|q%%x^1@>HS*h z9{}+;l5%Sdj{q6ITIdEK#!I9Eh;$=Y0Z&8tJWYEoAnG6S16kj5HSL`M#M_#zBY}*6 z2=kTkxz}fWB^QGH-UQ8ZJ_Q8p$ln23jvYXjV~fytO8EDM{*Hw6`!M9F(76y{;2l$xmP$m4b%c*YsQi}@=#8V^|?}`moMTOe>RZqP#`ql z#G}YwuJIZ0r@0?!0Sfmj-ped|e}p8}03>)io_ z>_MD;>&c++f|^31sYD-x2F6W(op?9 z4tO?btWAnWnUuVpkuPJvAm4uF$~FjJyWkqZ3c&?}mSB!xrr28D*I|bJZwg@g1%oX$r z0#rQ8p>pgl#9*SkPv|{{Mi|2cUZmubx{)c}D*Py?WcHn$Z=}sWllJ0Cn|mxai@o^lo;=U+Cihu`7H%5_hIgd0{90 zdsq6DgLa0~UbmAT=%O24bcKsP!9`;)5|`c^uJDnV+|K-{6Yr#-bH(R+;0)jHqK|de z_X<~j`Z*1WihIVzf4M6?=H<-qI9E8=6KD7#7eCg*xbO}a|8iIUy#G4WW!CEUGyR_JLKe7&Faw^CZ43p+X9#-^H%`#=7;kD@zVd&}XmnxE-m$@FAm)2ZI!B*87r z=HcGnZNIr0`CkO@QF$0MgObaAaSO`*H}?Ra*Cmnr;_EcX%q&8Y%vVc(dAwD7&vkjX zXm950TYT6|k_c^@Ch`7&MMzBK&&j=aC-?p(y!YXEnBrjO zTdM0L>i-ooU$%Wdhb&Hlz|X%;?(48@LFbM$!Xss9a(~CS(6dn`8|akrx^p}_Hof3L z_931luX@MGU2$OYl{fnRzsTj1@w$&ex{tuo2o4q7*n;LmPb_$GESR>S8yjLlUo}CH zg=qY0ya2@#J>v0nyOcU&)>lZ(!K6o9N7iTf`eb= z$X;ZT`j8_#+UBoN!{F6^s_-&y{yP0U#ZUcMse&@O{jZQCi^*|7))VOmLVvJAPX|ID z211_(!|JY77_Np;O!Xcs{Pi5jpQf+gh0<89U(fYuTa~!9aLKnixGciu-THC?F29FM zRp!>tq0^~&eM1q_$&L4#4lgU->&x&eiud{=ycXDAX-F&mn_LBymzuRL%r~5y8Jt$V zC%vsMjZ#sxaSZFTL0GMWFeGXilX*GRoqD(}!cAG52G!7`c@b*c%Q#(aqfj(7ESi2RtF59Z$V!#&wz_s8^iWJr5Zw}K95KL( zd}ToH2fM~Jy<=G% z-7Ui5q6%_uTtV#I5(~nv{znT^qzjUlq#zuusvxhR%VJ$)=ayIyd$6S*Eh)QZp)Sal zFD14Jr-~{FUtGruV&~>6h(EjxcCp(y)Th-AyM82wlVjL-rmvVI6BRv(8ElzKIp zGs>(cOEKB~9a~WYond771qj2+7+JYC%2Q_{c$+$%p>{fpRXTjVsnXHXhDb(tK=i+` zsH9G&6Q5%A;Me6 zqr8vLNX{tyqR_K6brw5a{M6*{nHE@e@U6X&;%$4n&&+PJBbTd&qgr>e_78^d*28Km z7hQ+uNq8$4zc>#rLUA5k4B|XEDPtamZLc@N2JD+EUvAiKgRli{A3##J7tDI_>Jb{f z2|lUYs&HGH1uvz~x!qm{*xDD0yY{BUBWOri1nez^?uC{`Q)=*Ty$BxE` zawWiw*A0;qR`V?wdKCj)aZ$A2qsMKu0EX3-r*r>o@2`p=B)bO&)zw)H&sfSluHsf3 zqcm)cGR(ua?Q^V=XQodYcvfVqD7@{ThKiN}RD2nO?c_t0jiR{Bz4t2X& z;)D5x*MrUQYNFDsu*(bGpI-PCh91S1Fc5kU=PX#EPmKOf7`Oj|JrHu{`V!lVSP+6v z-AhN~qo_VJKyOF5X;Aek$bLJfV-)>0Rw2le_p;^n4#YHrLA1WP#7f82I7aTUFWb<` z_i@oqU;P?#Dh&PIA8vy5KLq3pLk9y?71-gDl;@XzfB0In#+#L$Ihck|U(L@$7!oX> z(k6hi0Oai*3|qm#tfn;}#B{3KH&Frrby9mRy>H^63xp?U*rmn|pv{N;0%4re5K>!2 ztnVy=x=nnj%R#P5%8zTknvQ0zPjatmM79Bnvu|ag?Gy?i84s!af;A>{_f0157NZJ% zIJX#9Da9?u!j3u2*Ij79lh6a{tJ_huVCa+7gXZ~T%%IUzdoq&OHHZw~jWCWK-gdl5 z$fOdNhwJqYR)ibvB=rsGNRuSeijH%nlNj}4JF33vq&uR<B(@r94YZW&4Z9U9jX(5vJbcElG^)q3b;^D* zw&#wlToYS)&NF?V*k`vwHc6|X>18Ji>x)V+`^D&FwbtlKWorb5u!hJyGpmbDveu4J z&L^AXw(l-9K4v7FD-fPF3JXNyD!}*32=v7^lgSsFOwE_6`Ixieei>Lf`>e=HfSvL{MkBZE z_$Hypqn@u0St(x|zgc;+Fx0CXG&1E`@YvJ!Rpr}Lo;tgBuI}Y$iEQP(u%|%d1*wNa=twj#dsf~FQTS6OtJ93q*kOKX>k}w} z*`FIk8<v_#0#iS#K3aMMF7=7eO8VNhBvYNf$%vxDXxrMHniTMPhG9_fs3V&WVCRAlxK_oLO3mt$??mB3$C$%t3+Wk!96m11hpOA1%F& zl9N_x8#@{MKb-z`RR^>^J6UHe{H$UyoC9V5-GQ!IK6rY7d~PCQv!F0d<4^)tY7W^T zUu5W8Wx^`kZhg2n5NRBGyy3umP)v?~xHAn0n%sk0V6bDftGzd>na28=YF@e#YcqMa zk!dq(=t=gDk4)+G+?A%#U2W!~LH7#%B2v(bpj>twd$ho+&-z=U3+!^} zC3*|W5p6)bq+WK8wWH|u`C(IZH0%I`1tU$aTi%B_kWSC1$P`+xwOjQ) zB#K*4_G5a0|8M|_e%WCyzWR<%1{7#^2uX{ZcwDjrlqi{{t=E&`9kx5T}>QtUZ*`29; z$&m_e3hGogvZyGHXN$Tqcj9rRFw`x%O}PVnGJ^0*S^4%HYlSzd>XtrjKfmjm%M`+A zBtFPcTbg6RF-cSc98Vo+N0?1vzMgwC6#U2j{q^6R-{4dJV^v9>Q7#q+xRXpdM6dWX zLod|f=Nek{iUWpj(czaHS_HaF4J`uS^@i@${B4HbsOeh`?J8xN&_9##a-la1y;$g7 zLUWO)drIgEO?qAtnqL~}4hqdLcXT69)yO$S=M$RC3f-APYbx>o`6Z`#uf7m=9$#`(vdDHQ|I{bbR8;5|1T&^>vlH^(@J#H)3D56dQDSheYwB16xz~_ z<;{)sYiukjt$?C*QAvGCH9Y23R@YUP&(+%4py!rXm6tR)BOS(JKsx`vHKt#{+L}yX zxtnV)oQ!{=v>*Q)xxF+D)lI5Q}M29apBDp@Zu|xM0 zuqD%XE>c@)kB4^alZAKk1_t+Ds&IVsq$@!=lf|C|ITJczOQ>Iwgik{IB#YlNR>#L9 zFx$>FIf7&VDQEPG9s11q2=G0x`OG?&O5eId_}HIu={e4Oxdj15FY5H9 zU$H|@)ZhLs_|pEQ`Pje889v83KCdI7Tlm<|aePViqmM^jN4%laWxvPqyUxX#h`@aC zuN8idgE;;q>GKu-p0{-R92foZ-v$2lFl$D~ancum1_GY}f4As^%eYBsKbHGb@a+{o zjvwVr`?<=^bg65(_XAxH8BYo6t{AJ&-?;J;hw?Lg-9 zbD{4BGN0Rl7sCG*p_fZ|z0g-nc!|)HfXsga5Pw-?@edzevc3dl`wjszpLgNOa=Zm( zKCc3q&+|fWm+&n@KOo^h75Wwlj{sSZTA?d|On;uxK_Ju52QvL>LQep)o%iA2c=+!E zVhfVBMd)^+&j6mta*O|;Q3>*I7W|H2InaW?CFm3EMP&N#5xfhCF3DOac%$Gl!79Nr z;8^fo1Y~`t0NGw=09l_?fvk^L=wpHG|G(iMhECR-K=#A^K=%Lbz;VDE1uKB3gZ?UT zIxq-i`UOC?XQt3&fy{rH(1U@@|1-RjVgBy}Nk0o@{67laCE?qIz8T2!+yvyfxB-YR z$XW(OQ+byHna^cFrbB@brps49%!fiAs@@VlM(8g}_|ZZS0kS?HLJ)%K900ODPYeA7 zkoi0$^hO}l-2h}hKN6ba8t8KGSAqHPKMTn5kq$&tdwU?rz;W=X;Ex2C3tkLlzw=yH zBA@Dr&k6oQFbo_6{}qDOf?pGyCwMV%Ecng`vizq3SwA0;yd|Pl0km)u68LtY+bjpBC_p3q|0?C&HBwx1pPXLl{G?3{Y zC;kI~;i8Ncv?U(|;Doc)u6A1IYLrfb9Qkf$aZ6Ap1WD$bR<%ISxL+M_JN) z1b+%-KYvTGMlc|FB5(}C(*{#F*fh@5JNq-oEJW`CNBjGm)T_)jI34N)A z2Zhd-@GlEJPQt$=^ub}ed>;at{yRXH?+u}!0J5GB0a=fY;=ch%z8?u4mhja;^4AK@ zFJ?@4A&~r+3ta%@_&pBD@yjn;?EgOkIbMGW$njb%m778#|Hx(_#$n`s zAjVtd$3U!8k#->Ri$s7~_~ZF%%%A70pTBGt;I02Bu3pHLMry39w$YQ^RsT4rIBv3;k0Gr=1#xe^0{yTj=EyPCGRW=LdAg zFA+KjWH}3foPQSpInO8{&Gq?o;6(7B3S>FP09iiT@2CG!;y+0I-^DWw{r3aOPx}<) ze@guMxsv`{#Q#^oGr&(-5c(_o5a8$eX{46{S?*dO%e`3WtAI$iIv0qks_fRxKsfEz zU@22}Ye>^>4VDyTw}$DQ2%7%1TZ1J+*{z{JrP+{{hYuc@0fAUkCg!B3YdA?d6{Heup4$uR{lHq+9Oy`1*0H~5L2g6joa1Q!bC3i<>A zDxQT-RrYAc(#PYOFElq-bbfR)!xswuC$uZ+4MLv+9tyB@<45-~ex%KN#j_Y6w0V!n zb%Jy*8iVe?aD6oLGG&D6&WXZp8*aMCxp>d$q|8Gf6K=6S2m@N!pp zu`8Tsra1ZE1L353?WC#X;-o44?WAds%}H||chVQS%0sy&XE@JYb<*6&IO*TI%8O_G zxbVL1^Hi5tm)7ARHT{JoW~ax{I5rGtW>qc*3qLW%pS~u>O4R9VxK=11zBCbkJX@an zYFC{21qUZ&Nm$}1p;%b_mmr#jao7ry@)}bw+E$QwYI{KP>C9<3$Y}sY^D3h>w%H(w zUypO8Xp^Y12?xTlp7!Z*lBUy?ki*M1B_!!MjRrYRK&vi8voEee+J|RK$XTjI%Nxrj zVqd0%B#Lbk$RrVWDBPtpQOWwUCYud zL{p*C6n2APh^MZ;vZiryacKn(d6QI)86i^u*bI_OGtA21UQ+t1ab8Y;$npA;vk+;?pA$C%ws0iDj^>WY=Ap7BWpjGeXV- z-5iagWb;~}>7jxN@C!am(tg|LfJ=f=(GASDY+B{J9 zq)F#Yo(#(7roEsg)pcSl$bFt0mS4{X{5(GXQ_pOkc756B|J|-o?z{OjYxCjS2{OsJ z(}RDD2_t6U$33pG`vUt(b`9Ao{k2E-)Tuc+s`-@tq>9Qa-5~Dv!0p6yfQ{nA502Y1 zK0~B(ld^P(Ip3}w53h8lJ&1IN+aCYJ8yK89-);jQ4m;SW33ijzuvEPK=eBdyE$LXe zU(y}$X}d%fc-eWX@`?Y~pPi#gV>N%LMB{#&ZPkv4*(1fz3H{kQIw0vaF%ddG2soU( z$@{Z&WZK<1cBSenRW_m1vA%uTIjWFGS}z4@o}ld#?L&R>oJJQ{#Qy9Yr6E4uS}D{h zj1y=1@a$fpIrM)tZ`^oiW~1<1i--7X;KG?6&s`W?h-aT~cLuKcV_h+9_@3c&yCimw zo<@4m+k6T=X4H--qkX^j?sR#J`6FiRbB5-P!cNdE{N9oDoM6ugCF@%riSWRspsg3-R zDew9?bi4NHvAV;e2=93+DXg7};}xHX)*5Y#lj4G(jRk8RB?@wwMvYAQT`X9M5U+kI zE_ka6hJbJfmj2|2`S-9hKd!g6vLJ*pMn_^mU|@THN{Z^8Ud6+9)(rY@3N=fxtTW3=rntP|RDCH={7TpmvSJ78T ze1I3uPQ}7CrX#4ir^nO(Qdgi0)G4PpUNk>uXJ8&|BJ9xC1y&vGLOs*JwHE(d50<8X z>rGr7`a|o%LFqTC6(TbDI&4j>(qS8|0oxC~Vns%#p|(7k!?O*;+_U*1Q&~q<6Ktdf zBG+3`IQczx(8?0Z7S45l$8SyC*4{6qf0On|f+4;H^+dVVTD6M`SgI)e!hqTRB79>- zk-kn}eGt$g^_6$5 z*4-nZifEva50*Ebk7T>CMROz@btJ3jAb35F1o(C~`YQZV zS0#cZbyb#t&)-1<;%ZQ5cSbkC2f1DypDRC+naZGT)8eyy0--(ih&4Gr)}HuSeAaRl zl%L;vSi^((c;TqwUmdZivAM1@{lQMX@;PGjfy$IfJhvGj9!Ofmb%eLp+vgTxg_{IsLi4p9dqGR ze6DenXFGzTLGv?Qaca*M}}iYkMk|_w|#k(6iR| zH+)snbe&y6tZ=?-}nK|-!aED4yxXQ zm@4VG^USqDN#q9mr+k9igm|sfhBP%`!QYH8*!m{Id+BD%l$f#v!(aDFIrA`W=J>3T z1)PNuelf27nb3;PL?miQ`-pleR_R>hOve}r3hj-Zt-sGGBc51%vsfhCh^M{!s%h?c;;>iW$H8tE5pAFgEvDM*HG~Ah`58E1 z8uN?yUue{u0T(ER89j^|tPp|HnOHr#X%~b;MC-w;H6wf+)(c)?fo1{BzF4m^+oJ>h zq1kCTfBj~DleI#RV{!6XTrZaBsJ=pZ+wnK@tJYc6*r*eOXxo0Nh9Ak6VD$e&z zzPJf=qQT;~CE7Y|8_PrUD_jd4H=X!0KHX0l?}k*DuCXrTiAbzxb+R&k-R9I~^nx>b zIeJ#Dn@RNW6V8XfY#w%sdfAb+mTOMqcv!W}{y+wZoL{ZEvY#?5kJ`R})&Di8U1#Td zxB!K*Lch~S?9_fV3(fO+mc(wbJIqxCO6OxNt64ocqYyKglQ|Ghw@UNOWbRNSpDQ3& zJI9pcT+j=mo*ZV%kquKw#Y-|(MqsKif<0B#oN`Q+l_;VGPNz;8NU4SIIC zW6;YOwCyUm?Lf#_j0^W)#y7t{HFA1`dc+lm&k2T__TdiJ&CUu%_7J+-_5#!cjBY|& zxxCaWeHMI*A+$?(nyd`zq5C|zeBs~pD32l zKx`In;WN0r16s@Whc&{;$O05X?YTDJXtJkuc02qOhGP(THh&Z0x|?Lb6TZ-px$*m- zqCn_b?0jJ1n*DGTu;oHe<3L!H%Z9 z!htjxq-c8z@8fsj_b~#3=><{jcA91&wWjH*JK(yZ=zzs2s@VD9nV_or9hkF+qE90P zDWtFFbA|FZd#YbCBr@d%bhz67zAB*wdkVto{zH##!G;7DE;C1skr~D zDE%%AH#<-EW13ZY7qq?JJd^iFSvT7{mrvZrnQH1PLuP%_bnj^++ zW@rcA`!rtO_G0rqWIjn{e!C-c)l<6Pu=)8T7Y(%!8hL_Z9X=Hhj11;mF>TOA*>rtp z9~*|Y2;YGTdqp6JBV(DGD>e06KRMVqI{iVFdg%G>AB}14%~JvC1>5ncV{Lad{j{t0 zG#!h*0sFkX!}*yiaV1dKBA9!gDTmlKnQ7>SLloP5 zLyKLLGDElM@H#__U6WQruh-$X8d~g_{LIjuI()OC_h|ZehBgHjEE9ZL!pntzTj<3? zeM&^@lf^F#5!&lS$MsC2K1{|ADm9iGs^o-wEDi)=v?F2O0G6p~P$JSz}PZBB-P z@pfb=Jyoh>#mvB1m*>s3F4ksXZM=9}Q) z9Djas(cHjg7Z+R+?|118hnF!IBMCWd!x$e3?i!|&DoCZ4E%#N`mXwv3c@|aH`j(Y6 z_$ZrL=3!I#lz^;OBkd{1aYJH`UI$Tszx)k1w=z;L%wIz+^Dv^?^CAIaH zjTO}mzOu@Ol0{XBU9Zi*s7&KXNu~)o*(FkaSzfcGvZmZqGqa?j(T8?WR)ehC+NG)^ zktce)rmPAaiz}9u)d9BC>dwqLb1_M*g1n18^PB2xF!*Zgmu61zl~$COF6B_Ft?^~n)YfEO zS6*K`fhDP3yx5niD9?OrZUJURa8BOEf!VVpfyN3B>a2#6#pM`eu|(n%u#@!6!#unc z)2%o#dw#*(nf|;2&%E+RHiB^s3kPtoz-|Oh8hnTEm;0df63BcPr+9>X@-RO8zmfaS4sPCkA(Y} zNRs*;kZ^B`@DY$Wpu@W^x`h0F5*|WGvifg?JO>>QX-pPgCmEN6Ct3YPJ`$Fp)K zy(D&iegKAjVlRo~JC5Ix|4s(Htn=qMSI(p>_MDjie*8APqWL)9l{0)v@*j;nM~OWp zj{i7*N4m7Tv`6?j590Weq)XwGq8?oinHP9UOSCKX1MuYtALmD0x_PaGs1wF|?F8RK z;p04s<4cnN`^^7soxjYRr1_6VT9)vM-fWETBAtH*GRp^F(O-3XGLK?>QXKN}(@Bo- zaXu+$>h0*yTfjF-_M%#-H(I{19TH!MYZY{y|}&otrVd{fSpFNwXa z^TA&s_OLkr;`o!adlmS559oH{e2n9l{(KS@nFc-I%|HyLk+hFA3G@b`X&;HEX3P3L)+d&0E$|%BHvw6`6~HRsmB3P9K9J>| zEVLKMa;F0q0^h+pxCr<o{CkZ5eWPy%<-P-y`zwrpDJb`iMjr^WaUl5{It<0D z3%msTD?Qyj1ynrW3)aJb8+bT!!@yIZhk$sIe2Mq{hoN5tW&aCM>AD+Kx^%OW;&BV8 zbbJa_JgzYQBI93d{ErxYG^qS|2dMPydWZLCCn$e*fb!=_<3DQr2aLbY=v%<4$Xy32 z9v#MC0?K`h(bA_R`#PhgS4s9~8T~sliy}{60xG|xe@OXt0qER;idP1lEO$o#n(-7~ zB)#4{=duYhlBFJ1eE`~N-dwk^PztYP6uazif1{fa1RIT zz*12Dy>Xxq?-fw~Z3pGwZ$Y`+V*Is6e*=`ePk@SNr`az96VJdOe{f<6#byk6%8qjVD;AVr&e z96S;JgP!i{0Z)Ox-RwUBrjY9dRS(-hrE7-K=YVw8$y1F^nSBW;cY}=o!oJ?!&q48j z3d%p}ACiAx2Nm!CF#38Br^%0jiuV;pe;6dZu4$m$p9#wSAt0}^uiFt~yZRodYUf zXMoD5(V)UR3{-mF4Jtjujovxb+rI?Lz894JR-=Cgo(26dNI1#+LBdbo15)pjw|Rc^ zH$m!2*H=N+i_dyGc^%jU-3%%o^FW1j5vXvc8GSsc{1^o)Ki&;0Kcurl`7sz&e(c=a z=f|Hw<;Qa%@#%UBRDL`RDnITA74N$|o%|uF{P+^6cu3!p;;{-;Jgzgk#q6bTN%k|% z{sN`HRnQQ{d$K;1W^3myM zQh#z5H1#T}GY{lrvK&;o9s?@gZwJrB-+e&-M(9W7zhkiHZwJNyJt+Po#@}T84aWbb z@ue?A@?SLmb;kdg@vk&~qw(h$|0Bk)Hhz`y&oKTm#y`^dhZtY_nH2xQ#(!lmAI}%T z3i!VU6`#jJ^=~>FAbKsRa$f_gUVO=DUC>E7o38^erk|Y&(sed}2%Lu86p&X>vc~8M zAg_>Q1t|YMVEmIoy71(2#yEs^=dA&_r!1LfgV)XrBCG_3k z6i|AZ6#n-Nwe?rwt~UEmf{M=##{anSuLTvKD?p{E#bZ(j9OZr%sC<}iwDdCZmz==Q z8Su{rG09U6j|DG;e<(Nsd>2Spn=An*Ld!8-pwq`x3*C!jx+15KDFgj;Xqvjy$Miwy zyP#=GP9IYZ^sUg8lhemk4c!Gz5j%ZMY3R$K$vUTxsS28RyNhofcn&mS$T)pWlc38X zRPKj^=R(tl98H`O+d@Z8*}f#Biri@6fH_F{Eb;cr@5! zxDp%<-3lr`72r|OW56Rp>@>GT)${hN4CPMp!Cj-#b%q&3`6D^`BOGp6V%S0c5Y?e- zZ$h;vVahOJxD}@OJ%-(e9fmUvD-2VH3B#>~$K%i*!*0V4!(?kN_2bnag<=9p;B0Au~jW`QYcMccR1m?|9sZ?xxYo zOy^&8g)$H`2!9X6&6vYH{k-DC|5_@s%v@weZ!!8CqH(j?;`fx%9lWGu7Fl{)Q;tk% z+#&ay&As|n(OZpPZvJmG`Y%ck_B)Jz%;eV@z0&;aHhLMsNPef$tBqD;lv%*P?0d|< z-Td2Rw8lNMUt_fTSg4Dka~U`>^~E^TF>mIy(O=_hG(QdgtW- zaPxm}qgPw_8gI#e>G77)#!$(RHu<|0K5kM6dHd7lp8qi4u9IM*!~FR(7N4!W%$>n6 z*@yY_*(M+6%hmtOzMH{;%mYTJ)Zt+cQvHM%=AW0De__6PC-E)CKA5|)kC2IJF?vFb z-iE`d{8r)@rK?C!ls=F6MCq@`{QJ+C{OlNgU5vgY=HIlKy~eN6@J^?^qVydx`~Ql? zr#oi(%+Q*DLw*iGzEqN&|h}Ubc0PFWTr=Hn9 z+woe1hpf8i7tqlQWj;n0;|rJtEAd4%o#C!tNg$GFIjcueQo|Awc77ci(b5-sWoJPH zT2$$o+&Q&q7XBQ&=%!w4^q03Rnu`(^R++i_rhZzro=I@~oHi24RtlIQdsA^(3m?%%r@1E(6@ghTv_1Vl(q1s>_Th5s^6!i%~IV-YF9l_e6a} zKBwp`qW&qO?980@<@m*R{IZQ6Rt>`L5L0Z{?lwY5HyN7)jOPkH$FTrha!eyyF2R!{ z`z4%$wSn}cnMXN2X~E;Dp0u3Lw)><0?1@PK?c*tKJqxhCSO=Lb&_kvK}fC#mY72V+ZrM=7Pp`pE>b}PD_1{k$51Xg z)`sVzGcHsU9?34H%4e>x(UBaV*JAY^#e>z8>K8BcYU(@{o+EY1YoN2Hnb$yP;ZbDu z&9vrO^BW?a*T8z|2-OP^QU74Uc|skWe~JX^yP-KPa|tF|=JVUxg_KKuliP+w-in9s z>R6i_+8SFRt>4ViA)jf?xsnWx%1W~-Z=;GJ-y$}VJd&W1O$@f0s9eR2!i7qu)j4SNiDF#lb>ailDJnXHs4h~n<_%B>>5WY(I0-AsN)<416fUc2^HQbem*n> zHj@83!q;3%2j8*UzoBT>@h_uKWBn@#ibeD3Z`tUa(UjboaCgGF2md(9pcSfcAgzF-(#^%$=ND(6Rh+F!y&`@eRGj^WqR=-czbnpu7`8sz6Q#o|N=gsf zTN83Tj^t7K9=FPLR&b)Xs8v4)qORwQ4ifbkn393QAs#%_Rv7erAFl12x)|xi9!K%3{JF1z z@;hSpKIfFIozkVhaQTSj614_sU6zRu|3s5E5A^Gxg7h09POXXv41B&W7pRH zWA@Y#Vy1dzrLlp>T<+%dG`MrO!TEYb<%>g^kUvg3{lYQDB&gBkqb@bmS;yLLyc~F!6b4~WSoScMi zK&YlOJu=fZ4QrGPy@|C8$mMBO>FqnVU($bOY1y=BW)X+&19Tgj1}y3>mrh+(zU;n{ zku!Zdd0%j@IhVM1hI&mtq4_2IlbY;?0n1pctVM%Y2as?7p?u%6|DPPle{!5PZ5xa@ z;(y`i_@T+^Ia~<;Q*G1#fujtTy`*l=_WGwb{O4mrQ^5?AdXqzw;e+ulW7w%3o)~e)q_J{3g2YiQn(BSpAxh-vuUC?7YA* z(zw~=tUUUJdo1oxLT;zYsa%{1;nptO=Z2wOd*3+ZCRcMtVX3w8ojZN_Rt|mqm7Mm{ zjCp-vxvx^5W7tBX{d`0C9K8-K;ZyV)@HqIF89fW+6FBMC)!BzL9$M~>1Lf{0lRFfY zyLTEr2$Z|ms8@WFH$MXMty^{~A&tlOXBsS_$HB*HVzJ1Z9gooz%WL($_T$RC+J)bnVPg48l z*eX)?MdRztkMeto(U*eqrwNq5GmX9g#J#)EkeL&ApJ6%nC&C|w{IQ_uqd;Ee?mk2L z^B&{td=x_gcb}p7gQ4-q-Djx$c!@Tu{CFNzd>#i6gVz4JGXAt~D*6Xt3e>$%$Ae!5 z6~4}F2|GdgzryT0K*dM<=EPrY{Dq+6GY?dHKH@Q{i5V5YTW$6$4VM^BH_RB0HPqCX{M&~Ayc6C1gQ8bMGoO3lD)4P!D=0o~K>J$VezoBs zq~r7Kkg{=@!e9P|>PNU0zOcuz+pxoMreTF)$`Ekw+`b+%GR!|e&9n9ar4%4$n9&_Z zYmQR;aJKRI$iL_?jylHd!?;Om zl4T#pNpF~a7#B^2j_yPHF!Hc+<|>||^b-(KTJ#Spx*4e@+y(30{J4T-uqrVcP zwQo4;-`p5|W-Pwyhokbkhc-$d9HYM(bFY2BQTh2XdR>gZE*74qtE2AU8M7Z6vzKgC z{tq$wwHW=g7){?%;GRW3mgD?VVBdWw{&OU^!9+`Wg?HQ83ZdJ)QSj|zn=t&hRdmCJ zm-729*bCwxycp}cexaT13wh3NwoQ2dBD*H`?0Ps!4YbF>d&}x$?qkd^-qp{IvRdaY zEVjSFa>cFbJCAZpsahEgE3&#ntj{)w|B*ckqtVENj8_g4HVya{ZrzdQpNNKkFyB0p_bIvn9tp7jmFL*? zYd*Seg*cWLEfiZ~^ccN+O*b!2YHe6JWlBv!GOIG7(iL4R)?#oZj=Fa3Us?}7p}hPA zu3f`uJ$Ny?VJ@Gws3E^3{NG&0_OZi&oEF8><@b7aTa5iJ&sMlm=}#4BFD=g2*F}+~ z+)2gR8Z#G>KCC!zs@M5^@YbPtayWO!W5qnZSd-8}N7$5px2oB@`N zhVbd`)mqNQRpq*;sRO+wv_DGx;KTR=cQ-`&vdb?GE?-BhLt-crVSzc^EY>V5UxY}! znzHH;?&g?SV7)zW?Qa%4zQFqT!8(&oucVrkF4xWAdEb8(vF~v9e^DLIh5lsTe#H`| z>zv5L1tO0{L|TK$e-?(iIPrLrx{L`jN<*Z(+Xs%H&{MzoW z_Csm*Ysh(&))I8I2k{+<({ydZr7I??hIXC&$pIYn9usPGe7&0e7-2>E+@Sm1m6R(r z7tp|$sO_z!%_o+2iQ4(QsUc4?!|df-aa6fZlQS-?|Kpda?Y3e>1gIDO!nGp#nf+3pJ+L<=vTKmn-s^0??`?ZuKy=xggW4O=47{e$gU=OdO~ZZj ziZr3FD|H83GfvkdpRhaFz7*VY2isK@cE{HCi~H{?j+F;`rQLZsKb7l#6g(*J**>Lz zXMcNFaOPi!nhf?)>>BYjc99f+Em&z{g>51Cm3)}3PKDzGz0ap)mc7`R$-WZ5>S}A| z!SrfeCcss~2huks@~`*J`PaMN^!9q!n_jYd(}yh@jI&UezOo?dkrV z-IjCK;hbp^!klHg+Pm*jR@n_%T!6H-{XkuQwCuh{6hBwi&)DchBm1pF{!Je!{~kzx z=3mXXa?7{X2pl$Fnf?=%W}@HbvZU8?`)tP zn_ie>RdK!Q%U+ybrRx)=?Y=VmkN=5L7@^cWEPY&Z5C3@#-*E>NqV?y8JPC_BzOQur`(}UH$_sxpi&6eAt)g^>mVn zJ3fvF;r;--n=Xt!{jSaIy)NC6O9fVXC+_X+T5m5N(MugLEEhSA{wmjLwYv8rHx@l$ z2g}_)MUBpGk?hX)c2DH&<~ciQALxA_c9cav6m~o&{=fkF^H}_d|Ht`%6I%aLGnu~NyP0eMruSd@ zKXf4VKmppz;N&5>_iH4#RKeffr-Enit;}9fvi&JnJ!0dFkpG#=>}!3mfBILt?$YI2 zs}J3`541Y#=QobR#>FDs@N#aR;V;6>WVt3vANM~Zt^WRu(&gXc*;e}kqC9Bz&YqP)g<>ofVi*L;()4BhHmC{B- zXyuyNp(0;hlDJb(?FVR^1Pm^E+^hWOT;s^Ch9x=igEGrLT7r-bfw?$puks%5Z4Aw_ zcRh~#FVgGSU*Wgu`}fX}P^7&|O8@RA<=pxAypFuPjM;u(aMX4Pjr^#bTqXWht}D&S z9qq(zLaXb5H}?+_$qU-K2{!~d$X%+K=`#q3*5|_cyU2d?$J~DNSIO}n7b@K{Jzl1B z27Arl2z$f1?S}Ex$r8%#DR5OD%{~+xW7BPo!fPV z#lKfFY!%PGUU0G1)_hCYlTQ=vW?%~VS45sq6W2XIn!R_|k3wn2 z8*A`irb7A*Jgt3e`~IYq0?B_ig#6d{R*1iw3#jcpt0uejUyc7!3|WXjMdsqqAZGzl zf|2j^xW8)q$)V!)z02>*yuti!UA~rUE4xbvx8b;NAbd zf4w}OE_uu4p>pUvK#}IWQJb#M%04(_*KhmJt9FH;I-Gb0>7DCs-iuFm?F_18%E z|1S=g)M~STvpmmVc^%5hU2tu-k$bOQmh1iOuBTQRy$7O(ORhF- zA8fNGSfz50=ZqdVos8Q>aNL=k8h0VY%Me_YUBkd_kMpj>doVhCVF{OU-KbipX%TX+ zX3)06oa4RWuCx8BWC}Cx6R`Tvxc4%i^cmNIT;;kHRV!rNa|613j+dr)d98D~C7K@C&5Wa38F&q1149EYk)^cTkfkFgHMY zD4UTajkQ%xbx^Q_2i+h?5bMU|Rv;E&3-mZVM|NUhYpKHz}DpW1mTY7kq)GikG zxCXk;+m8+OOixb=v^LmdW(T^%(`|uX<>}>t9`60WCD3cV{eK0z$J6%*db6j073i&= z-Vx{>o-R4UMS~3+o_=qjjU8aFJ(QchhT1Y`8LfE>ne&a-N50G@M$hwP;-g0EJ6opH z=tfT_zG1XJ?PPvvw5R(1KGctW*uj*T!d9jW*vi!JDXyGA!9lLz{+*F{5(+&dPLbKEKEbX9?7WuBjd$ zyQ{39d&gSQzoI*&++|XI?+a@xyiLrm4_n;y(S}r8OG|3OtVQ!1bmNqW#nJewTP|Oi3Zb-J(b|v*1)Z`ZZ=qz1-8NQWr`mwlvTzew)Gk+L?W;ZC8lS!*uf#o^e6j#V`lK4|!)sV01F5a@4 zB2`iaK2#OuRxd=?QLzABJmsdCC3{rsbp;#7_As((vfin$>f6!>=0w~}#T=Vi=M3y1 zW^3-*b&968nBAU`=3cvS=c4sV+4h!9h`(yVVwLt=G*S0niP~H9z}&lS&u`78mp1oq zYq1JIHSevM#kS)V1!2+>=WZvJ8eK(U|G7GUU7Qf-l zr^;+59mVXoGD9w7(ZH8Nv%~Cl?xR@z>fYw%^(9@*|II8{$&BwO{1i*cGWwt>=Dx@5 z4f@1yt6B8mzF7RaSMoT)DPAko$2p9@2V&L zxKs7hnQ(43cAj_1Q(n&MDIa%*_m3TmV@+9go1E&aGeNG%{Z_X~-tKEt{VkA>gnu6v zn||%XS3T}e?nNwi{Km_vJ{QPUFLP&bN5Rxtx00=1PW8H&oYHeTcEj!dH`VU~x!Ad0 zmwsgGp7Z{yz7Hg?cxaku$M3zo)&D;ED!KcR+hTHR2hN0ijod4zvs=UMUOBag0=Xjb z)yB4&&-?JzK6WQxgG@)SmsfikNM7;23i%x-Z_T7=`ff#To5}TfU-NR2a(h_ezu?1H zdvYe^LqzVc$c?u9?RrcsS6?G??;V^-^q8EruY9=XPUWgQA-0*E+L<#U+*rPTgMCV^ zoJYI~YydYhMSUq(8Qcj@fc_RZ8~ikgwDf{Gg;7s^e8+{o#7kUmTe^MadGGzyV zaqggsqoGd+DWl{ta1rz%!>8G-cqa5_ z!w0|?=(|8R^(KD+@=aCtIZ)xP02SWVpyG8IsPLMNeg~-VbQqN&l55x+r|@nuywUJu zhG&8b|762s4UaH91Uwh}w}Xe_-+tf+q5nX?DF2@VNmuj3;Hl6X3~x95mf;sbmD81= z($N4a9T$O0$N8Yr5$o#i{Z3Hs27z+-20O##?qyK!w9QTQZ$YL19+18{ z`9ttT@IMW|X!uFP6`3z6g%nEX9>GN|ok zLf!Kw+-P_ksBmrp70$;&g`<1j6wbwsQcm002dqoLxySaboiy9;`Pc1AFpRX#p_8>@p=qYyf&Hrf0_Ln zv+p*3r}38?|0+=K78~6ND&12+`CnuFDo}E#89fF}L+gGxrT>1As+YVORDITcaKgEu z>hDJk&jrtc{s5Q(PXJYKj|6ew{2uUl=u*QWhObkI;=ceY|LzBsA73>3W>E3&02S{m zK;_G&pyJ(V^dX?)djLpRlHBw*AJ1=s(9K^0%Xs{hVb<_!!&Xq?4+Ry@3kP|8)bK&D z5-+|EegOO|*arRwcsTxEZ}y8pxo`0N=8M3KkUIxdI?By{q~RZj`}*<>sC3^AUP?S} z2P>ez3o;i}wi=ZCWuW}mJ$1^5Hc50X!1C-SAt6-G(0r6|V+R@u~q8uMdCZI}kjC`decBmr6W;BS^p1wGQNc-}N1k^62^s zNPpV(8IbzabpuHK@46P`Rn(>X^?0RpT>_F%T{A(t+OBCJU1Qe=LAtoEv%rJElR&zF zt};;ZJOWgD-UBNA(qF20zRCBv^66Dj>Hm|_PlB?4)aVDy{%)hc3)Uhpy_|%T{0d0; zN!`~6-P{4H-bkO1-WRQ4HFN`*g1!ip|I%ZCeRCRAyEzNI7`c-`$(4bUJHp#HCqbfK z_6F1R;=cka{@X#t|2dKu6sz7?^#g!el@6kUkobWrRPWaJ_A&~ zPX?9m6F}wr>7eqx98|u)4^+M%3@YD;gUa`PLFLb`y?y@Zo<8OK??A=-8BpF8)+sytFqbGw(@42AfmsOy~m1lrz_s4^zH+dLHdXsMl z)t~PTlHTNNL;Se97gT%v4M=*EkAr#zKMbmzr8h|V`(3bx_amGK~_(|ix)A+jxO#Zw9D%@B2k^j#a|0&~dHoorjko*sg zuXD+g|E%$~EttO%UB%q+&cgm1pu+7ozK*|$e>13XyFkTzna89K{K|bhsQg%9v`+jI zHK#{tJpA*Z`Ab&vQw6QL5KQt|a6a^*;735|U!hBO_wRieT8`*X-2Hp!L-*o{F2?B% znhyPQXqs|zBlsccyFi+X(;IXF^sUfT$>h!8ROl{nF!a^nWa!I4#gjO=dkM)q7tcCy z8ul3wExPZkRC~ zZ8*}f#BeA1A@|!1w-|0R)SgBcuHkCKm4-_U8x5x$js;JmYK#F-0aHeg1W$n8M*2v* z(_19}S3!?~UIHEmwu0irbN3CVz@y>QcS+w9RnFUM{uwX-ue}%V5Gvb&#BnX1w9Iiv zr+E3vG*Fpj-(mD0sC=R~8GR%&(gzgg;cwtsw9+kel-xsydGn28sL?x8j!e9Ptc(9)p8lTV!~bRqN#^so zmH#E?-`C|HdbrUakUaEAqYpFrofe;iX$Z34VKi;b(J7PvlF_4${76# zvwzIO-)#Q1S^f<_ihwa!DgLmz3A0~i_RFojyXj12bpNjMKj_a`E*ke?o#GSb zUs(5;XY#9#^zL=^Sn^wkds;i%M2B^Z-&**aO@4ueAJ#FXhfv`UxANCHc)3q8sFIl^ zd*~jc_qO7b9gxBGK*5!P1MsQuSs^zs;e zbBxx#$5HpXCo)QF^JtWQH5Q-!WA>Y3?q7(}y|MbTUo1Y=F?od@4Sy#@l>R_W{`WEa z569wne9ZovvH1Kd7T%&*dbh>O>rXNH`(yHF#?p6NjQ&|He0?`Y)Aw2|{y&KM|5(gF zzF`X7KNxe5)~5mVqct})&uQh7y|Ajzja@lqX%Sw*YCSg?MXcPujj+EYY7y4w?ZUo@ zljt6hBA!LIq!h7@Y!TVx3;eW!%5HGdeNlF;A6rN=?v5rdrprGTzwA#wuw}_#@@HEJ zoX)sNvVtNqe|ulp993{xUqm{lK&~K9tGVYbQJ?c6s#dOmnb#~w5%2!~yh!MUcj!ed zBD;%rdyQVinQe!OmcMqmSeEG0tB7!|?dFN{{vWwY&o-y18AUeuL=&3ZxKx-Ys`PFT zRUuoo-Lt6#?v}pDeSA?Zd6De(*YZU#Wb>Es4Scy?#Dkz;ub|MvHFps?U+7NpUW7Zh zF|i<;;Ar1*T=U}j#cbU^oW7Q7BYnB~y4%;zN2xDAQW||NLy;7*3A?OfR?*EzF)NB* z{)N3|&NiAIUT0vV6c4h2(ckcQ`J$#a?$Dc5m!61Lzxp}4d2zAs?wdHFdScoK7IN5M znrAx`xni+_yA2n%EX+$wL!(!DnCmO@S`XVA=`+ZTdB_JJi81$`dfkRrM?4WxgqXV? zFsBkR^oU;6V(JNL*$h5}r^33V&4u~?P0@?0QjAtzyGu}Bs_PCH2P*U^9Z8F-M=tA> z8B)g>v-dma3Y(hi`P}}=KGN>~Kuh9Vx=Szw8?7&ek%?55STCs_LGM+!-_pJ63T`D- z4iqqyMFrOsN}_l~3l&4ZDf8AmEm@%iEgyPEblgFNX0$i`ZvVHdAhBRWn-2HLFi-Pl?q8fe)n9psCU7wFk58e*mLn61Piw&V7WG&5 zm_KV7Kg($Uhx}W~4#uPc4{qFQ(hI{0t zUtXri=6^iZ*U#PQuMGLVGI#)**Nzh%bBnP%{gs<6KHcVU%VFNX)ui_T=cA@E^JaJY zD;rZ@Hq1*cIifIr%<(qnee*g--4sLYK0{3!eh|U#vCJRxZGpS6_f+eb?q5-UAOEBH zf2&64Nn`gJehvRnuki_LKsd3jvyUB~eQk{00Dy{EYJc+YUE6&y|P!Z_^inCu; zSbhC|wm5rJarXCNZ{vRt?=$S@4Bh`7+9xCW6I7l-(_t~abpMmODU0c=7@JeQHh}85 z1x(&~HBxgafXa31@OuA3`wFM=++~IbAr&q&EPu$ARpcJJ<^Li1u9F{Qg&-)K4B8XU zabBIF(nVqe63%r{HhENm_3e4<2i(y`Ed_)u>^k`?d26q$p;wjCR|h=5DQ|s0M+-}r zYXK;4t?h9Z^YmtSl=Pbg_SuO2CTD+rf&G;c`yOY1ae@7%5&Lz{{(}YfGb8qEo&7Nd z_UA?H*EswA3hXE3?9~PQSs9v3y0-XbvgvN0zRqdg&izj$lhw2Z=RaK$!c2oYbC;zxE|F|~)xF$RnD2~i@osnWn6pfM6v2!(=W?bKseb#HYQ0&K% zvVNK|S|PSD;p*$;0%BRY?zcz}q*ZE7PJX_VmwMlUv`Q_B$$t@f%Q;_Bi?!B>cE11J zN2l3hY(%p~$jEg>JF)$_!uuJmN)$~&&aQO%YMixpl1#GFj+ir<$mze$pvwMMF& zknTV|lV`2Civ9VVJEssUDLYNap(o366ink4>%|k+{Lcov{%I9zRTy~_EYz zNS=>UF5|gk)+=i38aBAAYVcVbb{@K6+k3jIN_ZNoyhf9f>$G}*fcu~i#_6l7tI5`G zuFXC`_fnmGqB{GxYF%6Vtc$R(_g5e52z0GeIuy3uQ;SMQ@_Mst;W?FtySBze3axud zNTRR)l^W@nd@Kb2=7Z@cB$pc%UWA`63X!IGEdu>#-C1n!@wyy*Gpx#$hqU}D0hB;> zc8gOe*uOVB4-DS;Zv2ekO?gl6_tliLGd7_Btpo*V!>&Fkl!0r4r}!q=gAcx}G{h*q z@gb!v*8qEbBTBE!6=eE{)t&p$*w*Bee5&<(wz1yp9w@zuXDICSfE zkc^yuB(J~i+7~y$Z{cCmhpH#+f=m*oA1*l^2ZQ11l`Xdb=bnl)6h>+8gH-rbu z6qS}%_~{>3F1u#fUe~;Hy(Sz&JY7xEF0D$b(aBl*rtB=IyJ|E|6$H;*V2K=anOUZ{F?PX4AL8N_o~QW8DC2v}bjAmg`gDj?HAh;MBEu z9_lR6zgOM)PL#>gX}66+mG0D0byUU8ddR3MR?sEm=p&=XSif8~3ZK&*>Z(&{X$6Q6 z_X+SYyfb|ZPy*eZp$eD3nlA4_|7GWlwNlvfLTBv{cTHQP3Ot^4^`z_OK;=$f zfk%&4y~l}!3nyS zAyN6@IS!pGFWEM%CVN^FXO_Qk^RY$GQ)MOWos;HtBjjhi9riSs(80vj)h(knjL!4BuDXHnWrbN?G zQ&Q8RDXHnuVrWKHowc{1pE2KZwnVCVRj13EzT?ifl~9=a?yv@QX{b)2!dUv0|Fj>a zZF^<^bz|c`!8>0&wfn;P5b=iQU4s(Ix{;_3uj=2cB{{ErJFE*{mH%q{0U>ryV{NYT zxR#`lB4g!(@s4z;qny*m73#lxZpR51XjLn0M`mZOkSaxMeq74PdeqdFZy}uUyUvv-c zXF7kGW+FWI?$B=ENO(_Jc$JLuHOBBGAs3+b`Br6{AEqr#XG@503wWJoPU%LaE8h%y zGM$4ptnj0Yb@mMlgYSEJ?gC`WeIK1@9wtxj6w@e;-p)UpTZ!5j9lZHb4Ieab@0wYX3#T@FHLs>8`i>bUlvHOg8r_-R9JfNPYUPi~ zdoq7(p}&kMs^a4b^zk~ioeU=Em#z%;=m|YcRJ%F$IQrnb&Gxu0I{n$o> zYZ(pJWE<8vHf1iK8IE>`B1CmMFXpu0WY73i&={(PX< zdipzo?(wwFy*snn)0+cr>;RhelKG?At1`>{&FFcaObl@|(C+Mm;~ZvmquG}k-DGr? z(HeKkOfp*EoH7>~t!ggwQKLQ8_gDG>ikVHuyusERKV`^^X^)Is(N0V|drEqIznaXv zEer1{+fUI@?-#=7B#xikaM|$?+O_A!SdR~4#>f=V_2Z{buJN+Er*izH+PY~|)Ai@3 zFU&J1q$j2)R~B;Foe-3oIe+W5U*Y`pcVZ)nQ!SRzj;hq0mgZ)07Phpdnwnb| zG&DCXY(tivYfg%-Ux|LSmC1?uyr|*Q_J+l6L1o#Vt0dD#g`j%O6;{2|-c;Y#Qa`(? zZE?bQJUZ4DZ4H6f!eyamJ!e4+`-YG~Tv@M9+ z&YI6=9kbHLCfm|igfnLmdu_ZI$VszRguJX_QPaFDjL|%+t+9UAoH-2(q5&^jIN$7j zTAF7qsizv&v+d3JT+CWmIW?1*(%LYmi6ksewKX=NrLCXY_DChL3)Z#`o`OQtS zvuM$*MOQ={&PLwl#q=g^);k_!?bj&J({F_}K<&>hrdO!KcS{NFH^%gFuk)QUJNYjb zert)dPH5O$%>N!fQ)RBFZHBI}_wAo(lg({zsag z9+kH_MeApgN-``j?J%jrTAU-C7`uQYkp2WNtOEPax{3i)j> z`t+%O6v!8e&$p2;+2Q3?Uv?+|4DyXHdwJEL0{J5G8HUW7zj}Gqr-9^^@24Zb^KV|> zj{Wp0pWCQ^93d)O2{PB7yauGoCocrYz@G}91D*vA;e6p(kS3WN16IL5%IJeY$qxhN zelRF^f2RJ+-SeQ_Jqya+FO1fC9P+xX%kVNo>0hDlCntd{OC+m7`E!=p|Ab{>h4URy z;c8h~;e8U6+zp_@TMjC`D~+BHN`5xz(h1646)1OSfO2;-D0jyi{p%4vo{t)S8`Qbx z&w`5ICqcQt2CT;2d{F6{1il|U)9BG43;AUSf|7fUL`v>iP;#rmqrmGy#qVlR@oNI* z|7=k4`w*!3ooDn|upIhCQ1XX>l7E-kOV5hrhZ_A7k(d07pu+h*D0h#6a<>UoI6a`; ztu^`>Q1Ly;@E8ax`@3zXd7 zain;>0xBNT!y~Ah`-8O3CX%`S(%qeaO!ST|OF0{|bM}1Nc$>+S^b}@tbM1?u|JH`czQqIUJPy!Djz3(yV_rDhu|2a_pOMi;| z|C!N00u_(1fRg*X@jnSl?s}u8SA|ccWIK2){EI=7)_fYMe)DC<9~p2vD7im?lKYHd zm*EOf>7NfOyqTclH62uVlZ-wIlz&Hoir?En$?tFW(vKqfH<t&^y@>tUXee8^p{<~18L`7TR`%^>k*K8-*qoY z7vA+FkS@6E+aTrN^<|Lq>H0KCSJKr9(!{$uK;qeTDR>g`nd9lCCQHfBuJb_UpY)U{ ze~$%KpGrZdY`TVkiqGpzE-F5M1{ELaBT;;|fQru}pyG2csQCN{RD7h5MDh7DsQ7#u zRD5m%6`vKJPF@Y31Kk8FA7_Kgrw@V3$McLHXZ9x;eT>;lFNx&$HT%7cegn_s{v}ZM zzXM5E@>ihh*-t_KM%-uoyFvEnC2t2AGbO(T>iyLXs^7gCRC~A{R6ivBB&0v7^VXz4 z*$gWG=7DN2^&sg_P6tVUQa3D|NPJEM`5SQ(KdMKgjDM){M;d>K@ujzf#}PY0$^Rad zKhGL}i}CL>{yoNDXZ%}@|0UzEHvV$sUt|0w#-D5adgD(we%kmI#vf<=_Zj~%~EanHOJ520PEU!j(P-%@5uGs{YdG3a`buP9 zVz`q?h~8qj$x!7dzP67ER~xFlL@zOHG@NdjF&t|++Hf239z_-03LXJ&0S^Z^gYs`B zco_5&Fa@?6pR$rZrUOTVOo>v3z5H;)62lI{;cw_n!wSQcp)C0ux)ph0k72iAhv7`a z3d58k;N0CsWTkJSht5#u0i%OHipME**{`w>O-IX)aQDRJ=`Op3D#U7d_?(M<%3?K;dt-@JATERuu>{*y3A9=P%>*OW=OA zxqnge(A&)ar;!o8(`fBb5uGym%Lz;LX0!h_aTUGQ=rfESZt}~F9%;1e?~vbN@^_nm zTa13qXjK}SuNoch8&UtP@Wz_`F-BJyU21g3=uWxke~abM2BnApFu(Ri!Vn$i)1-gN zl@Fbi%v`yL7v{?tlQ}xY%T8u0|FRGBVe|#wo|mS~2E_;aZmU0QD34O;VAQT7Wa4n_ zqjV-ltNldnpMZ$cOJnx0#^|@l{M#CHUmmmnS&aU5j9wA*|FbdsGh_5kF?v~yJ}*Xp zBIf@KG5e9!g=qRqVzm0BsQq!V{C+KFuYNQtuklTken-syWy&{d|K*r}vWwc!iP?W5 zMo)^-m&Dxb;`XS2oRu6vpM#${=QlIeIq|DN#cJRI4sXE~#_ok@SEp26fA^J@W) ztyL0#+>_In4YSY_!SP?G_CRYjMfD+gpTZ)6SB2mgVf+bS9qA6S@XvVZA6o0Zp!cG1 zb;AYR-t3n;OfISx!MhYEuM@!^p4OSuIn8rXYcX%(;t+C#q1@cP>V#O_3RYQmt0$o# zPeK$TYbh>UEz5YGc1}GBncLnPMBkEb1m$J@y!M52+L~Gx796bADpqkDf8al2XZ3-4 z6YePCtaP+=+?rB-WQE41VRqBP6J`@=kkzUCf`y-)O(ga8`E{eB)_zGTXC*%)YfCwP zBrdjEl(Wh&Eag}OFM;L6iZ4{K=K81S6HF zG)C^vG@3;iHwIecfBo~Cab{1?iSzB^jQryjmN!EZ9eHB+=bSa(mPxr^#!>jExad2> zlEYKp?CzZNXcMh4+-d#=ANckQNq4MK{A%n^p*dQCX(*-fw8F0gMdL1a&Y4GNWN&da z&Ypwz4bIq@m$&@v;~jG#&h)oVxy~;`?F!`)Uni7fJRK^JqvOI{h4%VVe0@Xai1Oph zy}klp8_Q2R>BKQ7oG@lwfA#hR6dyRFdOK%UYm=|E|9^c|&a3`6G}7_SYHkSh)bw-> z>dpK+>Z|I^|J(Id^-N86zx}AMUg3t-!rj%^lTRFD6;}0ie#_!E>4M33w8iRew>pKC zFEI79n)~R_lrecF(_=EDjSl^6Xs3JH&pzqBbN;EH-Ns}m^Q7u@I|RY(PCrG62gCcE zi6$f7@zmGPoz*rgCrUjo)W@;atad0;m~J|4J?j31TE{8;*_}R)%@#4~`IcD~UJRa0 zMB^&f?(}DjvG41d=6(k=J?cvqlX{lhVV?(h#4fnMbww2tFUw|{5~^jiNQJ)X|= z_=g(;z1cr}BhXv@gVvXv+2J3w{^X5Hnsy!N;hz3mpi`b6;vtdf@eM=kT+WQ~57Ni) z%vNtNef`c<_y_6pcc#uiToCA){-G(*Hc@y@pga7-&4KRr{(m#jtNg<~f$sJXPXv0c ze|RC#J@(+eVPeZaj0p5*Z+}dnw|aV9pm%tBVxToUkC_u_El^@~KZ7$V|IiiaG5+Bz zfv)fm77Ye@p574bXZnZ71KsK${t)O6|L|I%SNVtiSwtvi<{0x(v!849IHPTtkeF)p za#ml^$6qc1kvhQGRt%bAoP4u}1TiE&0Zn|-a( z3yq#@bc@lK8Qp4hm(iCR{Y9e}8T~_}7aOg6NMzbPB%U+6-Ds`P%V-@$W{^5k%;g>u zTGy9Z;vtbV`U<0uHu|GRPd55WqqUzv<|+?~tBuzDr;PR?$Xx9qp?h0ouJMp~$mkBE zw;6q{(SJ4iV@AK--Y-VxfV+&j6S;oEq$yMDD{Cf9n#`8e$(6NJxR|ydi*u@LYMlHD zW5$#R=^S(1Nr5#XJ(VwOr-83}(!?B>fSkjyvD&UlRs-4Lx^HT{%7Z!n&z3 zu4QkG8v@CD;4|Na9GE_@*`9uWI`4ekNyUP4+&)1$Zak<^`UOGxT*{@#k<^?iQzz#` zc1&CsGHWZx#~lY&5y=pl$<-65`U#-pJZ(fix#KmwJc)ZEg_p$rlHy29k-e@YoWH( zx6Yb#Nvff>k)8O9W-X96wo{)Ay~753H;bjc`%HH0!f@LdE?I9SPh_Ex+L%CF+}g5; z4gOqHofBBJxF3P0h4Oe-Thr_X4XIfR=C`27v$1(`qJZDp(6GqGt!d$9vlcYXP0eW{ z%8PumB-@vpYGIZwSj=sjuLA?_4)Va$XVSQn{UpdjH%TjEXpWoJ)<228j<5Cu5 zyDXJUrMhXcKhwa(G4cB-M;c<>rU*My7c3*oDti z#JNPp3E87()Ln8AK~in0mU%>ra~RR`ZJpJ$DB2pGIHxhfQuG$5I2S=&xkDaZuBl5C z?UyvWY*ez^7cOpZRXySef|WKWE5Zqq0_$9cxU9>)Wpdwa@z22AoYxs%wvYWP^CJx& zwEvJk_Pd+Es(ZyxVCB9U!@hCzcNAE~{}Pk4c=XwCt##7{{I4=O#mAZ8--KmDZ^-Rh z=ga_>41vn-@KVX|gN!W8))@V9ki;~1fDARtG%nz~ENSDBq{cnsH-UVcCTD|~R-Fs|{BgE-`F0oNkyg z9BVk*aHL_0;Z8Egg>SgUaFgL0L#=O1Zl&Q8!$!mDh8e@LhNBHf8kQJpzSxCpsQGBo zn+(?(t}$F~xYBTmVWZ)6!;Ilr!_kH#4NDAnQtmE%!!3rJ4A&W|o=R@D;Y!0LhK+{P z4Ks#g4M!V}G%PW!0Ex=blp)~g2SDv}2=hp)ucD8&`K{wbQ+8WH8TK?ex*ML%?fh&0 zIrJC8=zO%s?V{^I86MrgBlyvGk$Ay;gNG=6UW{gbdw_LoHzagjwk-xbMs$TY$H*`6 z?$OF^WPLYy!P}gbU|G1i_P%V!3SJ?#mvRFBed32nF@@Cw&wDbvSxgV{DdSGGY5ke| z>2>bLm%MnF*wkmSc~7l&&0w&X(yD;wk@v!P^3}yLrl)=3mxa zZMJj=Pb~R?-0eK&4)d?WT+F0BsmZKi|BuD9z{}muQ-*t^wwQlg%|9bG->9x3XGZbl z@+P+arF(t#u3i03_9zh%eXhparsAnMj^qEWngYEUb=BElRA>L1$^Lzt{6S$wP-an$ z_JN!Zzm1t?R}N3Kp^NYLZ66A1t%9yqBy$QZI?v^pKPn9VoXOtneSC0e3Xj*R0&jnR zrfbBn_e~`3(Okg#4u0;K#*Y&$@7X@A+JsXuQ2|hrSM9KI-f^XeE{7f0!*K13>ffE3 zvnMmz+t#5sDwDmtM_>xMIyMFwjmFY*X zAHUbi^dr}ghx73DcXgHq(tU9XGsocI&bq)e>szVx;DGj_+GnV`OhhiOy?Jr z3Y=v+yOb5R*_|kaC=irb_BYj1E%O~8`U^Nyz!6_j2GwzAiiG5nMKns%j&_?$+H%i335u9PCg;)Q^3~$B^yc=rp`uAOC{op&cm3D5bu`*cwyWYV z%CVcr0I1ia0ijiEG(=73kxEEy=crL=@}S;*X9+R4D6YsjS3agxigIs(#<5&VQJU8| zVK|y#+J-7P&=`6`B(aT7l-LMX@S)peU*?+L1_mffw$CfY8v_->?$sRghNc1Ur10@*{_}Mvg{d4yQwy->AGShiLNb8zga!*Q9&*;^D~`y zD-s1BN19PhSNqzUuJ0&kq!Nb8pS`yx+v~)u(L+U@s*7Yhx@|gKj9*1x5$!|;>14eF zbofYlvqnVd@k1HYlHr-I+vNG3B_ZEd^wea3SGs&3FN12AB?QvG=1z6V&X*NERh=%K zrOQ8*6B>)mO4o=?rgXXPNK4bF9xV-1nPm_1?@NGGwC_Xp&ZS%V_gB34aT@DZf~L9y+i=M-f1%T4t?3Vh@&$t`~3C=<*(B7 zr~!rQm06w14kiZD6uTubw^!klHdA|_G#tI-&frr%+`g#~9^9oA*POO=b9=edBc%o$ zY3}%5o%3Cu1zRpGocA=BN~P7k8$OFu@XaN^|9Oz66!uZ5Va zWe>tG^WfkVyvn<&Xo+4O4Z)FaF7%EX;ok9Qew@FRcPpoyK3fYEZ~Ch=pft?qiTIiZa(=k%{#DzN;f=8UV1#Gogk3#<6VeIihi~pKV_LZ?`zLO%zJ|ETeAH~b>VcT8Cp#FVvyDX;;g=9SGbIt{)L`ZQ4fo@Dq^iRV8LioezH zhsOV=(O)&Z31qBUwirAf{4mH|Oxd|0bAV;<1QpM{K>7Du%2)Iwpy>7BA<(yiqrsa% z%ChV-@ZI1XQ2B8jsQft!lzZ(Pko!Lk_4%axjFm6iwjlY3K*`+(N>1lsm7kvhPX(_r z`%BDT`y}MCR$RiNw#;L)J&zvZuNrr}wJ?*Wg1KLY#! z_zxT@zj}TBDSHG|`P>Vtd^GA2t^0RRBwXEhKL)x9JOP|#_7{T8U6oA)4+bm1gFwxP z(hkbr2Ob9Q11cY+p-%a*l^+^&*(UHP@N=Nb>n2d;w*q_*cp0etpA9Pghl9$0ozoPp zbDDfwm%Rc~6lL2%vdo>=+#mcEbQyn-gU5mQfv13L!PCGs;8^gp;3)i)_GA7=oXyYa z@XHNTAX|*e{yvC#IPevaKA`O9MoXVBQx|1=K`}*8cB}Dk2B~soA2*af6w$4QIzP$W zb=d_VO{^>l(gey50!M&4|ETcZpb;^LUA7%mx<3gjKd%AFiV+usn6l~oq`+EG<(M{_ zw7dK~0#rWp@A7pfNDxCS3{!@H<7Ys4l#OTnUN`t8EgVA}a2$^Vv zh|+(F+20VOSHzdjcJXJhhP zV)nPh!aFJ^F9o*I`1~m*e@%>5JBiBg8*~3mj2;z>{}*HNtBA?}BIf`7vHYox$$vd& zuhCaDej2buY3X)~(g(-tpU)V&N@|(I>_H`%%oEDe?2`I2Fcbi}6#Z>w>{C z^;*MaBv#bQ@!hswFRB|29q;^eClww-OOMxf5A)Hl1bfK>i}u+In&x=EJL=@TZk)B4 z6K!ovxXHI=q3t5h^US?FxR#5&qc|y}M7U=+%dZGbMStLwx=E9#dOoh}CTWL+lXAiN zHQo9JO^Z3pW_~PgV^x>~JfzKbq0DKmZ}0=vID2k`8^0#}c4vS3ZTiV$#?`ZrLNU-9 zvfrUIY5Y`n?gvx$xcd1Qrq|pLkMvdA&C5XpG!ax2UB~8z`noHkbN2 zEv;8@s3mNyASN6xveq_TI3#e!@8jk)P8RUcP8nYc4sCcR?X1 z7nfO!wRG=uHY};Iy3fUyZ7qu$IG;41C4Zk>SCnj*P_Qm5TwdxNUUU0`NbEcnt@Qof zug}+dCrJ71h4U7*G|z6IXSGDpaxwSW zickJ@9Nn>`Axvi|D1tPqhh*I^X!0v%1??$O-*m#L$CeVx--Fh0`t}}bOp7vb^V>0qjZdWom z{Jt1{*3;&&49b$F>@e~5wBQe8IcFZVcpB-F7@mc@+o!+D;?-@Aw&5SIgv4+%h@roX z<$x!4xBk`0AkrDj+m#HqKJ9-3an##+1f`o8%wZW4O+6t>GHsHb-PPI&Jd)W{~!kVYVfYX{I!} z?=QEKCe{AwoK{n;JKc)wJt|s&QM}hAe-meLFMU zoz2~)%dc~;7LR0QYqLu+Vs1)1)47-_yrn%kX4*?KS#B3TNOFv0F5Qd{ab~l0;fYPl zy9v+I2<< zQaIU^W9oy0h-^xizgqr~cayU_2fNM_Lv*}_z+1E8<9v^P^ zH1NE>ik~|!;ivZ}-s;?(Ri&&{lbs)gxcy?BO1+zR>g>lw?3Lx)HQBdMPR4mZ0U0;h z_ZPk!z1xq;?~15fyX7p*I96qM#FVJx@Aq=i&JrdCI^ zjU zR2%j2jOXYW27789iZ^+fUAyE(wj)xpW&d2KO`(`1(qI?$Eb_t5ILb@h=nqKlpKJFaK4#e3$cP^Y%vEx98+saeiLz z&w)RqkpF4%kAtsGBtASR|26S7T`eVj5q>xPe0W;pWcz^6fPh*UDG7~I%O?=8`C{f? zkKuHDn-gvOl2^We(xp2EmqKhL)E_ZV5=s4SgxZ_r)#AFP>`z1Is>0SzoAQUavq-s5 z`{%lXTI;lA{WGlD1kt{Kh#rN`eJ#2$wVjChsJlxFA5zB4Ne>ScpO)FEL!GQuW}k~z z32lw=JrNxf70maLa(O#8TrgFl+PB8X^=Yo1TT3Noiq>`ctY2q;8p5TXP#IQXu`*G_ zf(kLCL-|8o4~#o=t5o(Dxk^!&C#B0T)uZB~o*K_PNW?0l(oI~6(hO=JTM_b|uG#}4 z1mzYDk>dSVAfZK5B=D#mkEZd;EU;F|lA#^TmXv@lR;A0QYD>WX$KJcZM_HV0u>aZ3*^kQ>{V>9!G7;GEcE!`cd%$_tIY4wiDxR(pO3-(CLDbRr+kt}e5_q5 zRZlNrc`&Pjd_dQPQbrYx+?VW?tPa#zscDP01vkz(SkE1{XM1O9vqr1Z?5Yp@E5uiQ z{mXbjrRzkcdsaVo;Bl*dOyF??A9-~Tr(xh+4?FfNO8B4f0d*gOqry#VOEw8k(CVXK z`c|@ULxn-wcvGM%T^zDlhSI=p-*PY8S@TfrD6-}?A8!sctV%5ZS~zxblJtG=rwk~r z^f_+&Hl8bb~d~{mzj-cJo>l1jZ1F7E9WUDw0sVdyyQuO=eD&TkW?qgZC!N4*w%JLlB**@k5LQ;R1AGu zgz>Zf!mfk;TW^n@aIK5Z$83}Zr>7Wd8y!>Ie=0W&wC|xG!4w;PV{L~y?!+S+5RKJ~ zBN^s;;F^Zs2Hkm=B+a+-EpcYvV0?dB57$ZeH{h;QHViVZSN?*VkQhz|)fJ2=z$@^U zqYH2u95#F#&U;tTV|?&MmXoRr!{MaLoVq1#WzLzW3LB#C&0}X5ADo%WauL1aZn?qS zwy;&BNwnt}$88I3ulgZQm`#w~IC(Pof2F#A%ebqJ;kzwIC1-;n)O9Fg1!@^@;A}457OT~AdNpt-+dCqI@97&V*S|gSW_D7HBaYB zjk<~|@#aMNZ6=pj&yYcD@vu-q&JqyGB@$nN52Gd9-}(Cuw}2t*ml~pqbs-URV91UB;FYr=3Z7@ zTg)QanN6;l*xctS0qp(TO$!=Ix_x)r(@aJGn$Eq;tKGRTna;fmFJUyxAZI%FM3Hu9 z2R7YJZH=j>zkUCuIEg}I24t1Ule+i;I9SOi2F*R=LudacmWV^TY(`!ydwuZ zz>|S|Z>GHe1*E+H4jcr$707+!c|wl{qL&Krdu{G7=K%2+_&WkU1Nbx$A_q1Bncois zncw#UDfb;frfaDn&+n5C3G%yk`~^-E%mK1o_af8$z*RuZf&-%xenrEK$aKv zc_WJh_W)VXZU9oQ*+BAr6UZgv@nSzx>??pnV9$MH@_$Y2dG3S$-oy{{*E{H+Iq0_?^c@bG z}{;T$F8!MqOCWoO`Xcw=ZW4xU)a3LG2Bz{c3egKtjgGDYusA%~SiU zHXgN+t#{)oto5Zk?C}Al{nN%n?Aj}z)~3C4AD_~4KOfjM-@dO;Z+-3STbt5{+Wfaf zLKZbNMHb_ffjSgmrvFLxw3ZFd3#k2m2s3BaQl*ZTTkT6C^VKt~``FB8SDm*8m+uGkN3AXPo4kD!3O6|SoVSoNgi4|7#p2#nUm>cp!j@H``ngaz9Tli7$359#tVv~%&jMU>;BTd zx1{|Y$h@m2wo;|FCcox(e~rXDI)CNuj5mmggXQ>Qt>MVJ=(PK)3sKJG?4Ziy?yp4ZCz~I1CaQ*-aZE+F{C}riUeuPd&k+Iw2<_o z-o6GRDdO{|^Ese=E$i*GKS{Bh(RujN;#>k7>9F4M4y2LlnxI~?y0xOLGz?tNA#Z{?*WD17x6bSFNXbw9;Cc@gn#IYg$6%1;gp`>=zs z-n}LIvTxm|#+&XL(UGb#40(yZ)H#O1Tf+TZ^d+0O)XeNPhH)#d?dxsVxtW2*Rc+U0 zU;t{nJQHJEd3)PKK%<`#WtdCL_lk z?y!C}hV@zOF%Gkj!<3{1zR}P9?;O+3uyZ&=`q0Df8V_$sKdwIddb%k4AJq@PAIE&4 z16?v^TIdi`rfO-sWZN7B;|E6{J!4AoIgqgubAt7d`Y=a!NPHOc5J-ENv!=tZ_3&AF zIC(pZGp18|`y5!_-rRwB4}V6AS<_*R?1=JcCGh|F$o|e@jO;vV=6*70%?Q5A$c{#` z_V9-GuEQGIKR>*oz4I`J_PXdRUwLFt9QMebPXC3`D<6t}2(=frt3FwFyzlrb9Lu1h z3ZvQrN6WooC^iZ9?1=o0a|NCt*pgPC#(=_OSPXLj;Y|rno`m!LCAHCQ;pnqUKZjE} zM=Tp-djg{Sz8Axy1=KWj+(G%{Jd31H0k5v@sK^YqLCsTQb?p-s)$U;180dv+UtRlT zMRf)UsE69Ty7sAxYH*E#mZ&YOYoD&D_JDx0sI9AOpQ)(M0s);-kFT!XQBj=@0;;37 zt*(8xqB;izg5GY+Cf}+Xu&W+QRa4}{k%$u8RBI2HSkle6{`K@C35g1fEp0hU0aklO z?Gq5vt@L1RuBd$yM21p_wWXr=DG-@TE7sPE+NVKylya=cD{7wsk)?EGZL6r=0U}$e z%GzF0`z(l@e=)ta<-3shm1>=7v~Qi~Zv52U?Z*0$w>GyOM9tk9!S=4=+T4y&Br@B( zN@{WwqoSUB!abYAt)F=#IO&Zukx%Mt4xII|Jdyl9!ndyA7T>zbx431wsqU7H_BV>T z3N`tb%=R}+a-WPId26T#hgSA`BfF+;;r!R`e|5pFZ3VZiuDjLUR(FdVm;uZHW&$&f z$Cr3#Lkkl`|Djc%)Wy}lTb-|VNBI+W`Jzv@f99!c+Fb2hH{9L+wg-s_wZ7@Y+EUG+ z;@o{mX|(2cKU{0v{`M{p?3)J-%iY%gc5zfMPAI1;<1~RzUOM6BK{+*Qr^$mB*xnhI^8)YIo@syvga`xiD2f z`Y>KJ5bJ;2x*--tZR>`Zd8ma$EdJfYbujfNo4WYdf!B;+yr4wAVj#mlwyhjui4Sj> zSoh<~p<9+=78ut^?4ixnJzIA_&?!dZ%Ug)if>4L7wpZqYA zu9qxFr!HC6MPI6M?^M3=lAY>XFLNN*>DyX;{JBkV9Hgyrx2N~5SDBIR^bLv8o{;V0 zyB#ZnkbJL^yjR@mB^TdnIj07*2dqLoi`pN3%}R6ZC%SH5iItL{sJzbqiGFq1g0-2a zFc<4^zs!cQLp2O8vdF5qX%t*yktJGKap7|_eD1-zS|SS=$z`3F z>Y_5GvX(vc8oYf8Nqi+&OK|)@(%F{XHrpNDj0NO2Y$5C^X&ar1j-zdXEMJUP%NOJ9 z%NMr(m;DoN&G{tQelWB3?VM(B>%olLl0^Mx+-YqjxlJ@xTR-8i-zezXgt zHabXG{Rz)CUvf#jzz5q<<<7;qc+Lw|9$0ctC_W0G$Bi!z$FFdQTL0Rm$8TS8aG$R@ z*EgtYpKlQ6HVJ>IwH^Okx*~7ky|TXYv*zX+RMN5owPgoBY0qpf)l};nnV-Iddwxc( zKK9~KZO5J;?%Cec9(h05dLVOgb$$Hu%uC{R7vty3^D`l5W^LI{9pCEUmu=Nwt_~h- zt3J3o*wa?sv)bL3iFuU=@#24rC)nElMPzrlX&b+`sX5Vu9@UfaEt$Dl=TCM2-TIHA zby%H=J{6AsIU3nY{b%waB@V9#H*pkb{oK1G59&Qn*YVfj2)Y|*$T`c>r-Fm=(caqV zr@_|k#lgzggVAl*zEZh+$$92W%xHVq{Y=>wsQK&I!0>P=m8ZF*FYf_?!@dzL8A9dg z2a4>@3_{mtZ2tOSYmYZlV!|L-C_csdJRvr1YcTqHu)Qa<^{*`6&r!Ueuy{XV@%Ah` zDj2`KC)Bf9hps>C2{&zra=pBo6PvR-YulQ$v{F+{%!b+~X0y}fPyPBDsCA4!BN-IS zKzG^se|!FLZaxAk^YCFxQi~sU=(^-0EEHElN_a{K>{#^Xs4(16oab<^VYAu|D^5d< zRe6H%BbXWDVEDSptJ=*3Zq;Tpfm^jjCUC809<~!f<4XYRh&1}G_2FnX)CYD&@=?|! zq#Y>9+`d9rR!*KLHzTtsJKtMS2sQkfzN}nVUQtfAH>1FlpXbWSa2IA~d$V#2d_~y> zIqoc9q1Tg_Tja{j&&VmvbGy8`z9LU{L4HP7W|r4on3w6vDDoBLWV>?ni}F1M*@eEm zj7+cFm6MeVe;I{d7vgdk(0z6EGTm2X5{+{va>SsUAcvsMLBsskK3D@ zU*O8j&dKt4i+t`pi0Xr+xdmB;nK;~8l;O!N%F505x(f61a|$xtK2K3DQtiVRVTA?R zd7eyfA%x7y%!Rlao@}2hzW`Z-`0_GxJcZe={47rfG8Z{kl$l>pn3I>CpXbYR6%={1 zGcqA#p~qdAkqc{=x4@I-%gisz%quK#XSnj2bzWqDewI7eTj+BYc``B!zzDGm3f-Bx zt_)^kRyN8ZBR{jyTj0w=!MTwkMY-NQp9{HBknbsU=VoVSc=O#Tag>k?2PHlEMc&LD zBsDkNSD00hm63k9QuEK1jA}7mL zn4j&=$jmEXW+3%0mN4Y?`ZBY@<<7|SAl%%XOkch?yU6RwcV}iH>x&?Fc8(86EVJ@5 zd_@J>?)<{sOm7}?w-CDFeVM2gs3HZq`ED=rJts382|~py%y)UR+!?tj&1_#DtX=M` z!aQ$2vJENncr%csTwh*h4uUUo=ev-p`JOCP5MM!VUUsHCzaS&G(B<=Fd5iK;C)|12 zULS%i$jr*kDa?Qt`fQ)Oh;@`zKP$%zNiwpE^4)nJ$bup)@a7gGk0=ka(CyADD#*)0 zULgN-GksonLB0#cl$BTL@gnmx^0PBNXf|jkUL-Wv?L*zo_GGzoa*GPx`Mj_IX0B`T zi8G(@oD@I*mAgmpJ#A~r!QbEIdN=2Y#4WFG{%759aD-BuC-Ewh?i{~dd*E&LG!^bqg)X>X4A?|Xlr&dGUhvmaBI$O*>UUU67tvK z-~TtwZ{4$Z2>zSE-}w*C&-$Z`;dk7N!tj5O|9xM9|5fl8zpKM%{ZYn*pXR%e0_1V$ z0QrX?unWL{$9p<_sed>xQdE3PMm1WqHss?O<__Vj68m&~{Ftgs_@q9j4evql?H4|& zmudN41z(GNMzhCaNVZBV@uhrkTFkGH#-Y5Dy zd-0{o|J%UdCHg!2tfxq(;o&T)g$|U7hb@O3VVl<(^zX5qJ|1u!I;}{2oDXkWI zq|n2J9x8OH&_@cL4MdZ>@Nu*&`~~jB55F_`w&1sbXwre>g#LFh<1z3ZAo(s490?@f zK?q0tqtQ>GiIujXKcbwc04aAa5Udx*&=1nS5lH%6Al<(q^pDYx(tQz-?xz8n&X>_Y z)4mJkgum>B;99{J!A8L9)f3vI?1)BzQ~ z8L#-!E9Ei$|2K_)6fVux_*e2O%H>)tv>C6z6xxhG{{)TTEb|u!eLNiP?tHe>t_Iv* z*0c!9?ReIPAAVlLWJrPCA@>)RomEIE>1?Fzqm^%>MdNqQTa=0J-X zr4xl_O1OoK7B6I?z@*Yaew2oU2IoGd@J}(W$d&nPii_gEVcWh}s zrE*z%#|+JB3IENoHPCa@ce6pm_|b>Z?;7kUG}5Bix#>ge9W&wFO207XzEw>*4kg2~ zzjMz1JngeZ0;np`=aQ*rT+#@Mlcv9O&TA#S-Qp!7;h7MSt#iyXk>e_&qVhTZx)>R! zsJs?n7!m#7QuO02jtTguF?|K!I4C2>{;z7Rb5WBgLE}-FH&vKRcdXk#!rMJV{0Nvz zZ;r!<^LqV*m&foUc(Z-Fmr<)5b&O5Qecx(dWyL?*Aap4D!wFO;z#ZBz>+}^X^|5nt z9!amfL3<5WDU}|O!N>>S zO+18^+8|bHcZD`VT(weLcf$7OF`;;TCoJMq4~FC4!Lsbz2W1^NKFJ+w+7)VgW%XTy zDP7I#yGn^|m-f`O4Z>P!M(Y+_QnKw}*gXZ4kx%}a4|xolTWbVp6u3!iLuH50|16{=Xr z^`z28h?){qz8?8=@=75rP>xStr8AWU<4`FOia$gt9%(_Y*xW*~hbF*UDxB6npfz38 zjf|+P0QTc50M;qnVyEIZ`>O_vF|%xRnYSbxlsX`*2q2n|8EF zxDO|!0@NhxZ-3XwP=U&ESRmFZqwWZPsHrroyc?OPE-%sQ-JlwR3aFZ;zCx|jPwg>d zSz5Uus2VO>>g%nzj4iivSaC?R#SILM?ImQHj=*AwLuDP5V#FS@uAT|Sbh2W&-okP7 z&q>xzER)ep7NG*BUjIWy9u`Y^n)`0Bg#AD${zLkdt8buJiKU{FBdOJw-aLakafnNA zd@Fyi8K4uT_l-BcmEW^mp>QPis+;Br4p}shbY61 znB@Cb{+yLs-&eEuhj?bBRtQi*QH0KW(~WT07{Skm?f6j{ptSC(+iH~K^>pNq(p$j~ zmbIswXn(u$gaS4_+InOzx!)t<999C)fK4s}jpX5D=H% z#NxaK2Uqw+hHhj?{oc{DtkwjghJo&tNE^R@)?!{wF(1Ou-s34&eDK#Tr&)CREuB2t z=?gRl?Q12S_>!@AujvSI>>zm#!r8t#Uf1(z&5OAIO5J;-UQ9xUfg(-mqEC zm6mH=ECaceiZE)*(_1%MuTS%(QUkqGHL1d=`ASrSq}Gz<5hRLw_cz@DdG*yd?<&br zb;8?o{CL)#*WNE!nc{;vx@qP)aNF=UepK*#cfq}{JU3O3gUEF78QSQ&p@w^VwN#p@ zu3?0|?ziDZQpx*m_-QPJ`W|2-mfN)`IwZ&aHnj+g7u={@X!u44Z!767+vbftO5<6q zpF3?Bn!eP=4+V;D9b6-W1dn%9N>XYW5ji(KT zM&900pkAXXT6J;cG;8!?jkUEzB_>~C%uN3OjJs;4A${rAnHynG!|%e=t&^JX{CKZH zI`@Pu*zv-*bngAFlUB*P73EXLtV5+)$E*XxBH^dJDg1rhQjy3ZBB;Tq2o?$Ucs2j0K=OA31Nhqs zgb8qu`&8gBfm{b$17tXN3QiLHu+XCfj}`kPgw7ZIG)L==cnvrN;cWwAU|DcC=g4Ff!_eRj>zwV>3=%#6yy{2jGPR50+9J11Y)T%z;TxONj)P&fJXqC zug@c~%-25vPXzM5hm(N!08az*{spX=1#SeM0h|ZK`sRhxfhhU_75|~g0$&4CZuaoV z`oIAsj`(-MJAkN~ft5f%{Er2~1kS+^<@WN#&~Ua)83;SQ+d+rGX?K6$;r}s*`&I}22S<2S4*v|> z9zNK&mT zJ9~Up4!XoaPjZC!nS(ypA^&$B@~w98#~k68IozLd_#f_|Ih5niGGBN2pXH#(Ipka5 z2(QZ#-bW64nIpX3cN-k$JtsAx)N4-WPrnA&T;OhyrA>3FHA1fu5BM$062UAHMnHtFOOT3@fh~Zd-qEm_C12^Bk?Sgq_E~s<)&BgEEcLTViO8 z$!h%_a}#9-y8d46*Zf9rNgF0F)Y*i|Pm6ZZzYVxvsCm}n>GR6ZRTfS?BNP0ZPr#Kp z(OM^04jAiG4A$Qdd5_2e-Jp9+G5xLQ@Ahl_^TeGQShpCCQ>${$*Sx9X3+pZ{)A{!>LcArH;*tv9 zz~Kjf1R97DhO8js%xpfn6=y6Hrw^eCR((IkbB&CD(gd@K5N$6{tT=EwGAiOvF6+V) zR|Yhn5yJOR^sT>kS#jVD@*UNS&l8FTAqp9{Sm#)ozE7i{Z)EW*Ny5<_ET5{yj+;=Q z_2TA=&lz{~X)8WI3+P+*M{t{ioRS=<(H5J%)J4{(E8g~*H6i^0jE<6CRRat~JwuGo z6uvs`E}zYOMPGZ@Ai@=&Gh2MCetjs>|9=p!SCTl>*F~Xk`7pJD%XO*ib)ndDRI8rm zY+dk&_znkp;zQAW;poAXv$&l&KYbr#1Fj`*ul)%DBws^_Z3^R1`HvgWu@3Z;P`v(* za5SMxK-R!_u()H>?!&_1TAaTO0DuYb0D7tXzNk!|&{N40%JJzRN|yX^`nDc+ocof&M)eCChf9{BA# z5ZolQ(GS0xif-wyFi%RM{8rXL*Eb9B;<9NaI5zU+!v;1P75v^7kQb^J zJkG>3p!iMdxH~t(_~cy>CR&{|!=@C2--;Ctn-JrS5b8ShBX~b_>(;5xH8p+C-}H~> zI|1kh!Y(8()X-Zurc}&g zMC2I@-;rabN^RT75{Djcvsw;cUxSb}5)PWu4{^$Ux4QnMm?a_~+V;M;UVRl?jFa~g z^j3u!ymmVVuMu?+6otu3sN&X)5HB2S9^zM&a{zk@1K4g;CgnY90MjXpjg)w}o2?&P zwb<_4s zXwS1?%2W9(s?hCP;?4X3Uon|-M$I>EJ`}srk51DRpw3;)EK~-k1&~$4t$+;(_Rx9s!Z%`N}@|5934H(>KepOwl9uB87)Md zn{I(@8-w`SFvrBMFXO-mLFO~})bTj^-K)yO4?|I0d|@u0v${d6M>OLXzER)6ZH@9o z>y1NQ&4orV)l)_5A4J<-kD4}2RR{EG!FX*>`~KtG_mtMgXJ+LD+rP*}K0S(Q)gx_? zw8m_yV)qWdOmmd_yq!CgJvG*#rSqe9)w{m$y@a%eo1R9)e1w%Z)Vxj%%z%H7u;F*bf>1q$}2 z9DFMGIk>L93_tZ{?Vc9SeCS&^ejk3mKHE3K z)ybcZ4}HrogVl1LjldUl+q=|PbT8DQ*RA}Z`M9z1$>lv(f42JQwqu8ddbWjno(xs) zxM`oM2pk_wEnu6`>0kBAdWi2@dJHZZ!S{vwzLMCK2XSM_`k-7)fl&e_e`Ro5vh*GE zu|C=(s`9BE22MoF9LDZ~a~eE+(p;?rI0#9M)r_x2I=E>%nZ_t-k{&rrdfuHvCT^_l};or5oPmTNS6P zv$b1;=yo*pE;RJrtU7WzS8Q6>rZNm!Dglph?v5LJ?)jtS~)5_@;RZ*Y4yBV3Of?%MlmN?>%h+L^iF(Jp>{ zC(cH6;OjqjMM^-3)H#p@G)KVMQ6tqPC86CDOmZR<5WA{CX_C}@HnMKLJ#Hjvy$qL+ z$Yey_ymLTj9Wnq%KCDmCP!}#oK|X>1EEFfNi8xAd4bY6=tS|k&5B%?(&u|8f*7YyV zXZZfBuMRX*4ue+LiO%#jWR`jNP3@0WeyT>q<~PWA2B8MUj%WuPkDmXe%x7i3q5P}K zhMqC>G1-VLQ8o9wC^ydO&NSZC^n)){jv0qO55eK@9_6UJAk<9LdLZlsQ&Cm-NQqb8 zs+e{4?YL3`fjx5Bay z(*7*kb5nkfZuP!z+>InQAot(=_-^l7MQb=ys@xulf8H3#DS zUcIsaJCHf-W)ccy_cPasS)R0_Vt2LY^-;6 z!JsxTKYMPCTdUtJ;@(Qe* z1|-GD^Qh>Q9C}6Z2{&Ghach?f0u_3)c?~s@*pdup!#2aT6}|4%y%hEE4eV2I;>)6* zjooh&-2E*$ZnYfQm2TiCH7YCZI__umon{%h)s zHMVUv3ASo(ZO5UedygT%b-hvD&EHjOJHI_r*gw?FWu;-&}=y zblSaE5ysEC5bLjxaIaC)UDxzEU&i^RwHCU*>D^1>!%s&=su9&oC>d0!Bqig$%wA1m z)SRP6-qPS(68Ac0X7}N`)bG88Qb+e2R8!V^-}o2HU%{lZK6=2sT-4v2GNHw7fojgG zIN0@vqB}xmFNE9&@vdIE@46#G@#ad*Stn;;&iVqluAPA&HD{e#4C~5$2#(F0^W*n% zpcw1F3$xC|k%QFrIZRzI;r#W8l=xy9hx+Prsa`SQFcwMD! z{yM1b$dXXcmQc?Vb(Nprv`?p7OcPcZJBr=r#$H0yS#@^>Ymv}B*P+G@#Q?>{Mzb3WeRd`nHhTMuSN z^0&LWZm#C8j`_OjKlD4dHQsEmeHxQH)I;^Ejo0icXsqq3h+1!cy4bf$y*cxS))+2I z#S5bK#?2+BrmyM6*7c5&<9jT8nR=q~n0!JZ*cO^rva1cQ_<}Py->NkrOd-iSU&RsuGcpz;~vv`w~N8`TS*DSdwW z{vP$weB7a@Ip}rO9Pnny$2PLmWUX4V^sQ=vy|F?aR`Q|L@T!TkTr3l7KWP@;b@_g0 z8VJiZ9E{KGej&TZXb<3P?&otttnQq&=*VOklt2{aX=Ct3G=%pqy$pCcxoT)@H zsvxo*fZlnb%X5g8PLxlrRh}nfuc{Medd1#fqfY2DJ=M;7v?)`(HBQ5H9eFS1I+zxS z^{$jyVZoDrb}>v3p+COhg`rT?++l_xgKCn;yU5KeCYGcliEtD%a9y@WX0^iWw8BtF zU7XNzX1}I;EaK8RhLtRⅈ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


REgo|?LFkIp) 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 DDuNH? literal 0 HcmV?d00001 diff --git a/Sources/OpenSSL/osx/libssl-x86_64.a b/Sources/OpenSSL/osx/libssl-x86_64.a new file mode 100644 index 0000000000000000000000000000000000000000..fb029081ea768e093c42bbbd0a77dcf93a1b4f8a GIT binary patch literal 594656 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/openssl.pc b/openssl.pc new file mode 100644 index 0000000000..025e5ed20c --- /dev/null +++ b/openssl.pc @@ -0,0 +1,5 @@ +Name: PerfectLib +Description: Perfect support library +Version: 0.13.0 +Libs: -lcurl +Cflags: break \ No newline at end of file