?? dhparams.c
字號:
/* Copyright 2005-2006, Voltage Security, all rights reserved.
*/
#include "vibecrypto.h"
#include "environment.h"
#include "base.h"
#include "libctx.h"
#include "paramobj.h"
#include "dh.h"
#include "mpint.h"
#include "errorctx.h"
/* Gets the system params out of a parameter object.
*
* @param paramObj The object from which the params are to be extracted.
* @param getInfo The address where the function will deposit the
* pointer to the info.
* @return an int, 0 if the function completed successfully or a
* non-zero error code.
*/
static int VOLT_CALLING_CONV VoltParameterGetDHParams VOLT_PROTO_LIST ((
VtParameterObject paramObj,
Pointer *getInfo
));
int VtParameterParamDHParams (
VtParameterObject object,
Pointer info,
unsigned int flag
)
{
int status;
VoltParameterObject *obj = (VoltParameterObject *)object;
VtDHParamInfo *paramInfo = (VtDHParamInfo *)info;
VoltMpInt *primeP = (VoltMpInt *)0;
VoltMpInt *subprimeQ = (VoltMpInt *)0;
VoltMpInt *baseG = (VoltMpInt *)0;
VOLT_DECLARE_ERROR_TYPE (errorType)
VOLT_DECLARE_FNCT_LINE (fnctLine)
do
{
if (flag == VOLT_PARAM_GET_TYPE_FLAG)
{
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = VoltParameterGetDHParams (object, (Pointer *)info);
break;
}
/* Check the flag, it should be VOLT_PARAM_SET_TYPE_FLAG.
*/
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_TYPE;
if (flag != VOLT_PARAM_SET_TYPE_FLAG)
break;
/* Check the paramType of the object. It should be 0.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_SET;
if (obj->paramType != 0)
break;
/* The associated info should be a pointer to VtDHParamInfo.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_ASSOCIATED_INFO;
if (info == (Pointer)0)
break;
VOLT_SET_FNCT_LINE (fnctLine)
if ( (paramInfo->primeP.data == (unsigned char *)0) ||
(paramInfo->primeP.len == 0) ||
(paramInfo->baseG.data == (unsigned char *)0) ||
(paramInfo->baseG.len == 0) )
break;
/* If using this ParameterParam, the object must already have an
* mpCtx loaded.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_PARAM_OBJ;
if (obj->mpCtx == (VoltMpIntCtx *)0)
break;
/* Build MpInts out of the prime and base.
*/
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = obj->mpCtx->CreateMpInt ((Pointer)(obj->mpCtx), &primeP);
if (status != 0)
break;
VOLT_SET_FNCT_LINE (fnctLine)
status = obj->mpCtx->OctetStringToMpInt (
0, paramInfo->primeP.data, paramInfo->primeP.len, primeP);
if (status != 0)
break;
if ( (paramInfo->subprimeQ.data != (unsigned char *)0) &&
(paramInfo->subprimeQ.len != 0) )
{
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = obj->mpCtx->CreateMpInt ((Pointer)(obj->mpCtx), &subprimeQ);
if (status != 0)
break;
VOLT_SET_FNCT_LINE (fnctLine)
status = obj->mpCtx->OctetStringToMpInt (
0, paramInfo->subprimeQ.data, paramInfo->subprimeQ.len, subprimeQ);
if (status != 0)
break;
}
VOLT_SET_FNCT_LINE (fnctLine)
status = obj->mpCtx->CreateMpInt ((Pointer)(obj->mpCtx), &baseG);
if (status != 0)
break;
VOLT_SET_FNCT_LINE (fnctLine)
status = obj->mpCtx->OctetStringToMpInt (
0, paramInfo->baseG.data, paramInfo->baseG.len, baseG);
if (status != 0)
break;
VOLT_SET_FNCT_LINE (fnctLine)
status = VoltAddDHParametersMpInt (
obj, primeP, subprimeQ, baseG, (unsigned char *)0, 0, 0);
} while (0);
if (primeP != (VoltMpInt *)0)
obj->mpCtx->DestroyMpInt (&primeP);
if (subprimeQ != (VoltMpInt *)0)
obj->mpCtx->DestroyMpInt (&subprimeQ);
if (baseG != (VoltMpInt *)0)
obj->mpCtx->DestroyMpInt (&baseG);
/* If everything worked, return 0.
*/
if (status == 0)
{
/* Set the FIPS bit in the object type, this object is a FIPS
* object.
*/
obj->voltObject.objectType |= VOLT_OBJECT_TYPE_FIPS;
return (0);
}
/* If something went wrong, indicate that this object is not usable.
*/
obj->paramType = 0;
VOLT_LOG_ERROR_INFO (
0, object, status, 0, errorType,
(char *)0, "VtParameterParamDHParams", fnctLine, (char *)0)
return (status);
}
int VtParameterParamDHParamsFips (
VtParameterObject object,
Pointer info,
unsigned int flag
)
{
int status;
VoltParameterObject *obj = (VoltParameterObject *)object;
VoltDHParams *params;
Pointer *getInfo = (Pointer *)info;
VOLT_DECLARE_ERROR_TYPE (errorType)
VOLT_DECLARE_FNCT_LINE (fnctLine)
do
{
/* Check the flag, it should be VOLT_PARAM_GET_TYPE_FLAG. This
* Param is not allowed to set
*/
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_SET;
if (flag == VOLT_PARAM_SET_TYPE_FLAG)
break;
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_TYPE;
if (flag != VOLT_PARAM_GET_TYPE_FLAG)
break;
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_ASSOCIATED_INFO;
if (info == (Pointer)0)
break;
*getInfo = (Pointer)0;
/* Check the paramType in the object, it should contain
* VOLT_PARAM_ALG_DH.
*/
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_GET_INFO_UNAVAILABLE;
if (obj->paramType == 0)
break;
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_GET;
if ((obj->paramType & VOLT_PARAM_TYPE_MASK_ALG) != VOLT_PARAM_ALG_DH)
break;
/* Make sure this object contains params and is not set to generate.
*/
VOLT_SET_FNCT_LINE (fnctLine)
if ((obj->paramType & VOLT_PARAM_TYPE_CONTENTS) == 0)
break;
/* Are the parameters in data format? If so, we're done. (Set the
* return values.)
* Actually, make sure the FIPS values are there.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_GET_INFO_UNAVAILABLE;
if ((obj->paramType & VOLT_PARAM_TYPE_MASK_DATA) != VOLT_PARAM_TYPE_DATA)
break;
params = (VoltDHParams *)(obj->paramData);
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_GET_INFO_UNAVAILABLE;
if (params->fipsInfo.counter == 0)
break;
status = 0;
*getInfo = (Pointer)&(params->fipsInfo);
} while (0);
VOLT_LOG_ERROR_INFO_COMPARE (
status, 0, object, status, 0, errorType,
(char *)0, "VtParameterParamDHParamsFips", fnctLine, (char *)0)
return (status);
}
static int VoltParameterGetDHParams (
VtParameterObject paramObj,
Pointer *getInfo
)
{
int status;
VoltParameterObject *obj = (VoltParameterObject *)paramObj;
VoltDHParams *params;
VOLT_DECLARE_ERROR_TYPE (errorType)
VOLT_DECLARE_FNCT_LINE (fnctLine)
*getInfo = (Pointer)0;
do
{
/* Check the paramType in the object, it should contain
* VOLT_PARAM_ALG_DH.
*/
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_GET_INFO_UNAVAILABLE;
if (obj->paramType == 0)
break;
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_GET;
if ((obj->paramType & VOLT_PARAM_TYPE_MASK_ALG) != VOLT_PARAM_ALG_DH)
break;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -