OSDN Git Service

add tstools.
[rec10/rec10-git.git] / tstools / DtsEdit / src / gpac / internal / crypt_dev.h
1 /*\r
2  *                      GPAC - Multimedia Framework C SDK\r
3  *\r
4  *                      Copyright (c) Jean Le Feuvre 2000-2005\r
5  *                                      All rights reserved\r
6  *\r
7  *  This file is part of GPAC / Crypto Tools sub-project\r
8  *\r
9  *  GPAC is free software; you can redistribute it and/or modify\r
10  *  it under the terms of the GNU Lesser General Public License as published by\r
11  *  the Free Software Foundation; either version 2, or (at your option)\r
12  *  any later version.\r
13  *   \r
14  *  GPAC is distributed in the hope that it will be useful,\r
15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
17  *  GNU Lesser General Public License for more details.\r
18  *   \r
19  *  You should have received a copy of the GNU Lesser General Public\r
20  *  License along with this library; see the file COPYING.  If not, write to\r
21  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
22  *\r
23  */\r
24 \r
25 #ifndef _GF_CRYPT_DEV_H_\r
26 #define _GF_CRYPT_DEV_H_\r
27 \r
28 #ifdef __cplusplus\r
29 extern "C" {\r
30 #endif\r
31 \r
32 #include <gpac/crypt.h>\r
33 \r
34 /*the samllest version of the lib: only AES-128-CTR supported*/\r
35 #define GPAC_CRYPT_ISMA_ONLY\r
36 \r
37 \r
38 #if !defined(GPAC_CRYPT_ISMA_ONLY) && defined(GPAC_READ_ONLY)\r
39 #define GPAC_CRYPT_ISMA_ONLY\r
40 #endif\r
41 \r
42 typedef void (*mcryptfunc)(void*,void*);\r
43 typedef GF_Err (*mcrypt_setkeystream)(void *, const void *, int, const void *, int);\r
44 typedef GF_Err (*mcrypt_setkeyblock) (void *, const void *, int);\r
45 typedef GF_Err (*mcrypt_docrypt) (void *, const void *, int);\r
46 \r
47 /*private - do not use*/\r
48 typedef struct _tag_crypt_stream\r
49 {\r
50         const char *algo_name;\r
51         u32 algo_version;\r
52         const char *mode_name;\r
53         u32 mode_version;\r
54 \r
55         /* Holds the algorithm's internal key */\r
56         char *akey;\r
57         /* holds the mode's internal buffers */\r
58         char *abuf;\r
59         /* holds the key */\r
60         char *keyword_given;\r
61 \r
62         /*all below are static vars for mode and algo - sizes are in bytes*/\r
63 \r
64         /*modes access*/\r
65         GF_Err (*_init_mcrypt) (void *, void *, int, void *, int);\r
66         void (*_end_mcrypt) (void *);\r
67         GF_Err (*_mcrypt) (void *, void *, int, int, void *, mcryptfunc func, mcryptfunc func2);\r
68         GF_Err (*_mdecrypt) (void *, void *, int, int, void *, mcryptfunc func, mcryptfunc func2);\r
69         GF_Err (*_mcrypt_set_state) (void *, void *, int );\r
70         GF_Err (*_mcrypt_get_state) (void *, void *, int *);\r
71         /*algo access*/\r
72         void *a_encrypt;\r
73         void *a_decrypt;\r
74         void *a_set_key;\r
75 \r
76         u32 algo_size;\r
77         u32 algo_block_size;\r
78         u32 key_size;\r
79         u32 num_key_sizes;\r
80         u32 key_sizes[MAX_KEY_SIZES];\r
81         u32 algo_IV_size;\r
82 \r
83         u32 mode_size;\r
84         Bool is_block_algo, is_block_algo_mode, is_block_mode, has_IV;\r
85 } GF_CryptStream;\r
86 \r
87 /*modes*/\r
88 void gf_crypt_register_cbc(GF_Crypt *td);\r
89 void gf_crypt_register_cfb(GF_Crypt *td);\r
90 void gf_crypt_register_ctr(GF_Crypt *td);\r
91 void gf_crypt_register_ecb(GF_Crypt *td);\r
92 void gf_crypt_register_ncfb(GF_Crypt *td);\r
93 void gf_crypt_register_nofb(GF_Crypt *td);\r
94 void gf_crypt_register_ofb(GF_Crypt *td);\r
95 void gf_crypt_register_stream(GF_Crypt *td);\r
96 /*algos*/\r
97 void gf_crypt_register_des(GF_Crypt *td);\r
98 void gf_crypt_register_3des(GF_Crypt *td);\r
99 void gf_crypt_register_rijndael_128(GF_Crypt *td);\r
100 void gf_crypt_register_rijndael_192(GF_Crypt *td);\r
101 void gf_crypt_register_rijndael_256(GF_Crypt *td);\r
102 \r
103 \r
104 #define rotl32(x,n)   (((x) << ((u32)(n))) | ((x) >> (32 - (u32)(n))))\r
105 #define rotr32(x,n)   (((x) >> ((u32)(n))) | ((x) << (32 - (u32)(n))))\r
106 #define rotl16(x,n)   (((x) << ((u16)(n))) | ((x) >> (16 - (u16)(n))))\r
107 #define rotr16(x,n)   (((x) >> ((u16)(n))) | ((x) << (16 - (u16)(n))))\r
108 \r
109 /* Use hardware rotations.. when available */\r
110 #ifdef swap32\r
111 # define byteswap32(x) swap32(x)\r
112 #else\r
113 # ifdef swap_32\r
114 #  define byteswap32(x) swap_32(x)\r
115 # else\r
116 #  ifdef bswap_32\r
117 #   define byteswap32(x) bswap_32(x)\r
118 #  else\r
119 #   define byteswap32(x)        ((rotl32(x, 8) & 0x00ff00ff) | (rotr32(x, 8) & 0xff00ff00))\r
120 #  endif\r
121 # endif\r
122 #endif\r
123 \r
124 #ifdef swap16\r
125 # define byteswap16(x) swap16(x)\r
126 #else\r
127 # ifdef swap_16\r
128 #  define byteswap16(x) swap_16(x)\r
129 # else\r
130 #  ifdef bswap_16\r
131 #   define byteswap16(x) bswap_16(x)\r
132 #  else\r
133 #   define byteswap16(x)        ((rotl16(x, 8) & 0x00ff) | (rotr16(x, 8) & 0xff00))\r
134 #  endif\r
135 # endif\r
136 #endif\r
137 \r
138 GFINLINE static\r
139 void memxor(unsigned char *o1, unsigned char *o2, int length)\r
140 {\r
141         int i;\r
142 \r
143         for (i = 0; i < length; i++) {\r
144                 o1[i] ^= o2[i];\r
145         }\r
146         return;\r
147 }\r
148 \r
149 \r
150 #define Bzero(x, y) memset(x, 0, y)\r
151 \r
152 \r
153 #ifdef __cplusplus\r
154 }\r
155 #endif\r
156 \r
157 #endif  /*_GF_CRYPT_DEV_H_*/\r
158 \r