summaryrefslogtreecommitdiff
path: root/release/src/router/matrixssl/src/crypto/matrixCrypto.h
blob: 58f45f3df60c9de06cd828b1f6f5fe59de85dac0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*
 *	matrixCrypto.h
 *	Release $Name: MATRIXSSL_1_8_8_OPEN $
 *
 *	Public API set for matrixCrypto
 */
/*
 *	Copyright (c) PeerSec Networks, 2002-2009. All Rights Reserved.
 *	The latest version of this code is available at http://www.matrixssl.org
 *
 *	This software is open source; you can redistribute it and/or modify
 *	it under the terms of the GNU General Public License as published by
 *	the Free Software Foundation; either version 2 of the License, or
 *	(at your option) any later version.
 *
 *	This General Public License does NOT permit incorporating this software 
 *	into proprietary programs.  If you are unable to comply with the GPL, a 
 *	commercial license for this software may be purchased from PeerSec Networks
 *	at http://www.peersec.com
 *	
 *	This program is distributed in WITHOUT ANY WARRANTY; without even the 
 *	implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
 *	See the GNU General Public License for more details.
 *	
 *	You should have received a copy of the GNU General Public License
 *	along with this program; if not, write to the Free Software
 *	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *	http://www.gnu.org/copyleft/gpl.html
 */
/******************************************************************************/

#ifndef _h_MATRIX_CRYPTO
#define _h_MATRIX_CRYPTO

#ifdef __cplusplus
extern "C" {
#endif

#include "../../matrixCommon.h"

/*
	User application.  Now include cryptoLayer to get the proper algorithm
	defines so we know what API set to expose
*/
#include "cryptoLayer.h"

/******************************************************************************/


MATRIXPUBLIC int32 matrixGetRandomBytes(unsigned char *bytes, int32 size);

#ifdef USE_ARC4
MATRIXPUBLIC void matrixArc4Init(sslCipherContext_t *ctx, unsigned char *key,
						   int32 keylen);
MATRIXPUBLIC int32 matrixArc4(sslCipherContext_t *ctx, unsigned char *in,
					  unsigned char *out, int32 len);
#endif /* USE_ARC4 */

#ifdef USE_3DES
MATRIXPUBLIC int32 matrix3desInit(sslCipherContext_t *ctx, unsigned char *IV,
						  unsigned char *key, int32 keylen);
MATRIXPUBLIC int32 matrix3desEncrypt(sslCipherContext_t *ctx, unsigned char *pt,
							 unsigned char *ct, int32 len);
MATRIXPUBLIC int32 matrix3desDecrypt(sslCipherContext_t *ctx, unsigned char *ct,
							 unsigned char *pt, int32 len);
MATRIXPUBLIC void generate3DESKey(unsigned char *pass, int32 passlen, 
							unsigned char *salt, unsigned char *key);
#endif /* USE_3DES */



/*
	HMAC and message digests
*/
MATRIXPUBLIC int32 matrixHmacMd5(unsigned char *key, int32 keyLen, 
							const unsigned char *buf, unsigned long len, 
							unsigned char *hash, unsigned char *hmacKey,
							int32 *hmacKeyLen);
MATRIXPUBLIC void matrixHmacMd5Init(sslHmacContext_t *ctx, 
								unsigned char *key, int32 keyLen);
MATRIXPUBLIC void matrixHmacMd5Update(sslHmacContext_t *ctx, 
								const unsigned char *buf, unsigned long len);
MATRIXPUBLIC int32 matrixHmacMd5Final(sslHmacContext_t *ctx,
									  unsigned char *hash);

MATRIXPUBLIC int32 matrixHmacSha1(unsigned char *key, int32 keyLen, 
							const unsigned char *buf, unsigned long len, 
							unsigned char *hash, unsigned char *hmacKey,
							int32 *hmacKeyLen);
MATRIXPUBLIC void matrixHmacSha1Init(sslHmacContext_t *ctx, 
								unsigned char *key, int32 keyLen);
MATRIXPUBLIC void matrixHmacSha1Update(sslHmacContext_t *ctx, 
								const unsigned char *buf, unsigned long len);
MATRIXPUBLIC int32 matrixHmacSha1Final(sslHmacContext_t *ctx,
									   unsigned char *hash);

MATRIXPUBLIC void matrixSha1Init(sslSha1Context_t *ctx);
MATRIXPUBLIC void matrixSha1Update(sslSha1Context_t *ctx,
						const unsigned char *buf, unsigned long len);
MATRIXPUBLIC int32 matrixSha1Final(sslSha1Context_t *ctx, unsigned char *hash);


MATRIXPUBLIC void matrixMd5Init(sslMd5Context_t *ctx);
MATRIXPUBLIC void matrixMd5Update(sslMd5Context_t *ctx,
							const unsigned char *buf, unsigned long len);
MATRIXPUBLIC int32 matrixMd5Final(sslMd5Context_t *ctx, unsigned char *hash);


#ifdef USE_MD2
/*
	MD2 is provided for compatibility with V2 and older X509 certificates,
	it is known to have security problems and should not be used for any current
	development.
*/
MATRIXPUBLIC void matrixMd2Init(sslMd2Context_t *ctx);
MATRIXPUBLIC int32 matrixMd2Update(sslMd2Context_t *ctx,
						const unsigned char *buf, unsigned long len);
MATRIXPUBLIC int32 matrixMd2Final(sslMd2Context_t *ctx, unsigned char *hash);
#endif /* USE_MD2 */




#ifdef USE_RSA
MATRIXPUBLIC int32 matrixRsaEncryptPub(psPool_t *pool, sslRsaKey_t *key, 
							   unsigned char *in, int32 inlen,
							   unsigned char *out, int32 outlen);
MATRIXPUBLIC int32 matrixRsaDecryptPriv(psPool_t *pool, sslRsaKey_t *key, 
								unsigned char *in, int32 inlen,
								unsigned char *out, int32 outlen);
MATRIXPUBLIC int32 matrixRsaDecryptPub(psPool_t *pool, sslRsaKey_t *key, 
							   unsigned char *in, int32 inlen,
							   unsigned char *out, int32 outlen);
#endif /* USE_RSA */




#ifdef __cplusplus
}
#endif

#endif /* _h_MATRIX_CRYPTO */

/******************************************************************************/