亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dsakeytype.c

?? IBE是一種非對稱密碼技術(shù)
?? C
?? 第 1 頁 / 共 3 頁
字號:
  spaceAvailable = 0;
  totalSize = sizeof (VtDSAPubKeyInfo);
  if (*bufferSize > sizeof (VtDSAPubKeyInfo))
    spaceAvailable = *bufferSize - sizeof (VtDSAPubKeyInfo);

  do
  {
    currentBuf = (unsigned char *)0;
    if (spaceAvailable != 0)
      currentBuf = (buffer + sizeof (VtDSAPubKeyInfo));

    /* Try to get the prime.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->MpIntToOctetString (
      pubKey->primeP, &sign, currentBuf, spaceAvailable, &primePLen);
    if (status == 0)
    {
      keyInfo->primeP.data = currentBuf;
      keyInfo->primeP.len = primePLen;
      currentBuf += primePLen;
      spaceAvailable -= primePLen;
    }
    else
    {
      /* If not 0, then status should be BufferTooSmall.
       */
      if (status != VT_ERROR_BUFFER_TOO_SMALL)
        break;
      spaceAvailable = 0;
    }
    totalSize += primePLen;

    /* Try to get the subprime.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->MpIntToOctetString (
      pubKey->subprimeQ, &sign, currentBuf, spaceAvailable, &subprimeQLen);
    if (status == 0)
    {
      keyInfo->subprimeQ.data = currentBuf;
      keyInfo->subprimeQ.len = subprimeQLen;
      currentBuf += subprimeQLen;
      spaceAvailable -= subprimeQLen;
    }
    else
    {
      /* If not 0, then status should be BufferTooSmall.
       */
      if (status != VT_ERROR_BUFFER_TOO_SMALL)
        break;
      spaceAvailable = 0;
    }
    totalSize += subprimeQLen;

    /* Try to get the base.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->MpIntToOctetString (
      pubKey->baseG, &sign, currentBuf, spaceAvailable, &baseGLen);
    if (status == 0)
    {
      keyInfo->baseG.data = currentBuf;
      keyInfo->baseG.len = baseGLen;
      currentBuf += baseGLen;
      spaceAvailable -= baseGLen;
    }
    else
    {
      /* If not 0, then status should be BufferTooSmall.
       */
      if (status != VT_ERROR_BUFFER_TOO_SMALL)
        break;
      spaceAvailable = 0;
    }
    totalSize += baseGLen;

    /* Try to get the public value.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->MpIntToOctetString (
      pubKey->pubValY, &sign, currentBuf, spaceAvailable, &pubValYLen);
    if (status == 0)
    {
      keyInfo->pubValY.data = currentBuf;
      keyInfo->pubValY.len = pubValYLen;
    }
    else
    {
      /* If not 0, then status should be BufferTooSmall.
       */
      if (status != VT_ERROR_BUFFER_TOO_SMALL)
        break;
    }
    totalSize += pubValYLen;

    *bufferSize = totalSize;

  } while (0);

  VOLT_LOG_ERROR_COMPARE (
    status, libCtx, status, 0, fnctLine, "BuildPubKeyInfo", (char *)0)

  return (status);
}

static int BuildPriKeyInfo (
   VoltKeyObject *obj,
   VoltDsaPrivateKey *priKey,
   unsigned char *buffer,
   unsigned int *bufferSize
   )
{
  int status;
  unsigned int totalSize, spaceAvailable;
  unsigned int sign, primePLen, subprimeQLen, baseGLen, pubValYLen, priValXLen;
  VoltLibCtx *libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
  VoltMpIntCtx *mpCtx = obj->mpCtx;
  VtDSAPriKeyInfo *keyInfo = (VtDSAPriKeyInfo *)buffer;
  unsigned char *currentBuf;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  /* spaceAvailable is how much space is currently available.
   */
  spaceAvailable = 0;
  totalSize = sizeof (VtDSAPriKeyInfo);
  if (*bufferSize > sizeof (VtDSAPriKeyInfo))
    spaceAvailable = *bufferSize - sizeof (VtDSAPriKeyInfo);

  do
  {
    currentBuf = (unsigned char *)0;
    if (spaceAvailable != 0)
      currentBuf = (buffer + sizeof (VtDSAPriKeyInfo));

    /* Try to get the prime.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->MpIntToOctetString (
      priKey->primeP, &sign, currentBuf, spaceAvailable, &primePLen);
    if (status == 0)
    {
      keyInfo->primeP.data = currentBuf;
      keyInfo->primeP.len = primePLen;
      currentBuf += primePLen;
      spaceAvailable -= primePLen;
    }
    else
    {
      /* If not 0, then status should be BufferTooSmall.
       */
      if (status != VT_ERROR_BUFFER_TOO_SMALL)
        break;
      spaceAvailable = 0;
    }
    totalSize += primePLen;

    /* Try to get the subprime.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->MpIntToOctetString (
      priKey->subprimeQ, &sign, currentBuf, spaceAvailable, &subprimeQLen);
    if (status == 0)
    {
      keyInfo->subprimeQ.data = currentBuf;
      keyInfo->subprimeQ.len = subprimeQLen;
      currentBuf += subprimeQLen;
      spaceAvailable -= subprimeQLen;
    }
    else
    {
      /* If not 0, then status should be BufferTooSmall.
       */
      if (status != VT_ERROR_BUFFER_TOO_SMALL)
        break;
      spaceAvailable = 0;
    }
    totalSize += subprimeQLen;

    /* Try to get the base.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->MpIntToOctetString (
      priKey->baseG, &sign, currentBuf, spaceAvailable, &baseGLen);
    if (status == 0)
    {
      keyInfo->baseG.data = currentBuf;
      keyInfo->baseG.len = baseGLen;
      currentBuf += baseGLen;
      spaceAvailable -= baseGLen;
    }
    else
    {
      /* If not 0, then status should be BufferTooSmall.
       */
      if (status != VT_ERROR_BUFFER_TOO_SMALL)
        break;
      spaceAvailable = 0;
    }
    totalSize += baseGLen;

    /* Try to get the private value.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->MpIntToOctetString (
      priKey->priValX, &sign, currentBuf, spaceAvailable, &priValXLen);
    if (status == 0)
    {
      keyInfo->priValX.data = currentBuf;
      keyInfo->priValX.len = priValXLen;
      currentBuf += priValXLen;
      spaceAvailable -= priValXLen;
    }
    else
    {
      /* If not 0, then status should be BufferTooSmall.
       */
      if (status != VT_ERROR_BUFFER_TOO_SMALL)
        break;
      spaceAvailable = 0;
    }
    totalSize += priValXLen;

    /* Try to get the public value. We don't store the pubVal with
     * the DSA private key. So if the pubVal is NULL we need to compute
     * it from the other values.
     */
    if (priKey->pubValY == (VoltMpInt *)0)
    {
      status =  SetObjectDSAPubFromPrivate (libCtx, mpCtx, priKey);
      if (status != 0)
        break;
    }
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->MpIntToOctetString (
      priKey->pubValY, &sign, currentBuf, spaceAvailable, &pubValYLen);
    if (status == 0)
    {
      keyInfo->pubValY.data = currentBuf;
      keyInfo->pubValY.len = pubValYLen;      
    }
    else
    {
      /* If not 0, then status should be BufferTooSmall.
       */
      if (status != VT_ERROR_BUFFER_TOO_SMALL)
        break;      
    }
    totalSize += pubValYLen;    

    *bufferSize = totalSize;

  } while (0);

  VOLT_LOG_ERROR_COMPARE (
    status, libCtx, status, 0, fnctLine, "BuildPriKeyInfo", (char *)0)

  return (status);
}

int VoltCloneDsaPubKey (
   Pointer sourceObject,
   Pointer *destObject
   )
{
  int status;
  VoltKeyObject *obj = (VoltKeyObject *)sourceObject;
  VtKeyObject newKey = (VtKeyObject)0;
  VtDSAPubKeyInfo *getInfo;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* We know the source is an object, is it a key object?
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_KEY_OBJ;
    if (VOLT_OBJECT_TYPE_NOT_EQUAL (sourceObject, VOLT_OBJECT_TYPE_KEY))
      break;

    /* Is the object a DSA public key.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_KEY_OBJ;
    if ((obj->keyType & VOLT_KEY_TYPE_MASK_ASYM_ALG) != VOLT_KEY_ALG_DSA)
      break;
    if ((obj->keyType & VOLT_KEY_TYPE_PUBLIC) == 0)
      break;

    /* Get the DSA key data out of the source object.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtGetKeyParam (
      (VtKeyObject)obj, VtKeyParamDSAPublic, (Pointer *)&getInfo);
    if (status != 0)
      break;

    /* Create and set a key object with this data.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtCreateKeyObject (
      obj->voltObject.libraryCtx, VtKeyImplMpCtx, (Pointer)(obj->mpCtx),
      &newKey);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtSetKeyParam (newKey, VtKeyParamDSAPublic, (Pointer)getInfo);
    if (status != 0)
      break;

    /* If all that worked, we have our clone.
     */
    *destObject = (Pointer)newKey;

  } while (0);

  /* If successful, return 0.
   */
  if (status == 0)
    return (0);

  /* If there was an error, destroy anything we created.
   */
  VtDestroyKeyObject (&newKey);

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

  return (status);
}

int VoltCloneDsaPriKey (
   Pointer sourceObject,
   Pointer *destObject
   )
{
  int status;
  VoltKeyObject *obj = (VoltKeyObject *)sourceObject;
  VtKeyObject newKey = (VtKeyObject)0;
  VtDSAPriKeyInfo *getInfo;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* We know the source is an object, is it a key object?
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_KEY_OBJ;
    if (VOLT_OBJECT_TYPE_NOT_EQUAL (sourceObject, VOLT_OBJECT_TYPE_KEY))
      break;

    /* Is the object a DSA private key.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_KEY_OBJ;
    if ((obj->keyType & VOLT_KEY_TYPE_MASK_ASYM_ALG) != VOLT_KEY_ALG_DSA)
      break;
    if ((obj->keyType & VOLT_KEY_TYPE_PRIVATE) == 0)
      break;

    /* Get the DSA key data out of the source object.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtGetKeyParam (
      (VtKeyObject)obj, VtKeyParamDSAPrivate, (Pointer *)&getInfo);
    if (status != 0)
      break;

    /* Create and set a key object with this data.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtCreateKeyObject (
      obj->voltObject.libraryCtx, VtKeyImplMpCtx, (Pointer)(obj->mpCtx),
      &newKey);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtSetKeyParam (
      newKey, VtKeyParamDSAPrivate, (Pointer)getInfo);
    if (status != 0)
      break;

    /* If all that worked, we have our clone.
     */
    *destObject = (Pointer)newKey;

  } while (0);

  /* If successful, return 0.
   */
  if (status == 0)
    return (0);

  /* If there was an error, destroy anything we created.
   */
  VtDestroyKeyObject (&newKey);

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

  return (status);
}

