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

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

?? zdmwrite.c

?? IBE是一種非對稱密碼技術(shù)
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* Copyright 2003-2006, Voltage Security, all rights reserved.
 */
#include "vibe.h"
#include "environment.h"
#include "base.h"
#include "libctx.h"
#include "securemail.h"
#include "zdm.h"
#include "idobj.h"
#include "policy.h"
#include "derhelp.h"
#include "oidlist.h"
#include "errorctx.h"

/* Given a ZDM template, build the header and footer to the ZDM data.
 * <p>This function will allocate two buffers, one to hold the header,
 * another the footer. It is the responsibility of the caller to free
 * that memory.
 * <p>The policy, storage, and transport contexts will almost certainly
 * not be needed. But because this function will call VtEncodeIdentity,
 * include them int the arg list so that the contexts to use are
 * explicitly passed to the Encode function.
 * <p>This routine does no argument checking. It is the responsibility
 * of the caller not to make mistakes.
 *
 * @param libCtx The libCtx to use (to allocate, for instance).
 * @param obj
 * @param writeCtx
 * @param header Where the function will deposit the pointer to the
 * allocated memory containing the header.
 * @param headerLen Where the function will deposit the length of the
 * header.
 * @param footer Where the function will deposit the pointer to the
 * allocated memory containing the footer.
 * @param footerLen Where the function will deposit the length of the
 * footer.
 * @return an int, 0 if the function completed successfully or a
 * non-zero error code.
 */
static int VOLT_CALLING_CONV BuildZDMHeaderFooterAlloc VOLT_PROTO_LIST ((
   VoltLibCtx *libCtx,
   VoltSecureMailObject *obj,
   VoltSecureMailWriteCtx *writeCtx,
   VtPolicyCtx policyCtx,
   VtStorageCtx storageCtx,
   VtTransportCtx transportCtx,
   VtItem *zdmTemplate,
   unsigned char **header,
   unsigned int *headerLen,
   unsigned char **footer,
   unsigned int *footerLen
));

int VoltOldZDMWriteInit (
   VtZDMObject zdmObj,
   VtPolicyCtx policyCtx,
   VtStorageCtx storageCtx,
   VtTransportCtx transportCtx,
   VtRandomObject random
   )
{
  int status;
  VoltZDMObject *zObj = (VoltZDMObject *)zdmObj;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  VOLT_SET_FNCT_LINE (fnctLine)
  status = VoltZDMWriteInit (
    (VtSecureMailObject)(zObj->localCtx), policyCtx, storageCtx,
    transportCtx, random);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, 0, zdmObj, status, 0, 0,
    (char *)0, "VoltOldZDMWriteInit", fnctLine, (char *)0)

  return (status);
}

int VoltOldZDMWriteUpdate(
   VtZDMObject zdmObj,
   VtRandomObject random,
   unsigned char *inputData,
   unsigned int inputDataLen,
   unsigned char *message,
   unsigned int bufferSize,
   unsigned int *messageLen
   )
{
  int status;
  VoltZDMObject *zObj = (VoltZDMObject *)zdmObj;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  VOLT_SET_FNCT_LINE (fnctLine)
  status = VoltSecureMailWriteUpdate (
    (VtSecureMailObject)(zObj->localCtx), random, inputData, inputDataLen,
    message, bufferSize, messageLen);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, 0, zdmObj, status, 0, 0,
    (char *)0, "VoltOldZDMWriteUpdate", fnctLine, (char *)0)

  return (status);
}

int VoltOldZDMWriteFinal (
   VtZDMObject zdmObj,
   VtRandomObject random,
   unsigned char *inputData,
   unsigned int inputDataLen,
   unsigned char *message,
   unsigned int bufferSize,
   unsigned int *messageLen
   )
{
  int status;
  VoltZDMObject *zObj = (VoltZDMObject *)zdmObj;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  VOLT_SET_FNCT_LINE (fnctLine)
  status = VoltSecureMailWriteFinal (
    (VtSecureMailObject)(zObj->localCtx), random, inputData, inputDataLen,
    message, bufferSize, messageLen);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, 0, zdmObj, status, 0, 0,
    (char *)0, "VoltOldZDMWriteFinal", fnctLine, (char *)0)

  return (status);
}

