00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef SSL_H_
00010 #define SSL_H_
00011
00012 #include <string>
00013 #include <vector>
00014
00015 #include <openssl/rsa.h>
00016 #include <openssl/crypto.h>
00017 #include <openssl/x509.h>
00018 #include <openssl/pem.h>
00019 #include <openssl/ssl.h>
00020 #include <openssl/err.h>
00021
00022 #include "sock.h"
00023
00024
00025
00026
00027
00028
00029 using namespace std;
00030
00031
00032
00033
00034
00035
00036
00037 struct s_ssl_bot {
00038 string botname;
00039 string cert;
00040 };
00041
00042
00043
00044
00045
00046
00047
00048 struct s_ssl_conf {
00049 string accept_ca_certs;
00050 string server_cert;
00051 string server_key;
00052 string client_cert;
00053 string client_key;
00054 vector<s_ssl_bot> ssl_bots;
00055 };
00056
00057 bool ssl_init(char* err_str, char* trustedCAs);
00058 bool ssl_server_connection(SSL* &ssl, s_socket* client, char* err_str, char* server_cert, char* server_key, char* expected_client_cert);
00059 bool ssl_server_read(SSL* ssl, s_socket* client, char* err_str, char* buf, size_t buf_len, size_t &buf_got);
00060 void ssl_close(SSL* ssl, s_socket* peer);
00061 bool ssl_client_connection(SSL* &ssl, s_socket* server, char* err_str, char* client_cert, char* client_key);
00062 bool ssl_client_read(SSL* ssl, s_socket* client, char* err_str, char* buf, size_t buf_len, size_t &buf_got);
00063 bool ssl_write(SSL* ssl, s_socket* peer, char* err_str, char* buf, size_t buf_len);
00064 bool ssl_server_accept(SSL* ssl, s_socket* client);
00065
00066 void ssl_do_read_write(SSL* ssl);
00067
00068 #endif
00069