| /* ==================================================================== |
| * 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 OPENSSL_HEADER_BASE_H |
| #define OPENSSL_HEADER_BASE_H |
| |
| |
| /* This file should be the first included by all BoringSSL headers. */ |
| |
| #include <stddef.h> |
| #include <stdint.h> |
| #include <sys/types.h> |
| |
| #include <openssl/opensslconf.h> |
| |
| #if defined(BORINGSSL_PREFIX) |
| #include <boringssl_prefix_symbols.h> |
| #endif |
| |
| #if defined(__cplusplus) |
| #include <memory> |
| |
| extern "C" { |
| #endif |
| |
| |
| #if defined(__x86_64) || defined(_M_AMD64) || defined(_M_X64) |
| #define OPENSSL_64_BIT |
| #define OPENSSL_X86_64 |
| #elif defined(__x86) || defined(__i386) || defined(__i386__) || defined(_M_IX86) |
| #define OPENSSL_32_BIT |
| #define OPENSSL_X86 |
| #elif defined(__aarch64__) |
| #define OPENSSL_64_BIT |
| #define OPENSSL_AARCH64 |
| #elif defined(__arm) || defined(__arm__) || defined(_M_ARM) |
| #define OPENSSL_32_BIT |
| #define OPENSSL_ARM |
| #elif defined(__PPC64__) || defined(__powerpc64__) |
| #define OPENSSL_64_BIT |
| #elif defined(__mips__) && !defined(__LP64__) |
| #define OPENSSL_32_BIT |
| #define OPENSSL_MIPS |
| #elif defined(__mips__) && defined(__LP64__) |
| #define OPENSSL_64_BIT |
| #define OPENSSL_MIPS64 |
| #elif defined(__pnacl__) |
| #define OPENSSL_32_BIT |
| #define OPENSSL_PNACL |
| #else |
| #error "Unknown target CPU" |
| #endif |
| |
| #if defined(__APPLE__) |
| #define OPENSSL_APPLE |
| #endif |
| |
| #if defined(_WIN32) |
| #define OPENSSL_WINDOWS |
| #endif |
| |
| #if defined(TRUSTY) |
| #define OPENSSL_TRUSTY |
| #define OPENSSL_NO_THREADS |
| #endif |
| |
| #define OPENSSL_IS_BORINGSSL |
| #define BORINGSSL_201512 |
| #define BORINGSSL_201603 |
| #define OPENSSL_VERSION_NUMBER 0x10002000 |
| #define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER |
| |
| /* BORINGSSL_API_VERSION is a positive integer that increments as BoringSSL |
| * changes over time. The value itself is not meaningful. It will be incremented |
| * whenever is convenient to coordinate an API change with consumers. This will |
| * not denote any special point in development. |
| * |
| * A consumer may use this symbol in the preprocessor to temporarily build |
| * against multiple revisions of BoringSSL at the same time. It is not |
| * recommended to do so for longer than is necessary. */ |
| #define BORINGSSL_API_VERSION 1 |
| |
| #if defined(BORINGSSL_SHARED_LIBRARY) |
| |
| #if defined(OPENSSL_WINDOWS) |
| |
| #if defined(BORINGSSL_IMPLEMENTATION) |
| #define OPENSSL_EXPORT __declspec(dllexport) |
| #else |
| #define OPENSSL_EXPORT __declspec(dllimport) |
| #endif |
| |
| #else /* defined(OPENSSL_WINDOWS) */ |
| |
| #if defined(BORINGSSL_IMPLEMENTATION) |
| #define OPENSSL_EXPORT __attribute__((visibility("default"))) |
| #else |
| #define OPENSSL_EXPORT |
| #endif |
| |
| #endif /* defined(OPENSSL_WINDOWS) */ |
| |
| #else /* defined(BORINGSSL_SHARED_LIBRARY) */ |
| |
| #define OPENSSL_EXPORT |
| |
| #endif /* defined(BORINGSSL_SHARED_LIBRARY) */ |
| |
| |
| #if defined(__GNUC__) |
| #define OPENSSL_PRINTF_FORMAT_FUNC(string_index, first_to_check) \ |
| __attribute__((__format__(__printf__, string_index, first_to_check))) |
| #else |
| #define OPENSSL_PRINTF_FORMAT_FUNC(string_index, first_to_check) |
| #endif |
| |
| /* OPENSSL_MSVC_PRAGMA emits a pragma on MSVC and nothing on other compilers. */ |
| #if defined(_MSC_VER) |
| #define OPENSSL_MSVC_PRAGMA(arg) __pragma(arg) |
| #else |
| #define OPENSSL_MSVC_PRAGMA(arg) |
| #endif |
| |
| |
| /* CRYPTO_THREADID is a dummy value. */ |
| typedef int CRYPTO_THREADID; |
| |
| typedef int ASN1_BOOLEAN; |
| typedef int ASN1_NULL; |
| typedef struct ASN1_ITEM_st ASN1_ITEM; |
| typedef struct asn1_object_st ASN1_OBJECT; |
| typedef struct asn1_pctx_st ASN1_PCTX; |
| typedef struct asn1_string_st ASN1_BIT_STRING; |
| typedef struct asn1_string_st ASN1_BMPSTRING; |
| typedef struct asn1_string_st ASN1_ENUMERATED; |
| typedef struct asn1_string_st ASN1_GENERALIZEDTIME; |
| typedef struct asn1_string_st ASN1_GENERALSTRING; |
| typedef struct asn1_string_st ASN1_IA5STRING; |
| typedef struct asn1_string_st ASN1_INTEGER; |
| typedef struct asn1_string_st ASN1_OCTET_STRING; |
| typedef struct asn1_string_st ASN1_PRINTABLESTRING; |
| typedef struct asn1_string_st ASN1_STRING; |
| typedef struct asn1_string_st ASN1_T61STRING; |
| typedef struct asn1_string_st ASN1_TIME; |
| typedef struct asn1_string_st ASN1_UNIVERSALSTRING; |
| typedef struct asn1_string_st ASN1_UTCTIME; |
| typedef struct asn1_string_st ASN1_UTF8STRING; |
| typedef struct asn1_string_st ASN1_VISIBLESTRING; |
| |
| 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; |
| typedef struct Netscape_certificate_sequence NETSCAPE_CERT_SEQUENCE; |
| typedef struct Netscape_spkac_st NETSCAPE_SPKAC; |
| typedef struct Netscape_spki_st NETSCAPE_SPKI; |
| typedef struct PBE2PARAM_st PBE2PARAM; |
| typedef struct PBEPARAM_st PBEPARAM; |
| typedef struct PBKDF2PARAM_st PBKDF2PARAM; |
| typedef struct RIPEMD160state_st RIPEMD160_CTX; |
| typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; |
| typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; |
| typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; |
| typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; |
| typedef struct X509_algor_st X509_ALGOR; |
| typedef struct X509_crl_info_st X509_CRL_INFO; |
| typedef struct X509_crl_st X509_CRL; |
| typedef struct X509_extension_st X509_EXTENSION; |
| typedef struct X509_info_st X509_INFO; |
| typedef struct X509_name_entry_st X509_NAME_ENTRY; |
| typedef struct X509_name_st X509_NAME; |
| typedef struct X509_objects_st X509_OBJECTS; |
| typedef struct X509_pubkey_st X509_PUBKEY; |
| typedef struct X509_req_info_st X509_REQ_INFO; |
| typedef struct X509_req_st X509_REQ; |
| typedef struct X509_sig_st X509_SIG; |
| typedef struct X509_val_st X509_VAL; |
| typedef struct bignum_ctx BN_CTX; |
| typedef struct bignum_st BIGNUM; |
| typedef struct bio_method_st BIO_METHOD; |
| typedef struct bio_st BIO; |
| typedef struct bn_gencb_st BN_GENCB; |
| typedef struct bn_mont_ctx_st BN_MONT_CTX; |
| typedef struct buf_mem_st BUF_MEM; |
| typedef struct cbb_st CBB; |
| typedef struct cbs_st CBS; |
| typedef struct cmac_ctx_st CMAC_CTX; |
| typedef struct conf_st CONF; |
| typedef struct conf_value_st CONF_VALUE; |
| typedef struct dh_st DH; |
| typedef struct dsa_st DSA; |
| typedef struct ec_key_st EC_KEY; |
| typedef struct ecdsa_method_st ECDSA_METHOD; |
| typedef struct ecdsa_sig_st ECDSA_SIG; |
| typedef struct engine_st ENGINE; |
| typedef struct env_md_ctx_st EVP_MD_CTX; |
| typedef struct env_md_st EVP_MD; |
| typedef struct evp_aead_st EVP_AEAD; |
| typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; |
| typedef struct evp_cipher_st EVP_CIPHER; |
| typedef struct evp_encode_ctx_st EVP_ENCODE_CTX; |
| typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; |
| typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; |
| typedef struct evp_pkey_method_st EVP_PKEY_METHOD; |
| typedef struct evp_pkey_st EVP_PKEY; |
| typedef struct hmac_ctx_st HMAC_CTX; |
| typedef struct md4_state_st MD4_CTX; |
| typedef struct md5_state_st MD5_CTX; |
| typedef struct newhope_poly_st NEWHOPE_POLY; |
| typedef struct pkcs12_st PKCS12; |
| typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; |
| typedef struct private_key_st X509_PKEY; |
| typedef struct rand_meth_st RAND_METHOD; |
| typedef struct rc4_key_st RC4_KEY; |
| typedef struct rsa_meth_st RSA_METHOD; |
| typedef struct rsa_st RSA; |
| typedef struct sha256_state_st SHA256_CTX; |
| typedef struct sha512_state_st SHA512_CTX; |
| typedef struct sha_state_st SHA_CTX; |
| typedef struct spake2_ctx_st SPAKE2_CTX; |
| typedef struct srtp_protection_profile_st SRTP_PROTECTION_PROFILE; |
| typedef struct ssl_cipher_st SSL_CIPHER; |
| typedef struct ssl_ctx_st SSL_CTX; |
| typedef struct ssl_custom_extension SSL_CUSTOM_EXTENSION; |
| typedef struct ssl_method_st SSL_METHOD; |
| typedef struct ssl_session_st SSL_SESSION; |
| typedef struct ssl_st SSL; |
| typedef struct st_ERR_FNS ERR_FNS; |
| typedef struct v3_ext_ctx X509V3_CTX; |
| typedef struct x509_attributes_st X509_ATTRIBUTE; |
| typedef struct x509_cert_aux_st X509_CERT_AUX; |
| typedef struct x509_cert_pair_st X509_CERT_PAIR; |
| typedef struct x509_cinf_st X509_CINF; |
| typedef struct x509_crl_method_st X509_CRL_METHOD; |
| typedef struct x509_revoked_st X509_REVOKED; |
| typedef struct x509_st X509; |
| typedef struct x509_store_ctx_st X509_STORE_CTX; |
| typedef struct x509_store_st X509_STORE; |
| typedef struct x509_trust_st X509_TRUST; |
| |
| typedef void *OPENSSL_BLOCK; |
| |
| |
| #if defined(__cplusplus) |
| } /* extern C */ |
| |
| namespace bssl { |
| |
| template<typename T, void (*func)(T*)> |
| struct Deleter { |
| void operator()(T *obj) { |
| func(obj); |
| } |
| }; |
| |
| template<typename T, void (*func)(T*)> |
| using ScopedType = std::unique_ptr<T, Deleter<T, func>>; |
| |
| template<typename T, typename CleanupRet, void (*init_func)(T*), |
| CleanupRet (*cleanup_func)(T*)> |
| class ScopedContext { |
| public: |
| ScopedContext() { |
| init_func(&ctx_); |
| } |
| ~ScopedContext() { |
| cleanup_func(&ctx_); |
| } |
| |
| T *get() { return &ctx_; } |
| const T *get() const { return &ctx_; } |
| |
| void Reset() { |
| cleanup_func(&ctx_); |
| init_func(&ctx_); |
| } |
| |
| private: |
| T ctx_; |
| }; |
| |
| } // namespace bssl |
| |
| #endif |
| |
| #endif /* OPENSSL_HEADER_BASE_H */ |