📄 dsapgtype.c
字号:
/* Copyright 2003-2004, Voltage Security, all rights reserved.
*/
#include "vibecrypto.h"
#include "environment.h"
#include "base.h"
#include "libctx.h"
#include "paramobj.h"
#include "dsa.h"
#include "mpint.h"
#include "random.h"
#include "errorctx.h"
int VtParamGenImplDSAParams (
VtParameterObject object,
Pointer info,
unsigned int flag,
VtRandomObject random
)
{
int status;
unsigned int primeSizeBits;
VoltParameterObject *obj = (VoltParameterObject *)object;
VOLT_DECLARE_ERROR_TYPE (errorType)
VOLT_DECLARE_FNCT_LINE (fnctLine)
do
{
/* 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 an unsigend int.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_ASSOCIATED_INFO;
if (info == (Pointer)0)
break;
primeSizeBits = *((unsigned int *)info);
/* Make sure it's a valid length.
*/
VOLT_SET_FNCT_LINE (fnctLine)
if (primeSizeBits != 1024)
break;
/* If using this ParamGenImpl, 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;
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = SetObjectDSAParamGen (obj, primeSizeBits);
} while (0);
/* 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 (
obj->voltObject.libraryCtx, status, errorType, fnctLine,
"VtParamGenImplDSAParams", (char *)0)
return (status);
}
int SetObjectDSAParamGen (
VoltParameterObject *obj,
unsigned int primeSizeBits
)
{
int status;
unsigned int bufferSize;
unsigned char *buffer = (unsigned char *)0;
VoltLibCtx *libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
VoltDsaParamGenCtx *dsaGenCtx;
VOLT_DECLARE_FNCT_LINE (fnctLine)
do
{
/* Allocate enough space for a DsaParamGenCtx.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_MEMORY;
bufferSize = sizeof (VoltDsaParamGenCtx);
buffer = (unsigned char *)Z2Malloc (bufferSize, 0);
if (buffer == (unsigned char *)0)
break;
Z2Memset (buffer, 0, bufferSize);
/* Locate the context.
*/
dsaGenCtx = (VoltDsaParamGenCtx *)buffer;
/* Populate the context.
*/
dsaGenCtx->primeSizeBits = primeSizeBits;
obj->paramType = VOLT_PARAM_TYPE_GENERATE | VOLT_PARAM_ALG_DSA;
obj->GenerateParameters = DSAGenerateParameters;
obj->localGenerateCtx = (Pointer)dsaGenCtx;
obj->LocalGenerateCtxDestroy = VoltSimpleCtxDestroy;
status = 0;
} while (0);
/* If everything worked, return 0.
*/
if (status == 0)
return (0);
/* If something went wrong, destroy anything we created and indicate
* that this object is not usable.
*/
if (buffer != (unsigned char *)0)
Z2Free (buffer);
obj->paramType = 0;
VOLT_LOG_ERROR (
(VtLibCtx)libCtx, status, VT_ERROR_TYPE_PRIMARY, fnctLine,
"SetObjectDSAParamGen", (char *)0)
return (status);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -