/* silccrypto.c Author: Pekka Riikonen Copyright (C) 2007 Pekka Riikonen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program 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 General Public License for more details. */ #include "silc.h" #ifndef SILC_SYMBIAN SilcStack crypto_stack = NULL; /* Crypto Toolkit's global stack */ #endif /* SILC_SYMBIAN */ /* Init crypto */ SilcBool silc_crypto_init(SilcStack stack) { SILC_LOG_DEBUG(("Initializing crypto")); #ifndef SILC_SYMBIAN /* Stack allocation is allowed to fail */ crypto_stack = silc_stack_alloc(0, stack); #endif /* SILC_SYMBIAN */ /* Init crypto library */ if (!silc_cipher_register_default()) { SILC_LOG_ERROR(("Error registering ciphers")); goto err; } if (!silc_hash_register_default()) { SILC_LOG_ERROR(("Error registering hash functions")); goto err; } if (!silc_hmac_register_default()) { SILC_LOG_ERROR(("Error registering hash HMACs")); goto err; } if (!silc_pkcs_register_default()) { SILC_LOG_ERROR(("Error registering hash PKCSs")); goto err; } #ifdef SILC_DIST_ACC /* Initialize accelerator library */ #endif /* SILC_DIST_ACC */ return TRUE; err: silc_crypto_uninit(); return FALSE; } /* Uninit crypto */ void silc_crypto_uninit(void) { SILC_LOG_DEBUG(("Uninitializing crypto")); #ifdef SILC_DIST_ACC /* Uninit accelerator library */ #endif /* SILC_DIST_ACC */ /* Uninit crypto library */ silc_pkcs_unregister_all(); silc_hmac_unregister_all(); silc_hash_unregister_all(); silc_cipher_unregister_all(); #ifndef SILC_SYMBIAN silc_stack_free(crypto_stack); #endif /* SILC_SYMBIAN */ } /* Return stack */ SilcStack silc_crypto_stack(void) { #ifndef SILC_SYMBIAN return crypto_stack; #else return NULL; #endif /* SILC_SYMBIAN */ }