00001
00002 #ifndef __JBXL_SSL_TOOL_H_
00003 #define __JBXL_SSL_TOOL_H_
00004
00005
00006 #include "xtools.h"
00007 #include "asn1_tool.h"
00008
00009
00010
00011
00012 #ifndef HAVE_OPENSSL_SSL_H
00013 #ifndef DISABLE_SSL
00014 #define DISABLE_SSL
00015 #endif
00016 #endif
00017
00018 #ifdef DISABLE_SSL
00019 #undef ENABLE_SSL
00020 #endif
00021
00022
00023 #ifdef ENABLE_SSL
00024
00025
00040 #define OPENSSL_NO_KRB5
00041
00042 #include <openssl/crypto.h>
00043 #include <openssl/x509.h>
00044 #include <openssl/pem.h>
00045 #include <openssl/err.h>
00046
00047 #include <openssl/ssl.h>
00048 #include <openssl/evp.h>
00049 #include <openssl/rand.h>
00050
00051
00052 #ifdef WIN32
00053 #pragma comment(lib, "openssl.lib")
00054 #endif
00055
00056
00057
00058 #define SSL_DH 1
00059 #define SSL_RSA 2
00060
00061
00062
00063 #define SSL_ENC_BLCKSZ 128 // ブロック暗号化のブロックサイズ
00064
00065
00066 #define SSL_AES128CBC 1
00067 #define SSL_3DES3CBC 10
00068
00069
00070 #define SSL_IV_SIZE 16
00071
00072
00073
00074 int gen_CRYPT_SharedKey(int keyex, Buffer spki, Buffer* shdkey, void* ptr);
00075
00076
00077
00078 int udp_send_crypt_Buffer_sockaddr_in(int sock, Buffer* data, struct sockaddr_in* sv, Buffer* key, EVP_CIPHER* cipher);
00079 int udp_recv_crypt_Buffer_sockaddr_in(int sock, Buffer* data, struct sockaddr_in* sv, Buffer* key, EVP_CIPHER* cipher);
00080
00081 int udp_send_crypt_Buffer(int sock, Buffer* data, struct addrinfo* sv, Buffer* key, EVP_CIPHER* cipher);
00082 int udp_recv_crypt_Buffer(int sock, Buffer* data, struct addrinfo* sv, Buffer* key, EVP_CIPHER* cipher);
00083 int tcp_send_crypt_Buffer(int sock, Buffer* data, Buffer* key, EVP_CIPHER* cipher);
00084 int tcp_recv_crypt_Buffer(int sock, Buffer* data, Buffer* key, EVP_CIPHER* cipher);
00085
00086 Buffer get_plain_Buffer(Buffer data, Buffer* key, EVP_CIPHER* cipher);
00087 Buffer get_crypt_Buffer(Buffer data, Buffer* key, EVP_CIPHER* cipher);
00088
00089
00090
00091
00092 int tcp_send_crypt_mesg (int sock, char* mesg, Buffer* key, EVP_CIPHER* cipher);
00093 int tcp_send_crypt_sBuffer(int sock, Buffer* mesg, Buffer* key, EVP_CIPHER* cipher);
00094
00095
00096
00097 Buffer get_plain_message(char* mesg, Buffer* key, EVP_CIPHER* cipher);
00098 Buffer get_plain_sBuffer(Buffer mesg, Buffer* key, EVP_CIPHER* cipher);
00099 Buffer get_crypt_message(char* mesg, Buffer* key, EVP_CIPHER* cipher);
00100 Buffer get_crypt_sBuffer(Buffer mesg, Buffer* key, EVP_CIPHER* cipher);
00101 #define get_plain_sBuffer_str(m, k, c) get_plain_message((m), (k), (c));
00102 #define get_crypt_sBuffer_str(m, k, c) get_crypt_message((m), (k), (c));
00103
00104
00105
00106 int check_server_spki(Buffer ip, Buffer spki, char* fn);
00107 int save_spki_with_ipaddr(Buffer ipa, Buffer pki, FILE* fp);
00108 Buffer read_spki_with_ipaddr(Buffer ipa, FILE* fp);
00109
00110
00111
00112 EVP_CIPHER* init_EVPAPI_Buffer(int type);
00113 Buffer decode_EVPAPI_Buffer(Buffer buf, Buffer shkey, EVP_CIPHER* cipher);
00114 Buffer encode_EVPAPI_Buffer(Buffer buf, Buffer shkey, EVP_CIPHER* cipher);
00115 void free_EVP_CIPHER(EVP_CIPHER** p_cipher);
00116
00117
00118
00119 SSL_CTX* ssl_client_setup(char* ca);
00120 SSL* ssl_client_socket(int sock, SSL_CTX* ssl_ctx, int mode);
00121 #define ssl_client_connect(s, c, m) ssl_client_socket((s), (c), (m))
00122
00123 SSL_CTX* ssl_server_setup(char* crt_fn, char* key_fn, char* chn_fn);
00124 SSL* ssl_server_socket(int sock, SSL_CTX* ssl_ctx);
00125
00126 int ssl_read_fullchain_cert_file(SSL_CTX* ssl_ctx, char* file);
00127 int ssl_add_chain_file(SSL_CTX* ssl_ctx, char* file);
00128
00129 void ssl_init(void);
00130 void ssl_close(SSL* ssl);
00131 tList* ssl_get_cert_info(SSL* ssl);
00132
00133 int ssl_recv(SSL* ssl, char* rmsg, int size);
00134 int ssl_send(SSL* ssl, char* smsg, int size);
00135 int ssl_recv_wait(int sock, SSL* ssl, char* mesg, int sz, int tm);
00136 int ssl_send_mesgln(SSL* ssl, char* mesg);
00137 int ssl_recv_mstream(int sock, SSL* ssl, char* mesg, int sz, mstream* sb, int tm);
00138
00139 int ssl_tcp_recv(int sock, SSL* ssl, char* rmsg, int size);
00140 int ssl_tcp_send(int sock, SSL* ssl, char* smsg, int size);
00141 int ssl_tcp_recv_wait(int sock, SSL* ssl, char* mesg, int sz, int tm);
00142 int ssl_tcp_send_mesgln(int sock, SSL* ssl, char* mesg);
00143 int ssl_tcp_recv_mstream(int sock, SSL* ssl, char* mesg, int sz, mstream* sb, int tm);
00144
00145
00156 #define ssl_tcp_send_mesg(sock, ssl, mesg) ssl_tcp_send((sock), (ssl), (mesg), 0)
00157
00158
00168 #define ssl_send_mesg(ssl, mesg) ssl_send((ssl), (mesg), 0)
00169
00170
00171
00172
00173 int ssl_recv_Buffer(SSL* ssl, Buffer* str);
00174 int ssl_send_Buffer(SSL* ssl, Buffer* str);
00175 int ssl_recv_Buffer_wait(int sock, SSL* ssl, Buffer* str, int tm);
00176 int ssl_send_sBuffer(SSL* ssl, Buffer* str);
00177 int ssl_send_sBufferln(SSL* ssl, Buffer* str);
00178 int ssl_recv_mstream_Buffer(int sock, SSL* ssl, Buffer* mesg, mstream* sb, int tm);
00179 int ssl_recv_lines_Buffer(int sock, SSL* ssl, Buffer* mesg, int tm);
00180
00181 int ssl_tcp_recv_Buffer(int sock, SSL* ssl, Buffer* str);
00182 int ssl_tcp_send_Buffer(int sock, SSL* ssl, Buffer* str);
00183 int ssl_tcp_recv_Buffer_wait(int sock, SSL* ssl, Buffer* str, int tm);
00184 int ssl_tcp_send_sBuffer(int sock, SSL* ssl, Buffer* str);
00185 int ssl_tcp_send_sBufferln(int sock, SSL* ssl, Buffer* str);
00186 int ssl_tcp_recv_mstream_Buffer(int sock, SSL* ssl, Buffer* mesg, mstream* sb, int tm);
00187 int ssl_tcp_recv_lines_Buffer(int sock, SSL* ssl, Buffer* mesg, int tm);
00188
00189 int ssl_tcp_recv_Buffer_tosize(int sock, SSL* ssl, Buffer* str, Buffer* mod, int size);
00190 int ssl_tcp_recv_Buffer_tosize_wait(int sock, SSL* ssl, Buffer* str, Buffer* mod, int size, int tm);
00191
00192
00193 #endif // DISABLE_SSL
00194
00195 #endif // __JBXL_SSL_TOOL_H_
00196