⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sfparams.c

📁 IBE是一种非对称密码技术
💻 C
📖 第 1 页 / 共 2 页
字号:

  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 + -