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

📄 rlistparams.c

📁 IBE是一种非对称密码技术
💻 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 + -