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

📄 dsaparamtype.c

📁 voltage 公司提供的一个开发Ibe的工具包
💻 C
📖 第 1 页 / 共 2 页
字号:

  VOLT_LOG_ERROR (
    obj->voltObject.libraryCtx, status, errorType, fnctLine,
    "SetDSAParameters", (char *)0)

  return (status);
}

int AddDSAParametersMpInt (
   VoltParameterObject *obj,
   VoltMpInt *primeP,
   VoltMpInt *subprimeQ,
   VoltMpInt *baseG,
   VoltMpInt *hVal,
   unsigned char *SEED,
   unsigned int seedLen,
   unsigned int counter
   )
{
  int status;
  unsigned int primePLen, subprimeQLen, baseGLen, hLen, sLen;
  unsigned int totalSize, offset;
  VoltLibCtx *libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
  VoltMpIntCtx *mpCtx = obj->mpCtx;
  unsigned char *buffer = (unsigned char *)0;
  VoltDsaParams *params;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  primePLen = 0;
  subprimeQLen = 0;
  baseGLen = 0;
  hLen = 0;
  sLen = 0;

  do
  {
    /* Add these params only if the object is not set yet.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_PARAM_OBJ;
    if (obj->paramData != (Pointer)0)
      break;

    /* How big will the byte arrays be? Use offset as a temp variable
     * (as someplace to put the sign).
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    mpCtx->MpIntToOctetString (
      primeP, &offset, (unsigned char *)0, 0, &primePLen);

    VOLT_SET_FNCT_LINE (fnctLine)
    mpCtx->MpIntToOctetString (
      subprimeQ, &offset, (unsigned char *)0, 0, &subprimeQLen);

    VOLT_SET_FNCT_LINE (fnctLine)
    mpCtx->MpIntToOctetString (
      baseG, &offset, (unsigned char *)0, 0, &baseGLen);
    if ( (hVal != (VoltMpInt *)0) && (SEED != (unsigned char *)0) &&
         (seedLen != 0) && (counter != 0) )
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      mpCtx->MpIntToOctetString (
        hVal, &offset, (unsigned char *)0, 0, &hLen);
      sLen = seedLen;
    }

    /* Allocate space for the struct and byte arrays.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    totalSize =
      sizeof (VoltDsaParams) + primePLen + subprimeQLen + baseGLen +
      hLen + sLen;
    buffer = (unsigned char *)Z2Malloc (totalSize, 0);
    if (buffer == (unsigned char *)0)
      break;
    Z2Memset (buffer, 0, totalSize);

    params = (VoltDsaParams *)buffer;

    /* The pointers after the struct will point to byte arrays, no need
     * to worry about alignment.
     */
    offset = sizeof (VoltDsaParams);

    /* Set the fields.
     */
    params->primeP = primeP;
    params->subprimeQ = subprimeQ;
    params->baseG = baseG;
    params->paramInfo.primeP.data = buffer + offset;
    offset += primePLen;
    params->paramInfo.subprimeQ.data = buffer + offset;
    offset += subprimeQLen;
    params->paramInfo.baseG.data = buffer + offset;

    /* If there is FIPS material, point out where it should go.
     */
    if (sLen != 0)
    {
      offset += baseGLen;
      params->fipsInfo.SEED.data = buffer + offset;
      offset += sLen;
      params->fipsInfo.hVal.data = buffer + offset;
    }

    /* Place the values as byte arrays.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->MpIntToOctetString (
      primeP, &offset, params->paramInfo.primeP.data, primePLen,
      &(params->paramInfo.primeP.len));
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->MpIntToOctetString (
      subprimeQ, &offset, params->paramInfo.subprimeQ.data, subprimeQLen,
      &(params->paramInfo.subprimeQ.len));
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->MpIntToOctetString (
      baseG, &offset, params->paramInfo.baseG.data, baseGLen,
      &(params->paramInfo.baseG.len));
    if (status != 0)
      break;

    if (sLen != 0)
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      status = mpCtx->MpIntToOctetString (
        hVal, &offset, params->fipsInfo.hVal.data, hLen,
        &(params->fipsInfo.hVal.len));

      Z2Memcpy (params->fipsInfo.SEED.data, SEED, sLen);
      params->fipsInfo.SEED.len = sLen;

      params->fipsInfo.counter = counter;
    }

    /* Copy the pointers to the FIPS params struct.
     */
    params->fipsInfo.primeP.data = params->paramInfo.primeP.data;
    params->fipsInfo.primeP.len = params->paramInfo.primeP.len;
    params->fipsInfo.subprimeQ.data = params->paramInfo.subprimeQ.data;
    params->fipsInfo.subprimeQ.len = params->paramInfo.subprimeQ.len;
    params->fipsInfo.baseG.data = params->paramInfo.baseG.data;
    params->fipsInfo.baseG.len = params->paramInfo.baseG.len;

    obj->paramType =
      VOLT_PARAM_ALG_DSA | VOLT_PARAM_TYPE_CONTENTS |
      VOLT_PARAM_TYPE_PARAMS | VOLT_PARAM_TYPE_DATA;
    obj->paramData = (Pointer)params;
    obj->ParamDataDestroy = DSAParameterDataDestroy;
    obj->CopyParams = DSACopyParams;

    status = 0;

  } while (0);

  /* If successful, we're done.
   */
  if (status == 0)
    return (0);

  /* If error, clean up some things.
   */
  if (buffer != (unsigned char *)0)
    Z2Free (buffer);

  VOLT_LOG_ERROR (
    (VtLibCtx)libCtx, status, errorType, fnctLine,
    "AddDSAParametersMpInt", (char *)0)

  return (status);
}

void DSAParameterDataDestroy (
   Pointer paramObj,
   Pointer ctx
   )
{
  VoltParameterObject *obj = (VoltParameterObject *)paramObj;
  VoltLibCtx *libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
  VoltDsaParams *params = (VoltDsaParams *)obj->paramData;
  VoltMpIntCtx *mpCtx;

  if (params == (VoltDsaParams *)0)
    return;

  /* Destroy each of the MPInt's.
   */
  if (params->primeP != (VoltMpInt *)0)
  {
    mpCtx = (VoltMpIntCtx *)(params->primeP->mpCtx);
    mpCtx->DestroyMpInt (&(params->primeP));
  }
  if (params->subprimeQ != (VoltMpInt *)0)
  {
    mpCtx = (VoltMpIntCtx *)(params->subprimeQ->mpCtx);
    mpCtx->DestroyMpInt (&(params->subprimeQ));
  }
  if (params->baseG != (VoltMpInt *)0)
  {
    mpCtx = (VoltMpIntCtx *)(params->baseG->mpCtx);
    mpCtx->DestroyMpInt (&(params->baseG));
  }

  /* Now free up the memory of the params struct.
   */
  Z2Free (params);
}

int DSACopyParams (
   Pointer sourceParamObj,
   Pointer destParamObj
   )
{
  int status;
  VoltParameterObject *src = (VoltParameterObject *)sourceParamObj;
  VoltParameterObject *dest = (VoltParameterObject *)destParamObj;
  VoltDsaParams *params = (VoltDsaParams *)(src->paramData);
  VoltMpIntCtx *mpCtx;
  VoltMpInt *primeP = (VoltMpInt *)0;
  VoltMpInt *subprimeQ = (VoltMpInt *)0;
  VoltMpInt *baseG = (VoltMpInt *)0;
  VoltMpInt *hVal = (VoltMpInt *)0;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    dest->paramType = src->paramType;

    /* Do we need to copy the mpCtx.
     */
    if (dest->mpCtx == (VoltMpIntCtx *)0)
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtCloneObject (
        (Pointer)(src->mpCtx), (Pointer *)&(dest->mpCtx));
      if (status != 0)
        break;
    }
    mpCtx = dest->mpCtx;

    /* Build new MpInt's from the old.
     */
    if (params->primeP != (VoltMpInt *)0)
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      status = mpCtx->CreateMpInt ((Pointer)mpCtx, &primeP);
      if (status != 0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = mpCtx->MpIntToMpInt (params->primeP, primeP);
      if (status != 0)
        break;
    }
    if (params->subprimeQ != (VoltMpInt *)0)
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      status = mpCtx->CreateMpInt ((Pointer)mpCtx, &subprimeQ);
      if (status != 0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = mpCtx->MpIntToMpInt (params->subprimeQ, subprimeQ);
      if (status != 0)
        break;
    }
    if (params->baseG != (VoltMpInt *)0)
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      status = mpCtx->CreateMpInt ((Pointer)mpCtx, &baseG);
      if (status != 0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = mpCtx->MpIntToMpInt (params->baseG, baseG);
      if (status != 0)
        break;
    }
    if (params->fipsInfo.hVal.data != (unsigned char *)0)
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      status = mpCtx->CreateMpInt ((Pointer)mpCtx, &hVal);
      if (status != 0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = mpCtx->OctetStringToMpInt (
        0, params->fipsInfo.hVal.data, params->fipsInfo.hVal.len, hVal);
      if (status != 0)
        break;
    }

    /* Add these copies to the copy object.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = AddDSAParametersMpInt (
      dest, primeP, subprimeQ, baseG, hVal,
      params->fipsInfo.SEED.data, params->fipsInfo.SEED.len,
      params->fipsInfo.counter);
    if (status != 0)
      break;

    dest->GetParamData = src->GetParamData;

  } while (0);

  mpCtx->DestroyMpInt (&hVal);

  if (status == 0)
    return (0);

  /* If error, destroy what we created.
   */
  mpCtx->DestroyMpInt (&primeP);
  mpCtx->DestroyMpInt (&subprimeQ);
  mpCtx->DestroyMpInt (&baseG);

  VOLT_LOG_ERROR (
    src->voltObject.libraryCtx, status, 0, fnctLine,
    "DSACopyParams", (char *)0)

  return (status);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -