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

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

?? zdmwrite.c

?? IBE是一種非對稱密碼技術(shù)
?? C
?? 第 1 頁 / 共 4 頁
字號:
   VtPolicyCtx policyCtx,
   VtStorageCtx storageCtx,
   VtTransportCtx transportCtx,
   VtItem *location
   )
{
  int status;
  unsigned int theTag, lengthLen, valueLen;
  UInt32 lenLo, lenHi;
  VtIdentityObject senderId;
  VtItem *getLocation;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  location->data = (unsigned char *)0;
  location->len = 0;

  do
  {
    /* If there's no sender ID Object, we can't get the location.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    senderId = writeCtx->senderIdRef;
    status = VT_ERROR_INVALID_ZDM_INPUT;
    if (senderId == (VtIdentityObject)0)
      break;

    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = GetZDRLocationFromIdentity (
      libCtx, senderId, policyCtx, storageCtx, transportCtx, &getLocation);
    if (status != 0)
      break;

    if (getLocation == (VtItem *)0)
      break;

    /* The location returned is TLV of some encoding.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VoltDecodeTagAndLen (
      libCtx, getLocation->data, getLocation->len, &theTag, &lengthLen,
      &lenLo, &lenHi, sizeof (unsigned int));
    if (status != 0)
      break;

    valueLen = (unsigned int)lenLo;

    /* Copy the location. We have to copy because we don't know if this
     * value is in the newId (which we'll destroy) or not.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    location->data = (unsigned char *)Z2Malloc (valueLen, 0);
    if (location->data == (unsigned char *)0)
      break;

    Z2Memcpy (location->data, getLocation->data + lengthLen + 1, valueLen);
    location->len = valueLen;
    status = 0;

  } while (0);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, libCtx, obj, status, 0, errorType,
    (char *)0, "GetSenderZDRLocationAlloc", fnctLine, (char *)0)

  return (status);
}

static int GetZDRLocationFromDistrict (
   VoltLibCtx *libCtx,
   VtDistrictObject district,
   VtItem **zdrLocation
   )
{
  int status;
  unsigned int index;
  VtX509ExtensionList *extList;
  unsigned char zdrLocationOid[VoltParamExtOldZdrOidBytesLen] =
    { VoltParamExtOldZdrOidBytes };
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  *zdrLocation = (VtItem *)0;

  do
  {
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtGetDistrictParam (
      district, VtDistrictParamExtensions, (Pointer *)&extList);
    if (status == VT_ERROR_GET_INFO_UNAVAILABLE)
    {
      status = 0;
      break;
    }
    if (status != 0)
      break;

    /* Run through the list of extensions, is the ZDR location
     * extension there?
     */
    for (index = 0; index < extList->count; ++index)
    {
      if (extList->extensions[index].oid.len !=
        VoltParamExtOldZdrOidBytesLen)
        continue;
      if (Z2Memcmp (
        extList->extensions[index].oid.data, zdrLocationOid,
        VoltParamExtOldZdrOidBytesLen) != 0)
        continue;

      /* This is the ZDR location extension, return the value.
       */
      *zdrLocation = &(extList->extensions[index].value);
      break;
    }

  } while (0);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, libCtx, district, status, 0, 0,
    (char *)0, "GetZDRLocationFromDistrict", fnctLine, (char *)0)

  return (status);
}
  
static int GetZDRLocationFromIdentity (
   VoltLibCtx *libCtx,
   VtIdentityObject idObj,
   VtPolicyCtx policyCtx,
   VtStorageCtx storageCtx,
   VtTransportCtx transportCtx,
   VtItem **zdrLocation
   )
{
  int status;
  VtDistrictObject getDist;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  *zdrLocation = (VtItem *)0;

  do
  {
    /* To get a ZDR location from an identity, get the district from
     * that identity, get the district extensions from that district,
     * and get the ZDR location extension from the extension list.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtGetIdentityParam (
      idObj, VtIdentityParamDistrict, (Pointer *)&getDist);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtObtainIBEParams (
      getDist, policyCtx, storageCtx, transportCtx);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = GetZDRLocationFromDistrict (libCtx, getDist, zdrLocation);
    if (status != 0)
      break;
      
  } while (0);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, libCtx, idObj, status, 0, 0,
    (char *)0, "GetZDRLocationFromIdentity", fnctLine, (char *)0)

  return (status);
}

#define ZFR_FORM_OPTION_PART_1  \
"           <option value=\""
#define ZFR_FORM_OPTION_PART_2  \
"?pub="
#define ZFR_FORM_OPTION_PART_3  \
"\">"
#define ZFR_FORM_OPTION_PART_4 \
" (Authenticated By "

#define ZFR_FORM_OPTION_PART_5  \
")"

#define ZFR_FORM_OPTION_PART_6  \
"</option>\r\n"

#define ZFR_FORM_OPTION_PART_1_LEN  26
#define ZFR_FORM_OPTION_PART_2_LEN   5
#define ZFR_FORM_OPTION_PART_3_LEN   2
#define ZFR_FORM_OPTION_PART_4_LEN  19
#define ZFR_FORM_OPTION_PART_5_LEN  1
#define ZFR_FORM_OPTION_PART_6_LEN  11

static int GetFormRecipientAlloc (
   VoltLibCtx *libCtx,
   VoltSecureMailObject *obj,
   VoltSecureMailWriteCtx *writeCtx,
   VtPolicyCtx policyCtx,
   VtStorageCtx storageCtx,
   VtTransportCtx transportCtx,
   VoltZDRLocationList *locationList,
   char *address,
   unsigned int addressLen,
   char **formRecips,
   unsigned int *formRecipsLen
   )
{
  int status;
  unsigned int index, count, emailLen, domainNameLen;
  unsigned int indexB, offset, encodingLen, b64Size, b64Len, urlLen;
  VtIdentityObject getId;
  VtDistrictObject distObj = (VtDistrictObject)0;
  VtAlgorithmObject b64 = (VtAlgorithmObject)0;
  unsigned char *encoding = (unsigned char *)0;
  unsigned char *b64Data = (unsigned char *)0;
  unsigned char *domainName = (unsigned char *)0;
  VtEmailInfo *emailInfo;
  char *part1 = ZFR_FORM_OPTION_PART_1;
  char *part2 = ZFR_FORM_OPTION_PART_2;
  char *part3 = ZFR_FORM_OPTION_PART_3;
  char *part4 = ZFR_FORM_OPTION_PART_4;
  char *part5 = ZFR_FORM_OPTION_PART_5;
  char *part6 = ZFR_FORM_OPTION_PART_6;
  VtBase64Info b64Info;
  VtItem *zdrLocation;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  *formRecips = (char *)0;
  *formRecipsLen = 0;
  b64Size = 0;

  do
  {
    /* We can't use the base64 object in the writeCtx, we need one that
     * will encode without carriage return/line feed.
     */
    b64Info.base64BlockSize = 76;
    b64Info.newLineCharacter = VT_BASE64_NO_NEW_LINE;
    b64Info.errorCheck = VT_BASE64_NO_ERROR_CHECK;
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtCreateAlgorithmObject (
      (VtLibCtx)libCtx, VtAlgorithmImplBase64, (Pointer)&b64Info, &b64);
    if (status != 0)
      break;

    /* For each recipient, get the encodedID, base64 encode it,
     * then URLEncode the B64.
     */
    offset = 0;
    for (index = 0; index < locationList->count; ++index)
    {
      /* This must contain an email address. Plus, the option will
       * contain the email address.
       */
      getId = locationList->recipientSelections[index];
      zdrLocation = &(locationList->location[index]);      

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtGetIdentityParam (
        getId, VtIdentityParam822Email, (Pointer *)&emailInfo);
      if (status != 0)
        continue;

      emailLen = Z2Strlen (emailInfo->emailAddress);

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtEncodeIdentity (
        getId, VT_ENCODE_IBCS_2_V_DISTRICT, policyCtx, storageCtx,
        transportCtx, (unsigned char *)0, 0, &encodingLen);
      if (status == 0)
        status = VT_ERROR_GENERAL;
      if (status != VT_ERROR_BUFFER_TOO_SMALL)
        break;

      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_MEMORY;
      encoding = (unsigned char *)Z2Realloc (encoding, offset + encodingLen);
      if (encoding == (unsigned char *)0)
        break;

      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtEncodeIdentity (
        getId, VT_ENCODE_IBCS_2_V_DISTRICT, policyCtx, storageCtx,
        transportCtx, encoding + offset, encodingLen, &encodingLen);
      if (status != 0)
        break;

      /* Get the district information for the identity. Currently 
       * We use domain names. We can use district names in future.
      */
      distObj = getId->district;
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtGetDistrictParam (
         distObj, VtDistrictParamDomainName, (Pointer *)&domainName);
      if (status != 0)
         break;
      domainNameLen = Z2Strlen (domainName);

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtEncodeInit (b64);
      if (status != 0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtEncodeFinal (
        b64, (VtRandomObject)0, encoding + offset, encodingLen,
        (unsigned char *)b64Data, b64Size, &b64Len);
      if (status == VT_ERROR_BUFFER_TOO_SMALL)
      {
        VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
        VOLT_SET_FNCT_LINE (fnctLine)
        status = VT_ERROR_MEMORY;
        b64Data = (unsigned char *)Z2Realloc (b64Data, b64Len);
        if (b64Data == (unsigned char *)0)
          break;
        b64Size = b64Len;

        VOLT_SET_ERROR_TYPE (errorType, 0)
        VOLT_SET_FNCT_LINE (fnctLine)
        status = VtEncodeFinal (
          b64, (VtRandomObject)0, encoding + offset, encodingLen,
          (unsigned char *)b64Data, b64Size, &b64Len);
      }
      if (status != 0)
        break;

      /* Part 3: URL Encode,
       * Replace   +   with   %3D
       *           /   with   %2F
       *           =   with   %3D
       */
      count = 0;
      for (indexB = 0; indexB < b64Len; ++indexB)
      {
        if ( (b64Data[indexB] == '+') || (b64Data[indexB] == '/') || 
             (b64Data[indexB] == '=') )
          count++;
      }

      urlLen = b64Len + (2 * count);

      /* Add in the lengths of the other elements that make up the
       * total option.
       */
      urlLen +=
        ZFR_FORM_OPTION_PART_1_LEN + ZFR_FORM_OPTION_PART_2_LEN +
        ZFR_FORM_OPTION_PART_3_LEN + ZFR_FORM_OPTION_PART_4_LEN +
        domainNameLen + ZFR_FORM_OPTION_PART_5_LEN +
        ZFR_FORM_OPTION_PART_6_LEN + zdrLocation->len + emailLen;
      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_MEMORY;
      encoding = (unsigned char *)Z2Realloc (encoding, offset + urlLen);
      if (encoding == (unsigned char *)0)
        break;

      /* Put in PART_1.
       */
      Z2Memcpy (encoding + offset, part1, ZFR_FORM_OPTION_PART_1_LEN);
      offset += ZFR_FORM_OPTION_PART_1_LEN;

      /* Next is the address (ZDR location).
       */
      Z2Memcpy (encoding + offset, zdrLocation->data, zdrLocation->len);
      offset += zdrLocation->len;

      /* Now PART_2.
       */
      Z2Memcpy (encoding + offset, part2, ZFR_FORM_OPTION_PART_2_LEN);
      offset += ZFR_FORM_OPTION_PART_2_LEN;

      /* Now comes the URL encoded data.
       */
      for (indexB = 0; indexB < b64Len; ++indexB)
      {
        if (b64Data[indexB] == '+')
        {
          encoding[offset] = (unsigned char)'%';
          encoding[offset + 1] = (unsigned char)'2';
          encoding[offset + 2] = (unsigned char)'B';
          offset += 3;
        }
        else if (b64Data[indexB] == '/')
        {
          encoding[offset] = (unsigned char)'%';
          encoding[offset + 1] = (unsigned char)'2';
          encoding[offset + 2] = (unsigned char)'F';
          offset += 3;
        }
        else if (b64Data[indexB] == '=')
        {
          encoding[offset] = (unsigned char)'%';
          encoding[offset + 1] = (unsigned char)'3';
          encoding[offset + 2] = (unsigned char)'D';
          offset += 3;
        }
        else
        {
          encoding[offset] = (unsigned char)(b64Data[indexB]);
          offset++;
        }
      }

      /* PART_3 is next.
       */
      Z2Memcpy (encoding + offset, part3, ZFR_FORM_OPTION_PART_3_LEN);
      offset += ZFR_FORM_OPTION_PART_3_LEN;

      /* The email address goes here.
       */
      Z2Memcpy (encoding + offset, emailInfo->emailAddress, emailLen);
      offset += emailLen;

      /* The district information goes here
	     */
      Z2Memcpy (encoding + offset, part4, ZFR_FORM_OPTION_PART_4_LEN);
      offset += ZFR_FORM_OPTION_PART_4_LEN;
      Z2Memcpy (encoding + offset, domainName, domainNameLen);
      offset += domainNameLen;
      Z2Memcpy (encoding + offset, part5, ZFR_FORM_OPTION_PART_5_LEN);
      offset += ZFR_FORM_OPTION_PART_5_LEN;

      /* Finally, PART_6.
  	   */
      Z2Memcpy (encoding + offset, part6, ZFR_FORM_OPTION_PART_6_LEN);
      offset += ZFR_FORM_OPTION_PART_6_LEN;

      status = 0;
    }
    if (status != 0)
      break;

    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_ZDM_INPUT;
    if (offset == 0)
      break;

    *formRecips = encoding;
    *formRecipsLen = offset;

    status = 0;

  } while (0);

  VtDestroyAlgorithmObject (&b64);

  if (b64Data != (unsigned char *)0)
    Z2Free (b64Data);

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

  /* If there was an error, free this memory.
   */
  if (encoding != (unsigned char *)0)
    Z2Free (encoding);

  VOLT_LOG_ERROR_INFO (
    libCtx, obj, status, 0, errorType,
    (char *)0, "GetFormRecipientAlloc", fnctLine, (char *)0)

  return (status);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产麻豆精品| 亚洲电影第三页| 欧美亚洲动漫精品| 国产91对白在线观看九色| 国产欧美1区2区3区| 欧美日韩亚洲综合一区二区三区| 国产精品77777| 亚洲裸体在线观看| 欧美激情一区三区| 欧美va亚洲va在线观看蝴蝶网| 欧美亚州韩日在线看免费版国语版| 国产一区二区三区四区五区美女 | 国内不卡的二区三区中文字幕 | 日本在线不卡一区| 一区二区在线观看视频| 国产精品国产馆在线真实露脸 | 欧美卡1卡2卡| 欧美视频在线一区| 日本大香伊一区二区三区| 久久精品国产亚洲aⅴ| 日本美女一区二区| 久草中文综合在线| 青青草国产精品亚洲专区无| 日韩激情中文字幕| 日本不卡一二三| 久久99热这里只有精品| 精品一区二区三区的国产在线播放| 亚洲成人高清在线| 青青草一区二区三区| 亚洲午夜久久久久久久久久久| 一区二区三区产品免费精品久久75| 亚洲欧美日韩电影| 五月天欧美精品| 蓝色福利精品导航| 国产成人激情av| 99精品国产热久久91蜜凸| 色综合天天天天做夜夜夜夜做| 色婷婷亚洲精品| av高清久久久| 欧美亚洲国产一区二区三区va| 欧美性受xxxx| 欧美亚洲免费在线一区| 欧美日韩国产区一| 91亚洲精品乱码久久久久久蜜桃| 色哟哟在线观看一区二区三区| 欧美性极品少妇| 国产精品丝袜一区| 日本欧美肥老太交大片| 在线视频一区二区三区| 久久久精品tv| 亚洲国产视频在线| 99精品在线观看视频| 久久久五月婷婷| 秋霞av亚洲一区二区三| 色婷婷一区二区三区四区| 日本一区二区三区在线不卡 | 日韩精品影音先锋| 亚洲电影激情视频网站| 一本大道久久a久久精品综合| 久久久久88色偷偷免费| 久久精品国产精品亚洲红杏| 欧美日韩国产一二三| 一区二区免费在线播放| 91原创在线视频| 国产精品私人自拍| 成人午夜精品一区二区三区| 久久久久久影视| 国产老妇另类xxxxx| 欧美成人艳星乳罩| 美国三级日本三级久久99| 欧美日韩国产经典色站一区二区三区 | 国产传媒日韩欧美成人| 久久精品日韩一区二区三区| 国产乱妇无码大片在线观看| 国产日韩在线不卡| 国产美女一区二区三区| 精品av综合导航| 国产剧情av麻豆香蕉精品| 久久尤物电影视频在线观看| 久久99久国产精品黄毛片色诱| 欧美精品v日韩精品v韩国精品v| 亚洲综合精品自拍| 欧美体内she精视频| 日韩精品视频网| 亚洲精品在线免费观看视频| 黄色日韩三级电影| 亚洲国产电影在线观看| 一本一道久久a久久精品综合蜜臀| 18成人在线视频| 欧美午夜精品久久久| 日本三级亚洲精品| 久久久久成人黄色影片| 99精品欧美一区二区蜜桃免费| 中文字幕五月欧美| 欧美视频一区二区| 蜜桃视频一区二区三区| 久久久www免费人成精品| 99riav久久精品riav| 青青草国产精品97视觉盛宴| 久久久综合精品| 99精品国产视频| 日韩国产一二三区| 国产色婷婷亚洲99精品小说| 色婷婷激情综合| 日本亚洲三级在线| 中文字幕一区二区三区在线不卡| 在线视频欧美精品| 精久久久久久久久久久| 亚洲日本一区二区三区| 欧美肥大bbwbbw高潮| 国产+成+人+亚洲欧洲自线| 亚洲婷婷综合久久一本伊一区| 欧美日韩成人在线一区| 狠狠网亚洲精品| 亚洲一区成人在线| 精品蜜桃在线看| 91麻豆蜜桃一区二区三区| 日韩精品1区2区3区| 日韩理论电影院| 久久综合久久综合久久| 欧美日韩一级视频| 成人午夜视频福利| 久久国内精品自在自线400部| 亚洲情趣在线观看| 久久久国产午夜精品| 91精品国产综合久久福利| 91丨九色porny丨蝌蚪| 国产九色sp调教91| 麻豆国产欧美日韩综合精品二区| 一区二区三区欧美日韩| 亚洲欧洲成人自拍| 国产日韩三级在线| 欧美va在线播放| 欧美一区二区三区爱爱| 欧美视频自拍偷拍| 色婷婷综合久久久中文一区二区 | 成人高清在线视频| 精品一区二区国语对白| 亚洲成人av一区二区三区| 亚洲精品高清视频在线观看| 国产精品电影院| 国产性做久久久久久| 亚洲精品一区二区三区四区高清| 欧美一区永久视频免费观看| 在线观看国产日韩| 91免费在线播放| 99九九99九九九视频精品| 成人免费黄色在线| 成人一区在线观看| 成人一区在线观看| 91原创在线视频| 色天使色偷偷av一区二区| 色婷婷亚洲综合| 在线视频一区二区三区| 欧洲日韩一区二区三区| 欧美在线观看禁18| 欧美剧情片在线观看| 欧美日本一区二区三区四区| 欧美人与禽zozo性伦| 日韩亚洲欧美成人一区| 欧美mv日韩mv国产网站app| 26uuu亚洲综合色欧美| 久久久精品国产99久久精品芒果| 国产欧美日韩麻豆91| 中文字幕在线不卡国产视频| 亚洲日本青草视频在线怡红院| 亚洲精品高清在线| 天堂久久久久va久久久久| 久久av老司机精品网站导航| 国产91色综合久久免费分享| 床上的激情91.| 欧美亚洲一区二区在线观看| 欧美一级爆毛片| 亚洲国产成人一区二区三区| 亚洲黄色免费网站| 久久精品国产网站| 不卡的av在线| 91精品国产综合久久精品图片 | 欧美三级资源在线| 在线成人av影院| 欧美激情在线看| 亚洲不卡一区二区三区| 国产成人亚洲综合a∨婷婷| 91视频www| 精品少妇一区二区三区| 国产精品日产欧美久久久久| 日精品一区二区| 成人黄色av网站在线| 欧美精品日韩一区| 欧美韩国日本一区| 日韩电影免费在线观看网站| 丰满少妇久久久久久久 | 精品一区二区三区在线播放视频| 国产成人在线色| 欧美日韩国产首页| 中文字幕的久久| 久久99精品一区二区三区三区| 一本高清dvd不卡在线观看| 久久天天做天天爱综合色| 亚洲成人av电影在线|