int VoltZDMWriteInit (
   VtSecureMailObject secureMailObj,
   VtPolicyCtx policyCtx,
   VtStorageCtx storageCtx,
   VtTransportCtx transportCtx,
   VtRandomObject random
   )
{
  int status;
  unsigned int index, elementLen, newLineLen, headerLen, footerLen;
  VoltSecureMailObject *obj = (VoltSecureMailObject *)secureMailObj;
  VoltSecureMailWriteCtx *writeCtx = (VoltSecureMailWriteCtx *)(obj->localCtx);
  VoltLibCtx *libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
  VoltPolicyCtx *pCtx;
  unsigned char *header = (unsigned char *)0;
  unsigned char *footer = (unsigned char *)0;
  VtItem *getItem = (VtItem *)0;
  unsigned char *newLine =
    writeCtx->itemArray[VOLT_WRITE_SM_ITEM_NEW_LINE].data;
  char *contentType = VOLT_DEFAULT_CONTENT_TYPE;
  VtBase64Info b64Info;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  newLineLen = writeCtx->itemArray[VOLT_WRITE_SM_ITEM_NEW_LINE].len;

  do
  {
    /* Get the ZDM template out of the policy ctx. If there is no
     * policy ctx, error.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_PROVIDER_USE;
    if (policyCtx == (VtPolicyCtx)0)
      break;

    pCtx = (VoltPolicyCtx *)policyCtx;

    /* Get the ZDR template.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = pCtx->PolicyGetInfoAlloc (
      policyCtx, VOLT_POLICY_GET_ZERO_DOWNLOAD_TEMPLATE,
      (Pointer)0, (Pointer *)&getItem);
    if (status != 0)
      break;

    /* If the policy provider has no template, error.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_ZDM_TEMPLATE;
    if (getItem == (VtItem *)0)
      break;

    /* If this is ZDM, Init subordinate objects. If this is ZDM from
     * SecureMail or SecureFile, there are no subordinate objects.
     */
    if (obj->p7SignedData != (VtPkcs7Object)0)
    {
      b64Info.base64BlockSize = 76;
      b64Info.newLineCharacter = VT_BASE64_NEW_LINE_LF;
      if (writeCtx->itemArray[VOLT_WRITE_SM_ITEM_NEW_LINE].len == 2)
        b64Info.newLineCharacter = VT_BASE64_NEW_LINE_CR_LF;
      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,
        &(obj->base64));
      if (status != 0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtPkcs7WriteInit (
        obj->p7SignedData, policyCtx, storageCtx, transportCtx, random);
      if (status != 0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtPkcs7WriteInit (
        obj->p7EnvelopedData, policyCtx, storageCtx, transportCtx, random);
      if (status != 0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtEncodeInit (obj->base64);
      if (status != 0)
        break;
    }

    /* If there's no content type, use the default.
     */
    if ( (obj->contentInfo.data == (unsigned char *)0) &&
         (obj->formatType != VOLT_MESSAGE_FORMAT_ZDM_ATTACHMENT) )
    {
      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_MEMORY;
      obj->contentInfo.data = (unsigned char *)Z2Malloc (
        VOLT_DEFAULT_CONTENT_TYPE_LEN + 1, 0);
      if (obj->contentInfo.data == (unsigned char *)0)
        break;
      Z2Memcpy (
        obj->contentInfo.data, contentType, VOLT_DEFAULT_CONTENT_TYPE_LEN);
      obj->contentInfo.data[VOLT_DEFAULT_CONTENT_TYPE_LEN] = 0;
      obj->contentInfo.len = VOLT_DEFAULT_CONTENT_TYPE_LEN;
    }

    /* If this is an attachment, get rid of the "regular" headers and
     * footers.
     */
    if (obj->formatType == VOLT_MESSAGE_FORMAT_ZDM_ATTACHMENT)
    {
      for (index = VOLT_WRITE_SM_HEAD_INDEX_START + 1;
           index <= VOLT_WRITE_SM_HEAD_INDEX_END; ++index)
        writeCtx->itemArray[index].len = 0;

      for (index = VOLT_WRITE_SM_FOOT_INDEX_START;
           index <= VOLT_WRITE_SM_FOOT_INDEX_END; ++index)
        writeCtx->itemArray[index].len = 0;
    }

    /* The ZDM headers and footers need info from the encoded sender
     * and recipients, so call this function after P7 Inits, so the
     * objects are ready.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = BuildZDMHeaderFooterAlloc (
      libCtx, obj, writeCtx, policyCtx, storageCtx, transportCtx,
      getItem, &header, &headerLen, &footer, &footerLen);
    if (status != 0)
      break;

    /* If this is an attachment, the footer has an extra line return.
     */
    if (obj->formatType == VOLT_MESSAGE_FORMAT_ZDM_ATTACHMENT)
    {
      Z2Memmove (
        writeCtx->itemArray[VOLT_WRITE_SM_ITEM_END_MSG].data,
        writeCtx->itemArray[VOLT_WRITE_SM_ITEM_END_MSG].data + newLineLen,
        writeCtx->itemArray[VOLT_WRITE_SM_ITEM_END_MSG].len - newLineLen);
      writeCtx->itemArray[VOLT_WRITE_SM_ITEM_END_MSG].len -= newLineLen;
    }

    /* How much header and footer data will we be writing out?
     */
    for (index = VOLT_WRITE_SM_HEAD_INDEX_START;
         index <= VOLT_WRITE_SM_HEAD_INDEX_END; ++index)
    {
      /* Add in the length of the actual data to write out.
       * If there is data to write out, add a newLine.
       */
      elementLen = writeCtx->itemArray[index].len;
      if (elementLen != 0)
        elementLen += newLineLen;
      writeCtx->prelimLen += elementLen;
    }

    for (index = VOLT_WRITE_SM_FOOT_INDEX_START;
         index <= VOLT_WRITE_SM_FOOT_INDEX_END; ++index)
    {
      /* Add in the length of the actual data to write out.
       * If there is data to write out, add a newLine.
       */
      elementLen = writeCtx->itemArray[index].len;
      if (elementLen != 0)
        elementLen += newLineLen;
      writeCtx->trailLen += elementLen;
    }

    obj->state = VOLT_SECURE_MAIL_STATE_WRITE_INIT;

  } while (0);

  if (getItem != (VtItem *)0)
    pCtx->PolicyGetInfoFree (policyCtx, (Pointer)getItem);

  if (header != (unsigned char *)0)
    Z2Free (header);
  if (footer != (unsigned char *)0)
    Z2Free (footer);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, 0, secureMailObj, status, 0, errorType,
    (char *)0, "VoltZDMWriteInit", fnctLine, (char *)0)

  return (status);
}

#define VOLT_ZDM_TEMPLATE_NUM_TERMS  3

typedef struct
{
  int start;
  int finish;
  int index;
} SearchT;

static int VOLT_CALLING_CONV FindSort VOLT_PROTO_LIST ((
   VoltLibCtx *libCtx, char **terms, unsigned int termCount, 
   SearchT *search, int *count, char *templateData
));

static int VOLT_CALLING_CONV AddZDMHeaderFooterData VOLT_PROTO_LIST ((
   VoltLibCtx *libCtx,
   VoltSecureMailObject *obj,
   VoltSecureMailWriteCtx *writeCtx,
   int headerFooter,
   char *theData,
   unsigned int theDataLen
));

static int VOLT_CALLING_CONV BuildZDMDataFromMETA VOLT_PROTO_LIST ((
   VoltLibCtx *libCtx,
   VoltSecureMailObject *obj,
   VoltSecureMailWriteCtx *writeCtx,
   int headerFooter
));

static int VOLT_CALLING_CONV BuildZDMDataFromSCRIPT VOLT_PROTO_LIST ((
   VoltLibCtx *libCtx,
   VoltSecureMailObject *obj,
   VoltSecureMailWriteCtx *writeCtx,
   int headerFooter
));

static int VOLT_CALLING_CONV BuildZDMDataFromFORM VOLT_PROTO_LIST ((
   VoltLibCtx *libCtx,
   VoltSecureMailObject *obj,
   VoltSecureMailWriteCtx *writeCtx,
   VtPolicyCtx policyCtx,
   VtStorageCtx storageCtx,
   VtTransportCtx transportCtx,
   int headerFooter
));

static int BuildZDMHeaderFooterAlloc(
   VoltLibCtx *libCtx,
   VoltSecureMailObject *obj,
   VoltSecureMailWriteCtx *writeCtx,
   VtPolicyCtx policyCtx,
   VtStorageCtx storageCtx,
   VtTransportCtx transportCtx,
   VtItem *zdmTemplate,
   unsigned char **header,
   unsigned int *headerLen,
   unsigned char **footer,
   unsigned int *footerLen
   )
{
  int status, index, indexT, count, headerFooter;
  char *begin, *end;
  SearchT search[VOLT_ZDM_TEMPLATE_NUM_TERMS];
  char *terms[VOLT_ZDM_TEMPLATE_NUM_TERMS] =
    { "$(META)", "$(SCRIPT)", "$(FORM)" };
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  *header = (unsigned char *)0;
  *headerLen = 0;
  *footer = (unsigned char *)0;
  *footerLen = 0;

  headerFooter = 0;

  do
  {
    /* First, find the terms in the template.
     */
    Z2Memset (&search, 0, sizeof (search));
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = FindSort (
      libCtx, terms, VOLT_ZDM_TEMPLATE_NUM_TERMS,
      search, &count, (char *)(zdmTemplate->data));
    if (status != 0)
      break;

    /* There must be META and FORM.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_ZDM_TEMPLATE;
    if ( (search[0].index == -1) || (search[2].index == -1) )
      break;

    /* Write out the data up to the first tag. Then do that tag. Then
     * write the data after that tag up to the next. Then that tag. And
     * then up to the last tag, that tag and any data after.
     */
    begin = (char *)(zdmTemplate->data);
    for (index = 0; index < count; ++index)
    {
      for (indexT = 0; indexT < VOLT_ZDM_TEMPLATE_NUM_TERMS; ++indexT)
      {
        if (search[indexT].index != index)
          continue;

        end = (char *)(zdmTemplate->data + search[indexT].start);
        break;
      }

      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = AddZDMHeaderFooterData (
        libCtx, obj, writeCtx, headerFooter,
        begin, (unsigned int)(end - begin));
      if (status != 0)
        break;

      /* Place the data for the tag.
       */
      if (indexT == 0)
      {
        VOLT_SET_FNCT_LINE (fnctLine)
        status = BuildZDMDataFromMETA (libCtx, obj, writeCtx, headerFooter);
      }
      else if (indexT == 1)
      {
        VOLT_SET_FNCT_LINE (fnctLine)
        status = BuildZDMDataFromSCRIPT (libCtx, obj, writeCtx, headerFooter);
      }
      else
      {
        VOLT_SET_FNCT_LINE (fnctLine)
        status = BuildZDMDataFromFORM (
          libCtx, obj, writeCtx, policyCtx, storageCtx, transportCtx, 0);
        headerFooter = 1;
      }
      if (status != 0)
        break;

      begin = (char *)(zdmTemplate->data + search[indexT].finish);
    }
    if (status != 0)
      break;

    end = (char *)(zdmTemplate->data + zdmTemplate->len);
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = AddZDMHeaderFooterData (
      libCtx, obj, writeCtx, headerFooter, begin, (unsigned int)(end - begin));

  } while (0);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久夜色精品国产欧美乱极品| 国产大陆亚洲精品国产| 色8久久人人97超碰香蕉987| 中文字幕一区二区三区在线不卡 | 国产精品一区二区在线播放 | 欧美一区二区成人| 久久精品国内一区二区三区| 欧美精品一区视频| 成人动漫av在线| 一区二区三区免费网站| 欧美群妇大交群的观看方式| 免费精品视频在线| 中文字幕av免费专区久久| 99riav一区二区三区| 亚洲成人免费在线| 日韩欧美一级二级三级久久久| 国产剧情一区在线| 亚洲日本欧美天堂| 日韩三级在线免费观看| 成人性生交大片| 亚洲成人久久影院| 久久久五月婷婷| 欧美亚洲国产一区二区三区va| 奇米888四色在线精品| 国产精品亲子伦对白| 欧美午夜在线观看| 国产老妇另类xxxxx| 亚洲成人在线网站| 中文字幕av资源一区| 欧美精品三级在线观看| 国产成人免费视频| 日韩精品乱码免费| 国产精品久久久久aaaa樱花| 欧美日韩在线一区二区| 国产精一品亚洲二区在线视频| 亚洲另类在线视频| 久久人人97超碰com| 欧美日产在线观看| 成人黄色国产精品网站大全在线免费观看 | 亚洲区小说区图片区qvod| 日韩国产高清在线| 国产福利一区二区三区视频| 麻豆成人在线观看| 成人亚洲一区二区一| 在线观看一区二区视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美日韩国产精品成人| 美女在线观看视频一区二区| 欧美xxxx老人做受| 成a人片国产精品| 亚洲国产中文字幕在线视频综合| 色婷婷精品久久二区二区蜜臂av | 丝袜诱惑亚洲看片| 精品第一国产综合精品aⅴ| 国产精品一品二品| 亚洲乱码精品一二三四区日韩在线| 在线这里只有精品| 久久9热精品视频| 国产精品久久久久国产精品日日| 91久久久免费一区二区| 男人的天堂亚洲一区| 国产三级欧美三级日产三级99 | 欧美美女bb生活片| 国产白丝精品91爽爽久久 | 欧美体内she精高潮| 老司机一区二区| 中文字幕一区二区三区av| 欧美美女直播网站| 成人av在线播放网站| 午夜av区久久| 中文字幕中文字幕在线一区| 欧美剧情片在线观看| 岛国av在线一区| 日韩不卡在线观看日韩不卡视频| 国产精品色一区二区三区| 制服丝袜日韩国产| 色先锋资源久久综合| 激情小说欧美图片| 亚洲成人资源网| 中文字幕一区二区三区四区不卡| 日韩欧美的一区| 欧美日韩一区二区三区四区五区| 欧美日产国产精品| 日韩成人免费电影| 国产精品乱人伦| 日韩一区二区电影在线| 色爱区综合激月婷婷| 国产精品18久久久久久vr| 亚洲地区一二三色| 亚洲美女免费在线| 亚洲国产精品高清| 精品国产a毛片| 日韩一区二区免费电影| 欧美色图一区二区三区| 91免费版在线| 不卡欧美aaaaa| 丰满少妇久久久久久久| 精品制服美女丁香| 免费黄网站欧美| 天天免费综合色| 国产精品久久久久四虎| 欧美日韩午夜在线视频| 亚洲a一区二区| 精品对白一区国产伦| 国产成人av电影在线观看| 日韩欧美久久久| 国产98色在线|日韩| 亚洲精品视频一区| 久久这里只精品最新地址| 成人免费看视频| 麻豆91在线播放免费| 亚洲免费在线看| 欧美日韩www| 91福利国产成人精品照片| 成人黄色电影在线| 国产成人日日夜夜| 成人黄色电影在线 | 一区二区三区四区五区视频在线观看| 精品久久久久久久久久久久包黑料| 欧美一区在线视频| 日韩欧美卡一卡二| 久久久久一区二区三区四区| 精品国产免费一区二区三区香蕉| 欧美大片在线观看| 精品国产凹凸成av人导航| 久久久久国产免费免费| 欧美激情综合五月色丁香 | 亚洲h在线观看| 日韩和欧美一区二区三区| 免费观看30秒视频久久| 韩日精品视频一区| 丁香六月综合激情| 色综合久久88色综合天天6| 在线观看亚洲精品视频| 欧美精品一二三四| 久久久久99精品国产片| 国产欧美精品在线观看| 亚洲欧美偷拍卡通变态| 亚洲gay无套男同| 国产精品一级片| 色悠悠亚洲一区二区| 91精品国产色综合久久久蜜香臀| 日韩欧美高清dvd碟片| 欧美激情一区在线| 亚洲夂夂婷婷色拍ww47| 美美哒免费高清在线观看视频一区二区 | 一区二区三区中文在线观看| 日韩av一区二| 成人一区在线看| 欧美日韩在线直播| 久久精品视频在线免费观看| 亚洲欧洲综合另类在线 | 亚洲v精品v日韩v欧美v专区| 青青青爽久久午夜综合久久午夜| 夫妻av一区二区| 制服丝袜亚洲网站| 中文字幕欧美一区| 美女免费视频一区二区| 一本到不卡免费一区二区| 欧美一区二区三级| 亚洲人成7777| 国产美女一区二区三区| 欧美视频一区二区三区| 久久久久久夜精品精品免费| 一区二区三区高清不卡| 国产一区二区精品久久| 在线观看国产91| 久久久青草青青国产亚洲免观| 亚洲国产精品久久久久秋霞影院| 国产成人在线看| 91精品国产一区二区三区香蕉| 中文字幕日韩一区二区| 久久er精品视频| 欧美剧情电影在线观看完整版免费励志电影| 久久一留热品黄| 毛片av一区二区| 欧美日韩精品免费观看视频| 1000精品久久久久久久久| 韩国女主播成人在线| 欧美精品日韩精品| 国产欧美日韩亚州综合| 天天色 色综合| 欧美日韩精品一区二区在线播放 | 欧美性做爰猛烈叫床潮| 久久久久久一二三区| 麻豆91在线观看| 久久精品网站免费观看| 春色校园综合激情亚洲| 中文字幕欧美三区| 99在线精品一区二区三区| 国产欧美一区二区精品婷婷| 成人精品视频一区| 一区二区三区美女| 高清不卡一区二区| 久久久青草青青国产亚洲免观| 蜜臀av国产精品久久久久| 欧美老人xxxx18| 日韩激情一区二区| 欧美三区在线观看| 亚洲第一av色|