%PDF- %PDF-
Direktori : /data/old/usr/local/include/gpac/internal/ |
Current File : //data/old/usr/local/include/gpac/internal/crypt_dev.h |
/* * GPAC - Multimedia Framework C SDK * * Authors: Jean Le Feuvre * Copyright (c) Telecom ParisTech 2000-2012 * All rights reserved * * This file is part of GPAC / Crypto Tools sub-project * * GPAC is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GPAC is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * */ #ifndef _GF_CRYPT_DEV_H_ #define _GF_CRYPT_DEV_H_ #ifdef __cplusplus extern "C" { #endif #include <gpac/crypt.h> #ifndef GPAC_DISABLE_MCRYPT /*the samllest version of the lib: only AES-128-CTR and AES-CBC supported*/ #define GPAC_CRYPT_ISMA_ONLY typedef void (*mcryptfunc)(void*,void*); typedef GF_Err (*mcrypt_setkeystream)(void *, const void *, int, const void *, int); typedef GF_Err (*mcrypt_setkeyblock) (void *, const void *, int); typedef GF_Err (*mcrypt_docrypt) (void *, const void *, int); /*private - do not use*/ typedef struct _tag_crypt_stream { const char *algo_name; u32 algo_version; const char *mode_name; u32 mode_version; /* Holds the algorithm's internal key */ char *akey; /* holds the mode's internal buffers */ char *abuf; /* holds the key */ char *keyword_given; /*all below are static vars for mode and algo - sizes are in bytes*/ /*modes access*/ GF_Err (*_init_mcrypt) (void *, void *, int, void *, int); void (*_end_mcrypt) (void *); GF_Err (*_mcrypt) (void *, void *, int, int, void *, mcryptfunc func, mcryptfunc func2); GF_Err (*_mdecrypt) (void *, void *, int, int, void *, mcryptfunc func, mcryptfunc func2); GF_Err (*_mcrypt_set_state) (void *, void *, int ); GF_Err (*_mcrypt_get_state) (void *, void *, int *); /*algo access*/ void *a_encrypt; void *a_decrypt; void *a_set_key; u32 algo_size; u32 algo_block_size; u32 key_size; u32 num_key_sizes; u32 key_sizes[MAX_KEY_SIZES]; u32 algo_IV_size; u32 mode_size; Bool is_block_algo, is_block_algo_mode, is_block_mode, has_IV; } GF_CryptStream; /*modes*/ void gf_crypt_register_cbc(GF_Crypt *td); void gf_crypt_register_cfb(GF_Crypt *td); void gf_crypt_register_ctr(GF_Crypt *td); void gf_crypt_register_ecb(GF_Crypt *td); void gf_crypt_register_ncfb(GF_Crypt *td); void gf_crypt_register_nofb(GF_Crypt *td); void gf_crypt_register_ofb(GF_Crypt *td); void gf_crypt_register_stream(GF_Crypt *td); /*algos*/ void gf_crypt_register_des(GF_Crypt *td); void gf_crypt_register_3des(GF_Crypt *td); void gf_crypt_register_rijndael_128(GF_Crypt *td); void gf_crypt_register_rijndael_192(GF_Crypt *td); void gf_crypt_register_rijndael_256(GF_Crypt *td); #define rotl32(x,n) (((x) << ((u32)(n))) | ((x) >> (32 - (u32)(n)))) #define rotr32(x,n) (((x) >> ((u32)(n))) | ((x) << (32 - (u32)(n)))) #define rotl16(x,n) (((x) << ((u16)(n))) | ((x) >> (16 - (u16)(n)))) #define rotr16(x,n) (((x) >> ((u16)(n))) | ((x) << (16 - (u16)(n)))) /* Use hardware rotations.. when available */ #ifdef swap32 # define byteswap32(x) swap32(x) #else # ifdef swap_32 # define byteswap32(x) swap_32(x) # else # ifdef bswap_32 # define byteswap32(x) bswap_32(x) # else # define byteswap32(x) ((rotl32(x, 8) & 0x00ff00ff) | (rotr32(x, 8) & 0xff00ff00)) # endif # endif #endif #ifdef swap16 # define byteswap16(x) swap16(x) #else # ifdef swap_16 # define byteswap16(x) swap_16(x) # else # ifdef bswap_16 # define byteswap16(x) bswap_16(x) # else # define byteswap16(x) ((rotl16(x, 8) & 0x00ff) | (rotr16(x, 8) & 0xff00)) # endif # endif #endif GFINLINE static void memxor(unsigned char *o1, unsigned char *o2, int length) { int i; for (i = 0; i < length; i++) { o1[i] ^= o2[i]; } return; } #define Bzero(x, y) memset(x, 0, y) #endif /*GPAC_DISABLE_MCRYPT*/ #ifdef __cplusplus } #endif #endif /*_GF_CRYPT_DEV_H_*/