JunkBox_Lib  1.10.2
ssl_tool.h
Go to the documentation of this file.
1 #ifndef __JBXL_SSL_TOOL_H_
2 #define __JBXL_SSL_TOOL_H_
3 
4 #include "xtools.h"
5 #include "asn1_tool.h"
6 
7 //#include "dh_tool.h"
8 
9 
10 #ifndef HAVE_OPENSSL_SSL_H
11 #ifndef DISABLE_SSL
12 #define DISABLE_SSL
13 #endif
14 #endif
15 
16 #ifdef DISABLE_SSL
17 #undef ENABLE_SSL
18 #endif
19 
20 
21 #ifdef ENABLE_SSL
22 
37 #define OPENSSL_NO_KRB5
38 
39 #include <openssl/crypto.h>
40 #include <openssl/x509.h>
41 #include <openssl/pem.h>
42 #include <openssl/err.h>
43 
44 #include <openssl/ssl.h>
45 #include <openssl/evp.h>
46 #include <openssl/rand.h>
47 
48 
49 #ifdef WIN32
50 #pragma comment(lib, "openssl.lib")
51 #endif
52 
53 
54 // Key Exchange Algorism
55 #define SSL_DH 1
56 #define SSL_RSA 2
57 
58 
59 //
60 #define SSL_ENC_BLCKSZ 128 // ブロック暗号化のブロックサイズ
61 
62 // CRYPT Algorism
63 #define SSL_AES128CBC 1
64 #define SSL_3DES3CBC 10
65 
66 #define SSL_IV_SIZE 16
67 
68 //
69 int gen_CRYPT_SharedKey(int keyex, Buffer spki, Buffer* shdkey, void* ptr);
70 
71 // データ(含むバイナリ)送受信用(IPv4)(暗号+復号)
72 int udp_send_crypt_Buffer_sockaddr_in(int sock, Buffer* data, struct sockaddr_in* sv, Buffer* key, EVP_CIPHER* cipher);
73 int udp_recv_crypt_Buffer_sockaddr_in(int sock, Buffer* data, struct sockaddr_in* sv, Buffer* key, EVP_CIPHER* cipher);
74 
75 int udp_send_crypt_Buffer(int sock, Buffer* data, struct addrinfo* sv, Buffer* key, EVP_CIPHER* cipher);
76 int udp_recv_crypt_Buffer(int sock, Buffer* data, struct addrinfo* sv, Buffer* key, EVP_CIPHER* cipher);
77 int tcp_send_crypt_Buffer(int sock, Buffer* data, Buffer* key, EVP_CIPHER* cipher);
78 int tcp_recv_crypt_Buffer(int sock, Buffer* data, Buffer* key, EVP_CIPHER* cipher);
79 
80 Buffer get_plain_Buffer(Buffer data, Buffer* key, EVP_CIPHER* cipher);
81 Buffer get_crypt_Buffer(Buffer data, Buffer* key, EVP_CIPHER* cipher);
82 
83 // メッセージ(テキスト)送信用(暗号+Base64)
84 int tcp_send_crypt_mesg (int sock, char* mesg, Buffer* key, EVP_CIPHER* cipher);
85 int tcp_send_crypt_sBuffer(int sock, Buffer* mesg, Buffer* key, EVP_CIPHER* cipher);
86 
87 // メッセージ(テキスト)変換用(暗号化+Base64)
88 // get_plain_ は tcp_send_crypt_, udp_send_crypt_ のデータ受信にも使用可.
89 Buffer get_plain_message(char* mesg, Buffer* key, EVP_CIPHER* cipher);
90 Buffer get_plain_sBuffer(Buffer mesg, Buffer* key, EVP_CIPHER* cipher);
91 Buffer get_crypt_message(char* mesg, Buffer* key, EVP_CIPHER* cipher);
92 Buffer get_crypt_sBuffer(Buffer mesg, Buffer* key, EVP_CIPHER* cipher);
93 #define get_plain_sBuffer_str(m, k, c) get_plain_message((m), (k), (c));
94 #define get_crypt_sBuffer_str(m, k, c) get_crypt_message((m), (k), (c));
95 
96 // Client's Side Check
97 int check_server_spki(Buffer ip, Buffer spki, char* fn);
98 int save_spki_with_ipaddr(Buffer ipa, Buffer pki, FILE* fp);
99 Buffer read_spki_with_ipaddr(Buffer ipa, FILE* fp);
100 
101 // EVP
102 EVP_CIPHER* init_EVPAPI_Buffer(int type);
103 Buffer decode_EVPAPI_Buffer(Buffer buf, Buffer shkey, EVP_CIPHER* cipher);
104 Buffer encode_EVPAPI_Buffer(Buffer buf, Buffer shkey, EVP_CIPHER* cipher);
105 void free_EVP_CIPHER(EVP_CIPHER** p_cipher);
106 
107 // SSL/TLS
108 SSL_CTX* ssl_client_setup(char* ca);
109 SSL* ssl_client_socket(int sock, SSL_CTX* ssl_ctx, int mode);
110 #define ssl_client_connect(s, c, m) ssl_client_socket((s), (c), (m))
111 
112 SSL_CTX* ssl_server_setup(char* crt_fn, char* key_fn, char* chn_fn);
113 SSL* ssl_server_socket(int sock, SSL_CTX* ssl_ctx);
114 
115 int ssl_read_fullchain_cert_file(SSL_CTX* ssl_ctx, char* file);
116 int ssl_add_chain_file(SSL_CTX* ssl_ctx, char* file);
117 
118 void ssl_init(void);
119 void ssl_close(SSL* ssl);
120 tList* ssl_get_cert_info(SSL* ssl);
121 
122 int ssl_recv(SSL* ssl, char* rmsg, int size);
123 int ssl_send(SSL* ssl, char* smsg, int size);
124 int ssl_recv_wait(int sock, SSL* ssl, char* mesg, int sz, int tm);
125 int ssl_send_mesgln(SSL* ssl, char* mesg);
126 int ssl_recv_mstream(int sock, SSL* ssl, char* mesg, int sz, mstream* sb, int tm);
127 
128 int ssl_tcp_recv(int sock, SSL* ssl, char* rmsg, int size);
129 int ssl_tcp_send(int sock, SSL* ssl, char* smsg, int size);
130 int ssl_tcp_recv_wait(int sock, SSL* ssl, char* mesg, int sz, int tm);
131 int ssl_tcp_send_mesgln(int sock, SSL* ssl, char* mesg);
132 int ssl_tcp_recv_mstream(int sock, SSL* ssl, char* mesg, int sz, mstream* sb, int tm);
133 
144 #define ssl_tcp_send_mesg(sock, ssl, mesg) ssl_tcp_send((sock), (ssl), (mesg), 0)
145 
146 
156 #define ssl_send_mesg(ssl, mesg) ssl_send((ssl), (mesg), 0)
157 
158 
159 // SSL/TLS with Buffer
160 int ssl_recv_Buffer(SSL* ssl, Buffer* str);
161 int ssl_send_Buffer(SSL* ssl, Buffer* str);
162 int ssl_recv_Buffer_wait(int sock, SSL* ssl, Buffer* str, int tm);
163 int ssl_send_sBuffer(SSL* ssl, Buffer* str);
164 int ssl_send_sBufferln(SSL* ssl, Buffer* str);
165 int ssl_recv_mstream_Buffer(int sock, SSL* ssl, Buffer* mesg, mstream* sb, int tm);
166 int ssl_recv_lines_Buffer(int sock, SSL* ssl, Buffer* mesg, int tm);
167 
168 int ssl_tcp_recv_Buffer(int sock, SSL* ssl, Buffer* str);
169 int ssl_tcp_send_Buffer(int sock, SSL* ssl, Buffer* str);
170 int ssl_tcp_recv_Buffer_wait(int sock, SSL* ssl, Buffer* str, int tm);
171 int ssl_tcp_send_sBuffer(int sock, SSL* ssl, Buffer* str);
172 int ssl_tcp_send_sBufferln(int sock, SSL* ssl, Buffer* str);
173 int ssl_tcp_recv_mstream_Buffer(int sock, SSL* ssl, Buffer* mesg, mstream* sb, int tm);
174 int ssl_tcp_recv_lines_Buffer(int sock, SSL* ssl, Buffer* mesg, int tm);
175 
176 int ssl_tcp_recv_Buffer_tosize(int sock, SSL* ssl, Buffer* str, Buffer* mod, int size);
177 int ssl_tcp_recv_Buffer_tosize_wait(int sock, SSL* ssl, Buffer* str, Buffer* mod, int size, int tm);
178 
179 
180 #endif // DISABLE_SSL
181 
182 #endif // __JBXL_SSL_TOOL_H_
183 
ASN.1/DER 用ライブラリヘッダ
unsigned char ** buf
Definition: jpeg_tool.h:96
Buffer get_crypt_Buffer(Buffer data, Buffer *key, EVP_CIPHER *cipher)
Definition: ssl_tool.c:264
int tcp_send_crypt_sBuffer(int sock, Buffer *mesg, Buffer *key, EVP_CIPHER *cipher)
Definition: ssl_tool.c:351
int ssl_recv_Buffer_wait(int sock, SSL *ssl, Buffer *str, int tm)
Definition: ssl_tool.c:1440
int ssl_add_chain_file(SSL_CTX *ssl_ctx, char *file)
Definition: ssl_tool.c:965
int ssl_send_Buffer(SSL *ssl, Buffer *str)
Definition: ssl_tool.c:1406
int ssl_tcp_recv_wait(int sock, SSL *ssl, char *mesg, int sz, int tm)
Definition: ssl_tool.c:1714
int udp_send_crypt_Buffer(int sock, Buffer *data, struct addrinfo *sv, Buffer *key, EVP_CIPHER *cipher)
Definition: ssl_tool.c:162
SSL * ssl_server_socket(int sock, SSL_CTX *ssl_ctx)
Definition: ssl_tool.c:1042
Buffer get_plain_message(char *mesg, Buffer *key, EVP_CIPHER *cipher)
Definition: ssl_tool.c:391
int ssl_tcp_send_sBuffer(int sock, SSL *ssl, Buffer *str)
Definition: ssl_tool.c:2052
int ssl_recv(SSL *ssl, char *rmsg, int size)
Definition: ssl_tool.c:1171
int ssl_tcp_recv(int sock, SSL *ssl, char *rmsg, int size)
Definition: ssl_tool.c:1643
int udp_recv_crypt_Buffer_sockaddr_in(int sock, Buffer *data, struct sockaddr_in *sv, Buffer *key, EVP_CIPHER *cipher)
Definition: ssl_tool.c:132
int ssl_tcp_recv_Buffer_wait(int sock, SSL *ssl, Buffer *str, int tm)
Definition: ssl_tool.c:1920
int ssl_send(SSL *ssl, char *smsg, int size)
Definition: ssl_tool.c:1202
int ssl_recv_mstream_Buffer(int sock, SSL *ssl, Buffer *mesg, mstream *sb, int tm)
Definition: ssl_tool.c:1539
int ssl_tcp_recv_Buffer(int sock, SSL *ssl, Buffer *str)
Definition: ssl_tool.c:1849
int ssl_send_mesgln(SSL *ssl, char *mesg)
Definition: ssl_tool.c:1271
Buffer read_spki_with_ipaddr(Buffer ipa, FILE *fp)
Definition: ssl_tool.c:595
int ssl_tcp_send_sBufferln(int sock, SSL *ssl, Buffer *str)
Definition: ssl_tool.c:2079
int ssl_tcp_send_Buffer(int sock, SSL *ssl, Buffer *str)
Definition: ssl_tool.c:1881
int ssl_tcp_recv_lines_Buffer(int sock, SSL *ssl, Buffer *mesg, int tm)
Definition: ssl_tool.c:2182
void ssl_init()
Definition: ssl_tool.c:806
SSL * ssl_client_socket(int sock, SSL_CTX *ssl_ctx, int mode)
Definition: ssl_tool.c:861
int tcp_send_crypt_Buffer(int sock, Buffer *data, Buffer *key, EVP_CIPHER *cipher)
Definition: ssl_tool.c:208
int ssl_tcp_recv_mstream(int sock, SSL *ssl, char *mesg, int sz, mstream *sb, int tm)
Definition: ssl_tool.c:1801
tList * ssl_get_cert_info(SSL *ssl)
Definition: ssl_tool.c:1104
int ssl_tcp_recv_Buffer_tosize(int sock, SSL *ssl, Buffer *str, Buffer *mod, int size)
Definition: ssl_tool.c:1951
SSL_CTX * ssl_server_setup(char *crt_fn, char *key_fn, char *chn_fn)
Definition: ssl_tool.c:912
int ssl_tcp_send(int sock, SSL *ssl, char *smsg, int size)
Definition: ssl_tool.c:1676
int ssl_read_fullchain_cert_file(SSL_CTX *ssl_ctx, char *file)
Definition: ssl_tool.c:995
int ssl_tcp_send_mesgln(int sock, SSL *ssl, char *mesg)
Definition: ssl_tool.c:1747
Buffer encode_EVPAPI_Buffer(Buffer buf, Buffer shdkey, EVP_CIPHER *cipher)
Definition: ssl_tool.c:722
int ssl_tcp_recv_Buffer_tosize_wait(int sock, SSL *ssl, Buffer *str, Buffer *mod, int size, int tm)
Definition: ssl_tool.c:2006
int udp_recv_crypt_Buffer(int sock, Buffer *data, struct addrinfo *sv, Buffer *key, EVP_CIPHER *cipher)
Definition: ssl_tool.c:182
int ssl_recv_lines_Buffer(int sock, SSL *ssl, Buffer *mesg, int tm)
Definition: ssl_tool.c:1595
int ssl_send_sBuffer(SSL *ssl, Buffer *str)
Definition: ssl_tool.c:1467
Buffer decode_EVPAPI_Buffer(Buffer buf, Buffer shdkey, EVP_CIPHER *cipher)
Definition: ssl_tool.c:670
void free_EVP_CIPHER(EVP_CIPHER **p_cipher)
Definition: ssl_tool.c:773
int ssl_tcp_recv_mstream_Buffer(int sock, SSL *ssl, Buffer *mesg, mstream *sb, int tm)
Definition: ssl_tool.c:2128
int ssl_send_sBufferln(SSL *ssl, Buffer *str)
Definition: ssl_tool.c:1492
int ssl_recv_Buffer(SSL *ssl, Buffer *str)
Definition: ssl_tool.c:1376
int check_server_spki(Buffer ipaddr, Buffer spki, char *filename)
Definition: ssl_tool.c:524
int ssl_recv_mstream(int sock, SSL *ssl, char *mesg, int sz, mstream *sb, int tm)
Definition: ssl_tool.c:1324
EVP_CIPHER * init_EVPAPI_Buffer(int type)
Definition: ssl_tool.c:645
void ssl_close(SSL *ssl)
Definition: ssl_tool.c:1083
int tcp_recv_crypt_Buffer(int sock, Buffer *data, Buffer *key, EVP_CIPHER *cipher)
Definition: ssl_tool.c:228
SSL_CTX * ssl_client_setup(char *ca)
Definition: ssl_tool.c:826
int gen_CRYPT_SharedKey(int keyex, Buffer spki, Buffer *shdkey, void *ptr)
Definition: ssl_tool.c:91
Buffer get_crypt_sBuffer(Buffer mesg, Buffer *key, EVP_CIPHER *cipher)
Definition: ssl_tool.c:486
Buffer get_crypt_message(char *mesg, Buffer *key, EVP_CIPHER *cipher)
Definition: ssl_tool.c:455
int tcp_send_crypt_mesg(int sock, char *mesg, Buffer *key, EVP_CIPHER *cipher)
Definition: ssl_tool.c:298
Buffer get_plain_Buffer(Buffer data, Buffer *key, EVP_CIPHER *cipher)
Definition: ssl_tool.c:254
int udp_send_crypt_Buffer_sockaddr_in(int sock, Buffer *data, struct sockaddr_in *sv, Buffer *key, EVP_CIPHER *cipher)
Definition: ssl_tool.c:112
int ssl_recv_wait(int sock, SSL *ssl, char *mesg, int sz, int tm)
Definition: ssl_tool.c:1239
int save_spki_with_ipaddr(Buffer ipa, Buffer pki, FILE *fp)
Definition: ssl_tool.c:569
Buffer get_plain_sBuffer(Buffer mesg, Buffer *key, EVP_CIPHER *cipher)
Definition: ssl_tool.c:423
Definition: buffer.h:35
#define mstream
バイト型 メッセージストリーム
Definition: tools.h:167
汎用拡張ツールヘッダ