void DSAKeyDataDestroy (
   Pointer obj,
   Pointer ctx
   )
{
  VoltLibCtx *libCtx = (VoltLibCtx *)(((VoltObject *)obj)->libraryCtx);
  VoltMpIntCtx *mpCtx = ((VoltKeyObject *)obj)->mpCtx;
  VoltDsaPublicKey *pubKey = (VoltDsaPublicKey *)ctx;
  VoltDsaPrivateKey *priKey = (VoltDsaPrivateKey *)ctx;

  /* Is there anything to destroy?
   */
  if (ctx == (Pointer)0)
    return;

  /* If this is a private key, there's the private value to destroy.
   */
  if (priKey->type == VOLT_KEY_TYPE_PRIVATE)
  {
    if (priKey->priValX != (VoltMpInt *)0)
      mpCtx->DestroyMpInt (&(priKey->priValX));
  }
  else if (pubKey->type != VOLT_KEY_TYPE_PUBLIC)
  {
    /* It's not private, if it's not public, it's not something this
     * destructor can destroy.
     */
    return;
  }

  if (pubKey->primeP != (VoltMpInt *)0)
    mpCtx->DestroyMpInt (&(priKey->primeP));
  if (pubKey->subprimeQ != (VoltMpInt *)0)
    mpCtx->DestroyMpInt (&(priKey->subprimeQ));
  if (pubKey->baseG != (VoltMpInt *)0)
    mpCtx->DestroyMpInt (&(priKey->baseG));
  if (pubKey->pubValY != (VoltMpInt *)0)
    mpCtx->DestroyMpInt (&(priKey->pubValY));

  if (pubKey->keyItems != (VtDSAPubKeyInfo *)0)
    Z2Free (pubKey->keyItems);

  /* Now free up the memory of the key data struct.
   */
  Z2Free (ctx);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清精品在线| 欧美熟乱第一页| 不卡电影免费在线播放一区| 不卡的看片网站| 日本韩国精品在线| 欧美一区二区三区四区久久| 精品少妇一区二区三区| 99国产精品久久| 欧美一区二区啪啪| 亚洲精品一区二区三区蜜桃下载| 国产精品国产精品国产专区不蜜| 日韩理论电影院| 美女一区二区三区在线观看| 国产精品自在在线| 99国产精品视频免费观看| 欧美伦理影视网| 久久综合给合久久狠狠狠97色69| 亚洲色图在线播放| 天天影视涩香欲综合网| 国产成+人+日韩+欧美+亚洲| 色哟哟亚洲精品| 91精品国产全国免费观看| 中文字幕 久热精品 视频在线| 亚洲少妇最新在线视频| 久久精品99久久久| 成人美女视频在线看| 亚洲午夜三级在线| 岛国一区二区在线观看| 91极品视觉盛宴| 中文av一区二区| 亚洲6080在线| 99精品久久只有精品| 欧美日韩成人综合| 国产精品第13页| 日本不卡的三区四区五区| 激情五月播播久久久精品| 欧美在线观看你懂的| 久久综合久色欧美综合狠狠| 亚洲大片精品永久免费| 国产福利一区二区三区视频在线 | 亚洲成va人在线观看| 美女精品自拍一二三四| 91女人视频在线观看| 91精品免费观看| 亚洲永久精品大片| 国产精品自拍在线| 欧美一区二区三区视频免费 | 色屁屁一区二区| 欧美tk丨vk视频| 亚洲乱码中文字幕综合| 国产九色精品成人porny| 欧美三级电影在线观看| 国产精品二三区| 国产自产v一区二区三区c| 5月丁香婷婷综合| 日韩美女啊v在线免费观看| 国产精品77777竹菊影视小说| 欧美日韩国产片| 中文字幕免费在线观看视频一区| 日本在线不卡一区| 色婷婷综合久久久中文一区二区 | 九九国产精品视频| 欧美三级中文字幕在线观看| 日韩三级伦理片妻子的秘密按摩| 一区二区三区中文字幕精品精品 | 精品一区二区三区在线视频| 欧美日韩一区二区三区在线| 自拍偷在线精品自拍偷无码专区| 国内精品久久久久影院薰衣草| 欧美女孩性生活视频| 亚洲天堂免费看| 成人免费高清在线观看| 日本一区二区三区dvd视频在线| 美日韩一区二区三区| 欧美一卡二卡在线| 亚洲一区二区欧美激情| 欧美日韩中文字幕一区| 伊人一区二区三区| 91国产免费看| 亚洲卡通动漫在线| 国产精品香蕉一区二区三区| 久久亚洲一区二区三区明星换脸| 日本vs亚洲vs韩国一区三区| 欧美一区二区三区不卡| 午夜影院在线观看欧美| 91精品国产欧美一区二区18 | 成人av动漫网站| 国产精品人成在线观看免费| 岛国精品在线观看| 亚洲欧美一区二区久久| 91欧美激情一区二区三区成人| 亚洲视频资源在线| 成人在线视频首页| 久久一区二区三区国产精品| 国产一区视频在线看| 国产精品日韩成人| 91理论电影在线观看| 亚洲成人久久影院| 欧美久久久一区| 国产一区在线看| 亚洲国产经典视频| 在线观看网站黄不卡| 一区二区三区欧美日| 制服丝袜在线91| 精品一区二区三区香蕉蜜桃| 国产欧美一区二区三区沐欲| 成人国产精品免费观看动漫| 国产精品热久久久久夜色精品三区| 色偷偷久久一区二区三区| 亚洲第一福利一区| 国产亚洲欧洲997久久综合| 国产不卡视频在线观看| 亚洲曰韩产成在线| 91精品国产综合久久精品| 国产精品自产自拍| 一区免费观看视频| 91精品在线观看入口| 裸体健美xxxx欧美裸体表演| 中文字幕乱码一区二区免费| 色综合视频在线观看| 另类综合日韩欧美亚洲| 中文字幕不卡在线观看| 一本一道波多野结衣一区二区| 亚洲成国产人片在线观看| 日韩精品一区二区三区四区视频| 不卡免费追剧大全电视剧网站| 亚洲一区二区三区爽爽爽爽爽| 国产亚洲欧洲一区高清在线观看| 91美女视频网站| 九九热在线视频观看这里只有精品| 欧美国产乱子伦 | 亚洲精品美腿丝袜| 91精品国产一区二区三区香蕉| av在线免费不卡| 日韩专区在线视频| 精品日韩成人av| 91蜜桃在线观看| 日韩高清国产一区在线| 国产欧美精品一区二区色综合| av动漫一区二区| 久久99精品久久久久久久久久久久| 日本一区二区三区高清不卡| 日韩欧美国产系列| 93久久精品日日躁夜夜躁欧美| 精品亚洲aⅴ乱码一区二区三区| 中文字幕一区二区三区精华液| 亚洲激情一二三区| 美美哒免费高清在线观看视频一区二区| 国产精品1区2区| 蜜桃av一区二区三区电影| 久久久精品黄色| 欧美性xxxxxx少妇| 国产精品正在播放| 免费成人美女在线观看| 国产精品不卡在线观看| 欧美精品一区视频| 欧美探花视频资源| 99r精品视频| 国产最新精品精品你懂的| 日韩高清在线不卡| 亚洲精品综合在线| 中文字幕一区二区三区乱码在线| 欧美一区二区三区白人| 欧美日韩亚洲不卡| av电影在线观看完整版一区二区| 国内精品国产成人| 亚洲成人一区二区| 一区二区成人在线观看| 国产亚洲综合av| 久久九九久精品国产免费直播| 欧美疯狂做受xxxx富婆| 欧美三级中文字幕在线观看| 97久久久精品综合88久久| 国产成a人亚洲| 精品一二三四在线| 久久精品国产999大香线蕉| 婷婷丁香激情综合| 午夜欧美电影在线观看| ...xxx性欧美| 日韩美女啊v在线免费观看| 久久日韩粉嫩一区二区三区| 欧美日韩卡一卡二| 美美哒免费高清在线观看视频一区二区 | 国产69精品久久777的优势| 亚洲成av人片在线| 日韩无一区二区| 日韩午夜激情免费电影| 欧美体内she精视频| 欧美日韩久久一区| 欧美日韩国产首页在线观看| 欧美日韩欧美一区二区| 在线观看日产精品| 欧美日韩一级视频| 欧美在线短视频| 91精品国产一区二区| 6080国产精品一区二区| 精品国产乱码久久久久久1区2区| 欧美一区二区在线播放| 26uuu精品一区二区三区四区在线| 日韩免费高清视频|