summaryrefslogtreecommitdiff
path: root/openvpn/src/openvpn/ssl_backend.h
diff options
context:
space:
mode:
Diffstat (limited to 'openvpn/src/openvpn/ssl_backend.h')
-rw-r--r--openvpn/src/openvpn/ssl_backend.h469
1 files changed, 0 insertions, 469 deletions
diff --git a/openvpn/src/openvpn/ssl_backend.h b/openvpn/src/openvpn/ssl_backend.h
deleted file mode 100644
index a6fc3bdb..00000000
--- a/openvpn/src/openvpn/ssl_backend.h
+++ /dev/null
@@ -1,469 +0,0 @@
-/*
- * OpenVPN -- An application to securely tunnel IP networks
- * over a single TCP/UDP port, with support for SSL/TLS-based
- * session authentication and key exchange,
- * packet encryption, packet authentication, and
- * packet compression.
- *
- * Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
- * Copyright (C) 2010 Fox Crypto B.V. <openvpn@fox-it.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program (see the file COPYING included with this
- * distribution); if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-/**
- * @file Control Channel SSL library backend module
- */
-
-
-#ifndef SSL_BACKEND_H_
-#define SSL_BACKEND_H_
-
-#include "buffer.h"
-
-#ifdef ENABLE_CRYPTO_OPENSSL
-#include "ssl_openssl.h"
-#include "ssl_verify_openssl.h"
-#define SSLAPI SSLAPI_OPENSSL
-#endif
-#ifdef ENABLE_CRYPTO_POLARSSL
-#include "ssl_polarssl.h"
-#include "ssl_verify_polarssl.h"
-#define SSLAPI SSLAPI_POLARSSL
-#endif
-
-/* Ensure that SSLAPI got a sane value if SSL is disabled or unknown */
-#ifndef SSLAPI
-#define SSLAPI SSLAPI_NONE
-#endif
-
-/**
- * prototype for struct tls_session from ssl_common.h
- */
-struct tls_session;
-
-/**
- * Get a tls_cipher_name_pair containing OpenSSL and IANA names for supplied TLS cipher name
- *
- * @param cipher_name Can be either OpenSSL or IANA cipher name
- * @return tls_cipher_name_pair* if found, NULL otherwise
- */
-typedef struct { const char *openssl_name; const char *iana_name; } tls_cipher_name_pair;
-const tls_cipher_name_pair *tls_get_cipher_name_pair (const char *cipher_name, size_t len);
-
-/*
- *
- * Functions implemented in ssl.c for use by the backend SSL library
- *
- */
-
-/**
- * Callback to retrieve the user's password
- *
- * @param buf Buffer to return the password in
- * @param size Size of the buffer
- * @param rwflag Unused, needed for OpenSSL compatibility
- * @param u Unused, needed for OpenSSL compatibility
- */
-int pem_password_callback (char *buf, int size, int rwflag, void *u);
-
-/*
- *
- * Functions used in ssl.c which must be implemented by the backend SSL library
- *
- */
-
-/**
- * Perform any static initialisation necessary by the library.
- * Called on OpenVPN initialisation
- */
-void tls_init_lib();
-
-/**
- * Free any global SSL library-specific data structures.
- */
-void tls_free_lib();
-/**
- * Clear the underlying SSL library's error state.
- */
-void tls_clear_error();
-
-/**
- * Parse a TLS version specifier
- *
- * @param vstr The TLS version string
- * @param extra An optional extra parameter, may be NULL
- *
- * @return One of the TLS_VER_x constants or TLS_VER_BAD
- * if a parse error should be flagged.
- */
-#define TLS_VER_BAD -1
-#define TLS_VER_1_0 0 /* default */
-#define TLS_VER_1_1 1
-#define TLS_VER_1_2 2
-int tls_version_min_parse(const char *vstr, const char *extra);
-
-/**
- * Return the maximum TLS version (as a TLS_VER_x constant)
- * supported by current SSL implementation
- *
- * @return One of the TLS_VER_x constants (but not TLS_VER_BAD).
- */
-int tls_version_max(void);
-
-/**
- * Initialise a library-specific TLS context for a server.
- *
- * @param ctx TLS context to initialise
- */
-void tls_ctx_server_new(struct tls_root_ctx *ctx);
-
-/**
- * Initialises a library-specific TLS context for a client.
- *
- * @param ctx TLS context to initialise
- */
-void tls_ctx_client_new(struct tls_root_ctx *ctx);
-
-/**
- * Frees the library-specific TLSv1 context
- *
- * @param ctx TLS context to free
- */
-void tls_ctx_free(struct tls_root_ctx *ctx);
-
-/**
- * Checks whether the given TLS context is initialised
- *
- * @param ctx TLS context to check
- *
- * @return true if the context is initialised, false if not.
- */
-bool tls_ctx_initialised(struct tls_root_ctx *ctx);
-
-/**
- * Set any library specific options.
- *
- * Examples include disabling session caching, the password callback to use,
- * and session verification parameters.
- *
- * @param ctx TLS context to set options on
- * @param ssl_flags SSL flags to set
- */
-void tls_ctx_set_options (struct tls_root_ctx *ctx, unsigned int ssl_flags);
-
-/**
- * Restrict the list of ciphers that can be used within the TLS context.
- *
- * @param ctx TLS context to restrict, must be valid.
- * @param ciphers String containing : delimited cipher names, or NULL to use
- * sane defaults.
- */
-void tls_ctx_restrict_ciphers(struct tls_root_ctx *ctx, const char *ciphers);
-
-/**
- * Load Diffie Hellman Parameters, and load them into the library-specific
- * TLS context.
- *
- * @param ctx TLS context to use
- * @param dh_file The file name to load the parameters from, or
- * "[[INLINE]]" in the case of inline files.
- * @param dh_file_inline A string containing the parameters
- */
-void tls_ctx_load_dh_params(struct tls_root_ctx *ctx, const char *dh_file,
- const char *dh_file_inline);
-
-/**
- * Load PKCS #12 file for key, cert and (optionally) CA certs, and add to
- * library-specific TLS context.
- *
- * @param ctx TLS context to use
- * @param pkcs12_file The file name to load the information from, or
- * "[[INLINE]]" in the case of inline files.
- * @param pkcs12_file_inline A string containing the information
- *
- * @return 1 if an error occurred, 0 if parsing was
- * successful.
- */
-int tls_ctx_load_pkcs12(struct tls_root_ctx *ctx, const char *pkcs12_file,
- const char *pkcs12_file_inline, bool load_ca_file
- );
-
-/**
- * Use Windows cryptoapi for key and cert, and add to library-specific TLS
- * context.
- *
- * @param ctx TLS context to use
- * @param crypto_api_cert String representing the certificate to load.
- */
-#ifdef ENABLE_CRYPTOAPI
-void tls_ctx_load_cryptoapi(struct tls_root_ctx *ctx, const char *cryptoapi_cert);
-#endif /* WIN32 */
-
-/**
- * Load certificate file into the given TLS context. If the given certificate
- * file contains a certificate chain, load the whole chain.
- *
- * @param ctx TLS context to use
- * @param cert_file The file name to load the certificate from, or
- * "[[INLINE]]" in the case of inline files.
- * @param cert_file_inline A string containing the certificate
- */
-void tls_ctx_load_cert_file (struct tls_root_ctx *ctx, const char *cert_file,
- const char *cert_file_inline);
-
-/**
- * Load private key file into the given TLS context.
- *
- * @param ctx TLS context to use
- * @param priv_key_file The file name to load the private key from, or
- * "[[INLINE]]" in the case of inline files.
- * @param priv_key_file_inline A string containing the private key
- *
- * @return 1 if an error occurred, 0 if parsing was
- * successful.
- */
-int tls_ctx_load_priv_file (struct tls_root_ctx *ctx, const char *priv_key_file,
- const char *priv_key_file_inline
- );
-
-#ifdef MANAGMENT_EXTERNAL_KEY
-
-/**
- * Tell the management interface to load the given certificate and the external
- * private key matching the given certificate.
- *
- * @param ctx TLS context to use
- * @param cert_file The file name to load the certificate from, or
- * "[[INLINE]]" in the case of inline files.
- * @param cert_file_inline A string containing the certificate
- *
- * @return 1 if an error occurred, 0 if parsing was
- * successful.
- */
-int tls_ctx_use_external_private_key (struct tls_root_ctx *ctx,
- const char *cert_file, const char *cert_file_inline);
-#endif
-
-
-/**
- * Load certificate authority certificates from the given file or path.
- *
- * Note that not all SSL libraries support loading from a path.
- *
- * @param ctx TLS context to use
- * @param ca_file The file name to load the CAs from, or
- * "[[INLINE]]" in the case of inline files.
- * @param ca_file_inline A string containing the CAs
- * @param ca_path The path to load the CAs from
- */
-void tls_ctx_load_ca (struct tls_root_ctx *ctx, const char *ca_file,
- const char *ca_file_inline, const char *ca_path, bool tls_server
- );
-
-/**
- * Load extra certificate authority certificates from the given file or path.
- * These Load extra certificates that are part of our own certificate
- * chain but shouldn't be included in the verify chain.
- *
- *
- * @param ctx TLS context to use
- * @param extra_certs_file The file name to load the certs from, or
- * "[[INLINE]]" in the case of inline files.
- * @param extra_certs_file_inline A string containing the certs
- */
-void tls_ctx_load_extra_certs (struct tls_root_ctx *ctx, const char *extra_certs_file,
- const char *extra_certs_file_inline
- );
-
-#ifdef ENABLE_CRYPTO_POLARSSL
-/**
- * Add a personalisation string to the PolarSSL RNG, based on the certificate
- * loaded into the given context.
- *
- * @param ctx TLS context to use
- */
-void tls_ctx_personalise_random(struct tls_root_ctx *ctx);
-#endif
-
-/* **************************************
- *
- * Key-state specific functions
- *
- ***************************************/
-
-/**
- * Initialise the SSL channel part of the given key state. Settings will be
- * loaded from a previously initialised TLS context.
- *
- * @param ks_ssl The SSL channel's state info to initialise
- * @param ssl_ctx The TLS context to use when initialising the channel.
- * @param is_server Initialise a server?
- * @param session The session associated with the given key_state
- */
-void key_state_ssl_init(struct key_state_ssl *ks_ssl,
- const struct tls_root_ctx *ssl_ctx, bool is_server, struct tls_session *session);
-
-/**
- * Free the SSL channel part of the given key state.
- *
- * @param ks_ssl The SSL channel's state info to free
- */
-void key_state_ssl_free(struct key_state_ssl *ks_ssl);
-
-/**************************************************************************/
-/** @addtogroup control_tls
- * @{ */
-
-/** @name Functions for packets to be sent to a remote OpenVPN peer
- * @{ */
-
-/**
- * Insert a plaintext buffer into the TLS module.
- *
- * After successfully processing the data, the data in \a buf is zeroized,
- * its length set to zero, and a value of \c 1 is returned.
- *
- * @param ks_ssl - The security parameter state for this %key
- * session.
- * @param buf - The plaintext message to process.
- *
- * @return The return value indicates whether the data was successfully
- * processed:
- * - \c 1: All the data was processed successfully.
- * - \c 0: The data was not processed, this function should be called
- * again later to retry.
- * - \c -1: An error occurred.
- */
-int key_state_write_plaintext (struct key_state_ssl *ks_ssl, struct buffer *buf);
-
-/**
- * Insert plaintext data into the TLS module.
- *
- * @param ks_ssl - The security parameter state for this %key
- * session.
- * @param data - A pointer to the data to process.
- * @param len - The length in bytes of the data to process.
- *
- * @return The return value indicates whether the data was successfully
- * processed:
- * - \c 1: All the data was processed successfully.
- * - \c 0: The data was not processed, this function should be called
- * again later to retry.
- * - \c -1: An error occurred.
- */
-int key_state_write_plaintext_const (struct key_state_ssl *ks_ssl,
- const uint8_t *data, int len);
-
-/**
- * Extract ciphertext data from the TLS module.
- *
- * If the \a buf buffer has a length other than zero, this function does
- * not perform any action and returns 0.
- *
- * @param ks_ssl - The security parameter state for this %key
- * session.
- * @param buf - A buffer in which to store the ciphertext.
- * @param maxlen - The maximum number of bytes to extract.
- *
- * @return The return value indicates whether the data was successfully
- * processed:
- * - \c 1: Data was extracted successfully.
- * - \c 0: No data was extracted, this function should be called again
- * later to retry.
- * - \c -1: An error occurred.
- */
-int key_state_read_ciphertext (struct key_state_ssl *ks_ssl, struct buffer *buf,
- int maxlen);
-
-/** @} name Functions for packets to be sent to a remote OpenVPN peer */
-
-
-/** @name Functions for packets received from a remote OpenVPN peer
- * @{ */
-
-/**
- * Insert a ciphertext buffer into the TLS module.
- *
- * After successfully processing the data, the data in \a buf is zeroized,
- * its length set to zero, and a value of \c 1 is returned.
- *
- * @param ks_ssl - The security parameter state for this %key
- * session.
- * @param buf - The ciphertext message to process.
- *
- * @return The return value indicates whether the data was successfully
- * processed:
- * - \c 1: All the data was processed successfully.
- * - \c 0: The data was not processed, this function should be called
- * again later to retry.
- * - \c -1: An error occurred.
- */
-int key_state_write_ciphertext (struct key_state_ssl *ks_ssl,
- struct buffer *buf);
-
-/**
- * Extract plaintext data from the TLS module.
- *
- * If the \a buf buffer has a length other than zero, this function does
- * not perform any action and returns 0.
- *
- * @param ks_ssl - The security parameter state for this %key
- * session.
- * @param buf - A buffer in which to store the plaintext.
- * @param maxlen - The maximum number of bytes to extract.
- *
- * @return The return value indicates whether the data was successfully
- * processed:
- * - \c 1: Data was extracted successfully.
- * - \c 0: No data was extracted, this function should be called again
- * later to retry.
- * - \c -1: An error occurred.
- */
-int key_state_read_plaintext (struct key_state_ssl *ks_ssl, struct buffer *buf,
- int maxlen);
-
-/** @} name Functions for packets received from a remote OpenVPN peer */
-
-/** @} addtogroup control_tls */
-
-/* **************************************
- *
- * Information functions
- *
- * Print information for the end user.
- *
- ***************************************/
-
-/*
- * Print a one line summary of SSL/TLS session handshake.
- */
-void print_details (struct key_state_ssl * ks_ssl, const char *prefix);
-
-/*
- * Show the TLS ciphers that are available for us to use in the OpenSSL
- * library.
- *
- * @param - list of allowed TLS cipher, or NULL.
- */
-void show_available_tls_ciphers (const char *tls_ciphers);
-
-/*
- * The OpenSSL library has a notion of preference in TLS ciphers. Higher
- * preference == more secure. Return the highest preference cipher.
- */
-void get_highest_preference_tls_cipher (char *buf, int size);
-
-#endif /* SSL_BACKEND_H_ */