📄 rlistparams.c
字号:
/* Copyright 2003-2006, Voltage Security, all rights reserved.
*/
#include "vibe.h"
#include "environment.h"
#include "base.h"
#include "libctx.h"
#include "recipinfo.h"
#include "p7obj.h"
#include "idobj.h"
#include "errorctx.h"
int VtRecipientInfoListParamSecretValue (
VtRecipientInfoList recipInfoList,
Pointer info,
unsigned int flag
)
{
int status;
VoltRecipientInfoList *obj = (VoltRecipientInfoList *)recipInfoList;
VtItem *secretData;
Pointer *getInfo;
VOLT_DECLARE_ERROR_TYPE (errorType)
VOLT_DECLARE_FNCT_LINE (fnctLine)
do
{
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
if (flag == VOLT_RECIP_INFO_LIST_GET_TYPE_FLAG)
{
/* Get the info out of the obj, if it's there.
*/
status = 0;
getInfo = (Pointer *)info;
*getInfo = (Pointer)&(obj->secretValue);
if (obj->secretValue.data != (unsigned char *)0)
break;
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_GET_INFO_UNAVAILABLE;
break;
}
/* Check the args.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_TYPE;
if (flag != VOLT_RECIP_INFO_LIST_SET_TYPE_FLAG)
break;
/* If there's already a secret value in this object, error.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_SET;
if (obj->secretValue.data != (unsigned char *)0)
break;
/* The associatedInfo must be a VtItem.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_ASSOCIATED_INFO;
if (info == (Pointer)0)
break;
VOLT_SET_FNCT_LINE (fnctLine)
secretData = (VtItem *)info;
if ( (secretData->data == (unsigned char *)0) || (secretData->len == 0) )
break;
/* Copy the data.
*/
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = VoltCopyItemDataAlloc (
obj->voltObject.libraryCtx, VOLT_MEMORY_SENSITIVE, 0, secretData,
&(obj->secretValue));
} while (0);
VOLT_LOG_ERROR_INFO_COMPARE (
status, 0, recipInfoList, status, 0, errorType,
(char *)0, "VtRecipientInfoListParamSecretValue", fnctLine, (char *)0)
return (status);
}
int VtRecipientInfoListParamSymmetricAlgorithm (
VtRecipientInfoList recipInfoList,
Pointer info,
unsigned int flag
)
{
int status;
unsigned int coderCount, algorithm, index;
VoltRecipientInfoList *obj = (VoltRecipientInfoList *)recipInfoList;
VoltLibCtx *libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
VtSetAlgIdInfo *setAlgIdInfo;
VtDerCoder **coders;
VtItem algIdItem;
VOLT_DECLARE_ERROR_TYPE (errorType)
VOLT_DECLARE_FNCT_LINE (fnctLine)
do
{
/* This param can Set only.
*/
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_GET;
if (flag == VOLT_RECIP_INFO_LIST_GET_TYPE_FLAG)
break;
/* Check the args.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_TYPE;
if (flag != VOLT_RECIP_INFO_LIST_SET_TYPE_FLAG)
break;
/* If there's already an algID in this object, delete it.
*/
if (obj->symAlgID.data != (unsigned char *)0)
{
Z2Free (obj->symAlgID.data);
obj->symAlgID.data = (unsigned char *)0;
obj->symAlgID.len = 0;
obj->SymAlg = (VtDerCoder *)0;
}
/* The associated info must be VtSetAlgIdInfo.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_ASSOCIATED_INFO;
if (info == (Pointer)0)
break;
setAlgIdInfo = (VtSetAlgIdInfo *)info;
coders = setAlgIdInfo->derCoders;
coderCount = setAlgIdInfo->derCoderCount;
VOLT_SET_FNCT_LINE (fnctLine)
if ( (setAlgIdInfo->berEncoding == (unsigned char *)0) ||
(setAlgIdInfo->maxEncodingLen == 0) )
break;
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = VoltCheckSupportObjects (
obj->voltObject.libraryCtx, (VtPolicyCtx *)0, (VtStorageCtx *)0,
(VtTransportCtx *)0, (VtCertVerifyCtx *)0, (VtVerifyFailureList *)0,
(VtRandomObject *)0, &coders, &coderCount,
(VtIdentitySchemaDecode ***)0, (unsigned int *)0);
if (status != 0)
break;
/* Make sure the algID is valid and that it is a symmetric alg.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VoltGetAlgorithmFromBer (
obj->voltObject.libraryCtx, setAlgIdInfo->berEncoding,
setAlgIdInfo->maxEncodingLen, coders, coderCount, &algorithm, &index);
if (status != 0)
break;
/* The alg must be a symmetric cipher.
*/
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_ASSOCIATED_INFO;
if ( (algorithm < VT_ALG_ID_MIN_SYM_CIPHER) ||
(algorithm > VT_ALG_ID_MAX_SYM_CIPHER) )
break;
/* Copy the algID.
*/
algIdItem.data = setAlgIdInfo->berEncoding;
algIdItem.len = setAlgIdInfo->maxEncodingLen;
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = VoltCopyItemDataAlloc (
obj->voltObject.libraryCtx, 0, 0, &algIdItem, &(obj->symAlgID));
if (status != 0)
break;
obj->SymAlg = coders[index];
} while (0);
VOLT_LOG_ERROR_INFO_COMPARE (
status, 0, recipInfoList, status, 0, errorType,
(char *)0, "VtRecipientInfoListParamSymmetricAlgorithm", fnctLine, (char *)0)
return (status);
}
int VtRecipientInfoListParamSymmetricAlgId (
VtRecipientInfoList recipInfoList,
Pointer info,
unsigned int flag
)
{
int status;
VoltRecipientInfoList *obj = (VoltRecipientInfoList *)recipInfoList;
Pointer *getInfo;
VOLT_DECLARE_FNCT_LINE (fnctLine)
do
{
/* This param can Get only.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_SET;
if (flag == VOLT_RECIP_INFO_LIST_SET_TYPE_FLAG)
break;
/* Check the args.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_TYPE;
if (flag != VOLT_RECIP_INFO_LIST_GET_TYPE_FLAG)
break;
getInfo = (Pointer *)info;
/* If there's already no algID in this object, we're not able to
* return anything.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_GET_INFO_UNAVAILABLE;
if (obj->symAlgID.data == (unsigned char *)0)
break;
*getInfo = (Pointer)&(obj->symAlgID);
status = 0;
} while (0);
VOLT_LOG_ERROR_INFO_COMPARE (
status, 0, recipInfoList, status, 0, VT_ERROR_TYPE_PRIMARY,
(char *)0, "VtRecipientInfoListParamSymmetricAlgID", fnctLine, (char *)0)
return (status);
}
int VtRecipientInfoListParamSymmetricKey (
VtRecipientInfoList recipInfoList,
Pointer info,
unsigned int flag
)
{
int status;
VoltRecipientInfoList *obj = (VoltRecipientInfoList *)recipInfoList;
Pointer *getInfo;
VOLT_DECLARE_FNCT_LINE (fnctLine)
do
{
/* This Param can Get only.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_SET;
if (flag == VOLT_RECIP_INFO_LIST_SET_TYPE_FLAG)
break;
/* Check the args.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_TYPE;
if (flag != VOLT_RECIP_INFO_LIST_GET_TYPE_FLAG)
break;
/* Get the info out of the obj, if it's there.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_GET_INFO_UNAVAILABLE;
if (obj->symKeyData.data == (unsigned char *)0)
break;
getInfo = (Pointer *)info;
*getInfo = (Pointer)&(obj->symKeyData);
status = 0;
} while (0);
VOLT_LOG_ERROR_INFO_COMPARE (
status, 0, recipInfoList, status, 0, VT_ERROR_TYPE_PRIMARY,
(char *)0, "VtRecipientInfoListParamSymmetricKey", fnctLine, (char *)0)
return (status);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -