blob: 9a0ddd024ee0b2b7eb2c2352da922e9443edd930 [file] [edit]
/*
* GPAC - Multimedia Framework C SDK
*
* Authors: Jean Le Feuvre
* Copyright (c) Telecom ParisTech 2000-2018
* All rights reserved
*
* This file is part of GPAC / crypto lib 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.
*
*/
#include <gpac/internal/crypt_dev.h>
GF_EXPORT
GF_Crypt *gf_crypt_open(GF_CRYPTO_ALGO algorithm, GF_CRYPTO_MODE mode)
{
GF_Crypt *td;
GF_Err e;
GF_SAFEALLOC(td, GF_Crypt);
if (td == NULL) return NULL;
#ifdef GPAC_HAS_SSL
e = gf_crypt_open_open_openssl(td, mode);
#else
e = gf_crypt_open_open_tinyaes(td, mode);
#endif
if (e != GF_OK) {
gf_free(td);
return NULL;
}
return td;
}
GF_EXPORT
void gf_crypt_close(GF_Crypt *td)
{
if (!td) return;
td->_deinit_crypt(td);
gf_free(td->context);
gf_free(td);
}
GF_EXPORT
GF_Err gf_crypt_set_key(GF_Crypt *td, void *key)
{
td->_set_key(td, key);
return GF_OK;
}
GF_EXPORT
GF_Err gf_crypt_set_IV(GF_Crypt *td, const void *iv, u32 size)
{
if (!td) return GF_BAD_PARAM;
return td->_set_state(td, (void *)iv, size);
}
GF_EXPORT
GF_Err gf_crypt_get_IV(GF_Crypt *td, void *iv, u32 *size)
{
if (!td) return GF_BAD_PARAM;
return td->_get_state(td, iv, size);
}
GF_EXPORT
GF_Err gf_crypt_init(GF_Crypt *td, void *key, const void *IV)
{
GF_Err e;
e = td->_init_crypt(td, key, IV);
if (e != GF_OK) gf_crypt_close(td);
//need for openssl we have 2 passes init
td->_set_key(td, key);
return e;
}
GF_EXPORT
GF_Err gf_crypt_encrypt(GF_Crypt *td, void *plaintext, u32 len)
{
if (!td) return GF_BAD_PARAM;
return td->_crypt(td, plaintext, len);
}
GF_EXPORT
GF_Err gf_crypt_decrypt(GF_Crypt *td, void *ciphertext, u32 len)
{
if (!td) return GF_BAD_PARAM;
if (!len) return GF_OK;
return td->_decrypt(td, ciphertext, len);
}