📄 sfparams.c
字号:
do
{
/* This param can GetParam only.
*/
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_SET;
if (flag == VOLT_SECURE_FILE_SET_TYPE_FLAG)
break;
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_TYPE;
if (flag != VOLT_SECURE_FILE_GET_TYPE_FLAG)
break;
/* Only objects built to read can get this info.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_SECURE_FILE_OBJ;
if ((obj->state & VOLT_SECURE_MAIL_STATE_READ) == 0)
break;
getInfo = (Pointer *)info;
/* The object must be done reading a message.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_GET_INFO_UNAVAILABLE;
if (obj->state != VOLT_SECURE_FILE_STATE_READ_COMPLETE)
break;
/* Get the info out of the P7 object.
*/
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = VtGetPkcs7Param (
obj->p7SignedData, VtPkcs7ParamSigningTime, getInfo);
} while (0);
VOLT_LOG_ERROR_INFO_COMPARE (
status, 0, secureFileObj, status, 0, errorType,
(char *)0, "VtSecureFileParamMessageTime", fnctLine, (char *)0)
return (status);
}
int VtSecureFileParamContentType (
VtSecureFileObject secureFileObj,
Pointer info,
unsigned int flag
)
{
int status;
unsigned int contentLen, labelLen, index;
Pointer *getInfo;
VoltSecureMailObject *obj = (VoltSecureMailObject *)secureFileObj;
VoltLibCtx *libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
VoltSecureMailWriteCtx *writeCtx = (VoltSecureMailWriteCtx *)0;
VoltSecureMailReadCtx *readCtx = (VoltSecureMailReadCtx *)0;
VtUtf8StringList *descriptors;
char *found;
char *labelName = "content-type: ";
VOLT_DECLARE_ERROR_TYPE (errorType)
VOLT_DECLARE_FNCT_LINE (fnctLine)
if ((obj->state & VOLT_SECURE_MAIL_STATE_WRITE) != 0)
writeCtx = (VoltSecureMailWriteCtx *)(obj->localCtx);
else
readCtx = (VoltSecureMailReadCtx *)(obj->localCtx);
do
{
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
if (flag == VOLT_SECURE_FILE_SET_TYPE_FLAG)
{
/* The state must be VOLT_SECURE_MAIL_STATE_WRITE_SET.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_CALL_ORDER;
if (obj->state != VOLT_SECURE_MAIL_STATE_WRITE_SET)
break;
/* Make sure the obj does not yet have the contentType set.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_SECURE_FILE_OBJ;
if (obj->contentInfo.data != (unsigned char *)0)
break;
/* The info should be an unsigned char *.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_ASSOCIATED_INFO;
if (info == (Pointer)0)
break;
contentLen = Z2Strlen (info);
/* Build a buffer with the contentType. Add a NULL-terminating
* character.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_MEMORY;
obj->contentInfo.data = (unsigned char *)Z3Malloc (contentLen + 1);
if (obj->contentInfo.data == (unsigned char *)0)
break;
Z2Memcpy (obj->contentInfo.data, info, contentLen);
obj->contentInfo.data[contentLen] = 0;
obj->contentInfo.len = contentLen;
status = 0;
break;
}
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_TYPE;
if (flag != VOLT_SECURE_FILE_GET_TYPE_FLAG)
break;
getInfo = (Pointer *)info;
/* If this is an object to write, the content-type is in the
* contentInfo.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_GET_INFO_UNAVAILABLE;
if (writeCtx != (VoltSecureMailWriteCtx *)0)
{
if (obj->contentInfo.data == (unsigned char *)0)
break;
*getInfo = (Pointer)(obj->contentInfo.data);
status = 0;
break;
}
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = VtGetSecureFileParam (
secureFileObj, VtSecureFileParamContentDescriptors,
(Pointer *)&descriptors);
if (status != 0)
break;
/* Search through the list, find the string that begins
* "content-type: ".
*/
labelLen = 14;
found = (char *)0;
for (index = 0; index < descriptors->count; ++index)
{
found = Strstr (
descriptors->utf8Strings[index], labelName, (VtLibCtx)libCtx);
if (found != (char *)0)
break;
}
/* If we went through the list and did not find content-type, the
* info is unavailable.
*/
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_GET_INFO_UNAVAILABLE;
if (found == (char *)0)
break;
/* Find the semicolon.
*/
labelName = found + labelLen;
labelLen = Z2Strlen (labelName);
found = Strchr (labelName, ';', (VtLibCtx)libCtx);
if (found != (char *)0)
labelLen = (unsigned int)found - (unsigned int)labelName;
/* Store the contentType in the contentInfo.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_MEMORY;
obj->contentInfo.data = (unsigned char *)Z2Realloc (
obj->contentInfo.data, labelLen + 1);
if (obj->contentInfo.data == (unsigned char *)0)
break;
Z2Memcpy (obj->contentInfo.data, labelName, labelLen);
obj->contentInfo.data[labelLen] = 0;
*getInfo = (Pointer)(obj->contentInfo.data);
status = 0;
} while (0);
VOLT_LOG_ERROR_INFO_COMPARE (
status, 0, secureFileObj, status, 0, errorType,
(char *)0, "VtSecureFileParamContentType", fnctLine, (char *)0)
return (status);
}
int VtSecureFileParamMessageType (
VtSecureFileObject secureFileObj,
Pointer info,
unsigned int flag
)
{
int status;
unsigned int value;
VoltSecureMailObject *obj = (VoltSecureMailObject *)secureFileObj;
VoltSecureMailWriteCtx *writeCtx;
VOLT_DECLARE_FNCT_LINE (fnctLine)
do
{
/* This Param cannot Get info.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_GET;
if (flag == VOLT_SECURE_FILE_GET_TYPE_FLAG)
break;
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_TYPE;
if (flag != VOLT_SECURE_FILE_SET_TYPE_FLAG)
break;
/* The SecureFile object must be set to write.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_SECURE_FILE_OBJ;
if ((obj->state & VOLT_SECURE_MAIL_STATE_WRITE) == 0)
break;
/* The associatedInfo must be a pointer to an unsigned int.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_ASSOCIATED_INFO;
if (info == (Pointer)0)
break;
value = *((unsigned int *)info);
writeCtx = (VoltSecureMailWriteCtx *)(obj->localCtx);
if (value == VT_SECURE_FILE_TYPE_FILE)
{
obj->formatType = VOLT_MESSAGE_FORMAT_SECURE_FILE;
writeCtx->itemArray[VOLT_WRITE_SM_ITEM_BEGIN_MSG].len =
VOLT_SECURE_FILE_BEGIN_MSG_LEN;
status = 0;
break;
}
VOLT_SET_FNCT_LINE (fnctLine)
if (value != VT_SECURE_FILE_TYPE_ATTACHMENT)
break;
obj->formatType = VOLT_MESSAGE_FORMAT_SECURE_MAIL_ATTACH;
writeCtx->itemArray[VOLT_WRITE_SM_ITEM_BEGIN_MSG].len = 0;
status = 0;
} while (0);
VOLT_LOG_ERROR_INFO_COMPARE (
status, 0, secureFileObj, status, 0, VT_ERROR_TYPE_PRIMARY,
(char *)0, "VtSecureFileParamMessageType", fnctLine, (char *)0)
return (status);
}
#if VT_64_BIT_LENGTH == 64
int VtGetOutputLen64ImplSecureFile (
VtLibCtx libraryCtx,
Pointer associatedInfo,
VtUInt64 *totalOutputLen,
unsigned int flag
)
{
int status;
unsigned int len;
VoltSecureMailObject *obj;
VOLT_DECLARE_ERROR_TYPE (errorType)
VOLT_DECLARE_FNCT_LINE (fnctLine)
do
{
/* This Param must be called by VtGetTotalOutputLen64.
*/
VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_IMPL;
if (flag != VOLT_GET_OUTPUT_LEN_64_TYPE_FLAG)
break;
/* The associated info is supposed to be a SecureFile object.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_ASSOCIATED_INFO;
if (associatedInfo == (Pointer)0)
break;
obj = (VoltSecureMailObject *)associatedInfo;
/* Paranoid programming check.
*/
VOLT_SET_FNCT_LINE (fnctLine)
if (VOLT_OBJECT_TYPE_NOT_EQUAL (obj, VOLT_OBJECT_TYPE_SECURE_FILE))
break;
/* The object should be built to write, and the state must be INIT.
*/
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_INVALID_SECURE_FILE_OBJ;
if ((obj->state & VOLT_SECURE_MAIL_STATE_WRITE) == 0)
break;
VOLT_SET_FNCT_LINE (fnctLine)
status = VT_ERROR_GET_INFO_UNAVAILABLE;
if ((obj->state & VOLT_SECURE_MAIL_STATE_INIT) == 0)
break;
/* The object must be set with the data length.
*/
VOLT_SET_FNCT_LINE (fnctLine)
if (obj->dataLen64 == (VtUInt64)0)
break;
/* If the outputLen64 field is not set, call WriteUpdate to set it.
*/
if (obj->outputLen64 == (VtUInt64)0)
{
VOLT_SET_ERROR_TYPE (errorType, 0)
VOLT_SET_FNCT_LINE (fnctLine)
status = VtSecureFileWriteUpdate (
(VtSecureFileObject)obj, (VtRandomObject)0, (unsigned char *)0, 1,
(unsigned char *)0, 0, &len);
if (status == 0)
status = VT_ERROR_GENERAL;
if (status != VT_ERROR_BUFFER_TOO_SMALL)
break;
}
*totalOutputLen = obj->outputLen64;
status = 0;
} while (0);
VOLT_LOG_ERROR_INFO_COMPARE (
status, libraryCtx, 0, status, 0, errorType,
(char *)0, "VtGetOutputLen64ImplSecureFile", fnctLine, (char *)0)
return (status);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -