source: lab.git/Dev/utvpn/utvpn-unix-v101-7101-public/src/Mayaqua/Encrypt.h @ 86521dd

trunk
Last change on this file since 86521dd was a1bae3e, checked in by mitty <mitty@…>, 12 years ago
  • copy vendor drop to trunk

git-svn-id: https://lab.mitty.jp/svn/lab/trunk@147 7d2118f6-f56c-43e7-95a2-4bb3031d96e7

  • Property mode set to 100644
File size: 11.5 KB
Line 
1// SoftEther UT-VPN SourceCode
2//
3// Copyright (C) 2004-2010 SoftEther Corporation.
4// Copyright (C) 2004-2010 University of Tsukuba, Japan.
5// Copyright (C) 2003-2010 Daiyuu Nobori.
6// All Rights Reserved.
7//
8// http://utvpn.tsukuba.ac.jp/
9//
10// This program is free software; you can redistribute it and/or
11// modify it under the terms of the GNU General Public License
12// version 2 as published by the Free Software Foundation.
13//
14// This program is distributed in the hope that it will be useful,
15// but WITHOUT ANY WARRANTY; without even the implied warranty of
16// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17// GNU General Public License for more details.
18//
19// You should have received a copy of the GNU General Public License version 2
20// along with this program; if not, write to the Free Software
21// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22//
23// このファイルは GPL バージョン 2 ライセンスで公開されています。
24// 誰でもこのファイルの内容を複製、改変したり、改変したバージョンを再配布
25// することができます。ただし、原著作物を改変した場合は、原著作物の著作権表示
26// を除去することはできません。改変した著作物を配布する場合は、改変実施者の
27// 著作権表示を原著作物の著作権表示に付随して記載するようにしてください。
28//
29// この SoftEther UT-VPN オープンソース・プロジェクトは、日本国の
30// ソフトイーサ株式会社 (SoftEther Corporation, http://www.softether.co.jp/ )
31// および筑波大学 (University of Tsukuba, http://www.tsukuba.ac.jp/ ) によって
32// ホストされています。
33// 本プログラムの配布者は、本プログラムを、業としての利用以外のため、
34// および、試験または研究のために利用が行われることを想定して配布
35// しています。
36// SoftEther UT-VPN プロジェクトの Web サイトは http://utvpn.tsukuba.ac.jp/ に
37// あります。
38// 本ソフトウェアの不具合の修正、機能改良、セキュリティホールの修復などのコード
39// の改変を行った場合で、その成果物を SoftEther UT-VPN プロジェクトに提出して
40// いただける場合は、 http://utvpn.tsukuba.ac.jp/ までソースコードを送付して
41// ください。SoftEther UT-VPN プロジェクトの本体リリースまたはブランチリリース
42// に組み込みさせていただきます。
43//
44// GPL に基づいて原著作物が提供される本ソフトウェアの改良版を配布、販売する
45// 場合は、そのソースコードを GPL に基づいて誰にでも開示する義務が生じます。
46//
47// 本ソフトウェアに関連する著作権、特許権、商標権はソフトイーサ株式会社
48// (SoftEther Corporation) およびその他の著作権保持者が保有しています。
49// ソフトイーサ株式会社等はこれらの権利を放棄していません。本ソフトウェアの
50// 二次著作物を配布、販売する場合は、これらの権利を侵害しないようにご注意
51// ください。
52//
53// お願い: どのような通信ソフトウェアにも通常は必ず未発見の
54// セキュリティホールが潜んでいます。本ソースコードをご覧いただいた結果、
55// UT-VPN にセキュリティホールを発見された場合は、当該セキュリティホールの
56// 情報を不特定多数に開示される前に、必ず、ソフトイーサ株式会社
57// および脆弱性情報の届出を受け付ける公的機関まで通報いただき、
58// 公益保護にご協力いただきますようお願い申し上げます。
59//
60// ソフトイーサ株式会社は、当該セキュリティホールについて迅速に対処を
61// 行い、UT-VPN および UT-VPN に関連するソフトウェアのユーザー・顧客
62// を保護するための努力を行います。
63//
64// ソフトイーサへの届出先: http://www.softether.co.jp/jp/contact/
65// 日本国内の脆弱性情報届出受付公的機関:
66//         独立行政法人 情報処理推進機構
67//         http://www.ipa.go.jp/security/vuln/report/
68//
69// 上記各事項について不明な点は、ソフトイーサ株式会社までご連絡ください。
70// 連絡先: http://www.softether.co.jp/jp/contact/
71
72// -----------------------------------------------
73// [ChangeLog]
74// 2010.05.20
75//  新規リリース by SoftEther
76// -----------------------------------------------
77
78// Encrypt.h
79// Encrypt.c のヘッダ
80
81#ifndef ENCRYPT_H
82#define ENCRYPT_H
83
84// OpenSSL の関数
85void RAND_Init_For_SoftEther();
86void RAND_Free_For_SoftEther();
87
88
89
90// 定数
91#define MIN_SIGN_HASH_SIZE      (15 + SHA1_SIZE)
92#define SIGN_HASH_SIZE          (MIN_SIGN_HASH_SIZE)
93
94// マクロ
95#define HASHED_DATA(p)          (((UCHAR *)p) + 15)
96
97
98
99// 暗号化コンテキスト
100struct CRYPT
101{
102    int x, y;
103    int state[256];
104};
105
106// 証明書内の名前
107struct NAME
108{
109    wchar_t *CommonName;        // CN
110    wchar_t *Organization;      // O
111    wchar_t *Unit;              // OU
112    wchar_t *Country;           // C
113    wchar_t *State;             // ST
114    wchar_t *Local;             // L
115};
116
117// シリアル番号
118struct X_SERIAL
119{
120    UINT size;
121    UCHAR *data;
122};
123
124// 証明書
125struct X
126{
127    X509 *x509;
128    NAME *issuer_name;
129    NAME *subject_name;
130    bool root_cert;
131    UINT64 notBefore;
132    UINT64 notAfter;
133    X_SERIAL *serial;
134    bool do_not_free;
135    bool is_compatible_bit;
136    UINT bits;
137};
138
139// 鍵
140struct K
141{
142    EVP_PKEY *pkey;
143    bool private_key;
144};
145
146// PKCS#12
147struct P12
148{
149    PKCS12 *pkcs12;
150};
151
152// CEL
153struct X_CRL
154{
155    X509_CRL *Crl;
156};
157
158// 定数
159#define MD5_SIZE    16
160#define SHA1_SIZE   20
161
162// OpenSSL のロック
163extern LOCK **ssl_lock_obj;
164
165// 関数プロトタイプ
166CRYPT *NewCrypt(void *key, UINT size);
167void FreeCrypt(CRYPT *c);
168void SetKey(CRYPT *c, void *key, UINT size);
169void Encrypt(CRYPT *c, void *dst, void *src, UINT size);
170void InternalEncrypt(CRYPT *c, void *dst, void *src, UINT size);
171void Hash(void *dst, void *src, UINT size, bool sha1);
172void HashSha1(void *dst, void *src, UINT size);
173void InternalHash(void *dst, void *src, UINT size, bool sha1);
174void InitCryptLibrary();
175void Rand(void *buf, UINT size);
176void Rand128(void *buf);
177UINT64 Rand64();
178UINT Rand32();
179USHORT Rand16();
180UCHAR Rand8();
181bool Rand1();
182UINT HashPtrToUINT(void *p);
183
184void CertTest();
185BIO *BufToBio(BUF *b);
186BUF *BioToBuf(BIO *bio);
187BIO *NewBio();
188void FreeBio(BIO *bio);
189X *BioToX(BIO *bio, bool text);
190X *BufToX(BUF *b, bool text);
191void FreeX509(X509 *x509);
192void FreeX(X *x);
193BIO *XToBio(X *x, bool text);
194BUF *XToBuf(X *x, bool text);
195K *BioToK(BIO *bio, bool private_key, bool text, char *password);
196int PKeyPasswordCallbackFunction(char *buf, int bufsize, int verify, void *param);
197void FreePKey(EVP_PKEY *pkey);
198void FreeK(K *k);
199K *BufToK(BUF *b, bool private_key, bool text, char *password);
200bool IsEncryptedK(BUF *b, bool private_key);
201bool IsBase64(BUF *b);
202BIO *KToBio(K *k, bool text, char *password);
203BUF *KToBuf(K *k, bool text, char *password);
204X *FileToX(char *filename);
205X *FileToXW(wchar_t *filename);
206bool XToFile(X *x, char *filename, bool text);
207bool XToFileW(X *x, wchar_t *filename, bool text);
208K *FileToK(char *filename, bool private_key, char *password);
209K *FileToKW(wchar_t *filename, bool private_key, char *password);
210bool KToFile(K *k, char *filename, bool text, char *password);
211bool KToFileW(K *k, wchar_t *filename, bool text, char *password);
212bool CheckXandK(X *x, K *k);
213bool CompareX(X *x1, X *x2);
214NAME *X509NameToName(void *xn);
215wchar_t *GetUniStrFromX509Name(void *xn, int nid);
216void LoadXNames(X *x);
217void FreeXNames(X *x);
218void FreeName(NAME *n);
219bool CompareName(NAME *n1, NAME *n2);
220K *GetKFromX(X *x);
221bool CheckSignature(X *x, K *k);
222X *X509ToX(X509 *x509);
223bool CheckX(X *x, X *x_issuer);
224bool Asn1TimeToSystem(SYSTEMTIME *s, void *asn1_time);
225bool StrToSystem(SYSTEMTIME *s, char *str);
226UINT64 Asn1TimeToUINT64(void *asn1_time);
227bool SystemToAsn1Time(void *asn1_time, SYSTEMTIME *s);
228bool UINT64ToAsn1Time(void *asn1_time, UINT64 t);
229bool SystemToStr(char *str, UINT size, SYSTEMTIME *s);
230void LoadXDates(X *x);
231bool CheckXDate(X *x, UINT64 current_system_time);
232bool CheckXDateNow(X *x);
233NAME *NewName(wchar_t *common_name, wchar_t *organization, wchar_t *unit,
234              wchar_t *country, wchar_t *state, wchar_t *local);
235void *NameToX509Name(NAME *nm);
236void FreeX509Name(void *xn);
237bool AddX509Name(void *xn, int nid, wchar_t *str);
238X509 *NewRootX509(K *pub, K *priv, NAME *name, UINT days, X_SERIAL *serial);
239X *NewRootX(K *pub, K *priv, NAME *name, UINT days, X_SERIAL *serial);
240X509 *NewX509(K *pub, K *priv, X *ca, NAME *name, UINT days, X_SERIAL *serial);
241X *NewX(K *pub, K *priv, X *ca, NAME *name, UINT days, X_SERIAL *serial);
242UINT GetDaysUntil2038();
243X_SERIAL *NewXSerial(void *data, UINT size);
244void FreeXSerial(X_SERIAL *serial);
245char *ByteToStr(BYTE *src, UINT src_size);
246P12 *BioToP12(BIO *bio);
247P12 *PKCS12ToP12(PKCS12 *pkcs12);
248P12 *BufToP12(BUF *b);
249BIO *P12ToBio(P12 *p12);
250BUF *P12ToBuf(P12 *p12);
251void FreePKCS12(PKCS12 *pkcs12);
252void FreeP12(P12 *p12);
253P12 *FileToP12(char *filename);
254P12 *FileToP12W(wchar_t *filename);
255bool P12ToFile(P12 *p12, char *filename);
256bool P12ToFileW(P12 *p12, wchar_t *filename);
257bool ParseP12(P12 *p12, X **x, K **k, char *password);
258bool IsEncryptedP12(P12 *p12);
259P12 *NewP12(X *x, K *k, char *password);
260X *CloneX(X *x);
261K *CloneK(K *k);
262void FreeCryptLibrary();
263void GetPrintNameFromX(wchar_t *str, UINT size, X *x);
264void GetPrintNameFromXA(char *str, UINT size, X *x);
265void GetPrintNameFromName(wchar_t *str, UINT size, NAME *name);
266void GetAllNameFromX(wchar_t *str, UINT size, X *x);
267void GetAllNameFromA(char *str, UINT size, X *x);
268void GetAllNameFromName(wchar_t *str, UINT size, NAME *name);
269void GetAllNameFromNameEx(wchar_t *str, UINT size, NAME *name);
270void GetAllNameFromXEx(wchar_t *str, UINT size, X *x);
271void GetAllNameFromXExA(char *str, UINT size, X *x);
272BUF *BigNumToBuf(BIGNUM *bn);
273BIGNUM *BinToBigNum(void *data, UINT size);
274BIGNUM *BufToBigNum(BUF *b);
275X_SERIAL *CloneXSerial(X_SERIAL *src);
276bool CompareXSerial(X_SERIAL *s1, X_SERIAL *s2);
277void GetXDigest(X *x, UCHAR *buf, bool sha1);
278NAME *CopyName(NAME *n);
279
280
281bool RsaGen(K **priv, K **pub, UINT bit);
282bool RsaCheck();
283bool RsaCheckEx();
284bool RsaPublicEncrypt(void *dst, void *src, UINT size, K *k);
285bool RsaPrivateDecrypt(void *dst, void *src, UINT size, K *k);
286bool RsaPrivateEncrypt(void *dst, void *src, UINT size, K *k);
287bool RsaPublicDecrypt(void *dst, void *src, UINT size, K *k);
288bool RsaSign(void *dst, void *src, UINT size, K *k);
289bool RsaSignEx(void *dst, void *src, UINT size, K *k, UINT bits);
290bool HashForSign(void *dst, UINT dst_size, void *src, UINT src_size);
291bool RsaVerify(void *data, UINT data_size, void *sign, K *k);
292bool RsaVerifyEx(void *data, UINT data_size, void *sign, K *k, UINT bits);
293UINT RsaPublicSize(K *k);
294void RsaPublicToBin(K *k, void *data);
295BUF *RsaPublicToBuf(K *k);
296K *RsaBinToPublic(void *data, UINT size);
297
298X_CRL *FileToXCrl(char *filename);
299X_CRL *FileToXCrlW(wchar_t *filename);
300X_CRL *BufToXCrl(BUF *b);
301void FreeXCrl(X_CRL *r);
302bool IsXRevokedByXCrl(X *x, X_CRL *r);
303bool IsXRevoked(X *x);
304
305
306
307void OpenSSL_InitLock();
308void OpenSSL_FreeLock();
309void OpenSSL_Lock(int mode, int n, const char *file, int line);
310unsigned long OpenSSL_Id(void);
311void FreeOpenSSLThreadState();
312
313#ifdef  ENCRYPT_C
314// 内部関数
315
316
317#endif  // ENCRYPT_C
318
319#endif  // ENCRYPT_H
320
Note: See TracBrowser for help on using the repository browser.