view src/lib-ssl-iostream/iostream-openssl.h @ 12616:bd23d4e10fa1

Added lib-ssl-iostream for handling SSL connections more easily.
author Timo Sirainen <tss@iki.fi>
date Mon, 31 Jan 2011 18:40:27 +0200
parents
children 6a3f3a5ad9a5
line wrap: on
line source

#ifndef IOSTREAM_OPENSSL_H
#define IOSTREAM_OPENSSL_H

#include "iostream-ssl.h"

#include <openssl/ssl.h>

struct ssl_iostream_context {
	SSL_CTX *ssl_ctx;

	pool_t pool;
	const struct ssl_iostream_settings *set;
	/* Used as logging prefix, e.g. "client" or "server" */
	const char *source;

	DH *dh_512, *dh_1024;
	int username_nid;

	unsigned int client_ctx:1;
};

struct ssl_iostream {
	int refcount;
	struct ssl_iostream_context *ctx;

	const struct ssl_iostream_settings *set;

	SSL *ssl;
	BIO *bio_ext;

	struct istream *plain_input;
	struct ostream *plain_output;
	struct ostream *ssl_output;

	char *source;
	char *last_error;

	/* copied settings */
	bool verbose, verbose_invalid_cert, require_valid_cert;
	int username_nid;

	int (*handshake_callback)(void *context);
	void *handshake_context;

	unsigned int handshaked:1;
	unsigned int cert_received:1;
	unsigned int cert_broken:1;
};

extern int dovecot_ssl_extdata_index;

struct istream *i_stream_create_ssl(struct ssl_iostream *ssl_io);
struct ostream *o_stream_create_ssl(struct ssl_iostream *ssl_io);
void ssl_iostream_unref(struct ssl_iostream **ssl_io);

int ssl_iostream_load_key(const struct ssl_iostream_settings *set,
			  const char *key_source, EVP_PKEY **pkey_r);
const char *ssl_iostream_get_use_certificate_error(const char *cert);

bool ssl_iostream_bio_sync(struct ssl_iostream *ssl_io);
int ssl_iostream_handle_error(struct ssl_iostream *ssl_io, int ret,
			      const char *func_name);

const char *ssl_iostream_error(void);
const char *ssl_iostream_key_load_error(void);

void ssl_iostream_context_free_params(struct ssl_iostream_context *ctx);

#endif