mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 11:25:35 +00:00
res_stir_shaken: Initial commit and reading private key.
This commit sets up some of the initial framework for the module and adds a way to read the private key from the specified file, which will then be appended to the certificate object. This works fine for now, but eventually some other structure will likely need to be used to store all this information. Similarly, the caller_id_number is specified on the certificate config object, but in the end we will want that information to be tied to the certificate itself and read it from there. A method has been added that will retrieve the private key associated with the caller_id_number passed in. Tab completion for certificates and stores has also been added. Change-Id: Ic4bc1416fab5d6afe15a8e2d32f7ddd4e023295f
This commit is contained in:
104
res/res_stir_shaken.c
Normal file
104
res/res_stir_shaken.c
Normal file
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
* Asterisk -- An open source telephony toolkit.
|
||||
*
|
||||
* Copyright (C) 2020, Sangoma Technologies Corporation
|
||||
*
|
||||
* Kevin Harwell <kharwell@digium.com>
|
||||
*
|
||||
* See http://www.asterisk.org for more information about
|
||||
* the Asterisk project. Please do not directly contact
|
||||
* any of the maintainers of this project for assistance;
|
||||
* the project provides a web site, mailing lists and IRC
|
||||
* channels for your use.
|
||||
*
|
||||
* This program is free software, distributed under the terms of
|
||||
* the GNU General Public License Version 2. See the LICENSE file
|
||||
* at the top of the source tree.
|
||||
*/
|
||||
|
||||
/*** MODULEINFO
|
||||
<support_level>core</support_level>
|
||||
***/
|
||||
|
||||
#include "asterisk.h"
|
||||
|
||||
#include "asterisk/module.h"
|
||||
#include "asterisk/sorcery.h"
|
||||
|
||||
#include "asterisk/res_stir_shaken.h"
|
||||
#include "res_stir_shaken/stir_shaken.h"
|
||||
#include "res_stir_shaken/general.h"
|
||||
#include "res_stir_shaken/store.h"
|
||||
#include "res_stir_shaken/certificate.h"
|
||||
|
||||
static struct ast_sorcery *stir_shaken_sorcery;
|
||||
|
||||
struct ast_sorcery *ast_stir_shaken_sorcery(void)
|
||||
{
|
||||
return stir_shaken_sorcery;
|
||||
}
|
||||
|
||||
EVP_PKEY *ast_stir_shaken_get_private_key(const char *caller_id_number)
|
||||
{
|
||||
return stir_shaken_certificate_get_private_key(caller_id_number);
|
||||
}
|
||||
|
||||
static int reload_module(void)
|
||||
{
|
||||
if (stir_shaken_sorcery) {
|
||||
ast_sorcery_reload(stir_shaken_sorcery);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int unload_module(void)
|
||||
{
|
||||
stir_shaken_certificate_unload();
|
||||
stir_shaken_store_unload();
|
||||
stir_shaken_general_unload();
|
||||
|
||||
ast_sorcery_unref(stir_shaken_sorcery);
|
||||
stir_shaken_sorcery = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int load_module(void)
|
||||
{
|
||||
if (!(stir_shaken_sorcery = ast_sorcery_open())) {
|
||||
ast_log(LOG_ERROR, "stir/shaken - failed to open sorcery\n");
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
if (stir_shaken_general_load()) {
|
||||
unload_module();
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
if (stir_shaken_store_load()) {
|
||||
unload_module();
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
if (stir_shaken_certificate_load()) {
|
||||
unload_module();
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
ast_sorcery_load(ast_stir_shaken_sorcery());
|
||||
|
||||
return AST_MODULE_LOAD_SUCCESS;
|
||||
}
|
||||
|
||||
#undef AST_BUILDOPT_SUM
|
||||
#define AST_BUILDOPT_SUM ""
|
||||
|
||||
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER,
|
||||
"STIR/SHAKEN Module for Asterisk",
|
||||
.support_level = AST_MODULE_SUPPORT_CORE,
|
||||
.load = load_module,
|
||||
.unload = unload_module,
|
||||
.reload = reload_module,
|
||||
.load_pri = AST_MODPRI_CHANNEL_DEPEND - 1,
|
||||
);
|
Reference in New Issue
Block a user