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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? writeenv.c

?? IBE是一種非對稱密碼技術
?? C
?? 第 1 頁 / 共 3 頁
字號:
        break;
*/
      /* Currently, this code supports only block ciphers in CBC mode
       * with P5 padding. So this is how to compute outputLen.
       */
#if VT_64_BIT_LENGTH == 64
      encryptedDataLen = obj->dataLen64 / ((VtUInt64)(envCtx->blockSize));
#else
      encryptedDataLen = obj->dataLen / envCtx->blockSize;
#endif

      if (envCtx->blockSize != 1)
        encryptedDataLen++;

#if VT_64_BIT_LENGTH == 64
      encryptedDataLen *= (VtUInt64)(envCtx->blockSize);
#else
      encryptedDataLen *= envCtx->blockSize;
#endif

      /* Add in the total length of encrypted data so all other lengths
       * will be computed correctly. Then later on, subtract the amount
       * of encryptedData we will not output.
       */
#if VT_64_BIT_LENGTH == 64
      outputLen = (VtUInt64)VoltDetermineDerLengthLen (
        (UInt32)encryptedDataLen, (UInt32)(encryptedDataLen >> 32));
      outputLen += (1 + encryptedDataLen);
#else
      outputLen = VoltDetermineDerLengthLen (
        (UInt32)encryptedDataLen, (UInt32)0);
      outputLen += (1 + encryptedDataLen);
#endif

      /* Add in the symmetric encryption algID and the Data OID.
       * Don't add amounts twice.
       */
#if VT_64_BIT_LENGTH == 64
      encContentInfoLen =
        (VtUInt64)(envCtx->symEncryptorAlgId.len + VoltP7DataOidBytesLen + 2);
      encContentInfoLen += outputLen;
      outputLen = (VtUInt64)VoltDetermineDerLengthLen (
        (UInt32)encContentInfoLen, (UInt32)(encContentInfoLen >> 32));
      outputLen += encContentInfoLen + 1;
#else
      encContentInfoLen =
        outputLen + envCtx->symEncryptorAlgId.len + VoltP7DataOidBytesLen + 2;
      outputLen = VoltDetermineDerLengthLen (
        (UInt32)encContentInfoLen, (UInt32)0);
      outputLen += encContentInfoLen + 1;
#endif

      /* What is the SET OF for RecipientInfos going to be? Add in the
       * version.
       */
#if VT_64_BIT_LENGTH == 64
      outputLen += (VtUInt64)VoltDetermineDerLengthLen (
        (UInt32)(envCtx->totalRecipInfoLen), (UInt32)0);
      outputLen += (VtUInt64)(envCtx->totalRecipInfoLen + 4);
#else
      outputLen += VoltDetermineDerLengthLen (
        (UInt32)(envCtx->totalRecipInfoLen), (UInt32)0);
      outputLen += envCtx->totalRecipInfoLen + 4;
#endif

      /* Now add in the SEQUENCE that is the EnvelopedData.
       */
      seqLen = outputLen;
#if VT_64_BIT_LENGTH == 64
      outputLen += (VtUInt64)VoltDetermineDerLengthLen (
        (UInt32)outputLen, (UInt32)(outputLen >> 32));
#else
      outputLen += VoltDetermineDerLengthLen ((UInt32)outputLen, (UInt32)0);
#endif
      outputLen++;

      /* Next is the EXPLICIT.
       */
      expLen = outputLen;
#if VT_64_BIT_LENGTH == 64
      outputLen += (VtUInt64)VoltDetermineDerLengthLen (
        (UInt32)outputLen, (UInt32)(outputLen >> 32));
#else
      outputLen += VoltDetermineDerLengthLen ((UInt32)outputLen, (UInt32)0);
#endif
      outputLen++;

      /* Add in the EnvelopedData OID.
       */
      outputLen += VoltP7EnvDataOidBytesLen + 2;

      /* Now comes the overall SEQUENCE.
       */
      totalLen = outputLen;
#if VT_64_BIT_LENGTH == 64
      outputLen += (VtUInt64)VoltDetermineDerLengthLen (
        (UInt32)outputLen, (UInt32)(outputLen >> 32));
#else
      outputLen += VoltDetermineDerLengthLen ((UInt32)outputLen, (UInt32)0);
#endif
      outputLen++;

#if VT_64_BIT_LENGTH == 64
      /* Save the output len so we can return it if need be.
       */
      obj->outputLen64 = outputLen;
#endif

      /* If the actual inputLen is not the same as what the total input
       * len is going to be, subtract off the encryptedDataLen, then add
       * the actual inputLen.
       */
#if VT_64_BIT_LENGTH == 64
      if ((VtUInt64)inputDataLen != obj->dataLen64)
      {
        outputLen -= encryptedDataLen;

        index = inputDataLen / envCtx->blockSize;
        tempLen = index * envCtx->blockSize;

        outputLen += (VtUInt64)tempLen;

        VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
        VOLT_SET_FNCT_LINE (fnctLine)
        status = VT_ERROR_INVALID_INPUT_LENGTH;
        if (outputLen > (VtUInt64)0xffffffff)
          break;
      }
      *messageLen = (UInt32)outputLen;
#else
      if (inputDataLen != obj->dataLen)
      {
        outputLen -= encryptedDataLen;

        index = inputDataLen / envCtx->blockSize;
        tempLen = index * envCtx->blockSize;

        outputLen += tempLen;
      }
      *messageLen = (UInt32)outputLen;
#endif

      /* Is the buffer big enough?
       */
      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_BUFFER_TOO_SMALL;
      if (bufferSize < outputLen)
        break;

      /* If the caller passed NULL input with non-zero inputLen, they
       * just wanted the length, don't process.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      if ( (inputData == (unsigned char *)0) && (inputDataLen != 0) )
        break;

      /* The buffer is big enough, write out the prefix.
       * First, the 30 len of the overall contentInfo.
       */
#if VT_64_BIT_LENGTH == 64
      offset = VoltWriteDerTagAndLen (
        message, 0x30, (UInt32)totalLen, (UInt32)(totalLen >> 32));
#else
      offset = VoltWriteDerTagAndLen (
        message, 0x30, (UInt32)totalLen, (UInt32)0);
#endif
      /* Write out the EnvelopedData OID.
       */
      offset += VoltWriteDerTagAndLen (
        message + offset, 0x06, (UInt32)VoltP7EnvDataOidBytesLen, (UInt32)0);
      Z2Memcpy (message + offset, envDataOid, VoltP7EnvDataOidBytesLen);
      offset += VoltP7EnvDataOidBytesLen;
      /* EXPLICIT and SEQUENCE
       */
#if VT_64_BIT_LENGTH == 64
      offset += VoltWriteDerTagAndLen (
        message + offset, 0xA0, (UInt32)expLen, (UInt32)(expLen >> 32));
      offset += VoltWriteDerTagAndLen (
        message + offset, 0x30, (UInt32)seqLen, (UInt32)(seqLen >> 32));
#else
      offset += VoltWriteDerTagAndLen (
        message + offset, 0xA0, (UInt32)expLen, (UInt32)0);
      offset += VoltWriteDerTagAndLen (
        message + offset, 0x30, (UInt32)seqLen, (UInt32)0);
#endif
      /* version (we support only version 0).
       */
      message[offset] = 0x02;
      offset++;
      message[offset] = 0x01;
      offset++;
      message[offset] = 0x00;
      offset++;
      /* SET OF.
       */
      offset += VoltWriteDerTagAndLen (
        message + offset, 0x31,
        (UInt32)(envCtx->totalRecipInfoLen), (UInt32)0);
      /* Write out each of the RecipientInfos.
       */
      for (index = 0; index < envCtx->recipientsCount; ++index)
      {
        if (envCtx->recipients[index].recipInfoLen == 0)
          continue;

        VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
        VOLT_SET_FNCT_LINE (fnctLine)
        status = VT_ERROR_INVALID_INPUT;
        temp = message + offset;
        recipOutLen = i2d_Asn1RecipientInfo (
          envCtx->recipients[index].recipInfo, &temp);
        if (recipOutLen != envCtx->recipients[index].recipInfoLen)
          break;

        offset += recipOutLen;
        status = 0;
      }
      if (status != 0)
        break;

      /* Next is the EncryptedContentInfo.
       */
#if VT_64_BIT_LENGTH == 64
      offset += VoltWriteDerTagAndLen (
        message + offset, 0x30, (UInt32)encContentInfoLen,
        (UInt32)(encContentInfoLen >> 32));
#else
      offset += VoltWriteDerTagAndLen (
        message + offset, 0x30, (UInt32)encContentInfoLen, (UInt32)0);
#endif
      /* The OID of the data being encrypted: Data.
       */
      offset += VoltWriteDerTagAndLen (
        message + offset, 0x06, (UInt32)VoltP7DataOidBytesLen, (UInt32)0);
      Z2Memcpy (message + offset, dataOid, VoltP7DataOidBytesLen);
      offset += VoltP7DataOidBytesLen;
      /* The symmetric algorithm ID.
       */
      Z2Memcpy (
        message + offset, envCtx->symEncryptorAlgId.data,
        envCtx->symEncryptorAlgId.len);
      offset += envCtx->symEncryptorAlgId.len;
      /* EncryptedContent, IMPLICIT.
       */
#if VT_64_BIT_LENGTH == 64
      offset += VoltWriteDerTagAndLen (
        message + offset, 0x80, (UInt32)encryptedDataLen,
        (UInt32)(encryptedDataLen >> 32));
#else
      offset += VoltWriteDerTagAndLen (
        message + offset, 0x80, (UInt32)encryptedDataLen, (UInt32)0);
#endif
    }
    else if (obj->state == VOLT_P7_STATE_ENV_WRITE_UPDATE)
    {
      /* If Update, make sure the amount of input does not exceed the
       * dataLen.
       */
      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_INVALID_INPUT_LENGTH;
#if VT_64_BIT_LENGTH == 64
      if (((VtUInt64)inputDataLen + obj->inputLen64) > obj->dataLen64)
#else
      if ((inputDataLen + obj->inputLen) > obj->dataLen)
#endif
        break;

      /* Is the output buffer big enough?
       */
      *messageLen = 0;
      status = 0;
      if (inputDataLen == 0)
        break;

      tempLen = inputDataLen + envCtx->unprocessedDataLen;

      /* If this is the last of the input data, we'll call
       * EncryptFinal, if not, we'll call EncryptUpdate.
       */
#if VT_64_BIT_LENGTH == 64
      if (((VtUInt64)inputDataLen + obj->inputLen64) < obj->dataLen64)
#else
      if ((inputDataLen + obj->inputLen) < obj->dataLen)
#endif
      {
        /* For the moment, this does not work with NULL input, so
         * compute the required output size explicitly.
         */
/*        status = VtEncryptUpdate (
          envCtx->symEncryptor, random, (unsigned char *)0, inputDataLen,
          (unsigned char *)0, 0, &tempLen);
 */
        index = tempLen / envCtx->blockSize;
        tempLen = index * envCtx->blockSize;
        VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
        VOLT_SET_FNCT_LINE (fnctLine)
        status = VT_ERROR_BUFFER_TOO_SMALL;
      }
      else
      {
        /* For the moment, this does not work with NULL input, so
         * compute the required output size explicitly.
         */
/*        status = VtEncryptFinal (
          envCtx->symEncryptor, random, inputData, inputDataLen,
          (unsigned char *)0, 0, &tempLen);
 */
        index = tempLen / envCtx->blockSize;
        if (envCtx->blockSize != 1)
          index++;
        tempLen = index * envCtx->blockSize;
        VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
        VOLT_SET_FNCT_LINE (fnctLine)
        status = VT_ERROR_BUFFER_TOO_SMALL;
      }
      if (status == 0)
        status = VT_ERROR_GENERAL;
      if (status != VT_ERROR_BUFFER_TOO_SMALL)
        break;

      *messageLen = tempLen;
      if (bufferSize < tempLen)
        break;

      /* If the caller passed NULL input with non-zero inputLen, they
       * just wanted the length, don't process.
       */
      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      if ( (inputData == (unsigned char *)0) && (inputDataLen != 0) )
        break;

      offset = 0;
    }
    else
    {
      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_INVALID_CALL_ORDER;
      break;
    }

    /* Encrypt the bytes given.
     */
#if VT_64_BIT_LENGTH == 64
    if (((VtUInt64)inputDataLen + obj->inputLen64) < obj->dataLen64)
#else
    if ((inputDataLen + obj->inputLen) < obj->dataLen)
#endif
    {
      /* For the moment we need to compute unprocessedDataLen. When we
       * fix the NULL input issue, we can get rid of this.
       */
      tempLen = inputDataLen + envCtx->unprocessedDataLen;
      index = tempLen / envCtx->blockSize;
      envCtx->unprocessedDataLen = tempLen - (index * envCtx->blockSize);
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtEncryptUpdate (
        envCtx->symEncryptor, random, inputData, inputDataLen,
        message + offset, bufferSize - offset, &tempLen);
    }
    else
    {
      envCtx->unprocessedDataLen = 0;
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtEncryptFinal (
        envCtx->symEncryptor, random, inputData, inputDataLen,
        message + offset, bufferSize - offset, &tempLen);
    }
    if (status != 0)
      break;

#if VT_64_BIT_LENGTH == 64
    obj->inputLen64 += (VtUInt64)inputDataLen;
#else
    obj->inputLen += inputDataLen;
#endif

    obj->state = VOLT_P7_STATE_ENV_WRITE_UPDATE;

  } while (0);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, 0, pkcs7Obj, status, 0, errorType,
    (char *)0, "VoltP7EnvWriteUpdate", fnctLine, (char *)0)

  return (status);
}

int VoltP7EnvWriteFinal (
   VtPkcs7Object pkcs7Obj,
   VtRandomObject random,
   unsigned char *inputData,
   unsigned int inputDataLen,
   unsigned char *message,
   unsigned int bufferSize,
   unsigned int *messageLen
   )
{
  int status;
  VoltPkcs7Object *obj = (VoltPkcs7Object *)pkcs7Obj;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  *messageLen = 0;

  do
  {
    /* If there's no "predicted" len yet, the input len from this call
     * is that length.
     */
#if VT_64_BIT_LENGTH == 64
    if (obj->dataLen64 == 0)
      obj->dataLen64 = (VtUInt64)inputDataLen;
#else
    if (obj->dataLen == 0)
      obj->dataLen = inputDataLen;
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人sese在线| 一区二区三区在线免费| 国产精品日日摸夜夜摸av| 亚洲欧洲99久久| 日韩精品成人一区二区在线| 久久99热狠狠色一区二区| 国产成人精品免费在线| 欧美在线免费视屏| 日韩精品一区二区三区视频播放| 国产精品久久久久久久久免费桃花| 一区二区三区在线不卡| 精一区二区三区| 91最新地址在线播放| 欧美精品高清视频| 国产性色一区二区| 亚洲午夜三级在线| 国产精品羞羞答答xxdd | 久久综合色鬼综合色| 国产精品不卡一区| 乱一区二区av| 色婷婷av一区二区三区软件| 日韩精品综合一本久道在线视频| 亚洲免费av网站| 韩国av一区二区三区在线观看| 99精品在线免费| 欧美videos大乳护士334| 亚洲欧美偷拍三级| 韩国三级电影一区二区| 欧美视频自拍偷拍| 国产女人18毛片水真多成人如厕| 日韩国产欧美三级| 99国产一区二区三精品乱码| 精品国产一区二区国模嫣然| 亚洲无人区一区| 东方aⅴ免费观看久久av| 91精品国产色综合久久不卡电影 | 99vv1com这只有精品| 日韩欧美一区中文| 亚洲综合色自拍一区| 成人久久久精品乱码一区二区三区 | 久久久久久久久伊人| 日韩中文字幕区一区有砖一区| 波多野结衣精品在线| 久久综合色8888| 日本免费在线视频不卡一不卡二| 色婷婷精品久久二区二区蜜臂av| 国产偷v国产偷v亚洲高清| 日本成人在线看| 欧美色偷偷大香| 亚洲男同1069视频| 波多野结衣亚洲一区| 国产偷v国产偷v亚洲高清| 久久精品噜噜噜成人88aⅴ| 亚洲精品免费在线| 成人午夜在线视频| 国产午夜久久久久| 国内外成人在线视频| 欧美一区二区三区在线观看| 亚洲狠狠爱一区二区三区| 一本色道久久综合亚洲91 | 色综合亚洲欧洲| 最好看的中文字幕久久| 成人污污视频在线观看| 国产亚洲综合av| 国产在线精品一区二区三区不卡| 91精品国产欧美一区二区| 亚洲高清免费一级二级三级| 欧美亚洲国产一卡| 亚洲在线免费播放| 在线精品视频一区二区三四| 亚洲精品一卡二卡| 在线视频亚洲一区| 亚洲成av人影院| 欧美美女喷水视频| 日韩电影免费在线看| 欧美一区二区日韩一区二区| 亚洲国产精品综合小说图片区| 欧亚洲嫩模精品一区三区| 亚洲精品成人在线| 欧亚洲嫩模精品一区三区| 亚洲国产精品一区二区www在线| 91国内精品野花午夜精品| 亚洲精品欧美激情| 欧美日韩高清一区二区不卡| 天天影视涩香欲综合网| 777精品伊人久久久久大香线蕉| 日韩电影在线观看电影| 日韩久久久精品| 国产成人亚洲综合色影视| 亚洲国产成人在线| 99久久99久久精品国产片果冻| 亚洲欧美一区二区三区极速播放 | 日本免费新一区视频| 精品女同一区二区| 国产视频一区不卡| 99久久er热在这里只有精品15 | 在线播放国产精品二区一二区四区| 日韩中文字幕一区二区三区| 337p粉嫩大胆噜噜噜噜噜91av| 精品亚洲欧美一区| 亚洲国产成人在线| 欧美亚洲国产一区二区三区va | 国产三级精品视频| av在线不卡免费看| 日韩中文字幕区一区有砖一区| 欧美精品一区二区不卡| 9久草视频在线视频精品| 亚洲成人一区在线| 久久久国产精品午夜一区ai换脸| 99久久婷婷国产综合精品| 亚洲v日本v欧美v久久精品| 2023国产精品自拍| 色哟哟一区二区| 天天射综合影视| 日本一区二区免费在线| 欧美网站大全在线观看| 久久se精品一区精品二区| 中文字幕五月欧美| 在线不卡一区二区| 国产a精品视频| 肉肉av福利一精品导航| 国产欧美视频一区二区| 欧美自拍偷拍午夜视频| 狠狠色狠狠色综合日日91app| 亚洲视频狠狠干| 欧美成人伊人久久综合网| 色综合天天综合在线视频| 欧美成人女星排行榜| 色天使色偷偷av一区二区| 久久69国产一区二区蜜臀| 亚洲人精品午夜| 久久无码av三级| 欧美三级日韩在线| 成人av集中营| 久久国产精品露脸对白| 亚洲精品日韩综合观看成人91| 精品国产成人系列| 欧美亚洲日本国产| av爱爱亚洲一区| 国产在线精品一区二区 | 欧美电视剧在线观看完整版| 91色porny| 国产精品77777竹菊影视小说| 日韩一区精品视频| 亚洲精品五月天| 国产日韩欧美麻豆| 337p亚洲精品色噜噜噜| 91久久精品一区二区| 国产91在线观看| 伦理电影国产精品| 丝袜美腿亚洲一区二区图片| 中文字幕一区二区三区色视频 | 成人h精品动漫一区二区三区| 久久精品国产亚洲高清剧情介绍| 一区二区免费看| 中文字幕一区二区视频| 国产欧美日韩在线观看| 欧美成人vps| 91精品国产综合久久精品图片| 91性感美女视频| 本田岬高潮一区二区三区| 国产美女在线精品| 久久99精品一区二区三区| 香港成人在线视频| 一区二区三区四区乱视频| 成人黄色在线看| 国产精品白丝jk黑袜喷水| 国内精品嫩模私拍在线| 免费观看成人av| 日韩国产欧美三级| 午夜伦理一区二区| 婷婷夜色潮精品综合在线| 亚洲国产人成综合网站| 亚洲一区二区在线观看视频| 亚洲欧美激情在线| 亚洲视频免费观看| 亚洲男人的天堂一区二区| 日韩一区在线免费观看| 欧美国产综合色视频| 国产调教视频一区| 国产欧美日产一区| 欧美国产成人在线| 中文一区在线播放| 国产精品欧美一区喷水| 亚洲国产精品成人综合| 国产精品视频看| 国产精品久久久久久户外露出| 国产精品免费人成网站| 欧美国产日韩精品免费观看| 国产精品免费久久久久| 亚洲日穴在线视频| 亚洲国产精品久久久久秋霞影院| 亚洲国产日产av| 日本美女视频一区二区| 久久99精品久久久久久国产越南| 国产一区二区在线观看免费| 国产精品一区二区你懂的| 成人一区二区三区中文字幕| 成人av第一页| 欧日韩精品视频|