2 * GPAC - Multimedia Framework C SDK
\r
4 * Copyright (c) Jean Le Feuvre 2000-2005
\r
5 * All rights reserved
\r
7 * This file is part of GPAC / Crypto Tools sub-project
\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
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
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
25 #ifndef _GF_CRYPT_DEV_H_
\r
26 #define _GF_CRYPT_DEV_H_
\r
32 #include <gpac/crypt.h>
\r
34 /*the samllest version of the lib: only AES-128-CTR supported*/
\r
35 #define GPAC_CRYPT_ISMA_ONLY
\r
38 #if !defined(GPAC_CRYPT_ISMA_ONLY) && defined(GPAC_READ_ONLY)
\r
39 #define GPAC_CRYPT_ISMA_ONLY
\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
47 /*private - do not use*/
\r
48 typedef struct _tag_crypt_stream
\r
50 const char *algo_name;
\r
52 const char *mode_name;
\r
55 /* Holds the algorithm's internal key */
\r
57 /* holds the mode's internal buffers */
\r
60 char *keyword_given;
\r
62 /*all below are static vars for mode and algo - sizes are in bytes*/
\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
77 u32 algo_block_size;
\r
80 u32 key_sizes[MAX_KEY_SIZES];
\r
84 Bool is_block_algo, is_block_algo_mode, is_block_mode, has_IV;
\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
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
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
109 /* Use hardware rotations.. when available */
\r
111 # define byteswap32(x) swap32(x)
\r
114 # define byteswap32(x) swap_32(x)
\r
117 # define byteswap32(x) bswap_32(x)
\r
119 # define byteswap32(x) ((rotl32(x, 8) & 0x00ff00ff) | (rotr32(x, 8) & 0xff00ff00))
\r
125 # define byteswap16(x) swap16(x)
\r
128 # define byteswap16(x) swap_16(x)
\r
131 # define byteswap16(x) bswap_16(x)
\r
133 # define byteswap16(x) ((rotl16(x, 8) & 0x00ff) | (rotr16(x, 8) & 0xff00))
\r
139 void memxor(unsigned char *o1, unsigned char *o2, int length)
\r
143 for (i = 0; i < length; i++) {
\r
150 #define Bzero(x, y) memset(x, 0, y)
\r
157 #endif /*_GF_CRYPT_DEV_H_*/
\r