156 lines
4.0 KiB
C++
Executable File
156 lines
4.0 KiB
C++
Executable File
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include "common_utils.h"
|
|
#include "common_err.h"
|
|
#include "common_algo.h"
|
|
|
|
/*去掉字符串头和尾的空格*/
|
|
static char* remove_space(char *input)
|
|
{
|
|
int header = 0;
|
|
int end = 0;
|
|
int inputlen = 0;
|
|
const char filter = ' ';
|
|
char *tmp = NULL;
|
|
|
|
if (input == NULL || input[0] == '\0') {
|
|
return NULL;
|
|
}
|
|
|
|
inputlen = strlen(input);
|
|
|
|
/*去头部空格*/
|
|
while(input[header++] == filter && header < inputlen) {
|
|
/*do nothing*/
|
|
}
|
|
|
|
end = inputlen - 1;
|
|
|
|
/*去尾部空格*/
|
|
while(input[end--] == filter && end >= (header - 1)) {
|
|
/*do nothing*/
|
|
}
|
|
|
|
tmp = (char*)malloc(inputlen + 1);
|
|
memset(tmp,0x0,inputlen + 1);
|
|
|
|
/*初始位置为header - 1,长度为(end + 1)- (header -1) + 1*/
|
|
memcpy(tmp, input + header - 1, end - header + 3);
|
|
|
|
return tmp;
|
|
}
|
|
|
|
static int set_module_params(char* k, char* v, ModuleParams *moduleparams)
|
|
{
|
|
if (IS_MODULE_TYPE(k)) {
|
|
if (moduleparams->moduletype != MODULE_INVALID_TYPE) {
|
|
return CRYPTO_MOD_TYPE_REPEATED_ERR;
|
|
}
|
|
|
|
moduleparams->moduletype = GET_MODULE_TYPE(v);
|
|
|
|
if (moduleparams->moduletype == MODULE_INVALID_TYPE) {
|
|
return CRYPTO_MOD_TYPE_INVALID_ERR;
|
|
}
|
|
} else if (IS_MODULE_LIB_PATH(k)) {
|
|
|
|
if (moduleparams->libpath[0] != '\0') {
|
|
return CRYPTO_MOD_LIBPATH_REPEATED_ERR;
|
|
}
|
|
|
|
if (v[0] == '\0' || strlen(v) >= MODULE_MAX_PATH_LEN) {
|
|
return CRYPTO_MOD_LIBPATH_INVALID_ERR;
|
|
} else {
|
|
memcpy(moduleparams->libpath, v, strlen(v));
|
|
}
|
|
} else if(IS_MODULE_CONFIG_FILE_PATH(k)) {
|
|
|
|
if (moduleparams->cfgfilepath[0] != '\0') {
|
|
return CRYPTO_MOD_CFG_PATH_REPEATED_ERR;
|
|
}
|
|
|
|
if (v[0] == '\0' || strlen(v) >= MODULE_MAX_PATH_LEN) {
|
|
return CRYPTO_MOD_CFG_PATH_INVALID_ERR;
|
|
} else {
|
|
memcpy(moduleparams->cfgfilepath, v, strlen(v));
|
|
}
|
|
} else {
|
|
return CRYPTO_MOD_UNKNOWN_PARAM_ERR;
|
|
}
|
|
|
|
return CRYPT_MOD_OK;
|
|
|
|
}
|
|
|
|
static int check_module_params(ModuleParams *moduleparams)
|
|
{
|
|
if (moduleparams->libpath[0] == '\0') {
|
|
return CRYPTO_MOD_LIBPATH_INVALID_ERR;
|
|
}
|
|
|
|
switch (moduleparams->moduletype) {
|
|
case MODULE_GDAC_CARD_TYPE:
|
|
/*光电安辰密码卡不需要配置文件*/
|
|
if (moduleparams->cfgfilepath[0] != '\0') {
|
|
return CRYPTO_MOD_PARAM_TOO_MANY_ERR;
|
|
}
|
|
break;
|
|
case MODULE_JNTA_KMS_TYPE:
|
|
/*江南天安的配置文件,需要设置为环境变量使用"TASS_GHVSM_CFG_PATH",在后面加载时自己临时设置使用*/
|
|
if (moduleparams->cfgfilepath[0] == '\0') {
|
|
return CRYPTO_MOD_CFG_PATH_INVALID_ERR;
|
|
}
|
|
break;
|
|
case MODULE_SWXA_KMS_TYPE:
|
|
/*三未信安kms使用带配置文件路径名称的接口*/
|
|
if (moduleparams->cfgfilepath[0] == '\0') {
|
|
return CRYPTO_MOD_CFG_PATH_INVALID_ERR;
|
|
}
|
|
break;
|
|
default:
|
|
return CRYPTO_MOD_TYPE_INVALID_ERR;
|
|
}
|
|
|
|
return CRYPT_MOD_OK;
|
|
}
|
|
|
|
int parse_module_params(char *paramsstring, ModuleParams *moduleparams)
|
|
{
|
|
char *p = NULL;
|
|
char *saveptr1 = NULL;
|
|
const char *split1 = ",";
|
|
const char *split2 = "=";
|
|
int ret = 0;
|
|
|
|
p = strtok_r(paramsstring, split1, &saveptr1);
|
|
|
|
while (p != NULL) {
|
|
char *q = NULL;
|
|
char *saveptr2 = NULL;
|
|
char *tmp_p = NULL;
|
|
char *tmp_ptr2 = NULL;
|
|
q = strtok_r(p, split2, &saveptr2);
|
|
|
|
tmp_p = remove_space(p);
|
|
tmp_ptr2 = remove_space(saveptr2);
|
|
|
|
ret = set_module_params(tmp_p, tmp_ptr2, moduleparams);
|
|
if (ret != CRYPT_MOD_OK) {
|
|
free(tmp_p);
|
|
free(tmp_ptr2);
|
|
return ret;
|
|
}
|
|
|
|
free(tmp_p);
|
|
free(tmp_ptr2);
|
|
|
|
q = NULL;
|
|
p = strtok_r(NULL, split1, &saveptr1);
|
|
}
|
|
|
|
return check_module_params(moduleparams);
|
|
|
|
}
|
|
|